不同相位延迟的 SIN 波的 FFT

信息处理 fft 信号分析 傅里叶变换 傅里叶级数
2022-02-09 11:04:32

我遇到了 FFT 的一个特点,这让我有些困惑。我简单地总结了 101 个正弦波并使用这个 matlab 脚本进行了 FFT:

clear all
f=1e9;                                 % Centre Frequency 1GHz
df=2.5e6;                                % Carrier Frequency 2.5MHz
Time=linspace(-100e-9,100e-9,1000);      % Region of time to simulate over
delay=0;
Voltage=Time.*0;                        % Initialise Voltages to zero 
for loop=-50:50                         % Sum 101 carrier Frequencies
    Voltage=Voltage+sin(2.*pi().*(f+df.*loop).*(Time-delay));
end  
figure(1)                               %Plot Time dependent response
subplot(2,1,1)
plot(Time,Voltage)
subplot(2,1,2)                               %Plot Frequency Content 
dt=Time(2)-Time(1);
frequency=linspace(-0.5/dt,0.5/dt,1000);
spectrum=fftshift(fft(Voltage));
plot(frequency,abs(spectrum))

输出与我预期的一样,具有正确的频率内容: 但是,如果我只是添加一个显着的时间延迟(通过重新运行脚本,使得主要的相长干扰波瓣消失在计算窗口之外)频率内容由此产生的时间轨迹塌陷为两个峰值。 然而,时间轨迹仍然是 101 个正弦波的总和,尽管现在由于引入的延迟而异相??直觉上,我预计轨迹的绝对频率内容会被保留,并且只有被延迟修改的相位。经过反思,我也许可以理解必须基于能量守恒来修改频率内容,但是任何人都可以合理化这里发生的事情吗?在此处输入图像描述
delay=150e-9;在此处输入图像描述

2个回答

您没有查看正弦波总和的频率内容。您正在查看正弦波上矩形窗口的频率内容,并且该窗口(FFT 长度)短于所有正弦波周期的最小公倍数。

在窗口内不正交的信号可以在该窗口内部分或完全相互抵消。发生的事情是,您选择了一个长度的窗口,使得每个正弦波几乎可以被“正确”相位的下一个较高和较低频率的正弦曲线对完全抵消。末端的那些是唯一没有夹在中间的,因此不会被取消。

我已将@hotpaw2 答案标记为正确,但经过进一步思考,我发布了一个简单的视觉解释,说明这里发生了什么。

不要采用复杂脉冲的 FFT,而是考虑一个简单的脉冲,如下图所示。通过应用傅立叶级数展开,这个脉冲(或任何脉冲)也可以从原始问题中定义的无限组正交正弦波的加权和创建。

在此处输入图像描述

现在很明显,红色窗口内的脉冲 FFT 将包含脉冲的所有光谱内容(如原始问题的第一张图所示),而绿色窗口的 F​​FT 将不包含任何光谱内容完全没有(如原始问题的第二个图所示)。即使每个窗口内的轨迹仍然可以通过相同的傅立叶级数展开从一组正交的正弦波的总和来构造,也是如此。FFT 窗口将窗口内的轨迹转换为不同的正交正弦波集,如@hotpaw2 答案中所述。用于构造脉冲的原始傅立叶级数展开及其相应的频率分量不再相关。