基于STM32实现双音多频信号(DTMF)的检测与识别
2012-11-05郭永刚赵高院
王 勉, 郭永刚, 赵高院
(陕西烽火通信技术有限公司,西安 710075)
0 引言
双音多频信号(Double Tone Multi Frequency)是指电话拨号中脉冲信号和音频信号中音频信号的拨号方式。也就是电话拨号时,每按一个键,有两个音频频率叠加成一个双音信号。双音多频信号(DTMF)检测与识别在市场上有着很多成熟的芯片,能够可靠地完成这一功能;但是随着设备体积的缩小,以及对设备功耗的进一步要求。我们越来越倾向于使用软件来代替这个芯片。STM32系列属于ARM CortexTM-M3,是一款高性能、低成本、低功耗的32位RISC处理器。现如今被广泛地用于移动设备的主控制器系统。使用这款芯片来完成DTMF检测的功能,可以不增加任何成本和功耗。
1 音频信号采样
1.1 典型主控系统介绍
随着集成度的不断提高,MCU的功能在不断增强,如图1所示。单片STM32F1系列芯片可以完成诸如液晶显示、键盘扫描、与系统信道通讯,通过USB或者 USART与PC交互数据,甚至通过以太网物理层PHY芯片,接入Internet。
图1 中为典型主控示意图
现如今大多数主控芯片都集成 ADC,DAC这样的外设,这使得我们在不用增加任何外围电路情况下,就能很方便地进行数据采集。STM32的AD分辨率是12位的,在CPU主频56 MHz时。转换时间为1 μs,也就是1MHz的采样率。
1.2 DTMF手柄引脚定义图
为了减少连线的数目,MIC和DTMF信号线是复用,两者的复用是非常合理的,因为音频信号也要经过采样,然后音频编码(俗称声码化)。两个信号也不会同时有效。这样一来,也节省了AD的数目。但是 MIC产生的音频信号,有可能会干扰DTMF,造成误判断。
图2 DTMF手柄引脚定义图
人的语音可以分为清音、浊音两种。清音的频谱接近白噪声,不会对我们的检测造成影响;浊音从发声过程来讲是声带的震动,通过鼻腔和口腔的共鸣腔形成,有明显的周期性,在频谱上有明显的双音特性,影响我们的判断;与DTMF明显的区别在于,浊音有明显的二次谐波分量,因此对二次谐波的判断,可以帮我区分话音和DTMF信号。
1.3 硬件采样电路
采样电路如图3所示。
图3 低通滤波器硬件电路
A:因为STM32的引脚的最小电压输入为 VSS-0.3 V,音频信号输入均值为零,必须为这个信号叠加直流信号,以免造成信号的失真和芯片的损坏;
B:电容C221, C220,电阻 R147, R148组成了简单的抗混叠滤波器。滤波器只有信号频率超过了500 kHz时,才能起到很好的抗混叠作用。因为产品中的发射频率工作在800 MHz,对发射主频能起到很好的抗混叠作用。对于500 kHz以下的干扰信号,和发射频率交叉调制带来的干扰就无能为力。为了进一步提高可靠性, DTMF手柄与机器的连线必须使用屏蔽线,手柄的地线采用独立接地来减少ADC采样前端的干扰。
1.4 采样频率的选择:
采样的语音信号带宽为300 Hz-3 kHz,为了满足奈奎斯特采样法则,我们选择采样频率Fs =8 kHz。这个频率在u_PCM编码中也被广泛采用。
1.5 STM32芯片的配置
系统采样率Fs =8kHz,我们要求它的频率稳定度一般为100ppm;而程序运行时间的长短不容易控制,产品中我们采用定时器TIM2,ADC1,DMA1三个外设协同工作来完成,从而保证频率稳定度。数据采样流程图如图4所示。
图4 数据采样流程图
在连续采样中,使用这种方法的好处是,不需要CPU的参与,所有的采样工作都是在硬件上实现了,可靠性好,能够准确的保证8 kHz的采样率。缺点是程序移植困难。有些芯片上不支持DMA,就无法实现了;好在现在芯片大多数都支持这些外设。
2 戈泽尔算法介绍
Goertzel算法俗称戈泽尔算法。它的原理是利用2个极点的IIR滤波器计算离散傅里叶变换,能够高效地提取频谱信息。戈泽尔算法描述如下:
(a)从n= 0,…,N递归计算
Min(Fr -Fc)= 73Hz
所以Δf<73;
当 Fs=8 kHz;
N>110。
在戈泽尔算法中,虽然N必须取整数,但是对 k的取值没有限制,而且我们所需要的是:
我们在MATLAB上计算得到 8个频率所对应的CONSTAT_VALUE,因为CPU支持定点运算,存储类型为 INT16,归一化处理如下:
3 N值的选择
3.1 N值的物理意义
在程序计算过程中,N为每次运算的采样点数。N值的选择决定了最小频率关系。从上一节中我们得出:
N>110。
3.2 N值选择受限于检测按键的时间长短和人们的操作习惯
根据人们的按键习惯,每次按键的时间大约在60-200 ms左右,机械操作抖动是不可避免的,所以需要去抖动。如果以每采到2次相同按键来去抖动,每次的检测时间不应该大于30 ms。
3.3 N值选择受限于CPU硬件因素
在实际应用中,因为使用的是定点运算,所以N 的选择还要考虑到计算过程中的精度和溢出。戈泽尔算法是DFT的一种快速实现,所以DFT的溢出问题在戈泽尔算法中同样存在。根据帕塞瓦尔定理:
X(k)2的均方值是x(n)2均方值的N倍,因此如果不采取有效措施,溢出是不可避免的;不仅如此,因为我们要选取的是单音信号,所以有如下公式成立:
这个公式对工程运算十分重要,它直接决定了我们的运算结果会不会溢出。给我们提供了自动增益控制稳态值的选择范围。具体用法如下。
(a) 输入信号x(t)=A*cos(t); A=3 V, AD的最大动态范围
(b) Fs = 8000;
(c) 采样信号为x(n)= B*cos(n/Fs);
(d) ADC采样精度为12 bit,考虑到符号位所以B = 210;
(e) CPU的 加 法 器 为32bit,所 以MAX(X(K0)2) =231
利用公式 (13)得到
所以N=64,不满足 N>110的要求。
为了满足频率分辨率的要求,我们只有通过自动增益控制来实现。
4 自动增益控制
我们使用的参考电压VREF+为3 V。在输入信号Vpp大于这个动态范围时,就会产生溢出。经过戈泽尔算法后出现谐波成分,造成误判断;当信号幅度过小,没有足够的信噪比时,会造成漏判断。
在AD采样前,通过硬件电路进行压缩放大,防止信号超过最大动态范围,造成AD溢出。
(1)硬件音频放大Ssm2167 进行压缩放大;
图5 音频压缩放大硬件电路
ssm2167的输入动态范围可以达到50 dB,提高了设备的兼容性。
(2)软件音频压缩,保证DFT运算不溢出。
上一节中已经仔细论证了软件压缩的重要性,在此给出程序流图如图6所示。
图6 音频压放时序图
5 实验测试结果
工程测试中,采用 cr-cooledit软件生成测试音频文件。通PC耳机插孔接入目标板。测试文件包括:
(1) 标准DTMF测试文件 600 s,每组双音持续时间为25 ms。相当于24000个DTMF信号。
(2) 非标准测试文件600 s,每组双音持续时间为25ms。
(3) 音乐文件 600 s。
(4) 语音文件 600 s。
输入动态范围测试,音频输入1mvRMS—1VRMS,60dB动态范围的情况下,标准测试文件能够准确识别,识别率 100%。在同样的动态范围下,非标准文件,音乐文件,和语音文件的全部拒识,拒识率 100%。
[1] 陈亮,杨吉斌,张雄伟.信号处理算法的实时DSP实现[M].北京:电子工业出版社,2008.
[2] 金鑫春,旺一鸣.Goertzel 算法下DTMF信号检测及参数优化[J].现代电子技术,2010(06):152-155.
[3] 弋今朝,张禄林,钱玉美.一种新的基于Goertzel算法的DTMF信号检测方法[J].通信技术,2002(9):16-18.
[4] International Telecommunication Union . ITU-T Recommendation Q23. Technical Features Of Push - Button Telephone Sets[R]. Switzerland:ITU-T. November 1988.
[5] 丁玉美,高西全.数字信号处理[M].2版.西安:西安电子科技大学出版社,1994.
[6] 胡广书.数字信号处理理论、算法与实现[M].北京:清华大学出版社,2003.
[7] 傅丰林.电子线路基础[M].西安:西安电子科技大学出版社,2001.
[8] Jean J.Labrosse.嵌入式实时操作系统μC/OS-Ⅱ[M].邵贝贝 译.北京:北京航空航天大学出版社,2001.