【问题标题】:Fourier transform of two distinct signals两个不同信号的傅里叶变换
【发布时间】:2026-01-09 08:20:03
【问题描述】:

我想生成一些数字来说明使用傅立叶变换进行时间序列分析的缺点。我的目标是表明 2 个明显非常不同的信号具有非常相似形状的光谱。首先,我创建我的系列:

t =  0:.01:2;
y = sin(2.*pi.*5.*t)+sin(2.*pi.*10.*t);
r1 = find(t <= 1);
r2 = find(t > 1);
y2a =  sin(2.*pi.*5.*t(r1));
y2b = sin(2.*pi.*10.*t(r2));
y2 = [y2a,y2b];

figure(1);
subplot(211);
plot(t,y,'k');
subplot(212);
plot(t,y2,'k');

制作:

现在,我想证明它们的光谱具有非常相似的形状:

这些示例取自我想在 matlab 中重现的一些课堂笔记。但是,我在复制第二个情节时遇到了困难。谁能建议如何使用提供的信息在 matlab 中生成第二个图?

【问题讨论】:

  • 你试过doc fft 吗?这也会给你更多的提示:*.com/questions/10758315/…
  • @Kate 这不是问题,但 t 应该是从 0 到 4,根据您的课堂笔记,但您已将其定义为从 0 到 2。
  • 好的,所以说我把它从 0 改成 4,我将如何重现第二个情节?

标签: matlab time-series dft


【解决方案1】:

重现这些情节相当容易。但是,请注意以下几点:

  1. 在你的课堂笔记中,时域图是从t = 0t = 4(不像你那样t = 2)。
  2. 频域图仅显示正频率,频谱的一半。频率范围为 0 到 20Hz,即采样频率为 40Hz。
  3. 能量的数量必须保持不变,因此如果只显示一半频谱,则绘制的频率分量应乘以 2 倍。

也就是说,这是完整的代码(包括对您的时域图的修复):

% # Time domain plots
fs = 40;
t = 0:(1 / fs):4;
y1 = sin(2 * pi * 5 * t)+ sin(2 * pi * 10 * t);
y2 = [sin(2 * pi * 5 * t(t <= 2)), sin(2 * pi * 10 * t(t > 2))];

figure
subplot(2, 1, 1), plot(t, y1)
subplot(2, 1, 2), plot(t, y2)

% # Frequency domain plots
Fy1 = abs(ifft(y1));
Fy2 = abs(ifft(y2));
N = numel(t);
idx = 1:numel(Fy1) / 2;    % # Indices of half the spectrum
f = fs * (0:(N - 1)) / N;  % # Actual frequencies

figure
subplot(2, 1, 1), plot(f(idx), 2 * Fy1(idx))
subplot(2, 1, 2), plot(f(idx), 2 * Fy2(idx))

时域图是:

对应的频域图为:

【讨论】:

  • 太好了,非常感谢。我使用周期图函数来计算功率谱,但就像你说的那样,这些图只显示了正频率,这引起了一些混乱。
  • @Kate 啊,我在频率图中发现了一个错误:该图只显示了一半的频谱,因此一切(包括峰值)都必须是两倍高,以保持相同的数量的能量。因此,我通过将绘制的 Fy1Fy2 相乘来修改我的答案。
最近更新 更多