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

news2024/10/5 16:27:50

对应视频链接点击直达

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/1832173.html

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

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] K小姐和A先生的聚餐计划(200分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

[自动驾驶 SoC]-4 特斯拉FSD

FSD, 参考资料来源FSD Chip - Tesla - WikiChip 另外可参考笔者之前分享文章&#xff1a;[自动驾驶技术]-6 Tesla自动驾驶方案之硬件&#xff08;AI Day 2021&#xff09;&#xff0c;​​​​​​​[自动驾驶技术]-8 Tesla自动驾驶方案之硬件&#xff08;AI Day 2022&#xf…

短信群发平台众多,如何挑选一家靠谱的合作伙伴?

随着通信技术的不断发展和智能手机的普及&#xff0c;短信群发平台在企业营销、客户通知、活动推广等领域的应用越来越广泛。然而&#xff0c;市场上的短信群发平台琳琅满目&#xff0c;如何从中挑选出一家靠谱、高效、安全的合作伙伴&#xff0c;成为了许多企业和个人关注的焦…

Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)

前言 Matlab&#xff08;矩阵实验室&#xff09;是全球领先的数学计算软件开发商美国 MathWorks 公司研发的一款面向科学与工程计算的高级语言的商业数学软件&#xff0c;集算法开发、数据分析、可视化和数值计算于一体的编程环境&#xff0c;其核心是仿真交互式矩阵计算&…

管理员如何踢掉登录用户?

这是 Spring Security 学习小组有小伙伴提的一个问题&#xff1a; 感觉这个问题还有点意思&#xff0c;拿出来和各位小伙伴一起分享下。 一 问题分析 首先大家注意限制条件&#xff1a;常规 Session 方案。 如果不是这几个字&#xff0c;这个问题根本就不是问题&#xff0c;…

Python基础用法 之 输入 与 输出

1.输入 &#xff08;1&#xff09;什么是输入&#xff1f; 输入&#xff1a;获取键盘的输入信息。 &#xff08;2&#xff09;语法 变量 input(给使⽤者的提示信息,即告诉别⼈输入什么内容) &#xff08;3&#xff09;注意事项 代码从上到下执⾏, 当代码执⾏遇到 input 的时候…

【C++高阶】掌握C++多态:探索代码的动态之美

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C继承 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀继承 &#x1f4d2;1. 多态的定义及实现&…

个人学习算法总结的基础crud与算法思想数据结构解释

建议都从简单的crud入手,结合生活理解了结构与操作在去进阶更难的东西,做事有规划有步骤有时间限制这样比较好进步 跳转阅读

进化生物学的数学原理 知识点总结

1、进化论与自然选择 1.1 进化论 1、进化论 过度繁殖 -> 生存竞争 -> 遗传和变异 -> 适者生存 2、用进废退学说与自然选择理论 用进废退&#xff1a;一步适应&#xff1a;变异 适应 自然选择&#xff1a;两步适应&#xff1a;变异 选择 适应 3、木村资生的中性…

Mysql开启查询日志(General Log)

1、增加配置&#xff1a; /etc/my.cnf [mysqld] general_log1 general_log_file/var/log/mysql/query.log 2、增加目录和文件&#xff0c;并且授权 可以使用以下命令修改权限&#xff1a; 创建目录&#xff1a;sudo mkdir -p /var/log/mysql 更改目录所有者&#xff1a;sudo…

[环境配置]vscode通过ssh连接autodl进行项目开发

警告&#xff1a;如果使用VSCode直接执行或开终端执行训练程序&#xff0c;请在调试完成后最后通过screen/tmux工具开守护进程&#xff0c;确保程序不受SSH连接中断影响程序执行&#xff01; 官方文档&#xff1a;请戳 AutoDL使用方法&#xff1a; 在进行操作前您需要提前安装…

【日常记录】【插件】prisma 链接MySQL数据库 简单入门

文章目录 1、新建项目&#xff0c;使用prisma链接数据库1.1、先创建一个项目1.2、初始化 npm 配置文件及下载依赖1.3、初始化TS配置文件1.4、初始化 prisma1.5、更改 prisma/schema.prisma1.6 更改.env 文件1.7 编写 prisma/schema.prisma1.8 将编写的 prisma/schema.prisma 映…

实时数仓Hologres V2.2发布,Serverless Computing降本20%

Highlight 新发布Serverless Computing&#xff0c;提升大任务稳定性&#xff0c;同时可降低20%计算成本 引擎性能优化&#xff0c;TPC-H 1TB测试相对V1.X 提升100% 实时湖仓加速架构升级&#xff0c;支持Paimon&#xff0c;直读ORC、Parquet数据性能提升5倍以上 新增实例监…

如何安全进行亚马逊、沃尔玛测评?

在亚马逊、沃尔玛、速卖通、阿里国际站等电商平台上&#xff0c;测评已成为一种高效的推广手段&#xff0c;但伴随的风险也不容忽视。这些风险主要源于平台严格的大数据风控机制&#xff0c;它涵盖了多个方面&#xff0c;以确保评价的真实性和合规性。 首先&#xff0c;硬件参数…

解决 uniapp h5 页面在私有企微iOS平台 间歇性调用uni api不成功问题(uni.previewImage为例)。

demo <template><view class"content"><image class"logo" src"/static/logo.png"></image><button click"previewImage">预览图片</button></view> </template><script> //打…

数据可视化实验一:Panda数据处理及matplotlib绘图初步

目录​​​​​​​ 2024-6-17 一、请将所有含有发明家“吴峰”的发明专利的“申请日”打印出来。并将含有“吴峰”的所有发明专利条目保存到Excel中 1.1 代码实现 1.2 运行结果 二、读取文件创建城市、人口、性别比、城镇化率DataFrame对象&#xff0c;计算指标排名&…

AI写代码,CS还有前途吗?加州大学伯克利分校:CDSS申请人数激增48%!

目录 01 CS入学人数暴涨 02 人类Coder可堪大任 03 AI还没有学会创新 04 编程与农耕不同 AI写了这么多代码&#xff0c;你还应该学习计算机科学吗&#xff1f; 新的数据显示&#xff0c;学生们仍然热衷于选修计算机科学&#xff1a;加州大学伯克利分校&#xff08;UCB&#…

AI大模型应用(1)OpenAi API快速入门

AI大模型应用(1)OpenAi API快速入门 2022 年 11 月&#xff0c;ChatGPT 成功面世&#xff0c;成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同&#xff0c;OpenAI 从初代模型 GPT-1 开始&#xff0c;始终贯彻只有解码器&#xff08;Decoder-only&#xff…

动力学笔记01——共振频率和共振带的数学定义

文章目录 0、背景描述1、正文2. 位移、速度、加速度的共振频率并不相同 0、背景描述 过去一年&#xff0c;我基本都在考虑塔架&#xff08;尤其是混塔&#xff09;频率仿真/模态分析的问题。关于这个问题&#xff0c;不仅有地基刚度&#xff0c;还有塔筒本身以及其他影响频率的…

散户必须知道!个股场外期权期限是什么?

今天带你了解散户必须知道&#xff01;个股场外期权期限是什么&#xff1f;场外个股期权是一种交易双方买卖未来某个时间以某个价格购买或卖出某种资产的权力&#xff0c;允许投资者以相对较小的期权费用获得名义本金&#xff0c;以获取更高的回报。 个股场外期权期限是什么&am…