如何对傅里叶复值进行下采样?

时间:2017-04-09 15:49:05

标签: signal-processing fft time-frequency

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

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

  1. 如果阵列的大小不是2的幂,则在末尾用0填充它,使其大小变为2的幂。
  2. 对填充的阵列执行FFT并将结果存储在数组x中。
  3. 对复杂数组x进行缩小采样,以匹配原始非填充数组的长度。
  4. 返回x
  5. 我遇到了第3步的问题。如果我省略步骤3并对函数调用的结果执行逆FFT,我得到初始填充数组,这意味着函数成功执行了步骤1和2.

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

    我可以使用哪些技术执行步骤3,同时仍然可以在逆FFT后恢复原始的非填充数组?

2 个答案:

答案 0 :(得分:1)

使用圆形Sinc内核插值来计算下采样点。 Sinc宽度是低通滤波器的宽度,其截止频率适合新的低采样采样率的抗混叠。

答案 1 :(得分:0)

如果您需要准确的结果,那么您可以使用Bluestein算法进行Chirp Z变换,以便在O(N log N)时间内计算烦人大小的DFT。

请参阅:https://en.wikipedia.org/wiki/Chirp_Z-transform

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