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

3

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

我正在编写一个函数,该函数接收一个一维数组并对其执行快速傅里叶变换。这是它的工作原理:

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

我遇到了第3步的问题。如果我省略第3步并对函数调用的结果执行反傅里叶变换,则会得到最初的填充数组,这意味着该函数成功执行了步骤1和2。

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

有哪些技术可以在执行第3步时仍然能够获得原始非填充数组(即在执行逆FFT时恢复原始的非填充数组)?

2个回答

1
使用圆形Sinc核插值计算下采样点。 Sinc宽度将与截止频率适合的低通滤波器一致,以进行新的较低下采样采样率的抗混叠处理。

0
如果您需要准确的结果,那么可以使用Bluestein算法进行Chirp Z变换,以在O(N log N)时间内计算烦人大小的DFT。
参见:https://en.wikipedia.org/wiki/Chirp_Z-transform 它不像2的幂FFT那样快,但比在错误长度的FFT上插值要快得多(对于高精度)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接