实验1 双音多频电话拨号音产生实验报告

合集下载

数字信号处理在多音频拨号系统中的应用实验

数字信号处理在多音频拨号系统中的应用实验

实验四:数字信号处理在多音频拨号系统中的应用1、实验目的了解电话中双音多频(DMTF)信号的产生与检测1、程序清单%DTMF双音多频拨号信号的生成和检测仿真程序:exp6.m 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]; %8个基频对应的8个K值f1=[697,770,852,941];%行频率向量f2=[1209,1336,1477,1633];%列频率向量TN=input('键入6位电话号码='); %输入6位数字TNr=0%接受段电话号码初值为零form=1:6;%分别对每位号码数字处理:产生信号,发声,检测d=fix(TN/10^(6-m));%计算出第m位号码数字TN=TN-d*10^(6-m);for p=1:4;for q=1:4;iftm(p,q)==abs(d);break,end %检测与第m位号码相符的列号qendiftm(p,q)==abs(d);break,end %检测与第m位号码相符的列号pendn=0:1023;%为了发声,加长序列x=sin(2*pi*n*f1(p)/8000)+sin(2*pi* n*f2(q)/8000);%构成双频信号sound(x,8000);%发出声音pause(0.1)%相邻号码响声之间加0.1秒停顿%接受检测端的程序X=goertzel(x(1:N),K+1);%用Goertzel算法计算八点DFT样本val=abs(X);%列出八点DFT的模subplot(3,2,m);stem(K,val,'.');grid;xl abel('k');ylabel('|X(k)|')%画出8点DFT的幅度axis([10 50 0 120])limit=80;%基频检测门限为80for s=5:8;ifval(s)>limit,break,end %查找列号endfor r=1:4;ifval(r)>limit,break,end %查找行号endTNr=TNr+tm(r,s-4)*10^(6-m);%强6位电话号码表示成一个6位数,以便显示enddisp('接收端检测到的号码为:')disp(TNr)%显示接收到的6位电话号码%此程序为exp6的改进程序,与exp6的区别是:%(1)增加了输入电话号码长度判别语句,保证输入位数为6为;%(2)增加了首位非0识别,能保证类似"012345、001234、000123、000000"号码正确识别与显示.clc;clear;tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,6 8];N=205;K=[18,20,22,24,31,34,38,42];f1=[697,770,852,941];f2=[1209,1336,1477,1633];first_flag=0;TN0=input('please input telephone number (8bit) is =','s'); %输入6位电话号码,以字符型输入TN=str2num(TN0); %将字符型转换为实数类型len=length(TN0);%将字符型数据的长度if len==8 %若输入位数为6位,则顺序执行;否则输入号码不是6位(少于6位或大于6位),则输出错误提示信息TNr=0;for m=1:8d=fix(TN/10^(8-m));TN=TN-d*10^(8-m);temp_number(m)=d; %将每位号码保存在数组中for p=1:4for q=1:4if tm(p,q)==abs(d)break;endendif tm(p,q)==abs(d)break;endendn=0:1023;x=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2 (q)/8000);sound(x,8000);pause(0.2);X=goertzel(x(1:N),K+1);val=abs(X);subplot(4,2,m);stem(K,val,'.');grid;xlabel('K');ylabel('|X(k)|');axis([10 50 0 120]);limit=80;for j=5:8if val(j)>limitbreak;endendfor r=1:4if val(r)>limitbreak;endendTNr=TNr+tm(r,j-4)*10^(8-m);if (m==1)&(TNr==0)first_flag=1;endendif(first_flag==1) %判断首位是否为0,如果为0,显示结果将补0,直至首位非0位add_zero='0';%字符型变量初始化temp_zero='0';for k=2:5if temp_number(k)==0 %判断需要补几位0,此程序的目的是要保证类似“001234、000123、000000”显示正确add_zero=strcat(add_zero,temp_zero); %字符型变量组合elsebreak;endendTNr_disp_0=num2str(TNr); %实数型变量转字符型变量TNr_disp=strcat(add_zero,TNr_disp_0);first_flag=0;elseTNr_disp=num2str(TNr);add_zero='';endTNr_disp_0=num2str(TNr);TNr_disp=strcat(add_zero,TNr_disp_0) disp('telephone number from the receiver is:');disp(TNr_disp);elsedisp(TN0);disp('please input the right telephone number(8 bit)');end%DTMF双音多频拨号信号生成与检测,滤波器组方法%此程序为滤波器组方法的改进程序,与原有滤波器组方法的区别是:%(1)增加了输入电话号码长度判别语句,保证输入位数为6为;%(2)增加了首位非0识别,能保证类似"012345、001234、000123、000000"号码正确识别与显示.clc;clear;%首先设计带通滤波器组,利用滤波器组检测信号rp=1;rs=30;fs=8000; %采样频率8kHzfpl1=677;fph1=717;fsl1=657;fsh1=737; fpl2=750;fph2=790;fsl2=730;fsh2=810; fpl3=832;fph3=872;fsl3=812;fsh3=892; fpl4=921;fph4=961;fsl4=901;fsh4=981; fpl5=1179;fph5=1239;fsl5=1149;fsh5=1269;fpl6=1306;fph6=1366;fsl6=1276;fsh6=1 396;fpl7=1447;fph7=1507;fsl7=1417;fsh7=1 537;fpl8=1603;fph8=1663;fsl8=1573;fsh8=1 693;wpl1=fpl1/(fs/2);wph1=fph1/(fs/2);wsl1=fsl1/(fs/2);wsh1=fsh1/(fs/2);wpl2=fpl2/(fs/2);wph2=fph2/(fs/2);wsl2=fsl2/(fs/2);wsh2=fsh2/(fs/2);wpl3=fpl3/(fs/2);wph3=fph3/(fs/2);wsl3=fsl3/(fs/2);wsh3=fsh3/(fs/2);wpl4=fpl4/(fs/2);wph4=fph4/(fs/2);wsl4=fsl4/(fs/2);wsh4=fsh4/(fs/2);wpl5=fpl5/(fs/2);wph5=fph5/(fs/2);wsl5=fsl5/(fs/2);wsh5=fsh5/(fs/2);wpl6=fpl6/(fs/2);wph6=fph6/(fs/2);wsl6=fsl6/(fs/2);wsh6=fsh6/(fs/2);wpl7=fpl7/(fs/2);wph7=fph7/(fs/2);wsl7=fsl7/(fs/2);wsh7=fsh7/(fs/2);wpl8=fpl8/(fs/2);wph8=fph8/(fs/2);wsl8=fsl8/(fs/2);wsh8=fsh8/(fs/2);wp1=[wpl1 wph1];ws1=[wsl1 wsh1]; wp2=[wpl2 wph2];ws2=[wsl2 wsh2]; wp3=[wpl3 wph3];ws3=[wsl3 wsh3]; wp4=[wpl4 wph4];ws4=[wsl4 wsh4]; wp5=[wpl5 wph5];ws5=[wsl5 wsh5]; wp6=[wpl6 wph6];ws6=[wsl6 wsh6]; wp7=[wpl7 wph7];ws7=[wsl7 wsh7]; wp8=[wpl8 wph8];ws8=[wsl8 wsh8];[N1,wc1]=buttord(wp1,ws1,rp,rs) [Bz1,Az1]=butter(N1,wc1)[N2,wc2]=buttord(wp2,ws2,rp,rs) [Bz2,Az2]=butter(N2,wc2)[N3,wc3]=buttord(wp3,ws3,rp,rs) [Bz3,Az3]=butter(N3,wc3)[N4,wc4]=buttord(wp4,ws4,rp,rs) [Bz4,Az4]=butter(N4,wc4)[N5,wc5]=buttord(wp5,ws5,rp,rs) [Bz5,Az5]=butter(N5,wc5) [N6,wc6]=buttord(wp6,ws6,rp,rs)[Bz6,Az6]=butter(N6,wc6)[N7,wc7]=buttord(wp7,ws7,rp,rs)[Bz7,Az7]=butter(N7,wc7)[N8,wc8]=buttord(wp8,ws8,rp,rs)[Bz8,Az8]=butter(N8,wc8)%产生DTMF信号tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,6 8]; %DTMF信号代表的16个数字%N=205;%K=[18,20,22,24,31,34,38,42]; %8个基频对应的8个k值f1=[697,770,852,941];f2=[1209,1336,1477,1633];first_flag=0;TN0=input('please input telephone number (6bit) is =','s'); %输入6位电话号码,以字符型输入TN=str2num(TN0); %将字符型转换为实数类型len=length(TN0);%将字符型数据的长度if len==6 %若输入位数为6位,则顺序执行;否则输入号码不是6位(少于6位或大于6位),则输出错误提示信息TNr=0;for m=1:6d=fix(TN/10^(6-m));TN=TN-d*10^(6-m);temp_number(m)=d; %将每位号码保存在数组中for p=1:4for q=1:4if tm(p,q)==abs(d) %检测列号break;endendif tm(p,q)==abs(d) %检测行号break;endendn=0:1023;x=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2 (q)/8000); %产生双频信号sound(x,8000);pause(0.1);%用滤波器组检测DTMFy1=filter(Bz1,Az1,x);y2=filter(Bz2,Az2,x);y3=filter(Bz3,Az3,x);y4=filter(Bz4,Az4,x);y5=filter(Bz5,Az5,x);y6=filter(Bz6,Az6,x);y7=filter(Bz7,Az7,x);y8=filter(Bz8,Az8,x);y=[y1;y2;y3;y4;y5;y6;y7;y8];figure;for k=1:8yy=y(k,:);subplot(4,2,k);plot(n,yy,'-');endlimit=0.6;for j=5:8if (max(abs(y(j,:)))>limit)break;endendfor r=1:4if (max(abs(y(r,:)))>limit)break;endendTNr=TNr+tm(r,j-4)*10^(6-m);if (m==1)&(TNr==0)first_flag=1;endendif(first_flag==1) %判断首位是否为0,如果为0,显示结果将补0,直至首位非0位add_zero='0';%字符型变量初始化temp_zero='0';for k=2:5if temp_number(k)==0 %判断需要补几位0,此程序的目的是要保证类似“001234、000123、000000”显示正确add_zero=strcat(add_zero,temp_zero); %字符型变量组合elsebreak;endendTNr_disp_0=num2str(TNr); %实数型变量转字符型变量TNr_disp=strcat(add_zero,TNr_disp_0);first_flag=0;elseTNr_disp=num2str(TNr);add_zero='';endTNr_disp_0=num2str(TNr);TNr_disp=strcat(add_zero,TNr_disp_0) disp('telephone number from the receiver is:');disp(TNr_disp);elsedisp(TN0);disp('the telepone number is wrong, please input the right telephone number(6 bit)');end3、仿真波形 输入123456输入123456781020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|2、 思考题简述DTMF 信号的参数:采样频率、DFT 的变换点数以及观测时间的确定原则。

双音多频拨号系统仿真设计报告

双音多频拨号系统仿真设计报告

双音多频拨号系统仿真设计报告首先,我们需要了解双音多频拨号系统的原理。

在DTMF系统中,每个按键都被映射到一个由两个频率组成的音调。

这些频率包括低频组(697Hz,770Hz,852Hz,941Hz)和高频组(1209Hz,1336Hz,1477Hz,1633Hz)。

通过同时发送低频和高频信号,我们就可以识别出用户所按下的按键。

为了设计一个可靠的DTMF拨号系统,我们需要进行系统的仿真设计。

首先,我们需要使用MATLAB等工具来实现DTMF信号的产生。

这可以通过使用矩阵乘法来实现,其中每个按键对应一个DTMF信号,并且通过调整每个信号的振幅和长度来控制其音调。

在仿真时,我们可以模拟用户按下按键来产生相应的DTMF信号。

然后,我们需要设计一个数字滤波器来对DTMF信号进行分析和处理。

这个数字滤波器通常被称为带通滤波器,它可以对特定的频率范围内的信号进行增益。

为了实现这个滤波器,我们需要使用数字滤波器设计工具,例如巴特沃斯滤波器或IIR滤波器。

通过将DTMF信号传递给数字滤波器,我们可以将其分解成低频组和高频组,并且可以判断出用户所按下的按键。

通过以上的仿真设计,我们可以模拟出一个完整的双音多频拨号系统。

通过调整输入的按键和观察界面显示的结果,我们可以验证系统的正确性和可靠性。

此外,通过对系统进行性能测试,我们还可以评估系统的响应时间和稳定性等指标。

总结起来,双音多频拨号系统仿真设计报告主要介绍了DTMF系统的原理和设计过程。

通过使用MATLAB等工具,我们可以实现DTMF信号的产生和分析,并通过设计合适的数字滤波器进行信号处理。

通过设计一个交互式界面,我们可以模拟整个DTMF拨号系统的运行过程,并评估其性能和可靠性。

多种信号的产生

多种信号的产生

深圳大学实验报告
课程名称:现代通信原理
实验项目名称:通信原理多种信号的产生
学院:信息工程
专业:通信工程
指导教师:苏恭超
报告人:王志鹏学号:2012130200 班级:通信2班实验时间:2014.10.23
实验报告提交时间:2014.11.6
教务处制
实验1-3数据
实验结论:
:1、信源编码中用同步信号源后,能避免信号接收不连续的现象,因而实验者能观测到稳定的编码。

、电话拨号有两种,脉冲和音频,所谓音频也称双音多频(
拨号时每按一个键,有两个音频频率叠加成一个双音频信号,十二个按键由七个音频频率区分。

双音多频信号),电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。

双音多频的拨号键盘的矩阵,每一行代表一个低频,每一列代表一个高频。

每按一个键就发送一个高频和低频的正弦信号组'1'相当于697和1209赫兹(Hz)。

交换机可以解码这些频率组合并确定所对应的按键。

:1、绝对码和相对码的变化关系是异或运算。

若绝对码是
,则其相对码与前一个相对码相同。

:1. 双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频。

每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209。

频谱分析的应用--话拨号音合成与识别

频谱分析的应用--话拨号音合成与识别
式中:k=0,1,2, … ,N; 初始条件 Qm [ −1]= Qm [ −2]= 0;
WNm = e

2π N
m

由于对 DTMF 信号解码只需其频谱的幅值信息,因而可舍去相位信息,输出频谱的 幅度平方值,即
X [m = ]
2ห้องสมุดไป่ตู้
ym [ N = Qm [ N ] + Qm [ N − 1] − 2 cos ]
2.DTMF 信号识别 DTMF 信号的检测是将两个信号频率提取出来,从而确定所接收的 DTMF 是哪个数 字。利用 DFT 对 DTMF 信号进行 N 点的频谱分析,根据谱峰出现的频率点位置 Ni 就可
以确定 DTMF 信号的频率 fi:
f = Ni × f s / N i
DTMF 信号的解码要求快速、简单、准确,Goertzel 算法比 FFT 算法更为有效适用。 因为 FFT 涉及较多的复数乘法和加法,Goertzel 算法可以将复数运算转化为实数运算,从 而减少了计算量,提高了计算速度。Goertzel 算法的基本思想是对 DFT 公式进行转换, 使其成为一个二阶传输函数:
= x[n] sin(ωH n) + sin(ωL n)
式中:ωH 2 = = π f H / f s , ωL 2π f L / f s 分别表示高频低频频率,电话信号的典型抽样频率 为 f s = 8kHz 。 DTMF 信号的标准是:在传送过程中每个按键字占用 100ms,其中信号必须持续至少 40ms,且不得多于 55ms,100ms 里的其余时间为静音(无信号) 。 表 4.1 按键频率对应表 fL 697 Hz 770 Hz 852 Hz 941 Hz W=2pi*fL/fs rad/s 697 Hz 770 Hz 852 Hz 941 Hz 0.5474 0.6048 0.6692 0.7391 N=106 m 9.2 10.2 11.2 12.47 fH 1209 Hz 1 4 7 * m 取整 9 10 11 12 1209 Hz 1336 Hz 1477 Hz 1336 Hz 2 5 8 0 W=2pi*fH/fs rad/s 0.9495 1.0493 1.1600 1477 Hz 3 6 9 # N=106 m 16.02 17.70 19.57 m 取整 16 18 20

实验一、双音多频信号发生器1

实验一、双音多频信号发生器1

实验一、双音多频信号发生器本实验需要产生两个不同频率的正弦信号,其中一个我们把它设定为750HZ,另外一个设定为1500HZ,然后将两个信号叠加在一起。

我们知道双音多频信号是在两个不同频率正弦波叠加的基础上在100ms时间内产生至少45ms的信号,然后剩下的时间保持静音。

在这里我们用一个计数器来控制时间。

首先进入Matlab,在菜单栏选择File>New>Model新建一个模型文件。

并给这个模型文件取名保存,本示例中,将文件保存为dtmf.mdl。

在dtmf文件窗口的工具栏点击Library Browser按钮,打开Simulink Library Browser窗口。

在Simulink Library Browser窗口中,点击展开Altera DSP Builder目录,可以看到DSP Builder工具支持的各种模型和组件。

这些组件可以被Simulink方便的调用来建立模型,在设计完成并验证通过之后,DspBuilder工具能将其直接转化成硬件描述语言,从而在硬件上实际运行并验证设计。

在Simulink Library中选择Altera DSP Builder>Rate Change>clockaltr,将输入频率设置为24khz,改名为clk。

在Simulink Library中选择Simulink>Sources>Pulse Generator,命名为Pulse,参数设置成如下所示再添加一个计数器模块用来计数控制后面的信号输出,在Simulink Library中选择Altera DSP Builder>Arithmetic>Increment Decrement,命名为Inc,输出位宽设置成11位,因为采样频率为24K,在100ms应该有2400个点,50ms能记1200个点。

让计数器的值与设定的常数1024做比较,当计数超过1024时,输出一个低电平,让随后产生的双音多频信号保持静音。

北邮双音多频MATLAB实验报告

北邮双音多频MATLAB实验报告

n=0:204; for i=1:10 a1=[0,a10(i)];a2=[0,a20(i)];b1=[1,b11(i),1];b2=[1,b21(i),1]; y(i,:)=filter(a1,b1,h)+filter(a2,b2,h); %两个冲激响应相叠加 end tone=y(d+1,:); %tone 为相应的按键音(正弦函数) figure(1) for t=1:10 subplot(5,2,t) plot(n/205,y(t,:));title(strcat('数字键',num2str(t-1))); end
end disp('双音多频信号已生成并发出') disp('接收端检测到的号码: ') disp(setstr(d_out)) 程序调试截图
信号频谱图:
观察上面的频谱图,说明接收信号正好是‘78934620’ ,输入输出一致,程序运 行无误 实验总结 这次 matlab 实验明显比之前的有难度, 在掌握了第四章 IIR 数字滤波器设计相关 知识的基础上又有了新的拓展和延伸。过程中出现了一些问题,比如 GOERTZEL 函数实现, 矩阵长度不匹配导致程序不断报错,在自己的研究和同学的帮助下总 算完成了实验,对于 matlab 编程有了深入的了解
DTMF 信号检测(GOERTZEL 算法)
VK X(n) z-1 yK(n)
z-1 z-1
MATLAB 代码 f=[697 770 852 941 1209 1336 1477 1633]; fs=8000; fn=fs/N; k=f/fn; x=[ysin,zeros(1,N)]; tic;%timer start Vk(1)=0;Vk(2)=0; for i1=1:8 w=2*cos(2*pi*k(i1)/N); for j1=3:N Vk(j1)=w.*Vk(j1-1)-Vk(j1-2)+x(j1); end Xk(i1)=Vk(N).^2+Vk(N-1).^2-w*Vk(N)*Vk(N-1); end X=Xk/100; 主程序 N=205; tm=[49,50,51;52,53,54;55,56,57;0,48,0]; f=[697 770 852 941 1209 1336 1477 1633]; d_in=input('请输入电话号码: ','s'); %输入信号 d_in for l=1:8 d=d_in(l)-48; d_tone=dsin(d); %产生拨号音 sound(d_tone,8000); %播放拨号音 pause(0.2) X=GOERT(d_tone,N); % GOERT 算法求出接收端信号的频率分量 value=abs(X); figure(2) subplot(4,2,l) stem(f,value,'.');grid; set(gca,'XTick',f); title('FFT x(n)');xlabel('频率 k/Hz');ylabel('幅度|X(k)|'); limit=50; %设置门限值 for s=5:8 if value(s)>limit break; %高频门限检测 end end for r=1:4 if value(r)>limit break; %低频门限检测 end end d_out(l)=tm(r,s-4); %还原信号

双音多频DTMF接收实验

双音多频DTMF接收实验

《程控交换》实验报告实验四 双音多频DTMF 接收实验----------------------------------------------------------------------------------------------------------------------一、实验目的1、了解电话号码双音多频信号在程控交换系统中的发送和接收方法。

2、熟悉该电路的组成及工作过程。

二、实验内容1、用示波器观察发送DTMF 信号的波形。

2、用示波器观察DTMF 信号接收的波形。

三、实验原理1、双音多频拨号简单介绍:在电话单机中,有两种拨号方式,即脉冲拨号 和双音多频拨号。

双音多频拨号方式中的双音多频是指用两个特定的单 音频信号的组合来代表数字或功能,两个单音频的频率不同,所代表的 数字和功能也不同,在双音多频电话机中有16个按键,其中有10个数 字键0~9,6个功能键*、#、A 、B 、C 、D ,按照组合的原理,它必须有8 种不同的单音频信号,由于采用的频率有8种,故又称之为多频,又因 以8种频率中任意抽出2种进行组合,又称其为8中取2的编码方式。

2、双音多频接收电路:3、电路的工作原理:它完成典型DTMF 接收器的主要功能:输入信号的高、低频 组带通滤波、限幅、频率检测与确认、译码、锁存与缓冲输出及振荡,监测 等,具体说就是DTMF 信号从芯片的输入端输入,经过输入运放和拨号音抑 制滤波器进行滤波后,分两路分别进入高、低频组滤波器以分离检测出高、 低频组信号。

如果高、低频组信号同时被检测出来,便在EC 0输出高电平作 为有效检测DTMF 信号的标志;如果DTMF 信号消失,则EC 0即返至低电平, 与此同时EC 0通过外接R 向C 充电,得到CI ,GT 。

(通常此两端相短接)积 分波形,如图5-4所示,若经t GTP 延时后,CI ,GT 。

电压高于门限值V Tst 时, 产生内部标志,这样,该电路在出现EC 0标志时,将证实后的两单音送往译 码器,变成4比特码字并送到输出锁存器,而CI 标志出现时,则该码字送信号输入到三态输出端D01——D04,另外CI信号经形成和延时,从CID端输出,提供一选通脉冲,表明该码字已被接收和输出已被更新,如若积分电压降到门限VTst以下,使CID也回到低电平。

双音多频

双音多频

信号工程处理课设报告——双音多频(DTMF)信号的检测专业:通信工程学号:09024121姓名:宋江雪完成日期:2012.5一.实验目的1.理解 DTMF 信号的产生原理及其检测方法2.提高分析和解决问题的能力3.提高数字信号处理的实际能力二、实验内容1.设置参数,读入电话号码。

2.根据输入的电话号码产生包含两个频率分量的 205 点时域离散DTMF 信号。

3.对时域离散 DTMF 信号利用Goertzel 算法(参见附录)进行频率检测,画出幅度谱。

4.根据幅度谱的两个峰值,分别查找并确定所输入的电话号码。

小提示:因为程序产生的是纯音调信号,所以不需检测二次谐波分量以区分语音和按键音调信号。

三、实验原理双音多频(Dual Tone Multi Frequency, DTMF )信号是音频电话中的拨号信号,由美国AT&T 贝尔公司实验室研制,并用于电话网络中。

这种信号制式具有很高的拨号速度,且容易自动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。

这种双音多频信号制式不仅用在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。

这些系统中用户可以用电话发送DTMF 信号选择语音菜单进行操作。

DTMF 信号系统是一个典型的小型信号处理系统,它要用数字方法产生模拟信号并进行传输,其中还用到了D/A 变换器;在接收端用A/D 变换器将其转换成数字信号,并进行数字信号处理与识别。

为了系统的检测速度并降低成本,还开发一种特殊的DFT 算法,称为戈泽尔(Goertzel)算法,这种算法既可以用硬件(专用芯片)实现,也可以用软件实现。

下面首先介绍双音多频信号的产生方法和检测方法,包括戈泽尔算法,最后进行模拟实验。

1. 双音多频(DTMF )信号的组成在电话中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz 和941Hz ;高频带也有四个频率:1209Hz,1336Hz,1477Hz 和1633Hz.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

沈阳工程学院
学生实验报告
实验室名称:通信实验室课程名称:数字传输技术
实验名称:双音多频电话拨号音产生实验实验日期:2015年11月6日
班级:通信32 姓名:张翼学号:2013312211
指导教师:何思远成绩:
一、实验目的
1. 理解双音多频电话拨号音产生的原理。

2. 掌握使用MATLAB语言产生双音多频电话拨号音的方法。

二、实验原理
电话拨号产生的电话号码是通过双音多频(DTMF)格式从电话机传送给交换机的。

所谓双音多频,就是利用两个规定频率的正弦波去代表电话机的某一个按键,当按下某按键时,就发送相应的一组正弦波。

交换机一方通过检测这组正弦波的频率来识别相应的号码信息。

DTMF规定的电话拨号按键与发送正弦波频率组的对应关系如图1所示。

图1 DTMF规定的电话拨号按键与发送正弦波频率组的对应关系
此外,Matlab也提供了关于电话拨号的演示程序phone。

图2为使用phone命令打开的演示窗口。

图2 Matlab中的phone演示窗口
三、实验内容及要求
根据双音多频电话拨号音产生的原理,用一个函数文件(Function File)产生双音多频电话拨号音。

要求该函数能够根据输入的电话号码产生拨号音频,每个号码的DTMF音持续时间为0.3秒,拨号间隔为0.1秒。

四、程序代码
function y=myphone(num_str)
%输入num_str为电话号码字符串,为1.2.3.4.5.6.7.5.6.0.*.#
%输出为相应的拨号音效矩阵
%如果不给出输出变量,则从声卡输出拨号音频
freq_low=[697 770 852 941]; %低频频率
freq_Hgh=[1209 1336 1477]; %高频频率
time_of_num=0.3; %每个号码的DTMF音持续时间
Fs=8000; %信号采集率
wav=inline('0.25*sin(2*pi*p(1)*[1/p(3):1/p(3):p(4)])+0.25*sin(2*pi*p(2)*[1/p(3):1/p(3):p(4)])','p'); %P=[fL,fH,time_of_num]
%参数的含义:[高频率,低频率,采样率,持续时间]
XX=[]; %提高运行速度
for k=1:length(num_str)
switch num_str(k) %根据拨号确定双音频对case '1'
fL=freq_low(1);fH=freq_Hgh(1);
case '2'
fL=freq_low(1);fH=freq_Hgh(2);
case '3'
fL=freq_low(1);fH=freq_Hgh(3);
case '4'
fL=freq_low(2);fH=freq_Hgh(1);
case '5'
fL=freq_low(2);fH=freq_Hgh(2);
case '6'
fL=freq_low(2);fH=freq_Hgh(3);
case '7'
fL=freq_low(3);fH=freq_Hgh(1);
case '8'
fL=freq_low(3);fH=freq_Hgh(2);
case '9'
fL=freq_low(3);fH=freq_Hgh(3);
case '0'
fL=freq_low(4);fH=freq_Hgh(2);
case '*'
fL=freq_low(4);fH=freq_Hgh(1);
case '#'
fL=freq_low(4);fH=freq_Hgh(3);
otherwise
error('输入号码错误');
end
X=wav([fL,fH,Fs,time_of_num]); %产生拨号频率信号X=[X,zeros(1,Fs*0.1)]; %添加拨号间隔XX=[XX,X]; %多个拨号顺序合成
end
if nargout==1
y=XX; %返回
else %如果无返回变量,则播放声音,并做出波形图sound(XX,Fs);
plot([1:length(XX)]./Fs,XX);
axis([0 length(XX)/Fs -1 1]);
xlabel('time(sec)');
title(['The telephone number is : ',num_str]);
end
编辑并存盘为myphone.m后,执行:
(1)myphone('31975555');
从声卡输出拨号DTMF音,并显示出拨号波形图,如图3所示。

(2)y=myphone('31975555');
wavwrite(y,8000,'C:\mytelephonenum31975555.wav');
将拨号声音存盘为wav文件:mytelephonenum31975555.wav
图3 电话号码31975555的拨号波形。

相关文档
最新文档