滤波算法学习笔记

目录

引言

一、定义

二、分类

三、常见滤波算法

四、应用与优势

五、发展趋势

例程

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 np

def 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 plt

plt.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 plt

from 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 plt

plt.plot(data, label='Original Data')
plt.plot(filtered_data, label='Filtered Data', color='r')
plt.legend()
plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python画图-seaborn驯化】一文学会seaborn画散点图scatterplot、swarmplot技巧

【Python画图-seaborn驯化】一文学会seaborn画散点图scatterplot、swarmplot 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相关内…

【uni-app】基础

一、官网 网址:https://zh.uniapp.dcloud.io/tutorial/其他辅助网页讲解:https://www.wenjiangs.com/doc/7y94pldun2插件下载free:https://ext.dcloud.net.cn/ 二、提示框 用uni.showToast提醒的次数超过7个字的时候就会导致文字显示不全&…

【Arduino】XIAOFEIYU实验ESP32使用温湿度传感器测量温度(图文)

温度传感器在我们的日常生活中应用还是很普遍的,使用ESP32可以方便的使用温度传感器对文档进行测量,今天XIAOFEIYU就来实验一下DHT11温湿度传感器。 需要安装DHT温度传感器的库,可以先进行下载:GitHub - adidax/dht11: DHT11 lib…

ChatMoney:AI看病,私人医生不是梦想!

本文由 ChatMoney团队出品 在当今这个科技飞速发展的时代,人工智能技术正在以惊人的速度改变着我们的生活,人工智能已经深入到各个领域,医疗行业也不例外。 而今天我要和大家聊一聊利用ChatMoney全能知识库AI系统在求医问诊领域所发挥的巨大…

Cesium与Three相机同步(3)

Cesium与Three融合的案例demo <!DOCTYPE html> <html lang"en" class"dark"><head><meta charset"UTF-8"><link rel"icon" href"/favicon.ico"><meta name"viewport" content&q…

接口签名、日志、token校验优化

文章目录 引言I 整合接口签名校验、接口信息日志处理、token校验功能为一个注解1.1 获取注解信息,判断API校验功能配置II 签名优化2.1 签名随机数统一放在请求头2.2 校验签名接口的请求参数类型为自定义对象2.3 获取请求数据,并校验签名数据2.4 Knife4j全局添加鉴权参数III 签…

thinkadmin 新增和编辑页面多选关联表人员信息,并可按名称搜索查询

假如现在有一个窗口表和人员表,窗口表中的user_ids字段存储多个工作人员,人员表的id在窗口表的user_ids字段中存储为 “1,2,3”,代表3个工作人员,通过以下代码实现 form.html <div class="layui-col-xs12"><span class="help-label

自动驾驶理论新突破登Nature子刊!清华、密歇根联合提出三条技术路线,剑指「稀疏度灾难」

自动驾驶理论新突破登Nature子刊&#xff01;清华、密歇根联合提出三条技术路线&#xff0c;剑指「稀疏度灾难」 近日&#xff0c;清华大学与密歇根大学联合提出的自动驾驶汽车安全性「稀疏度灾难」问题&#xff0c;发表在了顶刊《Nature Communications》上。研究指出&#…

【12321骚扰电话举报受理中心-短信验证安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

揭秘:华火电焰灶可不可信,安不安全?

随着科技的不断进步&#xff0c;传统厨房灶具也在经历着前所未有的变革。在这个追求环保、节能和智能化的时代&#xff0c;最近发布的一款名为华火电燃喷焰式组合灶厨吸引了众多消费者的目光。今天&#xff0c;我们就来对这款华火HH-SZQP60电燃喷焰式组合灶进行一次深入评测&am…

谷粒商城学习-06-使用vagrant快速创建linux虚拟机

这一节的内容是在Windows上安装虚拟机。 为什么要按照虚拟机呢&#xff1f; 原因是很多软件只能在Linux下运行&#xff0c;有的虽然也可以在Windows上运行&#xff0c;但从安装到运行会遇到很多问题&#xff0c;为这些解决这些问题花时间对于大多数人特别是初学者是没有什么价…

Qt中udp指令,大小端,帧头帧尾实际示例

前言 虽然QT中&#xff0c;udp发送和接收&#xff0c;其实非常简单&#xff0c;但是实际工作中&#xff0c;其实涉及到帧头帧尾&#xff0c;字节对齐&#xff0c;以及大小端序的问题。比如网络中&#xff0c;正规的一般都是大端序&#xff0c;而不是小端序&#xff0c;大多数的…

Arthas实战(3)- CPU使用率高问题排查

一、 准备测试应用 新建一个 SpringBoot应用&#xff0c;写一段 CPU 使用率高的代码&#xff1a; GetMapping("/cpuUsageRate") public String cpuUsageRate() {while (true) {// 这个循环没有实际意义&#xff0c;只是为了占用CPUfor (int i 0; i < 1_000_000…

(三)共享模型之管程

线程安全问题 案例 两个线程对初始值为 0 的静态变量一个做自增&#xff0c;一个做自减&#xff0c;各做 5000 次&#xff0c;结果是 0 吗&#xff1f; Slf4j(topic "c.ThreadSafe") public class ThreadSafe {public static int counter 0;public static void …

南京,协同开展“人工智能+”行动

南京&#xff0c;作为江苏省的省会城市&#xff0c;一直以来都是科技创新和产业发展的高地。近日&#xff0c;南京市政府正式印发了《南京市进一步促进人工智能创新发展行动计划&#xff08;2024—2026 年&#xff09;》和《南京市促进人工智能创新发展若干政策措施》的“11”文…

Linux Static Keys和jump label机制

文章目录 前言一、asm goto二、API使用2.1 低版本API2.2 高版本API 三、jump label四、源码分析4.1 数据结构4.2 static_key_false4.3 jump_label_init4.4 __jump_label_transform4.5 static_key_slow_inc/dec 五、__jump_table节5.1 内核5.2 内核模块 六、修改内存代码6.1 x86…

vue配置sql规则

vue配置sql规则 实现效果组件完整代码父组件 前端页面实现动态配置sql条件&#xff0c;将JSON结构给到后端&#xff0c;后端进行sql组装。 这里涉及的分组后端在组装时用括号将这块规则括起来就行&#xff0c;分组的sql连接符&#xff08;并且/或者&#xff09;取组里的第一个。…

论文配色:跟着顶刊学配色(Nature篇)

写在前面&#xff1a; 截至目前&#xff0c;nature共发表Article 572篇&#xff0c;本文挑选了部分最新的文献&#xff0c;进行配色总结&#xff0c;每种颜色分别提供十六进制、RGB、HSB、CMYK和LAB5种描述模型&#xff0c;方便后期配色使用。 三色&#xff1a; 四色&#xff…

Java增加线程后kafka仍然消费很慢

文章目录 一、问题分析二、控制kafka消费速度属性三、案例描述 一、问题分析 Java增加线程通常是为了提高程序的并发处理能力&#xff0c;但如果Kafka仍然消费很慢&#xff0c;可能的原因有&#xff1a; 网络延迟较大&#xff1a;如果网络延迟较大&#xff0c;即使开启了多线…

【MindSpore学习打卡】应用实践-计算机视觉-SSD目标检测:从理论到实现

在计算机视觉领域&#xff0c;目标检测是一个至关重要的任务。它不仅要求识别图像中的目标物体&#xff0c;还需要精确定位这些物体的位置。近年来&#xff0c;随着深度学习技术的飞速发展&#xff0c;各种高效的目标检测算法层出不穷。SSD&#xff08;Single Shot MultiBox De…