---
# System prepended metadata

title: sEMG for Basic Hand movements Data Set

---


# 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




