单片机学习小组
直播中

surround

12年用户 553经验值
私信 关注

怎样利用单片机去实现一种数字加权平均滤波算法呢

怎样利用单片机去实现一种数字加权平均滤波算法呢?其滤波结果是怎样的?

回帖(1)

卢原继

2022-1-20 14:01:23
引言


一个计算机数据采集系统在生产过程中会受到各种干扰,从而降低了有用信号的真实性。虽然在输入通道上接入一个RC低通滤波器来抑制工频及其以上频率的干扰,但对频率很低的干扰却由于制作上的难度而难以实现。采用数字形式来模拟RC低通滤波器的输入输出数学关系,可以得到较好的滤波效果。常用数字滤波方法有限幅滤波、算术平均滤波、中值滤波及惯性滤波等。以下以单片机为CPU、8-bit A/D and D/A converter的PCF8591以及UA741。对含有干扰的正弦信号进行采样与惯性数字滤波进行实现。
1 惯性数字滤波



2 威廉希尔官方网站 图

用Proteus绘制如下威廉希尔官方网站 图

UA741将正弦信号S1与脉冲干扰信号S2混合,配置如上图所示,模拟产生含干扰的信号源,其输出信号Vin电平在0V-5V之间。
设置U3(V-) = -12V,U3(V+) = 12V。
3 算法实现代码

        int Y[2];
        int X;
        uchar  adc_d;          // 接受到的AD转换数据
        uchar  dac_d;         // 要显示的DA转换数据
       
        X=(uint)adc_d;                //adc_d强制转换为无符号整形提高计算精度
        Y[0]=X+A*(Y[1]-X)/100;                //运用惯性数字滤波公式进行滤波计算输出值       


        /*限幅*/
        if(Y[0]<0)
        {
                Y[0]=0;
        }
        else if(Y[0]>255)
        {
                Y[0]=255;
        }
       
        /*将滤波后的值赋给dac_d准备输出,并存入Y[1]*/
        dac_d=Y[0]; Y[1]=Y[0];



  • 惯性滤波的时间参数A的取值范围为0-100

4 滤波结果

取A = 10时

取A = 90时

取A=10和90观察滤波波形,说明惯性滤波器的时间参数τ越大滤波效果越好,但会造成相位滞后,且输出幅值会减小。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分