【问题标题】:How to downsample Fourier complex values?如何对傅里叶复数值进行下采样?
【发布时间】:2017-09-04 15:30:07
【问题描述】:

免责声明:我不是信号处理专家。

我正在编写一个函数,该函数采用一维数组并对其执行快速傅立叶变换。以下是它的工作原理:

  1. 如果数组的大小不是 2 的幂,则在末尾用 0 填充,使其大小变为 2 的幂。
  2. 对填充数组执行 FFT 并将结果存储在数组 x 中。
  3. 对复数数组 x 进行下采样,以匹配原始未填充数组的长度。
  4. 返回x

第 3 步有问题。如果我省略第 3 步并对函数调用的结果执行逆 FFT,我会得到初始填充数组,这意味着函数成功执行了第 1 步和第 2 步。

我尝试通过使用线性插值进行下采样来实现步骤 3,但是当我使用 MatLab 对最终结果执行傅里叶逆变换时,我得到的结果与原始数组不等价。我需要使用的编程语言不是 MatLab,我只是使用MatLab来验证结果的正确性。

我可以使用哪些技术来执行第 3 步,同时仍然能够在逆 FFT 后取回原始的未填充数组?

【问题讨论】:

    标签: signal-processing fft time-frequency


    【解决方案1】:

    如果您需要准确的结果,则可以使用 Bluestein 的 Chirp Z 变换算法在 O(N log N) 时间内计算出令人讨厌的大小的 DFT。

    见:https://en.wikipedia.org/wiki/Chirp_Z-transform

    它不如 2 次方 FFT 快,但比在错误长度的 FFT 上插值要快得多(对于高精度)。

    【讨论】:

      【解决方案2】:

      使用圆形 Sinc 内核插值来计算下采样点。 Sinc 宽度将与具有适合抗混叠的截止频率的低通滤波器的宽度相同,以实现新的较低的下采样采样率。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-02
        • 2012-05-18
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多