您能否将真实对称 FFT 的处理时间缩短四分之一?

信息处理 fft 自由度 对称
2021-12-23 11:03:32

真实信号的 DFT 是 Hermite 对称的,因此您可以通过不费心计算一半的频谱值来大致将计算时间/内存减半(如果需要,还可以将现有值复杂共轭并复制到下半部分)。因此,例如, rfft 操作需要 N 个样本并在一半时间内输出 N/2 个频谱箱。

偶对称实数信号具有偶对称实数频谱(实数频谱占用一半内存存储为复数频谱),因此对于对称输入,仅使用信号的前半部分可以再次减半计算(N/2) 生成频谱的前半部分 (N/2)?如何?

有没有办法对 N/2 半信号进行常规 FFT 并操纵输出以产生 N/2 半频谱?

(real/odd ⇔ imaginary/odd 也可以,但是 real/even ⇔ real/even case 更容易理解。)

2个回答

对于受约束的输入,DFT 的计算次数有很多可能的减少。仔细研究著名的 DFT 库(例如 FFTW)应该是如何利用这些约束的一个很好的资源。对于你的情况,我会看看离散余弦变换(DCT)。离散余弦变换强制均匀对称。“快速”DCT 算法采用针对这些输入约束进行优化的 FFT 结构。DCT 执行的隐式偶对称镜像类型是各种 DCT 类型(I 型、II 型……)的区别所在。如果您的序列确实是偶数对称的,那么您可以使用快速 DCT 算法(基于 FFT 结构的算法),其中一半的数据知道该算法假设另一半是等效的(尽管是时间反转的)。

您还可以将长度为 N 的序列打包成 N/2 个复杂样本,并且不会增加太多复杂性,您可以恢复长度为 N FFT。因此,您可以从另一个角度进行半长复数 FFT 攻击。虽然这看起来效率较低,但对于典型的 FFT 结构,无论如何在第一阶段之后您都会很复杂,因此对于较大的 DFT 尺寸,这变得非常有效。

我不确定将处理时间分成四等份,但这是我现在能想到的。x 的 N 点 DFT。

Xk=n=0N1xnWNkn

由偶对称假设

Xk=n=0N/21xn(WNkn+WNk(N1n))

然后我们简化

Xk=WNk(N1)/2n=0N/21xn(WNknWNk(N1)/2+WNknWNk(N1)/2)

Xk=2WNk(N1)/2n=0N/21xncos(2πkn(N1)/2N)

可能存在一些错误,但如果简化有效,则“FFT”大小会减少 2 倍,并且旋转因子是真实的(这可能对应于您的四分法)。与普通 FFT 一样,可以利用对称性和周期性将“对称 FFT”分解为实例的 radix-2 步骤。