DTMF信号辨识实验报告_第1页
DTMF信号辨识实验报告_第2页
DTMF信号辨识实验报告_第3页
DTMF信号辨识实验报告_第4页
DTMF信号辨识实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DTMF信号辨识实验报告11/11DTMF信号辨识实验报告DTMF信号辨识实验报告

实验目的熟悉双音频信号的产生、分析与检测原理熟悉MATLAB工具箱的使用实验原理及要求双音多频(DTMF)是按键电话通信的德国名称,它等效于贝尔系统中所用的接触音频系统。在DTMF通信系统中,高频音与低频音的一个组合表示表示一个特定的数字或者字符(*和#)。8个频率按以下矩阵图提供给16个字符或数字。其中12个(数字和*、#)分配如图示,其他4个保留备用。第一列1209Hz第二列1336Hz第三列1477Hz第四列1633Hz第一行697Hz123A第二行770Hz456B第三行852Hz789C第四行941Hz*0#D拿起电话听筒放在耳边会听到拔号音,若按下重拔(Redial)键,则电话机会自动重拔上次所拔电话号码,对双音多频电话机,此时会在耳边听到代表不同数字的声音,每个数字都由二个不同频率的信号组成。从.wav文件中提取频谱的方法:你可以用matlab函数wavread(具体用法请参阅matlabhelp)把数据从.wav文件中读出来(这些数据是时域上的的采样数据,采样率可以从wavread函数的返回值中获得),并采用一定手段设定一个阈值,当数据的幅值大于这个阈值时就确定此时为数字按键声音数据的开始,然后从此向后取一定数量的采样数据(如512点),并对它进行fft变换,得到这些数据对应的频谱,从而确定该声音文件对应的数字键。该实验中已经提供给你一些录好的加有背景噪音的电话数字按键的声音文件(.wav文件),这些文件中包括了一些电话号码(如82317216,013671367249,它们的位数不一定相同)。请你应用上面提供的方法,识别出这些电话号码。你所编写的处理程序要能达到如此程度:以一个包含拔号信号的数据文件为输入,其输出就是电话号码,处理过程中不需要人工干预(可以采用display函数显示这些数字键)。实验内容及结果:编码程序functionbianma()sil=zeros(1,800);fh=[1209133614771633];fl=[697770852941];K=[31,34,38,42,18,20,22,24];%inputandidentificationNum=input('inputPhoneNum=\n');snr=input('inputSnr=');M=100;fori=1:8ifNum(i)==0p=2;q=4;elsep=mod(Num(i)-1,3)+1;q=ceil(Num(i)/3);endforn=1:400x(i,n)=cos(2*pi*fh(p)/8000*n)+cos(2*pi*fl(q)/8000*n);endendz=[sil,x(1,:),sil,x(2,:),sil,x(3,:),sil,x(4,:),sil,x(5,:),sil,x(6,:),sil,x(7,:),sil,x(8,:),sil];z1=awgn(z,snr);fid=fopen('d:\out1.dat','w');fwrite(fid,z1,'double');end描述:生成一个拨号信号加噪声的编码信号,其中拨号为8位自己输入。噪声系数使用了awgn系统函数,可以自己设定。并将产生的信号存至dat文件。用于之后的测试。感想:这是我第一次使用matlab,程序本身很简单,没什么好说的。但是正是这个程序让我了解的matlab的运行架构,以及一些基本的概念和函数,也懂得了如何使用帮助文件帮我解决之后的困难。解码程序functionjiema()fid=fopen('d:\out1.dat','r');[array,length]=fread(fid,'double');array=array';S=0;flag=0;for(i=0:length-200)for(j=1:200)S=S+array(1,j+i)^2;endS=S/2;if((S>180)&&(flag==0))flag=1;array2=array(i+50:i+254);M=[1820222431343842];K=goertzel(array2,M+1);K=abs(K);%disp(K);if((K(1,1)>31)&&(K(1,5)>31))disp('1');elseif((K(1,1)>31)&&(K(1,6)>31))disp('2');elseif((K(1,1)>31)&&(K(1,7)>31))disp('3');elseif((K(1,2)>31)&&(K(1,5)>31))disp('4');elseif((K(1,2)>31)&&(K(1,6)>31))disp('5');elseif((K(1,2)>31)&&(K(1,7)>31))disp('6');elseif((K(1,3)>31)&&(K(1,5)>31))disp('7');elseif((K(1,3)>31)&&(K(1,6)>31))disp('8');elseif((K(1,3)>31)&&(K(1,7)>31))disp('9');elseif((K(1,4)>31)&&(K(1,6)>31))disp('0');elseif((K(1,4)>31)&&(K(1,5)>31))disp('*');elseif((K(1,4)>31)&&(K(1,7)>31))disp('#');elseif((K(1,1)>31)&&(K(1,8)>31))disp('A');elseif((K(1,2)>31)&&(K(1,8)>31))disp('B');elseif((K(1,3)>31)&&(K(1,8)>31))disp('C');elseif((K(1,4)>31)&&(K(1,6)>31))disp('D');endendif(S<175)flag=0;endend描述:解码程序,可正确解出任意位长,噪声为2dB以下的拨号信号。设计思路:首先需要加窗检测功率段,以确定哪些地方时拨号信息,哪些地方时静音信息。程序中采用最傻瓜的穷举法,遍历每一个点,取之后的200个点算平方和,思路简单,但是程序效率不高,由于这次实验只要求加入8个拨号,运算时间也不长,但是如果信号多了以后要考虑优化算法。并且使用了一个flag标记位使得每个拨号功率段只解码一次,防止多次解码。解码方面直接套

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论