900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 使用C语言编写DTMF检测程序 DSP课程设计---DTMF信号的产生及检测.doc

使用C语言编写DTMF检测程序 DSP课程设计---DTMF信号的产生及检测.doc

时间:2018-10-11 06:29:26

相关推荐

使用C语言编写DTMF检测程序 DSP课程设计---DTMF信号的产生及检测.doc

DSP课程设计---DTMF信号的产生及检测

DSP课程设计

实 验 报 告

DTMF信号的产生及检测

院(系): 电子信息工程学院通信工程专业

设计人员:宋佳阳 学号目录

一、设计任务书- 3 -

二、设计内容- 3 -

三、设计方案、算法原理说明- 4 -

1.DTMF信号的产生- 4 -

2.DTMF信号的检测- 5 -

四、程序设计、调试与结果分析- 7 -

1.程序设计部分:- 7 -

2.调试与结果分析部分:- 28 -

五、设计(安装)与调试的体会- 33 -

六、参考文献- 33 -

设计任务书

设计要求及目标

基本部分:

(1)使用C语言编写DTMF信号的发生程序,要求循环产生0~9、*、#、A、B、C、D对应的DTMF信号,并且符合CCITT对DTMF信号规定的指标。

(2)使用C语言编写DTMF信号的检测程序,检测到的DTMF编码在屏幕上显示。

发挥部分:

利用DTMF信号完成数据通讯的功能,并试改进DTMF信号的规定指标,使每秒内传送的DTMF编码越多越好。

设计内容

双音多频DTMF(Dual Tone Multi Frequency)是在按键式电话机上得到广泛应用的音频拨号信令,一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率分别来自两组预定义的频率组:行频组和列频组。每组分别包括4个频率,分别抽出一个频率进行组合就可以组成16种DTMF编码,分别记作0~9、*、#、A、B、C、D。如图2-1所示。

图2-1 DTMF信令的编码

要用DSP产生DTMF信号,只要产生两个正弦波叠加在一起即可;DTMF检测时采用改进的Goertzel算法,从频域搜索两个正弦波的存在。

设计方案、算法原理说明

DTMF信号的产生

DTMF发生器基于两个二阶数字正弦振荡器,一个用于产生行频,一个用于产生列频。DSP只要装载相应的系数和初始条件,就可以只用两个振荡器产生所需的八种音频信号。典型的DTMF信号频率范围是700~1700Hz,选取8000Hz作为采样频率,即可满足奈奎斯特定理。

正弦波是任何波形构成的基本元素,产生正弦波的方法一般有:查表法和计算法(泰勒级数展开法或数字正弦振荡器法)。

这里我们使用计算法产生正弦波,有以下两种方案:

方案一:使用数字正弦振荡器计算法产生正弦波

图3-1 DTMF数字振荡器对

由图3-1所示数字振荡器对的框图,可以得到DTMF数字振荡器对的二阶系统函数的差分方程为:

其中 , , , 为采样频率, 为输出正弦波的频率, 为输出正弦波的幅度。该式初值为 , 。

其中,上面一个数字振荡器用于产生行频,下面一个数字振荡器用于产生列频,将行频信号和列频信号通过加法器进行叠加即可产生DTMF信号。

方案二:使用sin函数产生正弦波

直接利用sin函数生成离散的正弦值,其生成DTMF信号的方程为:

y[t]=sin(t*2*pi*f1/fs)+sin(t*2*pi*f2/fs)

其中t为采样序数,由0开始递增;f1,f2为生成DTMF信号的两个正弦波的频率;fs为采样频率,由前面的分析可知,采样频率应该设定为8000Hz。

将行频信号的采样值与列频信号的采样值进行叠加,即可得到序数为t时的采样值,即为y[t]。

将两种方案进行比较后,我们认为,使用正弦振荡器计算法这种方法计算时所需的计算量小,但是由于使用了迭代的方法产生样点值,所以当前时刻的输出序列需要反馈到输入端。在程序中实现,就需要不断对y(n-1)和y(n-2)的值进行更新。同时,当前时刻的输出序列也会影响下一时刻和下两个时刻的输出。因此,如果用这种方法来产生长时间连续的正弦信号和余弦信号,则累积误差较大。

直接使用sin函数产生正弦波的方法,其计算时所需的计算量与方案一相当,并且也能达到误差要求。同时,由于使用方案二的方法产生正弦波,其当前时刻的输出序列只与当前时刻行频和列频的输入有关,所以不会产生累积误差,适合用来产生长时间连续的DTMF信号。

综上所述,我们使用方案二来产生DTMF信号。

根据CCITT的规定,数字之间必须有适当长度的静音,因此编码器有两个任务,一是产生双音频信号的任务,二是静音任务。由于采样频率为8000Hz,所以DSP有足够的计算时间,可以使用查询模式通过D/A转换器输出DTMF信号。CCITT规定每秒传送/接收10个数字,即每个数字持续100ms。由于1秒采样8000个点,则每个数字采样800个点。由于代表数字的音频信号必须持续至少45ms,但不超过55ms。100ms内其他时间为静音,以便区别连续的两个按键信号。所以,需要设置800个点的缓存,其中400个点用于产生DTMF信号中的音频信号,另外400个点用于产生DT

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。