当前位置: 首页 > news >正文

EMG肌肉信号处理合集 (一)

本文归纳了常见的肌肉信号预处理流程,方便EMG信号的后续分析。使用pyemgpipeline库 来进行信号的处理。文中使用了 UC Irvine 数据库的下肢数据。

目录

1 使用wrappers 定义数据类,来进行后续的操作

2 肌电信号DC偏置去除

3 带通滤波器处理

4 对肌电信号进行全波整流

5 肌电信号线性包络

6 幅度归一化 (已知最大收缩的幅度)

7 分割得到一部分时间段的信号

8 得到最后处理好的数据并且保存下来


1 使用wrappers 定义数据类,来进行后续的操作

import os
import numpy as np
from matplotlib.figure import SubplotParams
import pyemgpipeline as pepdata_folder = 'uci_lower_limb/A_TXT'
data_filename = '3Asen.txt'
trial_name = 'Sit'
channel_names = ['rectus femoris', 'biceps femoris', 'vastus internus', 'semitendinosus']
sample_rate = 1000def load_uci_lower_limb_txt(_filepath):with open(_filepath) as fp:collect_values = np.array([])lines = fp.readlines()for line in lines[7:]:  # first few lines are data descriptionitems = [float(e) for e in line.split('\t')[:4] if e != '']  # last column is not EMG dataif len(items) != 4:  # last few rows might not have EMG datacontinuecollect_values = np.concatenate((collect_values, np.array(items)))_data = collect_values.reshape(-1, 4)return _datafilepath = os.path.join(data_folder, data_filename)
data = load_uci_lower_limb_txt(filepath)
dataprint('data shape:', data.shape)emg_plot_params = pep.plots.EMGPlotParams(n_rows=4,fig_kwargs={'figsize': (8, 6),'dpi': 80,'subplotpars': SubplotParams(wspace=0, hspace=0.6),},line2d_kwargs={'color': 'red',}
)m = pep.wrappers.EMGMeasurement(data, hz=sample_rate, trial_name=trial_name,channel_names=channel_names, emg_plot_params=emg_plot_params)m.plot()

原始肌电信号

2 肌电信号DC偏置去除

m.apply_dc_offset_remover()
m.plot()

DC偏置去除的结果图

3 带通滤波器处理

m.apply_bandpass_filter(bf_order=4, bf_cutoff_fq_lo=10, bf_cutoff_fq_hi=450)
m.plot()

带通滤波器处理的结果图

4 对肌电信号进行全波整流

m.apply_full_wave_rectifier()
m.plot()

全波整流处理肌电信号

5 肌电信号线性包络

m.apply_linear_envelope(le_order=4, le_cutoff_fq=6)
m.plot()

肌电信号线性包络处理

6 幅度归一化 (已知最大收缩的幅度)

max_amplitude = [0.043, 0.069, 0.364, 0.068]  # assume the MVC is known
m.apply_amplitude_normalizer(max_amplitude)
m.plot()

幅度归一化结果 

 

7 分割得到一部分时间段的信号

m.apply_segmenter(20.5, 29.5)
m.plot()

分割结果

8 得到最后处理好的数据并且保存下来

m.datam.timestampm.export_csv('ex1_processed.csv')

相关文章:

  • 【DP】mobiusp正在创作乐曲
  • ubuntu20.04配置OpenCV的C++环境
  • 深度学习之基于YoloV3杂草识别系统
  • GIT | 基础操作 | 初始化 | 添加文件 | 修改文件 | 版本回退 | 撤销修改 | 删除文件
  • 操作系统 应用题 例题+参考答案(考研真题)
  • 【Ambari】HDFS基于Ambari的常规运维
  • 基于C#实现赫夫曼树
  • ②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
  • Mysql并发时常见的死锁及解决方法
  • 【RTP】RTPSenderAudio::SendAudio
  • .Net6使用WebSocket与前端进行通信
  • C++类与对象(5)—流运算符重载、const、取地址
  • 通俗理解词向量模型,预训练模型,Transfomer,Bert和GPT的发展脉络和如何实践
  • 二叉树详讲(一)---完全二叉树、满二叉树、堆
  • Qt 串口编程-从入门到实战
  • [deviceone开发]-do_Webview的基本示例
  • 【笔记】你不知道的JS读书笔记——Promise
  • Angular 2 DI - IoC DI - 1
  • axios 和 cookie 的那些事
  • Javascript编码规范
  • Java小白进阶笔记(3)-初级面向对象
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js数组之filter
  • PHP面试之三:MySQL数据库
  • Python - 闭包Closure
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 基于 Babel 的 npm 包最小化设置
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端攻城师
  • 前端面试总结(at, md)
  • 深度解析利用ES6进行Promise封装总结
  • 使用putty远程连接linux
  • FaaS 的简单实践
  • 阿里云ACE认证学习知识点梳理
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • 说说我为什么看好Spring Cloud Alibaba
  • # 数据结构
  • #if和#ifdef区别
  • #Z2294. 打印树的直径
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (31)对象的克隆
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (备忘)Java Map 遍历
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (学习日记)2024.01.09
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转载)深入super,看Python如何解决钻石继承难题
  • *Django中的Ajax 纯js的书写样式1
  • .“空心村”成因分析及解决对策122344
  • .mysql secret在哪_MySQL如何使用索引
  • .Net Memory Profiler的使用举例