{%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波的波峰大小較其他更大,因此此方法便可以使其他不相干的雜訊消除,窗口也可以避免訊號飄導致閾值無法套用的問題