---
# System prepended metadata

title: Biomedical Signal Processing Final Project (QRS Complex Detection)
tags: [R, signal processing]

---

{%hackmd @themes/orangeheart %}

# QRS Complex Detection

建立時間：20/06/08 \
作者：Aaron Huang

下面會依據題目 Procedures 的要求列出結果，有關 R 的原始碼可以參考我的 [Github gist](https://gist.github.com/aaronhuang1005/c047bda4cd1a5f4829eb234540244bd8)

## Spectrum estimtion

**a.** 將 1000Hz ECG訊號取出一次完整的心電圖：

![image](https://hackmd.io/_uploads/BJe8KyDZIA.png)

**b.** 將訊號前後補齊使訊號長度符合1024：

![image](https://hackmd.io/_uploads/SycCkDZIR.png)

**c.** 將訊號做FFT轉換並輸出頻率與相位圖：

![image](https://hackmd.io/_uploads/HJAqZvb8C.png)

![image](https://hackmd.io/_uploads/r1PjWvZ8C.png)

**d.** 將訊號長度改為2048，並再做一次FFT並輸出結果：

![image](https://hackmd.io/_uploads/r1o1GPZUR.png)

![image](https://hackmd.io/_uploads/Hy66Mw-IC.png)

![image](https://hackmd.io/_uploads/H1LAMD-IA.png)

## QRS detection

**e.** 題目給定二極點遞歸濾波器
$$y[n] = 1.56102y[n-1] - 0.64135y[n-2]+0.2008x[n] -0.2008 x[n-2]$$
並輸出頻域響應以及相位響應：

![image](https://hackmd.io/_uploads/HJsVVwb8C.png)

![image](https://hackmd.io/_uploads/BJDn4vZ8R.png)

**f.** 題目給定整數濾波器
$$y[n] = 2y[n-1] – 3y[n-2] +2y[n-3] –y[n-4] +x[n] –2x[n-12] + x[n-24$$
並輸出頻域響應以及相位響應：

![image](https://hackmd.io/_uploads/HkBaVw-L0.png)

![image](https://hackmd.io/_uploads/ryCa4P-U0.png)

**g.** 使用200Hz的ECG訊號套用上述兩個濾波器做比較，並顯示處理後的訊號：\
flirt 1
![image](https://hackmd.io/_uploads/SJiWsPWUC.png)

flirt 2
![image](https://hackmd.io/_uploads/Sk84svbLA.png)

**h.** 將濾除後的ECG與原始的ECG訊號之頻域圖做比較：\
原始訊號
![image](https://hackmd.io/_uploads/SJ7Epvb8R.png)

flirt 1
![image](https://hackmd.io/_uploads/ByIITvZIR.png)

flirt 2
![image](https://hackmd.io/_uploads/H1rwTDbI0.png)

**i.** 題目給定

$$ y[n] = 1.3(|x[n] – x[n-2]|)+ 1.1(|x[n] – 2x[n-2] + x[n-4]|$$

將此帶通微分濾波器套用至200Hz的ECG訊號，並比較其頻域圖與原始訊號之頻域圖：

![image](https://hackmd.io/_uploads/r1Q2CDbU0.png)

![image](https://hackmd.io/_uploads/SyKpCPZIC.png)

![image](https://hackmd.io/_uploads/HJVACDWL0.png)

**j.** 將上一步訊號平方

![image](https://hackmd.io/_uploads/BJWw1dbU0.png)

**k.** 將訊號以moving average 方式濾波，這裡 filter length 是 30：

![image](https://hackmd.io/_uploads/H1sexuWUC.png)

**l.** 將術數訊號加以閾值，並找出峰值位置\
==計算心跳數：55==

※這裡稍微使用距離修正峰值的標記，優化標記位置

![image](https://hackmd.io/_uploads/HyIBQObL0.png)

**m.** 將上述標記套用至原始訊號

※這裡似乎因為訊號經過處裡長度不一因此不完全會標記在R波峰上

![image](https://hackmd.io/_uploads/rySQHdZL0.png)

**n.** 設計一個自訂的帶通濾波，並比照上述方法標記波峰：

這裡使用 butterworth (low=0.05, High=100)
濾波器的頻域與相位響應

![image](https://hackmd.io/_uploads/H14ZI_ZLA.png)

![image](https://hackmd.io/_uploads/H1JzLd-I0.png)

標記的結果\
==計算心跳數：55==

![image](https://hackmd.io/_uploads/SyVVLOZ80.png)

**o.** 將1000Hz套用到上述的處理步驟：

※這裡僅處理至平均平滑化，但圖中後段仍有明顯訊號飄移因此無法加以閾值及QRS標記

![image](https://hackmd.io/_uploads/rJVuU_bU0.png)

## 討論

**a.** 請描述用於偵測 QRS 波的帶通濾波器的特性和設計標準

在200Hz的帶通濾波上(即上一段的步驟 **i.**)，訊號濾除前的在中段以及高段的原始訊號FFT仍有部分的頻率產生\
但經過濾波後，僅剩後段的低頻訊號保留，有效提升訊號的SNR

而另者的Butterworth的濾波器設計，原本預期的心電圖頻帶範圍會在0.05Hz~150Hz，但此採樣率卻只有200Hz，因此設計出來的濾波器反而偏向高通濾波器
在頻率響應圖上也確實高頻未被濾除

**b.** 噪訊是否會影響QRS波偵測的結果？哪一種方法具有更好的抗噪音能力？

噪訊確實會影響QRS的偵測，像是上述的兩種濾波結果，雖然最後計算的峰值皆為55，但明顯可以看到若僅做低頻的雜訊濾除，標記的點位仍然會有錯誤

**c.** 您能想到比使用固定閾值更好的其他檢測技術嗎？

由於訊號可能造成漂移的影響導致閾值的位置並不會全局固定，因此可以利用設定一個固定的窗口大小，以該窗口的訊號平均或是最大四分位的方式設定訂閾值\
而QRS波的波峰大小較其他更大，因此此方法便可以使其他不相干的雜訊消除，窗口也可以避免訊號飄導致閾值無法套用的問題
