DTMF产生传输及检测软件仿真课程设计.docx
《DTMF产生传输及检测软件仿真课程设计.docx》由会员分享,可在线阅读,更多相关《DTMF产生传输及检测软件仿真课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
![DTMF产生传输及检测软件仿真课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/8/00d5ef16-a0bd-488a-af1e-3e172e9e32fb/00d5ef16-a0bd-488a-af1e-3e172e9e32fb1.gif)
DTMF产生传输及检测软件仿真课程设计
燕山大学课程设计指导书
DTMF通信系统设计与仿真
燕山大学信息科学与工程学院
通信电子教研室
1、任务、性质与意义
用数学模型的方法对信息传输的过程进行仿真,是分析、设计及改进通信系统性能的重要手段。
本次课程设计的任务是综合运用通信原理、数字信号处理等课程所学知识,实现一个双音多频(DTMF)信号传输过程的软件仿真。
本次课程设计的性质是通信原理、数字信号处理等课的综合实践环节。
它的意义在于,通过本次课程设计可以从理论上加深对有关通信、数字信号处理原理的综合理解,了解DTMF信号原理和用数字信号处理的方法实现DTMF信号的产生、传输与检测的过程。
还可以从实践能力上掌握一门新的计算机编程工具——MATLAB语言。
2、基本原理
双音多频(DTMF)信号
双音多频(DTMF)信号就是用两个不同频率的音频信号的组合来传输信息的一种通信信号形式,可以用数学式表示为
(1)
式中fH和fL分别是高频组和低频组的两个信号频率。
对这两个频率的要求是:
1、位于人而能够听到的音频频率范围内;2、频率间隔近似为乐音音阶的频率间隔(按十二平均律,相邻各个音的频率呈等比关系,其比值约为,例如C3,C4=,D4)。
这种信号在电话线路上传输,而且声音悦耳。
在电话系统中,高低频组的频率已经标准化,如图1所示。
DTMF最早应用是在电话通信系统中作为控制信令使用的。
在电话通信系统中,最早的控制信令是使用直流脉冲信号。
脉冲拨号方式是由接在旋转拨盘位置上的开关或电子开关控制二线电路的通与断。
每拨出一位数字,都有唯一一串电流脉冲相对应,图2中给出了数字’3’的电流脉冲序列。
每个脉冲周期通常为100ms,其中有40%的占空时间,在人工控制条件下,两个相继数字的时间间隔可以从到数秒之间变化不等。
由此可见,利用拨号脉冲拨号,发送一个10位长的号码大约需要7秒的时间。
图2脉冲拨号示意图
当采用DTMF拨号方式时,号码的每一个数字用一对音频表示,话机中有8个单音频,分为两组,通过拨号盘选拨号码时,各位数字由触键开关输入,其对应的某个频率对(高频和低频)同时传输,图3所示为各频率对应位置。
对DTMF信号所规定的指标为:
传送速率为每秒10个数字,即每个数字100ms。
每个数字传送过程中,信号必须存在至少45ms,且不得多于55ms,100ms里其余时间是静音。
另外ITU(国际电信联盟)还规定,DTMF信号在每个频率点上允许有%的偏移,任何超出给定%的信号认为无效,拒绝承认接收。
还规定,在最坏检测条件下,信噪比不得低于15dB。
显然。
DTMF的拨号方式比双脉冲拨号方式可快至10倍,明显缩短了拨号时间。
而且DTMF拨号方式发出的信号抗干扰能力大大高于脉冲拨号方式。
因此,目前普遍使用DTMF拨号方式。
采用DTMF信号,用话音频率发送数字,可以避免占用额外的信道,又比脉冲拨号方式节约时间。
在通信、测量、控制、自动服务等领域有着广泛的应用。
在基于电话的各种信息服务系统中,广泛使用了DTMF信号来传送按键操作信息。
利用这种按键信息,人们可以直接通过电话查询所需要的信息以及进行各种远程控制。
在实际系统中,首次拨号由程控交换机识别,完成主叫与被叫之间的接续;二次乃至多次拨号的识别以及操作由用户系统自己完成。
DTMF信号还可以用来在话音信道上传送各种类型的控制指令,例如利用电话控制家用电器的启停,传送远方的状态监测信息。
目前DTMF信号已经不仅仅限于在电话系统中应用,在测量、控制、遥测遥控等各个领域都有应用。
DTMF信号的硬件产生与检测
通常是用硬件产生和检测DTMF信号。
已经有多种专用的产生和检测DTMF信号的集成电路器件。
具有代表性的DTMF发送、接收器的型号为MT8860,MT8862,MT8870,MT8872等。
DTMF信号发送器电路原理如图3所示,它主要包括:
(1)晶体振荡器——外接晶体(通常采用与片内电路构成振荡器、经分频产生参考信号。
(2)键控可变速率时钟产生电路——它是一种可变分频比的分频器,通常由n级移位寄存器与键控反馈逻辑单元组成。
(3)正弦波产生电路——它出正弦波编码器与D—A变换器构成。
通常可变速时钟信号先经过5位移位寄存器,产生—组5位移位代码,再由可编程逻辑阵列(PLA)将其转换成二进制代码,送到D—A变换器转换成台阶形正弦波。
显然台阶的宽度等于时钟频率的倒数,这样形成的正弦波频率必然对应于时钟的速率和按键的号码。
(4)混合电路——将键盘所对应产生的行、列正弦波信号(即低高群fL、fH单音)相加,混合成双音信号而输出。
(5)附加功能单元,如含有单音抑制、输出控制(禁止)、双键向按无输出等控制电路。
DTMF接收器主要包括DTMF分组滤波器和DTMF译码器,其基本原理如图4所示。
DTMF接收信号先经高、低群带通滤波进行fL/fH区分,然后过零检测、比较,得到相应于DTMF的两路fL/fH信号输出。
该两路信号经译码、锁存、缓冲,恢复成对应于16种DTMF信号音对的4比特二进制码(L1一L4)。
双音多频信号软件产生与检测
近年来DTMF也应用在交互式控制中,诸如语言菜单、语言邮件、电话银行和ATM终端等。
将DTMF信令的产生与检测集成到任一含有数字信号处理器(DSP)的系统中,是一项较有价值的工程应用。
为了产生DTMF信号,DSP用软件产生两个正弦波叠加在一起后发送,软件具体实现方式可以有三种方法:
(1)用软件模拟DSP的方式产生两个数字正弦波振荡器并把输出合成起来,建立所希望的双音频。
(2)通过产生的某频率的方波后再附加滤波器滤出二次以上的谐波,产生DTMF信号。
(3)查表输出产生DTMF信号。
软件检测DTMF信号主要有以下方法:
(1)利用离散傅立叶变换(DFT)及其快速算法(FFT),求取DTMF信号频谱的峰值点,进而利用峰值点的频率判断发送的数字。
这种方法的缺点是计算量大,不利于实时处理。
但是如果使用MATLAB软件仿真则可以用很简单的几条语句实现。
(2)对于DTMF信号的波形,波形过零点数量决定了低频信号的频率,而极值点数量决定了高频信号的频率。
因此通过软件分别计算出高频频率和低频频率,从而实现DTMF的解码。
这里选择采样频率为8K,已知每一个信号的频率至少持续40ms的时间,我们对DTMF采样160个点,即20ms,这样总会有一个20ms的采样点全部落在40ms的发送范围内,对采样的点进行6次求和取平均,去掉噪声成分,然后分别计算过零点的数目a和极值点的数目b,对应频率可以计算为:
既然可以求出DTMF信号的一组频率值,那么就可以得出对应电话号码值。
这种算法比较适合于单片机硬件实现,但是其抗噪声性能较差。
(3)计算接收到的DTMF信号在8个既定频率的能量,进而确定是否有DTMF信号到达以及收到的是哪一对信号,此外通过计算接收信号的总能量来防止误判。
采用Geortzel算法可进一步提高计算效率,Goertzel算法实质是一个两极点的IIR滤波器,对应每一个频点有一个匹配滤波器,在抽样时刻检测。
这种方法理论上属于最佳接收方法,而且算法有利于用DSP实现。
在本次课程设计中要求使用这种方法。
DTMF解码即是在输入信号中搜索出有效的行频和列频。
数字正弦波振荡器原理
数字正弦波振荡器的功能是利用数字信号处理的方法产生正弦波信号
的抽样序列
。
基本原理是:
设数字正弦波振荡器要产生的波形为
(1)
则其Z变换为
上式的分子与分母同时乘以
y(n)可以看作是一个单位冲击函数激励了一个线性系统的冲击响应。
这个线性系统的传递函数就是Y(z)。
由Y(z)可以写出该线性系统的差分方程:
式中
为数字角频率。
令输入x(n)为单位冲击函数,即
则可以得到下面的递推方程
当n<0时,y(n)=0
当n=0时,y(0)=0
当n=1时,
当n=2时,
当n>2时,
(2)
实现时,首先将每个频率常数存在一个表中,用来初始化给定键的振荡器;再按照
(2)进行迭代计算,就得到正弦序列的输出;将两个这样的输出叠加即可得到双音频的输出。
每个数字输出的样本数取决于数字速率与采样速率。
双音频中的每一个音调之后都是同样长度的无音周期,从而可以检测到按键的释放。
数字匹配滤波器原理(Geortzel算法)
计算接收到的DTMF信号在8个既定频率的能量,进而确定是否有DTMF信号到达以及收到的是哪一对信号,此外通过计算接收信号的总能量来防止误判。
为满足检测8个DTMF频点(偏差%),需计算256点FFT,因只对8个频点感兴趣,故可以直接计算8个频点附近的DFT
计算数字信号的频谱可以采用DFT及其快速算法FFT,而在实现DTMF解码时,采用Goertzel算法要比FFT更快。
通过FFT可以计算得到信号所有谱线,了解信号整个频域信息,而对于DTMF信号只用关心其8个行频/列频及其二次谐波信息即可(二次谐波的信息用于将DTMF信号与声音信号区别开)。
此时Goertzel算法能更加快速地在输入信号中提取频谱信息。
Goertzel算法实质是一个两极点的IIR滤波器,其算法原理框图如图5。
图5Geortzel算法信号流图
对应每一个频点有一个匹配滤波器,第k个频率匹配滤波器的传递函数为
其中
,
,
,
对应的前、后向差分方程为:
后一个方程无需全部计算,只需要在n=N时刻,即最后的输出时刻计算。
如果考虑同步相位误差,也可以在n=N时刻附近计算一段时间内的输出。
前向差分方程也可以改写为便于计算的递归形式:
并令初始值为
。
在n=N时刻既可以得到所需要的X(k)。
由于在DTMF检测中,输入的信号是实数序列,并不需要检测出8个行频/列频的相位,只需要计算出其幅度平方即可。
因此计算|X(k)|2如下:
这里
分别表示状态变量在N和N-1时刻的值。
在输入信号中检测DTMF信号,并将其转换为实际的数字,这一解码过程本质是连续的过程,需要在输入的数据信号流中连续地搜索DTMF信号频谱的存在。
整个检测过程分两步:
首先采用Goertzel算法在输入信号中提取频谱信息;接着作检测结果的有效性检查。
仿真系统框图
图6仿真系统框图
软件流程图
(1)输入键号
(2)生成DTMF信号(时域、频域显示)
(3)产生高斯噪声(时域、频域显示)
(4)信道传输(高斯白噪声信道,可选作带限滤波器信道)
(5)接收端随机延迟(30个点以内)
(6)匹配滤波接收
(7)DTMF信号到达检测
(8)DTMF信号识别(时域、频域显示)
(9)DTMF键号识别
3.工作内容与思考题
工作内容
1、设计计算正弦波数字振荡器、数字匹配滤波器的参数;
2、用MATLAB语言设计一个利用DTMF信号传输学号代码的仿真系统。
观察下列信号的波形:
学号代码的非归零基带信号、DTMF信号、信道加入噪声、接收信号、匹配滤波器输出、译码判决结果;
3、利用仿真的系统进行抗干扰性能等方面的试验分析,试验分析的具体内容详见思考题。
思考题
[1]分析DTMF信号的频谱,为什么DTMF信号能够在电话信道传输,要求的带宽为多少?
[2]设信噪比分别为20dB,10dB,0dB,-6dB,-10dB,-20dB,分析在理想(信道无失真)情况下,仿真计算误码率与信噪比的关系,并与理论分析结果比较。
[3]仿真分析匹配滤波器中心频率误差对DTMF信号检测有什么影响?
[4]仿真分析DTMF信号的时间长度对信号的检测有什么影响?
[5]如果在匹配滤波器前插入FIR带通滤波器,通频带在600--1800Hz之间。
用窗函数法设计FIR带通滤波器,并分析插入带通滤波器对检测性能有什么影响?
4设计要求
1、自学复习通信原理、数字信号处理的有关内容,掌握算法原理;
2、掌握MATLAB语言的使用;
3、完整实现仿真系统,发送自己的学号,接收自己的学号;
4、记录观察到的各种波形;
5、撰写课程设计报告。
报告统一使用B5纸,统一报告封面,报告篇幅以3000字为宜。
报告中要有设计目的;设计基本内容及步骤;每一步中应用的原理方法;试验仿真结果及相关波形;对试验结果进行的性能分析。
报告正文用手写,图、程序可以打印作为附件。
5.编程工具MATLAB简介(亦可以采用C语言、C++、VC、VB等编程语言实现)
基本运算与函数
在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之后,并按入Enter键即可。
例如:
>>(5*2+
ans=
MATLAB会将运算结果直接存入一变量ans,代表MATLAB运算后的答案(Answer),并显示其数值于屏幕上。
(为简便起见,在下述各例中,我们不再印出MATLAB的提示号。
)我们也可将上述运算式的结果设定给另一个变量x:
x=(5*2+
x=
42
此时MATLAB会直接显示x的值。
若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可。
由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。
MATLAB将所有变量均存成double的形式,所以不需经过变量声明。
MATLAB同时也会自动进行存储器的使用和回收,而不必像C语言,必须由使用者一一指定。
变量也可用来存放向量或矩阵,并进行各种运算,如下例的行向量(Rowvector)运算:
x=[1352];
y=2*x+1
y=
37115
控制命令
5.2.1for语句,其基本形式为:
for变量=矩阵;
运算式;
end
其中变量的值会被依次设定为矩阵的每一行,来执行介于for和end之间的运算式。
因此,若无意外情况,运算式执行的次数会等于矩阵的行数。
举例来说,下列命令会产生一个长度为6的调和数列:
x=zeros(1,6);%x是一个16的零矩阵
fori=1:
6,
x(i)=1/i;
end
5.2.2while语句
基本形式为:
while条件式;
运算式;
end
也就是说,只要条件示成立,运算式就会一再被执行。
例如先前产生调和数列的例子,我们可用while圈改写如下:
x=zeros(1,6);%x是一个16的零矩阵
i=1;
whilei<=6,
x(i)=1/i;
i=i+1;
end
5.2.3条件语句if,...,end
基本形式为:
if条件式;
运算式;
end
例:
ifrand(1,1)>,
disp('Givenrandomnumberisgreaterthan.');
end
5.2.4MATLAB文件
若要一次执行大量的MATLAB命令,可将这些命令存放于一个扩展名为m的文件。
包含MATLAB命令的文件都以m为扩展名,因此通称m文件,只要直接键入文件名,就可执行其所包含的命令。
严格来说,m文件可再细分为命令集(Scripts)及函数(Functions)。
命令集的效果和将命令逐一输入完全一样,因此若在命令集可以直接使用工作空间的变量,而且在命令集中设定的变量,也都在工作空间中看得到。
函数则需要用到输入参数和输出参数来传递变量,这就像是C语言的函数。
在调用函数时,你只能经由输入参数来控制函数的输入,经由输出参数来得到函数的输出,但所有的暂时变量都会随着函数的结束而消失。
MATLAB常用的数学函数
abs(x):
标量的绝对值或向量的长度
angle(z):
复数z的相角(Phaseangle)
sqrt(x):
开平方
real(z):
复数z的实部
imag(z):
复数z的虚部
conj(z):
复数z的共轭复数
round(x):
四舍五入至最近整数
fix(x):
无论正负,舍去小数至最近整数
sign(x):
符号函数。
当x<0时,sign(x)=-1;当x=0时,sign(x)=0;当x>0时,sign(x)=1。
rem(x,y):
求x除以y的余数
gcd(x,y):
整数x和y的最大公因数
lcm(x,y):
整数x和y的最小公倍数
exp(x):
自然指数
pow2(x):
2的指数
log(x):
以e为底的对数,即自然对数或
log2(x):
以2为底的对数
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):
向量x的元素总和
cumsum(x):
向量x的累计元素总和
dot(x,y):
向量x和y的内积
cross(x,y):
向量x和y的外积
MATLAB绘图
MATLAB不但擅长于矩阵相关的数值运算,还适合于各种科学绘图。
这里简介几种基本平面绘图命令。
plot是绘制一维曲线的基本函数,但在使用此函数之前,需要先定义曲线上每一点的x及y座标。
下例可画出一条正弦曲线:
closeall;x=linspace(0,2*pi,100);%100个点的x座标
y=sin(x);%对应的y座标
plot(x,y);
MATLAB基本绘图函数
plot:
x轴和y轴均为线性刻度(Linearscale)
loglog:
x轴和y轴均为对数刻度(Logarithmicscale)
semilogx:
x轴为对数刻度,y轴为线性刻度
semilogy:
x轴为线性刻度,y轴为对数刻度
若要画出多条曲线,只需将座标对依次放入plot函数即可:
plot(x,sin(x),x,cos(x));
若要改变颜色,在座标对後面加上相关字串即可:
plot(x,sin(x),'c',x,cos(x),'g');
若要同时改变颜色及图线型态(Linestyle),也是在座标对後面加上相关字串即可:
plot(x,sin(x),'co',x,cos(x),'g*');
plot绘图函数的叁数
字符颜色字符图线型态
y黄色.点
k黑色o圆
w白色xx
b蓝色++
g绿色**
r红色-实线
c亮青色:
点线
m锰紫色-.点虚线
用subplot来同时画出数个小图形于同一个视窗之中:
例如:
subplot(2,2,1);plot(x,sin(x));
subplot(2,2,2);plot(x,cos(x));
MATLAB帮助
MATLAB功能强大,命令众多,很难记全,但是MATLAB提供了友好的帮助界面。
因此利用MATLAB提供的帮助可以方便使用,边用边学。
MATLAB帮助界面有两种形式:
命令行帮助和网页浏览帮助。
这里仅简单介绍命令行帮助。
在MATLAB命令(command)窗口中键入helpXXX,MATLAB就会给出相应命令的功能、语法解释。
例如,在MATLAB命令(command)窗口中键入helpplot
MATLAB就会给出如下提示:
PLOTLinearplot.
PLOT(X,Y)plotsvectorYversusvectorX.IfXorYisamatrix,thenthevectorisplottedversustherowsorcolumnsofthematrix,whicheverlineup.IfXisascalarandYisavector,length(Y)disconnectedpointsareplotted.
PLOT(Y)plotsthecolumnsofYversustheirindex.
IfYiscomplex,PLOT(Y)isequivalenttoPLOT(real(Y),imag(Y)).
InallotherusesofPLOT,theimaginarypartisignored.Variouslinetypes,plotsymbolsandcolorsmaybeobtainedwithPLOT(X,Y,S)whereSisacharacterstringmadefromoneelementfromanyorallthefollowing3columns:
bblue.point-solid
ggreenocircle:
dotted
rredxx-mark-.dashdot
ccyan+plus--dashed
mmagenta*star
yyellowssquare
kblackddiamond
vtriangle(down)
^triangle(up)
>triangle(right)
ppentagram
hhexagram
Forexample,PLOT(X,Y,'c+:
')plotsacyandottedlinewithaplusateachdatapoint;PLOT(X,Y,'bd')plotsbluediamondateachdatapointbutdoesnotdrawanyline.
PLOT(X1,Y1,S1,X2,Y2,S2,X3,Y3,S3,...)combinestheplotsdefinedbythe(X,Y,S)triples,wheretheX'sandY'sarevectorsormatricesandtheS'sarestrings.
Forexample,PLOT(X,Y,'y-',X,Y,'go')plotsthedatatwice,withasolidyellowlineinterpolatinggreencirclesatthedatapoints.ThePLOTcommand,ifnocolorisspecified,makesautomaticuseofthecolorsspecifiedbytheaxesColorOrderproperty.ThedefaultColorOrderislistedinthetableaboveforcolorsystemswherethedefaultisblueforoneline,andformultiplelines,tocyclethroughthefirst