使用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)
在公式(1)中,x和y是IIR滤波器的系数,“a”是起始角,而“b”是增量角。为了找出两个系数的值,重新整理并简化公式1,如公式2所示。
(2)
通过代入下列三角恒等式,继续扩展公式2:
(3)
我们得出:
重新整理:
(5)
为了确保此式对于所有n都成立,必须让括号中的两个表达式满足:
(6)
当求解时,这就能得出用于递归IIR滤波器的系数:
(7)
将它代回到原始公式中,得出:
(8)
重新整理:
(9)
代入样品值Y[n]=sin(a+nb),得出:
(10)
由于系数之一等于-1,所以在每个步距角增量处的计算就只需要涉及两个以前计算结果的一个乘法和一个减法(假设系数已事先计算出来)。在运行了上面的公式后,y[-1]值被移入到y[-2]变量中,并且将计算出的y[n]值移入到y[-1]变量中,以准备在下一个步距角处的计算。这促进了Cortex-M3非常有效的运行。
Goertzel初始化
为了让Goertzel能够作为振荡器发挥作用,y[-1]和y[-2]值必须要进行初始化。如果我们设y[-1]=0,那么y[-2]应该具有在零交叉之前的一个增量正弦值的值,或者:
(11)
系数也必须在下面的公式12中计算。
为了将Goertzel算法作为音调探测器使用,y[-1]和y[-2]二者都应该被初始化到“0”。然后,输入应该加入到计算中。在特定数量的样品之后,输入在探测频率处的振幅就能够从下列公式来计算:
存在关于此式的优化形式,以简化数学运算,但这里只是为了解释原理。为了将它用作连续的音调探测器,在执行了此计算之后,y[-1]和y[-2]应该再次设定为零,然后进行下一个采集和探测顺序。
代码实施-音频报警合成
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个谐波。
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_0.jpg)
图1 双抽头IIR滤波器
Goertzel算法
最有用的递归方法之一是Goertzel算法;图1显示了一种简单的双抽头IIR滤波器。这是非常有用的算法,除了作为正弦波发生器以外,它还能被用作窄带音调探测器。通过分析作为振荡器的算法,随着以固定的跨度增大角度,我们想要能够计算该角度的正弦值。假设能够从正弦级数中的两个以前的增量值来计算角度的正弦值,那么针对图1,就能写出公式(1):
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_1.jpg)
在公式(1)中,x和y是IIR滤波器的系数,“a”是起始角,而“b”是增量角。为了找出两个系数的值,重新整理并简化公式1,如公式2所示。
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_2.jpg)
通过代入下列三角恒等式,继续扩展公式2:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_3.jpg)
我们得出:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_4.jpg)
重新整理:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_5.jpg)
为了确保此式对于所有n都成立,必须让括号中的两个表达式满足:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_6.jpg)
当求解时,这就能得出用于递归IIR滤波器的系数:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_7.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_8.jpg)
将它代回到原始公式中,得出:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_9.jpg)
重新整理:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_10.jpg)
代入样品值Y[n]=sin(a+nb),得出:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_11.jpg)
由于系数之一等于-1,所以在每个步距角增量处的计算就只需要涉及两个以前计算结果的一个乘法和一个减法(假设系数已事先计算出来)。在运行了上面的公式后,y[-1]值被移入到y[-2]变量中,并且将计算出的y[n]值移入到y[-1]变量中,以准备在下一个步距角处的计算。这促进了Cortex-M3非常有效的运行。
Goertzel初始化
为了让Goertzel能够作为振荡器发挥作用,y[-1]和y[-2]值必须要进行初始化。如果我们设y[-1]=0,那么y[-2]应该具有在零交叉之前的一个增量正弦值的值,或者:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_12.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_13.jpg)
系数也必须在下面的公式12中计算。
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_14.jpg)
为了将Goertzel算法作为音调探测器使用,y[-1]和y[-2]二者都应该被初始化到“0”。然后,输入应该加入到计算中。在特定数量的样品之后,输入在探测频率处的振幅就能够从下列公式来计算:
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_15.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_16.jpg)
![](http://m.amcfsurvey.com/editerupload/fetch/20131113/188350_1_17.jpg)
存在关于此式的优化形式,以简化数学运算,但这里只是为了解释原理。为了将它用作连续的音调探测器,在执行了此计算之后,y[-1]和y[-2]应该再次设定为零,然后进行下一个采集和探测顺序。
代码实施-音频报警合成
![](http://m.amcfsurvey.com/webstorage/images/2014/m/wx.png)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码