| |
相关语法:
Y = fft(X)
Y = fft(X,n)
Y = fft(X,[],dim)
Y = fft(X,n,dim)
定义如下:
相关的一个例子:
Fs = 1000; % 采样频率 T = 1/Fs; % 采样时间 L = 1000; % 总的采样点数 t = (0:L-1)*T; % 时间序列(时间轴) %产生一个幅值为0.7频率为50HZ正弦+另外一个信号的幅值为1频率为120Hz的正弦信号 x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); y = x + 2*randn(size(t)); % 混入噪声信号 plot(Fs*t(1:50),y(1:50)) %画出前50个点 title('Signal Corrupted with Zero-Mean Random Noise') xlabel('time (milliseconds)')

NFFT = 2^nextpow2(L); % 求得最接近总采样点的2^n,这里应该是2^10=1024
Y = fft(y,NFFT)/L; %进行fft变换(除以总采样点数,是为了后面精确看出原始信号幅值)
f = Fs/2*linspace(0,1,NFFT/2+1);%频率轴(只画到Fs/2即可,由于y为实数,后面一半是对称的)
% 画出频率幅度图形,可以看出50Hz幅值大概0.7,120Hz幅值大概为1.
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')

主要有两点注意的地方:
1、从公式上看,matlab的fft序号是从1到N,但是绝大多数教材上是从0到N-1。
2、Y=fft(x)之后,这个Y是一个复数,它的模值应该除以(length(x)2),才能得到各个频率信号实际幅值。