电话波音号数字解码系统作业

上传人:l**** 文档编号:126650907 上传时间:2020-03-26 格式:DOC 页数:11 大小:285KB
返回 下载 相关 举报
电话波音号数字解码系统作业_第1页
第1页 / 共11页
电话波音号数字解码系统作业_第2页
第2页 / 共11页
电话波音号数字解码系统作业_第3页
第3页 / 共11页
电话波音号数字解码系统作业_第4页
第4页 / 共11页
电话波音号数字解码系统作业_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《电话波音号数字解码系统作业》由会员分享,可在线阅读,更多相关《电话波音号数字解码系统作业(11页珍藏版)》请在金锄头文库上搜索。

1、华中科技大学光学与电子信息学院信号与系统课程工程设计问题设计报告 题目:电话拨音号的数字解码系统分组号: _组 长: _组 员:_ _时 间: _ 指导教师: 报告日期: 报告撰写说明1 按照参考模板的内容和格式撰写报告2 理论模型部分须结合本课程知识分析问题、建立模型3 程序设计部分应给出设计思路、主要流程图和关键函数的说明;结果分析不能只是简单给出结论,应结合具体问题,对关键参数或算法在不同取值条件下对结果的影响情况进行分析和总结。如果可能,还应进行误差分析4 组内互评分A、B、C、D四个贡献等级,最终评价应区分出前三个等级 目 录1 问题描述22 理论模型22.1 原理分析与设计思路22

2、.2 数学模型23 程序设计33.1 编程思路33.2 主要流程图及说明43.3 结果分析44 组内互评65 总结与体会7参考文献7附录 MATLAB程序主要代码81 问题描述双音多频信号(DualTone MultiFrequency, DTMF)是电话系统中电话机与交换机之间的一种用户信令。用户每按一个键话机就发送一个高频和低频的正弦信号组合,比如 “1” 键相当于 697 和 1209 赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。我们要完成的就是先根据按键产生模拟信号,再通过数字系统还原信号。2 理论模型2.1 原理分析与设计思路电话按键所产生的信号可以表示为两个余弦信号

3、的叠加,他们的频率分别为f1和f2,电话按键产生的信号可以表示为: x(t)=cos(2f1t)+cos(2f2t)其中f1和f2分别用于对行和列按键进行编码,具体频率值如下:首先可以根据按键找到对应的两个频率,例如按“1”的得到的频率就是697和1209两个频率,从而得到信号x(t)=cos(2*697t)+cos(2*1209t)。得到信号之后要对信号进行采样,然后根据信号的特性设置对应的LTI系统,产生中间信号,根据中间信号的幅值特性分别检测它属于哪一行哪一列,然后得到它所对应的数字。2.2 数学模型现在有信号:x(t)=cos(2f1t)+cos(2f2t)以10-4s进行采样后得到离

4、散信号: X(nT)=cos(2f1n/10000)+cos(2f2n/10000)用图示LTI系统对信号进行处理 经过资料查阅和推理,我们采用了如下传递函数: H(z)=(1-ej2k/Nz-1)/(1-2cos(2k/N)rz-1+r2z-2) 该系统包含两个极点如图所示,0=2k/N,N=256。 根据系统计算出差分方程为: yn- 2cos(2k/N)*r*yn-1+r2*yn-2=xn- ej2k/Nxn-1 取0之前的值全部是0,可以用迭代法求出y,但是这一步计算很麻烦,我们只能利用matlab来进行处理。根据计算和查阅资料,取K=18时,输入频率来自第一行的数字时,得到的信号幅度

5、很大,而其他行则相比小很多。K取值18,20,22,24时,分别针对第1,2,3,4行数字能得到较大频率信号,K取31,34,38时分别针对第1,2,3列,从而能确定输入的数字。3 程序设计3.1 编程思路首先分析r和0值对中间信号的影响。输入某个数字对应的离散时间信号X(nT)=cos(2f1n/10000)+cos(2f2n/10000),采用上面计算所得的差分方程yn- 2cos(2k/N)*r*yn-1+r2*yn-2=xn- ej2k/Nxn-1,用迭代法进行编程,取不同的k值对所得函数图像进行结果分析。然后在围绕迭代法进行完整编程时,我们发现了函数goertzel,它的原理就是迭代

6、法,但是使用起来更加简单方便。所以在完整编程时我们采用此函数,并且学习网上的方案添加了发音步骤。总体步骤是先用数组表示各种频率和7个k值,输入电话号码当数字处理,拆分各位数字分别进行处理,比把他们整合成一个用零值间隔起来的信号简单很多。然后把数字对应的信号表示出来,用goertzel函数进行处理,得到输出函数幅值与某个较大值进行比较,根据比较结果去顶行与列,从而确定数字。输入电话号码3.2 主要流程图及说明输入信号分解电话号码取一个数字产生对应信号取r和0的值发声迭代法迭代法观察结果图并分析画幅度图图一:分析幅值比较r和0的值得到对应数字得到完整电话号码 图二:完整的系统3.3 结果分析l 运

7、行结果(1) 图一对应的程序,取k=18,r=1,输入数字1对应的频率697Hz和1209Hz,得到输出图像:输入2或者3时结果差不多,但是输入其他行的数字对应频率时相差很大。例如输入4对应频率,得到:输入8对应频率,得到:可以看出只有第一行的数字得到的中间信号幅度很大。此时取值r=1,0=24.45度。r的值几乎只能取1,允许的偏差很小,下面为分别取1.01和0.99时的结果。 可以看出r的取值能选择的范围很小。(2)运行图2对应的总程序,输入任意长度电话号码如18571452127。l 结果验证从上面的结果可以看出程序是正确的。4 组内互评陈一昭,评分为A,负责编程和撰写,完成了代码陈琪君

8、,评分为B,负责查找资料和讨论,完成了原理分析和设计思路冯诚,评分为B,负责代码分析和讨论,完成了数学模型张振兴,评分为B,负责迭代法原理和讨论,完成了流程图和说明5 总结与体会这次的课程作业完成得很艰难,花了很长的时间,参考了很多资料,查找编写了很多代码,最后眼睛看得疼得不行,电脑也死机了好几次。拿到的题目比较难,老师的要求跟别人不一样,所以网上的代码只能参考一下,最后还是要自己写。开始完成课程作业时,对matlab几乎没什么深入的了解,z变换也学得不是太好,但是为了完成这份作业,在网上看了很多相关的东西,思考了很久,感觉对信号与系统的理解深了很多。不过终于完成了,虽然已是深夜,疲惫得快撑不

9、下去了,还是很开心。希望老师宽宏大量,高抬贵手,因为我也尝试着编写完整的迭代法代码来完成整体代码,但那对我来说实在有点艰难,最后只能采用比较简单的goertzel算法,能写成这样我已尽力。很久没有这么专注地做一件事情了,其实学习也有它的快乐,但是过程往往艰难,在此拿起厚得不行的信号书开始准备期末。老师暑假快乐,后会有期。参考文献1 奥本海姆信号与系统(第二版).北京:电子工业出版社,2013附录 MATLAB程序主要代码(1)分析代码clc;clear;format compact; n=0:1023; x = sin(2*pi*n*697/10000) + sin(2*pi*n*1209/1

10、0000); a=1,-2*cos(2*pi*18/256)*0.99,1*0.99*0.99;b=1,-exp(2*pi*i*18/256),0; zx=0,0;zy=0,0; N=length(a)-1; L=length(x); y=zeros(1,L);for i=1:L; for n=1:N;z(n)=b(n+1)*zx(n)-a(n+1)*zy(n); end zz=sum(z); y(i)=b(1)*x(i)+zz; for n=N:-1:2, zx(n)=zx(n-1);zy(n)=zy(n-1);end zx(1)=x(i);zy(1)=y(i); end zf=zeros(

11、1, N); for k=1:N; for n=1:N;z(n)=b(n+1)*zx(n)-a(n+1)*zy(n);end zf(k)=sum(z); for k=N:-1:2, zx(k)=zx(k-1);zy(k)=zy(k-1); end; zx(1)=0;zy(1)=0;end n=0:1023;figure(1);subplot(111);stem(n,y);(2)总代码clear all;clc;tm=1,2,3;4,5,6;7,8,9;50,0,50;N=205;K=18,20,22,24,31,34,38;f1=697,770,852,941;f2=1209,1336,147

12、7;TN=input(输入电话号码=);TNr=0;b=floor(log10(TN)+1;for l=1:b; d=fix(TN/10(b-l); TN=TN-d*10(b-l); for p=1:4; for q=1:3; if tm(p,q)=abs(d); break,end end if tm(p,q)=abs(d); break,end end n=0:1023; x = sin(2*pi*n*f1(p)/10000) + sin(2*pi*n*f2(q)/10000); sound(x,10000); pause(0.1) X=goertzel(x(1:256),K+1); val=abs(X); subplot(6,2,l); stem(K,val,.);grid;xlabel(k);ylabel(|X(k)|) axis(10 50 0 120) limit = 80; for s=5:7; if val(s) limit, break, end end for r=1:4; if val(r) limit, break, end end TNr=TNr+tm(r,s-4)*10(b-l);enddisp(接收端检测到的号码为) disp(num2str(TNr)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号