双音多频(DTMF)信号的MATLAB仿真.pdf

上传人:tbuqq 文档编号:5223647 上传时间:2020-02-26 格式:PDF 页数:19 大小:207.27KB
返回 下载 相关 举报
双音多频(DTMF)信号的MATLAB仿真.pdf_第1页
第1页 / 共19页
双音多频(DTMF)信号的MATLAB仿真.pdf_第2页
第2页 / 共19页
双音多频(DTMF)信号的MATLAB仿真.pdf_第3页
第3页 / 共19页
双音多频(DTMF)信号的MATLAB仿真.pdf_第4页
第4页 / 共19页
双音多频(DTMF)信号的MATLAB仿真.pdf_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《双音多频(DTMF)信号的MATLAB仿真.pdf》由会员分享,可在线阅读,更多相关《双音多频(DTMF)信号的MATLAB仿真.pdf(19页珍藏版)》请在三一文库上搜索。

1、数字信号处理 课程设计 双音多频( DTMF )信号的 MATLAB 仿真 院系:闽江学院计算机科学系 专业:通信工程 组长:蔡小红( 3121102133) 组员:王垚天( 3121102119)何杰坤( 3121102131 ) 王晓清( 3121102134)苏月琴( 3121102136) 罗烨( 3121102216) 指导老师:方荟 时间:2015 年 1 月 5 日-2015 年 1 月 9 日 双音多频( DTMF )信号的MATLAB 仿真 任务分配安排表 任务分配负责人 资料查找: 电话中双频拨号的频率分配,以及双 音多频信号的产生方法。 苏月琴、罗烨 课程设计方案、思路和

2、具体步骤何杰坤、蔡小红 基本代码编写王垚天、何杰坤 gui 编写、界面设计王垚天、王晓清 代码调试蔡小红、罗烨 实验报告编写王晓清、苏月琴 实验答辩 王垚天、何杰坤、蔡小红 王晓清、苏月琴、罗烨 1 目录 一、摘要 1 二、引言 1 三、设计要求 1 3.1 设计要求 . 1 3.2 设计步骤 . 2 3.3 设计程序 . 2 3.4 设计 GUI . 2 3.5 原理 . 3 3.5.1电话中的 DTMF 信号的组成 3 3.5.2电话中的双音多频(DTMF )信号的产生. 4 3.5.3 Goerztel函数与 DTMF 信号的产生 . 5 四、设计过程 5 图 4.1 设计流程图 6 五

3、、调试与结果 7 5.1 运行结果如下图所示. 7 5.2 调试中遇到的问题及解决方法. 7 六、分析和总结 7 6.1 小组总结 . 7 6.2 成员总结 . 8 七、参考文献 9 八、附录:主要程序 . 11 1 一、摘要 DTMF 信号系统是一个典型的小型信号处理系统,它要用数字方法产生模 拟信号并进行传输,应用D/A变换器,采用快速的频率检测算法戈泽尔 (GEORTZEL)算法的原理,以及该算法在双音多频拨号检测系统中的应用。 对读入的电话号码,根据键入的号码数产生时域离散双音多频(DTMF )信号, 并连续发出号码对应的双音频声音。同时进行时域离散DTMF 信号进行检测, 画出幅度谱

4、,并用MATLAB 在计算机上对双音多频的信号产生及检测接收系统 进行了仿真测试。 关键词双音多频戈泽尔算法DFT 二、引言 DTMF (Double Tone MulitiFrequency,双音多频)作为实现电话号码 快速可靠传输的一种技术,具有很强的抗干扰能力和较高的传输速度,广泛 用于电话通信系统中。另外,它也可以在通信系统中广泛用来实现各种数据 和语音等信息的远程传输,技术非常成熟、专业芯片种类繁多,在民用、金 融、工业等领域的应用非常普及,甚至有通过软件来产生和检测DTMF 信令方 面的应用。 但随着现代工业的持续发展,利用DTMF 信令作为通信系统中的控 制信号的通信设备正遭受着

5、前所未有的各种日益复杂的干扰,尤其是与DTMF 信令的同频干扰,使通信设备频频出现误动作等严重事故,所以消除与DTMF 同频干扰已是利用该控制方式控制的通信系统不得不解决的一个问题。 三、设计要求 3.1 设计要求 (1)按一个数字键如“1” ,则产生频率为697Hz和 1209Hz 的两个正弦 波,并相加; (2)可用查表法求数字键对应的频率,为此先建立拨号数字表矩阵; (3)电话音频信号在数字信号处理时,取样频率为8KHz ,每个数字信 号持续时间为100ms ,后面加上 100ms的间隔(用 0 表示) ; (4)设计好各按键提示音,并能播放演示; 2 (5)编制 GUI用户界面; 3.

6、2 设计步骤 (1)总体设计搭建框架,确定人机对话界面,确定输入输出函数接口; (2)编写主要程序,包括戈泽尔算法和N点 DFT ; (3)编写实现输入输出功能的程序; (4)编写波形输出程序; (5)用 matlab 的相应函数进行检验; (6)编写 GUI,并绑定各功能,加以实现。 3.3 设计程序 读入电话号码,根据键入的电话号码产生时域离散双音多频(DTMF )信 号,并连续发出号码对应的双音频声音。对时域离散DTMF 信号进行频率检测, 画出幅度谱。根据幅度谱的两个峰值,分别查找并确定输入电话号码,并将 其拨号并响应。 3.4 设计 GUI 实现更加友好的人机对话的界面,加入了界面窗

7、口, 各种数据可以从窗口 直接输入,并且设置开始按钮和清除按钮,可以从窗口选择六位或者八位电 话号码的输入,在窗口中可以直接显示出电话号码基频的幅值,简洁、方便。 3 图 3.4.1 具体的界面窗口。 3.5 原理 双音多频( Dual Tone Multi Frequency, DTMF)信号是音频电话中的 拨号信号,由美国AT gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, main_OpeningFcn, . gui_OutputFcn, main_Outp

8、utFcn, . gui_LayoutFcn, , . gui_Callback, ); if nargin end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end function main_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles); function vara

9、rgout = main_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; function pushbutton1_Callback(hObject, eventdata, handles) global num_string; global bool; num_string=strcat(num_string,1); set(handles.text1,string,num_string); if bool=0; Music(1); else Signal(1); end function pushbut

10、ton2_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,2); set(handles.text1,string,num_string); if bool=0; Music(2); else Signal(2); 12 end function pushbutton3_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num

11、_string,3); set(handles.text1,string,num_string); if bool=0; Music(3); else Signal(3); end function pushbutton4_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,4); set(handles.text1,string,num_string); if bool=0; Music(4); else Signal(4); end functio

12、n pushbutton5_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,5); set(handles.text1,string,num_string); if bool=0; Music(5); else Signal(5); end function pushbutton6_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strc

13、at(num_string,6); set(handles.text1,string,num_string); if bool=0; Music(6); else Signal(6); end function pushbutton7_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,7); set(handles.text1,string,num_string); if bool=0; Music(7); 13 else Signal(7); en

14、d function pushbutton8_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,8); set(handles.text1,string,num_string); if bool=0; Music(8); else Signal(8); end function pushbutton9_Callback(hObject, eventdata, handles) global num_string;global bool; num_st

15、ring=strcat(num_string,9); set(handles.text1,string,num_string); if bool=0; Music(9); else Signal(9); end function pushbutton10_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,*); set(handles.text1,string,num_string); if bool=0; Music(42); else Signa

16、l(42); end function pushbutton11_Callback(hObject, eventdata, handles) global num_string;global bool; num_string=strcat(num_string,0); set(handles.text1,string,num_string); if bool=0; Music(0); else Signal(0); end function pushbutton12_Callback(hObject, eventdata, handles) global num_string;global b

17、ool; 14 num_string=strcat(num_string,#); set(handles.text1,string,num_string); if bool=0; Music(35); else Signal(35); end function pushbuttonCall_Callback(hObject, eventdata, handles) global bool; global num2_string; global num_string; num2_string=num_string; num_string=; Call(); if str2num(num2_str

18、ing)=10000; bool=1; Music(10000); else Music(11); end set(handles.text2,string,num2_string); set(handles.text1,string, ); function pushbuttonDown_Callback(hObject, eventdata, handles) global num_string; global music; global bool; bool=0; num_string=; set(handles.text1,string, ); set(handles.text2,st

19、ring, ); music=0; function text1_CreateFcn(hObject, eventdata, handles) function text2_CreateFcn(hObject, eventdata, handles) signal.m function y=Signal(d); tm=1,2,3,65; 4,5,6,66; 7,8,9,67; 42,48,35,68; N=205; Fs=8000; K=18,20,22,24,31,34,38,42; f1=697,770,852,941; f2=1209,1336,1477,1633; for p=1:4;

20、 for q=1:4; if tm(p,q)=abs(d); break; end 15 end if tm(p,q)=abs(d); break; end end n=0:1023; y = sin(2*pi*n*f1(p)/Fs) + sin(2*pi*n*f2(q)/Fs); sound(y,Fs); X=goertzel(y(1:205),K+1); val=abs(X); stem(K,val,.);grid on ;xlabel(k);ylabel(|X(k)|); call.m function v=Call(); global num2_string; tm=1,2,3,65;

21、 4,5,6,66; 7,8,9,67; 42,0,35,68; Fs=8000; f1=697,770,852,941; f2=1209,1336,1477,1633; TN=str2num(num2_string); len=length(num2_string); for l=1:len; d=fix(TN/10(len-l); TN=TN-d*10(len-l); for p=1:4; for q=1:4; if tm(p,q)=abs(d); break; end end if tm(p,q)=abs(d); break; end end n=0:1023; y = sin(2*pi

22、*n*f1(p)/Fs) + sin(2*pi*n*f2(q)/Fs); sound(y,Fs); pause(0.2); end music.m function Music(d); global music; tm=1,2,3,65; 4,5,6,66; 7,8,9,67; 42,0,35,68; N=205; Fs=8000; K=18,20,22,24,31,34,38,42; f1=697,770,852,941; f2=1209,1336,1477,1633; for p=1:4; for q=1:4; 16 if tm(p,q)=abs(d); break; end end if tm(p,q)=abs(d); break; end end hfile =int2str(d),.wav; y, Fs, nbits = wavread(hfile); music=audioplayer(y,Fs); play(music); n=0:1023; y = sin(2*pi*n*f1(p)/8000) + sin(2*pi*n*f2(q)/8000); X=goertzel(y(1:205),K+1); val=abs(X); stem(K,val,.);grid on ;xlabel(k);ylabel(|X(k)|); end

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1