一、功能
计算实序列的快速傅里叶变换。
二、方法简介
实序列\(x(n)\)的离散傅立叶变换为
\[
X(k)=\sum_{n=0}^{N-1}x(n)W_{N}^{nk} \ , \ k=0,1,...,N-1
\]
上式可用复序列FFT算法进行计算。但考虑到\(x(n)\)是实数,为进一步提高计算效率,需要对按时间抽取的基2复序列FFT算法进行一定的修改。
如果序列\(x(n)\)是实数,那么其傅立叶变换\(X(k)\)一般是复数,但其实部是偶对称,虚部是奇对称,即\(X(k)\)具有如下共辄对称性: \(X(0)\)和\(X(N/2)\)都是实数,且有
\[
X(k)=X^{*}(N-k) \ , \ 1 \leqslant k \leqslant \frac{N}{2} - 1
\]
在计算离散傅立叶变换时,利用这种共辄对称性,我们就可以不必计算与存储\(X(k)(N/2 + 1 \leqslant k \leqslant N — 1)\)以及\(X(0)\)和\(X(N/2)\)的虚部,而仅需计算\(X(0)\)到\(X(N/2)\)即可。此处我们选择的是计算\(X(0)\)到\(X(N/4)\)和\(X(N/2)\)到\(X(3N/4)\), 这样做可以恰好利用复序列FFT 算法的前\((N/4)+1\)个复数蝶形。这就是按时间抽取的基2实序列FFT算法,它比复序列FFT算法大约可减少一半的运算量和存储量。
三、使用方法
是用C语言实现实序列快速傅里叶变换的方法如下:
/************************************
x ----长度为n。开始时存放要