假設心電圖機的採樣率為1000,也即是每秒鐘要採樣1000個資料,那麼怎樣依靠這些採樣的資料計算出心律呢?用電腦來計算心律可以發揮電腦計算能力強大的特點,就不用象人工掐脈數心律一樣,要等到一分鐘才能得到結果,用電腦來計算心律我們只要有4秒鐘的心電資料就可以了,即4000個資料就可以計算出心律了,瞬時性非常好,遠遠強過人工掐脈(人工掐脈得到的心律是一分鐘的平均心律,不是瞬時心律)。
假設我們要求的心律是x,那麼心率計算的數學公式如下(R波指的是大小為4000的緩衝區裡面,心跳波動的各個波峰):
x / (60*1000) = (R波個數 - 1) / (最後一個R波位置 - 第一個R波位置)
求出x
x = (60*1000) * (R波個數 - 1) / (最後一個R波位置 - 第一個R波位置)
這個數學公式中
(最後一個R波位置-第一個R波位置) 得到的是最後一個R波和第一個R波之間隔了多少個資料,採樣率1000的話,這個值其實就是隔了多少個毫秒。
(R波個數 - 1) 得到的是在這麼多個毫秒內,經曆多少個心跳周期。為什麼要減去一呢?假設一個延x軸傳播的二維波,兩個波峰之間是多少個波動周期呢?一個。三個波峰之間是多少個波動周期呢?兩個。 對了,所以要減去一,得到的才是心跳周期的個數。
好了,有了這個公式,再加上一個好的R波檢測演算法,再寫一個FIFO隊列作為緩衝區,在心電圖機上實現即時的心律顯示就沒問題了。
先進先出隊列的實現比較簡單,我用的是最多為4000個WORD型資料的一個隊列,如果資料達到4000,在添加資料的時候,就要把最早的一個資料擠出去了。
但是R波檢測演算法卻並不完美,電腦畢竟還是小笨笨,不如人聰明,有時候會漏檢,比如緩衝區裡有5個R波,卻只檢出4個,這個時侯算出來的心律就偏低,不準確了,雖然對瞬時心律來說,這個錯誤的心律值可能只是閃現一下,很快又正常了,但終歸不完美。我想到解決這個問題的方法,就是叫做“雙線競爭法”(自己杜撰的名字:-),因為心電圖機共15條導聯線,通常的做法是用其中訊號最強的一條胸導來計算心率。為瞭解決R波漏檢導致的心律有誤的問題,可以用兩個緩衝區,分別取兩條胸導的資料,各自計算心律,然後採用兩個心律值中較大的一個。