资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
DSP 课程设计实验报告DTMF 信号的产生及检测院(系):电子信息学院通信 07级设计人员:贾 勇学号: 07211168 设计人员:李 昂学号: 07211170 成绩:工程设计 50 报告20 答辩30 总分评语:指导教师签字:日期:一、 设计任务书双音多频 DTMF(Dual Tone Multi Frequency)是在按键式电话机上得到广泛应用的音频拨号信令,一个DTMF 信号由两个频率的音频信号叠加构成。这两个音频信号的频率分别来自两组预定义的频率组:行频组和列频组。每组分别包括4 个频率, 分别抽出一个频率进行组合就可以组成16 种 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 编码在屏幕上显示。发挥部分:利用 DTMF 信号完成数据通讯的功能,并试改进DTMF 信号的规定指标,使每秒内传送的 DTMF 编码越多越好。2 设计思路DTMF 发生器基于两个二阶数字正弦振荡器,一个用于产生行频,一个用于产生列频。DSP只要装载相应的系数和初始条件,就可以只用两个振荡器产生所需的八种音频信号。典型的 DTMF 信号频率范围是7001700Hz,选取 8000Hz作为采样频率,即可满足奈奎斯特定理。DTMF 数字振荡器对的二阶系统函数的差分方程为:其中,为采样频率,为输出正弦波的频率,为输出正弦波的幅度。该式初值为,。在输入信号中检测DTMF 信号,需要在输入的数据信号流中连续地搜索DTMF 信号频谱的存在。整个检测过程分两步:首先采用Goertzel算法在输入信号中提取频谱信息;接着作检测结果的有效性检查。DTMF 解码时在输入信号中搜索出有效的行频和列频。计算数字信号的频谱可以采用DFT及其快速算法FFT,而在实现DTMF 解码时,采用Goertzel 算法要比 FFT更快。通过FFT 可以计算得到信号所有谱线,了解信号整个频域信息,而对于 DTMF信号只需关心其8 个行频 /列频及其二次谐波信息即可,二次谐波的信息用于将DTMF 信号与声音信号区别开。此时Goertzel 算法能更加快速的在输入信号中提取频谱信息。Goertzel算法实质是一个两极点的 IIR 滤波器。3 要求完成的任务(1)编写 C语言程序,并在CCS 集成开发环境下调试通过。(2)实现设计所要求的各项功能。二、 设计内容(1)使用 C语言编写 DTMF 信号的发生程序,要求循环产生09、* 、#、A、B、C、D对应的 DTMF 信号,并且符合CCITT 对DTMF 信号规定的指标。(2)使用 C 语言编写 DTMF 信号的检测程序,检测到的DTMF 编码在屏幕上显示。发挥部分:利用DTMF 信号完成数据通讯的功能,并试改进DTMF 信号的规定指标,使每秒内传送的DTMF 编码越多越好。三、 设计方案、算法原理说明DTMF 信号的产生:DTMF 发生器基于两个二阶数字正弦振荡器,一个用于产生行频,一个用于产生列频。DSP 只要装载相应的系数和初始条件,就可以只用两个振荡器产生所需的八种音频信号。典型的DTMF 信号频率范围是7001700Hz,选取8000Hz作为采样频率,即可满足奈奎斯特定理(Nyquist 定理:为了正确判定信号频率,信号在一个周期内至少被采样两次)。具体来说DTMF 编码是将拨号盘上的数字09,字母 AD,*E、#F,共 16个字符,用音频范围 ( 小于 3 400 Hz) 的 8 个频率表示出来。具体来说,将8 个频率分为高频群和低频群2 组,分别作为列频组和行频组,总共可构成4 4 共 16 种不同组合,代表16 个符号。具体表示方法如图1 所示。 DTMF 双音频可以由2 个可编程的二阶数字正弦振荡器产生,如图 2 所示,分别用于产生行音频和列音频。由于 DTMF 频率范围在6971 633 Hz 之间,根据Nyquist定理可知,用8kHz 速率抽样对DTMF信号没有影响。 及所以 8000HZ这样的频率抽样对DTMF 信号没有影响。(其中在100ms内采样 800 个点,我们设置800 个点的缓存,其中用400 个存产生的DTMF信号值,即音频信号必须持续50ms,另外 400 个存 0 值,即静音信号。)DTMF 信号的检测:DTMF 信号的检测要比产生复杂得多,一方面, 解码的算法相对复杂;另一方面,对解码的实时性,即解码速度要求较高。不同的软硬件有不同的实现方法,而软件解码主要是指用一些通用的硬件模块,以合适的算法对接收进来的DTMF 信号进行解码。解码一般有2 个过程: 变换和确认, 变换是指把输入的时域信号变换成易处理的频域信号,得到有效频率组成的数字;确认是指对检出的数字是否有效,即判断是否符合各项参数规定和信号指标的要求。在检测端对DTMF信号解码时从输入信号中搜索出有效的行频和列频。进行解码可以采用 2 种算法: FFT和 Goertzel算法。 FFT可用来计算点频率处的频谱值,但他不能按逐个样点的方式处理,不利于实时实现,且为了保证频率分辨率,FFT的点数需取得较大。当计算的频率点较少时,Goertzel算法是计算DFT的有效算法,比FFT更快。在本实验系统中,只需关心其8 个行频列频及其二次谐波信息即可,因此,选用了Goertzel算法,利用二极点的IIR 滤波器计算离散傅里叶变换值,能够快速高效地提取输入信号的频谱信息。Goertzel算法实质是一个两极点的IIR 滤波器。 DTMF数字振荡器对的二阶系统函数的差分方程为:其中,为采样频率,为输出正弦波的频率,为输出正弦波的幅度。该式初值为,。Goertzel 算法原理框图在实际的 DTMF检测中,只需DFT的幅度(本算法为平方幅度)信息就足够了,因此在Goertzel滤波器中,当N 点(相当于DFT数据块的长度)样值输入滤波器后,滤波器输出伪 DFT值 vk(n),由 vk(n)即可确定频谱的平方幅度。XkyNyNvNvNk vNvNkkkkNkk()()()()()cos()()()222222121(2)其中 k 的取值可由下表得到:1st Harmonics (N = 205) fs = 8 ksps 2nd Harmonics (N=201) fs = 8 ksps k frequency (k/N)fs/Hz coefficient cos(2pi k/N) k frequency (k/N)fs/Hz coefficient cos(2pi k/N) 18 697 0.85162 35 1393 0.45886 20 770 0.81793 39 1552 0.34445 22 852 0.78115 43 1711 0.22470 24 941 0.74142 47 1871 0.10141 31 1209 0.58157 61 2428 -0.32974 34 1336 0.50442 67 2667 -0.50000 38 1477 0.39505 74 2945 -0.67606 42 1633 0.27972 82 3264 -0.83740 一旦得到行 / 列频率的频谱平方幅度信息,就可以通过一系列的判决来确定音频及数字结果的有效性。首先,检测可能DTMF 信号的强度是否足够大。行频率分量和列频率分量的平方幅度和应高于某一确定门限THR_SIG 。注意与DTMF频率相符的正弦波的能量集中在频域内一段很窄的范围当中,所以门限取值应占动态范围的大部分。第二,如果DTMF 信号存在,由于构成DTMF 信号的行频都低于列频,因此从小到大依次判断各个频率点的频谱幅度,得到的第一个达到门限要求的的频率点即为行频,第二个即为列频, 综合行频和列频即可得出检测到的是哪个数据。四、 程序设计、调试与结果分析我们设计的总体思路是将DTMF 信号的产生与检测分别建立工程,期望在两个DSK 板可以实现双机通信。DTMF 信号的发送程序:程序流程包含两个任务,即音频任务和静默任务。在一段时间间隔后两个任务需要进行互换。 音频任务的作用是产生双音频采样值,静默任务的作用是产生静默采样值。每个任务被分配一定的持续时间。发送源程序:#include #include #include #include #include HANDLE hHandset; s16 data; s16 buffer400; #define PI 3.1415926 float fs=8000; s16 tele_number16=1,2,3,4,5,6,7,8,9,0,A,B,C,D,*,#; float dtmf_freq162= 941,1336,/0 697,1209,/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/# ; f32 row_freq162=0; /各键值行频系数和初始条件f32 column_freq162=0;/各键值列频系数和初始条件f32 ax1,ay1; f32 x_n,x_n_1,x_n_2; f32 y_n,y_n_1,y_n_2; f32 z_n; void delay(s16 period); /*DTMF发送主程序 */ void main() s16 cnt=2; f32 f0; s16 num; s16 i=0,n=0;/,i1=0 if(brd_init(100)/initial dsk board return; /*LED flick twice ,board works */ while(cnt-) brd_led_toggle(BRD_LED0); delay(1000); brd_led_toggle(BRD_LED1); delay(1000); brd_led_toggle(BRD_LED2); delay(1000); /*open codec,get handle*/ hHandset=codec_open(HANDSET_CODEC); /*setting D/A coverter initial parameter*/ codec_dac_mode(hHandset,CODEC_DAC_15BIT); /D/A works in 15-bit mode codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/analog output gain is -6dB codec_sample_rate(hHandset,SR_8000); /D/A slew-rate is 8KHz /*Calculate the value of each line_freq of the frequency coefficient COS(2*PI*F0/FS)and Initial co
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号