我试图找到非周期信号的傅里叶变换与它们的 FFT 之间的联系。因此,从一个基本示例开始,让我们采用一个宽度为 0.1s、幅度为 1 的矩形脉冲偏移 0.05。使用对应关系,我可以计算预期的频谱:
但是现在,当我使用以下 Matlab 代码生成信号时:
f_abt = 50e3;
x=0:1/f_abt:1;
y=zeros(1,length(x));
for ii=1:length(x)
if x(ii)<=.1
y(ii)=1;
end
end
并计算它的频谱,结果取决于信号的长度。因此,当我从上面生成的信号(1s 持续时间)计算单边频谱时,我得到:
然后,当我将信号长度设置为 2s 时(其他一切不变):
x=0:1/f_abt:2;
我想差异来自我使用的 FFT 算法。在进行 FFT 时,我通过 Nfft 对值进行归一化,因此当我改变信号长度时,我的幅度发生变化是完全有道理的。
我的问题是:我如何获得正确的频谱以及我如何知道它是正确的,例如,当我无法使用通信“手动”计算它时?我在寻找我的“真实”限时信号及其 FFT 和“理论”矩形脉冲之间的联系时遇到问题。
我用于计算单边光谱的代码:
function [f_xa, mag, phase] = calc_fft_f(ta, xa)
N_a = numel(xa);
fft_xa = fft(xa);
P2_norm = fft_xa/(N_a);
if (mod(N_a,2))
P1_norm_single = P2_norm(1:ceil(end/2));
P1_norm_single(2:end) = 2*P1_norm_single(2:end);
else
P1_norm_single = P2_norm(1:(end/2)+1);
P1_norm_single(2:end-1) = 2*P1_norm_single(2:end-1);
end
mag = abs(P1_norm_single);
phase = rad2deg(angle(P1_norm_single));
Fsa = 1/(ta(2)-ta(1));
f_xa = Fsa*(0:(length(mag)-1))/N_a;
end
提前致谢!