如何採用fft分析信號的頻譜

首先給一個matlab自帶的example


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); 
y = x + 2*randn(size(t));     % Sinusoids plus noise
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+1);

% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1))) 
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
針對以上程序,你會發現在用fft求信號的幅度譜的時候要乘以2,除以N

乘以2是因爲我們研究的實信號的頻譜是偶函數,但是負頻率是沒有意義的,乘以2是爲了把雙邊譜轉換爲單邊頻譜。

因爲IDFT中含有1/N這一項,X(K)/N代表信號x分解後各頻點的係數。

還有,當補零後,fft後的值不是除以N,而是除以L,這又怎麼解釋呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章