【问题标题】:inverse fast fourier transform for frequency range频率范围的快速傅立叶逆变换
【发布时间】:2013-03-27 01:24:27
【问题描述】:

我的问题是基于反 fft 从幅度谱 (fft) 中获取原始信号,但仅适用于某些频率范围。 8-12赫兹。有人可以帮我吗?我尝试使用:

xdft=fft(x); 
ixdft=ifft(xdft(a:b)), %where xdft(a:b) is |Y(f)| for freq 8-12 Hz.

但它不想工作。

【问题讨论】:

    标签: matlab fft ifft


    【解决方案1】:

    您可以将xdft 的所有值设置为零,除了您想要的值,即,

    xdft = fft(x);
    xdft = xdft(1:ceil(length(xdft) / 2));
    xdft(1:a) = 0;
    xdft(b+1:end) = 0;
    ixdft = ifft(xdft, 'symmetric');
    

    我只采用原始 FFT 数据的一半的原因是,您的结果将关于 Fs / 2(其中 Fs 是采样率)对称,并且如果您不对频率做同样的事情在中心的任何一侧,您都会得到一个复杂的信号。我没有手动对两边做同样的事情,而是取了一侧,修改了它,并告诉ifft 它必须通过附加你传递的镜像来重建整个频率范围的数据;这是通过使用 'symmetric' 选项调用它来完成的。

    如果您需要确定某个频率的 ab 应该是什么,您可以首先创建一个您已执行 FFT 的频率向量,然后找到您范围内的那些频率,就像这样:

    xdft = fft(x);
    xdft = xdft(1:ceil(length(xdft) / 2));
    f = linspace(0, Fs / 2, length(xdft));
    keepInd = f >= 8 & f <= 12; % Keep frequencies between 8 and 12 Hz
    xdft(~keepInd) = 0;
    

    请注意,在此示例中,我实际上完全省略了ab 这两个变量的使用,而是选择了逻辑索引,Fs 是采样率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      相关资源
      最近更新 更多