常用软件滤波方法及其示例程序

2023-05-16

常用软件滤波方法及其示例程序
 
作者 未知    来源     发布时间 2005-08-24     浏览次数 <script language="Javascript" src="/view.php?articleid=10" type="text/javascript"></script> 119    字体 大  中  小
  

1、限幅滤波法(又称程序判断滤波法)

A、方法:
根据经验判断,确定两次采样允许的最大偏差值(设为A)
每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值

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

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

示例:
/*
A值可根据实际情况调整
value为有效值,new_value为当前采样值
滤波程序返回有效的实际值 */

#define A 10
char value;
char filter()
{
char new_value;
new_value = get_ad();
if ( ( new_value - value > A ) || ( value - new_value > A ) ) return value;
else return new_value;
}

2、中位值滤波法

A、方法:
连续采样N次(N取奇数)
把N次采样值按大小排列
取中间值为本次有效值

B、优点:
能有效克服因偶然因素引起的波动干扰
对温度、液位的变化缓慢的被测参数有良好的滤波效果

C、缺点:
对流量、速度等快速变化的参数不宜

示例:
/*
N值可根据实际情况调整
排序采用冒泡法*/

#define N 11
char filter()
{
char value_buf[N];
char count,i,j,temp;
for ( count=0;count {
value_buf[count] = get_ad();
delay();
}
for (j=0;j {
for (i=0;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、算术平均滤波法

A、方法:
连续取N个采样值进行算术平均运算
N值较大时:信号平滑度较高,但灵敏度较低
N值较小时:信号平滑度较低,但灵敏度较高
N值的选取:一般流量,N=12;压力:N=4

B、优点:
适用于对一般具有随机干扰的信号进行滤波
这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动

C、缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用
比较浪费RAM

示例:

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

4、递推平均滤波法(又称滑动平均滤波法)

A、方法:
把连续取N个采样值看成一个队列
队列的长度固定为N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的N个数据进行算术平均运算,就可获得新的滤波结果
N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4


B、优点:
对周期性干扰有良好的抑制作用,平滑度高
适用于高频振荡的系统

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

示例:

#define N 12
char 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 sum = value_buf[count];
return (char)(sum/N);
}

5、中位值平均滤波法(又称防脉冲干扰平均滤波法)

A、方法:
相当于“中位值滤波法”+“算术平均滤波法”
连续采样N个数据,去掉一个最大值和一个最小值
然后计算N-2个数据的算术平均值
N值的选取:3~14

B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差

C、缺点:
测量速度较慢,和算术平均滤波法一样
比较浪费RAM

示例:

#define N 12
char filter()
{
char count,i,j,temp;
char value_buf[N];
int sum=0;
for (count=0;count {
value_buf[count] = get_ad();
delay();
}
for (j=0;j {
for (i=0;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 sum += value_buf[count];
return (char)(sum/(N-2));
}

6、限幅平均滤波法

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

B、优点:
融合了两种滤波法的优点
对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差

C、缺点:
比较浪费RAM


略 参考子程序1、3



7、一阶滞后滤波法

A、方法:
取a=0~1
本次滤波结果=(1-a)*本次采样值+a*上次滤波结果

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

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

示例:
/*为加快程序处理速度假定基数为100,a=0~100 */

#define a 50
char value;
char filter()
{
char new_value;
new_value = get_ad();
return (100-a)*value + a*new_value;
}

 

8、加权递推平均滤波法

A、方法:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低

B、优点:
适用于有较大纯滞后时间常数的对象
和采样周期较短的系统

C、缺点:
对于纯滞后时间常数较小,采样周期较长,变化缓慢的信号
不能迅速反应系统当前所受干扰的严重程度,滤波效果差


示例:
/*coe数组为加权系数表,存在程序存储区。*/

#define N 12
char coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
char 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 {
value_buf[count] = get_ad();
delay();
}
for (count=0;count sum += value_buf[count]*coe[count];
return (char)(sum/sum_coe);
}


9、消抖滤波法

A、方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器

B、优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动

C、缺点:
对于快速变化的参数不宜
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导
入系统

示例:

char value;
#define N 12
char 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、限幅消抖滤波法

A、方法:
相当于“限幅滤波法”+“消抖滤波法”
先限幅,后消抖

B、优点:
继承了“限幅”和“消抖”的优点
改进了“消抖滤波法”中的某些缺陷,避免将干扰值导入系统

C、缺点:
对于快速变化的参数不宜

参考子程序1、9

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用软件滤波方法及其示例程序 的相关文章

  • 牛顿迭代法求解方程

    说明 xff1a 该篇博客源于博主的早些时候的一个csdn博客中的一篇 xff0c 由于近期使用到了 xff0c 所以再次作一总结 原文地址 概述 牛顿迭代法 xff08 Newton s method xff09 又称为牛顿 拉夫逊 xf
  • OpenCV - 均值迭代分割

    题外话 之前在博客中写过一篇 区域生长 的博客 xff0c 区域生长在平时经常用到 xff0c 也比较容易理解和代码实现 xff0c 所以在很多情况下大家会选择这种方法 但是区域生长有一个最致命的点就是需要选取一个生长的种子点 为了交流学习
  • IMU原理及姿态融合算法详解

    IMU原理及姿态融合算法详解 一 组成 IMU全称是惯性导航系统 xff0c 主要元件有陀螺仪 加速度计和磁力计 其中陀螺仪可以得到各个轴的加速度 xff0c 而加速度计能得到x xff0c y xff0c z方向的加速度 xff0c 而磁
  • FrankMocap win10安装指导

    本文是相当于将github上frankmocap的安装指导进行了翻译 xff0c 增加了一下windows下安装遇到的坑以及注意事项 如果是linux系统应该安装官方的安装指导安装就可以 xff0c 可以直接参考官方安装指导 安装所有模块
  • ADRC学习(1)系统在调节过程中安排过渡过程的作用

    1 二阶系统的调节过程 考虑对于如下所示的二阶系统 x
  • 笔记本更换SSD后卡顿、假死、失去响应问题探究

    某些笔记本电脑将HDD更换为SSD后 xff0c 系统运行过程中会随机产生半分钟到一分钟的卡顿 xff08 假死 xff09 期间鼠标指针可以运动 xff0c 但所有程序均失去响应 xff0c 也无法打开新的程序 HDD硬盘指示灯常亮 xf
  • 机器人 齐次变换矩阵 位姿变换矩阵(RT矩阵) Matlab参数公式计算

    对于齐次位姿变换 xff08 RT矩阵 xff09 xff0c 有的时候手动计算公式参数太多比较麻烦 xff0c 因此利用matlab参量syms xff0c 可以方便一些 xff0c 可以用于计算机器人正运动学位姿矩阵的参数表示 xff0
  • UART串口校验方式(无校验、奇偶校验、固定校验)

    UART串口校验方式 xff08 奇偶校验 固定校验 无校验 xff09 串口通信校验方式奇偶校验位固定校验位 Stick 无校验位 校验位 xff1a 串口通信中的检错方式 串口在接收数据时 xff0c 如果无检验位 xff0c 则只要检
  • 更改LXDE的语言为中文

    之前给旧笔记本安装了Debian8 43 LXDE嘛 xff0c 运行比较流畅 安装过程中本想选择中文的 xff0c 但是安装界面中旧有中文乱码 xff0c 所以还是选了英语 等装好了系统 xff0c 把apt update 43 upgr
  • 干掉Nouveau安装Linux Nvidia显卡驱动

    https blog csdn net misiter article details 7652731 干掉Nouveau安装Linux Nvidia显卡驱动 首先说明下什么是Nouveau xff0c 为什么有些系统安装N卡驱动的时候会提
  • 【C应用】红外遥控小车程序分析(上)——四轮马达方向控制程序分析

    目录 驱动原理分析 L293D功能分析 代码分析 驱动原理分析 小车采用两片L293D芯片控制四个车轮 xff0c 原理图如下 xff1a 因为L293D可分别控制两路电机 xff0c 为了方便理解L293D芯片的工作原理 xff0c 拿L
  • 【RTOS】RTOS实时操作系统随笔(结合UCOSII相关移植)

    目录 无操作系统下的程序结构及缺陷 有操作系统下的解决方案及CPU工作原理 操作系统调度策略及时间片轮转策略 操作系统TICK及进程切换 UCOSII介绍 UCOSII进程任务切换原理 xff1a UCOS进程的堆栈 xff1a 时钟TIC
  • 【STM32CobeMX】CubeMX建立基于STM32F1VBT6的FreeRTOS

    STM32F103VBT6 内部时钟源RCC 如果使用RTOS 使用了RTOS xff0c 默认使用SysTick xff1b 所以HAL库的时基就要用其他的定时器 当用了RTOS xff0c 就要设置HAL的timebase为其他Time
  • 【QT】手把手制作一个网络调试助手(UDP设计)

    TCP和UDP网络通信类的使用 Porn hub 1 程序框架搭建 接着上一篇文章 xff0c 这里就开始设计UDP的相关功能函数了 xff0c 首先将其UDP的相关配置进行隐藏 xff1b 1 1 构造函数讲解 MainWindow Ma
  • 【PADSVX2.7】PADSVX2.7

    目录 1 文件准备 xff1a 2 解压PADSVX 2 7 ESDM到Install 3 点击Setup 4 替换文件 5 有请馒头大师 6 开始享受VX2 7带来的爽快感觉 xff01 xff01 xff01 1 文件准备 xff1a
  • STM32 CAN的ID过滤配置

    过滤器的过滤模式 STM32提供两种过滤模式供用户设置 xff1a 屏蔽位模式和标识符列表模式 STM32总共提供14个过滤器组来处理CAN接收过滤问题 xff0c 每个过滤器组包含两个32位寄存器CAN FxR0和CAN FxR1组成 x
  • 基于STM32F407时钟配置学习

    STM32F4x系列时钟树如下 xff1a 1 系统时钟SYSCLK 在STM32F407中 xff0c 除了一些特定的时钟 xff08 例如 xff0c USB OTG FS时钟 xff0c I2S时钟 xff09 外 xff0c 系统所
  • WIN10不能访问共享文件夹的一般性问题

    WIN10不能访问共享文件夹的一般性问题 访问共享文件夹要确定双方在同一网段 xff0c 且自己可以ping通自己 如果都满足还是不能访问 xff0c 试试下面两个解决办法 报错0x8000405 win 43 r xff0c 在里面输入
  • Win10磁盘占用100%解决方法

    Win10磁盘占用100 解决方法 1 按住Ctrl 43 Shift 43 ESC打开任务管理器 xff0c 点击任意进程 xff0c 右键 资源值 磁盘 百分比 xff0c 如果是一般应用进程 xff0c 可以直接关掉 2 切换到 性能
  • WIN7不能访问共享文件夹

    WIN7不能访问共享文件夹 1 确定同一网段 2 开启被访问电脑的Guest用户 windows启用guest用户一般又3种方式 xff0c 通过图形化界面或cmd命令行 xff1a 1 打开运行输入cmd回车 xff0c 输入 xff1a

随机推荐

  • docker 容器更新镜像发布和保存操作步骤

    1 修改容器 安装软件等修改操作 2 docker commit 提交更新并生成新的image sudo docker commit m 34 cuda 9 0 install 34 a 34 chengde 34 23ecb489cf78
  • 嵌入式linux学习----Makefile基础知识

    一 嵌入式linux学习 Makefile基础知识 1 1 Makefile作用 makefile关系到了整个工程的编译规则 一个工程中的源文件不计数 xff0c 其按类型 功能 模块分别放在若干个目录中 xff0c makefile定义了
  • Expert C Lanuage 学习笔记----1、穿越时空的迷雾(1)

    Expert C Lanuage 学习笔记 1 穿越时空的迷雾 xff08 1 xff09 1 First Mistake 几乎每个C语言编程新手都犯过下面错误 xff1a if i 61 3 正确应该是 if i 61 61 3 这种错误
  • vscode 保存代码自动格式化(vue)

    1 根据项目配置的eslint规则保存代码后 xff0c 自动格式化代码 2 需要安装prettier 和 vetur settings json 34 codestream serverUrl 34 34 https api codest
  • 理解互斥量和信号量

    互斥量 Mutex 互斥量表现互斥现象的数据结构 xff0c 也被当作二元信号灯 一个互斥基本上是一个多任务敏感的二元信号 xff0c 它能用作同步多任务的行为 xff0c 它常用作保护从中断来的临界段代码并且在共享同步使用的资源 Mute
  • 单链表逆序与排序

    xfeff xfeff xfeff xfeff xfeff xfeff include lt stdio h gt include lt stdlib h gt include lt string h gt typedef struct d
  • ubuntu apt-get update 失败解决。

    当运行apt get update后出现如下错误时 xff1a E Some index files failed to download they have been ignored or old ones used instead 可以
  • 深入理解句柄表

    涉及到句柄表的有以下这些概念 xff1a HANDLE TABLE HANDLE TABLE结构体中的TableCode变量 实际上啊 xff0c TableCode是指向句柄表项第一个句柄表项的指针 xff08 NULL句柄表项 xff0
  • LQR控制律设计

    LQR全称为Linear Quadratic Regulator xff0c 即线性二次型调节器 xff08 一 xff09 有限时域最优调节器设计 设线性系统 被控对象的离散化状态方程为 xff1a 初始条件 给定二次型性能指标函数 xf
  • 路径跟踪之LQR控制算法

    xff08 一 xff09 车辆建模 两自由度车辆模型为 xff1a 考虑恒定不变 xff0c 则上述模型可以看作一个输入为 状态变量为的控制系统 xff0c 可以表示为 xff1a 对于参考轨迹 xff0c 可以表示为 xff1a 将 x
  • Arrays.sort简单排序实例

    Arrays sort 方法实例 xff1a 用于对整形数组及字符串数组进行排序 这里写代码片 import java util ArrayList import java util Arrays import java util Coll
  • git rebase 成功之后如何撤销

    git rebase 过程中可以使用git abort continue来进行操作 xff0c 成功之后如何撤销呢 xff1f 首先执行git reflog查看本地记录 可知本次rebase之前的id 为 xff1a 02a3260 HEA
  • STM32---BOOT0和BOOT1

    文章目录 前言一 思维导图二 注意事项1 针对BOOT0和BOOT1的不同接线方式 xff08 高电平 xff0c 低电平 xff0c 不接线 xff09 xff0c 开发板的下载情况分析如下图 xff1a xff08 x 代表不接线 xf
  • Windowsxp主机下用Putty连接VirtualBox中的Debian

    参考网址 1 xff0c debian中需要安装openssh server xff0c 并开启ssh服务 2 xff0c VirtualBox的网络连接方式选择NAT xff08 可以连接外面的网络 xff09 xff0c 默认情况下 x
  • 设备接入天猫精灵教程(一)

    现在网上接入天猫精灵的教程基本都是云对云接入 xff0c 需要搭建服务器 xff0c 写硬件程序 xff0c 费时又复杂 这次结合之前的阿里云教程做一个通过阿里云物联网平台接入天猫精灵的教程 xff0c 免去了服务器开发 xff0c 大大的
  • 测试 使用 perf 进行性能分析时如何获取准确的调用栈

    测试 使用 perf 进行性能分析时如何获取准确的调用栈 ifonly 2020年02月27日 101 次阅读 目录 perf 是 Linux 下重要的性能分析工具 xff0c perf 可以通过采样获取很多性能指标 xff0c 其中最常用
  • Jetson Xavier NX 安装固态硬盘并挂载到/home目录下

    1 查看硬盘所有分区 指令 xff1a sudo fdisk lu xff12 对硬盘进行分区 指令 xff1a sudo fdisk dev nvme0n1 3 格式化分区为ext4 指令 xff1a sudo mkfs t ext4 d
  • 单目相机位姿求解之PNP算法原理剖析与实践

    对于视觉里程计中 xff0c 相机位姿的求解问题极为常见 对于双目相机 xff0c 由于其可以直接计算出深度信息 xff0c 所以在相机位姿求解上十分容易 但如果我们使用的是单目相机 xff0c 如何从二维图像中求解出相机相对三维物体的位姿
  • 计算器1.0

    数据结构让我们相遇 计算器1 0正式上线 xff1a define h span class token macro property span class token directive keyword include span span
  • 常用软件滤波方法及其示例程序

    常用软件滤波方法及其示例程序 作者 未知 来源 发布时间 2005 08 24 浏览次数 lt script language 61 34 Javascript 34 src 61 34 view php articleid 61 10 3