回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

回复【论文】,获取毕业设计、电子竞赛、学术专业等相关论文资料虽然单片机不擅长实现算法和进行复杂的运算,但在某些特定场合,不可避免地要用到数学运算。在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

回复[STM32]以获取与STM32相关的设计和视频教程

回复[PCB]以获取与PCB设计有关的信息

回复[硬件知识]和[硬件设计],以获取硬件开发工程的必要手册

回复[经典电路]获得5,000台经典电路

回复[论文]以获取相关论文材料,例如毕业设计,电子竞技,学术专业等。

回复[电容器]以获取与电容器和组件选择有关的内容;

回复[阻抗匹配]以获取与电磁兼容性和阻抗匹配有关的信息

回复[信息]以获取与电子设计和微控制器开发有关的所有信息

回复[端子电阻]以获取与CAN终端电阻有关的信息

回复[Microchip]以获取完整的微控制器视频教程和参考设计

…………

欢迎遵循[Wanzhuan微控制器和嵌入式]的官方帐户。该官方帐户将以序列化的形式启动有关学习STM32的一系列教程,欢迎来到。

微控制器的主要功能是控制外围设备并实现某些通信和数据处理。尽管微控制器不擅长实施算法和执行复杂的操作,但在某些特定情况下不可避免地使用数学操作。

例如:当微控制器收集数据时,它将在数据中遇到随机错误。随机误差是由随机干扰引起的。它的特征是,在相同条件下测量相同数量时,其大小和符号将不规则地变化,无法预测,但是多个测量结果与统计定律一致。

为了克服由随机干扰引起的错误,可以在硬件中使用过滤技术,并且可以使用软件算法来实现数字过滤。过滤算法通常是系统测量和控制算法的重要组成部分,并且非常实时。

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

使用数字过滤算法克服随机干扰的错误具有以下优点:

数字过滤不需要其他硬件成本,只有一个计算过程,高可靠性和没有阻抗匹配问题。特别是,数字过滤可以以非常低的频率过滤信号,这是模拟过滤器无法做到的。

使用软件算法实施数字过滤,并且多个输入通道可以共享一个过滤程序以减少系统支出。

只要过滤程序或过滤器的计算得到适当更改,就可以轻松更改其过滤特性,这将对滤除低频干扰和随机信号产生很大的影响。

微控制器系统中常用的过滤算法包括有限振幅过滤,中值过滤,算术平均过滤,加权平均过滤,平均平均过滤等。

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

限制过滤算法

在此操作期间,减去两个相邻的样品,并计算增量,然后将增量的绝对值与两个样本允许的最大差a进行比较。

A的大小取决于要测量的对象的特定情况。如果它小于或等于最大允许差,则采样将是有效的;否则,最后一个样本值将作为此数据的样本。

该算法的程序代码如下:

1#define A //允许的最大差值
2
3char data; //上一次的数据
4
5char filter()
6
7{
8
9    char datanew; //新数据变量
10
11    datanew=get_data(); //获得新数据变量
12
13    if((datanew-data)>A||(data-datanew>A))
14
15        return data;
16
17    else
18
19        return datanew;
20
21}

阐明:

限制过滤方法主要用于处理缓慢变化的数据,例如温度,对象的位置等。在使用该数据时,重要的是选择适当的门极限A。通常可以从经验数据中获得,并且在必要时可以在实验中获得。

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

中值过滤算法

该计算的过程是连续采样某个参数n次(通常是奇数),然后将n个样品的值从小到大的n示例排列,然后将中间值作为样本值以中间值为单位。整个过程实际上是一个序列排序过程。

该算法的程序代码如下:

1#define N 11 //定义获得的数据个数 2 3char filter()
4
5
{
6 7    char value_buff[N]; //定义存储数据的数组 8 9    char count,i,j,temp;
1011    for(count=0;count<N;count++)
1213    {
1415        value_buf[count]=get_data();
1617        delay(); //如果采集数据比较慢,那么就需要延时或中断1819    }
2021    for(j=0;j<N;j++)
2223    {
2425        if(value_buff[i]>value_buff[i+1])
2627        {
2829            temp=value_buff[i];
3031            value_buff[i]=value_buff[i+1];
3233            value_buff[i+1]=temp;
3435        }
3637    }
3839return value_buff[(N-1)/2];
4041}

注意:中值过滤更适合于去除由意外因素引起的波动和由采样器不稳定性引起的脉动干扰。如果测得的值变化缓慢,则中值过滤方法将更好,但是如果数据更改速度更快,则不应使用此方法。

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

算术平均过滤算法

该算法的基本原理非常简单,即连续采集N样品并执行算术平均。

该算法的程序代码如下:

1char filter()
2
3
{
4
5    int sum=0;
6
7    for(count=0;count<N;count++)
8
9    {
10
11        sum+=get_data();
12
13        delay():
14
15    }
16
17    return (char)(sum/N);
18
19}

注意:算术平均过滤算法适用于随机干扰的过滤信号。该信号的特征在于它具有平均值,并且信号接近一定值。

信号的平均平滑度完全取决于N值。当n更大时,平滑度很高,灵敏度很低;当n较小时,光滑度很低,但是灵敏度很高。为了促进平均值,n通常采用2个整数功率,例如4、8、16、32,因此在程序中使用换档操作而不是分裂。

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

加权平均过滤算法

因为上面提到的“算术平均过滤算法”具有平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可以使用加权平均过滤。

它的原理是将连续的N采样值乘以不同的加权系数,然后计算积累。加权系数通常首先很小,然后很大,以突出几个随后的样品的影响,并增强系统对参数变化趋势的理解。

每个加权系数小于1,总和等于1。加权操作后的累积总和是有效的采样值。加权平均数字过滤的数学模型是:

其中:d是N采样值的加权平均值:Xn-I是Nith采样值; n是样品的数量; CI是加权系数。加权系数CI反映了平均值中各种采样值的比例。

一般而言,样品数量越低,所采集的比例越大,这可以增加平均值中新样本的比例。

加权平均过滤方法可以突出信号的一部分,以抵抗信号的另一部分,以提高采样值变化的灵敏度。

示例程序代码如下:

1char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
2
3char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
4
5char filter()
6
7{
8
9    char count;
10
11    char value_buff[N];
12
13    int sum=0;
14
15    for(count=0;count<N;count++)
16
17    {
18
19        value_buff[count]=get_data();
20
21        delay();
22
23    }
24
25    for(count=0;count<N;count++)
26
27        sum+=value_buff[count]*jq[count];
28
29    return (char)(sum/sum_jq);
30
31}

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

平均过滤算法

上面的介绍与各种平均过滤算法有一个共同点,也就是说,必须为每个有效采样值执行几个连续采样。当采样速度慢时,无法保证实时系统。

此处仅引入的平均平均过滤算法一次,将一个样本值和过去的几个子样本值一起使用,并且可以使用所获得的有效采样值。

如果将n个样本值平均为平均值,则必须在存储区域中打开n个数据的临时存储区域。

收集每个新数据并存储在临时存储区域中,并同时删除最古老的数据。保存这些N数据始终是最新的更新数据。可以使用环队列结构轻松实现此数据存储方法。

程序代码如下:

1char value_buff[N];
2
3char i=0;
4
5char filter()
6
7
{
8
9    char count;
10
11    int sum=0;
12
13    value_buff[i++]=get_data();
14
15    if(i==N)
16
17        i=0;
18
19    for(count=0;count<N;count++)
20
21        sum=value_buff[count];
22
23    return (char)(sum/N);
24
25}

回复【STM32】等关键词,获取各类电子设计资料及公众号介绍

低通滤波

使用微分方程计算了普通硬件RC低通滤波器的微分方程。可以使用软件算法进行更改,以模拟硬件过滤的功能。推导后,低通滤波算法如下:

1Yn=a* Xn+(1-a) *Yn-1
2
3式中 Xn——本次采样值
4
5Yn-1——上次的滤波输出值;
6
7a——滤波系数,其值通常远小于1;
8
9Yn——本次滤波的输出值。

从上面的公式来看,我们可以看到该过滤器的输出值主要取决于最后一个过滤器的输出值(请注意,它不是最后一个样本值,这与加权平均过滤器基本不同)。该采样值对滤波器输出的贡献相对较小,但具有一定的校正效果。该算法通过教学大型惯性模拟了特定的低通滤波器功能。过滤算法的截止频率可以通过以下公式计算:

1fL=a/2Pit pi为圆周率3.14…
2
3式中 a——滤波系数;
4
5t——采样间隔时间;
6
7例如:当t=0.5s(即每秒2次),a=1/32时;
8
9fL=(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)。为了确保操作精度,过滤后的输出值由双字节,一个字节整数和一个字节十进制表示。否则,由于每次都会丢弃Mantissa,输出可能不会改变。

假设YN-1存储在两个30h(整数)和31H(十进制)的单位中,并且Yn存储在32H(Integer)和33H(十进制)中。

单片机

深入了解51单片机最小系统:晶振电路、复位电路及工作原理

2025-5-5 8:01:05

单片机

深入了解51单片机最小系统:晶振电路、复位电路及工作原理

2025-5-5 8:02:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索