简介
快速傅立叶转换在作N-point傅立叶转换(DFT)的数字运算时,是一种非常有效的算法。一般来说,运算时的输入数据,常常是一连串的复数。 不过在许多实际的应用上,这些需要被处理的数据都属于实数(real)。即便如此,我们还是可以运用复数运算的DFT。因为一个简单的方法就可以将实数数据转换成复数数据;原本的实数数据成为复数的实部(real components),而属于复数虚部(imaginary components)的部分则全部填上零。如此一来我们就可以直接应用复数FFT了。
然而这并不是一个有效率的方法,因为这个运算在处理原本N point的数据时,需要花到2N个内存空间(给实部与虚部)。 其实当输入是纯实数时,其对称性能让DFT处理起来非常地有效率。有一种改良的实数FFT算法,称为包装(packing)算法,可以用来处理2N point的实数数据。原来2N point的实数数据会被包装(pcak)成N point的复数,用这个N point的复数来作复数运算。最后得出来一个N point的复数结果会再被展开(unpack)成N+1 point的复数,对应到原本2N point的输入数据中0到N的部分。因为作复数运算输出后,剩下的N+1到2N-1的部分,将会是N-1到1的部分的复补码,所以我们取0到N的范围就已经足够了。
这种实数FFT只需要2N+2个内存空间,就可以处理2N point的实数数据。与原本需要4N point的内存空间的算法比较起来,要好用的多。 不仅如此,运用这种算法,只要付出执行包装/展开程序O(N)的代价,复数FFT运算所需处理数据的长度就可减半。也就是说,实数FFT算法对实数输入数据作FFT的速度几乎是原本FFT的两倍。
这个FFT数据库包含了128,256以及512 point的实数/复数的版本 FFT。总结如下:
模块名称 | 说明 |
FFT128C | 128-point 复数FFT模块 |
FFT256C | 256-point 复数FFT模块 |
FFT512C | 512-point 复数FFT模块 |
FFT128R | 128-point 实数FFT模块 |
FFT256R | 256-point 实数FFT模块 |
FFT512R | 512-point 实数FFT模块 |
注意:
要使用软件测试台(Software Test Bench ,STB) 的范例,请务必下载STB支持数据库。
软件测试台: 特性:
相关的模块都作成软件测试台的型式,以方便您来评估与调用。软件测试台能够以程序代码编译器的项目形式,在现有的EVM跟eZdsp硬件平台上使用。
每一个STB都对应到一个特定的软件模块,指导使用者如何做呼叫,传送变量与数据给模块,以及如何和主系统连结。在条件允许的状况下,供测试的模块也可以与其它模块一起运作,例如与可提供输入触发的信号产生器作连结等。甚至是与数据记录(data-logging)模块或EVM-DAC驱动器作连结,以观察受测模块对实时环境的反应。这样可以帮助您更真切地体会软件模块的功能以及其可使用性。运用STB的概念可以简单明了地展示FFT模块的操作。一个由ADC (20kHz的取样频率)撷取/取样的N个数据样本,经由N point的实数或复数FFT运算,产生相对应的频谱数据。每一个频带强度的平方值会跟着输入信号的变动。再藉由实时监视器,在CCS的图形化窗口中不断作更新显示。您现在就可以试着简单地调整输入信号的频率,观察其输出的频率响应,来评估一下FFT模块的功能。