实验报告——关于双音多频 (DTMF) 信号检测.doc

实验报告——关于双音多频 (DTMF) 信号检测.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告——关于双音多频 (DTMF) 信号检测

扩展实验:关于双音多频 (DTMF) 信号检测 一、实验原理 DTMF信号是音频电话中的拨号信号。DTMF信号系统是一个典型的小型信号处理系统,他用数字方法产生模拟信号并进行传输,其中还用到了D/A变换器;在接收端用A/D变换器将其转换成数字信号,并进行数字信号处理与识别。为了提高系统的检测速度并降低成本,还开发出一中特殊的DFT算法,称为戈则尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。 对16个按键进行编码,每个码都是两个单频正弦信号之和。 数字DTMF接收机通过接收到的双音信号的频谱,再现每个按键所对应的两个频率,从而确认被发送的电话号码。 (1)DTMF信号的产生 若信号采样率为8kHz,则离散信号 产生上述离散信号方法有:计算法和查表法 本实验采用计算法生成n=1024点的序列。 (2)DTMF信号的检测 检测方法有两种: Goertzel法和DFT频谱分析法 本实验采用了Goertzel方法。 (3)检测DTMF信号的DFT参数选择 采样频率 fs= DFT的变换点数N= 对信号的观察时间的长度 频率分辨率 二、实验内容 信号的产生及算法实现 DTMF编码,是将电话拨号盘上的数字O~9,字母A~D,及*/E、#/F,共16个字符,用音频范围的8个频率表示出来.具体来说,将8个频率分为高频群和低频群两组,分别作为列频和行频.每一个键的频率模式由来自于列频和行频的两个频率叠加而成.DTMF信号所规定的指标是:传送/接收率为每秒10个数字,或每个数字100ms.每个数字传送过程中,信号必须存在至少45ms,且不得多于55ms,lOOms里的其余时问是静音. 1 DTMF信号的产生 DTMF信号的产生比较简单,可直接利用两行频、列频的正弦函数的叠加实现,MATLAB程序 及DTMF信号(电话拨号“4”为例)波形如图所示. 2 DTMF信号的检测 GOERTZEL算法本身也是对DFT的快速运算,但可以有选择地计算个别点处的DFT,而对不需要的点不进行计算. GOERT冱L算法原理如下: GOERTZEL算法实质是一个两极点的IIR滤波器,其算法原理框图如图所示. DTMF信号解码后的|X(k)|-k关系图如图(电话拨号“4”为例)所示: 根据以上算法,使用MATLAB语言具体实现,程序如下: % DTMF双频拨号信号的生成和检测程序 clear all;clc; % tm=[1,2,3,65; % 4,5,6,66; % 7,8,9,67; % 42,0,35,68]; % DTMF信号代表的16个数 tm=[1,2,3,A; 4,5,6,B; 7,8,9,C; *,0,#,D]; % DTMF信号代表的16个数 N=205;K=[18,20,22,24,31,34,38,42]; f1=[697,770,852,941]; % 行频率向量 f2=[1209,1336,1477,1633]; % 列频率向量 TN=input(键入号码[1~9,*,#,A,B,C,D]= ,s); % 输入1位数字 TNr=0; p0=1;q0=0; %接收端电话号码初值为零 for p=1:4; for q=1:4; % if tm(p,q)==abs(d) if tm(p,q)==TN p0=p;q0=q;break; end % 检测码相符的列号q end % if tm(p,q)==abs(d) % break; % end % 检测码相符的行号p end n=0:1023; % 为了发声,加长序列 x = sin(2*pi*n*f1(p0)/8000) + sin(2*pi*n*f2(q0)/8000);% 构成双频信号 sound(x,8000); % 发出声音 % pause(0.1) figure(1) plot(abs(fft(x,length(n)))) % 接收检测端的程序 X=goertzel(x(1:205),K+1);

文档评论(0)

yurixiang1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档