2017-04-09 34 views
2

声明:我不是信号处理专家。如何下采样傅立叶复数值?

我正在写一个函数,它需要一维数组并对其执行快速傅立叶变换。以下是它的工作方式:

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

我遇到了问题第3步。如果我省略步骤3并对函数调用的结果执行反向FFT,则会得到初始填充数组,这意味着该功能可以成功执行步骤1和步骤2.

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

我可以用什么技术来执行第3步,同时还能够在反FFT之后找回原始非填充数组?

回答

1

使用循环Sinc内核插值来计算下采样点。 Sinc宽度将是一个低通滤波器,其截止点适用于新的较低的下采样采样率的抗混叠。

0

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

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

这是不一样快,功率为2的FFT的,但它的速度更快(高准确度)比插在了错误的长度的FFT。