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')
相关推荐
zhangfeng11333 小时前
国家超算中心 scnet.cn 跨用户文件分享流程总结 多个用户之间 文件共享 不需要反复下载上传
人工智能·语言模型·大模型
MATLAB代码顾问6 小时前
5大智能算法优化标准测试函数对比(Python实现)
开发语言·python
ting94520006 小时前
Tornado 全栈技术深度指南:从原理到实战
人工智能·python·架构·tornado
果汁华7 小时前
Browserbase Skills:让 Claude Agent 真正“看见“网页世界
人工智能·python
ZhengEnCi7 小时前
04-缩放点积注意力代码实现 💻
人工智能·python
DeepReinforce7 小时前
三、AI量化投资:使用akshare获取A股主板20260430所有的涨停股票
python·量化·akshare·龙头战法
HackTwoHub7 小时前
AI大模型网关存在SQL注入、附 POC 复现、影响版本LiteLLM 1.81.16~1.83.7(CVE-2026-42208)
数据库·人工智能·sql·网络安全·系统安全·网络攻击模型·安全架构
段一凡-华北理工大学8 小时前
【高炉炼铁领域炉温监测、预警、调控智能体设计与应用】~系列文章08:多模态数据融合:让数据更聪明
人工智能·python·高炉炼铁·ai赋能·工业智能体·高炉炉温
万粉变现经纪人8 小时前
如何解决 pip install llama-cpp-python 报错 未安装 CMake/Ninja 或 CPU 不支持 AVX 问题
开发语言·python·开源·aigc·pip·ai写作·llama
其实防守也摸鱼8 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学