05眼动识别软件详情2波形优化-滤波

news2024/10/6 22:29:31

对应视频链接点击直达

01项目点击下载,可直接运行(含数据库)

05眼动识别软件详情2

    • 对应视频链接点击直达
    • 期望的数据展示
    • 数据波形对比
    • 如何实现
      • 几种常用滤波介绍
        • 维纳滤波
        • 巴特沃斯滤波器
        • 中值滤波
        • 排序滤波
      • 推荐
    • 结语
        • 其他
        • 以下是废话

原始数据的波形,简直没法看!
这章来说说波形的优化,让数据展示明显!

期望的数据展示

请添加图片描述

数据波形对比

同类型数据,无滤波
请添加图片描述
同类型数据,有滤波
请添加图片描述
主观的说,下面的数据,人能看···

如何实现

几种常用滤波介绍

维纳滤波

信号经过系统之后,相当于进行了卷积操作,若想让其复原,只需再用系统进行反卷积即可。如果没有信号,系统却有了响应,那么这种噪声可以理解为系统的噪声。如果系统的数学形式是已知的,这种噪声就很容易滤掉,如果未知,那就需要进行估计,这就是维纳做的工作。

一个有限脉冲响应(finite impulse response, FIR),其离散形式可通过卷积表示为
在这里插入图片描述
x=sin(1.5πt(1−t)+2.1)+0.1sin(2.5πt+1)+0.18cos(7.6πt)
请添加图片描述

import numpy as np
import scipy.signal as ss

t = np.linspace(-1, 1, 201)
PI = 2*np.pi
x = (np.sin(PI*0.75*t*(1-t) + 2.1) +
     0.1*np.sin(PI*1.25*t + 1) +
     0.18*np.cos(PI*3.85*t))

# 原始数据添加噪声
np.random.seed(42)
xn = x + np.random.rand(len(t))

w = ss.wiener(xn, 9) # 维纳滤波

plt.scatter(t, xn, marker='.', label="original")
plt.plot(t, w, c = 'r', label="wiener")
plt.legend()
plt.show()

wiener是signal模块中的滤波函数,其输入参数分别是待滤波数据和滤波模板,此外还有一个noise,表示系统噪声,默认为None,表示自行估计噪声。

巴特沃斯滤波器

FIR的特点是无反馈,yn 完全由xn决定,如果响应受到反馈的影响,便是无限脉冲响应(infinite impulse response, IIR),其离散形式变为
在这里插入图片描述
滤波器设计,就是对ak,bk具体形式的求解,signal模块中提供了一些函数,对这两种信号进行滤波。仍以函数x为例,在添加噪声之后,进行滤波,对于不同的滤波函数,其效果如下
在这里插入图片描述

import scipy.signal as ss
import matplotlib.pyplot as plt

b, a = ss.butter(3, 0.05)
z = ss.lfilter(b, a, xn)
z2 = ss.lfilter(b, a, z)
z3 = ss.filtfilt(b, a, xn)

# 下面为绘图代码
plt.plot(t, z, 'r--', label="lfilter, once")
plt.plot(t, z2, 'g--', label="lfilter, twice")
plt.plot(t, z3, 'b', label="filtfilt")
plt.scatter(t, xn, marker='.', alpha=0.75)

plt.grid()
plt.legend()
plt.show()

butter函数生成3阶巴特沃斯滤波器对应的 aaa和bbb值
lfilter是最基础的脉冲响应滤波器,从左侧开始进行滤波,故而会产生相位差
filtfilt从正反两个方向滤波,可消除了lfilter产生的相位差

中值滤波

中值滤波,就是挑选出将个滤波模板范围内数据的中位数,例如[1,3,2,4]这个数组,给定一个长度为3的滤波窗口,那么元素3所在位置的滤波范围就是1,3,2,其中位数是2,所以要把3更改为2。

import numpy as np
import scipy.signal as ss
x = [1,3,2,4]
ss.medfilt(x,3) # [1, 2, 3, 2]

二维的中值滤波在图像处理中非常常见,对椒盐噪声有着非常霸道的滤除效果。所谓椒盐噪声,如下方左图所示,就是图像中随机产生的黑色和白色的斑点。在使用二维的中值滤波之后,整张图片都变得清澈了。
请添加图片描述
参考代码:

from scipy.misc import ascent
import matplotlib.pyplot as plt

img = ascent()
img = img[:256, :256]
r = np.random.rand(*img.shape)
img[r>0.96] = 255
img[r<0.04] = 0

plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.axis('off')

plt.subplot(122)
imFilt = ss.medfilt2d(img, [3,3])
plt.imshow(imFilt, cmap='gray')
plt.axis('off')

plt.show()
排序滤波

排序滤波是中值滤波概念的扩充,和中值滤波的区别是,在对滤波窗口中的数据进行排序之后,可以指定用以替代当前数据的数值序号。下面四个矩阵,展示了以3×3单位矩阵为滤波模板,排序滤波在不同排序参数下的结果。
请添加图片描述
此滤波过程在scipy中的实现方式如下:

x = np.arange(25).reshape(5, 5).astype(float)
I = np.identity(3)

mats = {"original":x}
for i in range(3):
    mats[f"order_filter:{i}"] = ss.order_filter(x, I, i)

order_filter】即为signal模块提供的排序滤波函数,以输入参数(x, I, i)为例,表示从矩阵x中选出单位阵I所覆盖区域中第i小的元素。I是一个单位阵,就实际情况来看,其覆盖的第一个子阵中,以0为中心,则只能覆盖到2x2的范围,对角元素0,6,最小值是0,最大值是6。如以6为中心,则可以完全覆盖3x3的内容,最小值为0,最大值为12。
绘图代码如下:

def drawMat(x, ax=None):
    M, N = x.shape
    if not ax:
        ax = plt.subplot()
    arrM, arrN = np.arange(M), np.arange(N)
    plt.yticks(arrM+0.5, arrM)
    plt.xticks(arrN+0.5, arrN)
    ax.pcolormesh(x)
    ax.invert_yaxis()
    for i,j in product(range(M),range(N)):
        ax.text(j+0.2, i+0.6, f"{x[i,j]}")

for i,key in enumerate(mats,1):
    ax = plt.subplot(2,2,i)
    drawMat(mats[key], ax)
    plt.title(key)

plt.show()

推荐

我这边推荐使用FIR或者IIR
我这边的代码如下:

import numpy as np
   def baseline_correction(eog_signal, sampling_rate):
       # 计算信号的时间数组
       nm = int(len(eog_signal) / 4)
       eog_signal1 = eog_signal
       baseline_corrected = []
       for i in range(4):
           eog_signal = eog_signal1[i * nm:(i + 1) * nm]
           time = np.arange(len(eog_signal)) / sampling_rate  # 算出这个数据的时间 并生成数组
           # 使用线性回归估计基线趋势
           coefficients = np.polyfit(time, eog_signal, 1)
           # 生成基线趋势
           baseline_trend = coefficients[0] * time + coefficients[1]
           # 从原始信号中减去基线趋势以进行校正
           baseline_corrected1 = eog_signal - baseline_trend
           baseline_corrected.extend(baseline_corrected1)
       return baseline_corrected
       # 将数据转换为numpy数组

   fs = 256  # 举例:1000Hz
   # 设计FIR滤波器
   fir_freq = np.array([0.1, 45]) / (fs / 2)  # 将8-13Hz转换为归一化频率

   # 线性回归极限矫正以后的数据
   data_baseline = baseline_correction(eye_data, fs)

   应用FIR滤波器1
   fir_coeff = signal.firwin(numtaps=7, cutoff=fir_freq, pass_zero=False)  # 阶数指的是 numtaps - 1
   fir_filtered_data = signal.lfilter(fir_coeff, 1, data_baseline)  # 无反馈 滤波器 第二组系数全是1 输出只与当前和过去输入有关,与过去输出无关
   # 应用IIR滤波器2
   iir_coeff = signal.iirfilter(N=5, Wn=fir_freq, btype='band', ftype='butter')
   fir_filtered_data = signal.lfilter(iir_coeff[0], iir_coeff[1], data_baseline)

结语

其他

以上仅作参考,欢迎一起讨论!

V:justwaityou1314
懂的都懂
以下是废话

别的也没啥说的 , 如果觉得可以 , 希望一键三连支持一下我的B站作品

欢迎各位大佬留言吐槽,也可以深入科学探讨

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

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

相关文章

大型工业烤箱工作原理及结构特点有哪些

在工业领域&#xff0c;大型工业烤箱以其高效的干燥能力和稳定的性能得到了广泛的应用。无论是电子产品的生产&#xff0c;还是化工材料的制备&#xff0c;甚至是食品加工&#xff0c;大型工业烤箱都发挥着不可或缺的作用。那么&#xff0c;大型工业烤箱是如何工作的?它的结构…

CSDN 自动上传图片并优化Markdown的图片显示

文章目录 完整代码一、上传资源二、替换 MD 中的引用文件为在线链接参考 完整代码 完整代码由两个文件组成&#xff0c;upload.py 和 main.py&#xff0c;放在同一目录下运行 main.py 就好&#xff01; # upload.py import requests class UploadPic: def __init__(self, c…

SpringSecurity6从入门到实战之自定义登录页面

SpringSecurity6从入门到实战之自定义登录页面 在使用SpringSecurity进行认证操作的时候,可以发现默认提供的登录页面比较简陋.那么我们能否对登录页面进行自定义配置呢?接下来开始讲解应该如何进行配置 自定义登录页面流程 引入模板依赖 由于自定义登录页面会使用到前端相关…

树与图的深度优先遍历——AcWing.846树的重心

树与图的深度优先遍历 定义 从图的某个顶点出发&#xff0c;沿着一条路径尽可能深地访问图中顶点。 运用情况 图的连通性判断。寻找特定路径或回路。 注意事项 要标记已访问的节点&#xff0c;以避免重复访问导致死循环。对于有向图和无向图可能需要不同的处理。 解题思…

mysql数据库中触发器的使用

一、修改分隔符号 delimiter $$或者是//或者~~都行 二、创建触发器函数名称 create trigger 函数名 三、什么样的操作出发&#xff0c;操作那个表 after&#xff1a;.....之后触发 befor&#xff1a;.....之前触发 insert&#xff1a; 插入触发 update&#xff1a;修改被触发 d…

鸿蒙APP开发的技术难点

鸿蒙APP开发的技术难点主要体现在以下几个方面&#xff0c;鸿蒙APP开发是一项技术难度较高的工作&#xff0c;需要开发者具备扎实的编程基础、分布式开发能力和学习新技术的意愿。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 多…

充电宝什么牌子好?买多少毫安充电宝合适?这几个误区别踩!

在选择充电宝时&#xff0c;很多消费者常常被各种品牌和容量规格搞得眼花缭乱。不少人认为&#xff0c;容量越大越好&#xff0c;但事实并非如此。其实&#xff0c;根据日常使用需求&#xff0c;选择10000毫安的充电宝已经足够应对大多数情况。10000毫安的充电宝不仅能够满足手…

css-padding

文章目录 paddingpadding与元素的尺寸对于block块状水平元素复杂关系影响元素尺寸不影响元素尺寸最小宽度显示 关系总结 对于inline内联水平元素复杂关系水平padding影响尺寸垂直padding影响背景色区域 padding负值和百分比值负值百分比值inline水平元素的padding的百分比值空i…

WPF 深入理解三、控件结构

控件结构 演示&#xff1a; 思考疑问 为什么有一些元素是Content显示内容,而一些元素是Text显示内容? 凡是继承于Contentcontrol的控件,他们的定义内容用Content&#xff0c;除了TextBlock使用的是Text,大部分都是Content设置其显示内容。 为什么有一些元素有Padding,而一些元…

铁砧帝国延迟高?铁砧帝国延迟严重这样解决

铁砧帝国是一款少见的多人在线游戏&#xff0c;游戏能支持上千名玩家建立帝国并互相作战。而且这款游戏在细节方面也做足准备&#xff0c;设计了攻城梯和攻城锤等设备&#xff0c;以攻破坚固的城墙和要塞&#xff0c;不过具体获取方法就需要玩家自己摸索。因为最近开放了测试申…

Vue3基础介绍

文章目录 一、简介1、简介2、性能提升3、源码升级4、拥抱TypeScript5、新特性 二、创建Vue3.0工程1、使用vue-cli创建2、使用vite创建 三、分析工程结构1、main.js2、组件中 一、简介 1、简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号(One Piece)海贼王 …

K8sGPT+Ollama:免费的 Kubernetes 自动化诊断方案

周末检查博客草稿&#xff0c;发现了这篇。记得当时是与 Kubernetes 自动化诊断工具&#xff1a;k8sgpt-operator 一起写的&#xff0c;算算过去了一年之久&#xff0c;这拖延症也算是病入膏肓了。原本想使用 K8sGPT LocalAI 的方案&#xff0c;由于之前试过 Ollama&#xff0…

OpenMMlab AI实战营第五、六期培训

OpenMMlab AI实战营第五、六期培训 OpenMMlab实战营第五、六次课2023.2.7-9学习参考第五次课笔记第六次课笔记一、什么是语义分割二、语义分割 v.s. 实例分割 v.s. 全景分割三、语义分割经典模型1.语义分割的基本思路2.**复用卷积计算**3.全连接层的卷积化4.预测图的升采样5.双…

Stable Diffusion 3 Medium 正式开源,用户对此产品评价如何?

前两天 Stability.AI 终于开源了 Stable Diffusion 3&#xff0c;虽然只是中杯的 Medium 版本&#xff0c;没有放出当初宣布的 8B 版本[1]&#xff0c;但也在很多方面取得了进步。本想第一时间尝鲜测试&#xff0c;但这几天出差在外&#xff0c;使用颇不方便。 正好老朋友揽睿…

HTTP/3 协议学习

前一篇&#xff1a; HTTP/2 协议学习-CSDN博客 HTTP/3 协议介绍 HTTP/3 是互联网上用于传输超文本的协议 HTTP 的第三个主要版本。它是 HTTP/2 的后继者&#xff0c;旨在进一步提高网络性能和安全性。HTTP/3 与前两个版本的主要区别在于它使用了一个完全不同的底层传输协议—…

安泰电压放大器的选型原则是什么

电压放大器是电子电路中常用的一种器件&#xff0c;主要用于放大输入电压信号。在选型电压放大器时&#xff0c;需要考虑以下几个原则。 根据应用需求确定放大倍数。放大倍数是指输出电压与输入电压之间的倍数关系&#xff0c;也称为增益。不同的应用场景对放大倍数的要求不同&…

3个火火火的AI项目,开源了!

友友们&#xff0c;今天我要给你们安利三个超酷的开源项目&#xff0c;它们都和AI有关&#xff0c;而且每一个都能让你的日常生活变得更加有趣和便捷&#xff01;(最近AI绘图又又超神了&#xff0c;分享以下美图养眼) 01 字节出品&#xff0c;文字转语音Seed-TTS 字节推出了一…

Ubuntu,Centos,Linux服务器安装Mellanox MCX653105A IB网卡HCA卡驱动

Mellanox 官方驱动下载地址 https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed/ 选择对应操作系统 官方链接速度比较慢&#xff0c;推荐个友商的下载地址 https://support.xfusion.com/support/#/zh/rack-servers/2288h-v5-pid-21872244/software …

【算法专题--链表】K个一组翻转链表 -- 高频面试题(图文详解,小白一看就懂!!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 采用哨兵位头节点 &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f34d; 案例图解 四、总结与提炼 五、共勉 一、前言 K个一组翻转链表 这道题&#xff0c;可以说是--链表专题--&#xff0c;最经典…

Java内存模型(JMM)详解

文章目录 1、Java内存模型2、JMM的核心概念1&#xff09;主内存与工作内存2&#xff09;内存可见性3&#xff09;JMM的三大特性&#xff1a;原子性、可见性、有序性。 3、JMM中的八种操作4、Happens-before 规则5、样例&#xff1a; 1、Java内存模型 Java内存模型&#xff08;…