电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

单片机数字滤波算法的实现方法

2021-12-03 00:25分类:电工基础知识 阅读:

 

在单片机设计开展数据收集时,有时候会碰到数据信息的随机偏差的难题,随机偏差由任意影响造成,其特性是在同样标准下精确测量同一量时,尺寸和符号会现无规律的转变 ,进而造成 没法预测分析,但数次精确测量的結果合乎统计分析规律性。

为了更好地摆脱任意影响造成的偏差,在硬件配置上选用过滤技术性,在手机软件上选用手机软件优化算法完成数字滤波。数字滤波是系统软件测控技术优化算法的一个关键构成部分,实用性很强。

选用数据数字滤波摆脱任意影响的偏差有下列优势

1、数字滤波不用其他硬件配置成本费,仅用一个测算全过程,稳定性高,不会有匹配电阻难题。数字滤波能够 对頻率很低的数据信号开展过滤,它是仿真模拟过滤器做不到的。

2、数字滤波应用手机软件优化算法完成,多键入安全通道可同用一个过滤程序流程,减少系统软件支出。

3、只需适度更改过滤器的过滤程序流程或运算,就能便捷地更改其过滤特点,这针对滤掉低頻影响和任意数据信号会出现很大的实际效果。

4、在单片机设计系统软件中常见的数字滤波比较有限幅过滤法、均值滤波法、算数平均值过滤法、加权平均值过滤法、滑动平均过滤等。

(1)限幅数字滤波

该计算的过程中将2次邻近的取样求差,算出其增加量,随后将增加量的平方根,与2次取样容许的较大误差A开展较为。

A的尺寸由被测目标的详细情况而定,假如小于或等于容许的较大误差,则此次取样合理;不然取之前取样值做为此次数据信息的样版。

优化算法的编程代码为:

#defineA //容许的较大误差
chardata; //上一次的数据信息
char filter()
{
chardatanew; //新数据自变量
datanew=get_data(); //得到 新数据自变量
if((datanew-data)>A||(data-datanew>A))
return data;
else
returndatanew;
}

表明:限幅过滤法关键用以解决转变 比较迟缓的数据信息,如溫度、物件的部位等。应用时,重要要选择适合的门限定A。一般这可由工作经验数据信息得到 ,必需时可根据试验获得。

(2)均值滤波优化算法

该计算的全过程是对某一主要参数持续取样N次(N一般为合数),随后把N次取样的值按由小到大排序,再取正中间值做为此次取样值,全部全过程事实上是一个编码序列排列的全过程。

优化算法的编程代码为:
#define N11 //界定得到 的数据信息数量
char filter()
{
charvalue_buff[N]; //界定储存数据信息的二维数组
char count,i,j,temp;
for(count=0;count
{
value_buf[count]=get_data();
delay(); //假如采集数据较慢,那麼就必须延迟或终断
}
for(j=0;j
{
for(value_buff[i]>value_buff[i 1]
{
temp=value_buff[i];
value_buff[i]=value_buff[i 1];
value_buff[i 1]=temp;
}
}
returnvalue_buff[(N-1)/2];
}

表明:均值滤波较为适用除掉由不经意要素造成的起伏和采样器不稳定而造成的脉动饮料影响。若被精确测量值转变 较慢,选用均值滤波法实际效果会比较好,但假如数据信息转变 较为快,则不适合选用此方式。

(3)算数平均值数字滤波

该优化算法的基本概念非常简单,便是持续取N次取样值后开展算数平均值。

优化算法的编程代码为:
char filter()
{
int sum=0;
for(count=0;count
{
sum =get_data();
delay():
}
return (char)(sum/N);
}

表明:算数平均值数字滤波适用对具备任意影响的数据信号开展过滤。这类数据信号的特性是有一个均值,数据信号在某一标值周边左右起伏。数据信号的均值光滑水平彻底到决于N值。当N很大时,光滑度提高,敏感度低;当N较钟头,光滑度低,但敏感度高。为了更好地便捷求平均值,N一般取4、8、16、32这类的2的整数金额幂,便于在程序流程选用移位操作来替代乘法。

(4)加权平均值数字滤波

因为前边常说的“算数平均值数字滤波”存有光滑度和敏感度中间的分歧。为了更好地融洽光滑度和敏感度中间的关联,可选用加权平均值过滤。它的基本原理是对持续N次取样值各自乘上不一样的权重计算指数以后再求累积,权重计算指数一般先小后大,以突显后边多个取样的实际效果,提升对系统主要参数趋势分析的了解。每个权重计算指数均低于1的小数,且达到总数相当于1的完毕标准。那样权重计算计算以后的累积和即是合理取样值。

在其中加权平均值数字滤波的数学分析模型是:式中:D为N个取样值的加权平均:XN-i为第N-i次取样值;N为取样频次;Ci为权重计算指数。权重计算指数Ci展现了各种各样取样值在均值中常占的占比。一般来说取样频次越靠后,取的占比越大,那样可提升新取样在均值中常占的比例。加权平均过滤法可突显一部分数据信号遏制另一部分数据信号,以提升取样值转变 的敏感度。

示例编程代码:

char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code二维数组为权重计算指数表,存有程序流程储存区
char codesum_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
{
value_buff[count]=get_data();
delay();
}
for(count=0;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

sum=value_buff[count];

return (char)(sum/N);

}

(6)低通滤波器

将一般硬件配置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之上的干搅数据信号应选用别的方法滤掉,

低通滤波器优化算法程序流程于加权平均值过滤类似,但权重计算指数仅有2个:a和1-a。为测算便捷,a取一整数金额1-a用256-a来替代,数值舍弃最少字节数就可以。由于仅有二项,a和1-a,均以立即数的方式纳入程序流程中,不此外设报表。尽管取样数值模块字节数(8位A/D)。

为确保计算精密度,过滤輸出值用双字节数表明,在其中一个字节整数金额,一字节小数,不然有可能由于每一次舍弃末尾数而使輸出不容易转变 。

设Yn-1储放在30H(整数金额)和31H(小数)两模块中,Yn储放在32H(整数金额)和33H(小数)中。

上一篇:串口通信常用波特率及串口接口定义

下一篇:变频器过电压报警有哪些类型,怎么解决?

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部