【问题标题】:fft/ifft: Sampling Frequency and Length of Signalfft/ifft:信号的采样频率和长度
【发布时间】:2012-06-11 15:20:22
【问题描述】:

这部分摘自 Matlab fft 文档:

Fs = 30;                    % Sampling frequency
T = 1/Fs;                   % Sample time
L = 130;                    % Length of signal
t = (0:L-1)*T;              % Time vector

x = sin(2*pi*1*t);          % 1 Hz sinus

plot(real(ifft(abs(fft(x))))); % fft then ifft

% Fs = 30, L = 60 / 90 / 120 ... : ok
% Fs = 20, L = 60 / 80 / 100 ... : ok
% Fs = 30, L = 50 / 70 / 80 ... : not ok

在我看来,只要信号的长度是采样频率的倍数,正弦曲线就会被正确重建(除了一些偏移),例如这里Fs = 30, L = 60

但是,如果例如Fs = 30, L = 80(不是倍数),结果看起来很奇怪:

这种行为正确吗?为什么会发生这种情况,我该如何避免这种情况?只是丢弃信号的一部分以使长度“适合”采样频率?

【问题讨论】:

    标签: matlab signal-processing fft ifft


    【解决方案1】:

    当您在 ifft 中使用 abs(fft()) 时,您仅使用信号的幅度并丢弃所需的相位信息。

    使用整个信号(去掉abs):

    plot(real(ifft(fft(x)))); % fft then ifft
    

    【讨论】:

    • 谢谢,解决了。不过,我不明白为什么需要相位信息。你能详细说明一下吗?为什么在某些情况下它可以正常工作(除了班次)?
    • 检查 fft(或 dft)定义。 fft(X) 结果中的频率为 (Fs/2)*(0...(N/2)+1)/(N/2+1)。要达到您的 1Hz 正弦,您需要找到 k 使得 (Fs/2)*k/(N/2+1) = 1。当 k 是整数(整数)时,不需要相位(延迟)来表示1Hz,当 N/Fs(或您的情况下的 L/Fs)为整数时会发生这种情况。如果不是 ,则 FFT 输出中没有 1Hz,算法“表示”1Hz 的值 k 接近 1Hz 加上一个将其延迟到 1Hz 的相位值。我希望我的解释有些清楚。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 2015-12-01
    • 2020-01-13
    • 1970-01-01
    • 2014-08-15
    • 2013-07-02
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多