我遇到了 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;