免责声明:我不是信号处理专家。
我正在编写一个采用一维数组并对其执行快速傅立叶变换的函数。以下是它的工作原理:
x
中。x
进行缩小采样,以匹配原始非填充数组的长度。x
。我遇到了第3步的问题。如果我省略步骤3并对函数调用的结果执行逆FFT,我得到初始填充数组,这意味着函数成功执行了步骤1和2.
我尝试使用线性插值通过下采样来实现步骤3,但是当我使用MatLab对最终结果执行逆傅里叶变换时,我得到的结果与原始数组不同。我需要使用的编程语言不是 MatLab,我只使用MatLab来验证结果的正确性。
我可以使用哪些技术执行步骤3,同时仍然可以在逆FFT后恢复原始的非填充数组?
答案 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上插值要快得多(对于高精度)。