1、1.1简介基于对电话通信系统中拨号音识别的仿真实现,第一步我们需了解电话拨号音识别的基本原理和主要方法,之后利用 MATLAB 软件以及 FFT 算法实现对电话通信系统中拨号音的识别,最后对电话数字拨号模拟1.2 实验目的 电话拨号音识别就是利用矩阵不同的基频合成 0 9 不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出号码数字的过程。进一步利用 GUI 做出简单的图形操作界面,从而实现对电话拨号音系统的简单的计算机仿真。1.3基本原理 电话拨号音识别的基本原理涉及到双音多频 DTMF(Dual Tone Multi Frequency),它是由高频群和低频群组成,高低
2、频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信令有16个编码。双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。双音多频的拨号键盘是44的矩阵,每一行代表一个低频,每一列代表一个高频。每按一个键就发送一个高频和低频的正弦信号组合,比如1相当于697和1209赫兹(Hz)。交换机可以解码这些频率组合并确定所对应的按键。DTMF编解码器在编码时将击键或数字信息转换成双音信号并发送,解码时在收到的DTMF信号中检测击键或数字信息的存在性。一个DTMF信号由两个频率的音频信号叠加构成。这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。
3、每一对这样的音频信号唯一表示一个数字或符号。电话机中通常有16个按键,其中有10个数字键09和6个功能键*、#、A、B、C、D。由于按照组合原理,一般应有8种不同的单音频信号。因此可采用的频率也有8种,故称之为多频,又因它采用从8种频率中任意抽出2种进行组合来进行编码,所以又称之为“8中取2”的编码技术。根据CCITT的建议,国际上采用的多种频率为697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8种。用这8种频率可形成16种不同的组合,从而代表16种不同的数字或功能键,具体组合见下表。表一:DTMF 的组合功能1.4具体实现步骤1.4.1
4、图形电话拨号面板的制作 创建GUI步骤:在主界面菜单栏上点击File-New-GUI,选择Blank GUI(Default),即可进入GUI图形用户界面。利用GUI 图形用户界面设计工具制作电话拨号面板,把 DTMF 信号和电话机的键盘矩阵对应起来。其中选用我们熟悉的 10 个数字键 0 9 ,2 个功能键“ * ”、“”,另四个键省略。按照图 1 电话机键盘矩阵的排列方式制作四行三列的按键控件。每个按键可用 ( Push Button )添加。 然后,为了更直观的反映对应的按键号码,可以设置一个编辑框,用于动态的显示拨号号码,模拟实际电话的拨号显示窗口。编辑框可用 ( Edit Text
5、)添加。 最终利用 GUI 图形用户界面设计工具生成的图形电话拨号面板用于拨号音的合成产生部分,如下图所示。这里将其保存为tu1.fig文件。1.4.2 DTMF 信号的产生合成 现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对 tu1.m 文件进行编辑。其主要的功能是使对应的按键,按照表 1 的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。 鉴于 CCITT 对 DTMF 信号规定的指标,这里每个数字信号取 1000 个采样点模拟按键信号,并且每两个数字之间用 100 个 0 来表示间隔来
6、模拟静音。以便区别连续的两个按键信号。间隔的静音信号也是在按键时产生的。1.4.3 DTMF 信号的检测识别 要实现电话拨号音( DTMF )信号的检测识别,可以通过直接计算傅里叶变换得到输入信号的组成频率。这里采用 FFT 算法对信号进行解码分析。首先对接收到的数字信号作 FFT 分析,计算出其幅频谱,进而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。对于连续的双音多频( DTMF )信号,需要把有效的数字拨号信号从静音间隔信号中分割提取出来,然后再用 FFT 算法对信号进行解码分析。MATLAB 实现信号音的识别如下: 1.4.4 仿真结果-数字“”的模拟对于本次实验项目,一开始我们
7、想到了两种解决方法,第一种是自己录拨号音,编写对应拨号音识别函数,然后将音频文件导入MATLAB的识别函数中,利用函数计算分析识别出相应的拨号键,并绘制出频谱图;第二种是:利用GUI界面来仿真模拟电话拨号过程,按照高低频率和拨号按键相匹配的表格(表一)给每个按键写入响应函数,这样就能实现拨相应的按键时发出对应的频率合成音,同时写入识别函数,同时在GUI界面再编写一个识别按键,这样就能在拨号音发出的同时识别出该拨号键并绘制出频谱图。本次我们采用的是第二种方法。1、功能较少:只能实现09的10个数字的识别,功能较少,可以再添加删除、清空、确认、返回、关闭等按键及功能。2、界面粗糙不美观:只是简单的
8、使用GUI来设计拨号面板,所以界面很粗糙简单。3、各程序分立不集中:各个实现程序都太分立,频谱分析、识别、拨号按键等功能的显示不在同一平面内,查看还需要分别打开。1康华光.电子技术基础数字部分.北京:高等教育出版社,2006;2高海林钱满义.DSP 技术及其应用.北京交通大学电工电子教学基地;3王彬.MATLAB数字信号处理.北京.机械工业出版社。4电话拨号音的识别MATLAB之旅2024的ks5合肥学院.课程设计论文.function varargout = untitled1225(varargin)% UNTITLED1225 MATLAB code for untitled1225.f
9、ig% UNTITLED1225, by itself, creates a new UNTITLED1225 or raises the existing% singleton*.% H = UNTITLED1225 returns the handle to a new UNTITLED1225 or the handle to% the existing singleton*.% UNTITLED1225(CALLBACK,hObject,eventData,handles,.) calls the local% function named CALLBACK in UNTITLED12
10、25.M with the given input arguments.Property,Value,.) creates a new UNTITLED1225 or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before untitled1225_OpeningFcn gets called. An% unrecognized property name or invalid value makes property applica
11、tion% stop. All inputs are passed to untitled1225_OpeningFcn via varargin.% *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help untitled1225% Last Modified by GUIDE v
12、2.5 25-Dec-2015 19:14:02% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, .gui_OpeningFcn, untitled1225_OpeningFcn, .gui_OutputFcn, untitled1225_OutputFcn, .gui_LayoutFcn, , .gui_Callback, );if nargin & ischar(varargin1
13、) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:% End initialization code - DO NOT EDIT% - Executes just before untitled1225 is made visible.function untitled1225_OpeningFcn(hObject, eventdata, h
14、andles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to untitled1225 (see VARARGIN)% Choose default
15、command line output for untitled1225handles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes untitled1225 wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are returned to the command line.function varargout = untitled122
16、5_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT);% Get default command line output from handles structurevarargout1 = handles.output;function edit1_Callback(hObject, eventdata, handles)% hObject handle to edit1 (see GCBO)% Hints: get(hObject,S
17、tring) returns contents of edit1 as text% str2double(get(hObject,) returns contents of edit1 as a double% - Executes during object creation, after setting all properties.function edit1_CreateFcn(hObject, eventdata, handles)% handles empty - handles not created until after all CreateFcns called% Hint
18、: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,white);function edit2_Callback(hObject, eventdata, handles)% hObject handle to edit2 (see GCBO) returns contents of ed
19、it2 as text) returns contents of edit2 as a doublefunction edit2_CreateFcn(hObject, eventdata, handles)% - Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)% hObject handle to pushbutton1 (see GCBO)n=1:1000; % 每个数字 1000 个采样点表示 d0=sin(2*pi*n*697/8192)+
20、sin(2*pi*n*1209/8192); % 对应行频列频叠加 n0=strcat(get(handles.edit1,string), % 获取数字号码 set(handles.edit1,n0); % 显示号码 space=zeros(1,100); %100 个 0 模拟静音信号 global NUM phone=NUM,d0;NUM=phone,space; % 存储连续的拨号音信号 wavplay(d0,8192); % 产生拨号音 figure(1)plot(n,d0)% - Executes on button press in pushbutton2.function pu
21、shbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)d0=sin(2*pi*n*697/8192)+sin(2*pi*n*1336/8192); % 对应行频列频叠加 x=sin(2*pi*n*697/8000)+sin(2*pi*n*1336/8000);d0=sin(0.7217*n)+sin(1.0247*n);2% - Executes on button press in pushbutton3.function pushbutton3_Callback(hO
22、bject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)d0=sin(2*pi*n*697/8192)+sin(2*pi*n*1477/8192); % 对应行频列频叠加 x=sin(2*pi*n*697/8000)+sin(2*pi*n*1477/8000);3% - Executes on button press in pushbutton4.function pushbutton4_Callback(hObject, eventdata, handles)% hObject handle to pushbutton4 (see GCBO)d0=sin(2*pi*n*770/8192)+sin(2*pi*n*1209/8192); % 对应行频列频叠加 x=sin(2*pi*n*770/8000)+sin(2*pi*n*1209/8000);d0=sin(0.7217*n)+sin(1.0247*n)4 % 产生拨号音% - Executes on button press
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1