两正弦加一噪声信号的频谱分析
《MATLAB R2016a完全自学一本通》455页,例14-19,下面的命令对一个以50Hz和120Hz为主要成分的信号进行傅里叶变换。
代码如下:
Fs=1000; T=1/Fs; L=1000; t=(0:L-1)*T; x=0.7*sin(2*pi*50*t)+sin(2*pi*120*t); y=x+2*randn(size(t)); subplot(121); plot(Fs*t(1:50),y(1:50)); title('原始信号'); xlabel('time (ms)'); NFFT=2^nextpow2(L); Y=fft(y,NFFT)/L; f=Fs/2*linspace(0,1,NFFT/2+1); subplot(122); plot(f,2*abs(Y(1:NFFT/2+1))); title('幅值谱'); xlabel('Frequency (Hz)'); ylabel('|Y(f)|');
结果图如下:
注释:
快速傅氏变换的点数n要取最接近数据长度的2的整数次方。命令是2^nextpow2(N),其中N是实际数据长度,因为这样的n可以使fft更快。比如N=1021,执行n=2^nextpow2(N)后,n=2^10=1024。
第二幅图中,因为要画单边幅值,所以×2。