FFT 和 IFFT 是否隐式假设循环卷积? DCT 是否也假设相同?

问题描述 投票:0回答:1

如果我将零放在输入序列的末尾,并采用 fft,然后通过将零附加到 fft 输出来获得更大长度的 ifft,输入序列的零会反映在最终的 ifft 输出上吗?

我尝试在 MATLAB 和 python 中执行此操作,在原始数据中没有任何零头的情况下,最终 IFFT 输出的最后部分似乎偏离了接近零。

但是,当对 DCT 和 IDCT 重复相同的过程时,我发现输出的最后部分被平滑到几乎为零。

我为此采用 512 点 FFT/DCT 和 2048 点 IFFT/IDCT

有人可以对此给出任何数学解释吗? Output Comparison for taking DFT and DCT

signal-processing fft dft digital dct
1个回答
0
投票

如果您愿意,传统的 FFT 通常通过数组长度或循环循环进行隐式周期平移。如果缠绕时出现不连续性(如本例所示),这可能是个坏消息。

DCT 在其范围末端具有隐式镜像边界条件,因此它是跨阵列边界的连续函数。

我遇到的唯一例外是 Jodrell Bank 使用 FFT 来处理具有反射对称 BC 的 Merlin 干涉仪观测结果。我假设您使用的包都没有对输入数据进行任何预卷积或加权以更好地近似 DFT。

如果您查看 FFT(蓝线),数据的 RH 端是一个很好的急剧过渡,但随后阵列的 RH 端回到原始值的回卷是一个软上升,使波形周期性且连续。不连续性和有限的最大频率导致吉布现象急剧上升的振荡。

如果查看 DCT(红线),实际数据的 RH 端有一个软角向下延伸到基线,然后连续穿过 RH 边界。在 DCT 上肉眼不太明显,但它仍然存在。这里的函数在左右边界上都是连续的,这使得它更清晰。

用零填充数据在间接成像中很常见,通常称为过采样。我们倾向于使用 1.5 到 2.0。它使生成的变换更加平滑,并且更容易绘制轮廓代码。

如果您已正确地将 512 零填充为 2048,则输出数组中的每 4 个值应在等于输入数组的舍入误差内。以这种方式使用它是一种昂贵的数据插值方式。

通过输入数据的乘法加权或预卷积,可以使用各种方法来改善这些恼人的 FFT 边缘效应。最简单的称为“窗口函数”,每种函数都有优点和缺点,因此您必须妥协。最佳重新网格化功能仍在积极研究中。

© www.soinside.com 2019 - 2024. All rights reserved.