//Logo Image
作者:陳明周 (2003-07-12);推薦:徐業良(2003-07-12)
附註:本文為九十三學年度元智大學機械工程研究所陳明周碩士論文「鼾聲監測裝置之設計與製作」第四章。

第四章 鼾聲監測裝置軟體設計

本研究鼾聲監測裝置中,鼾聲經過訊號聲音感測系統及濾波系統後,輸入PIC16f877進行A/D轉換,之後以鼾聲判斷程式進行辨別及輸出。本章的重點就在介紹鼾聲判斷程式之設計。

4.1 鼾聲監測裝置之使用說明與軟體程式流程

4.1為本研究鼾聲監測裝置之操作與顯示介面,外觀正面為一LCD顯示幕、四段旋鈕開關、及調整時間之增加數字按鈕與切換項目按鈕,側面則有一睡眠模式開關。

4.1 鼾聲監測裝置之控制介面

平時將睡眠模式開關調整在「一般模式」,此時四段旋鈕開關若在“normal”的位置,LCD顯示器上會顯示時間、日期等一般資訊;將旋鈕開關旋至“report”的位置,即可查閱前一次睡眠的鼾聲報告;將旋鈕開關旋至“time_set”或是“alarm_set”的位置,即可對系統時間以及鬧鐘時間進行調整,調整的方式為以增加數字按鈕增加數字,以切換項目按鈕切換欲調整的項目。

準備入睡時可將睡眠模式開關調至「睡眠模式」,旋鈕開關調至“normal”的位置,便會啟動監測鼾聲以及睡眠呼吸中止症鼾聲特徵模式,並且將相關資訊記錄於MMC卡中。當使用者起床後將睡眠模式開關再調回「一般模式」,鼾聲監測裝置便會計算使用時間,若使用者遲遲未將睡眠模式開關調回「一般模式」,則對鼾聲的監測會自動於啟動8小時後停止。

在「睡眠模式」下若將旋鈕開關調至“report”“alarm_set”、或“time_set”位置,亦可進行查閱報告及鬧鐘或時間調整,但此時監測的動作中斷,待旋鈕開關調回“normal”位置後才會繼續。

若是使用者搭配使用睡眠監測系統之BioMat,則可將睡眠模式開關調至「BioMat模式」,此時鼾聲監測裝置的監測動作將由BioMat控制啟動與停止,不需使用者手動控制。

4.2為本鼾聲監測裝置之軟體程式流程,程式區分為“Sleep Mode”“Normal Mode”“Report Mode”“Alarm_set Mode”、與“Time_set Mode”5個副程式,由睡眠模式開關與旋鈕開關之位置進入對應的副程式。因此本鼾聲監測裝置之內部程式除了對鼾聲及睡眠呼吸中止症模式特徵進行判斷,還同時整合控制介面、資料顯示、時鐘設定等功能。

4.2 鼾聲判斷程式運作流程圖

如圖4.2,監測裝置開機運作後,會對睡眠模式開關(程式中稱為“sleep_switch”)以及四段旋鈕開關的位置進行檢查,若睡眠模式開關在「睡眠模式」的位置且四段旋旋鈕開關在“normal”的位置,則進入“Sleep Mode”副程式開始對鼾聲與睡眠呼吸中止症鼾聲模式特徵進行檢查;若睡眠模式開關在「一般模式」的位置且四段旋旋鈕開關在“normal”的位置,則進入“Normal Mode”副程式,於LCD顯示器上顯示時間、日期等一般資訊。接著不論是睡眠模式開關在睡眠模式或一般模式,都可以隨時由調整四段旋鈕開關選擇進入“Report Mode”副程式查閱鼾聲報告,或是進入“Alarm_set Mode”“Time_set Mode”副程式調整鬧鐘與系統時間。相關程式功能整理如表4.1,以下針對各模組進行介紹,原始程式請參考附錄G

4.1 相關程式功能整理

 

一般模式

睡眠模式

Normal Mode

顯示日期、時間

顯示時間、鼾聲次數、符合睡眠呼吸中止症鼾聲模式特徵次數

Report Mode

顯示前次鼾聲報告

顯示即時鼾聲報告

Alarm_set Mode

調整鬧鐘時間

調整鬧鐘時間

Time_set Mode

調整系統時間

調整系統時間(紀錄歸零)

4.2 “Normal Mode”副程式

睡眠模式開關在一般模式、旋鈕開關在“normal”位置時,執行“Normal Mode”副程式。此時鼾聲監測裝置的功能近似於一般鬧鐘,於16×2LCD面面板顯示如圖4.3的時間、日期資訊。“Normal Mode”副程式流程如圖4.4,先由DS1302晶片取得即時時間,若與鬧鐘設定時間相同則Beeper發出聲響,若與鬧鐘設定時間不同則將時間、日期顯示於LCD。最後檢查睡眠模式開關腳位是否受到調整,是則跳出“Normal Mode”副程式,否則繼續反覆執行“Normal Mode”副程式。

4.3 執行“Normal Mode”副程式時顯示面板資訊

4.4 “Normal Mode”副程式執行流程

4.3 “Report Mode”副程式

不論睡眠模式開關的位置,旋鈕開關旋至“report”位置,即執行“Report Mode”副程式,此時LCD面板顯示如圖4.5所示,顯示訊息包括有打鼾嚴重程度、呼吸中止症可能性、平均每小時打鼾次數、以及平均每小時符合呼吸睡眠中止症模式特徵次數,為前一次進入睡眠模式所紀錄的數據資料。圖4.6“Report Mode”副程式的流程圖,其中打鼾嚴重程度分級方式以及呼吸中止症可能性的認定方式說明如下。

4.5 執行“Report Mode”副程式時顯示面板資訊

4.6 “Report Mode”副程式執行流程

(1)   鼾聲嚴重程度分級方式

本研究鼾聲監測裝置執行“Report Mode”副程式時,顯示面板會輸出每小時鼾聲次數,計算方式為總鼾聲次數所除以第一次與最後一次打鼾的間隔小時(而非使用時間),供使用者瞭解前晚睡眠鼾聲嚴重程度。

然而一般人對每小時鼾聲次數對應的鼾聲嚴重程度可能並無具體概念。一般人平均每分鐘呼吸16次,一小時的呼吸次數即為960次,假設這960次的呼吸都伴隨著打鼾,則每小時的最多可能打鼾次數即為960次。本研究鼾聲監測裝置即依據每小時鼾聲次數之比例,將鼾聲嚴重程度分為[none][slight][medium][serious]四種等級顯示於面版上:

l          [none]:每小時鼾聲次數小於最多可能次數的10%,即每小時鼾聲少於96次。

l          [slight]:每小時鼾聲次數在最多可能次數的10%~20%之間,即每小時鼾聲在96~288之間。

l          [medium]:每小時鼾聲次數在最多可能次數的20%~40%之間,即每小時鼾聲在288~480之間。

l          [serious]:每小時鼾聲次數大於最多可能次數的40%,即每小時鼾聲超過480次。

(2)   睡眠呼吸中止症可能性分級方式

睡眠呼吸中止症的在醫學診斷上的定義為「每小時的睡眠中有5次或以上超過10秒的阻塞性呼吸中止事件,或每7小時睡眠有30次的事件」。根據上述定義,本研究鼾聲監測裝置依所偵測睡面呼吸中止症鼾聲模式特徵發生次數,對睡眠呼吸中止症可能性的判斷定分為[Unlike][Maybe][Yes]三種情形

l      [Unlike]:每小時5次之內且整夜睡眠在30次之內。

l      [Maybe]:每小時5~10次之間或整夜睡眠在30~50次之間。

l      [Yes]:每小時10次以上且整夜睡眠在50次以上。

其中每小時發生次數亦是由總數除以第一次與最後一次打鼾的間隔小時。由於本鼾聲監測裝置所量測的是鼾聲次數以及符合睡眠呼吸中止鼾聲模式特徵的次數,此處對睡眠呼吸中止症可能性的判斷亦僅提供使用者參考,不作醫療診斷上的用途。

4.4 “Alarm_set Mode”副程式及“Time_set Mode”副程式

不論睡眠模式開關的位置,旋鈕開關旋至“alarm_set”位置,即執行“Alarm_set Mode”副程式,旋至“time_set”位置,即執行“Time_set Mode”副程式。

程式進入“alarm_set”模式後,會依照「時à分」的順序供使用者調整鬧鐘時間。進入“time_set”模式後,會依照「時àààà日」的順序,供使用者調整至正確時間。以下以“time_set”為例,說明調整程式內部運作的流程。

4.7為進入“time_set”模式後的程式流程,首先使用一個while迴圈將程式停留在調整“時”的狀態,按「切換項目按鈕(change)」即可往下一個調整項目,最後會再回到調整“時”。程式於切換之間必需延遲300msec,因為按鈕動作並非一瞬間完成,若沒有延遲會導致程式以高速不斷往下一個項目切換而無法控制。調整完畢後將旋鈕開關切離“time_set”模式即可。

4.8乃放大圖4.5紅色虛框的部份,以詳細說明對程式是如何對時間進行調整。首先在顯示器中顯示去掉小時的完整時間,延遲400msec後再顯示包含小時的完整時間再延遲400msec,如此即可製造閃爍的效果,使用者可以清楚得知現在處於調整小時的狀態。接著按下「增加數字(add)」按鈕,遞增代表小時的變數(hour),每次遞增當中必需延遲500msec以避免增加過於快速而無法控制。達到正確的時間後使用「切換項目(change)」按鈕往下切換,再以相同方法調整分、年、月、日。“Alarm_set Mode”中對鬧鐘時間的調整方式上述完全相同,不另外說明。

4.7 Time_set模式流程圖(省略年、月、日)

4.8 調整時間的細部流程圖

4.5 “Sleep Mode”副程式

對於鼾聲以及睡眠呼吸中止症模式特徵的判斷集中於“Sleep Mode”副程式,是整個軟體程式最重要的部份。睡眠模式開關在睡眠模式、旋鈕開關在“normal”位置時,執行“Sleep Mode”副程式,對鼾聲以及睡眠呼吸中止症特徵模式進行判斷。

執行“Sleep Mode”副程式時面板顯示資訊如圖4.9,顯示Vsum、使用時間、實際日期、打鼾次數、以及符合睡眠呼吸中止症鼾聲模式特徵的次數。使用時間的是由使用者將睡眠模式開關切至睡眠模式開始計算,切回一般模式後停止,超過8小時則自動停止,採用小數點1位小時的表示方式以避免與上行的時間混淆;打鼾次數以及符合睡眠呼吸中止症鼾聲模式特徵的次數都會隨著偵測而增加;Vsum的定義詳細說明如後,Vsum的值會隨周圍音量大小而變化,可增加面板的動態效果。

4.9 睡眠模式面板資訊

4.5.1        訊號前處理

本研究鼾聲監測裝置接收鼾聲訊號後首先進行「前處理」,將A/D轉換後的電壓數位訊號進行平滑化。圖4.10為將4次鼾聲的電壓訊號以1.2kHz的擷取頻率記錄,以下以此訊號前處理的流程。

4.10 PIC紀錄的鼾聲波形(1.2kHz)

聲波訊號的特性是會依一個電壓準位做上下振盪,但這樣的訊號形態不易處理,因此第一步先將電壓準位以程式的方式歸零,所採用的方法為將A/D10筆計算一次平均,可以得到上下振盪的中心線,如圖4.11所示,再將新進的值與中心線相減,即可得到如圖4.12準位歸零後的波形,此時的擷取頻率仍為1.2kHz

4.11 電壓訊號(藍)與中心線(紅)

此時的訊號乃是上下振盪,但向下的資料點對鼾聲判斷並沒有幫助,因此採用尋找區域最大值的方式來去掉不必要的訊號,也就是每10個資料點中比較出一個最大值來代表這10個點,如此就可將向下的點去除,圖4.12的波形也就簡化成如圖4.13所示,此時的運算頻率為120Hz。圖中播放的鼾聲音量約為75分貝,圖中鼾聲所造成的最大電壓為300mV,而無聲的電壓為75mV,兩者僅相差225mV,若鼾聲的音量再更小,可能就會造成判斷上的困難,因此使用10筆做一次總合也就是類似積分的方式,來強化訊號的能量,拉大有聲與無聲時的差距,以利於判斷,波形成為如圖4.14所示,此時的運算頻率為12Hz。然而圖4.14的波形還是有過多的起伏,因此再使用10點做平均的方式進行平滑化,即成為如圖4.15的紅色平滑曲線。

4.12 將電壓準位歸零

4.13 取每10個的最大值(120Hz)

4.14 10點做一次總合(12Hz)

4.15 10點做平均(紅線)

鼾聲訊號經過前處理後圖4.13~15Y軸定義為“Vsum,代表該時間內聲音能量大小。在鼾聲判斷程式中以一個名為“getVsum()”的副程式專門計算Vsum,圖4.16getVsum()的副程式流程。

4.16 前處理副程式getVsum();流程圖

訊號成為如圖4.15的狀態後,鼾聲由複雜的上下振盪成為平滑的連續遞增與遞減訊號,此時程式每秒產生12個資料點。如第二章中鼾聲判斷的描述,我們定義若訊號連續6個資料點(約0.5秒)均為遞增表示鼾聲開始,將Tduration歸零;連續連續9個資料點(約0.75秒)均為遞減表示鼾聲結束,紀錄此時的Tduration即為鼾聲持續時間,並且將Tinterval歸零;偵測到再一次連續6個資料點均為遞增,紀錄此時的Tinterval即為鼾聲間隔時間。如此即可得到鼾聲判斷中所需的鼾聲持續時間及鼾聲間隔時間,如圖4.17所示。再配合第二章中Tduration以及Tinterval的時間特性,即可進行鼾聲判斷。圖4.18“Sleep Mode”模式的流程圖。

4.17 鼾聲判斷模式

4.18 “Sleep Mode”模式流程圖

4.5.2 MMC記憶卡資料儲存與讀取

“Sleep Mode”模式中,鼾聲判斷程式除了偵測鼾聲,同時也將資料儲存於MMC卡中,儲存項目包括有開始的時間、日期,以及運作中每隔1分鐘就會寫入該分鐘內所累計的鼾聲次數以及符合睡眠呼吸中止症模式特徵次數,還有結束的時間、日期。

MMC卡將依一年365天劃分為365個檔案,鼾聲判斷程式會依照進入睡眠模式的日期將資料存入MMC卡內對應的檔案。本鼾聲監測裝置的歷史資料的最大保留量即為1年。

MMC卡的資料可由一個專門的Matlab撰寫的「歷史資料查詢程式」讀取,程式的一開始會詢問使用者欲查詢的日期,接著就可以列出如當日的使用時間始末、鼾聲、睡眠呼吸中止症模式特徵次數、打鼾嚴重程度、以及呼吸中止症可能性。「歷史資料查詢程式」詳列於附錄H