使用LPC1700的IEC 60601-1-8音頻警報(bào)發(fā)生器
IEC(國(guó)際電工委員會(huì))提供了第一個(gè)關(guān)于醫(yī)療設(shè)備音頻和視頻報(bào)警的重點(diǎn)標(biāo)準(zhǔn),即IEC60601-1-8。通過(guò)將重點(diǎn)聚焦于資料的音頻警告部分,IEC60601-1-8標(biāo)準(zhǔn)要求,必須使特定的旋律對(duì)應(yīng)于特定的生理機(jī)能。這樣就能保證報(bào)警的數(shù)量是有限的,而不會(huì)在不同的制造商之間隨意變化。它也將報(bào)警的數(shù)量限制在8個(gè),并使用了每一個(gè)的告誡和緊急形式。緊急(高級(jí)優(yōu)先權(quán))形式使用重復(fù)的五音符旋律。告誡(中等優(yōu)先權(quán))報(bào)警使用高級(jí)優(yōu)先權(quán)形式的前三個(gè)音符,但不重復(fù)。將察覺(jué)的緊急程度設(shè)計(jì)到聲音中的某些原理已經(jīng)被應(yīng)用到這些信號(hào)中;例如,中等優(yōu)先權(quán)音調(diào)比高級(jí)優(yōu)先權(quán)音調(diào)更緩慢的上升和下降時(shí)間,以及用于高級(jí)優(yōu)先權(quán)報(bào)警的比較快的節(jié)拍。標(biāo)準(zhǔn)中也提供了一種任選的低級(jí)優(yōu)先權(quán)報(bào)警音調(diào);該聲音只有兩個(gè)音符。
IEC60601-1-8音頻報(bào)警標(biāo)準(zhǔn)提供了富有和聲的音調(diào),以便使它們?nèi)菀锥ㄎ?、并能防止屏蔽的干擾。范疇與對(duì)應(yīng)旋律的數(shù)量都有限,從而能獲得容易掌握的不同報(bào)警順序。另外,報(bào)警的優(yōu)先權(quán)決定了報(bào)警中音符的數(shù)量,以及音符順序的動(dòng)態(tài)特征。這使得人們?nèi)菀状_定報(bào)警的緊急程度。這樣,IEC60601-1-8標(biāo)準(zhǔn)解決了許多以前報(bào)警的限制因素,而且將有助于改善患者的安全性。
以算法形式生成IEC60601-1-8報(bào)警
當(dāng)前許多的IEC60601-1-8實(shí)施方案都是回放儲(chǔ)存在存儲(chǔ)器中的錄音形式的報(bào)警。其缺點(diǎn)是,它需要占用大量的存儲(chǔ)器空間來(lái)儲(chǔ)存文件,以及程序空間來(lái)控制回放。與之相比,以算法形式生成報(bào)警在存儲(chǔ)器利用方面是一種非常有效的方法,而且允許有相當(dāng)大的靈活性,能夠在滿(mǎn)足IEC60601-1-8技術(shù)規(guī)格的同時(shí)對(duì)音符進(jìn)行自定義。
芯片上要求的功能資源
為了在芯片上合成報(bào)警音調(diào),需要在固件中實(shí)施下列功能:
定時(shí)信號(hào)發(fā)生器-這提供定時(shí)基準(zhǔn),以便以數(shù)字形式構(gòu)建報(bào)警音調(diào),從而有效地設(shè)定內(nèi)部樣品速率和DAC輸出速率。這還提供用于音符定序器和包絡(luò)發(fā)生器的時(shí)間基準(zhǔn)。
包絡(luò)發(fā)生器-這控制音符脈沖的上升時(shí)間、下降時(shí)間和振幅。音符的上升和下降時(shí)間也是報(bào)警優(yōu)先權(quán)的函數(shù)。
音符定序器-基于報(bào)警的類(lèi)型和優(yōu)先權(quán)等級(jí),以正確的節(jié)拍按順序通過(guò)正確的音符。
音符發(fā)生器-這生成組合起來(lái)形成基本音符與諧波的多重正弦波音調(diào);由這些基本音符和諧波構(gòu)成警告音符。
關(guān)于演示模式,通過(guò)UART1和終端程序提供一個(gè)菜單驅(qū)動(dòng)的用戶(hù)接口。這包括不同的菜單、一個(gè)串行端口驅(qū)動(dòng)程序、和一個(gè)簡(jiǎn)單的命令處理程序。
定時(shí)信號(hào)發(fā)生器
它利用芯片上的定時(shí)器來(lái)設(shè)定用于算法音調(diào)發(fā)生器的采樣速率/DAC輸出速率。針對(duì)25 ksps的DAC輸出速率,定時(shí)器被設(shè)置為每隔40μs生成一個(gè)中斷。這被選擇為處于音頻范圍上方,而且遠(yuǎn)高于Nyquist(尼奎斯特)頻率,以允許在DAC上采用低成本的濾波器。中斷服務(wù)程序中的軟件計(jì)時(shí)器也提供1 ms的超時(shí)。如下文所述,它被用于包絡(luò)控制功能和音符定序器。
包絡(luò)發(fā)生器
包絡(luò)發(fā)生器控制正在生成的音調(diào)的動(dòng)態(tài)音量。由于IEC技術(shù)規(guī)格包括音調(diào)的上升和下降時(shí)間,所以生成一個(gè)基于時(shí)間的變量。當(dāng)音符打開(kāi)時(shí),包絡(luò)變量的值以受控的速率從0增大到最大設(shè)定水平。當(dāng)音符關(guān)閉時(shí),這也會(huì)同樣發(fā)生;音量將以受控的速率減小,直到它達(dá)到0為止。上升和下降時(shí)間是可以編程的;而且,與高級(jí)優(yōu)先權(quán)音調(diào)相比,中等和低級(jí)優(yōu)先權(quán)音調(diào)具有較慢的上升/下降時(shí)間。包絡(luò)發(fā)生器使用1 ms超時(shí)作為其定時(shí)基準(zhǔn)。
音符定序器
作為報(bào)警之分類(lèi)和優(yōu)先權(quán)的函數(shù),IEC 60601-1-8標(biāo)準(zhǔn)規(guī)定了相對(duì)音符順序和音調(diào)的瞬時(shí)特征。音符定序器輸出具有正確持續(xù)時(shí)間和間隔的音調(diào),以滿(mǎn)足給定優(yōu)先權(quán)的報(bào)警的瞬時(shí)特征。對(duì)于高級(jí)優(yōu)先權(quán)報(bào)警,其順序被規(guī)定為一種5音符順序;它重復(fù)一次,所以總共有10個(gè)音符。中等優(yōu)先權(quán)報(bào)警是一種3音符順序,但不重復(fù)。關(guān)于給定報(bào)警類(lèi)型的三音符順序與同類(lèi)高級(jí)優(yōu)先權(quán)順序的前三個(gè)音符相同,以便更加容易地掌握?qǐng)?bào)警。高級(jí)優(yōu)先權(quán)報(bào)警的節(jié)拍快于中等優(yōu)先權(quán)報(bào)警。不同數(shù)量的音符和節(jié)拍差異能夠容易地區(qū)分報(bào)警的優(yōu)先權(quán)。
音符發(fā)生器
為了容易地符合標(biāo)準(zhǔn),基本音符和4個(gè)諧波將作為單獨(dú)的正弦波而生成,然后由數(shù)字方式組合起來(lái)。在芯片上生成正弦波的方法有很多種:包括正弦表查找、數(shù)學(xué)庫(kù)算法、泰勒級(jí)數(shù)展開(kāi)和遞歸振蕩器。遞歸振蕩器是一種具有合適系數(shù)的IIR濾波器結(jié)構(gòu),一旦正確地初始化,就能實(shí)現(xiàn)振蕩。由于這是比較有效的方法之一,而且具有非常低的失真,因此遞歸振蕩器將被用于生成每個(gè)音符所需要的基本音符和4個(gè)諧波。
圖1 雙抽頭IIR濾波器
Goertzel算法
最有用的遞歸方法之一是Goertzel算法;圖1顯示了一種簡(jiǎn)單的雙抽頭IIR濾波器。這是非常有用的算法,除了作為正弦波發(fā)生器以外,它還能被用作窄帶音調(diào)探測(cè)器。通過(guò)分析作為振蕩器的算法,隨著以固定的跨度增大角度,我們想要能夠計(jì)算該角度的正弦值。假設(shè)能夠從正弦級(jí)數(shù)中的兩個(gè)以前的增量值來(lái)計(jì)算角度的正弦值,那么針對(duì)圖1,就能寫(xiě)出公式(1):
(1)
在公式(1)中,x和y是IIR濾波器的系數(shù),“a”是起始角,而“b”是增量角。為了找出兩個(gè)系數(shù)的值,重新整理并簡(jiǎn)化公式1,如公式2所示。
(2)
通過(guò)代入下列三角恒等式,繼續(xù)擴(kuò)展公式2:
(3)
我們得出:
重新整理:
(5)
為了確保此式對(duì)于所有n都成立,必須讓括號(hào)中的兩個(gè)表達(dá)式滿(mǎn)足:
(6)
當(dāng)求解時(shí),這就能得出用于遞歸IIR濾波器的系數(shù):
(7)
將它代回到原始公式中,得出:
(8)
重新整理:
(9)
代入樣品值Y[n]=sin(a+nb),得出:
(10)
由于系數(shù)之一等于-1,所以在每個(gè)步距角增量處的計(jì)算就只需要涉及兩個(gè)以前計(jì)算結(jié)果的一個(gè)乘法和一個(gè)減法(假設(shè)系數(shù)已事先計(jì)算出來(lái))。在運(yùn)行了上面的公式后,y[-1]值被移入到y(tǒng)[-2]變量中,并且將計(jì)算出的y[n]值移入到y(tǒng)[-1]變量中,以準(zhǔn)備在下一個(gè)步距角處的計(jì)算。這促進(jìn)了Cortex-M3非常有效的運(yùn)行。
Goertzel初始化
為了讓Goertzel能夠作為振蕩器發(fā)揮作用,y[-1]和y[-2]值必須要進(jìn)行初始化。如果我們?cè)O(shè)y[-1]=0,那么y[-2]應(yīng)該具有在零交叉之前的一個(gè)增量正弦值的值,或者:
(11)
系數(shù)也必須在下面的公式12中計(jì)算。
為了將Goertzel算法作為音調(diào)探測(cè)器使用,y[-1]和y[-2]二者都應(yīng)該被初始化到“0”。然后,輸入應(yīng)該加入到計(jì)算中。在特定數(shù)量的樣品之后,輸入在探測(cè)頻率處的振幅就能夠從下列公式來(lái)計(jì)算:
存在關(guān)于此式的優(yōu)化形式,以簡(jiǎn)化數(shù)學(xué)運(yùn)算,但這里只是為了解釋原理。為了將它用作連續(xù)的音調(diào)探測(cè)器,在執(zhí)行了此計(jì)算之后,y[-1]和y[-2]應(yīng)該再次設(shè)定為零,然后進(jìn)行下一個(gè)采集和探測(cè)順序。
代碼實(shí)施-音頻報(bào)警合成
評(píng)論