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

对应视频链接点击直达

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.mfbz.cn/a/716731.html

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

相关文章

Objective-C 学习笔记 | KVC(key-value coding)

Objective-C 学习笔记 | KVC&#xff08;key-value coding&#xff09; Objective-C 学习笔记 | KVC&#xff08;key-value coding&#xff09;非对象类型Key 路径 Objective-C 学习笔记 | KVC&#xff08;key-value coding&#xff09; KVC 可以让程序通过名称直接存取属性&a…

CentOS 5(CentOS 6、Redhat 6)服务器配置VNC

一、配置服务器yum源 yum源&#xff08;本地、华为云、阿里云、网易&#xff09; 二、使用yum安装vnc服务 1、检查系统是否安装了vnc 和 vncserver&#xff0c; rpm -qa | grep vnc如果没有安装那就行自行下载安装&#xff08;我这里用yum安装了&#xff0c;vncserver安装需…

让你的网页动起来 - 轻松实现 JavaScript 拖拽功能

效果展示 实现 要实现该效果需要运用 HTML5 的 dragstart 拖放操作事件 通过去开启dragstart监听拖放操作事件就能实现图片的拖动 <div class"empty"><div class"fill" draggable"true"></div> </div>本例子中我们对…

基于深度学习的鸟类检测识别系统【python源码+Pyqt5界面+数据集+训练代码 MX_003期】

简介&#xff1a; 基于深度学习的鸟类检测识别系统在当今世界中具有广泛的应用前景。系统不仅可以帮助生态学家和保护人员监测和保护鸟类种群&#xff0c;还能在农业管理、城市生态监测以及科学研究领域发挥重要作用。通过自动化的图像识别技术&#xff0c;可以实现对鸟类种类、…

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…

学生用小台灯什么牌子的好?五大强劲护眼台灯牌子分享

在这个数码时代&#xff0c;人们对屏幕的依赖程度越来越高&#xff0c;尤其是孩子们。他们不仅在学校里需要长时间盯着教科书&#xff0c;还会在学习和娱乐中使用各种数码设备。然而&#xff0c;这也使得眼睛健康问题逐渐凸显&#xff0c;尤其是儿童近视的问题。为了保护视力&a…

Inpaint软件下载附加详细安装教程

​Inpaint是一款由Maxim Gapchenko开发的图像处理软件&#xff0c;它可以帮助用户轻松地去除图像中的水印和其他不需要的元素&#xff0c;这个软件的核心技术是基于图像处理算法的&#xff0c;它可以自动识别图片中的像素&#xff0c;并用周围的颜色进行替换&#xff0c;使得图…

吴恩达深度学习笔记:机器学习(ML)策略(1)(ML strategy(1))1.11-1.12

目录 第三门课 结构化机器学习项目&#xff08;Structuring Machine Learning Projects&#xff09;第一周 机器学习&#xff08;ML&#xff09;策略&#xff08;1&#xff09;&#xff08;ML strategy&#xff08;1&#xff09;&#xff09;1.11 超过人的表现&#xff08;Surp…

Swift Combine — Subject Publishers(PassthroughSubject CurrentValueSubject)

本文主要介绍一下Subject&#xff0c;Subject 本身也是一个 Publisher&#xff0c;其定义如下&#xff1a; public protocol Subject<Output, Failure> : AnyObject, Publisher {func send(_ value: Self.Output)func send(completion: Subscribers.Completion<Self.…

豆浆机水位传感器工作原理

豆浆机水位传感器的工作原理基于光电效应&#xff0c;利用近红外发光二极管和光敏接收器的组合实现液位的精确检测与控制。在豆浆机内部&#xff0c;传感器安装在水箱底部或需要检测液位的位置&#xff0c;起到监测和控制豆浆机水位的重要作用。 传感器包括一个近红外发光二极…

Suno新技能亮相:完美复刻歌手音色,我甚至不敢公开!

之前写过一篇文章 颠覆音乐创作! Suno史诗级更新&#xff0c;随便哼哼就能出一首好听的歌曲&#xff1f; Suno支持上传一段音频或者自己的哼唱进行续创歌曲&#xff0c;这个功能大家有玩出花样嘛&#xff1f; 可能很多人&#xff0c;还不知道这个到底有啥用! 大家先看看这首《满…

如何用Vue3和p5.js绘制交互式3D饼图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于p5.js实现色彩轮和饼状图的动态可视化 应用场景 本代码利用p5.js库&#xff0c;创建了一个交互式的色彩轮和饼状图可视化界面。它适用于需要展示颜色信息或数据分布情况的场景&#xff0c;如设计、数据分…

docker通过容器id查看运行命令;Portainer监控管理docker容器

1、docker通过容器id查看运行命令 参考&#xff1a;https://blog.csdn.net/a772304419/article/details/138732138 docker inspect 运行镜像id“Cmd”: [ “–model”, “/qwen-7b”, “–port”, “10860”, “–max-model-len”, “4096”, “–trust-remote-code”, “–t…

【招联消费金融股份】有限公司2024年5月18日【算法开发岗暑期实习】一面试经验分享

招联消费金融股份有限公司2024年5月18日面试经验分享 面试流程&#xff1a;共30多分钟&#xff0c;先3分钟自我介绍&#xff0c;然后细细介绍简历上面的论文和实习信息。问题1&#xff1a;扩散模型的noise schedule有什么研究。问题2&#xff1a;有哪些常见的数学分布问题3&…

jquery动态效果插件之ScrollMagic

ScrollMagic 是一个强大的 JavaScript 库,可以帮助开发者在页面滚动时触发各种动画效果。它支持复杂的滚动交互,非常适合制作富交互的网页。 这里他使用了ScrollMagic的几种滚动效果: 视差滚动效果:页面上的一些元素在滚动时会产生视差滚动效果,即元素以不同的速度移动,营造出…

MES管理系统中的质量管理活动是什么

在制造业的广阔天地中&#xff0c;质量管理如同航船的指南针&#xff0c;指引着产品品质的航行方向。而随着科技的日新月异&#xff0c;MES管理系统在质量管理领域扮演着越来越重要的角色。MES管理系统不仅连接了企业的管理层与车间生产现场&#xff0c;更在质量管理的各个环节…

洗地机性价比高的是哪一款?行内人告诉你

在浏览前&#xff0c;希望您轻触屏幕上方的“关注”按钮&#xff0c;让我后续为您带来更多实用且精彩的内容&#xff0c;感谢您的支持&#xff01; 洗地机作为现在的流行清洁工具&#xff0c;它的魅力之处在于&#xff1a;性价比极高&#xff0c;大多数家庭无需花费过多就能把…

语义分割和目标检测的关系

目录 1.语义分割的目标 2.目标检测的目标 3.两种任务的异同之处 从大方向的任务特点上来说 &#xff08;1&#xff09;物体的位置 &#xff08;2&#xff09;物体的分类 从数据格式来说 (1&#xff09;语义分割的数据格式 (2&#xff09;目标检测的数据格式 1.语义分…

Java面试题之MySQL事务详解

事务是什么 MySQL中的事务&#xff08;Transaction&#xff09;是数据库管理系统执行的一个逻辑操作单元&#xff0c;它是由一系列数据库操作组成的逻辑工作单元。事务是并发控制的单位&#xff0c;也是用户定义的一个操作序列。事务的主要目的是确保数据的完整性和一致性&…

Trying to access array offset on value of type null

主要原因是版本7.4以后PHP解析器会对null类型的下标访问直接报错 背景&#xff1a; laravel框架 同时使用了扩展A和扩展B 扩展A要求 php>7.4,同时扩展B的对null类型的下标访问不兼容php7.4 修改扩展B不太现实&#xff0c;毕竟扩展B中有太多的对null类型的下标访问。 解决…