电话拨号音的识别解读Word文件下载.docx
《电话拨号音的识别解读Word文件下载.docx》由会员分享,可在线阅读,更多相关《电话拨号音的识别解读Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
1.1简介
基于对电话通信系统中拨号音识别的仿真实现,第一步我们需了解电话拨号音识别的基本原理和主要方法,之后利用MATLAB软件以及FFT算法实现对电话通信系统中拨号音的识别,最后对电话数字拨号模拟
1.2实验目的
电话拨号音识别就是利用矩阵不同的基频合成0-9不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出号码数字的过程。
进一步利用GUI做出简单的图形操作界面,从而实现对电话拨号音系统的简单的计算机仿真。
1.3基本原理
电话拨号音识别的基本原理涉及到双音多频DTMF(DualToneMultiFrequency),它是由高频群和低频群组成,高低频群各包含4个频率。
一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。
DTMF信令有16个编码。
双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。
双音多频的拨号键盘是4×
4的矩阵,每一行代表一个低频,每一列代表一个高频。
每按一个键就发送一个高频和低频的正弦信号组合,比如'
1'
相当于697和1209赫兹(Hz)。
交换机可以解码这些频率组合并确定所对应的按键。
DTMF编解码器在编码时将击键或数字信息转换成双音信号并发送,解码时在收到的DTMF信号中检测击键或数字信息的存在性。
一个DTMF信号由两个频率的音频信号叠加构成。
这两个音频信号的频率来自两组预分配的频率组:
行频组或列频组。
每一对这样的音频信号唯一表示一个数字或符号。
电话机中通常有16个按键,其中有10个数字键0~9和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图形电话拨号面板的制作
创建GUI步骤:
在主界面菜单栏上点击File-New-GUI,选择BlankGUI(Default),即可进入GUI图形用户界面。
利用GUI图形用户界面设计工具制作电话拨号面板,把DTMF信号和电话机的键盘矩阵对应起来。
其中选用我们熟悉的10个数字键0—9,2个功能键“*”、“#”,另四个键省略。
按照图1电话机键盘矩阵的排列方式制作四行三列的按键控件。
每个按键可用
(PushButton)添加。
然后,为了更直观的反映对应的按键号码,可以设置一个编辑框,用于动态的显示拨号号码,模拟实际电话的拨号显示窗口。
编辑框可用
(EditText)添加。
最终利用GUI图形用户界面设计工具生成的图形电话拨号面板用于拨号音的合成产生部分,如下图所示。
这里将其保存为tu1.fig文件。
1.4.2DTMF信号的产生合成
现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对tu1.m文件进行编辑。
其主要的功能是使对应的按键,按照表1的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。
此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。
鉴于CCITT对DTMF信号规定的指标,这里每个数字信号取1000个采样点模拟按键信号,并且每两个数字之间用100个0来表示间隔来模拟静音。
以便区别连续的两个按键信号。
间隔的静音信号也是在按键时产生的。
1.4.3DTMF信号的检测识别
要实现电话拨号音(DTMF)信号的检测识别,可以通过直接计算傅里叶变换得到输入信号的组成频率。
这里采用FFT算法对信号进行解码分析。
首先对接收到的数字信号作FFT分析,计算出其幅频谱,进而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。
对于连续的双音多频(DTMF)信号,需要把有效的数字拨号信号从静音间隔信号中分割提取出来,然后再用FFT算法对信号进行解码分析。
MATLAB实现信号音的识别如下:
1.4.4仿真结果---数字“”的模拟
对于本次实验项目,一开始我们想到了两种解决方法,第一种是自己录拨号音,编写对应拨号音识别函数,然后将音频文件导入MATLAB的识别函数中,利用函数计算分析识别出相应的拨号键,并绘制出频谱图;
第二种是:
利用GUI界面来仿真模拟电话拨号过程,按照高低频率和拨号按键相匹配的表格(表一)给每个按键写入响应函数,这样就能实现拨相应的按键时发出对应的频率合成音,同时写入识别函数,同时在GUI界面再编写一个识别按键,这样就能在拨号音发出的同时识别出该拨号键并绘制出频谱图。
本次我们采用的是第二种方法。
1、功能较少:
只能实现0—9的10个数字的识别,功能较少,可以再添加删除、清空、确认、返回、关闭等按键及功能。
2、界面粗糙不美观:
只是简单的使用GUI来设计拨号面板,所
以界面很粗糙简单。
3、各程序分立不集中:
各个实现程序都太分立,频谱分析、识别、拨号按键等功能的显示不在同一平面内,查看还需要分别打开。
[1]康华光.电子技术基础数字部分.北京:
高等教育出版社,2006;
[2]高海林钱满义.DSP技术及其应用.北京交通大学电工电子教学基地;
[3]王彬.MATLAB数字信号处理.北京.机械工业出版社。
[4]《电话拨号音的识别——MATLAB之旅》——2024的ks
[5]合肥学院.课程设计论文.
functionvarargout=untitled1225(varargin)
%UNTITLED1225MATLABcodeforuntitled1225.fig
%UNTITLED1225,byitself,createsanewUNTITLED1225orraisestheexisting
%singleton*.
%
%H=UNTITLED1225returnsthehandletoanewUNTITLED1225orthehandleto
%theexistingsingleton*.
%UNTITLED1225('
CALLBACK'
hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinUNTITLED1225.Mwiththegiveninputarguments.
Property'
'
Value'
...)createsanewUNTITLED1225orraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforeuntitled1225_OpeningFcngetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtountitled1225_OpeningFcnviavarargin.
%*SeeGUIOptionsonGUIDE'
sToolsmenu.Choose"
GUIallowsonlyone
%instancetorun(singleton)"
.
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Edittheabovetexttomodifytheresponsetohelpuntitled1225
%LastModifiedbyGUIDEv2.525-Dec-201519:
14:
02
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@untitled1225_OpeningFcn,...
gui_OutputFcn'
@untitled1225_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforeuntitled1225ismadevisible.
functionuntitled1225_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstountitled1225(seeVARARGIN)
%Choosedefaultcommandlineoutputforuntitled1225
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesuntitled1225waitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=untitled1225_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
functionedit1_Callback(hObject,eventdata,handles)
%hObjecthandletoedit1(seeGCBO)
%Hints:
get(hObject,'
String'
)returnscontentsofedit1astext
%str2double(get(hObject,'
))returnscontentsofedit1asadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedit1_CreateFcn(hObject,eventdata,handles)
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc&
isequal(get(hObject,'
BackgroundColor'
),get(0,'
defaultUicontrolBackgroundColor'
))
set(hObject,'
white'
);
functionedit2_Callback(hObject,eventdata,handles)
%hObjecthandletoedit2(seeGCBO)
)returnscontentsofedit2astext
))returnscontentsofedit2asadouble
functionedit2_CreateFcn(hObject,eventdata,handles)
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton1(seeGCBO)
n=[1:
1000];
%每个数字1000个采样点表示
d0=sin(2*pi*n*697/8192)+sin(2*pi*n*1209/8192);
%对应行频列频叠加
n0=strcat(get(handles.edit1,'
string'
),'
%获取数字号码
set(handles.edit1,'
n0);
%显示号码
space=zeros(1,100);
%100个0模拟静音信号
globalNUM
phone=[NUM,d0];
NUM=[phone,space];
%存储连续的拨号音信号
wavplay(d0,8192);
%产生拨号音
figure
(1)
plot(n,d0)
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton2(seeGCBO)
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'
%---Executesonbuttonpressinpushbutton3.
functionpushbutton3_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton3(seeGCBO)
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'
%---Executesonbuttonpressinpushbutton4.
functionpushbutton4_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton4(seeGCBO)
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'
%产生拨号音
%---Executesonbuttonpress