精华内容
下载资源
问答
  • 数字滤波算法 数字滤波算法 数字滤波算法 数字滤波算法
  • 数字滤波

    2009-11-13 12:20:00
    数字滤波技术是数字信号处理的核心技术,而FIR数字滤波器因其具有严格的线性相位、总是稳定等特点而广泛应用于数字信号处理的各个领域,是一个非常重要的研究课题。本文主要研究了数字滤波器的基本理论,并对有限...

     

    数字滤波技术是数字信号处理的核心技术,而FIR数字滤波器因其具有严格的线性相位、总是稳定等特点而广泛应用于数字信号处理的各个领域,是一个非常重要的研究课题。本文主要研究了数字滤波器的基本理论,并对有限冲击响应滤波器的设计和实现进行了分析和研究,尤其是在MATLAB环境下的FIR数字滤波器的设计,主要是窗函数法及利用MATLAB环境下FIR滤波器的设计工具的设计方法,并用MATLAB语言编写了可以选择滤波器四种类型及七种窗口函数的仿真程序,进行了具体的仿真分析。

    展开全文
  • 数字信号处理—数字滤波 数字信号处理—数字滤波
  • 数字滤波算法

    2021-04-18 10:03:34
    文章目录几种简单的数字滤波算法采用数字滤波算法克服随机干扰的误差具有以下优点:限幅滤波算法中值滤波算法算术平均滤波算法加权平均滤波算法滑动平均滤波算法一阶低通滤波 几种简单的数字滤波算法 免责声明:...

    免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

    几种简单的数字滤波算法

    采用数字滤波算法克服随机干扰的误差具有以下优点:

    • 数字滤波无需其他的硬件成本,只有一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

    • 数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

    • 只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

    在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波

    限幅滤波算法

      该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。
    A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。
    算法的程序代码如下:

    #define A //允许的最大差值
    char data; //上一次的数据
    char filter()
    { 
       char datanew; //新数据变量
       datanew=get_data(); //获得新数据变量
       if((datanew-data)>A||(data-datanew>A))
          return data;
       else
          return datanew;
    }
    

    说明:限幅滤波法主要用于处理变化较为缓慢的数据,如温度、物体的位置等。使用时,关键要选取合适的门限制A。通常这可由经验数据获得,必要时可通过实验得到。

    中值滤波算法

      该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。算法的程序代码如下:

    #define N 11 //定义获得的数据个数 2 3
    char filter()
    {
    	char value_buff[N]; //定义存储数据的数组 8 9    char count,i,j,temp;
    	for(count=0;count<N;count++)
    	{
    	value_buf[count]=get_data();
    	delay(); //如果采集数据比较慢,那么就需要延时或中断1819    
    	}
    	for(j=0;j<N;j++)
    	{
    		if(value_buff[i]>value_buff[i+1])
    		{
    			temp=value_buff[i];
    			value_buff[i]=value_buff[i+1];
    			value_buff[i+1]=temp;
    		}
    	}
    	return value_buff[(N-1)/2];
    }
    

    说明:中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

    算术平均滤波算法

      该算法的基本原理很简单,就是连续取N次采样值后进行算术平均,算法的程序代码如下:

    char filter()
    {
    	int sum=0;
    	for(count=0;count<N;count++)
    	{
    		sum+=get_data();
    		delay():
    	}
    	return (char)(sum/N);
    }
    

    说明:算术平均滤波算法适用于对具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值附近上下波动。
    信号的平均平滑程度完全到决于N值。当N较大时,平滑度高,灵敏度低;当N较小时,平滑度低,但灵敏度高。为了方便求平均值,N一般取4、8、16、32之类的2的整数幂,以便在程序中用移位操作来代替除法。

    加权平均滤波算法

      由于前面所说的“算术平均滤波算法”存在平滑度和灵敏度之间的矛盾。为了协调平滑度和灵敏度之间的关系,可采用加权平均滤波。
    它的原理是对连续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<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);
    }
    

    滑动平均滤波算法

      以上介绍和各种平均滤波算法有一个共同点,即每获取一个有效采样值必须连续进行若干次采样,当采速度慢时,系统的实时得不到保证。
      这里介绍的滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。
      如果取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);
    }
    

    一阶低通滤波

      将普通硬件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
    

    程序实现如下:

    float test(float bat_soc_mapping)
    {
      static float bat_soc_temp_old=0;
      /* 一阶低通滤波 */
      bat_soc_mapping=(bat_soc_mapping + bat_soc_temp_old*9)/10;
      bat_soc_temp_old=bat_soc_mapping;
      return bat_soc_mapping;
    }
    

      当目标参数为变化很慢的物理量时,这是很有效的。另外一方面,它不能滤除高于1/2采样频率的干搅信号,本例中采样频率为2Hz,故对1Hz以上的干搅信号应采用其他方式滤除,
    低通滤波算法程序于加权平均滤波相似,但加权系数只有两个:a和1-a。为计算方便,a取一整数,1-a用256-a,来代替,计算结果舍去最低字节即可,因为只有两项,a和1-a,均以立即数的形式编入程序中,不另外设表格。
      虽然采样值为单元字节(8位A/D)。为保证运算精度,滤波输出值用双字节表示,其中一个字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。
      设Yn-1存放在30H(整数)和31H(小数)两单元中,Yn存放在32H(整数)和33H(小数)中。

    展开全文
  • Matlab实现一个数字滤波Matlab实现一个数字滤波Matlab实现一个数字滤波Matlab实现一个数字滤波Matlab实现一个数字滤波Matlab实现一个数字滤波
  • 数字滤波C程序

    2019-07-29 14:49:00
    八种C语言编写的数字滤波程序,包括头文件和.C文件。八种C语言编写的数字滤波程序,包括头文件和.C文件。
  • Matlab的语音信号数字滤波,Matlab的语音信号数字滤波,Matlab的语音信号数字滤波,Matlab的语音信号数字滤波
  • 数字滤波C语言

    2015-12-06 21:39:38
    递推平均数字滤波,C语言实现,可输出文本文档
  • 数字滤波.zip

    2019-09-29 17:35:02
    本程序包括了低通、高通、带通、带阻等数字滤波matlab程序代码,并提供了范例数据,亲测可用,主要用于地震波的滤波处理
  • 数字滤波和软件滤波

    2012-08-02 10:25:31
    可以看看,关于数字滤波和软件滤波方面的,有需要的可以下载看看
  • 数字滤波源代码

    2015-10-14 11:34:52
    数字滤波源码 可实现高通滤波 低通滤波 带通滤波
  • 数字滤波技术总结

    2021-04-22 21:22:59
    本文目录数字滤波技术简介限幅滤波中值滤波算法算术平均滤波 数字滤波技术简介 所谓数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重。故实质上它是一种程序滤波。 在单片机进行数据采集时,会...

    数字滤波技术简介

    所谓数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重。故实质上它是一种程序滤波。
    在单片机进行数据采集时,会遇到数据的随机误差,随机误差是由随机干扰引起的,其特点是在相同条件下测量同一量时,其大小和符号会现无规则的变化而无法预测,但多次测量的结果符合统计规律。为克服随机干扰引起的误差,硬件上可采用滤波技术,软件上可采用软件算法实现数字滤波。滤波算法往往是系统测控算法的一个重要组成部分,实时性很强。
    采用数字滤波算法克服随机干扰的误差具有以下优点:
    1、数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。

    2、数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。

    3、只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。

    4、在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。

    限幅滤波

    def:该运算的过程中将两次相邻的采样相减,求出其增量,然后将增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样有效;否则取上次采样值作为本次数据的样本。

    
    #define  Max_wr //允许的最大差值
    char data; //上一次的数据
    char filter1()
    {
      char datanew; //新数据变量
      datanew = get_data(); //获得新数据变量
      if((datanew - data) > A || (data - datanew > A))
      	  return data;
      else
          return datanew;
    }
    

    eg:我们通过实验采集到的数据波形如下图所示:
    在这里插入图片描述
    上图为通过实验采集到的数据波形,下图为经过限幅滤波后的波形,可以看到很多毛刺都被滤除了。

    #define N 11 //定义获得的数据个数
    char filter2()
    {
    	  char value_buff[N]; //定义存储数据的数组
    	  char count,i,j,temp;
    	  for(count=0;count<N;count++)
    	  {
    	      value_buf[count]=get_data();
    	      delay(); //如果采集数据比较慢,那么就需要延时或中断
    	  }
    	  //冒泡排序
    	  for(j=0;j<N-1;j++)
    	  {
      			for(i=0;i<N-j-1;i++)
      			{
    		      if(value_buff[i]>value_buff[i+1]
    		      {
    		          temp=value_buff[i];
    		          value_buff[i]=value_buff[i+1];
    		          value_buff[i+1]=temp;
    		      }
    		}  
    	}
    return value_buff[(N-1)/2];
    }
    

    说明:限幅滤波程序设计简单、运算速度快、占用RAM少,是一种最简单的基本滤波方法。能够克服偶然因素引入的脉冲干扰,也可以消除波形上的尖峰毛刺,但是不能抑制周期性的干扰,而且其完全削除大幅度的阶跃信号,容易造成控制失调,一般不适用于开关电源这类变化剧烈,需要迅速反馈的场景,适用于水温控制等变化缓慢,安全性高的应用。使用时,关键要选取合适的门限制A的。通常这可由经验数据获得,必要时可通过实验得到。

    中值滤波算法

    该运算的过程是对某一参数连续采样N次(N一般为奇数),然后把N次采样的值按从小到大排列,再取中间值作为本次采样值,整个过程实际上是一个序列排序的过程。

    在这里插入图片描述
    上图为通过实验采集到的数据波形,下图为经过中值滤波后的波形,可以看到其滤波效果较限幅滤波较好,毛刺基本被滤除。

    适用性分析:
    这种滤波方法能够有效的克服偶然因素引起的波动干扰,特别是对于像温度、液位等变化缓慢的被测参数有良好的滤波效果,但是对于流量、速度或者其他快速变化的信号参数则不适合使用这种方法。中值滤波法的程序设计要稍复杂一些,排序可以使用冒泡法或者选择排序法等,由于引入了排序算法,所以该方法不能处理速度要求很高的信号。其运算处理速度和占用的RAM直接受所选择的数值N决定。
    中值滤波比较适用于去掉由偶然因素引起的波动和采样器不稳定而引起的脉动干扰。若被测量值变化比较慢,采用中值滤波法效果会比较好,但如果数据变化比较快,则不宜采用此方法。

    算术平均滤波

    该方法也是先将原来设计要求的采样间隔△T进行细分,在AT内采样N次,但是对于采集进来的数据不是进行排序,而是进行算术平均,算术平均的结果作为本次采样值。N值的选取比较关键,N值较大者处理信号的平滑度会较高,但是灵敏度降低;相反,N值较小者处理信号的灵敏度提高,但是平滑度降低。该算法的基本原理很简单,就是连续取N次采样值后进行算术平均。

    #define N num
    char filter()
    {
    	int sum=0;
    	for(count=0;count<N;count++)
    	{
    	    sum+=get_data();
    		delay():
    	}
    	return (char)(sum/N);
    }
    

    在这里插入图片描述
    上图为通过实验采集到的数据波形,下图为经过算术滤波后的波形。

    这种滤波方法是适用于对具有随机干扰的信号进行处理,并且被处理的信号必须具有一个平均值,信号在这个平均值上下波动。该方法对于高速信号并不适用。对于毛刺信号,可以看到均值滤波将其分担到了周围的采样点上,不如中值滤波那样能够完全去除。但是对于随机噪声信号,由于其理论均值为0,均值滤波对第一段噪声有良好的滤除效果。该滤波方法运算处理速度和RAM的占用率也受所选择的数值N决定,可以使用时间复杂度较低的排序方法降低运算开销。

    展开全文
  • 文章目录引言1 惯性数字滤波2 实现代码3 电路图 引言 一个计算机数据采集系统在生产过程中会受到各种干扰,从而降低了有用信号的真实性。虽然在输入通道上接入一个RC低通滤波器来抑制工频及其以上频率的干扰,但对...

    引言

    一个计算机数据采集系统在生产过程中会受到各种干扰,从而降低了有用信号的真实性。虽然在输入通道上接入一个RC低通滤波器来抑制工频及其以上频率的干扰,但对频率很低的干扰却由于制作上的难度而难以实现。采用数字形式来模拟RC低通滤波器的输入输出数学关系,可以得到较好的滤波效果。常用数字滤波方法有限幅滤波、算术平均滤波、中值滤波惯性滤波等。以下以单片机为CPU、8-bit A/D and D/A converter的PCF8591以及UA741。对含有干扰的正弦信号进行采样与惯性数字滤波进行实现。

    1 惯性数字滤波

    在这里插入图片描述
    在这里插入图片描述

    2 电路图

    用Proteus绘制如下电路图
    在这里插入图片描述
    UA741将正弦信号S1脉冲干扰信号S2混合,配置如上图所示,模拟产生含干扰的信号源,其输出信号Vin电平在0V-5V之间。
    设置U3(V-) = -12VU3(V+) = 12V

    3 算法实现代码

    	int Y[2];
    	int X;
    	uchar  adc_d; 	 // 接受到的AD转换数据
    	uchar  dac_d;	 // 要显示的DA转换数据
    	
    	X=(uint)adc_d;		//adc_d强制转换为无符号整形提高计算精度
    	Y[0]=X+A*(Y[1]-X)/100;		//运用惯性数字滤波公式进行滤波计算输出值	
    
    	/*限幅*/
    	if(Y[0]<0)
    	{ 
    		Y[0]=0;
    	}
    	else if(Y[0]>255) 
    	{
    		Y[0]=255;
    	}
    	
    	/*将滤波后的值赋给dac_d准备输出,并存入Y[1]*/
    	dac_d=Y[0]; Y[1]=Y[0];
    
    • 惯性滤波的时间参数A的取值范围为0-100

    4 滤波结果

    取A = 10时
    在这里插入图片描述
    取A = 90时
    在这里插入图片描述
    取A=10和90观察滤波波形,说明惯性滤波器的时间参数τ越大滤波效果越好,但会造成相位滞后,且输出幅值会减小。

    展开全文
  • 数字滤波分为 IIR 滤波,和FIR 滤波。 FIR 滤波: import scipy.signal as signal import numpy as np import pylab as pl import matplotlib.pyplot as plt import matplotlib from scipy import signal b = ...
  • 单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并... 采用数字滤波算法克服随机干扰的误差具有以下优点: l 数字滤波无需其他的硬件成本,只
  • 单片机主要作用是控制外围的器件,并实现一定的通信和数据处理。但在某些特定场合,不可避免地要用到数学运算,尽管单片机并... 采用数字滤波算法克服随机干扰的误差具有以下优点: l 数字滤波无需其他的硬件成本,只
  • FIR数字滤波的FPGA实现

    2021-02-03 13:12:33
    FIR数字滤波的FPGA实现、电子技术,开发板制作交流
  • 文章主要介绍了实现数字滤波的C语言程序
  • 10种简单的数字滤波

    2020-08-02 06:01:31
    下面给大家提供了十种简单的数字数字滤波,希望对大家的学习有所帮助。
  • 数字滤波算法a

    2014-12-17 16:24:19
    数字滤波算法,
  • 以单片机为核心的工业控制、数据处理装置等应用系统在数据的采集和传输过程中往往会混杂各种随机干扰信号,采用数字滤波技术可消弱或滤除这些随机干扰信号。根据不同的采样输入信号,给出了相应的数字滤波方法,并完成...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,786
精华内容 3,114
关键字:

数字滤波