同一个傅里叶变换程序,正弦信号能够得到正确结果,为什么换为方形脉冲信号后结果不对呢?

问题遇到的现象和发生背景

利用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')

运行结果及报错内容

根据理论,方形脉冲信号傅里叶变换之后,应当为抽样函数,不应该在零频处出现凹陷。

以下为正弦信号及频域分析结果:

img

以下为方形脉冲信号及频域分析结果:

img

我的解答思路和尝试过的方法

零频处出现凹陷,就是因为FFT之后,对零频的幅值做了处理( 代码:Xf=Xf/(N/2);Xf(1)=Xf(1)/2;),但是这样处理对正弦信号没问题,为什么对方形脉冲信号就有问题了呢?

我想要达到的结果

建议方波信号左右时间拉长一点

这个很好理解,信号的时域幅值不是关于0对称的,即信号有直流分量的,FFT后0频处的幅值表示的就是直流分量的幅值。
关于使用Matlab进行FFT的更多细节,请看我的博客:

Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析_MatlabFans_Mfun的博客-CSDN博客_matlab快速傅里叶变换求频谱 1. 定义信号在频域能够呈现出时域不易发现的性质和规律,傅里叶变换是将信号从时域变换到频域,便于在频域对信号的特性进行分析。离散傅里叶变换 (DFT),是傅里叶变换在时域和频域上的离散呈现形式,通俗的说就是将经过采样的有限长度时域离散采样序列变换为等长度的频域离散采样序列,通过对变换得到的频域采样序列进行适当的换算和处理,可以得到信号的频谱(频率-幅值曲线和频率-相位曲线)。离散傅里叶变换 (DFT)的定义为:X(k)=DFT[x(n)]=∑n=0N−1x(n)e−j2πNnkX(k) = {\rm{ https://blog.csdn.net/MatlabFans_Mfun/article/details/113486391