- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DTMF信号辨识实验报告(北航电子信息工程学院dsp实验)
DTMF信号辨识实验报告 2012年12月
PAGE7 / NUMPAGES7
DTMF信号辨识实验报告
班级:xxxxxxxx
学号姓名:x x
实验目的
熟悉双音频信号的产生、分析与检测原理
熟悉MATLAB工具箱的使用
实验原理及要求
双音多频(DTMF)是按键电话通信的德国名称,它等效于贝尔系统中所用的接触音频系统。在DTMF通信系统中,高频音与低频音的一个组合表示表示一个特定的数字或者字符(*和#)。8个频率按以下矩阵图提供给16个字符或数字。其中12个(数字和*、#)分配如图示,其他4个保留备用。
第一列1209Hz第二列1336Hz第三列1477Hz第四列1633Hz第一行697Hz123A第二行770Hz456B第三行852Hz789C第四行941Hz*0#D拿起电话听筒放在耳???会听到拔号音,若按下重拔(Redial)键,则电话机会自动重拔上次所拔电话号码,对双音多频电话机,此时会在耳边听到代表不同数字的声音,每个数字都由二个不同频率的信号组成。
从.wav文件中提取频谱的方法:你可以用matlab函数wavread(具体用法请参阅matlab help)把数据从.wav文件中读出来(这些数据是时域上的的采样数据,采样率可以从wavread函数的返回值中获得),并采用一定手段设定一个阈值,当数据的幅值大于这个阈值时就确定此时为数字按键声音数据的开始,然后从此向后取一定数量的采样数据(如512点),并对它进行fft变换,得到这些数据对应的频谱,从而确定该声音文件对应的数字键。
该实验中已经提供给你一些录好的加有背景噪音的电话数字按键的声音文件(.wav文件),这些文件中包括了一些电话号码(013671367249,它们的位数不一定相同)。请你应用上面提供的方法,识别出这些电话号码。
你所编写的处理程序要能达到如此程度:以一个包含拔号信号的数据文件为输入,其输出就是电话号码,处理过程中不需要人工干预(可以采用display函数显示这些数字键)。
实验内容及结果:
以所给定的第一个双音频信号(1.mat)为例。
1、读取双音频信号文件:
fh = [1209 1336 1477 1633];
fl = [697 770 852 841];
K=[31,34,38,42,18,20,22,24];
M = 20;
z1=input(信号=);
plot(z1)
生成双音频信号波形如下图所示:
2、加滑动平均窗,对信号采样
实现该功能的程序如下:
L = length(z1);
for j = 1:L
z2(1,j) = z1(1,j)^2;
end
for r = 1:L-M
y(1,r)=sum( [z2(r:r+M)])/M;
end
figure;
plot(y(1,:));
经滑窗处理后的波形如下图所示:
3、提取部分信号进行频率变换
实现该功能代码如下:
ami=max(y)/2;
thup=1.05;
flag=0;d=1;
for f=1:size(z1,2)
if flag==0 (y(1,f)/ami)thup
e(d)=f;flag=1;
end
if flag==1 (y(1,f)/ami)0.3
d=d+1;flag=0;
end
if d8
break;
end
end
figure;
for g=1:8
for l = 1:205
h=e(g);
z3(1,l) = z1(1,l+h-1);
end
subplot(2,4,g);
plot(z3);
N=205;
for i=1:8
v(1)=z3(1);
v(2)=2*cos(2*pi*K(i)/N)*v(1)+z3(2);
for n=3:205
v(n)=2*cos(2*pi*K(i)/N)*v(n-1)-v(n-2)+z3(n);
end
temp=v(N)^2+v(N-1)^2-2*cos(2*pi*K(i)/N)*v(N)*v(N-1);
w(i) = sqrt(temp);
w1(g,i) = w(i
文档评论(0)