matlab使用移动平均滤波器、重采样和Hampel过滤器进行信号平滑处理

news2024/11/14 19:31:40

此示例显示如何使用移动平均滤波器和重采样来隔离每小时温度读数的时间周期分量的影响,以及从开环电压测量中消除不需要的线路噪声。

最近我们被客户要求撰写关于信号平滑处理的研究报告,包括一些图形和统计输出。

该示例还显示了如何使用Hampel过滤器来移除大异常值。

动机

平滑是我们如何发现数据中的重要模式,同时忽略不重要的事物(即噪音)。我们使用过滤来执行此平滑。平滑的目标是产生缓慢的价值变化,以便更容易看到我们数据的趋势。

有时,当您检查输入数据时,您可能希望平滑数据以查看信号中的趋势。在我们的例子中,我们在洛根机场每个小时都有一套摄氏温度,在2011年1月的整个月。

请注意,我们可以直观地看到一天中的时间对温度读数的影响。如果您只对每月的日常温度变化感兴趣,则每小时波动只会产生噪音,这会使日常变化难以辨别。为了消除时间的影响,我们现在想通过使用移动平均滤波器来平滑我们的数据。

移动平均滤波器

在其最简单的形式中,长度为N的移动平均滤波器取波形的每N个连续样本的平均值。

为了对每个数据点应用移动平均滤波器,我们构造滤波器的系数,使每个点的权重相等,并且对总平均值贡献1/24。这给出了每24小时的平均温度。

过滤延迟

请注意,过滤后的输出会延迟大约十二小时。这是因为我们的移动平均滤波器有延迟。

任何长度为N的对称滤波器都将具有(N-1)/ 2个样本的延迟。 

fDelay =(length(coeff24hMA)-1)/ 2;
 

提取平均差异

 我们也可以使用移动平均滤波器来更好地估计一天中的时间如何影响整体温度。为此,首先从每小时温度测量值中减去平滑后的数据。然后,将差异数据细分为几天,并获取该月所有31天的平均值。

deltaTempC = reshape(deltaTempC,24,31)。';

提取峰值包络

有时我们也希望对每天温度信号的高低变化有一个平滑变化的估计。为此,我们可以使用该envelope功能连接在24小时内检测到的极高和低点。在这个例子中,我们确保每个极高和极低之间至少有16个小时。我们还可以通过取两个极端之间的平均值来了解高点和低点的趋势。

 

加权移动平均滤波器

其他类型的移动平均滤波器不会对每个样本进行相同的加权

另一个常见的过滤器遵循二项式扩展。这种类型的滤波器近似于大的n值的正常曲线。它可用于滤除小n的高频噪声。要找到二项式滤波器的系数,请与其自身进行卷积,然后以规定的次数迭代地对输出进行卷积。在此示例中,使用五次总迭代。

binomialCoeff = conv(h,h);
fDelay =(length(binomialCoeff)-1)/ 2;
 

另一种类似于高斯扩展滤波器的滤波器是指数移动平均滤波器。这种类型的加权移动平均滤波器易于构造,并且不需要大的窗口 。

您可以通过0到1之间的alpha参数调整指数加权移动平均滤波器。较高的alpha值将具有较少的平滑。

exponentialMA = filter(alpha,[1 alpha-1],tempC);
plot(days,tempC,... 
     days-fDelay / 24,binomialMA,...
 
 

Savitzky-Golay过滤器

 为了更紧密地跟踪信号,您可以使用加权移动平均滤波器,该滤波器尝试在最小二乘意义上拟合指定数量的样本上的指定顺序的多项式。

为方便起见,您可以使用该功能sgolayfilt实现Savitzky-Golay平滑滤波器。 

cubicMA = sgolayfilt(tempC,3,7);
quarticMA = sgolayfilt(tempC,4,7);
quinticMA = sgolayfilt(tempC,5,9);

重采样

 我们在存在60 Hz交流电源线噪声干扰的情况下对模拟仪器输入端的开环电压进行采样。我们以1 kHz的采样率对电压进行采样。

fs = 1000;
t =(0:numel(openLoopVoltage)-1)/ fs;
 

 

让我们尝试使用移动平均滤波器消除线路噪声的影响。

如果构造一个均匀加权的移动平均滤波器,它将删除任何相对于滤波器持续时间而言是周期性的分量。

当以1000Hz采样时,在60Hz的完整周期中大约有1000/60 = 16.667个样本。让我们尝试“围捕”并使用17点过滤器。这将使我们在1000 Hz / 17 = 58.82 Hz的基频下进行最大滤波。

 

请注意,虽然电压显着平滑,但仍然包含60 Hz的小纹波。

如果我们重新采样信号,我们可以显着减少纹波,这样我们就可以通过移动平均滤波器捕获60 Hz信号的完整周期。

如果我们以17 * 60 Hz = 1020 Hz重新采样信号,我们可以使用我们的17点移动平均滤波器来消除60 Hz线路噪声。

 
 

中位数过滤器

移动平均线,加权移动平均线和Savitzky-Golay滤波器可以平滑它们过滤的所有数据。然而,这可能并不总是想要的。例如,如果我们的数据来自时钟信号并且具有我们不希望平滑的锐边,该怎么办?到目前为止讨论的过滤器效果不佳:

 

移动平均线和Savitzky-Golay滤波器分别在时钟信号边缘附近欠校正和过校正。

保留边缘但仍然平滑水平的一种简单方法是使用中值滤波器:

 

通过Hampel过滤器去除异常值

许多过滤器对异常值很敏感。与中值滤波器密切相关的滤波器是Hampel滤波器。此滤波器有助于从信号中删除异常值,而不会过度平滑数据。

 

由于我们引入的每个尖峰只有一个样本的持续时间,我们可以使用仅三个元素的中值滤波器来消除尖峰。

 

滤波器移除了尖峰,但它也删除了原始信号的大量数据点。Hampel滤波器的工作方式类似于中值滤波器,但它只取代了相当于远离局部中值的几个标准偏差的值。

 

仅从原始信号中移除异常值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新时期我国信息技术产业的发展【技术论文,纪念长者,2008】

2008年10月,江泽民在《上海交通大学学报》发表了一篇题为《新时期我国信息技术产业的发展》的论文。作为上海交通大学1947届电机工程系的毕业生,发表这篇论文时,这位曾改变中国的长者已是82岁高龄。在这篇论文中,江泽民提出了“未…

URLDNS链

听说这个链子是最简单的链子之一了,但是却是来来回回看了好多遍才勉强看明白。 在 ysoserial 中我们可以看见链子是这样的: *Gadget Chain: * HashMap.readObject() * HashMap.putVal() * HashMap.hash() * URL.hashCode() 简单流程: 1.Hash…

HTML这一篇就够啦~

HTML这一篇就够啦HTML1、基础认知2、排版标签2.1 标题标签2.2 段落标签2.3 换行标签2.4 水平线标签3、文本格式化标签4、媒体标签4.1 图片标签4.2 路径4.3 音频文件4.4 视频文件5、链接标签6、列表标签、6.1 无序列表(最常用)6.2 有序列表(偶…

2021.06青少年软件编程(Python)等级考试试卷(三级)

2021.06青少年软件编程(Python)等级考试试卷(三级) 一、单选题(共25题,每题2分,共50分) 1.关于open()函数的参数,下列描述正确的是?( D ) A. "w+" 以十六进制格式打开一个文件只用于写入 B. "r+"打开一个文件用于读写。文件指针将会放在文件…

ZMQ之自杀的蜗牛模式和黑箱模式

一、检测慢订阅者(自杀的蜗牛模式) 在使用发布-订阅模式的时候,最常见的问题之一是如何处理响应较慢的订阅者。理想状况下,发布者能以全速发送消息给订阅者,但现实中,订阅者会需要对消息做较长时间的…

springboot如何增加 application.yml配置文件

新建springboot 项目,默认项目的配置文件为application.properties。 需要将application.properties 修改为application.yml配置文件。 注意: 我发现直接将application.properties文件重命名为application.yml。 新的application.yml没有配置功能的属…

Compose 动画艺术探索之属性动画

本篇文章是此专栏的第三篇文章,如果想阅读前两篇文章的话请点击下方链接: Compose 动画艺术探索之瞅下 Compose 的动画Compose 动画艺术探索之可见性动画 Compose的属性动画 属性动画是通过不断地修改值来实现的,而初始值和结束值之间的过…

Java项目:ssm实验室设备管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 ssm实验室设备管理系统。前台jsplayuieasyui等框架渲染数据、后台java语言搭配ssm(spring、springmvc、mybatis、maven) 数据库mysql5.7、8.0版…

java - 数据结构,双向链表 - LinkedList

一、双向链表 (不带头) 无头双向链表:在Java的集合框架库中LinkedList底层实现就是无头双向循环链表 双向链表 和 单向链表的区别,就在于 双向 比 单向 多个 一个前驱地址。而且 你会发现 正因为有了前驱地址,所以所…

centos 安装和卸载 webmin

在centos里安装webmin 选择安装最新版本的安装包 官方下载路径可以查看下载版本http://download.webmin.com/download/yum/ wget http://download.webmin.com/download/yum/webmin-2.010-1.noarch.rpm如果安装提示 错误: 无法验证 prdownloads.sourceforge.net 的由 “/CUS…

15年架构师:再有面试官问你Kafka,就拿这篇学习笔记怼他

写在前面 Kafka是一个高度可扩展的消息系统,它在LinkedIn的中央数据库管理中扮演着十分重要的角色,因其可水平扩展和高吞吐率而被广泛使用,现在已经被多家不同类型的公司作为多种类型的数据管道和消息系统。 kafka的外在表现很像消息系统&a…

【图像分割】基于PCA结合模糊聚类算法FCM实现SAR图像分割附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

[附源码]计算机毕业设计疫情网课管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

代码随想录刷题Day53 | 1143. 最长公共子序列 | 1035. 不相交的线 | 53. 最大子数组和

代码随想录刷题Day53 | 1143. 最长公共子序列 | 1035. 不相交的线 | 53. 最大子数组和 1143. 最长公共子序列 题目: 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字…

创建Hibernate项目与实现一个例子(idea版)

文章目录创建Hibernate项目一、前提准备二、创建项目三、实现一个例子创建Hibernate项目 一、前提准备 准备Hibernate开发必需的jar包。准备数据库的驱动jar包。准备junit.jar包。 这些包你可以去官网下载,也可以下载我已下载好的(本人目前使用的)。 https://pan…

【机器学习】评价指标 : 准确率,查准率与查全率

引言 在机器学习中,有几个评价指标,今天专门来介绍一下。之前的学习中主要是看模型,学算法,突然有一天发现,机器学习中的一些基本概念还是有点模糊,导致不知道如何综合评价模型的好坏。 这篇文章主要介绍如…

HTML5期末考核大作业:基于Html+Css+javascript的网页制作(化妆品公司网站制作)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

【强化学习论文合集 | 2018年合集】一. ICML-2018 强化学习论文

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

我的数学学习回忆录——一个数学爱好者的反思(二)

早点关注我,精彩不错过!上回说到我在数学学习过程中走的种种弯路,相关内容请戳:我的数学学习回忆录——一个数学爱好者的反思(一)那在这样坎坷的旅程中,有没有给我带来意外惊喜,是不…

C++中的类型转换

文章目录一、隐式类型转换二、显式类型转换三、c风格的类型转换一、隐式类型转换 隐式类型转换,顾名思义,就是没有明显的声明要进行类型转换,隐式类型转换有可能造成数据精度的丢失,所以通常所做的类型转换都是从size小的数据到si…