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

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

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.data

m.timestamp

m.export_csv('ex1_processed.csv')

✨ 相关推荐

少女针伊妍仕多少钱一针?填充界的天花板,还你元气满满
离婚手续去哪办?协议与诉讼地点选择全解析
bt365官网是多少

离婚手续去哪办?协议与诉讼地点选择全解析

📅 07-30 👀 5033
将大自然搬进家,就从TONIN CASA的蝴蝶家具开始!
bt365官网是多少

将大自然搬进家,就从TONIN CASA的蝴蝶家具开始!

📅 08-14 👀 6713