irongreat 发表于 2010-10-6 22:06

为什么DetaF和理论公式不一直?

我也在做和把一个信号分解成谐波信号的过程?但是碰到一个问题,我觉得DETAF应该是
f(2)-f(1),但按这个计算,合成信号和原有信号对不上,为什么是2*(f(2)-f(1))/Fs就可以?

clc;
clear all;
Fs = 1000;                  % Sampling frequency
T = 1/Fs;                     % Sample time
L = 1000;                     % Length of signal
t = (0:L-1)*T;                % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t) + 0.8*sin(2*pi*200*t)++ 0.8*sin(2*pi*250*t);
y =2*randn(size(t));   % Sinusoids plus noise
%y=x;

figure;
plot(Fs*t(1:50),y(1:50));
title('Signal Corrupted with Zero-Mean Random Noise');
xlabel('time (milliseconds)');
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);
% DetaF=2*(f(2)-f(1))*NFFT/Fs;
%DetaF=Fs/NFFT;
DetaF=2*(f(2)-f(1))/Fs;
%DetaF=f(2)-f(1);

% Plot single-sided amplitude spectrum.
figure;
plot(f,2*abs(Y(1:NFFT/2)))
title('Single-Sided Amplitude Spectrum of y(t)');
xlabel('Frequency (Hz)');
ylabel('|Y(f)|');

% Note : 验算傅立叶展开合理性
for i=1:NFFT/2
   y1(i)=0;   
   for j=1:NFFT/2
    y1(i)=y1(i)+Y(j)*L*DetaF*exp(2.*pi*1i*f(j)*t(i));
   end
   y1(i)=real(y1(i));
end

figure;
plot(Fs*t(1:50),y(1:50),'r-',Fs*t(1:50),y1(1:50),'b-');

mao 发表于 2010-10-7 08:14

f向量你除了个2

irongreat 发表于 2010-10-8 09:42

不好意思啊,过去总被FFT出来结果要乘以一个系数搞得有点晕,昨天让这边小博士查了下,终于明白了,FFT的频域结果要处以N才是真实的频谱,此外是单边和双边的缘故,如果用单边,要乘以2
页: [1]
查看完整版本: 为什么DetaF和理论公式不一直?