《DSP实验报告DTMF信号产生与检测.docx》由会员分享,可在线阅读,更多相关《DSP实验报告DTMF信号产生与检测.docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、DTMF 信号的产生与检测一、试验目的1、 了解语音拨号的产生和原理;2、 理解和把握 DTMF 信号的产生和检测;3、学会使用 MATLAB 软件进展仿真分析;二、试验原理实际的拨号系统中,每一个按键都对应着一个高频信号和一个低频信号。按下一个键之后,就会产生有一个相应的双音频信号。通过一个窗函数就可以将其检测出来。但在实际的过程中要考虑拨号时间之间的间隔。窗的长短要适宜,不能让窗同时滑过两个语音信号,否则就检测不出来。各按键所对应的语音信号:1209Hz1336Hz1477Hz1633Hz697Hz123A770Hz456B852Hz789C941Hz*0#D任意按键产生的信号为:Yn=c
2、os(wl*t)+cos(wh*t)承受 Goertzel 算法进展谱分析:Goertzel 算法本质上是一种非标准 DFT,它是 DTMF 检测器的根底。利用这种方法从输入信号中提取频谱信息有效且快速。该算法实际上是利用双极点 IIR 滤波器来有效地计算 DFT 值。一般的 DFT 在开头处理之前都需要有肯定的数据量,而 Goertzel 算法的逐点递归构造就有明显的优点,可以有效地提高系统的响应速度。Goertzel 滤波器在经过肯定数量的样点 N(等效于 DFT 块的大小)后,输出便聚合到一个 Go-ertzel 算法的内部变量 Vii(n)上,并由它得出幅度的平方。简洁的数学描述如下:
3、(1) 递归计算:vdn)=2cos(2knN)vdn1)vk(n2)+x(n)其中 vd1)=0,v。(-2)=0,x(n)=input,n 0N。(2) 每 N 次循环计算一次:Ix(k)12=yk(N)yk+(N)=V,(N)+Vk2(N1)2cos(2knN)W(N)Vd(N1)由上面的分析可以看出,Goertzel 算法只需要对行频和列频及其相应的二次谐波,共计 8 个频点进展能量计算。由于只需要少数的频率值并且只对这些值进展滤波,所以 Goertzel 算法比 DFT 快得多。其中的二次谐波能量能够把 DTMF 信号与声音信号区分开来。Goertezl 算法的系统函数和流图如以下图
4、所示。1 - cosw* 1z1 - z cos w * 1z + z -2H (Z ) =计算 y k 在 k=8 个值:k 的准确值k 取整误差69717.861180.13977019.731200.26985221.833220.16774124.113240.113120930.981310.019133634.235350.235147737.848380.152163341.816420.154三、试验内容及结果1、 产生一个双音频信号并参加噪声tm=1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68; N=205;K=18,20,22,24,31,34,
5、38,42; f1=697,770,852,941; f2=1209,1336,1477,1633;TN=input(”键入8位 号码=”)TNr=0;A=zeros(1,400); x=zeros(8,400); X=0;Y=1*rand(1,400*16+1);for l=1:8;d=fix(TN/10(8-l);TN=TN-d*10(8-l);for p=1:4;for q=1:4;if tm(p,q)=abs(d);break,endendendif tm(p,q)=abs(d);break,end endn=1:400;x(l,:)=2*sin(2*pi*n*f1(p)/8000)+
6、2*sin(2*pi*n*f2(q)/8000); X=X,x(l,:),A;X=X+Y;for i=0:7;X1=goertzel(X(1+800*i:205+800*i),K+1); val=abs(X1);for s=5:8;if val(s)80,break,endendfor r=1:4;if val(r)80,break,endendendTNr=TNr+tm(r,s-4)*10(7-i);disp(”承受端检测到得号码为:”) disp(TNr)运行结果:键入 8 位 号码=82317110 TN =82317110接收端检测到的号码为:82317110产生的信号如下:2、 对给
7、定的信号进展检测(1) 加滑动平均窗,对信号进展采样:L = length(z1); for j = 1:Lz2(1,j) = z1(1,j)2;endfor r = 1:L-My(1,r)=sum(z2(r:r+M)/M;endfigure; plot(y(1,:);处理后的波行如下:(2) 用戈泽尔算法计算某些点的 DFTH=1.10;for d=1:8key=(d-1)*800+1; for f=key:key+800 if y(1,f)He(d)=f; break;else continue; endendendfigure; for g=1:8for l = 1:205h=e(g);
8、z3(1,l) = z1(1,l+h-1);end subplot(2,4,g); plot(z3);N=205;for i=1:8v(1)=z3(1);v(2)=2*cos(2*pi*K(i)/N)*v(1)+z3(2); for n=3:205v(n)=2*cos(2*pi*K(i)/N)*v(n-1)-v(n-2)+z3(n);endendtemp=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);变换前波形:变换后结果:(3) 依据频谱推断检测的号码:limit=80; for t=
9、5:8if w(t)limit break;endendfor s=1:4if w(s)limit break;endendif t=5Numout=s; elseif t=6Numout=s+3; elseif t=7Numout=t-1+s;elseNumout=0;endresult(g)=Numout; enddisp(result); end运行结果:a. 信噪比为 10db 时的检测结果:input M = 5082313214b. 信噪比为 5db 时的检测结果:input M = 5012345678c. 信噪比为 5db 时的检测结果:input M = 5012345678d. 信噪比为 1db 时的检测结果:input M = 5012345670四、 试验结论由上述试验过程可知,该试验设计的信号检测功能具有肯定的抗干扰力量。当所加的噪声不大时,可以检测出信号,但当所加的噪声太大,到达1db 时,就无法准确检测出结果来,会消灭错误。试验中遇到很多困难,也觉察了自己的缺乏。通过本次试验,使我对MATLAB 的使用有了肯定的了解,是学以致用的一次尝试!
限制150内