1、实验六 数字信号处理在双音多频拨号系统中的应用双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国 ATclc;开 始输入 8 位电话号码检测与 m 位号码相符的低频带检测与 m 位号码相符的高频带构成双音频信号 )80/2sin()80/2sin()(1ffx 用 Goertzel 算法计算八点 DFT 样本画出 8 点 DFT 样本幅度检测 8 点 DFT 模值查找 8 点样本所对应的低频带与高频带输出检测出的 8 位电话号码结 束tm=1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68; % DTMF信号代表
2、的 16个数N=205;K=18,20,22,24,31,34,38,42;f1=697,770,852,941; % 行频率向量f2=1209,1336,1477,1633; % 列频率向量TN=input(键入 6位电话号码= ); % 输入 6位数字TNr=0; %接收端电话号码初值为零for l=1:6;d=fix(TN/10(6-l);TN=TN-d*10(6-l);for p=1:4;for q=1:4;if tm(p,q)=abs(d); break,end % 检测码相符的列号 qendif tm(p,q)=abs(d); break,end % 检测码相符的行号 pendn=
3、0:1023; % 为了发声,加长序列x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);% 构成双频信号sound(x,8000); % 发出声音pause(0.1) % 接收检测端的程序X=goertzel(x(1:205),K+1); % 用 Goertzel算法计算八点 DFT样本val=abs(X); % 列出八点 DFT向量subplot(3,2,l);stem(K,val,.);grid;xlabel(k);ylabel(|X(k)|) % 画出 DFT(k)幅度axis(10 50 0 120)limit = 80; %for
4、 s=5:8;if val(s) limit, break, end % 查找列号endfor r=1:4;if val(r) limit, break, end % 查找行号endTNr=TNr+tm(r,s-4)*10(6-l);enddisp(接收端检测到的号码为:) % 显示接收到的字符disp(TNr)运行程序,根据提示键入 6位电话号码 123456,回车后可以听见 6位电话号码对应的DTMF信号的声音,并输出相应的 6幅频谱图如图 10.10.1所示,左上角的第一个图在 k=18和 k=31两点出现峰值,所以对应第一位号码数字 1。最后显示检测到的电话号码 123456。6 位电
5、话号码 123456的 DTMF信号在8个近似基频点的 DFT幅度。1、实验内容 6 位电话号码的 DTMF双频拨号信号的生成和检测程序清单 exp6.m已经在实验指导中给出。运行程序,并输入 6位电话号码 123456,则输出相应的 6幅频谱图如图 10.10.1所示,左上角的第一个图在 k=18和 k=31两点出现峰值,所以对应第一位号码数字 1。其他 5个图请读者对照表 10.10.1和表 10.10.2,确定确定其对应的数字,验证程序输出的电话号码“123456”是正确的。2、实验内容 只要对 6位电话号码检测程序 exp6.m作如下修改,即可产生、检测和识别 8位电话号码。(1)将第
6、 8行改为 TN=input(键入 11位电话号码= );(2)将第 1012行改为for l=1:11;d=fix(TN/10(11-l); TN=TN-d*10(11-l); (3)将第 26行改为 subplot(6,2,l);(4)将第 36行改为 TNr=TNr+tm(r,s-4)*10(11-l);修改后的程序为 exp8.m,程序清单见程序集。运行程序 exp8.m,输入输入 8位电话号码 14079500,则输出相应的 8幅频谱图如图 10.10.2所示。最后显示检测到的电话号码14079500。数字信号处理(第三版)第十章 实验 6程序:exp8.m%clear all;cl
7、c;tm=1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,68; % 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(键入 11位电话号码= ); % 输入 11位数字TNr=0; %接收端电话号码初值为零for l=1:11;d=fix(TN/10(11-l); TN=TN-d*10(11-l); for p=1:4;for q=1:4;if tm(p,q)=abs(d); break,end
8、% 检测码相符的列号 qendif tm(p,q)=abs(d); break,end % 检测码相符的行号 pendn=0:1023; % 为了发声,加长序列x = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000);% 构成双频信号sound(x,8000); % 发出声音pause(0.1) % 接收检测端的程序X=goertzel(x(1:205),K+1); % 用 Goertzel算法计算八点 DFT样本val = abs(X); % 列出八点 DFT向量subplot(6,2,l);stem(K,val,.);grid;xlabel(k);ylabel(|X(k)|) % 画出 DFT(k)幅度axis(10 50 0 120)limit = 80; %for s=5:8;if val(s) limit, break, end % 查找列号endfor r=1:4;if val(r) limit, break, end % 查找行号endTNr=TNr+tm(r,s-4)*10(11-l);enddisp(接收端检测到的号码为:) % 显示接收到的字符disp(TNr)