袁越阳,陈宇清,孙建国,马小林
(1.湖南城市学院机电工程学院 湖南 益阳 413099;2.苏州凯迪泰医学科技有限公司 江苏 苏州 215163;3.上海交通大学附属胸科医院 上海 徐汇区 200030)
声觉报警被广泛应用于医疗电子设备和仪器,且要求具有4 次以上泛音,以保证音频信号的空间定位,方便操作人员迅速确定报警发生源头,提高服务效率[1-2]。但目前许多医用设备所提供的声觉报警存在诸多缺陷[3-4],如对音频信号的解码编码算法比较落后,通常只是采用简单的脉冲群或重放录音来完成;缺少泛音或含有诸多噪音,不能很好的反映报警信号之间的区别或所代表的患者需求。类似这类声觉报警容易引起患者易怒、紧张和不愉快,有时甚至导致病情恶化并威胁到患者的生命[5-7]。为了获得一种更加符合患者需求的声觉报警,本文对Goertzel 算法进行简化,把它从复数领域简化到实数领域,并开发设计了基于嵌入式单片机的应用程序,以实现多泛音的正弦波声觉报警信号输出。
Goertzel 算法的基本形式是一次只计算一个频点的傅里叶分量,目前主要用于数字信号的频谱分析[8-10],如应用于DTMF 等只需有限频率点的场合。当系统只关注频带内部分频率的信号时,使用该算法会有较高的效率[11]。在以往的应用中,它也常被用于生成频率信号[12],如对于处理中低音频信号,利用Goertzel 算法能达到有效结果。本文运用简化的Goertzel 来实现医用声觉报警信号输出,并开发以嵌入式单片机LM3S9B92 为控制器的算法应用程序,实现输出基音频率为500 Hz 的正弦音频信号及其2~5 次泛音信号。
为了实现式(3)中的正弦信号,基于二阶无限脉冲响应(IIR)[14]数字滤波器原理,建立如式(4)所示的正弦信号递归算式。式中第(n−1)和第(n−2)步的计算结果分别乘以系数“p”和“q”后作为第n 步的输入。
根据sin(A±B)= sinAcosB±cosAsinB 三角和差定理,将式(4)右边展开:
令a[n]、a[n−1]、a[n−2]满足:
得到:
给定基音频率f0、信号采样频率fs,N 为fs/f0的比,得到一组由基音频率为f0和2~N−1 次泛音(k=0,1,2,···N−1)组成的声觉报警信号数学表达式:
鉴于IEC60601-1-8 行业标准的要求[1-2],声觉报警信号的基音频率范围规定在150 Hz~1 kHz之内,且泛音数量不少于4 个。根据式(7)的递归算法,设定基音频率f0为500 Hz,2~5 次泛音频率分别为1、1.5、2 和2.5 kHz。据Nyquist-Shannon 定律[15],设定采样频率fs=25 kHz(或采样周期为40 μs)。
软件设计如图1 所示,采用时间间隔为40 μs的定时中断程序。当时间中断发生后,系统首先清零泛音计数器k。然后累加每一步的计算结果到Y[n] 中,直到k>N(本设计N 为6),把总和Y[n]输出。输出数据经数模转换(DAC)后以模拟信号输出。每次定时中断结束前,步计数器n 增加1 为下一步做准备。
设计硬件电路如图2 所示。图中U1 选用美国德州仪器公司生产的32 位ARM Cortex-M3 嵌入式单片机LM3S9B92 为数据处理器,其系统时钟频率通过内部锁相环处理外部输入4 MHz 时钟信号后高达80 MHz。U1 的输出脚PA0、PA1 和PA2分别作为信号输出端口连接U2 数模转换器DAC7512(12 bit)的信号输入脚SYNC(同步信号输入)、SCLK(时钟信号输入)和DIN(数据输入)。从处理器U1 端口输出的数字信号经U1 数模转换成模拟信号,并输出给U3 信号放大器(LM2904DR2G),最后经U4 音频驱动集成电路(LM490TS)输出音频信号驱动扬声器发声。数据处理器U1 和数码转换器U2 的工作电源为3.3 V 直流电源。信号放大器U3 和音频驱动器U4 的工作电源电压为12 V 直流电源。采用分离数字地和模拟地的办法避免模拟信号和数字信号通过地线串扰。
将编译后的程序代码烧写到数据处理器并且上电运行,得到图3 所示信号。图3a 为一个基音周期的信号波形(示波器为TDS2012C),其最大峰峰值达20 V。图3b 为设置示波器工作在math 分析模式下所得频率谱,其基音频率和2~5 次泛音频率分别为0.5、1、1.5、2 和2.5 kHz,且具有相同的幅度。整个频谱曲线显示噪音幅度均低于基音幅度的5%。
通过虚拟示波器和频谱仪观察仿真结果如图5所示。图5a 和5b 仿真所得波形和频谱与本文设计实验所得图3a 和3b 的结果相一致。
基于本文的设计和分析,每个频率点的计算量为只需把前两步结果相加后做一次乘以系数x[k]的运算。若式(7)中Y[n]再乘以一个在时域上按一定规律变化的系数A[n],则可以得到不同包络的信号群。如图6a 所示A[n]满足纺锤形变化要求所得信号群波形。
改变式(7)中的基音频率f0便可得到不同的音调。表1 为常用的中音对应的音频。利用表中不同音调的排列组合,可以得到丰富的报警用乐音。如通常采用的医用[1]声觉高级、中级和低级报警音调“CCC-CC”、“CCC”和“EC”,只需依次将表1 中对应的频率代入式(7)中的基音频率f0便可。如图6b 所示波形为发出高级报警“CCCCC”的音频信号波形。
表1 常用中音C 调所对应的频率
为便于嵌入式单片机应用程序编程,本文将复数领域的Goertzel 算法简化实数领域的算法,并应用该简化的Goertzel 算法推导建立了输出声觉报警信号的数学递归函数。本文所建函数输出具有基音及多倍频率泛音特征的正弦音频信号。
本文开发设计了基于嵌入式单片机的应用程序和音频驱动电路,以实现输出基音频率为500 Hz和包括2~5 次泛音在内的音频信号为例,应用本文所建递归算法进行试验,测试得到具有低噪声、丰富高次泛音的声觉报警信号。