[经验分享]教你如何使用dsPIC Lib中的FFT,附件有程序
介绍一下FFT库函数的使用, 顺便给出一个64点的FFT变换程序。
许多应用中都需要对信号的频谱,谐波,畸变,谐波功率等进行分析,这都需要使用FFT变换。dsPIC LIB中已经定义了FFT计算所需要的一些函数, 这些函数包括
TwidFactorInit() – 用来计算蝶形因子,初始化蝶形因子。通常为了加快运算速度以及节省RAM空间,可将蝶型因子计算好存储在FLASH里。实际上是一个COS和SIN表。
FFTComplexIP () – 快速傅立叶变换计算。
BitReverseComplex () – 对FFTComplexIP() 函数的输出数据重新排序。
详细资料可参考应用手册-“16-BIT LANGUAGE TOOLS LIBRARIES”
实际上,为了分析频谱和谐波等参数,需要计算出各次谐波的幅值,dsPIC LIB库中没有提供该函数,但该函数在一些dsPIC中应用例子中已经给出函数,我的附件的程序中也提供了该函数-ComputeMagnitude()。
为了大家学习FFT库函数,附件是一个64点的FFT变换的例子程序,用来计算信号中的谐波含有率,供大伙参考。另外,为了能产生一些原始数据,我用EXCEL来产生ADC数据,一并附上。
程序中-data[]数组是ADC输出的数据,或者待分析的数据,由EXCEL文件产生并存入到.mch文件中。在程序运行时,将data[]值从.mch文件载入ADC数据。
需要注意的是,ADC数据为fractional形式,由于FFT运算使用的是16位宽的数据,表示的精度有限,如果输入幅值太小,将可能严重影响计算结果。因此,在我们做FFT运算前需要对原始数据进行预处理,使得所有数据的最大绝对值不大于0.5并且不小于0.25。