北工大-双音多频(DTMF)信号的检测 下载本文

版权声明 本文内的全部内容均由本人编写,可以用来参考学习,但不可用来进行商业活动。一切代码解释权均归作者扎楠所有。所有题目以实验指导书为准。 之所以制作这个word只是为了给将来和即将面对席大林老师以及他的课程的同学一些程序上的参考,避免走弯路,花更多的时间在缤纷多彩的大学生

活中,不要纠结于这些琐事。

双音多频(DTMF)信号的检测

姓名:

学号:

指导教师:

完成时间:

一、实验目的

(1) 理解DTMF信号的产生原理及其检测方法 (2) 提高分析和解决问题的能力 (3) 提高数字信号处理的实际能力

二、实验内容

(1) (2) (3) (4)

设置参数,读入电话号码

根据输入的电话号码产生包含两个频率分量的205点时域离散DTMF信号, 对时域离散DTMF信号利用Goertzel算法(参见附录)进行频率检测,画出幅度谱 根据幅度谱的两个峰值,分别查找并确定所输入的电话号码

三、各部分工作原理

1.双音多频信号的工作原理及产生

现在我们所用的电话中,每一个数字按键(包括#和*键) 都是由两种频率的单音信号组成的,这两种单音信号被分为高频带和低频带。低频带有四个频率,即697Hz,770Hz,852Hz 和941Hz;高频带也有四个频率,即1209Hz,1336Hz,1447Hz 和1633Hz。每一位号码均由一个低频带频率和一个高频带频率叠加形成。图1所示是国际标准(ITU84)认可的数字和符号键的频率分配情况。最右一排目前尚未应用于开发。

图1 按键电话频率配置

每个按键对应的DTMF信号为sin(2?f1t)?sin(2?f2t),其中f1为低频单音,f2为高频单音。电话中的双音多频信号有两个作用:用拨号信号去控制交换机接通被叫的用户电话机;控制电话机的各种动作,如播放留言、语音信箱等。

用8kHz对DTMF信号进行采样,采样后得到时域离散信号为:

x(n)?sin(2?f1n/8000)?sin(2?f2n/8000)

由于采样率是8kHz,因此要求每125ms输出一个样本,得到的序列再送到D/A变换器,它的输出经过平滑滤波便是连续时间的DTMF信号。DTMF信号通过电话线路再送到交换机。

2.双音多频信号检测原理及方法

在接收端,要对收到的双音多频信号进行检测,即检测两个正弦波的频率,以判断其对应的十进制数字或符号。可以利用DFT或者FFT对双音多频信号进行频谱分析,由信号的幅度谱大致判断出信号的两个频率,最后通过查表确定出对应的数字或符号。FFT是DFT的快速算法,但当计算的频率点数远小于DFT的变换区间长度时,用FFT快速算法的效果不明显,而且还要占用很多内存,因此不如直接用DFT合适。为了提高系统的检测速度并降低成本,已开发出一种特殊的DFT算法,称为戈泽尔算法(Goertzel)。

置于参数的选择,由于要检测信号的频率范围为697~1633Hz,但考虑到存在语言干扰,除了检测这8个频率外,还要检测他们的二次倍频的幅度大小。波形正常且干扰小的正弦波的二次倍频是很小的。如果发现二次谐波很大,则认为不是DTMF信号。这样频谱分析的频率范围为697~3266Hz(倍频,1633x2)。按照采样定理,信号的最高频率不能超过折叠频率,即0.5Fs≥3266Hz,由此要求最小采样频率为6.53kHz。这里已经规定Fs=8kHz,因此一定满足对频谱分析范围的要求。按照Tpmin=13.7ms,Fs=8kHz,算出对信号最少的采样点数为

Nmin?Tpmin?Fs?110。为了使结果更加准确,我们将N设为512.

DFT的频率采样点频率为点频率为

?k?2?kN,(k?0,1,2,3...N?1),相应地在模拟域的采样

fk?FskN,(k?0,1,2,3...N?1),希望选择一个合适的N,用该式算出的fk能

接近要检测的频率,或者

fk用8个频率中的任一个频率代人fk?FskN中时,得到的k

值最接近整数值。这样根据最大幅度检测的频率虽然有误差,但由此可以正确判断DTMF信号所表示的数值。

3. 戈泽尔(Goertzel) 算法原理

kWN Goertzel算法利用相位因子{}的周期性,并使我们能将DFT运算表示为线性滤波运

算,由于

W?NkN?ej2?kNN?1,我们可以利用该因子去乘DFT,则有

X(k)?W?NkN?k(N?m)X(k)??x(m)WNm?0N?1

现在能够用Goertzel算法实现DTMF解码器了,由于有8种可能的音频要检测,所以需要8个(7)式所给出的滤波器,每个滤波器调谐到这8个频率之一上。在DTMF解码器中,不需要计算复数值X(k),只要求出幅度值X(k),或幅度平方值X(k)就可以了。所以,计算涉及分子项(滤波器计算的前向部分)的DFT值的最后一步可以简化,我们有

2

于是,DTMF解码器中就完全避免了复数运算。

四、总系统图

Input读取键值21产生双音发声3产生对应DTMF信号sin(2πf1t)+sin(2πf2t)45进行戈泽尔算法运算得出的高低频率,进行比较确定输入的数字或字母Display6利用matlab画出频谱图7

五、程序主体部分

本程序的主体部分是戈泽尔算法的实现和图像的生成,这是前半个学期席大林老师信号工程处理课的核心部分与毋立芳老师数字图像处理的精华部分的整合。