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

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

目录

[1 使用wrappers 定义数据类,来进行后续的操作](#1 使用wrappers 定义数据类,来进行后续的操作)

[2 肌电信号DC偏置去除](#2 肌电信号DC偏置去除)

[3 带通滤波器处理](#3 带通滤波器处理)

[4 对肌电信号进行全波整流](#4 对肌电信号进行全波整流)

[5 肌电信号线性包络](#5 肌电信号线性包络)

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

[7 分割得到一部分时间段的信号](#7 分割得到一部分时间段的信号)

[8 得到最后处理好的数据并且保存下来](#8 得到最后处理好的数据并且保存下来)


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

python 复制代码
import os
import numpy as np
from matplotlib.figure import SubplotParams
import pyemgpipeline as pep


data_folder = 'uci_lower_limb/A_TXT'
data_filename = '3Asen.txt'
trial_name = 'Sit'
channel_names = ['rectus femoris', 'biceps femoris', 'vastus internus', 'semitendinosus']
sample_rate = 1000




def 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 description
            items = [float(e) for e in line.split('\t')[:4] if e != '']  # last column is not EMG data
            if len(items) != 4:  # last few rows might not have EMG data
                continue
            collect_values = np.concatenate((collect_values, np.array(items)))
    _data = collect_values.reshape(-1, 4)
    return _data

filepath = os.path.join(data_folder, data_filename)
data = load_uci_lower_limb_txt(filepath)
data


print('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偏置去除

python 复制代码
m.apply_dc_offset_remover()
m.plot()

DC偏置去除的结果图

3 带通滤波器处理

python 复制代码
m.apply_bandpass_filter(bf_order=4, bf_cutoff_fq_lo=10, bf_cutoff_fq_hi=450)
m.plot()

带通滤波器处理的结果图

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

python 复制代码
m.apply_full_wave_rectifier()
m.plot()

全波整流处理肌电信号

5 肌电信号线性包络

python 复制代码
m.apply_linear_envelope(le_order=4, le_cutoff_fq=6)
m.plot()

肌电信号线性包络处理

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

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

幅度归一化结果

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

python 复制代码
m.apply_segmenter(20.5, 29.5)
m.plot()

分割结果

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

python 复制代码
m.data

m.timestamp


m.export_csv('ex1_processed.csv')
相关推荐
Shawn_Shawn1 小时前
mcp学习笔记(一)-mcp核心概念梳理
人工智能·llm·mcp
冷雨夜中漫步3 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
33三 三like3 小时前
《基于知识图谱和智能推荐的养老志愿服务系统》开发日志
人工智能·知识图谱
芝士爱知识a3 小时前
【工具推荐】2026公考App横向评测:粉笔、华图与智蛙面试App功能对比
人工智能·软件推荐·ai教育·结构化面试·公考app·智蛙面试app·公考上岸
郝学胜-神的一滴3 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再3 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
腾讯云开发者4 小时前
港科大熊辉|AI时代的职场新坐标——为什么你应该去“数据稀疏“的地方?
人工智能
工程师老罗4 小时前
YoloV1数据集格式转换,VOC XML→YOLOv1张量
xml·人工智能·yolo
喵手5 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控