两个不同信号的傅里叶变换

时间:2012-12-09 09:23:55

标签: matlab time-series dft

我想生成一些数字来说明使用傅里叶变换进行时间序列分析的缺点。我的目的是显示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');

产: enter image description here

现在,我想表明他们的光谱具有非常相似的形状: enter image description here

这些是我想在matlab中重现的一些课堂笔记中的例子。但是,我很难再现第二个情节。任何人都可以建议如何使用提供的信息在matlab中生成第二个图?

1 个答案:

答案 0 :(得分:2)

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

  1. 在课堂笔记中,时域图的格式为t = 0t = 4(与t = 2不同)。
  2. 频域图仅显示正频率,频谱的一半。频率范围为0到20Hz,这意味着采样频率为40Hz。
  3. 能量必须保持不变,因此如果仅显示光谱的一半,则绘制的频率成分应乘以系数2。
  4. 也就是说,这是完整的代码(包括对时域图的修复):

    % # 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))
    

    时域图是:

    enter image description here

    和相应的频域图是:

    enter image description here