|
发表于 2014-11-27 13:21:32
|
显示全部楼层
本帖最后由 liuerbin 于 2014-11-27 13:30 编辑
找算法,我选用的是辛普森算法,网上很多介绍的。
参考用法如下:
/*****************************************************************************
** Function name:
**
** Descriptions: 求真有效值
**
** parameters: buf[] 若干个周期采样值。 avg是直流,按需要,默认0。
编辑内容:ADC_One_Sample是常量,一个周期采样数。 应该是number_One_Sample。
存档的代码未更正。现在改正了这个错误。
** Returned value:第index个周期的真有效值
**
*****************************************************************************/
FLO32 True_RMS_Caculate(INT16 *buf, WORD index, WORD number_One_Sample, FLO32 Avg)
{
WORD n,m;
FLO32 X,Y,Z;
FLO32 f_tmp;
Z = 0;
for(n = 0 ; n < /*ADC_One_Sample*/number_One_Sample/2 ; n++)
{
m = 2*n;
f_tmp = fabs(buf[index*number_One_Sample + m])-Avg;
X = fabs( f_tmp );
X *= X;
m = 2*n + 1;
f_tmp = fabs(buf[index*number_One_Sample + m])-Avg;
Y = fabs( f_tmp );
Y *= 2*Y;
Z += X + Y;
}
return (sqrt( ((2*Z)/(3*number_One_Sample)) ) );
} |
|