# 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
流程圖

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
> 電腦要用大量的資料才能學習一件小事情
> 人腦可以用很少的訊息聯想到豐富的東西


整個EMD分解過程完成後,原始訊號x(t)可以表示成n個IMF分量與一個平均趨勢(mean trend)分量r(t)的組合,即
### Hilbert transform and instantaneous frequencies
分別對每個IMF進行Hilbert轉換,可以將原始訊號表達成Real Part的形式,即
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
有六種手勢要分類

In Matlab
```
classificationLearner
```
### Result

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