DTMF产生传输及检测软件仿真课程设计.docx

上传人:小飞机 文档编号:4884064 上传时间:2023-05-21 格式:DOCX 页数:23 大小:190.98KB
返回 下载 相关 举报
DTMF产生传输及检测软件仿真课程设计.docx_第1页
第1页 / 共23页
DTMF产生传输及检测软件仿真课程设计.docx_第2页
第2页 / 共23页
DTMF产生传输及检测软件仿真课程设计.docx_第3页
第3页 / 共23页
DTMF产生传输及检测软件仿真课程设计.docx_第4页
第4页 / 共23页
DTMF产生传输及检测软件仿真课程设计.docx_第5页
第5页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《DTMF产生传输及检测软件仿真课程设计.docx》由会员分享,可在线阅读,更多相关《DTMF产生传输及检测软件仿真课程设计.docx(23页珍藏版)》请在三一办公上搜索。

1、燕山大学课程设计指导书DTMF通信系统设计与仿真燕山大学信息科学与工程学院通信电子教研室1、任务、性质与意义用数学模型的方法对信息传输的过程进行仿真,是分析、设计及改进通信系统 性能的重要手段。本次课程设计的任务是综合运用通信原理、数字信号处理等课程 所学知识,实现一个双音多频(DTMF)信号传输过程的软件仿真。本次课程设计的性质是通信原理、数字信号处理等课的综合实践环节。它的意 义在于,通过本次课程设计可以从理论上加深对有关通信、数字信号处理原理的综 合理解,了解DTMF信号原理和用数字信号处理的方法实现DTMF信号的产生、 传输与检测的过程。还可以从实践能力上掌握一门新的计算机编程工具MA

2、TLAB 语言。2、基本原理2.1双音多频(DTMF)信号双音多频(DTMF)信号就是用两个不同频率的音频信号的组合来传输信息的一 种通信信号形式,可以用数学式表示为s(t) = A( c o2Sf t + c o 2Kf t)(1)式中fH和fL分别是高频组和低频组的两个信号频率。对这两个频率的要求是: 1、位于人而能够听到的音频频率范围内;2、频率间隔近似为乐音音阶的频率间隔 (按十二平均律,相邻各个音的频率呈等比关系,其比值约为1.059463,例如C3 130.8Hz,C4=261.7Hz,D4 293.7)。这种信号在电话线路上传输,而且声音悦耳。 在电话系统中,高低频组的频率已经标

3、准化,如图1所示。阁7Hz770Hz852Hz图1 DTMF拨号频率标准LU!20yJJz 1336112 1477Hz1633HzDTMF最早应用是在电话通信系统中作为控制信令使用的。在电话通信系统中,最早的控制信令是使用直流脉冲信号。脉冲拨号方式是由接在旋转拨盘位置上 的开关或电子开关控制二线电路的通与断。每拨出一位数字,都有唯一一串电流脉 冲相对应,图2中给出了数字3的电流脉冲序列。每个脉冲周期通常为100ms,其 中有40%的占空时间,在人工控制条件下,两个相继数字的时间间隔可以从0.5S到 数秒之间变化不等。由此可见,利用拨号脉冲拨号,发送一个10位长的号码大约需 要7秒的时间。单音

4、频,分为两组,通过拨号盘选拨号码时,各位数字由触键开关输入,其对应的 某个频率对(高频和低频)同时传输,图3所示为各频率对应位置。对DTMF信号 所规定的指标为:传送速率为每秒10个数字,即每个数字100ms。每个数字传送过 程中,信号必须存在至少45ms,且不得多于55ms,100ms里其余时间是静音。另 外ITU (国际电信联盟)还规定,DTMF信号在每个频率点上允许有1.5%的偏移,任 何超出给定3.5%的信号认为无效,拒绝承认接收。还规定,在最坏检测条件下,信 噪比不得低于15dB。显然。DTMF的拨号方式比双脉冲拨号方式可快至10倍,明 显缩短了拨号时间。而且DTMF拨号方式发出的信

5、号抗干扰能力大大高于脉冲拨号 方式。因此,目前普遍使用DTMF拨号方式。采用DTMF信号,用话音频率发送数字,可以避免占用额外的信道,又比脉 冲拨号方式节约时间。在通信、测量、控制、自动服务等领域有着广泛的应用。在 基于电话的各种信息服务系统中,广泛使用了 DTMF信号来传送按键操作信息。利 用这种按键信息,人们可以直接通过电话查询所需要的信息以及进行各种远程控制。 在实际系统中,首次拨号由程控交换机识别,完成主叫与被叫之间的接续;二次乃 至多次拨号的识别以及操作由用户系统自己完成。DTMF信号还可以用来在话音信 道上传送各种类型的控制指令,例如利用电话控制家用电器的启停,传送远方的状 态监测

6、信息。目前DTMF信号已经不仅仅限于在电话系统中应用,在测量、控制、 遥测遥控等各个领域都有应用。2.2 DTMF信号的硬件产生与检测通常是用硬件产生和检测DTMF信号。已经有多种专用的产生和检测DTMF 信号的集成电路器件。具有代表性的DTMF发送、接收器的型号为MT8860, MT8862, MT8870, MT8872 等。DTMF信号发送器电路原理如图3所示,它主要包括:(1)晶体振荡器一一外接 晶体(通常采用3.58MHz)与片内电路构成振荡器、经分频产生参考信号。(2)键控可 变速率时钟产生电路一一它是一种可变分频比的分频器,通常由n级移位寄存器与 键控反馈逻辑单元组成。(3)正弦

7、波产生电路一一它出正弦波编码器与D-A变换器 构成。通常可变速时钟信号先经过5位移位寄存器,产生一组5位移位代码,再由 可编程逻辑阵列(PLA)将其转换成二进制代码,送到D-A变换器转换成台阶形正弦 波。显然台阶的宽度等于时钟频率的倒数,这样形成的正弦波频率必然对应于时钟图3 DTMF信号发送器电路原理的速率和按键的号码。(4)混合电路将键盘所对应产生的行、列正弦波信号(即低 高群fL、单音)相加,混合成双音信号而输出。(5)附加功能单元,如含有单音抑制、 输出控制(禁止)、双键向按无输出等控制电路。DTMF接收器主要包括DTMF分组滤波器和DTMF译码器,其基本原理如图4 所示。DTMF接收

8、信号先经高、低群带通滤波进行fL/fH区分,然后过零检测、比较, 得到相应于DTMF的两路fL/fH信号输出。该两路信号经译码、锁存、缓冲,恢复 成对应于16种DTMF信号音对的4比特二进制码(L1 一 L4)o2.3双音多频信号软件产生与检测近年来DTMF也应用在交互式控制中,诸如语言菜单、语言邮件、电话银行和 ATM终端等。将DTMF信令的产生与检测集成到任一含有数字信号处理器(DSP)的 系统中,是一项较有价值的工程应用。为了产生DTMF信号,DSP用软件产生两个正弦波叠加在一起后发送,软件具体 实现方式可以有三种方法:(1) 用软件模拟DSP的方式产生两个数字正弦波振荡器并把输出合成起

9、来, 建立所希望的双音频。(2) 通过产生的某频率的方波后再附加滤波器滤出二次以上的谐波,产生 DTMF信号。(3) 查表输出产生DTMF信号。软件检测DTMF信号主要有以下方法:(1)利用离散傅立叶变换(DFT)及其快速算法(FFT),求取DTMF信号频谱的 峰值点,进而利用峰值点的频率判断发送的数字。这种方法的缺点是计算量大,不 利于实时处理。但是如果使用MATLAB软件仿真则可以用很简单的几条语句实现。(2)对于DTMF信号的波形,波形过零点数量决定了低频信号的频率,而极 值点数量决定了高频信号的频率。因此通过软件分别计算出高频频率和低频频率, 从而实现DTMF的解码。这里选择采样频率为

10、8K,已知每一个信号的频率至少持续40ms的时间,我们 对DTMF采样160个点,即20ms,这样总会有一个20ms的采样点全部落在40ms 的发送范围内,对采样的点进行6次求和取平均,去掉噪声成分,然后分别计算过 零点的数目a和极值点的数目b,对应频率可以计算为:fL = 50* afH =50* b既然可以求出DTMF信号的一组频率值,那么就可以得出对应电话号码值。这种算 法比较适合于单片机硬件实现,但是其抗噪声性能较差。(3)计算接收到的DTMF信号在8个既定频率的能量,进而确定是否有DTMF 信号到达以及收到的是哪一对信号,此外通过计算接收信号的总能量来防止误判。 采用Geortzel

11、算法可进一步提高计算效率Goertzel算法实质是一个两极点的IIR 滤波器,对应每一个频点有一个匹配滤波器,在抽样时刻检测。这种方法理论上属 于最佳接收方法,而且算法有利于用DSP实现。在本次课程设计中要求使用这种方 法。DTMF解码即是在输入信号中搜索出有效的行频和列频。2.4数字正弦波振荡器原理数字正弦波振荡器的功能是利用数字信号处理的方法产生正弦波信号cos(o t) 的抽样序列幺os nT)。基本原理是:设数字正弦波振荡器要产生的波形为y(n) = cos(wnT)u(nT) = (e jnT + e- jnT )u(nT)(1)则其Z变换为Y(z) = y(n)z -nn=-81歹

12、/=_ /(e jnT + e QnT )乙-nn=0zz+ z e jnTz e jnT上式的分子与分母同时乘以z-2y(n)可以看作是一个单位冲击函数激励了一个线性系统的冲击响应。这个线性 系统的传递函数就是Y(z)。由Y(z)可以写出该线性系统的差分方程:y (n) 2cos(o) y (n 1) + y(n 2) = x(n) + cosCs。) x(n 1)式中=sT = 2写/ f为数字角频率。0SS令输入x(n)为单位冲击函数,即1 n = 0x(n) =5 (n)= 0 n。0则可以得到下面的递推方程当 n2 时,y(n) = 2cos(s ) y(n 1) y(n 2)(2)

13、实现时,首先将每个频率常数存在一个表中,用来初始化给定键的振荡器;再 按照(2)进行迭代计算,就得到正弦序列的输出;将两个这样的输出叠加即可得到双 音频的输出。每个数字输出的样本数取决于数字速率与采样速率。双音频中的每一 个音调之后都是同样长度的无音周期,从而可以检测到按键的释放。2.5数字匹配滤波器原理(Geortzel算法)计算接收到的DTMF信号在8个既定频率的能量,进而确定是否有DTMF信 号到达以及收到的是哪一对信号,此外通过计算接收信号的总能量来防止误判。为 满足检测8个DTMF频点(偏差1.5%),需计算256点FFT,因只对8个频点感兴 趣,故可以直接计算8个频点附近的DFTX

14、(k) = 1 x(n)e-j2丽/n ,k = kk2,k3,k4,k5,k6,k7,k8n=0计算数字信号的频谱可以采用DFT及其快速算法FFT,而在实现DTMF解码 时,采用Goertzel算法要比FFT更快。通过FFT可以计算得到信号所有谱线,了解 信号整个频域信息,而对于DTMF信号只用关心其8个行频/列频及其二次谐波信 息即可(二次谐波的信息用于将DTMF信号与声音信号区别开)。此时Goertzel算 法能更加快速地在输入信号中提取频谱信息。Goertzel算法实质是一个两极点的IIR 滤波器,其算法原理框图如图5。图5 Geortzel算法信号流图对应每一个频点有一个匹配滤波器,

15、第k个频率匹配滤波器的传递函数为,、1 - Wkz-1,、,、H(乙)=1-2z-1coNL + z-2 = Hk1(z) H 2( z)k其中k 2( z)=1 - W!kz 一1,k1(z)1 - 2z-1 cos)+ z-2, k-f c 同=k=2兀 = 2兀=2兀一k fNWN,2nkWk = eJ n = c o 们-jsin)对应的前、后向差分方程为:v (n) 一 2cos(o )v (n 一 1) + v (n 一 2) = x(n)kk kkyk (n) = vk (n) - WNvk (n -1)后一个方程无需全部计算,只需要在n=N时刻,即最后的输出时刻计算。X (k)

16、 = yk (N) = vk (N) - WNvk (N -1)如果考虑同步相位误差,也可以在n=N时刻附近计算一段时间内的输出。前向差分方程也可以改写为便于计算的递归形式:v (n) = x(n) + 2cos(o )v (n 一 1) 一 v (n 一 2)kkkk并令初始值为vk (n) = 0,n )之后,并 按入Enter键即可。例如: (5*2+1.3-0.8)*10/25 ans =4.2000MATLAB会将运算结果直接存入一变量ans,代表MATLAB运算后的答案(Answer), 并显示其数值于屏幕上。(为简便起见,在下述各例中,我们不再印出MATLAB的提 示号。)我们也

17、可将上述运算式的结果设定给另一个变量x: x = (5*2+1.3-0.8)*102/25 x = 42此时MATLAB会直接显示x的值。若不想让MATLAB每次都显示运算结果,只需 在运算式最废加上分号(;)即可。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/) 的数学运算符号,以及幕次运算 O。MATLAB将所有变量均存成double的形式, 所以不需经过变量声明。MATLAB同时也会自动进行存储器的使用和回收,而不必像 C语言,必须由使用者一一指定。变量也可用来存放向量或矩阵,并进行各种运算,如下例的行向量(Rowvector)运算: x = 1 3 5

18、 2; y = 2*x+1 y = 3 7 11 55.2控制命令5.2.1 for语句,其基本形式为:for变量=矩阵;运算式;end其中变量的值会被依次设定为矩阵的每一行,来执行介于for和end之间的运算式。 因此,若无意外情况,运算式执行的次数会等于矩阵的行数。举例来说,下列命令会产生一个长度为6的调和数列:x = zeros(1,6); % x是一个16的零矩阵 for i = 1:6, x(i) = 1/i; end5.2.2 while 语句基本形式为:while条件式; 运算式; end也就是说,只要条件示成立,运算式就会一再被执行。例如先前产生调和数列的例子,我们可用whil

19、e圈改写如下:x = zeros(1,6); % x是一个16的零矩阵i = 1;while i 0.5,disp(Given random number is greater than 0.5.);end5.2.4 MATLAB 文件若要一次执行大量的MATLAB命令,可将这些命令存放于一个扩展名为m的文 件。包含MATLAB命令的文件都以m为扩展名,因此通称m文件,只要直接键入文件 名,就可执行其所包含的命令。严格来说,m文件可再细分为命令集(Scripts)及 函数(Functions)。命令集的效果和将命令逐一输入完全一样,因此若在命令集可以直接使用工作 空间的变量,而且在命令集中设定

20、的变量,也都在工作空间中看得到。函数则需要用到输入参数和输出参数来传递变量,这就像是C语言的函数。在 调用函数时,你只能经由输入参数来控制函数的输入,经由输出参数来得到函数的 输出,但所有的暂时变量都会随着函数的结束而消失。5.3 MATLAB常用的数学函数abs(x):标量的绝对值或向量的长度angle(z):复数 z 的相角(Phase angle)sqrt(x):开平方real(z):复数z的实部imag(z):复数z的虚部conj(z):复数z的共轭复数round(x):四舍五入至最近整数fix(x):无论正负,舍去小数至最近整数sign(x):符号函数。当x0 时,sign(x)=1

21、。rem(x,y):求x除以y的余数gcd(x,y):整数x和y的最大公因数lcm(x,y):整数x和y的最小公倍数exp(x):自然指数妒pow2(x): 2 的指数 2*log(x):以e为底的对数,即自然对数或log2(x):以2为底的对数y”log10(x):以10为底的对数屈sin(x):正弦函数cos(x):余弦函数tan(x):正切函数asin(x):反正弦函数acos(x):反馀弦函数atan(x):反正切函数min(x):向量x的元素的最小值max(x):向量x的元素的最大值sort(x):对向量x的元素进行排序(Sorting)length(x):向量x的元素个数sum(x

22、):向量x的元素总和cumsum(x):向量x的累计元素总和dot(x, y):向量x和y的内积cross(x, y):向量x和y的外积5.4 MATLAB 绘图MATLAB不但擅长于矩阵相关的数值运算,还适合于各种科学绘图。这里简介 几种基本平面绘图命令。plot是绘制一维曲线的基本函数,但在使用此函数之前,需要先定义曲线上每 一点的X及y座标。下例可画出一条正弦曲线:close all; x=linspace(0, 2*pi, 100); % 100个点的 x 座标y=sin(x); %对应的y座标plot(x,y);MATLAB基本绘图函数plot: x轴和y轴均为线性刻度(Linear

23、 scale)loglog: x轴和y轴均为对数刻度(Logarithmic scale)semilogx: x轴为对数刻度,y轴为线性刻度semilogy: x轴为线性刻度,y轴为对数刻度若要画出多条曲线,只需将座标对依次放入plot函数即可:plot(x, sin(x), x, cos(x);若要改变颜色,在座标对彳爰面加上相关字串即可:plot(x, sin(x),,c, x, cos(x),,g,);若要同时改变颜色及图线型态(Line style),也是在座标对废面加上相关字串即可:plot(x, sin(x),,co,, x,cos(x), ,g*,);plot绘图函数的叁数字符颜

24、色字符图线型态y黄色.点k黑色o圆w白色xxb蓝色+g绿色*r红色_实线c亮青色:点线m锰紫色_.点虚线用subplot来同时画出数个小图形于同一个视窗之中:例如:subplot(2,2,1); plot(x, sin(x);subplot(2,2,2); plot(x, cos(x);5.5 MATLAB 帮助MATLAB功能强大,命令众多,很难记全,但是MATLAB提供了友好的帮助界面。 因此利用MATLAB提供的帮助可以方便使用,边用边学。MATLAB帮助界面有两种形 式:命令行帮助和网页浏览帮助。这里仅简单介绍命令行帮助。在 MATLAB命令 (command)窗口中键入help XX

25、X, MATLAB就会给出相应命令的功能、语法解释。例如,在MATLAB命令(command)窗口中键入help plotMATLAB就会给出如下提示:PLOT Linear plot.PLOT(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, length(Y) disconne

26、cted points are plotted.PLOT(Y) plots the columns of Y versus their index.If Y is complex, PLOT(Y) is equivalent to PLOT(real(Y),imag(Y).In all other uses of PLOT, the imaginary part is ignored. Various line types, plot symbols and colors may be obtained with PLOT(X,Y,S) where S is a character strin

27、g made from one elementfrom any or all the following 3 columns:bblue.point-solidggreenocircle:dottedrredxx-mark-.dashdotccyan+plus-dashedmmagenta*staryyellowssquarekblackddiamondvtriangle (down)Atriangle (up)triangle (right)ppentagramhhexagramFor example, PLOT(X,Y,c+:) plots a cyan dotted line with

28、a plus at each data point; PLOT(X,Y,bd) plots blue diamond at each data point but does not draw any line.PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,.) combines the plots defined by the (X,Y,S) triples, where the Xs and Ys are vectors or matrices and the Ss are strings.For example, PLOT(X,Y,y-,X,Y,go) plots the

29、 data twice, with a solid yellow line interpolating green circles at the data points. The PLOT command, if no color is specified, makes automatic use of the colors specified by the axes ColorOrder property. The default Color Order is listed in the table above for color systems where the default is b

30、lue for one line, and for multiple lines, to cycle through the first six colors in the table. For monochrome systems, PLOT cycles over the axes LineStyleOrder property.PLOT returns a column vector of handles to LINE objects, one handle per line. The X,Y pairs, or X,Y,S triples, can be followed by pa

31、rameter/value pairs to specify additional properties of the lines.6.程序与波形示例部分程序代码如下:%General parameter clear all;t_symbol=0.1;f_sample=8000;t_sample=1/8000;frequency_LL=697 770 852 941;frequency_HH=1209 1336 1477 1633;symbols=1 2 3 a ;4 5 6 b ;7 8 9 c;# 0 * d;ID_string=input(please input your Identi

32、cal String,s) SNR_dB =input(please input SNR in dB);SNR=power(10,SNR_dB/10);signal_amplitude=1;power_of_signal=1;sigma=sqrt(1/SNR);LL=length(ID_string);total_ss=;for nn=1:LLrow,col=identify_ID(ID_string(nn);ss1,ss2=generate_DTMF_signal(row,col);ss=ss1+ss2;total_ss=total_ss ss;endfigurenoise=sigma*ra

33、ndn(1,length(total_ss);zz=total_ss + noise;subplot(2,1,1);plot(zz);subplot(2,1,2);plot(abs(fft(zz);zzz=zz;%detect signal starting positionNN1=t_symbol/t_sample;NN2=NN1/2;NN=length(zzz)/NN1;vector=1,NN1,-500,500;%符号检测for nn=0:NN-1 %对N个符号检测figurefor k=1:4%对低频组4个匹配滤波器运算ss(1)=1;ss(2)=0;coef=2*pi*frequen

34、cy_LL(k)/f_sample;b0=sin(coef);a1=2*cos(coef);for n=3:NN1ss(n)=a1*ss(n-1)-ss(n-2)+b0 * zzz(n+nn*NN1);end%匹配滤波器输出信号的模值XX(k)=0;for tt=1:5,XX(k)=XX(k)+ss(NN2-tt)*ss(NN2-tt);endXX(k)subplot(4,2,k);plot(ss,r);AXIS (vector);endfor k=1:4 %对高频组4个匹配滤波器运算ss(1)=1;ss(2)=0;coef=2*pi*frequency_HH(k)/f_sample;b0=s

35、in(coef);a1=2*cos(coef);for n=3:NN1ss(n)=a1*ss(n-1)-ss(n-2)+b0 * zzz(n+nn*NN1);end%匹配滤波器输出信号的模值YY(k)=0;for tt=1:5,YY(k)=YY(k)+ss(NN2-tt)*ss(NN2-tt);endsubplot(4,2,k+4);plot(ss,r);AXIS (vector);end%符号判决xxx,row_r =max(XX);yyy,col_r = max(YY);symbol_r(nn+1)=symbols(row_r,col_r);end程序运行,传送字符为2008、信噪比为0d

36、B时绘出波形如下:4I|iiii05001000150020002500300035008006004001000150020003000200图1 发送“2008”、信噪比为5dB时接收波形与频谱图2发送字符为“2”时匹配滤波器输出波形7.时间安排十八周日 期12月29日12月30日12月31日星 期三四五上午课程设计介绍基本程序讲解主讲:吴长奇()自学阅读文献资料()软件设计()下午自学阅读文献资料自学阅读文献资料()软件设计()十九周日期1月3日1月4日1月5日1月6日1月7日星期一二三四五上午上机Matlab使用练习上机Matlab使用练习上机仿真程序调适上机仿真程序调适上机仿真程序调

37、适下午上机Matlab使用练习上机Matlab使用练习上机仿真程序调适上机仿真程序调适上机仿真程序调适二十周日期1月10日1月11日1月12日1月13日1月14日星期一二三四五上午上机仿真程序验收写报告下午上机仿真程序验收交报告大 院DTMF课程设计负责人:吴长奇 (16-18周) 电子1班吴长奇胡正平 电子2班肖丽萍史洪印 电子3班 孙洁娣 刘洛辛 电子4班李英伟牛晓霞 通信1班李刚李段 通信2班孟玲玲李林 通信3班陈书贞顾广华 通信4班练秋生崔冬单片机课程设计负责人:李英伟 (19-21周) 电子1班李英伟李林 电子2班肖丽萍史洪印 电子3班 孙洁娣 刘洛辛 电子4班 吴长奇 牛晓霞 通信1班李刚李段 通信2班 孟玲玲 李朝辉 通信3班陈书贞顾广华 通信4班练秋生崔冬理仁DTMF课程设计负责人:胡正平(17-18周)电子1班胡正平吴长奇 电子2班荆楠徐爱霞 电子3班王玉宝王金甲 电子4班王成儒史洪印 通信1班李林李朝辉 通信2班于丽娜张涛 通信3班 邢光龙 李英伟 通信4班 许成谦 刘燕燕单片机课程设计负责人:李林(19-21周) 电子1班李林李英伟 电子2班荆楠徐爱霞 电子3班 王玉宝王金甲 电子4班王成儒史洪印 通信1班胡正平李朝辉 通信2班于丽娜张涛通信3班邢光龙李刚通信4班 许成谦 刘燕燕

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号