import matplotlib.pyplot as plt #读取数据 data1=pd.read_excel('wq20.xlsx',sheetname=1) data2=pd.read_excel('zs20.xlsx',sheetname=1) data3=pd.read_excel('n20.xlsx',sheetname=1) data4=pd.read_excel('w20.xlsx',sheetname=1) data1.columns=['ch1','ch2','ch3','ch4'] data2.columns=['ch1','ch2','ch3','ch4'] data3.columns=['ch1','ch2','ch3','ch4'] data4.columns=['ch1','ch2','ch3','ch4'] names=locals() for i in range(1,5): plt.figure() plt.plot(names['data%s'%i])

握拳

张手

手腕内翻

手腕外翻
将四通道的肌肉电信号汇总求其绝对值平均值,利用移动窗口法,取若干连续时间序列对应的信号强度求局域平均,若其后若干点的均值都超过一定阈值,则视为一个动作开始,反之若其后若干点的局域均值都小于阈值,则视为一个动作结束
def get_mean_semg(data): mean_semg=[] for i in range(len(data)-1): mean_semg.append((data.ch1[i]+data.ch2[i]+data.ch3[i]+data.ch4[i])/4) return mean_semg
for i in range(1,5): names['mean_semg_%s'%i]=get_mean_semg(names['data%s'%i]) plt.figure() plt.plot(names['mean_semg_%s'%i]) plt.ylim(0,5) plt.savefig('a%s'%i,dpi=400)

握拳

张手

内翻

外翻
def get_move_window(mean_semg): mean_semg_arr=np.array(mean_semg) return pd.rolling_mean(mean_semg_arr,window=800)
def get_break(data,i,thre,windowlenth): for i in range(i,i+windowlenth): if data[i]<thre: return 0 return 1
for i in range(1,5): names['move_averge_%s'%i]=get_move_window(names['mean_semg_%s'%i]) names['sta_%s'%i]=[] names['end_%s'%i]=[] thre=1.1 windowlenth=800 for j in range(len(names['move_averge_%s'%i])-1): if get_break(names['move_averge_%s'%i],j,thre,windowlenth)==0 and get_break(names['move_averge_%s'%i],j+1,thre,windowlenth)==1: names['sta_%s'%i].append(j) if get_break(names['move_averge_%s'%i],j,thre,windowlenth)==1 and get_break(names['move_averge_%s'%i],j+1,thre,windowlenth)==0: names['end_%s'%i].append(j)
获取平均值起始点,并将对应时间点作用于原始信号上,对四通道信号进行行动段提取,并将长度较小的部分过滤,视为噪音
for i in range(1,5): names['period_%s'%i]=[] names['sta_filt_%s'%i]=[] names['end_filt_%s'%i]=[] for j in range(len(names['sta_%s'%i])): names['period_%s'%i].append(names['end_%s'%i][j]-names['sta_%s'%i][j]) for k in range(len(names['period_%s'%i])): if names['period_%s'%i][k]>5000: names['sta_filt_%s'%i].append(names['sta_%s'%i][k]) names['end_filt_%s'%i].append(names['end_%s'%i][k]) for i in range(1,len(sta_filt_1)+1): names['data1_cut%s'%i]=data1[sta_filt_1[i-1]:end_filt_1[i-1]] for i in range(1,len(sta_filt_2)+1): names['data2_cut%s'%i]=data2[sta_filt_2[i-1]:end_filt_2[i-1]] for i in range(1,len(sta_filt_3)+1): names['data3_cut%s'%i]=data3[sta_filt_3[i-1]:end_filt_3[i-1]] for i in range(1,len(sta_filt_4)+1): names['data4_cut%s'%i]=data4[sta_filt_4[i-1]:end_filt_4[i-1]]
plt.figure(figsize=(50,3)) for i in range(1,21): plt.subplot2grid((1,20),(0,i-1),colspan=1).plot(names['data1_cut%s'%i]) plt.ylim(0,10) plt.title('fist') plt.figure(figsize=(50,3)) for i in range(1,22): plt.subplot2grid((1,21),(0,i-1),colspan=1).plot(names['data2_cut%s'%i]) plt.ylim(0,10) plt.title('open') plt.figure(figsize=(50,3)) for i in range(1,25): plt.subplot2grid((1,24),(0,i-1),colspan=1).plot(names['data3_cut%s'%i]) plt.ylim(0,10) plt.title('toright') plt.figure(figsize=(50,3)) for i in range(1,21): plt.subplot2grid((1,20),(0,i-1),colspan=1).plot(names['data4_cut%s'%i]) plt.ylim(0,10) plt.title('toleft')

握拳

张手

内弯

外翻
对各通道行动段求区间的平均值MAV,可以看出对于不同的动作,MAV值区别明显,可以作为特征向量对信号进行特征提取
mav_fist=pd.DataFrame(columns=['ch1','ch2','ch3','ch4'],index=[np.arange(20)]) for i in range(1,21): mav_fist.loc[i-1,'ch1']=names['data1_cut%s'%i].ch1.mean() mav_fist.loc[i-1,'ch2']=names['data1_cut%s'%i].ch2.mean() mav_fist.loc[i-1,'ch3']=names['data1_cut%s'%i].ch3.mean() mav_fist.loc[i-1,'ch4']=names['data1_cut%s'%i].ch4.mean() mav_open=pd.DataFrame(columns=['ch1','ch2','ch3','ch4'],index=[np.arange(21)]) for i in range(1,22): mav_open.loc[i-1,'ch1']=names['data2_cut%s'%i].ch1.mean() mav_open.loc[i-1,'ch2']=names['data2_cut%s'%i].ch2.mean() mav_open.loc[i-1,'ch3']=names['data2_cut%s'%i].ch3.mean() mav_open.loc[i-1,'ch4']=names['data2_cut%s'%i].ch4.mean() mav_toright=pd.DataFrame(columns=['ch1','ch2','ch3','ch4'],index=[np.arange(24)]) for i in range(1,25): mav_toright.loc[i-1,'ch1']=names['data3_cut%s'%i].ch1.mean() mav_toright.loc[i-1,'ch2']=names['data3_cut%s'%i].ch2.mean() mav_toright.loc[i-1,'ch3']=names['data3_cut%s'%i].ch3.mean() mav_toright.loc[i-1,'ch4']=names['data3_cut%s'%i].ch4.mean() mav_toleft=pd.DataFrame(columns=['ch1','ch2','ch3','ch4'],index=[np.arange(20)]) for i in range(1,21): mav_toleft.loc[i-1,'ch1']=names['data4_cut%s'%i].ch1.mean() mav_toleft.loc[i-1,'ch2']=names['data4_cut%s'%i].ch2.mean() mav_toleft.loc[i-1,'ch3']=names['data4_cut%s'%i].ch3.mean() 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、全套PDF电子书
书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。
四、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。