ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:30.40KB ,
资源ID:1356660      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1356660.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DTMF信号的产生及检测.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DTMF信号的产生及检测.docx

1、DTMF信号的产生及检测DSP课程设计实 验 报 告DTMF信号的产生及检测院(系): 电子信息工程学院-通信工程设计人员:周钰哲 学号: 苗祚雨 08212075一、设计任务书2二、设计内容2三、设计方案、算法原理说明3四、程序设计、调试与结果分析6五、设计(安装)与调试的体会16六、参考文献16一 设计任务要求双音多频DTMF(Dual Tone Multi Frequency)是在按键式电话机上得到广泛应用的音频拨号信令,一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率分别来自两组预定义的频率组:行频组和列频组。每组分别包括4个频率,分别抽出一个频率进行组合就可以组成1

2、6种DTMF编码,分别记作09、*、#、A、B、C、D。如下图1所示。图1 DTMF信令的编码要用DSP产生DTMF信号,只要产生两个正弦波叠加在一起即可;DTMF检测时采用改进的Goertzel算法,从频域搜索两个正弦波的存在。1、基本部分:(1)使用C语言编写DTMF信号的发生程序,要求循环产生09、*、#、A、B、C、D对应的DTMF信号,并且符合CCITT对DTMF信号规定的指标。(2)使用C语言编写DTMF信号的检测程序,检测到的DTMF编码在屏幕上显示。2、发挥部分:利用DTMF信号完成数据通讯的功能,并试改进DTMF信号的规定指标,使每秒内传送的DTMF编码越多越好。3、要求完成

3、的任务(1)编写C语言程序,并在CCS集成开发环境下调试通过。(2)实现设计所要求的各项功能。(3)按要求撰写设计报告。二、设计内容DTMF发生器基于两个二阶数字正弦振荡器,一个用于产生行频,一个用于产生列频。在输入信号中检测DTMF信号,需要在输入的数据信号流中连续地搜索DTMF信号频谱的存在。整个检测过程分两步:首先采用Goertzel算法在输入信号中提取频谱信息;接着作检测结果的有效性检查。Goertzel算法实质是一个两极点的IIR滤波器。三、设计方案、算法原理说明要用DSP 产生DTMF 信号,只要通过两个正弦波叠加在一起即可;DTMF 检测时采用改进的Goertzel 算法,从频域

4、搜索两个正弦波的存在。(1)DTMF信号的产生DTMF编码器基于两个二阶数字正弦波振荡器,一个用于产生行频,一个用于产生列频。向DSP装入相应的系数和初始条件,就可以只用两个振荡器产生所需的八个音频信号。典型的DTMF信号频率范围是7001700Hz,选取8000Hz作为采样频率,即可满足Nyquist条件。DTMF数字振荡器对的二阶系统函数的差分方程为:其中 , , , 为采样频率, 为输出正弦波的频率, 为输出正弦波的幅度。该式初值为 , 。 用sin函数产生离散的正弦值,生成DTMF的公式为:buffert=sin(t*2*pi*f1/fs)+sin(t*2*pi*f2/fs)其中t为采

5、样序数,由0开始递增;f1,f2为生成DTMF信号的两个正弦波的频率;fs为采样频率;buffert为序数t时的得出的采样值。将这些数据转换为Q15格式然后通过codec发送出去。CCITT对DTMF信号规定的指标是,传送/接收率为每秒10个数字,即每个数字100ms。代表数字的音频信号必须持续至少45ms,但不超过55ms。100ms内其他时间为静音,以便区别连续的两个按键信号。我们使用8000Hz的采样频率(电话信号的典型抽样频率为=8kHZ),即1秒采样8000个点,则100ms采样800个点,我们设置800个点的缓存,其中用400个存产生的DTMF信号值,即音频信号必须持续50ms,另

6、外400个存0值,即静音信号。 (2)DTMF信号的检测DTMF检测是对进入解码端的信号进行检测,并把双音频信号转换成对应的数字信息。它是一个比DTMF产生更加复杂过程。由于数据流是连续的,为了保证DTMF检测的实时性,因此要求检测过程必须是实时连续的。在输入信号中检测DTMF 信号,需要在输入的数据信号流中连续地搜索DTMF 信号频谱的存在。整个检测过程分两步:首先采用Goertzel 算法在输入信号中提取频谱信息;接着作检测结果的有效性检查。DTMF 解码时在输入信号中搜索出有效的行频和列频。计算数字信号的频谱可以采用DFT 及其快速算法FFT,而在实现DTMF 解码时,采用Goertze

7、l 算法要比FFT 更快。通过FFT 可以计算得到信号所有谱线,了解信号整个频域信息,而对于DTMF 信号只需关心其8 个行频/列频及其二次谐波信息即可,二次谐波的信息用于将DTMF 信号与声音信号区别开。此时Goertzel 算法能更加快速的在输入信号中提取频谱信息。Goertzel 算法实质是一个两极点的IIR 滤波器。Goertzel算法原理:DTMF检测器的核心是Goertzel算法。该算法利用二极点的IIR滤波器计算离散傅立叶变换值,能够快速高效地提取输入信号的频谱信息。由于IIR滤波器是一个递归结构,它利用只有一个实系数的差分方程进行操作,并不像DFT或FFT算法那样需要计算数据块

8、,而是每输入一个样值就执行一次算法。完成时域到频域的变换可以用离散傅立叶变换(DFT)或快速傅立叶变(FFT)FFT计算出所有点频率,而DFT可以只计算感兴趣的频率点如果要计算的频率点数少于log 2N(N为输入信号点数),采用DFT的计算速度比FFT更快。直接计算DFT,需要很多复系数,即使只计算一点的DFT也需要N个复系数采用数字信号处理中的Goertzel算法,如图2,则可明显地提高速度。图2 Goertzel算法原理框图 在实际的DTMF检测中,只需DFT的幅度(本算法为平方幅度)信息就足够了,因此在Goertzel滤波器中,当N点(相当于DFT数据块的长度)样值输入滤波器后,滤波器输

9、出伪DFT值vk(n),由vk(n)即可确定频谱的平方幅度。其中k=f*N/fs,当N取值为125时, k的取值经计算如表1所示:信号频率(Hz)计算值k取整值k绝对误差相对误差69711770128521394115120919133621147723163325表1一旦得到行/列频率的频谱平方幅度信息,就可以通过一系列的判决来确定音频及数字结果的有效性。首先,检测可能DTMF信号的强度是否足够大。行频率分量和列频率分量的平方幅度和应高于某一确定门限。注意与DTMF频率相符的正弦波的能量集中在频域内一段很窄的范围当中,所以门限取值应占动态范围的大部分。第二,如果DTMF信号存在,由于构成DT

10、MF信号的行频都低于列频,因此从小到大依次判断各个频率点的频谱幅度,得到的第一个达到门限要求的的频率点即为行频,第二个即为列频,综合行频和列频即可得出检测到的按键信息。检测流程图:图3 检测流程图四、程序设计、调试与结果分析(1)发送源程序代码如下:/*/* DTMFsignal 发送程序 s*/ /*/void delay(int period);void generate(int num);HANDLE hHandset;float buffer800;s16 num=0;int count=0;float freq162= 941,1336, /键值0对应的行频列频 697,1209,

11、/1 697,1336, /2 697,1477, /3 770,1209, /4 770,1336, /5 770,1477, /6 852,1209, /7 852,1336, /8 852,1477, /9 697,1633, /A 770,1633, /B 852,1633, /C 941,1633, /D 941,1209, /* 941,1477 /# ;void main() int cnt=2; if(brd_init(100) return; /* blink the leds a couple times */ while ( cnt- ) /* 二极管闪两次 */ brd

12、_led_toggle(BRD_LED0); /brd_delay_msec(1000); delay(1000); brd_led_toggle(BRD_LED1); /brd_delay_msec(1000); delay(1000); brd_led_toggle(BRD_LED2); /brd_delay_msec(1000); delay(1000); /* Open Handset Codec */ hHandset = codec_open(HANDSET_CODEC); /* Acquire handle to codec */ /* Set codec parameters

13、*/ codec_dac_mode(hHandset, CODEC_DAC_15BIT); /* DAC in 15-bit mode */ codec_adc_mode(hHandset, CODEC_ADC_15BIT); /* ADC in 15-bit mode */ codec_ain_gain(hHandset, CODEC_AIN_6dB);/* 6dB gain on analog input to ADC */codec_aout_gain(hHandset, CODEC_AOUT_MINUS_12dB); /* -12dB gain on analog */* output

14、 from DAC */ codec_sample_rate(hHandset,SR_8000); /* 8KHz sampling rate */ generate(num); void generate(int num) f32 x,y; int k=0; int i; i=0; while(1) / Wait for sample from handset while (!MCBSP_XRDY(HANDSET_CODEC) ; *(volatile u16*)DXR1_ADDR(HANDSET_CODEC)=bufferi; i+; if(i=800) i=0; num+; if(num=16) num=0; x=freqnum0/8000; y=freqnum1/8000; for(k=0;k400;k+) bufferk+400

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1