FFT算法是针对复信号的,而现实场景中很多时候时域是实信号,此时有两种办法加快FFT的速度。
1. 使用一个N点的复FFT同时处理两个N点的实序列
假定我们有两个N点的实序列x[n]和y[n],它们的FFT具有如下性质:实部偶对称,虚部奇对称。因此可将它们的FFT写为如下形式:
x[n] --F--> Nyquist以下部分:a+bi;Nyquist以上部分:a-bi
y[n] --F--> Nyquist以下部分:c+di;Nyquist以上部分:c-di
将这两个实信号拼成一个复信号z=x+yi,因FFT变换满足加法和乘法组合定理,z的FFT变换如下:
z[n] --F--> Nyquist以下部分:p+qi = a+bi+i(c+di) = (a-d)+(b+c)i,即实部p=a-d, 虚部q=b+c
Nyquist以上部分:s+ti = a-bi+i(c-di) = (a+d)+(-b+c)i,即实部s=a+d, 虚部t=-b+c
于是我们可以从z[n]的变换结果p+qi和s+ti分离出x[n]和y[n]的FFT结果:
a=(p+s)/2
b=(q-t)/2
c=(q+t)/2
d=(-p+s)/2
2. 使用一个N点的复FFT处理一个2N点的实序列