一文详解单片机滤波算法与应用
扫描二维码
随时随地手机看文章
单片机作为控制外围器件、实现通信和数据处理的核心部件,在特定场合下也需应对数学运算的挑战,尽管这并非其强项。本文将深入探讨如何利用单片机技术来实现数字滤波。
在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。
采用数字滤波算法克服随机干扰的误差具有以下优点:
l 数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。
l 数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。
l 只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。
l 在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。
> 随机误差与滤波方法
在单片机进行数据采集的过程中,随机误差是一个不可避免的问题。这种误差源于随机干扰,其特性是在相同条件下重复测量同一量时,误差的大小和符号会呈现无规律的变化,难以预测,但多次测量的结果却遵循统计规律。为了有效应对这种随机干扰引起的误差,我们可以采取两种策略:一是从硬件层面实施滤波技术,二是通过软件算法实现数字滤波。这两种方法都是系统测控算法的关键环节,具有很高的实时性要求。
> 数字滤波的优越性
采用数字滤波算法来减少随机干扰误差的好处多多,包括提高信号质量、增强数据可靠性等。数字滤波相较于模拟滤波,其优势显而易见。它无需额外硬件成本,仅通过计算过程即可实现,且可靠性极高,无需担忧阻抗匹配问题。尤为值得一提的是,数字滤波能轻松应对频率极低的信号,这是模拟滤波器难以做到的。此外,软件算法还能驱动多个输入通道共享同一套滤波程序,从而有效降低系统成本。数字滤波的灵活性极高,通过调整滤波器的程序或运算方式,便能轻松改变其滤波特性。
> 常用滤波算法
单片机系统中常用的滤波算法包括限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法以及滑动平均滤波等。
> 算术平均滤波法
算术平均滤波法的核心思想是连续采样N次后,对这些采样值进行算术平均。通过这种方式,能够减少随机干扰。平滑度与灵敏度主要通过N值的选择进行调整:N越大,平滑度越高而灵敏度越低;反之,N越小,平滑度越低而灵敏度越高。
程序代码如下:
```c
char filter()
int sum=0;
for(count=0;count
sum += get_data();
delay();
return (char)(sum / N);
```
> 加权平均滤波法
为了更好地协调平滑度和灵敏度之间的关系,可采用加权平均滤波法。其原理是对连续N次采样值赋予不同的加权系数,然后进行累加。加权系数通常先小后大,从而突出后续采样的影响,增强系统对参数变化趋势的感知。加权平均数字滤波的数学模型为:
D = Σ(XN-i Ci)
其中,D是N个采样值的加权平均值,XN-i代表第N-i次采样值,N是采样次数,而Ci则是相应的加权系数。
> 滑动平均滤波法
滑动平均滤波仅需进行一次采样,具有良好的实时性。该算法将新采样值与过去若干值的平均,以保持系统的实时性。
> 低通滤波简介
低通滤波简介可以通过差分方程来模拟低通滤波器。这种方程强调的是继电器的惯性作用,从而抑制高频干扰。低通滤波算法的表达式为:Yn = aXn + (1-a)Yn-1,其中Xn代表本次采样值,Yn-1是上次的滤波输出值,a是滤波系数,Yn则是本次滤波的输出值。该算法在处理变化缓慢的物理量时表现出色,但对于高频干扰则需要其他方法处理。
单片机中实现的六种数字滤波算法详解如下:
限幅滤波算法:
原理:通过连续采样并进行减法运算,比较结果的绝对值与预设的门限值A,以限制数据的变化范围。
适用场景:适用于缓慢变化的数据,如温度和位置测量,能有效去除随机误差。
关键点:选择合适的门限值A,可通过经验或实验确定。
中值滤波算法:
原理:对连续采样值进行排序,取中间值作为滤波结果。
适用场景:适用于去除偶然波动和采样器不稳定带来的干扰,适用于变化较慢的数据。
限制:对快速变化信号不适用。
算数平均滤波算法:
原理:简单计算连续采样值的平均值。
适用场景:适用于随机干扰信号的滤波,平滑程度与采样次数N相关。
特点:N越大,平滑效果越好,但灵敏度降低。
加权平均滤波算法:
原理:通过加权系数调整采样值的权重,以平衡平滑度和灵敏度。
适用场景:适用于信号变化趋势的认识,能突出新数据的影响。
优点:相比算数平均滤波,能更好地适应信号的变化趋势。
滑动平均滤波算法:
原理:利用环形队列存储和更新数据,每次采样仅更新队列中的一个值,并计算新的平均值。
适用场景:适合实时性要求高的场景,能有效减少存储空间的使用。
特点:需占用一定的存储空间,但能实现数据的实时滤波。
低通滤波算法:
原理:模拟硬件滤波器的行为,通过差分方程实现。
适用场景:适用于缓慢变化的参数,能有效去除高频噪声。
限制:不能滤除高于采样频率一半的干扰信号,即存在奈奎斯特频率限制。
以上六种数字滤波算法在单片机中各有优缺点,应根据具体应用场景选择合适的滤波算法,以实现最佳的数据处理效果。
滤波算法概述在单片机的应用中,虽然单片机 擅长控制和通信,但在数学运算的处理上仍需借助各种算法的辅助。特别是在需要处理数学运算的情境下,单片机的表现往往不尽如人意,因此通过算法的运用来弥补这一弱点显得尤为重要。
滤波算法在数据处理尤其是 单片机应用中至关重要,用于减少干扰信号的影响。这些算法帮助信号处理从噪声中提取出所需的信息,从而提高了单片机系统的稳定性和可靠性。
02限幅滤波算法► 方法和实现
限幅滤波是一种基本的信号处理手段。 通过设定偏差阈值A,判断新采样值的合理性进而限制波动。这种方法能够有效保护传感器免受瞬间电压冲击,确保数据的稳定性和可靠性。实现时,基于经验设定两次采样间的最大允许偏差值A,每次获取新值时,进行判断:如果当前值与前一次的值之差小于或等于A,则当前值有效;否则无效,用前一次的值替代。
► 优缺点
该方法能够有效克服脉冲干扰,但无法完全抑制周期性干扰,相对平滑度较差。
03中位值滤波法► 方法概述
中位值滤波法通过 对某一参数连续采样N次并排序取中位值的方法,抗干扰能力出众。它能够有效对抗随机波动干扰,确保数据准确性。这种方法对温度等变化缓慢的参数尤其有效。
► 优缺点分析
中位值滤波法能够有效抑制波动干扰,但对速度变化快的参数不甚适用。
► 代码实现
```c
define N 11
char filter() {
char value\_buf[N];
char count, i, j, temp;
for (count = 0; count N; count++) {
// 获取或生成采样值
// ...
}
// 对value\_buf数组进行排序
for (i = 0; i N - 1; i++) {
for (j = i + 1; j N; j++) {
if (value\_buf[i] > value\_buf[j]) {
temp = value\_buf[i];
value\_buf[i] = value\_buf[j];
value\_buf[j] = temp;
}
}
}
// 选取排序后的中间值作为本次的有效值
return value\_buf[N / 2];
}
```
01递推平均滤波法► 方法与流程
递推平均滤波法的基本思想是 通过加权系数进行平滑处理。权衡当前采样与历史结果,通过调整加权系数可以得到平滑的信号。
► 优缺点
递推平均滤波法对周期性干扰有良好抑制,但灵敏度较低且对脉冲干扰抵抗力差。
02中位值平均滤波法► 方法概述
中位值平均滤波法结合了 中位值和平均值的优点,能够消除脉冲干扰。通常,它通过采样的N个值去掉最大和最小的后计算平均来实现。
► 优缺点分析
这种方法能消除随机和脉冲干扰,但计算量大且周期性干扰抑制弱。
03一阶滞后滤波的应用► 核心思想
一阶滞后滤波的核心在于 通过加权系数将当前采样与历史结果混合,从而得到平滑的信号输出。这种方法在处理波动信号时尤其有效。
► 优缺点
该方法在周期性干扰的过滤方面表现出色,但灵敏度较低且存在相位滞后问题。
04加权递推平均滤波法► 方法改进
在递推平均滤波的基础上, 增强灵敏度的方法通过赋予不同时刻的数据不同权重来实现。然而,这增加了计算的复杂度,滤波长度需根据实际调整。
► 优缺点
加权递推平均滤波法具有较强的灵敏度和平滑性,但计算复杂度较高。
► 代码实现
```c
define a 30
char value;
char filter;
char new_value;
new_value = get_ad();
return (100 - a) value + a new_value;
```
01去抖动滤波► 方法概述
去抖动滤波通过 计数器监测采样一致性和有效值,进而减少信号抖动和提高稳定性。这种方法特别适用于变化缓慢的信号处理。
► 优缺点分析
在快速变化信号的处理中,其滤波效果相对较差。
02限幅消抖滤波► 方法和优缺点
限幅消抖滤波法 综合限幅与消抖的优点,在保持快速响应的同时避免干扰值。通过融合限幅与消抖,这种方法在抗干扰方面具备较大优势。





