使用LPC1700的IEC 60601-1-8音頻警報發生器
IEC(國際電工委員會)提供了第一個關于醫療設備音頻和視頻報警的重點標準,即IEC60601-1-8。通過將重點聚焦于資料的音頻警告部分,IEC60601-1-8標準要求,必須使特定的旋律對應于特定的生理機能。這樣就能保證報警的數量是有限的,而不會在不同的制造商之間隨意變化。它也將報警的數量限制在8個,并使用了每一個的告誡和緊急形式。緊急(高級優先權)形式使用重復的五音符旋律。告誡(中等優先權)報警使用高級優先權形式的前三個音符,但不重復。將察覺的緊急程度設計到聲音中的某些原理已經被應用到這些信號中;例如,中等優先權音調比高級優先權音調更緩慢的上升和下降時間,以及用于高級優先權報警的比較快的節拍。標準中也提供了一種任選的低級優先權報警音調;該聲音只有兩個音符。
IEC60601-1-8音頻報警標準提供了富有和聲的音調,以便使它們容易定位、并能防止屏蔽的干擾。范疇與對應旋律的數量都有限,從而能獲得容易掌握的不同報警順序。另外,報警的優先權決定了報警中音符的數量,以及音符順序的動態特征。這使得人們容易確定報警的緊急程度。這樣,IEC60601-1-8標準解決了許多以前報警的限制因素,而且將有助于改善患者的安全性。
以算法形式生成IEC60601-1-8報警
當前許多的IEC60601-1-8實施方案都是回放儲存在存儲器中的錄音形式的報警。其缺點是,它需要占用大量的存儲器空間來儲存文件,以及程序空間來控制回放。與之相比,以算法形式生成報警在存儲器利用方面是一種非常有效的方法,而且允許有相當大的靈活性,能夠在滿足IEC60601-1-8技術規格的同時對音符進行自定義。
芯片上要求的功能資源
為了在芯片上合成報警音調,需要在固件中實施下列功能:
定時信號發生器-這提供定時基準,以便以數字形式構建報警音調,從而有效地設定內部樣品速率和DAC輸出速率。這還提供用于音符定序器和包絡發生器的時間基準。
包絡發生器-這控制音符脈沖的上升時間、下降時間和振幅。音符的上升和下降時間也是報警優先權的函數。
音符定序器-基于報警的類型和優先權等級,以正確的節拍按順序通過正確的音符。
音符發生器-這生成組合起來形成基本音符與諧波的多重正弦波音調;由這些基本音符和諧波構成警告音符。
關于演示模式,通過UART1和終端程序提供一個菜單驅動的用戶接口。這包括不同的菜單、一個串行端口驅動程序、和一個簡單的命令處理程序。
定時信號發生器
它利用芯片上的定時器來設定用于算法音調發生器的采樣速率/DAC輸出速率。針對25 ksps的DAC輸出速率,定時器被設置為每隔40μs生成一個中斷。這被選擇為處于音頻范圍上方,而且遠高于Nyquist(尼奎斯特)頻率,以允許在DAC上采用低成本的濾波器。中斷服務程序中的軟件計時器也提供1 ms的超時。如下文所述,它被用于包絡控制功能和音符定序器。
包絡發生器
包絡發生器控制正在生成的音調的動態音量。由于IEC技術規格包括音調的上升和下降時間,所以生成一個基于時間的變量。當音符打開時,包絡變量的值以受控的速率從0增大到最大設定水平。當音符關閉時,這也會同樣發生;音量將以受控的速率減小,直到它達到0為止。上升和下降時間是可以編程的;而且,與高級優先權音調相比,中等和低級優先權音調具有較慢的上升/下降時間。包絡發生器使用1 ms超時作為其定時基準。
音符定序器
作為報警之分類和優先權的函數,IEC 60601-1-8標準規定了相對音符順序和音調的瞬時特征。音符定序器輸出具有正確持續時間和間隔的音調,以滿足給定優先權的報警的瞬時特征。對于高級優先權報警,其順序被規定為一種5音符順序;它重復一次,所以總共有10個音符。中等優先權報警是一種3音符順序,但不重復。關于給定報警類型的三音符順序與同類高級優先權順序的前三個音符相同,以便更加容易地掌握報警。高級優先權報警的節拍快于中等優先權報警。不同數量的音符和節拍差異能夠容易地區分報警的優先權。
音符發生器
為了容易地符合標準,基本音符和4個諧波將作為單獨的正弦波而生成,然后由數字方式組合起來。在芯片上生成正弦波的方法有很多種:包括正弦表查找、數學庫算法、泰勒級數展開和遞歸振蕩器。遞歸振蕩器是一種具有合適系數的IIR濾波器結構,一旦正確地初始化,就能實現振蕩。由于這是比較有效的方法之一,而且具有非常低的失真,因此遞歸振蕩器將被用于生成每個音符所需要的基本音符和4個諧波。

圖1 雙抽頭IIR濾波器
Goertzel算法
最有用的遞歸方法之一是Goertzel算法;圖1顯示了一種簡單的雙抽頭IIR濾波器。這是非常有用的算法,除了作為正弦波發生器以外,它還能被用作窄帶音調探測器。通過分析作為振蕩器的算法,隨著以固定的跨度增大角度,我們想要能夠計算該角度的正弦值。假設能夠從正弦級數中的兩個以前的增量值來計算角度的正弦值,那么針對圖1,就能寫出公式(1):

在公式(1)中,x和y是IIR濾波器的系數,“a”是起始角,而“b”是增量角。為了找出兩個系數的值,重新整理并簡化公式1,如公式2所示。

通過代入下列三角恒等式,繼續擴展公式2:

我們得出:

重新整理:

為了確保此式對于所有n都成立,必須讓括號中的兩個表達式滿足:

當求解時,這就能得出用于遞歸IIR濾波器的系數:


將它代回到原始公式中,得出:

重新整理:

代入樣品值Y[n]=sin(a+nb),得出:

由于系數之一等于-1,所以在每個步距角增量處的計算就只需要涉及兩個以前計算結果的一個乘法和一個減法(假設系數已事先計算出來)。在運行了上面的公式后,y[-1]值被移入到y[-2]變量中,并且將計算出的y[n]值移入到y[-1]變量中,以準備在下一個步距角處的計算。這促進了Cortex-M3非常有效的運行。
Goertzel初始化
為了讓Goertzel能夠作為振蕩器發揮作用,y[-1]和y[-2]值必須要進行初始化。如果我們設y[-1]=0,那么y[-2]應該具有在零交叉之前的一個增量正弦值的值,或者:


系數也必須在下面的公式12中計算。

為了將Goertzel算法作為音調探測器使用,y[-1]和y[-2]二者都應該被初始化到“0”。然后,輸入應該加入到計算中。在特定數量的樣品之后,輸入在探測頻率處的振幅就能夠從下列公式來計算:



存在關于此式的優化形式,以簡化數學運算,但這里只是為了解釋原理。為了將它用作連續的音調探測器,在執行了此計算之后,y[-1]和y[-2]應該再次設定為零,然后進行下一個采集和探測順序。
代碼實施-音頻報警合成
評論