利用MATLAB的FFT函数,对特定信号进行频域分析。当特定信号为正弦信号时,频域分析结果正常。当特定信号为方形脉冲信号时,零频处幅值出现突变。
clear
clc
Fs=16;
N=128;
dt=1/Fs;
T=0:dt:(N-1)dt;
f=Fs/N(-N/2:1:N/2-1);
%方型脉冲
A=10;
w=0.5;
Xt=zeros(1,length(T));
Xt(floor(length(T)0.5w):floor(length(T)*w))=A;
% %正弦信号
% A=2;
% miu=11;
% Xt=A.sin(2pi*miu.*T)+1;
subplot(2,1,1)
plot(T,Xt,'b')
title('信号');
ylim([min(Xt)*0.9,max(Xt)*1.1])
%利用MATLAB的FFT函数
Y=fft(Xt,N);
Xf=abs(Y);
Xf=Xf/(N/2);
Xf(1)=Xf(1)/2;
Xf=fftshift(Xf);
subplot(2,1,2)
plot(f,Xf)
xlabel('Frequency: Hz')
ylabel('Amplitude')
根据理论,方形脉冲信号傅里叶变换之后,应当为抽样函数,不应该在零频处出现凹陷。
以下为正弦信号及频域分析结果:
以下为方形脉冲信号及频域分析结果:
零频处出现凹陷,就是因为FFT之后,对零频的幅值做了处理( 代码:Xf=Xf/(N/2);Xf(1)=Xf(1)/2;),但是这样处理对正弦信号没问题,为什么对方形脉冲信号就有问题了呢?
建议方波信号左右时间拉长一点
这个很好理解,信号的时域幅值不是关于0对称的,即信号有直流分量的,FFT后0频处的幅值表示的就是直流分量的幅值。
关于使用Matlab进行FFT的更多细节,请看我的博客: