5次谐波来近似合成频率50赫兹 幅度300方波 用MATLAB做 求程序

5次谐波来近似合成频率50赫兹 幅度300方波 用MATLAB做 求程序,第1张

>>clear all>>t=0:0.001:1>>a0=1.5>>a1=6/pi>>a3=2/pi>>a5=6/(5*pi)>>fc=50>>w=2*pi*fc>>y=a0+a1*sin(w*t)+a3*sin(3*w*t)+a5*sin(5*w*t)>>plot(t,y)>>axis([0 0.1 -0.5 3.5])

在当前很多的电力产品中,带谐波(2~n次谐波电压电流含有率、有效值、总畸变率)计算功能的电力产品越来越多,系统因设计不同而采取不同算法

本文针对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存储谐波电压电流的采样数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11808069.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存