嵌入式常见的十种滤波算法

1.引言

        在嵌入式系统开发中,信号滤波是非常重要的一个方面。嵌入式设备需要对从传感器中接收的信号进行处理,以获取结果或反馈,但这些信号通常受到各种噪声和干扰的影响。因此,开发者需要使用一些信号滤波算法来消除噪声和干扰,准确地提取所需的信号。本文将介绍嵌入式常见的10种滤波方法,并介绍其滤波方式和意义。

        一般在系统中可选用硬件滤波和软件滤波,滤波技术的目的在于去除或减少噪声和干扰,以便更准确地提取所需的信号。使用这些方法可以有效地提高系统的可靠性和准确性,并减少误差和能耗,嵌入式设备的开发人员可以根据系统的特点和需求选择合适的滤波算法。

2.滤波方式

  1. 硬件上:RC 滤波器、LC 滤波器等模拟滤波器进行滤波。
  2. 软件上:限幅滤波法、中位值滤波法、算术平均滤波法、递推平均滤波法、中位值平均滤波法、限幅平均滤波法、一阶滞后滤波法、加权递推平均滤波法、消抖滤波法、限幅消抖滤波法。

3. 10种经典的软件滤波方法介绍

3.1限幅滤波

        限幅滤波基本思路是根据被测对象确定相邻两次采样所允许的最大差值△Y, 然后在每次采样后和上次有效采样值进行比较,如果变化幅度不超过△Y,则本次采样有效;否则,则这次采样值被视为干扰而放弃,而以上次采样值为准。

1、方法

根据经验判断两次采样允许的最大偏差值A,每次采新值时判断:若本次值与上次值之差<=A,则本次有效;若本次值与上次值之差>A,本次无效,用上次值代替本次。

|yn-yn-1|≤△Y yn 有效如果本次值与上次值之差<=DEVIATION_MAX则本次值有效;

|yn-yn-1|>△Y :yn-1 有效,如果本次值与上次值之差>DEVIATION_MAX,则本次值无效,放弃本次值,用上次值代替本次值。(yn为第 n 次采样值, yn-1 为第(n-1)次采样值)

△Y一般根据经验来设定,确定两次采样允许的最大偏差值(设为DEVIATION_MAX)

2、优缺点

优点:能有效克服因偶然因素引起的脉冲干扰。

缺点:无法抑制那种周期性的干扰、平滑度差。

3、代码:

(注:本文假定从16位AD中读取数据(若采用更高位的AD可定义数据类型为int;子程序为get_ad(),用于获取AD采样数值;)

#define DEVIATION_MAX 10
    int16_t Value;
    int16_t filter(void)
    {
      int16_t new_Value;
      new_Value = get_ad();                                       //获取采样值
if( abs(new_Value - Value) > DEVIATION_MAX)    	         //abs()取绝对值函数
return Value;             
      else  
return new_Value;
    }

3.2中位值滤波

1、方法

连续采样N次,按大小排列,取中间值为本次有效值。

2、优缺点

优点:能够克服波动干扰,对温度、液位等变化缓慢的被测参数有良好的滤波效果。

缺点:对速度等快速变化的参数不宜。

3、代码:

#define N 11
char filter()
{
	char value_buf[N];
	char count,i,j,temp;
	for(count = 0;count < N;count++)                                //获取采样值
	{
		value_buf[count] = get_ad();
		delay();
	}
	for(j = 0;j<(N-1);j++)
		for(i = 0;i<(n-j);i++)
		if(value_buf[i]>value_buf[i+1])
		{
			temp = value_buf[i];
			value_buf[i] = value_buf[i+1];
			value_buf[i+1] = temp;
		}
	return value_buf[(N-1)/2];
}

3.3算术平均滤波

1、方法
 连续采样N次,取平均

N较大时平滑度高,灵敏度低;

N较小时平滑度低,灵敏度高;
N值的选取:一般流量,N=12;压力:N=4。一般N=12。
2、优缺点
优点:适用于对一般具有随机干扰的信号进行滤波;这种信号的特点是有一个平均值,信号在某一数值范围附近上下波动。

缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用;占用RAM多,速度慢。
3、代码

#define N 12
char filter()
{
	int sum = 0;
	for(count = 0; count<N; count++)
		sum += get_ad();
	return (char)(sum/N);
}

3.4递推平均滤波

1、方法

取N个采样值形成队列,队列的长度固定为N,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),把队列中的N个数据进行算术平均运算,获得新的滤波结果。

N值的选取:流量,N=12;压力,N=4;液面,N=4-12;温度,N=1-4。

2、优缺点

   优点:对周期性干扰抑制性好,平滑度高,适用于高频振动系统。

   缺点:灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;不易消除由于脉冲干扰所引起的采样值偏差;不适用于脉冲干扰比较严重的场合;比较浪费RAM。

3、代码:

# define FILTER_N 12
int filter_buf[FILTER_N + 1];
int Filter() 
{
  int i;
  int filter_sum = 0;
  filter_buf[FILTER_N] = Get_AD();
  for(i = 0; i < FILTER_N; i++) {
    filter_buf = filter_buf[i + 1]; 						        //所有数据左移,低位仍掉
    filter_sum += filter_buf;
  }
  return (int)(filter_sum / FILTER_N);
}

3.5中位值平均滤波法

1、方法

   采样N个值,去掉最大最小,计算N-2的平均值,N= 3~14

2、优缺点

   融合了中位值,平均值的有点

   消除脉冲干扰

   计算速度慢,RAM占用大

3、代码

#define N 12
char filter()
{
	char count,i,j;
	char Vlaue_buf[N];
	int sum=0;
	for(count=0;count<N;count++)
		Value_buf[count]= get_ad();
	for(j=0;j<(N-1);j++)
		for(i=0;i<(N-j);i++)
			if(Value_buf[i]>Value_buf[i+1])
			{
				 temp = Value_buf[i];
				 Value_buf[i]= Value_buf[i+1];
				  Value_buf[i+1]=temp;
			}
			for(count =1;count<N-1;count++)
				sum += Value_buf[count];
			return (char)(sum/(N-2));
}

3.6限幅平均滤波法

1、方法:

相当于“限幅滤波法”+“递推平均滤波法”,每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理。

2、优缺点:

优点:融合限幅、均值、队列的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。

缺点:消除脉冲干扰,占RAM较多。

3、代码

#define A 10
#define N 12
char value,i=0;
char value_buf[N];
char filter()
{
	char new_value,sum=0;
	new_value=get_ad();
	if(Abs(new_value-value)<A)
		value_buf[i++]=new_value;
	if(i==N)i=0;
	for(count =0 ;count<N;count++)
		sum+=value_buf[count];
	return (char)(sum/N);
}

3.7一阶滞后滤波法

1、方法

   取a=0~1,本次滤波结果 = (1-a)*本次采样值 + a*上次滤波结果。

2、优缺点

   优点:对周期性干扰具有良好的抑制作用,适用波动频率较高场合。

   缺点:灵敏度低,相位滞后,滞后程度取决于a值大小;不能消除滤波频率高于采样频率1/2的干扰信号。

3、代码:

/*为加快程序处理速度,取a=0~100*/
#define a 30
char value;
char filter()
{
	char new_value;
	new_value=get_ad();
	return ((100-a)*value + a*new_value);
}

3.8加权递推平均滤波法

1、方法

   对递推平均滤波的改进,不同时刻的数据加以不同权重,通常越新的数据权重越大,这样灵敏度高,但平滑度低。

2、优缺点

   适用有较大滞后时间常数和采样周期短的系统,对滞后时间常数小,采样周期长、变化慢的信号不能迅速反应其所受干扰。

3、代码

/* coe数组为加权系数表 */
#define N 12
char code coe[N]={1,2,3,4,5,6,7,8,9,10,11,12};
char code sum_coe={1+2+3+4+5+6+7+8+9+10+11+12};
char filter()
{
	char count;
	char value_buf[N];
	int sum=0;
	for(count=0;count<N;count++)
	{
		value_buf[count]=get_ad();
	}
	for(count=0;count<N;count++)
		sum+=value_buf[count]*coe[count];
	return (char)(sum/sum_coe);
}

3.9消抖滤波法

1、方法

   设置一个滤波计数器,将采样值与当前有效值比较,

   若采样值=当前有效值,则计数器清0;

   若采样值不等于当前有效值,则计数器+1;

   若计数器溢出,则采样值替换当前有效值,计数器清0;

2、优缺点

   对变化慢的信号滤波效果好,变化快的不好。

   避免临界值附近的跳动,计数器溢出时若采到干扰值则无法滤波。

3、代码

#define N 12
char filter()
{
	char count=0,new_value;
	new_value=get_ad();
	while(value!=new_value)
	{
		count++;
		if(count>=N) return new_value;
		new_value=get_ad();
	}
	return value;
}

3.10限幅消抖滤波法

1方法

先限幅,后消抖。

2优缺点

融合了限幅、消抖的优点。

避免引入干扰值,对快速变化的信号不宜。

3代码

#define A 10
#define N 12
char value;
char filter()
{
	char new_value,count=0;
	new_value=get_ad();
	while(value!=new_value)
	{
		if(Abs(value-new_value)<A)
		{
		count++;
		if(count>=N) return new_value;
		new_value=get_ad();
		}
	return value;
	}
}

 4.意义

这些滤波方法都有一些共同的作用,包括:

1.去除或降低噪声和干扰。

2.提高信号质量和准确性。

3.提高系统的鲁棒性和可靠性。

4.降低滤波器的延迟和功耗。

信号处理在嵌入式系统中是非常关键的,滤波技术可以帮助我们提高系统的准确性和可靠性。因此,嵌入式常见的10种滤波方法尤为重要,这些方法可以帮助开发人员处理和优化从传感器、外设和其他来源收集的数据。

5.结论

信号滤波是嵌入式系统开发过程中不可或缺的一部分,它可以提高系统的鲁棒性和可靠性。本文介绍了嵌入式常见的10种滤波方法,并讨论了它们的作用、意义和目的。在选择信号滤波算法时,我们应该基于系统特点和使用环境的需求来选择最合适的滤波方法。

十大滤波算法-CSDN博客

引用大佬文章并增加其内容。

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本资源是一个包含10个STM32控制器中常见算法的综合资源。这些算法广泛应用于嵌入式系统、自动控制、信号处理等领域。在该资源中,我们提供了一系列基于STM32平台的算法实现,涵盖了从基本的数据处理到高级控制算法的多个方面。这些算法能够帮助开发人员在STM32控制器上快速实现复杂的功能,并优化系统性能。以下将详细描述这10个常见算法的特点和适用场景。 一、PID控制算法: PID控制算法是一种常用的反馈控制算法,能够在嵌入式系统中实现精确的控制。适用于电机控制、温度控制等场景。 二、滤波算法滤波算法用于消除信号中的噪声和干扰,提高信号质量。适用于传感器信号处理、数据采集等应用。 三、正弦波生成算法: 正弦波生成算法能够产生稳定的正弦波信号,用于驱动交流电机、音频合成等。 四、快速傅里叶变换(FFT): FFT算法用于高效地进行频域分析,适用于音频处理、振动分析等领域。 五、二维插值算法: 二维插值算法用于图像处理、传感器数据补偿等场景,实现平滑数据转换。 六、运动控制算法: 运动控制算法用于实现直线插补、圆弧插补等运动路径规划,适用于机器人控制、CNC等应用。 七、遗传算法: 遗传算法是一种优化算法,用于求解复杂问题的全局最优解,适用于参数优化、路径规划等。 八、无线通信协议: 无线通信协议如BLE、WiFi、LoRa等,用于实现STM32控制器与其他设备的通信。 九、数据压缩算法: 数据压缩算法用于将大量数据压缩存储,适用于嵌入式设备存储资源有限的场景。 十、人工智能算法: 人工智能算法如神经网络、深度学习等,用于图像识别、语音识别等智能应用。 适用场景: 本资源涵盖了STM32控制器应用中常见算法,适用于多个领域,包括但不限于: 工业控制:如电机控制、传感器数据处理、运动规划等。 无线通信:使用不同的通信协议实现与其他设备的无线通信。 嵌入式系统:优化系统性能、节约存储资源、提高算法执行效率。 图像与信号处理:图像处理、音频处理、频域分析等应用。 总结: 该STM32常见算法资源为开发人员提供了丰富的工具,帮助他们在STM32控制器上快速实现各种复杂的功能。这些算法广泛应用于多个领域,为嵌入式系统提供了更多的功能和优化选择。通过使用这些算法开发人员可以大大提高系统的性能,并实现更多创新的应用。希望这个资源能够为STM32开发者带来便利和灵感,推动嵌入式系统的发展。
08-07
本资源是一个包含10个STM32控制器中常见算法的综合资源。这些算法广泛应用于嵌入式系统、自动控制、信号处理等领域。在该资源中,我们提供了一系列基于STM32平台的算法实现,涵盖了从基本的数据处理到高级控制算法的多个方面。这些算法能够帮助开发人员在STM32控制器上快速实现复杂的功能,并优化系统性能。以下将详细描述这10个常见算法的特点和适用场景。 一、PID控制算法: PID控制算法是一种常用的反馈控制算法,能够在嵌入式系统中实现精确的控制。适用于电机控制、温度控制等场景。 二、滤波算法滤波算法用于消除信号中的噪声和干扰,提高信号质量。适用于传感器信号处理、数据采集等应用。 三、正弦波生成算法: 正弦波生成算法能够产生稳定的正弦波信号,用于驱动交流电机、音频合成等。 四、快速傅里叶变换(FFT): FFT算法用于高效地进行频域分析,适用于音频处理、振动分析等领域。 五、二维插值算法: 二维插值算法用于图像处理、传感器数据补偿等场景,实现平滑数据转换。 六、运动控制算法: 运动控制算法用于实现直线插补、圆弧插补等运动路径规划,适用于机器人控制、CNC等应用。 七、遗传算法: 遗传算法是一种优化算法,用于求解复杂问题的全局最优解,适用于参数优化、路径规划等。 八、无线通信协议: 无线通信协议如BLE、WiFi、LoRa等,用于实现STM32控制器与其他设备的通信。 九、数据压缩算法: 数据压缩算法用于将大量数据压缩存储,适用于嵌入式设备存储资源有限的场景。 十、人工智能算法: 人工智能算法如神经网络、深度学习等,用于图像识别、语音识别等智能应用。 适用场景: 本资源涵盖了STM32控制器应用中常见算法,适用于多个领域,包括但不限于: 工业控制:如电机控制、传感器数据处理、运动规划等。 无线通信:使用不同的通信协议实现与其他设备的无线通信。 嵌入式系统:优化系统性能、节约存储资源、提高算法执行效率。 图像与信号处理:图像处理、音频处理、频域分析等应用。 总结: 该STM32常见算法资源为开发人员提供了丰富的工具,帮助他们在STM32控制器上快速实现各种复杂的功能。这些算法广泛应用于多个领域,为嵌入式系统提供了更多的功能和优化选择。通过使用这些算法开发人员可以大大提高系统的性能,并实现更多创新的应用。希望这个资源能够为STM32开发者带来便利和灵感,推动嵌入式系统的发展。
本资源是一个包含10个STM32控制器中常见算法的综合资源。这些算法广泛应用于嵌入式系统、自动控制、信号处理等领域。在该资源中,我们提供了一系列基于STM32平台的算法实现,涵盖了从基本的数据处理到高级控制算法的多个方面。这些算法能够帮助开发人员在STM32控制器上快速实现复杂的功能,并优化系统性能。以下将详细描述这10个常见算法的特点和适用场景。 一、PID控制算法: PID控制算法是一种常用的反馈控制算法,能够在嵌入式系统中实现精确的控制。适用于电机控制、温度控制等场景。 二、滤波算法滤波算法用于消除信号中的噪声和干扰,提高信号质量。适用于传感器信号处理、数据采集等应用。 三、正弦波生成算法: 正弦波生成算法能够产生稳定的正弦波信号,用于驱动交流电机、音频合成等。 四、快速傅里叶变换(FFT): FFT算法用于高效地进行频域分析,适用于音频处理、振动分析等领域。 五、二维插值算法: 二维插值算法用于图像处理、传感器数据补偿等场景,实现平滑数据转换。 六、运动控制算法: 运动控制算法用于实现直线插补、圆弧插补等运动路径规划,适用于机器人控制、CNC等应用。 七、遗传算法: 遗传算法是一种优化算法,用于求解复杂问题的全局最优解,适用于参数优化、路径规划等。 八、无线通信协议: 无线通信协议如BLE、WiFi、LoRa等,用于实现STM32控制器与其他设备的通信。 九、数据压缩算法: 数据压缩算法用于将大量数据压缩存储,适用于嵌入式设备存储资源有限的场景。 十、人工智能算法: 人工智能算法如神经网络、深度学习等,用于图像识别、语音识别等智能应用。 适用场景: 本资源涵盖了STM32控制器应用中常见算法,适用于多个领域,包括但不限于: 工业控制:如电机控制、传感器数据处理、运动规划等。 无线通信:使用不同的通信协议实现与其他设备的无线通信。 嵌入式系统:优化系统性能、节约存储资源、提高算法执行效率。 图像与信号处理:图像处理、音频处理、频域分析等应用。 总结: 该STM32常见算法资源为开发人员提供了丰富的工具,帮助他们在STM32控制器上快速实现各种复杂的功能。这些算法广泛应用于多个领域,为嵌入式系统提供了更多的功能和优化选择。通过使用这些算法开发人员可以大大提高系统的性能,并实现更多创新的应用。希望这个资源能够为STM32开发者带来便利和灵感,推动嵌入式系统的发展。
本资源是一个包含10个STM32控制器中常见算法的综合资源。这些算法广泛应用于嵌入式系统、自动控制、信号处理等领域。在该资源中,我们提供了一系列基于STM32平台的算法实现,涵盖了从基本的数据处理到高级控制算法的多个方面。这些算法能够帮助开发人员在STM32控制器上快速实现复杂的功能,并优化系统性能。以下将详细描述这10个常见算法的特点和适用场景。 一、PID控制算法: PID控制算法是一种常用的反馈控制算法,能够在嵌入式系统中实现精确的控制。适用于电机控制、温度控制等场景。 二、滤波算法滤波算法用于消除信号中的噪声和干扰,提高信号质量。适用于传感器信号处理、数据采集等应用。 三、正弦波生成算法: 正弦波生成算法能够产生稳定的正弦波信号,用于驱动交流电机、音频合成等。 四、快速傅里叶变换(FFT): FFT算法用于高效地进行频域分析,适用于音频处理、振动分析等领域。 五、二维插值算法: 二维插值算法用于图像处理、传感器数据补偿等场景,实现平滑数据转换。 六、运动控制算法: 运动控制算法用于实现直线插补、圆弧插补等运动路径规划,适用于机器人控制、CNC等应用。 七、遗传算法: 遗传算法是一种优化算法,用于求解复杂问题的全局最优解,适用于参数优化、路径规划等。 八、无线通信协议: 无线通信协议如BLE、WiFi、LoRa等,用于实现STM32控制器与其他设备的通信。 九、数据压缩算法: 数据压缩算法用于将大量数据压缩存储,适用于嵌入式设备存储资源有限的场景。 十、人工智能算法: 人工智能算法如神经网络、深度学习等,用于图像识别、语音识别等智能应用。 适用场景: 本资源涵盖了STM32控制器应用中常见算法,适用于多个领域,包括但不限于: 工业控制:如电机控制、传感器数据处理、运动规划等。 无线通信:使用不同的通信协议实现与其他设备的无线通信。 嵌入式系统:优化系统性能、节约存储资源、提高算法执行效率。 图像与信号处理:图像处理、音频处理、频域分析等应用。 总结: 该STM32常见算法资源为开发人员提供了丰富的工具,帮助他们在STM32控制器上快速实现各种复杂的功能。这些算法广泛应用于多个领域,为嵌入式系统提供了更多的功能和优化选择。通过使用这些算法开发人员可以大大提高系统的性能,并实现更多创新的应用。希望这个资源能够为STM32开发者带来便利和灵感,推动嵌入式系统的发展。
08-07
本资源是一个包含10个STM32控制器中常见算法的综合资源。这些算法广泛应用于嵌入式系统、自动控制、信号处理等领域。在该资源中,我们提供了一系列基于STM32平台的算法实现,涵盖了从基本的数据处理到高级控制算法的多个方面。这些算法能够帮助开发人员在STM32控制器上快速实现复杂的功能,并优化系统性能。以下将详细描述这10个常见算法的特点和适用场景。 一、PID控制算法: PID控制算法是一种常用的反馈控制算法,能够在嵌入式系统中实现精确的控制。适用于电机控制、温度控制等场景。 二、滤波算法滤波算法用于消除信号中的噪声和干扰,提高信号质量。适用于传感器信号处理、数据采集等应用。 三、正弦波生成算法: 正弦波生成算法能够产生稳定的正弦波信号,用于驱动交流电机、音频合成等。 四、快速傅里叶变换(FFT): FFT算法用于高效地进行频域分析,适用于音频处理、振动分析等领域。 五、二维插值算法: 二维插值算法用于图像处理、传感器数据补偿等场景,实现平滑数据转换。 六、运动控制算法: 运动控制算法用于实现直线插补、圆弧插补等运动路径规划,适用于机器人控制、CNC等应用。 七、遗传算法: 遗传算法是一种优化算法,用于求解复杂问题的全局最优解,适用于参数优化、路径规划等。 八、无线通信协议: 无线通信协议如BLE、WiFi、LoRa等,用于实现STM32控制器与其他设备的通信。 九、数据压缩算法: 数据压缩算法用于将大量数据压缩存储,适用于嵌入式设备存储资源有限的场景。 十、人工智能算法: 人工智能算法如神经网络、深度学习等,用于图像识别、语音识别等智能应用。 适用场景: 本资源涵盖了STM32控制器应用中常见算法,适用于多个领域,包括但不限于: 工业控制:如电机控制、传感器数据处理、运动规划等。 无线通信:使用不同的通信协议实现与其他设备的无线通信。 嵌入式系统:优化系统性能、节约存储资源、提高算法执行效率。 图像与信号处理:图像处理、音频处理、频域分析等应用。 总结: 该STM32常见算法资源为开发人员提供了丰富的工具,帮助他们在STM32控制器上快速实现各种复杂的功能。这些算法广泛应用于多个领域,为嵌入式系统提供了更多的功能和优化选择。通过使用这些算法开发人员可以大大提高系统的性能,并实现更多创新的应用。希望这个资源能够为STM32开发者带来便利和灵感,推动嵌入式系统的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值