MATLAB应用课题二GUI拨号实验

合集下载

matlab中gui教程

matlab中gui教程

11 图形用户界面(GUI )制作用户界面(或接口)是指:人与机器(或程序)之间交互作用的工具和方法。

如键盘、鼠标、跟踪球、话筒都可成为与计算机交换信息的接口。

图形用户界面(Graphical User Interfaces ,GUI )则是由窗口、光标、按键、菜单、文字说明等对象(Objects )构成的一个用户界面。

用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。

假如读者所从事的数据分析、解方程、计算结果可视工作比较单一,那么一般不会考虑GUI 的制作。

但是如果读者想向别人提供应用程序,想进行某种技术、方法的演示,想制作一个供反复使用且操作简单的专用工具,那么图形用户界面也许是最好的选择之一。

MATLAB 为表现其基本功能而设计的演示程序demo 是使用图形界面的最好范例。

MATLAB 的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。

即便比较熟悉MATLAB 的读者,在他初次编写GUI 程序时,也会感到棘手。

为使读者获得制作自己GUI 的体验,本章“入门”节提供了一个简单的示例。

读者只要输入所提供的程序,就可引出相应的界面。

本章第2节叙述图形用户界面的设计原则和一般制作步骤。

第3、4节分别介绍用户菜单、用户控件的制作。

出于“由浅入深”的考虑,前4节制作GUI 是通过M 脚本文件实现的。

利用M 函数文件制作GUI ,需要解决数据传递问题,为此专设第5节给予阐述和示例。

MATLAB 5.x 版为方便用户制作图形界面,提供了一个交互式的设计工具guide 。

关于该工具的使用方法,被放在第6节中,以一个综合例题为设计目标逐步展开。

在此提醒读者,假如要比较准确的理解本章程序和掌握本章内容,请先阅读第10章关于图柄的内容。

11.1 入门【*例11.1-1】对于传递函数为1212++=s s G ζ的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。

Matlab与GUI

Matlab与GUI

目 录 内容摘要………………………………………………………………………………1 关 键 词………………………………………………………………………………1 Abstract……………………………………………………………………..…………1 Key words………………………………………………………...…………………1 1.MATLAB介绍…………………………………………………………….………...2 1.1 MATLAB简介………………………………………………………….………2 1.2 发展历程…………………………………………..………………….………..2 1.3 MATLAB应用………………………………………..………………..……….2 1.4 MATLAB功能…………………………...………………………….………….3 2.GUI介绍…………………………………………………………………………….3 2.1 GUI…………………………………….………………………………..………3 2.2 GUI的特点………………………………………………………………..……4 2.3 GUI的优势………………………………………………………………..……4 2.4 GUI应用领域…………………………………………………………..………4 2.5 GUI进行信号处理的一般步骤………………………………………..………4 3.GUI界面学生成绩系统查询仿真………………………………………………….4 3.1 概述………………………………………………………………..………….. 4 3.2学生成绩查询仿真过程………………………………………………………..5 3.3仿真结果分析…………………………………….…………..……………….. 8 4. 结语…………………………………..……………….…………………………... 8 4.1使用GUI的仿真优势………………………………………………………….9 4.2GUI的发展前景………………………………………………………………...9 参考文献……………………………………………………………………………..10 1

matlab中GUI的使用

matlab中GUI的使用

今天由于要帮一朋友用matlab处理一幅图片,处理图片的要求其实很简单,就是把图片加载进matlab中,然后显示出想要的某一列的趋势图来。

如果用代码写的话,程序如下:x=imread(‘文件路径\*.jpg’);figure(1);plot(x(:,100)); %假如要显示的是图像的第100列的趋势图显示效果如下图所示:虽然用M文件写两句很简单,不过带着感情,追求更好是我们永恒的动力,首先用M文件时候人机界面不友好,的看很多的代码,尤其对不太熟悉M编程的的人而言即使很简单也看着比较郁闷,因此我们接下来用matlab中的GUI来完成这个简单的例子,当然编程起来比这个复杂多,但是对使用者而言确很简单清楚。

这个就如同VC中的MFC和WINDOWSFORMS一样。

做成的都是人机交互界面。

不废话了,看例子。

首先打开MATLAB,要新建一个MATLAB GUI 程序有三种方法,这里我直接在命令窗口里输入guide,新建一个空的GUI程序,选择如下图:新建好的GUI编程界面如下图,上面无非就是菜单,工具,还有编程用到的控件,还有编程的用户窗口。

这个和LABVIEW有点像。

不过LABVIEW的前面板都是用控件拖出来的,后面板也是拖控件画出来的。

而GUI的显示界面是拖控件画出来的,其中一些属性参数要设置下,而后面的执行这些控件的都是写的M函数,即后面板都是要写代码的,这个比LABVIEW单纯的画程序要难,当然灵活性也大,不过个人感觉没一个简单的,都难呀。

至于上面控件的意思,怎么拖请自己看吧,若学过MFC或者WINDOWSFORMS的人就会很容易理解的,这之间是太像了,呵呵。

我们的目的是显示图片,并且显示需要的某一列的趋势图。

为了使人机交互更好点,我们可以使加载图片时和我们选择打开文件夹那样完成,即自己选择路径,而不用每次在M文件里改路径。

还有我们要求在加载图片完成时立马显示出这幅图片的大小信息,即多少行,多少列。

matlab练习(创建GUI)

matlab练习(创建GUI)

matlab练习(创建GUI)matlab创建GUI⽅法1:使⽤GUIDE菜单式操作在matlab中输⼊guide,可以打开guide创建GUI的图形界⾯,按菜单操作即可注:matlab未来版本可能会取消掉这种⽅式⽅法2:编写代码创建GUI下⾯是⼀个简单的以代码⽅式创建GUI的例⼦,其中关键的⼀些点包括1. 创建⼀个figure object作为container2. 通过`uicontrol`创建container内的控件,通过`'Callback'`属性关联回调函数3. 回调函数参数⼀般是由两部分组成`(source,eventdata,handles)`,分别表⽰引起回调产⽣的控件的handle和(点击)事件的数据function simple_gui2% SIMPLE_GUI2 Select a data set from the pop-up menu, then% click one of the plot-type push buttons. Clicking the button% plots the selected data in the axes.% Create and then hide the UI as it is being constructed.f = figure('Visible','off','Position',[360,200,450,285]);% Construct the components.hsurf = uicontrol('Style','pushbutton','String','Surf',...'Position',[315,220,70,25],...'Callback',{@surfbutton_Callback});hmesh = uicontrol('Style','pushbutton',...'String','Mesh','Position',[315,180,70,25],...'Callback',@meshbutton_Callback);hcontour = uicontrol('Style','pushbutton',...'String','Contour','Position',[315,135,70,25],...'Callback',@contourbutton_Callback);htext = uicontrol('Style','text','String','Select Data',...'Position',[325,90,60,15]);hpopup = uicontrol('Style','popupmenu',...'String',{'Peaks','Membrane','Sinc'},...'Position',[300,50,100,25],...'Callback',@popup_menu_Callback);ha = axes('Units','pixels','Position',[50,60,200,185]);align([hsurf,hmesh,hcontour,htext,hpopup],'Center','None');% Initialize the UI.% Change units to normalized so components resize automatically.f.Units = 'normalized';ha.Units = 'normalized';hsurf.Units = 'normalized';hmesh.Units = 'normalized';hcontour.Units = 'normalized';htext.Units = 'normalized';hpopup.Units = 'normalized';% Generate the data to plot.peaks_data = peaks(35);membrane_data = membrane;[x,y] = meshgrid(-8:.5:8);r = sqrt(x.^2+y.^2) + eps;sinc_data = sin(r)./r;% Create a plot in the axes.current_data = peaks_data;surf(current_data);% Assign a name to appear in the window title. = 'Simple GUI';% Move the window to the center of the screen.movegui(f,'center')% Make the UI visible.f.Visible = 'on';% Pop-up menu callback. Read the pop-up menu Value property to% determine which item is currently displayed and make it the% current data. This callback automatically has access to% current_data because this function is nested at a lower level. function popup_menu_Callback(source,eventdata) % Determine the selected data set. str = source.String; val = source.Value; % Set current data to the selected data set. switch str{val}; case 'Peaks' % User selects Peaks. current_data = peaks_data; case 'Membrane' % User selects Membrane. current_data = membrane_data; case 'Sinc' % User selects Sinc. current_data = sinc_data; end end% Push button callbacks. Each callback plots current_data in the% specified plot type. function surfbutton_Callback(source,eventdata) % Display surf plot of the currently selected data. surf(current_data); end function meshbutton_Callback(source,eventdata) % Display mesh plot of the currently selected data. mesh(current_data); end function contourbutton_Callback(source,eventdata) % Display contour plot of the currently selected data. contour(current_data); endendGUI展⽰⽅法3:利⽤AppDesigner和⽅法⼀的Guide类似总结我们有三种不同⽅式在matlab中创建简单的GUI程序,其中⽐较推荐的是使⽤编程的⽅式。

matlab gui设计实例 -回复

matlab gui设计实例 -回复

matlab gui设计实例-回复Matlab GUI设计实例Matlab是一种强大的数值计算和科学数据可视化工具,其图形用户界面(GUI)设计功能为用户提供了方便和直观的界面以操作和控制Matlab 程序。

在本文中,我们将通过一个实际的Matlab GUI设计示例,一步一步地回答如何利用Matlab创建和设计GUI界面。

1. 主题介绍:我们将以“学生成绩管理系统”为主题进行GUI设计实例。

这个系统可以帮助教师或管理员管理学生的成绩信息,包括添加学生信息、录入成绩、查询成绩和计算平均成绩等功能。

2. 创建GUI界面:首先,在Matlab编辑器中创建一个新的GUI界面。

可以通过在命令行窗口中输入“guide”命令或在编辑器中点击“Guide”来打开GUI设计工具。

3. 添加UI元素:在GUI设计器中,可以通过拖拽和放置的方式添加各种UI元素,例如按钮、文本框、下拉菜单等。

对于我们的学生成绩管理系统,我们可以添加一个“添加学生”按钮、一个“录入成绩”按钮和一个“查询成绩”按钮。

此外,我们还可以添加一些文本框和标签用于显示学生信息和成绩。

4. 设置UI元素属性:在添加UI元素后,可以通过双击每个元素来设置其属性。

例如,对于“添加学生”按钮,可以设置其名称为“添加学生”并设置其回调函数。

对于文本框和标签,可以设置其初始值和位置等。

5. 编写回调函数:回调函数是指在用户与UI元素交互时执行的操作代码。

对于我们的学生成绩管理系统,我们需要编写一些回调函数来实现具体功能。

例如,对于“添加学生”按钮,我们可以编写一个回调函数来添加学生的姓名、学号和班级等信息。

对于“录入成绩”按钮,我们可以编写另一个回调函数来录入学生的各科成绩。

6. 运行GUI界面:完成GUI界面的设计和回调函数的编写后,我们可以点击GUI设计器中的“运行”按钮来查看和测试界面的功能和效果。

可以输入测试数据并查看结果是否正确。

7. 完善和优化界面:在运行过程中,我们可能会发现界面的一些问题或不足之处,例如布局不合理、显示不清晰等。

(完整版)MatlabGUIDE使用说明(MatlabGUI界面)

(完整版)MatlabGUIDE使用说明(MatlabGUI界面)

去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录。

从简单的例子说起吧。

创建Matlab GUI界面通常有两种方式:1,使用 .m 文件直接动态添加控件2. 使用GUIDE 快速的生成GUI界面显然第二种可视化编辑方法算更适合写大型程序。

一:创建GUI1.在 .m文件中动态添加例如h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…'numbertitle','off','position',[100 100 300 100]);h_edit=uicontrol('style','edit','backgroundcolor',[1 1 1],'position',[20 20 50 20],...'tag','myedit','string','1','horizontalalignment','left');h_but1=uicontrol('style','pushbutton','position',[20 50 50 20],'string','INC',...'callback',['v=eval(get(h_edit,''string''));',...'set(h_edit,''string'',int2str(v+1));']);h_but2=uicontrol('style','pushbutton','position',[80 50 50 20],'string','DEC',...'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);2.使用GUIDE帮助创建GUI在Command 里面输入GUIDE 或者从菜单里面,或者从快捷按钮均可进入GUIDE新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:Layout Editor:布局编辑器;Alignment Tool:对齐工具;Property Inspector:对象属性观察器;Object Browser:对象浏览器;Menu Editor:菜单编辑器。

MATLAB-GUI简单例子操作演示

题目要求:在窗口中添加“按钮”控件和“文本”控件,在按下按钮时,文本控件显示“this is my work”
1.在command widows中输入guide,调出guide控制窗口
2.在出现的窗口中新建一个空白的GUI,即BLANK GUI
3.拖入push button 控件和Edit Text 控件
4.设置Edit Text的属性string改成空白,style改成text, tag改为txthello
这是要注意tag是句柄的意思,句柄是编写程序时要用到的,看后边就知道了
5.保存文件,注意这里一定要先保存,文件名取为“c2figu1”保存之后才会有属性栏中callback 的变化
上图是没有保存时的callback
上图是保存后的callback
保存后弹出一个M文件编辑窗口,如下图。

注意这个窗口中的内容都是不可删除的。

6.在此M文件窗口中找到此段话:
在它的下边写入这段话:
set(handles.txthello,'string','this is my work');
然后保存
7.在command windows中输入文件名:c2figu1
出现如下窗口:
点击push botton,出现这样的情况:
OK!演示完成。

实验项目1 MATLAB熟悉使用及编程基础2

实验项目1 MATLAB熟悉使用及编程基础MATLAB是美国Mathworks公司推出的一套高件能的数值分析和计算软件,它将矩阵运算、数值分析、图形处理、编程处术结合在一起,为用户提供了一个强有力的科学及工程问题分析计算和程序设计的工具。

MATLAB本身也在不断改进和创新,特别是2000年以出的版本6,无论在界面设计、计算方法、编程阶段和工具等方面都有了巨大的突破,全面引入了面向对象编程的概念和方法,使MATLAB真正成为了具有全部高级语言功能和特征的新一代软件开发平台。

MATLAB开发环境是一组工具和组件的集成,这些工具是图形化的用户接口,它们包括 MATLAB桌面、命令窗口、命令历史窗口、编辑调试窗口以及帮助信信息、工作空间、文件和搜索路径等浏览器。

MATLAB集成了丰富的数学函数库,其强大的计算能力覆盖了从基本函数(如求和、正弦、余弦和复数运算等)到特殊函数(如矩阵求逆、矩阵特征值、贝塞尔函数和快速傅里叶变换等)的范围。

MATLAB语言是一种高级编程语言,包括控制流的描述、函数、数据结构、输入输出及面对对象编程,既可以编制适用于快速使用的小程序,也可以编制大型复杂的应用程序。

MATLAB提供了功能强大的图形系统,既可以完成二维和三维数据的可视化、图像处理、动画和图形表达等功能,也可以定制图形的外观,如建立一个完整的图形用户界由的应用程序。

1.实验目的:掌握MA TLAB编程语言和偏微分方程PDE工具箱对电磁场的基本问题进行仿真;2 实验内容:1、MATLAB启动MA TLAB安装到硬盘后,启动方法有:(1)点击Windows桌面上自动生成的快捷方式图标;(2)点击matlab 6\文件夹下快捷方式图标令MATLAB(3)点击matlab/bin/win32文件夹中的Matlab.exe2、m文件编写熟悉基本指令、基本数学运算,借助help、lookfor等命令实现在线帮助。

建立M文件的一般步骤如下:(1)打开文件编辑器:指的是MA TLAB内部编辑/调试器,可以有几种不同的方法打开文件编辑器,最简单的方法是在操作桌面助工具栏上选择蹦(建立新文件)或选择瞪(打开已有的文件),也可以在命令窗口输入命令edit建立新文件或输入命令edit filename,打开名为fi1ename的M文件。

MATLABGUI程序设计

MATLABGUI程序设计在MATLAB中,可以使用GUIDE工具箱来创建GUI程序。

GUIDE是MATLAB集成开发环境(IDE)中的一个工具,可以通过简单的拖放和布局来创建GUI界面。

接下来,将介绍一些在MATLAB中设计GUI程序的常用步骤。

首先,打开MATLAB并启动GUIDE工具。

然后,选择“新建GUI”选项,这将打开一个空白的GUI界面。

在GUI界面中,可以添加各种控件,如按钮、文本框、复选框等。

可以使用鼠标拖放这些控件,并在界面上适当位置上放置它们。

一旦添加了控件,可以通过修改属性来自定义每个控件的外观和行为。

例如,可以设置按钮的文本、颜色和回调函数,以便在按钮被点击时执行相应的操作。

除了修改控件属性,还可以为GUI程序添加回调函数。

回调函数是在特定事件发生时执行的函数,如按钮点击、文本框输入等。

通过为控件设置回调函数,可以通过用户在GUI界面上的操作来触发相应的操作。

在编写回调函数时,可以使用MATLAB的各种功能和命令来实现所需的功能。

例如,可以调用数值计算函数、数据分析函数或数据可视化函数来处理用户的输入并呈现结果。

完成GUI程序的设计后,可以点击GUIDE工具栏上的“运行”按钮来运行程序。

此时,MATLAB将根据设计的GUI界面显示出来,并且可以与用户进行交互。

总结起来,MATLAB的GUI程序设计非常强大和灵活。

通过使用GUIDE 工具箱和MATLAB的各种功能,可以轻松地创建一个具有各种功能和交互性的GUI程序。

无论是进行数据分析、图像处理还是模拟实验等,MATLAB 的GUI程序设计都是一个非常有用和方便的工具。

基于MATLAB的双音多频拨号系统的仿真

基于MATLAB的双音多频拨号系统的仿真淮阴工学院数字信号处理课程设计报告题目:基于MATLAB的双音多频拨号系统的仿真系(院): 计算机工程学院专业:通信工程班级:学号:姓名:指导教师:顾相平学年学期: 2013 ~ 2014 学年第 1 学期2013年12月15 日摘要双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。

DTMF信号在电话中有两种作用,一个是用拨号信号去控制交换机接通被叫的用户电话机,另一个作用是控制电话机的各种动作,如播放留言、语音信箱等。

MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。

特别是MATLAB 还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计。

所以该课程设计利用MATLAB进行仿真,编写代码,运行程序,根据提示键入8位电话号码如12345678,回车后可以听见8位电话号码对应的DTMF信号的声音,并输出相应的8幅频谱图,最后显示检测到的电话号码12345678。

说明DTMF信号的参数:采样频率、DFT的变换点数以及观测时间的确定原则。

关键词多音双频频谱图采样频率目录1引言 ....................................................................................................................... - 4 - 2课程设计题目描述和要求 ................................................................................... - 6 - 3课程设计报告内容 ............................................................................................... - 7 -3.1信号的产生及算法实现....................................................................... - 7 -3.2详细设计 ............................................................................................. - 11 -3.3结果分析 ............................................................................................. - 13 - 总结 ........................................................................................................................ - 15 -1引言双音多频(Dual Tone Multi Frequency,DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。

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

《MATLAB基础与应用》 课题二:基于MATLAB的双音多频(DTMF)信号的产生、接收以及可视化拨号系统的实现

内容一:研究DTMF信号的产生以及基于Goertzel算法的接收原理,并使用MATLAB编程实现DTMF拨号系统的信号发生及接收。

双音多频系统,简称为DTMF(Double Tone Multi Frequency),是用按键进行电话拨号的一种制式,由美国AT﹠T贝尔实验室开发。作为实现电话号码快速可靠传输的一种技术,它具有很强的抗干扰能力和较高的传输速度,可广泛应用于电话通信系统中。但绝大部分是用作电话的音频拨号。另外,它也可以在数据通信系统中广泛地用来实现各种数据流和语音等信息的远程传输。 每个DTMF信号是由2个单频率信号叠加而成的,其中一个频率处于低频段(小于1KHz),另一个频率处于高频段(1KHz~2KHz)。高低频段各有四个频率,四个低频表示四行,四个高频表示四列,高、低频组合可以提供16个字符。第四列的最高频率暂时不用,因此可以提供12个字符,包括0到9中一个特定的十进制数字,或者字符*和#。而其它四个字符保留以备扩展使用。字符分配如表1所示。 表1 双音多频通信系统编码表(第四列备用) 1209Hz 1336Hz 1477Hz 1633Hz 697Hz 1 2 3 A 770Hz 4 5 6 B 852Hz 7 8 9 C 941Hz * 0 # D DTMF是一个典型的小型数字信号处理系统。它既有模拟信号的生成和传输部分,需要使用D/A转换;又有在接收端对它进行A/D转换并进行数字信号处理即检测的部分。而且为了提高系统的检测速度并降低成本,还开发了一种特殊的DFT算法,称为Goertzel算法。这种算法既可以用硬件(专用芯片)也可以用软件实现。所以DTMF系统的设计问题是理论与工程相结合的一个典型范例。 1、DTMF信号的产生:每个字符对应的DTMF信号由两个正弦波的数字样本叠加而成。正弦波的采样率为8kHz,硬件必需每125ms输出一个样本。将这个叠加信号送到D/A转换器变换成模拟信号,再通过电话线传送到交换机。 2、DTMF信号的接收:在接收端,将接收到的模拟音频信号进行A/D转换,恢复为数字信号,然后检测其频谱以确定所发送的字符。检测算法可以采用FFT算法,对于N个输入样本,FFT算法的输出点数M不能小于N,所以至少需要N个存储单元。而DTMF信号中只包含固定的8个频率,因此在接收端只需检测8个频率(远远小于输入样本数N),因此针对DTMF信号的特点,在检测端开发了一种特殊的DFT算法,称为Goertzel算法,其本质是一种计算DFT的线性滤波法。 3、Goertzel算法:(参考资料:【1】数字信号处理教程—MATLAB释义》陈怀琛编著)

内容一要求: 采用MATLAB程序实现DTMF双频拨号的全过程,包括: 1、发生端:编程产生12个号码或字符(0~9、*、#)的DTMF信号,使用INPUT语句由用户输入任意的号码或字符,程序产生对应的双正弦信号,要求绘制出DTMF信号波形并发出对应的双频声音;(提示:发生端为了使信号发出足够长声音,可以将信号长度适当加长,比如2500至3000点) 2、接收端:使用 Goertzel算法计算接收到的双频信号的8个基频幅度,并根据设置的幅值门限(可根据8个基频幅度自己设置),找出基频中的两个峰值,从而确定接收到的信号对应的号码或字符。要求绘制接受信号的8个基频的DFT幅度分布图,并显示出接收到的号码或字符。(提

示:接收端得到的信号频率为Nfkfsk,式中的Hzfs8000,是电话数字系统的采样率,N为接收端进行DFT的点数,kf为检测端得到的信号频率,为使kf尽量接近表1中DTMF信号的8个标准基频,根据经验N应该选择205,此时与8个基频对应的8个K值为:18、20、22、24、31、34、38、42。更多资料参看资料【1】) Goertzel算法参考程序: function X=gfft(x,k) N=length(x);x1=[x,0]; d1=2*cos(2*pi*k/N) v=filter(1,[1,-d1,1],x1); w=exp(-i*2*pi*k/N); x=v(N+1)-w*v(N); Goertzel(戈则尔)算法 DTMF检测的原理,是在DTMF频率上,检查接收到的信号能量,以确定是否接收到了正确的DTMF音调对。检测算法可以是利用FFT算法的DFT实现,也可以是滤波器组实现。FFT可以用来计算N个均匀配置的频率的能量。为了获得在1.5%的频率偏差范围内,检测8个DTMF频率所需的频率所需的频率分辨率,对于8KHz的采样率,256点的FFT是必需的。对于要检测的音调数量比较小的情况下,滤波组实现更有效。因为我们关心的频率只有8个,所以用DFT直接计算更有效:

10)()(Nnkn

NWnxkX (3.3.1)

对于8个不同的K值,它对应于表一的DTMF频率。利用戈则尔算法可以更有效的计算出DFT系数,戈则尔算法可以看作是针对每个频率k的匹配滤波器,如图3所示。其中x(n)为系统的输入信号,)(kHk为第k个频率组件上的滤波器传递函数,而X(k)则为相应的滤波器输出。

图3戈则尔算法的流程图 由(2.3.3-1)公式我们得到: 12)2(eeWkkNNjkNN (3.3.2) 用WkNN乘(3.3.2)式右边,我们得到 10)(10)()()(NnnNkNNnknNkN

NWWWnxnxkX (3.3.3)

定义序列 10)()()(NmmnkNkWymxn (3.3.4) 这个方程可以解释为有限长序列x(n),10Nn,与序列)(nuWknN的卷积。 因此)(nyK可以看作是具有冲激响应)(nuWknN的滤波器输出。也就是说,由于有限长输入

)(0zH )(zHk

)(1zHN

X(0) X(k) X(N-1) x(n) x(n),滤波器具有冲激响应 )(nhk)(nu

WknN

(3.3.5)

因此方程(3.3.4)可以表示为 )(*)()(nunxnyWknNk (3.3.6)

根据(3.3.3),(3.3.4)式,以及当n<0和nN时x(n)=0这一事实,我们可以证明 NnnykXk|)()( (3.3.7)

即X(k)是滤波器)(zHk在时间n=N时的输出。 对(3.3.6)式两边作z变换,我们得到:

111)()(zZXzYWkN

k (3.3.8)

第k个戈则尔滤波器的传递函数定义为 111)()()(zzXzYzHWkN

kk k=0,1,2,……,N-1 (3.3.9)

此滤波器有一个极点位于频率NkWk/2的单位圆上,因此可以利用由(3.3.9)式定义的N个滤波器组成平行组合,对输入的数据块进行滤波,计算出整个的DFT,其中每一个滤波器有一个位于DFT的相应频率上的极点。因此戈则尔算法计算出N个DFT系数,所以参数N必须选择得能保证X(k)上靠近DTMF频率kf,这可以通过选择N满足下列关系实现:

Nkffsk (3.3.10)

式中采样频率sf=8kHz是电信系统中最常用的。 图4描绘出了传递函数)(zHk的信号流图。因为系数WkN是复数值,所以下图计算出每个新的)(nyk的值,需要进行四次乘和加。所有的中间值)1(),......1(),0(Nyyykkk都必须计算出来,以便得到最终的输出)()1(kXNyk。因此,图4表明,对于每个频率指标k,计算算法为计算X(k)都需要4N次的复数乘和加。 图4 X(k)计算的流程图 通过组合具有共轭复数极点的滤波器对,可以避免进行复数的乘和加。用因子)1(1ZWKN乘(4.4.2-9)式中)(zHk的分子分母,我们得到:

zzzWWzWH

NkWzzzkNkNkNkNk211111)/2cos(211)1)(1(1)(



 (3.3.11)

由(3.3.11)定义的传递函数的信号流图,利用直接II型实现,表现在图5上,滤波器的递推部分位于延迟元件的左边。而非递推部分则位于延迟软件的右边。因为只是在时间N-1时需要输出量)(nyk,所以我们只是在第(N-1)次的迭代中,才需要计算滤波器的非递推部分。算法的递推部分可表示为 )2()1()2cos(2)()(nnNknxnwwwkkk

(3.3.12)

)1(Nyk的非递推算法可以表示为

)1()()(nWnwnwykk

Nkk

(3.3.13)

图5 式3.3.11表示的信号流图 对于音调检测,只有X(k)的幅值平方是需要的,通过实现这种需求,可以是算法作进一步简

)2(nwk

)(nyk

)(nwk+ +

+ z1

z1

x(n)

-1 )2cos(2N

k kNW

z1 )(nyk )(zH

k )(nx

相关文档
最新文档