本文针对ARM9应用计算谐波,介绍笔者采用过的几种谐波算法。(以下提到的算法均不是笔者自创的)。
笔者采用过三种谐波算法,性能和特点大有差异。
1.三角函数算法:
三角函数算法是一种相对较简单,也较于容易理解的算法。计算原理如下所示:
从上面的公式中可以看出,算法需要大量计算三角函数,如果谐波次数越高,计算量则越大。而三角函数如果采用库函数的话,计算量是相当大的,这对于ARM9来说也是相当吃力的。当然可以采用查表方法,但这是牺牲空间换取时间,而且如果要求精度稍高点,则浪费空间越大。
笔者先接触谐波计算的时候,就是采用的这种算法,就19次谐波计算,CPU使用率达到了40%左右。
2.FFT算法:
针对三角函数算法在性能上稍有不足,笔者通过网上搜索,找到了两种比较高效谐波算法。
一种是任意点的混合基FFT算法:mix_fft:
mix_fft是一种任意点的谐波算法,所以对于采样点不是2n的应用是十分方便,而且最重要的是速度很快,对于目前市场上的ARM9来说,足够了。
mix_fft是个好用的FFT算法,但它不是开源的,所以应用时需要注意点。
另一种是ooura_fft:
ooura_fft是一种非常复杂但却是最高效的FFT算法,其速率在相同硬件条件下比mix_fft还快,特别是谐波采样点说越高的时候。ooura_fft只能计算2n的谐波采样点。故应用时也要注意这点。
对于上面两种FFT算法,都是用C语言写的,所以在其它应用场合也适用。使用的时候非常简单,只需要调用一个函数即可。如mix_fft算法应用如下:
其中,HarOriginalData存储谐波电压电流的采样数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)