
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}