详细分析单片机数字滤波的算法
为采样次数;Ci为加权系数。加权系数Ci体现了各种采样值在平均值中所占的比例。一般来说采样次数越靠后,取的比例越大,这样可增加新采样在平均值中所占的比重。加权平均值滤波法可突出一部分信号抵制另一部分信号,以提高采样值变化的灵敏度。
样例程序代码如下:
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
char code sum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
char filter()
{
char count;
char value_buff[N];
int sum=0;
for(count=0;count《N;count++)
{
value_buff[count]=get_data();
delay();
}
for(count=0;count《N;count++)
sum+=value_buff[count]*jq[count];
return (char)(sum/sum_jq);
}
(5)滑动平均滤波算法
以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。
程序代码如下:
char value_buff[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buff[i++]=get_data();
if(i==N)
i=0;
for(count=0;count《N;count++)
sum=value_buff[count];
return (char)(sum/N);
}
今天就写到这,因为数字滤波的算法还有很多种方法,比如一阶滞后低通滤波器(惯性滤波法),限时滤波,容错冗余三中取二滤波法等等。不过由于个人能力和时间的原因,还没能把它们一一地列出。以后我会不断地找资料把它们完善。
数字滤波 相关文章:
- 揭开Σ-ΔADC的神秘面纱(07-06)
- 基于Matlab的IIR数字滤波器设计方法比较及应用(07-15)
- 基于Visual DSP++的无限脉冲响应数字滤波器(IIR)设计(05-21)
- 关于IIR滤波器的设计心得(08-09)
- 数字滤波器的软件设计流程(07-26)
- 基于PIC18F的全自动热敏电阻测试仪设计(04-12)