DSP的一阶低通数字滤波实现【转】

 

将普通硬件RC低通滤波器的微分方程用差分方程来表求,变可以采用软件算法来模拟硬件滤波的功能,经推导,低通滤波算法如下:

   Yn=a* Xn+(1-a)*Yn-1

式中

Xn——本次采样值

Yn-1——上次的滤波输出值;

a——滤波系数,其值通常远小于1;

Yn——本次滤波的输出值。

由上式可以看出,本次滤波的输出值主要取决于上次滤波的输出值 (注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的贡献是比较小的,但多少有些修正作用,这种算法便模拟了具体有教大惯性的低通滤波器功能。滤波算法的截止频率可用以下式计算:

                 fL= a/2Pit   pi为圆周率3.14…

式中

a——滤波系数;

t——采样间隔时间;

 

例如:当t=0.5s(即每秒2次),a=1/32时;

fL=(1/32)/(2*3.14*0.5)=0.01Hz

当目标参数为变化很慢的物理量时,这是很有效的。另外一方面,它不能滤除高于1/2采样频率的干搅信号,本例中采样频率为2Hz,故对1Hz以上的干搅信号应采用其他方式滤除,

低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。

   设Yn-1存放在30H(整数)和31H(小数)两单元中,Yn存放在32H(整数)和33H(小数)中。

http://hi.baidu.com/lingyin55/blog/item/47cf74ef99681133acafd5ae.html

 

signed short vbu;

signed short vbusf;

signed long vbusmem;

 

/* DC bus voltage */

vbusmem+=vbus;

vbusmem-=vbusf;

vbusf=vbusmem>>5;                        // 320ms filtro

vbus输入
vbusf经滤波后的输出

posted on 2012-05-27 17:46  yq09  阅读(1034)  评论(0编辑  收藏  举报