DTMF信号的产生与识别
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、实验背景------------------------------------3
二、实验目的------------------------------------3
三、实验内容------------------------------------3
四、实验原理----------------------------------3
五、实验程序及注释------------------------------5
六、CCS5000程序调试-----------------------------9
1、编译过程、工程架构、编译环境设置
2、程序运行结果(图形显示、数据显示)
七、实验总结及感想----------------------------
DTMF信号的产生与识别
一、实验背景:
双音多频DTMF(Dual Tone Multi-Frequency)信令,逐渐在全世界范围内使用在按键式电话机上,因其提供更高的拨号速率,迅速取代了传统转盘式电话机使用的拨号脉冲信令。作为实现电话号码快速可靠传输的一种技术,它具有很强的抗干扰能力和较高的传输速度,因此,可广泛用于电话通信系统中。但绝大部分是用作电话的音频拨号。另外,它也可以在数据通信系统中广泛地用来实现各种数据流和语音等信息的远程传输。近年来DTMF也应用在交互式控制中,诸如语言菜单、语言邮件、电话银行和ATM 终端等。将DTMF信令的产生与检测集成到任一含有数字信号处理器(DSP)的系统中,是一项较有价值的工程应用。二、实验目的:
(1)熟悉DSP5402的体系结构、指令系统、汇编语言程序的编写;(2)了解DTMF的基础知识;
(3)学习用c语言对DTMF的编程方法;
(4)掌握DTMF的信号产生及信号检验;
(5)在CCS环境下,最终完成程序的调试
三、实验内容:
(1)利用DTMF信号产生的原理合成数字1,其合成公式是
分析其时域波形和频谱;
(2)生成各个按键信号;
(3)利用fft分析0~9十个数字拨号信息的频谱,观察频谱图中的峰值点的幅值以及它们出现的位置。根据谱峰的幅值和位置,识别各DTMF信号所对应对应的数字;
(4)编写Goertzel算法的程序,识别各DTMF信号所对应对应的数字。比较fft 与Goertzel算法的效率;
(5)生成一串拨号音,例如8位电话号码,进行识别;
(6)详细列出电话拨号音合成和识别的步骤。
四、实验原理:
1. DTMF信号合成
根据CC ITT 建议, 国际上采用697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、
1477Hz 、1633Hz 12个频率, 并将其分成两个群, 即低频群和高频群。从低频群和高频群中任意抽出一个频率进行叠加组合, 具有16种组合形式, 让其代表数字和功率, 如下图电话机键盘的频率矩阵所列。
当按下某个键时,所得到的按键信号是由
相应两个频率的正弦信号相加而成。设x [k ]为DTMF 信号,产生方式为:
X[k]=Asin(h W k)+ Bsin(l W k)
式中h W =2h f /sam f 和l W =2∏l f /sam f 分别表示高频和低频频率,A 、B 分别为低频群和高频群样值的量化基线。电话信号的典型抽样频率为sam f =8kHZ 。CCITT 对DTMF 信号规定的指标是,传送/ 接收率为每秒10个数字,即每个数字100ms 。代表数字的音频信号必须持续至少45ms ,但不超过55ms 。100ms 内其他时间为静音(无信号),以便区别连续的两个按键信号。 2、DTMF 信号的识别
DTMF 解码即是在输入信号中搜索出有效的行频和列频。计算数字信号的频谱可以采用DFT 及其快速算法FFT ,而在实现DTMF 解码时,采用Goertzel 算法要比FFT 更快。通过FFT 可以计算得到信号所有谱线,了解信号整个频域信息,而对于DTMF 信号只用关心其8 个行频/ 列频及其二次谐波信息即可(二次谐波的信息用于将DTMF 信号与声音信号区别开)。此时Goertzel 算法能更加快速的在输入信号中提取频谱信息。
Goertzel 算法实质是一个两极点的IIR 滤波器,其算法
图1:Goertzel算法原理框图
如图知,DFT 计算可以等价为:
由于在DTMF 检测中,输入的信号是实数序列,并不需要检测出8 个行频/ 列频的相位,只需要计算出其幅度平方即可。对于实序列x(n), Goertzel算法(n)也为实数。因此计算如下:
所需的内部变量v
k
用上式的计算取代式(3)即可完全避免复数运算。当幅值的平方大于某一定值时即可判定其频率点上有对应的信息。
在识别DTMF信号时,要求确定抽样点数N,国际上通用N=205点或N=106点。表1列出了N=205点时,各个频率所对应的DFT结果X[m]中的序号m。
基频准确值m最近的整数m值两点的绝对误差
697 17.861 18 0.139
770 19.731 20 0.269
852 21.833 22 0.167
941 24.113 24 0.113
1209 30.981 31 0.019
1336 34.235 34 0.235
1477 37.848 38 0.152
五、实验程序及注释:
#include "stdio.h" //头文件
#include "math.h"
#include "type.h"
#include "board.h"
void delay(int period); //函数原型