十一种简易滤波器设计方法
- 格式:docx
- 大小:25.33 KB
- 文档页数:12
一.十一种通用滤波算法(转)1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4 B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。
常用模拟滤波器的设计方法设计模拟滤波器常用的方法有很多种,如巴特沃斯滤波器、切比雪夫滤波器、脉冲响应滤波器等。
这些方法各有特点,适用于不同的滤波器设计需求。
下面将逐步介绍常用模拟滤波器的设计方法。
1. 巴特沃斯滤波器的设计方法巴特沃斯滤波器是一种最常用的模拟滤波器,其主要特点是通频带的频率响应是平坦的,也就是说在通过的频率范围内的信号不会被衰减或增强。
巴特沃斯滤波器的设计方法包括以下步骤:1.1 确定滤波器类型首先,根据滤波器的设计需求,确定滤波器的类型,包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
不同类型的滤波器在频率响应和陡度上有一些差异。
1.2 确定滤波器模型根据滤波器类型,选择相应的滤波器模型。
比如,低通滤波器通常选择Butterworth滤波器模型、Elliptic滤波器模型或者Chebyshev滤波器模型。
1.3 确定滤波器参数确定滤波器的相关参数,包括截止频率、阻带衰减和通带波纹等。
这些参数的选择需要根据特定的滤波器性能需求决定。
1.4 开始设计根据确定的滤波器模型和参数,开始进行滤波器的设计。
可以使用电路设计软件进行模拟,或者手动计算和画图设计。
1.5 仿真和优化设计完成后,对滤波器进行仿真,检查其频率响应和时域特性。
根据仿真结果,可以调整一些参数以优化滤波器的性能。
1.6 实际搭建和测试在电路板上搭建设计好的滤波器电路,并进行实际测试。
测试结果比较与设计要求进行评估和调整,最终得到满足要求的滤波器。
2. 切比雪夫滤波器的设计方法切比雪夫滤波器是一种在通频带内具有较窄的波纹和较快的过渡带的滤波器。
其设计方法如下:2.1 确定滤波器类型和阶数选择滤波器的类型和阶数,通常切比雪夫滤波器可以选择类型Ⅰ和类型Ⅱ。
阶数的选择取决于滤波器对波纹的要求和频率范围。
2.2 确定滤波器参数确定滤波器的相关参数,包括截止频率、阻带衰减、通带波纹和过渡带宽度等。
这些参数的选择需要根据特定的滤波器性能需求决定。
滤波器的设计方法
滤波器的设计方法有很多种,常见的包括以下几种:
1. 理想滤波器设计方法:通过在频率域中指定理想的频率响应,然后通过傅里叶逆变换得到时间域的系数。
这种方法简单直观,但是理想滤波器在频率域是无限延伸的,实际中无法实现。
2. 巴特沃斯滤波器设计方法:巴特沃斯滤波器是一种具有最平坦的幅频响应和最小相位响应的滤波器,常用于低通、高通、带通和带阻滤波。
设计方法是通过指定阶数和过渡带宽来确定巴特沃斯滤波器的参数。
3. 频率抽样滤波器设计方法:这种设计方法是根据输入和输出信号在时间域上的采样值来确定滤波器的参数,常用于数字滤波器的设计。
4. 卡尔曼滤波器设计方法:卡尔曼滤波器是一种递归滤波器,利用系统的动态模型和测量的信号来预测和估计系统的状态。
卡尔曼滤波器在估计问题上表现出很好的性能,常用于信号处理、控制系统等领域。
5. 小波变换滤波器设计方法:小波变换滤波器是一种多分辨率分析工具,可以分析信号的时频特性。
通过选择适当的小波基函数和滤波器,可以实现不同的信号处理任务,如去噪、压缩、边缘检测等。
这些是一些常见的滤波器设计方法,根据具体的应用和需求选择合适的设计方法进行滤波器设计。
最简单的滤波电路图大全(八款最简单的滤波电路设计原理图详解)滤波电路基本概念滤波的概念就是根据傅里叶分析和变换提出的一个工程概念。
电信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。
只允许一定频率范围内的信号成分正常通过,而阻止另一部分频率成分通过的电路,叫做滤波电路。
根据高等数学理论,任何一个满足一定条件的信号,都可以被看成是由无限个正弦波叠加而成。
换句话说,就是工程信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。
只允许一定频率范围内的信号成分正常通过,而阻止另一部分频率成分通过的电路,叫做经典滤波器或滤波电路。
滤波电路常用于滤去整流输出电压中的纹波,一般由电抗元件组成,如在负载电阻两端并联电容器C,或与负载串联电感器L,以及由电容,电感组成而成的各种复式滤波电路。
滤波电路作用滤波电路的基本作用是让某种频率的电流通过或阻止某种频率的电流通过。
滤波电路作用是尽可能减小脉动的直流电压中的交流成分,保留其直流成分,使输出电压纹波系数降低,波形变得比较平滑。
滤波电路工作原理整流电路的输出电压不是纯粹的直流,从示波器观察整流电路的输出,与直流相差很大,波形中含有较大的脉动成分,称为纹波。
为获得比较理想的直流电压,需要利用具有储能作用的电抗性元件(如电容、电感)组成的滤波电路来滤除整流电路输出电压中的脉动成分以获得直流电压。
脉动系数(S)=输出电压交流分量的基波最大值/输出电压的直流分量半波整流输出电压的脉动系数为S=1.57,全波整流和桥式整流的输出电压的脉动系数S≈O.67。
对于全波和桥式整流电路采用C型滤波电路后,其脉动系数S=1/(4(RLC/T-1)。
(T为整流输出的直流脉动电压的周期。
)最简单的滤波电路图(一)简单一阶低通有源滤波器一阶低通滤波器的电路如图13.04所示,其幅频特性见图13.05,图中虚线为理想的情况,实线为实际的情况。
fir滤波器设计方法
fir滤波器是数字信号处理中常用的一种滤波器,它可以对信号进行滤波处理,去除噪声和干扰,提高信号的质量。
fir滤波器的设计方法有很多种,下面我们来介绍一下其中的几种常用方法。
第一种方法是窗函数法。
这种方法是最简单的fir滤波器设计方法,它的原理是将理想滤波器的频率响应与一个窗函数相乘,得到fir滤波器的频率响应。
常用的窗函数有矩形窗、汉宁窗、汉明窗等。
这种方法的优点是简单易懂,计算量小,但是滤波器的性能不够理想。
第二种方法是频率抽样法。
这种方法的原理是将理想滤波器的频率响应进行抽样,得到fir滤波器的频率响应。
抽样的频率可以根据滤波器的要求进行选择。
这种方法的优点是可以得到比较理想的滤波器性能,但是计算量较大。
第三种方法是最小二乘法。
这种方法的原理是通过最小化滤波器的误差平方和来得到fir滤波器的系数。
这种方法可以得到比较理想的滤波器性能,但是计算量较大。
第四种方法是频率采样法。
这种方法的原理是通过对滤波器的频率响应进行采样,得到fir滤波器的系数。
这种方法可以得到比较理想的滤波器性能,但是需要进行频率响应的采样,计算量较大。
以上是fir滤波器的几种常用设计方法,不同的方法适用于不同的滤波器要求。
在实际应用中,需要根据具体的情况选择合适的设计
方法,以得到满足要求的fir滤波器。
滤波器设计与实现方法总结滤波器是信号处理中常用的工具,用于降低或排除信号中的噪声或干扰,保留所需的频率成分。
在电子、通信、音频等领域中,滤波器发挥着重要作用。
本文将总结滤波器的设计与实现方法,帮助读者了解滤波器的基本原理和操作。
一、滤波器分类滤波器根据其频率特性可分为低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
它们分别具有不同的频率传递特性,适用于不同的应用场景。
1. 低通滤波器低通滤波器将高频信号抑制,只通过低于截止频率的信号。
常用的低通滤波器有巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器。
设计低通滤波器时,需要确定截止频率、阻带衰减和通带波动等参数。
2. 高通滤波器高通滤波器将低频信号抑制,只通过高于截止频率的信号。
常见的高通滤波器有巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器。
设计高通滤波器时,需要考虑截止频率和阻带衰减等参数。
3. 带通滤波器带通滤波器同时允许一定范围内的频率通过,抑制其他频率。
常用的带通滤波器有巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器。
设计带通滤波器时,需要确定通带范围、阻带范围和通带波动等参数。
4. 带阻滤波器带阻滤波器拒绝一定范围内的频率信号通过,允许其他频率信号通过。
常见的带阻滤波器有巴特沃斯滤波器、切比雪夫滤波器和椭圆滤波器。
设计带阻滤波器时,需要确定阻带范围、通带范围和阻带衰减等参数。
二、滤波器设计方法1. 传统方法传统的滤波器设计方法主要基于模拟滤波器的设计原理。
根据滤波器的频率特性和参数要求,可以利用电路理论和网络分析方法进行设计。
传统方法适用于模拟滤波器设计,但对于数字滤波器设计则需要进行模拟到数字的转换。
2. 频率抽样方法频率抽样方法是一种常用的数字滤波器设计方法。
它将连续时间域的信号转换为离散时间域的信号,并利用频域采样和离散时间傅立叶变换进行设计。
频率抽样方法可以实现各种类型的数字滤波器设计,包括有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器。
滤波器的设计方法滤波器的设计方法主要有两种:频域设计方法和时域设计方法。
1. 频域设计方法频域设计方法以频率域上的响应要求为基础,通过设计滤波器的频率响应来达到滤波效果。
常用的频域设计方法有理想滤波器设计、巴特沃斯滤波器设计和切比雪夫滤波器设计。
理想滤波器设计方法以理想的频率响应为基础,通过频率采样和反变换等方法来设计滤波器。
首先确定所需的频率响应曲线,然后进行频率域采样,最后通过反变换得到滤波器的时域序列。
但实际应用中理想滤波器因为无限长的冲激响应无法实现,所以需要通过截断或者窗函数等方法来实现真实的滤波器。
巴特沃斯滤波器是一种特殊的线性相位滤波器,通过在频率域上进行极点和零点的设置来设计滤波器。
巴特沃斯滤波器的设计主要分为两个步骤:首先选择通带和阻带的边缘频率以及通带和阻带的最大衰减量,然后使用双线性变换将归一化的巴特沃斯滤波器转换为实际的数字滤波器。
切比雪夫滤波器是一种用于折衷通带纹波和阻带纹波的滤波器,可以实现更尖锐的频率响应特性。
切比雪夫滤波器设计的关键是选择通带纹波、阻带纹波以及通带和阻带的边缘频率。
根据这些参数设计切比雪夫滤波器的阶数和极点位置,然后使用双线性变换将归一化的切比雪夫滤波器转换为实际的数字滤波器。
2. 时域设计方法时域设计方法以滤波器的时域响应要求为基础,通过对滤波器的脉冲响应进行设计。
时域设计方法常用的有窗函数设计和频率抽样设计。
窗函数设计方法常用于有限长度的滤波器设计。
首先根据所需的脉冲响应特性选择一个窗函数,然后将窗函数和理想滤波器的脉冲响应进行卷积,得到设计滤波器的时域序列。
常用的窗函数有矩形窗、汉宁窗、汉明窗等。
频率抽样设计方法是时域设计方法的一种变种,通过采样一组频率响应曲线来设计滤波器。
首先选择一组抽样频率和相应的理想频率响应值,然后通过傅里叶变换和反变换将频率响应转换为时域脉冲响应序列。
最后通过插值等方法得到滤波器的离散时间序列。
综上所述,滤波器的设计方法包括频域设计方法和时域设计方法。
一. 十一种通用滤波算法(转)1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A, 则本次值有效如果本次值与上次值之差>A, 则本次值无效, 放弃本次值, 用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N 次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N 个采样值进行算术平均运算N 值较大时:信号平滑度较高,但灵敏度较低N 值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N 每次采样到一个新数据放入队尾, 并扔掉原来队首的一次数据.(先进先出原则)把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4〜12;温度,N=1〜4 B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法” +“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2 个数据的算术平均值N 值的选取:3〜14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法” +“递推平均滤波法” 每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0〜1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C缺点:相位滞后,灵敏度低滞后程度取决于 a 值大小不能消除滤波频率高于采样频率的1/2 的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。
怎样设计一个有效的滤波器滤波器是信号处理领域的重要工具,用于去除信号中的不需要的频率成分,保留感兴趣的频率内容。
设计一个有效的滤波器需要考虑信号特性、滤波器类型、滤波器参数等多个因素。
本文将介绍几种常见的滤波器设计方法,并提供设计滤波器的步骤和技巧。
一、引言滤波器在电子、通信、音频等领域有广泛的应用。
有效的滤波器设计可以提高系统性能,满足信号处理需求。
本文将介绍如何设计一个有效的滤波器。
二、滤波器设计方法1. 滤波器类型首先确定所需滤波器的类型。
常见的滤波器类型有低通滤波器、高通滤波器、带通滤波器和带阻滤波器等。
根据信号的频率成分和需求选择合适的滤波器类型。
2. 过渡带宽和截止频率确定滤波器的过渡带宽和截止频率。
过渡带宽是指滤波器从通频带到截止频率的频率范围。
截止频率是指滤波器开始衰减的频率。
3. 滤波器阶数滤波器的阶数决定了滤波器的陡峭程度和频率响应特性。
一般来说,阶数越高,滤波器的性能越好,但设计和实现的复杂度也会增加。
4. 滤波器参数选择选择滤波器的参数,包括通带增益、衰减因子和相位响应等。
根据具体的应用需求确定参数的取值范围。
三、滤波器设计步骤1. 确定滤波器类型和需求:根据信号处理需求和信号特性选择合适的滤波器类型,并确定截止频率和过渡带宽。
2. 设计原型滤波器:根据滤波器类型和参数,设计原型滤波器,如巴特沃斯滤波器、切比雪夫滤波器等。
3. 频率变换:通过频率变换将原型滤波器转换为所需滤波器。
常见的频率变换方法有高通到低通变换、低通到高通变换等。
4. 阶数选择和参数调整:根据设计要求和性能需求选择合适的滤波器阶数,并对滤波器参数进行调整,以满足设计需求。
5. 实现和验证:利用设计的滤波器参数,实现滤波器设计,并进行验证和测试,确保设计满足要求。
四、滤波器设计技巧1. 灵活应用不同滤波器类型:根据实际需求,选择最适合的滤波器类型,如巴特沃斯滤波器适用于平滑频率响应,切比雪夫滤波器适用于快速衰减等。
一.十一种通用滤波算法(转)1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服因偶然因素引起的脉冲干扰C、缺点无法抑制那种周期性的干扰平滑度差2、中位值滤波法A、方法:连续采样N次(N取奇数)把N次采样值按大小排列取中间值为本次有效值B、优点:能有效克服因偶然因素引起的波动干扰对温度、液位的变化缓慢的被测参数有良好的滤波效果C、缺点:对流量、速度等快速变化的参数不宜3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算N值较大时:信号平滑度较高,但灵敏度较低N值较小时:信号平滑度较低,但灵敏度较高N值的选取:一般流量,N=12;压力:N=4B、优点:适用于对一般具有随机干扰的信号进行滤波这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用比较浪费RAM4、递推平均滤波法(又称滑动平均滤波法)A、方法:把连续取N个采样值看成一个队列队列的长度固定为N每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则) 把队列中的N个数据进行算术平均运算,就可获得新的滤波结果N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4 B、优点:对周期性干扰有良好的抑制作用,平滑度高适用于高频振荡的系统C、缺点:灵敏度低对偶然出现的脉冲性干扰的抑制作用较差不易消除由于脉冲干扰所引起的采样值偏差不适用于脉冲干扰比较严重的场合比较浪费RAM5、中位值平均滤波法(又称防脉冲干扰平均滤波法)A、方法:相当于“中位值滤波法”+“算术平均滤波法”连续采样N个数据,去掉一个最大值和一个最小值然后计算N-2个数据的算术平均值N值的选取:3~14B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:测量速度较慢,和算术平均滤波法一样比较浪费RAM6、限幅平均滤波法A、方法:相当于“限幅滤波法”+“递推平均滤波法”每次采样到的新数据先进行限幅处理,再送入队列进行递推平均滤波处理B、优点:融合了两种滤波法的优点对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差C、缺点:比较浪费RAM7、一阶滞后滤波法A、方法:取a=0~1本次滤波结果=(1-a)*本次采样值+a*上次滤波结果B、优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合C、缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号8、加权递推平均滤波法A、方法:是对递推平均滤波法的改进,即不同时刻的数据加以不同的权通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低B、优点:适用于有较大纯滞后时间常数的对象和采样周期较短的系统C、缺点:对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号不能迅速反应系统当前所受干扰的严重程度,滤波效果差9、消抖滤波法A、方法:设置一个滤波计数器将每次采样值与当前有效值比较:如果采样值=当前有效值,则计数器清零如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)如果计数器溢出,则将本次值替换当前有效值,并清计数器B、优点:对于变化缓慢的被测参数有较好的滤波效果,可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动C、缺点:对于快速变化的参数不宜如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导入系统10、限幅消抖滤波法A、方法:相当于“限幅滤波法”+“消抖滤波法”先限幅,后消抖B、优点:继承了“限幅”和“消抖”的优点改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统C、缺点:对于快速变化的参数不宜第11种方法:IIR 数字滤波器A. 方法:确定信号带宽,滤之。
Y(n) = a1*Y(n-1) + a2*Y(n-2) + ... + ak*Y(n-k) + b0*X(n) + b1*X(n-1) + b2*X(n-2) + ... + bk*X(n-k)B. 优点:高通,低通,带通,带阻任意。
设计简单(用matlab)C. 缺点:运算量大。
//---------------------------------------------------------------------软件滤波的C程序样例10种软件滤波方法的示例程序假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波/* A值可根据实际情况调整value为有效值,new_value为当前采样值滤波程序返回有效的实际值*/#define A 10char value;char filter(){char new_value;new_value = get_ad();if ( ( new_value - value > A ) || ( value - new_value > A )return value;return new_value;}2、中位值滤波法/* N值可根据实际情况调整排序采用冒泡法*/#define N 11char 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>value_buf[i+1] ) {temp = value_buf;value_buf = value_buf[i+1];value_buf[i+1] = temp;}}}return value_buf[(N-1)/2];}3、算术平均滤波法/**/#define N 12char filter(){int sum = 0;for ( count=0;count<N;count++) {sum + = get_ad();delay();}return (char)(sum/N);}4、递推平均滤波法(又称滑动平均滤波法)/**/#define N 12char value_buf[N];char i=0;char filter(){char count;int sum=0;value_buf[i++] = get_ad();if ( i == N ) i = 0;for ( count=0;count<N,count++)sum = value_buf[count];return (char)(sum/N);}5、中位值平均滤波法(又称防脉冲干扰平均滤波法)/**/#define N 12char filter(){char count,i,j;char value_buf[N];int sum=0;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>value_buf[i+1] ){temp = value_buf;value_buf = value_buf[i+1];value_buf[i+1] = temp;}}}for(count=1;count<N-1;count++)sum += value[count];return (char)(sum/(N-2));}6、限幅平均滤波法*/略参考子程序1、37、一阶滞后滤波法/* 为加快程序处理速度假定基数为100,a=0~100 */#define a 50char value;char filter(){char new_value;new_value = get_ad();return (100-a)*value + a*new_value;}8、加权递推平均滤波法/* coe数组为加权系数表,存在程序存储区。
*/#define N 12char 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();delay();}for (count=0,count<N;count++)sum += value_buf[count]*coe[count];return (char)(sum/sum_coe);}9、消抖滤波法#define N 12char filter(){char count=0;char new_value;new_value = get_ad();while (value !=new_value);{count++;if (count>=N) return new_value; delay();new_value = get_ad();}return value;}10、限幅消抖滤波法/**/略参考子程序1、911、IIR滤波例子int BandpassFilter4(int InputAD4) {int ReturnValue;int ii;RESLO=0;RESHI=0;MACS=*PdelIn;OP2=1068; //FilterCoeff4[4]; MACS=*(PdelIn+1);OP2=8; //FilterCoeff4[3];MACS=*(PdelIn+2);OP2=-2001;//FilterCoeff4[2]; MACS=*(PdelIn+3);OP2=8; //FilterCoeff4[1];MACS=InputAD4;OP2=1068; //FilterCoeff4[0]; MACS=*PdelOu;OP2=-7190;//FilterCoeff4[8]; MACS=*(PdelOu+1);OP2=-1973; //FilterCoeff4[7]; MACS=*(PdelOu+2);OP2=-19578;//FilterCoeff4[6];MACS=*(PdelOu+3);OP2=-3047; //FilterCoeff4[5];*p=RESLO;*(p+1)=RESHI;mytestmul<<=2;ReturnValue=*(p+1);for (ii=0;ii<3;ii++){DelayInput[ii]=DelayInput[ii+1];DelayOutput[ii]=DelayOutput[ii+1];}DelayInput[3]=InputAD4;DelayOutput[3]=ReturnValue;// if (ReturnValue<0)// {// ReturnValue=-ReturnValue;// }return ReturnValue;}二.在图像处理中应用到的滤波算法实例:BOOL WINAPI MedianFilter(LPSTR lpDIBBits, LONG lWidth, LONG lHei ght,int iFilterH, int iFilterW,int iFilterMX, int iFilterMY){// 指向源图像的指针unsigned char* lpSrc;// 指向要复制区域的指针unsigned char* lpDst;// 指向复制图像的指针LPSTR lpNewDIBBits;HLOCAL hNewDIBBits;// 指向滤波器数组的指针unsigned char * aValue;HLOCAL hArray;// 循环变量LONG i;LONG j;LONG k;LONG l;// 图像每行的字节数LONG lLineBytes;// 计算图像每行的字节数lLineBytes = WIDTHBYTES(lWidth * 8);// 暂时分配内存,以保存新图像hNewDIBBits = LocalAlloc(LHND, lLineBytes * lHeight);// 判断是否内存分配失败if (hNewDIBBits == NULL){// 分配内存失败return FALSE;}// 锁定内存lpNewDIBBits = (char * )LocalLock(hNewDIBBits);// 初始化图像为原始图像memcpy(lpNewDIBBits, lpDIBBits, lLineBytes * lHeight);// 暂时分配内存,以保存滤波器数组hArray = LocalAlloc(LHND, iFilterH * iFilterW);// 判断是否内存分配失败if (hArray == NULL){// 释放内存LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);// 分配内存失败return FALSE;}// 锁定内存aValue = (unsigned char * )LocalLock(hArray);// 开始中值滤波// 行(除去边缘几行)for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++) {// 列(除去边缘几列)for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++) {// 指向新DIB第i行,第j个象素的指针lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight - 1 - i) + j;// 读取滤波器数组for (k = 0; k < iFilterH; k++){for (l = 0; l < iFilterW; l++){// 指向DIB第i - iFilterMY + k行,第j - iFilterMX + l个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i + iFilterMY - k) + j - iFilterMX + l;// 保存象素值aValue[k * iFilterW + l] = *lpSrc;}}// 获取中值* lpDst = GetMedianNum(aValue, iFilterH * iFilterW);}}// 复制变换后的图像memcpy(lpDIBBits, lpNewDIBBits, lLineBytes * lHeight);// 释放内存LocalUnlock(hNewDIBBits);LocalFree(hNewDIBBits);LocalUnlock(hArray);LocalFree(hArray);// 返回return TRUE;}三.RC滤波的一种实现.RcDigital(double & X, double & Y){static int MidFlag;static double Yn_1,Xn_1;double MyGetX=0,MyGetY=0;double Alfa;Alfa=0.7;if(X==0||Y==0){MidFlag=0;Xn_1=0;Yn_1=0;MyGetX=0;MyGetY=0;}if(X>0&&Y>0){if(MidFlag==1){MyGetY = (1 - Alfa) * Y + Alfa * Yn_1;MyGetX = (1 - Alfa) * X + Alfa * Xn_1;Xn_1 = MyGetX;Yn_1 = MyGetY;}else{MidFlag=1;MyGetX = X;MyGetY = Y;Xn_1 = X;Yn_1 = Y;}}X = MyGetX;Y = MyGetY;}。