用MATLAB进行谱分析时注意:
例:
N=8;
n=0:N-1;
xn=[4 3 2 6 7 8 9 0];
Xk=fft(xn)
→
Xk =
39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i 0 + 5.0000i -10.7782 - 6.2929i
(1)Xk与xn的维数相同,共有8个元素。Xk的第一个数对应于直流分量,即频率值为0。
(2)对周期信号做FFT分析时,幅值大小与FFT选择的点数有关,但不影响分析结果。在IFFT时已经做了处理。要得到真实的振幅值的大小,只要将得到的变换后结果乘以2除以N即可。这里指的是单边谱,如果是双边谱则是除以N。
(3)对非周期信号做FFT分析时,如果是双边边谱求得fft后/N是傅里叶级数,在傅里叶变换的频谱上体现是极小量,所以傅里叶变换的频谱指的是频谱密度,需要再除以f0=fs/N=1/NTs,所以是fft后/N再除以f0,最终是fft结果乘以Ts采样间隔。attention N是信号点数
例1:x=0.5sin(2pi15t)+2sin(2pi40t)。采样频率fs=100Hz,分别绘制N=128、1024点幅频图。
clf;
Ts=0.01;N=128; %采样频率和数据点数
fs=1/Ts;
n=0:N-1;t=n*Ts; %时间序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft(x,N); %对信号进行N点快速Fourier变换(这里的Nfft是等于Ndata的,Nfft<Ndata就是截断,>就是补零)
mag=abs(y); %求得Fourier变换后的振幅
f=n*fs/N; %频率序列 单位为Hz
subplot(2,2,1),plot(f,mag); %绘出双边谱随频率变化的振幅
axis([0 100 0 150]);
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;
subplot(2,2,2),plot(f(1:N/2),2/N*mag(1:N/2)); %绘出Nyquist频率之前随频率变化的振幅,单边谱,看真实幅值
axis([0 60 0 2]);
xlabel('频率/Hz');
ylabel('振幅');title('N=128');grid on;
%对信号采样数据为1024点的处理
Ts=0.01;N=1024;n=0:N-1;t=n*Ts;fs=1/Ts;
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信号
y=fft