banner
学习与分享

您的当前位置:首页 > 新闻资讯 > 学习与分享

EMG 分析指导

来源:北京京显数字技术有限公司 │ 发表时间:2020-06-02 | 浏览数:载入中...

1.  安装所需安装包

[1] :  # biosignalsnotebooks python package

import biosignalsnotebooks as bsnb

 

# Scientific packages

from numpy import linspace, max, min, average, std, sum, sqrt, where, argmax

from scipy.integrate import cumtrapz

from scipy.signal import welch

 

2. 加载所需数据

[2]:  # Load of data

data, header = bsnb.load("C:/Users/Administrator/Desktop/File/opensignals/emg.txt", get_header=True)

 

3. 识别设备的Mac地址以及采集期间使用的通道

[3]: channel = list(data.keys())[0]

device = header["device"]

resolution = int(header["resolution"][0])

[4]: print(channel,device,resolution)

   CH1 biosignalsplux 16

 

4. 在变量内存储采样频率和获取的数据

[5]: # Sampling frequency and acquired data

fs = header["sampling rate"]


# Signal Samples

signal = bsnb.raw_to_phy("EMG", device, data[channel], resolution, option="mV") # Conversion to mV

time = linspace(0, len(signal) / fs, len(signal))

 

5. EMG参数提取

 

5.1 肌肉激活的检测和计算 

[6]: burst_begin,burst_end= bsnb.detect_emg_activations(signal, fs, smooth_level=20, threshold_level=10, time_units=True, plot_result=True)[:2]

北京京显数字技术有限公司


5.2 肌肉激活期的最大,最小和平均持续时间

[7]: # Bursts Duration

bursts_time = burst_end - burst_begin

# Parameter extraction

max_time = max(bursts_time)

min_time = min(bursts_time)

avg_time = average(bursts_time)

std_time = std(bursts_time)

 

[10]print(max_time,min_time,avg_time,std_time)

11.230023759703272,0.02900006135629951,1.793047271865591 2.8571870817188993

 

5.3 EMG样本值的最大,最小,平均和标准偏差

[14]: # Maximum

max_sample_value = max(signal)

 

# Minimum

min_sample_value = min(signal)

 

# Average and Standard Deviation

avg_sample_value = average(signal)

std_sample_value = std(signal)

 

time_param_dict = {"Maximum EMG": max_sample_value, "Minimum EMG": min_sample_value,

                   "Average EMG": avg_sample_value, "Standard Deviation EMG": std_sample_value}

 

[15]: print(max_sample_value,min_sample_value,avg_sample_value,std_sample_value )

1.4999542236328125,-1.2648468017578125,-0.0015200249742455272,0.1262309175005903

 

5.4 曲线下的均方根和面积(信号强度估计器)

[16]:# Root Mean Square

rms = sqrt(sum(signal * signal) / len(signal))

 

# Area under the curve

area = cumtrapz(signal)

[18]:print(rms,area)

0.12624006895183149, [8.14819336e-03, 2.86560059e-02,5.06286621e-02 ... -7.18486771e+02, -7.18478531e+02 ,-7.18456009e+02]

 

5.5 总功率和频域上的一些参考点

[21] # Signal Power Spectrum

f, P = welch(signal, fs=fs, window='hanning', noverlap=0, nfft=int(256.))

 

# Total Power and Median Frequency (Frequency that divides the spectrum into two regions with equal power)

area_freq = cumtrapz(P, f, initial=0)

total_power = area_freq[-1]

median_freq = f[where(area_freq >= total_power / 2)[0][0]]

f_max = f[argmax(P)]

 

[26]:print(total_power,median_freq,f_max)

0.01598046330536892 93.75 74.21875

 

[27]  bsnb.emg_parameters(signal, fs, raw_to_mv=False)

{'Number of Muscular Activations': 46,

 'Maximum Muscular Activation Duration': 11.230023759703272,

 'Minimum Muscular Activation Duration': 0.02900006135629951,

 'Average Muscular Activation Duration': 1.793047271865591,

 'Standard Deviation of Muscular Activation Duration': 2.8571870817188993,

 'Maximum Sample Value': 1.4999542236328125,

 'Minimum Sample Value': -1.2648468017578125,

 'Average Sample Value': -0.0015200249742455272,

 'Standard Deviation Sample Value': 0.1262309175005903,

 'RMS': 0.12624006895183149,

 'Area': -718.4560089111328,

 'Total Power Spect': 0.01598046330536892,

 'Median Frequency': 93.75,

 'Maximum Power Frequency': 74.21875}


hgxtkooLpEXZtpgRqq3vGlS6MADn1au2CEs9K75yubDi3qw66E0y87K8kv+aO8dRB1U31hoxqSz4FFU7ACoix/GbKrrVtQullTVcVquOG1bDhOyculjKd82ZUWG93n6Fz1bTEHxco78p8LLB51az3eo3LsRH87sTdQe179+B2H8JVtfQS+UnBwPX1AKg4BhEhC0m1wrffUTiuCedWsSo0/ZIsurUarg9