基于STM32实现双音多频信号(DTMF)的检测与识别

2012-11-05 06:43郭永刚赵高院
电子测试 2012年9期
关键词:双音音频运算

王 勉, 郭永刚, 赵高院

(陕西烽火通信技术有限公司,西安 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.

猜你喜欢
双音音频运算
殷商编铙的类型学与双音性能研究
重视运算与推理,解决数列求和题
有趣的运算
郑樵“双音并义不为假借”平议
必须了解的音频基础知识 家庭影院入门攻略:音频认证与推荐标准篇
基于Daubechies(dbN)的飞行器音频特征提取
曾侯乙编钟双音原理解析
西夏语人称呼应类动词的双音化
音频分析仪中低失真音频信号的发生方法
“整式的乘法与因式分解”知识归纳