【问题标题】:There are different results when I take FFT sinc(t)当我采用 FFT sinc(t) 时有不同的结果
【发布时间】:2023-04-11 08:47:01
【问题描述】:

第一种情况:

%% Analytical calculation
syms t f
h = @(f) int(sinc(t)*exp(-1i*2*pi*f*t),t,-10,10);
subplot(2,1,1); fplot(real(h(f)),[-3 3]); grid; ylim([-3 3]);
subplot(2,1,2); fplot(imag(h(f)),[-3 3]); grid; ylim([-3 3]);

第二种情况:

%% Numerical calculation
N=100;
T = 10;
t = (2*(0:N-1)/N-1)*T;

x = sinc(t);
y = (fftshift(fft(x)));
figure;
subplot(2,1,1); plot((real(y)));
subplot(2,1,2); plot(imag(y));

为什么结果不同? 为什么第二种情况下不是矩形脉冲? absreal有什么区别,应该正确使用什么?

【问题讨论】:

    标签: matlab signal-processing fft dft


    【解决方案1】:

    简答

    在第二部分,替换你的行

    x = sinc(t);
    

    通过

    x = fftshift(sinc(t));
    

    使sinc 函数以时间原点为中心,这是第一个样本。

    长答案

    DFT (FFT) 假定时间原点位于第一个样本处,而不管您定义的时间轴 t 是什么。请注意,在您的代码中

    t = (2*(0:N-1)/N-1)*T;
    x = sinc(t);
    y = (fftshift(fft(x)));
    

    fft 函数对您的 t 变量一无所知。它只是将时间轴视为[0, 1, ..., numel(x)-1]。由于您的x 被定义为在观察窗口内居中的sinc(其主瓣在中间),DFT 将其解释为不以原点为中心的sinc,而是(循环)移动观察窗口的一半。

    您可能知道,时间偏移对应于在频域中乘以指数。对于 DFT,此属性适用于 循环 移位。

    因此,您得到的图与您预期的图不同,因为它已以一半的采样率乘以指数,减少到[1, -1, 1, -1, ...]。请注意图中的值是如何交替正负的。

    要解决这个问题,您需要定义以原点为中心的sinc,即在第一个样本处。所以主瓣的峰值和右半部分将出现在观察窗口的最左侧区域,而主瓣的左半部分将出现在最右侧区域。这可以通过将fftshift 应用到您的x 来非常简单地完成:

    x = fftshift(sinc(t));
    plot(x)
    

    那么 DFT 是

    y = (fftshift(fft((x))));
    subplot(2,1,1); plot((real(y)));
    subplot(2,1,2); plot(imag(y));
    

    【讨论】:

    • 谢谢兄弟!多谢兄弟!谢谢兄弟!
    猜你喜欢
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2017-09-28
    • 2017-11-09
    • 1970-01-01
    • 2018-09-05
    • 2022-01-07
    • 2021-05-31
    相关资源
    最近更新 更多