# sEMG for Basic Hand movements Data Set ### Abstract 1. 濾波器 訊號經過巴特沃斯濾波器(Butterworth Band Pass filter)處理,通帶為15Hz至500Hz,再經過50Hz的帶阻濾波器(notch filter)消除常見干擾 2. 判斷進入收縮階段 計算平均IEMG值,當超過門檻(=10)認定開始收縮階段,放鬆階段的資料不加入分析 3. 因為EMG訊號為非線性(non-linear)非平穩(non-stationary)過程,需利用經驗模態分解(EMD)將訊號分解成本質模態函數(IMFs) 4. 將分解後的本質模態函數進行希爾伯特轉換(hilbert transform)以獲得相位函數(phase function),對相位函數微分可計算出瞬時頻率(IFs) 5. 對瞬時頻率提取特徵值 有10個特徵值(IEMG, ZC, SSC, WL, WAMP, VAR, Skewness, Kurtosis, Median, Standard Deviation)拿來區別出各手勢的不同之處 例如IMF_1瞬時頻率的Median可區分出C/S, IMF_2瞬時頻率的Median可區分出H/S 6. 降維 一階本質模態函數的一個特徵值就是一個維度 為什麼需要降維? 有些特徵值是相關的,可能會給出多餘的資訊 有些特徵值是不相關的,可能會影響分類器的識別能力 這裡使用主成分分析(PCA)來降維 7. 分類 linear classifier ### Contraction Mode In Matlab ``` load('female_1.mat','cyl_ch1') X = abs(cyl_ch1); Cum = cumsum(X,2); for i = 1:30 [r,c] = find(Cum(i,:)>10,1,'first'); cyl_ch1(i,1:(c-1)) = 0; end ``` ### EMD 流程圖 ![](https://i.imgur.com/YaqPESF.png) In Matlab ``` % 三十次動作的第一階IMF Data = []; for i = 1:30 X = cyl_ch1(i,:); [imf,residual,info] = emd(X,'Interpolation','pchip'); inv_imf = imf'; Data = [Data;inv_imf(1,:)]; end ``` ### IMF > 電腦要用大量的資料才能學習一件小事情 > 人腦可以用很少的訊息聯想到豐富的東西 ![](https://i.imgur.com/9OIcE2e.png) ![](https://i.imgur.com/fz8v7wo.png) 整個EMD分解過程完成後,原始訊號x(t)可以表示成n個IMF分量與一個平均趨勢(mean trend)分量r(t)的組合,即![](https://i.imgur.com/JnHa7r3.png) ### Hilbert transform and instantaneous frequencies 分別對每個IMF進行Hilbert轉換,可以將原始訊號表達成Real Part的形式,即![](https://i.imgur.com/xIAFtlA.png) In Matlab ``` fs = 500; %sampling frequency in Hz t = (0:length(cyl_ch1)-1)/fs; %time base z = hilbert(Data); %form the analytical signal inst_amplitude = abs(z); %envelope extraction inst_phase = unwrap(angle(z)); %inst phase inst_freq = diff(inst_phase)/(2*pi)*fs; %inst frequency ``` ### Features In Matlab ``` Features = []; for j = 1:29 Y = inst_freq(j,:); feat = EMGfeatures(Y) Features = [Features;feat]; end ``` ### PCA [動畫說明](https://yjk94.wordpress.com/2016/11/11/pca-to-layman/) PCA是一個濃縮數據的方法,並不是選出一些特徵然後丢掉另外的特徵(feature selection),而是找出了一些新的線性組合來描述我們的資料(feature extraction)。 要濃縮又要濃縮後可以復原,最佳的線性組合就是誤差最小&方差最大的組合 ### Classification 有六種手勢要分類 ![](https://i.imgur.com/89HSnJX.png) In Matlab ``` classificationLearner ``` ### Result ![](https://i.imgur.com/KAQTxVN.png) IMF1▸準確率六成 IMF1+IMF2▸準確率八成 IMF1+IMF2+IMF3▸準確率八成五 ### Reference 資料庫:https://archive.ics.uci.edu/ml/datasets/sEMG+for+Basic+Hand+movements IMF的MATLAB方法:https://www.mathworks.com/help/signal/ref/emd.html#d117e45540 EMG Feature Extraction Toolbox: https://www.mathworks.com/matlabcentral/fileexchange/71514-emg-feature-extraction-toolbox Matlab Library: http://www.sce.carleton.ca/faculty/chan/matlab/matlab_library.htm Classification Learner App: https://www.mathworks.com/help/stats/classificationlearner-app.html ### Learn More Python Machine Learning: https://next.tech/xyz/python-machine-learning-part-2?utm_source=medium&utm_medium=referral&utm_campaign=python-ml-2 ### Appendix 資料庫與論文整理:https://drive.google.com/file/d/1gNidzKSRidULIeADj7fdbrtVUTJSjzbk/view?usp=sharing