滤波算法学习笔记

目录

引言

一、定义

二、分类

三、常见滤波算法

四、应用与优势

五、发展趋势

例程

1. 均值滤波(Moving Average Filter)

2. 中值滤波(Median Filter)

3. 高斯滤波(Gaussian Filter)

4.指数移动平均滤波(Exponential Moving Average Filter)


引言

滤波算法是一种数学技术,广泛应用于信号处理和图像处理领域,旨在通过特定的算法对信号的频谱特性进行处理,以达到去噪、平滑、增强或分析信号的目的。以下是对滤波算法的详细概述:

一、定义

滤波(Wave filtering)是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。滤波算法的目的是从原始有干扰的测量数据中提取出有用信号,或者对信号进行某种特定的处理以改善其质量。

二、分类

滤波算法可以根据不同的标准进行分类,常见的分类方式包括:

  1. 按动力学系统的线性或非线性特征分类
    • 线性滤波:如最小二乘估计法、维纳滤波法、卡尔曼滤波法等,这类算法基于线性系统理论,适用于线性系统或可近似为线性系统的场景。
    • 非线性滤波:如扩展卡尔曼滤波算法、无迹卡尔曼滤波算法、粒子滤波算法等,这类算法能够处理非线性系统,具有更高的灵活性和适应性。
  2. 按系统的不同噪声特性分类
    • 高斯白噪声滤波:针对噪声符合高斯分布且功率谱密度在整个频域内均匀分布的情况设计的滤波算法。
    • 非高斯白噪声滤波:针对噪声不符合高斯分布或功率谱密度不均匀的情况设计的滤波算法。

三、常见滤波算法

  1. 维纳滤波:一种基于最小均方误差准则的线性滤波算法,适用于平稳随机过程的滤波和预测问题。维纳滤波公式是通过平稳过程的谱分解导出的,但在实际应用中受到一定限制。

  2. 卡尔曼滤波:一种高效的递推滤波算法,适用于线性动态系统的状态估计。卡尔曼滤波通过预测和更新两个步骤不断迭代,以实现对系统状态的实时估计。

  3. 中值滤波:一种常用的非线性滤波算法,在图像处理中尤为常见。中值滤波通过选择待处理像素邻域内各像素值的中值来代替待处理像素值,从而消除噪声并保护图像边缘信息。

  4. 高斯滤波:一种线性平滑滤波算法,适用于消除高斯噪声。高斯滤波通过对整幅图像进行加权平均处理,使图像中的每个像素值都由其邻域内的像素值加权平均后得到。

  5. 其他滤波算法:还包括限幅滤波、算术平均滤波、滑动窗口滤波、防脉冲干扰平均滤波、一阶滞后滤波、加权递推平均滤波、消抖滤波等多种算法,它们各自具有不同的特点和适用范围。

四、应用与优势

滤波算法在信号处理和图像处理领域具有广泛的应用,如通信、雷达、声纳、自动控制、图像处理、生物医学工程等领域。滤波算法的优势在于能够有效地抑制噪声、提高信号质量、提取有用信息等,从而改善系统的性能和可靠性。

五、发展趋势

随着计算机技术的不断发展和算法的不断优化,滤波算法也在不断演进。未来的滤波算法将更加智能化、自适应化,能够更好地应对复杂多变的信号处理需求。同时,随着大数据和人工智能技术的兴起,滤波算法也将与这些先进技术相结合,为信号处理领域带来更多的创新和发展机遇。

例程

1. 均值滤波(Moving Average Filter)

均值滤波是一种简单的线性滤波,通过计算数据点周围一定范围内的平均值来平滑数据。

工作原理

  • 选择一个窗口大小(滤波器长度)。
  • 将窗口沿着数据序列滑动。
  • 在每个位置上,计算窗口内所有数据点的平均值。
  • 将计算出的平均值作为该位置滤波后的结果。

优点

  • 实现简单。
  • 对随机噪声有很好的抑制效果。

缺点

  • 可能导致信号边缘模糊。
  • 不适用于非平稳信号。

import numpy as npdef moving_average(x, window_size):ret = np.cumsum(x, dtype=float)ret[window_size:] = ret[window_size:] - ret[:-window_size]return ret[window_size - 1:] / window_size# 示例数据
data = np.random.randn(100)
window_size = 10
filtered_data = moving_average(data, window_size)# 可视化
import matplotlib.pyplot as pltplt.plot(data, label='Original Data')
plt.plot(np.arange(window_size - 1, len(data)), filtered_data, label='Filtered Data', color='r')
plt.legend()
plt.show()

2. 中值滤波(Median Filter)

中值滤波是一种非线性滤波技术,它将每个数据点替换为其邻域内的中位数,对于去除椒盐噪声特别有效。

工作原理

  • 选择一个窗口大小。
  • 将窗口沿着数据序列滑动。
  • 在每个位置上,对窗口内的数据点进行排序。
  • 选取排序后的中位数作为该位置滤波后的结果。

优点

  • 对椒盐噪声有很好的抑制效果。
  • 能够较好地保持信号的边缘信息。

缺点

  • 对高斯噪声的抑制效果不如均值滤波和高斯滤波。

from scipy.signal import medfilt
import numpy as np
import matplotlib.pyplot as plt# 示例数据
data = np.random.randn(100)
# 添加一些噪声
data[np.random.choice(np.arange(len(data)), 10, replace=False)] = np.random.uniform(low=-5, high=5, size=10)# 应用中值滤波
filtered_data = medfilt(data, kernel_size=3)# 可视化
plt.plot(data, label='Original Data')
plt.plot(filtered_data, label='Filtered Data', color='r')
plt.legend()
plt.show()

3. 高斯滤波(Gaussian Filter)

高斯滤波是一种线性平滑滤波,其权重由高斯函数给出。这种方法适用于去除高斯噪声,同时能够在一定程度上保持信号的细节信息。

工作原理

  • 选择一个高斯核(即高斯函数的离散形式),该核的大小和标准差决定了滤波的平滑程度。
  • 将高斯核沿着数据序列(或图像)滑动。
  • 在每个位置上,计算高斯核与对应数据点(或像素)的加权和。
  • 将加权和作为该位置滤波后的结果。

优点

  • 对高斯噪声有很好的抑制效果。
  • 能够在一定程度上保持信号的细节信息。

缺点

  • 相对于均值滤波,计算量较大。
  • 如果标准差选择不当,可能导致信号过平滑或细节丢失。

import numpy as np
import matplotlib.pyplot as pltfrom scipy.ndimage import gaussian_filter# 示例数据
data = np.random.randn(100)# 应用高斯滤波
sigma = 2  # 标准差
filtered_data = gaussian_filter(data, sigma=sigma)# 可视化
plt.plot(data, label='Original Data')
plt.plot(filtered_data, label='Filtered Data', color='r')
plt.legend()
plt.show()

4.指数移动平均滤波(Exponential Moving Average Filter)

指数移动平均滤波(是一种在信号处理中广泛应用的加权移动平均滤波技术。它通过对历史数据进行加权平均,并赋予较新数据点更高的权重,从而实现对时间序列数据的平滑处理。

工作原

  • 加权机制:与简单的移动平均滤波(等权重平均)不同,EWMA采用指数衰减的方式对历史数据进行加权平均。即较新的数据点具有更高的权重,而较旧的数据点权重逐渐降低。
  • 迭代计算:每次新的数据点到来时,都会根据当前的平滑系数(α)和前一时刻的输出值(Y_{n-1})以及当前输入值(X_n)来计算新的输出值(Y_n)。这种迭代计算方式使得EWMA能够动态地适应数据的变化。

优点

  1. 快速响应:由于较新数据点具有更高的权重,EWMA能够更快地捕捉到数据的变化趋势,对于实时性要求较高的应用场景尤为适用。
  2. 灵活性:通过调整平滑系数(α),可以灵活地控制滤波器的响应速度和平滑程度。较大的α值会使滤波器更快地响应数据变化,而较小的α值则会使滤波器更加平滑。
  3. 稳定性:虽然EWMA对数据的快速变化敏感,但其加权机制也确保了滤波器在数据相对稳定时能够保持较好的平滑效果,减少噪声对数据的影响。

缺点

  1. 滞后性:尽管EWMA比简单移动平均滤波具有更快的响应速度,但在极端情况下(如数据发生突变时),它仍然可能存在一定的滞后性。这是因为平滑系数的选择需要在响应速度和平滑程度之间做出权衡。
  2. 参数敏感性:平滑系数(α)的选择对滤波器的性能具有重要影响。如果α选择不当,可能会导致滤波器过度平滑或响应不足。因此,在实际应用中需要根据具体情况仔细调整该参数。
  3. 计算复杂度:虽然EWMA的计算过程相对简单,但在处理大规模数据时,其迭代计算方式可能会增加计算复杂度。特别是在实时系统中,需要确保计算速度能够满足应用需求。

import numpy as np
def exponential_moving_average(data, alpha):"""计算指数移动平均滤波。参数:data -- 输入数据,numpy数组。alpha -- 平滑系数,介于0和1之间。返回:filtered_data -- 滤波后的数据,numpy数组。"""result = np.zeros_like(data)result[0] = data[0]for n in range(1, len(data)):result[n] = alpha * data[n] + (1 - alpha) * result[n - 1]return result# 示例数据
data = np.random.randn(100)
alpha = 0.1
filtered_data = exponential_moving_average(data, alpha)# 可视化
import matplotlib.pyplot as pltplt.plot(data, label='Original Data')
plt.plot(filtered_data, label='Filtered Data', color='r')
plt.legend()
plt.show()

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

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

相关文章

微信开发者工具报错 Error: module ‘xxx.js‘ is not defined, require args is ‘xxx.js‘

背景 报错如下 检查 代码逻辑和写法都是ok的重新打开项目又是可以的 解决方案 先确保微信开发者工具和uniapp的将js编译成es5都开着(这个是默认开的) 然后把微信开发者工具关了重开 一般做这一步就会好了,但是只是临时解决 &#xff08…

《Winodws API每日一练》8.2 static控件

在 Windows 编程中,"Static" 控件是一种常见的用户界面元素,用于显示静态文本或图像,而无法进行用户交互。它通常用于显示标签、标题、说明文本或静态图像等信息。Static 控件是一种静态的、只读的显示元素,不接受用户的…

秒懂设计模式--学习笔记(6)【创建篇-建造者模式】

目录 5、建造者模式5.1 介绍5.2 建造步骤的重要性5.3 地产开发商的困惑5.4 建筑施工方5.5 工程总监5.6 项目实施5.7 建造者模式的各角色定义5.8 建造者模式 5、建造者模式 5.1 介绍 建造者模式(Builder)又称为生成器模式,主要用于对复杂对象…

爬虫-豆瓣电影排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析: 导入requests库调用了requests库中的…

明星代言6个提升企业形象的杀手锏-华媒舍

在当今竞争激烈的商业世界中,企业形象的塑造对于品牌的发展至关重要。而明星代言作为一种常见的营销手段,被广泛使用来提升企业形象和产品销售。本文将介绍明星代言的六个杀手锏,帮助您了解如何通过明星代言来提升企业形象。 1. 拥有广泛的影…

关于虚拟机CentOS 7使用ssh无法连接(详细)

虚拟机CentOS 7使用ssh无法连接 猜测:可能是虚拟机软件的网关和和centos7的网关不同导致的问题。 首先打开CentOS7的终端, 输入ifconfig,查看一下系统的ip 打开虚拟机的虚拟网络编辑器, 查看一下网关, 发现确实不一样. 这里有两种方式, 要么修改虚…

Pytorch实战(二):VGG神经网络

文章目录 一、诞生背景二、VGG网络结构2.1VGG块2.2网络运行流程2.3总结 三、实战3.1搭建模型3.2模型训练3.3训练结果可视化3.4模型参数初始化 一、诞生背景 从网络结构中可看出,所有版本VGG均全部使用33大小、步长为1的小卷积核,33卷积核同时也是最小的能…

Java | Leetcode Java题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isIsomorphic(String s, String t) {Map<Character, Character> s2t new HashMap<Character, Character>();Map<Character, Character> t2s new HashMap<Character, Character>(…

Java-数据结构

数据结构概述 常见的数据结构 栈 队列 数组 链表 二叉树 二叉查找树 平衡二叉树 红黑树 示例&#xff1a;

【Go】编译frp,绕过内网安全工具

文章目录 概述常用命令编译环境配置开发环境拉取依赖打包exe输出运行打包好的exe测试 绕过安全产品实践frp使用教程 本文所提供的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与教学之用。文章作者无法鉴别判断读者使用信息及工具的真实用途&#xff0c;若读者将文章中的…

2024 年第十四届 APMCM 亚太地区大学生数学建模 B题 洪水灾害的数据分析与预测--完整思路代码分享(仅供学习)

洪水是暴雨、急剧融冰化雪、风暴潮等自然因素引起的江河湖泊水量迅速增加&#xff0c;或者水位迅猛上涨的一种自然现象&#xff0c;是自然灾害。洪水又称大水&#xff0c;是河流、海洋、湖泊等水体上涨超过一定水位&#xff0c;威胁有关地区的安全&#xff0c;甚至造成灾害的水…

基于惯性加权PSO优化的目标函数最小值求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于惯性加权PSO优化的目标函数最小值求解matlab仿真。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &#xff08;完整程序运行后无水印&#xff09;…

使用java stream对集合中的对象按指定字段进行分组并统计

一、概述 有这样一个需求&#xff0c;在一个list集合中的对象有相同的name&#xff0c;我需要把相同name的对象进行汇总计算。使用java stream来实现这个需求&#xff0c;这里做一个记录&#xff0c;希望对有需求的同学提供帮助 一、根据指定字段进行分组 一、先准备好给前端要…

三菱plc gxwork3 0X121201F 报错;三菱标签区域的保留容量不足;

如果占用过多把r文件寄存器的地址范围改小&#xff0c;一般文件寄存器的地址r0-8000足够了

zk集群搭建

zk集群在搭建部署的时候&#xff0c;通常选择2n1奇数台。底层 Paxos 算法支持&#xff08;过半成功&#xff09;。 zk部署之前&#xff0c;保证服务器基础环境正常、JDK成功安装。 服务器基础环境 IP主机名hosts映射防火墙关闭时间同步ssh免密登录 JDK环境 1、虚拟机克隆 …

014-GeoGebra基础篇-快速解决滑动条的角度无法输入问题

有客户反馈&#xff0c;他的Geogebra一直有个bug&#xff0c;那就是输入角度最大值时总不按照他设定的展示&#xff0c;快被气炸了~ 目录 一、问题复现&#xff08;1&#xff09;插入一个滑动条&#xff08;2&#xff09;选择Angle&#xff08;3&#xff09;输入90&#xff0c;…

复现centernet时,报错RuntimeError: CUDA error: out of memory

运行 python test.py ctdet --dataset coco --exp_id coco_dla --load_model /root/CenterNet/exp/ctdet/coco_dla/model_last.pth --gpus 0 --test_scales 1 报错下面&#xff1a; RuntimeError: CUDA error: out of memory明明显存是够用的 解决办法&#xff1a; 找到自己…

代码随想录——无重叠区间(Leetcode435)

题目链接 贪心 排序 class Solution {public int eraseOverlapIntervals(int[][] intervals) {int res 0;if(intervals.length 1 || intervals.length 0){return res;}// 按左边界排序Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] …

Protobuf(三):理论学习,简单总结

1. Protocol Buffers概述 Protocol Buffers&#xff08;简称protobuf&#xff09;&#xff0c;是谷歌用于序列化结构化数据的一种语言独立、平台独立且可扩展的机制&#xff0c;类似XML&#xff0c;但比XML更小、更快、更简单protobuf的工作流程如图所示 1.1 protobuf的优点…