当前位置:文档之家› 电话拨号音的合成与识别

电话拨号音的合成与识别

2、“*”号删除键只是实现每次仅删除一位,用于在不小心输错后的修改;而“清空”键实现对编辑框和全局变量NUM的清零,便于再次输入新号码。
3、遇到的问题由于版本的原因,实验指导书中的wavplay不能用,经发现后改为audioplayer。
(2)心得体会:
通过本次实验,理解了电话拨号音合成的原理及识别方法。并进一步熟练了MATLAB的使用方法,提高了运用MATLAB工具分析解决实际问题的能力。
set(handles.edit1,'string','#');%显示确认的标识
n=[1:1000];
d12=sin(0.7214*n)+sin(1.1322*n);%对应行频列频叠加
guidata(hObject, handles);
player12=audioplayer(d12,8192);
playblocking(player12);%产生拨号音
playblocking(player10);%产生拨号音
3、确认键:
function pushbutton12_Callback(hObject,eventdata, handles)
globaln_show;
n_show=strcat(get(handles.edit1,'string'));%保存屏幕中显示的号码
d10=sin(0.7217*n)+sin(0.9273*n);
set(handles.edit1,'string',n10);
globalNUM
L=length(NUM);
NUM=NUM(1:L-1100);%删除末位号码在拨号音信号中的存储player10=audioplayer(d10,8192);
武汉大学教学实验报告
电子信息学院电子信息工程专业2016年**月**日
实验名称电话拨号音的合成与识别指导教师**
姓名***年级大三学号20143012*****成绩
一、预习部分
1.实验目的
2.实验基本原理
3.主要仪器设备(含必要的元器件、工具)
(1)实验目的:
本实验基于对电话通信系统中拨号音合成与识别的仿真实现,主要涉及到电话拨号音合成的基本原理及识别的主要方法,利用MATLAB软件涉及FFT算法实现对电话通信系统中拨号音的合成与识别。并进一步利用MATLAB中的图形用户界面GUI制作简单直观的模拟界面。使其对电话通信系统拨号音的合成与识别有个基本的了解。能够利用矩阵不同的基频合成0-9不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出电话号码的过程。进一步利用GUI做出简单的图形操作界面。要求界面清楚,画面简洁,易于理解,操作简单。从而实现对电话拨号音系统的简单的实验仿真。
4、绘制数字频谱:
以按键0为例:
n=[1:1000];
d0=sin(0.7214*n)+sin(1.0242*n);
D0=fft(d0);%傅里叶变换
figure(1);%绘制频谱图
plot(tt1,fftshift(abs(D0)));
title('按键0的频谱图');
5、清空键:
functionpushbutton14_Callback(hObject,eventdata, handles)
globalNUM
if(length(NUM)==0)
n=[1:1000];
dD=sin(0.7214*n)+sin(1.2519*n);
space=zeros(1,100);
playerD=audioplayer(dD,8192);%产生按键D的声音
playblocking(playerD);
else
利用GUI图形用户界面设计工具制作电话拨号面板,把DTMF信号和电话机的键盘矩阵对应起来。
2、DTMF信号的产生合成
现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对tu1.m文件进行编辑。其主要的功能是使对应的按键,按照表1的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。
space=zeros(1,100);
playerC=audioplayer(dC,8192);
playblocking(playerC);
globaln_show;
set(handles.edit1,'string',n_show);%显示保存的号码
7、重播建:
functionpushbutton16_Callback(hObject,eventdata, handles)
elseifz==[3,2]tel=8;
elseifz==[3,3]tel=9;
end
t(i)=tel;
c=strcat(number,in
end
set(handles.edit3,'string',number);
(2)实验过程及相关程序代码:
a=abs(f);
p=a.*a/10000; %计算功率谱
num(1)=find(p(1:250)==max(p(1:250))); %找行频
num(2)=300+find(p(300:380)==max(p(300:380))); %找列频
if (num(1) < 180) row=1; %确定行数
global NUM
Player_N=audioplayer(NUM,8192);
playblocking(Player_N);
L=length(NUM);
n=L/1100;
number='';
fori=1:n
j=(i-1)*1100+1;
d=NUM(j:j+999); %截取出每个数字
f=fft(d,2048); %以N=2048作FFT变换
set(handles.edit1,'string',n1);%显示号码
space=zeros(1,100);
globalNUM
phone=[NUM,d1];
NUM=[phone,space];%存储连续的拨号音
player1=audioplayer(d1,8192);
playblocking(player1);%产生拨号音
n_show=[];%清空显示信号
set(handles.edit1,'string',[]);%清空显示
6、显示键(显示保存的号码):
functionpushbutton15_Callback(hObject,eventdata, handles)
n=[1:1000];
dC=sin(0.6513*n)+sin(1.2519*n);
1、DTMF信号的产生合成
以按键1为例,简单介绍拨号音产生的过程
代码如下:
functionpushbutton1_Callback(hObject,eventdata, handles)
n=[1:1000];
d1=sin(0.5342*n)+sin(0.9268*n);%对应行频列频叠加
n1=strcat(get(handles.edit1,'string'),'1');%获取数字号码
表1:DTMF的组合功能
(3)主要仪器设备:
工具软件:MATLAB
涉及的MATLAB函数
1. Set
功能:设置对象属性。
基本调用格式:set(H,'PropertyName',PropertyValue,...)
用属性值'PropertyValue'设置关于用参量H标志的对象(一个或多个)
的属性名'PropertyName'(一个或多个)。H可以为一句柄的向量。在这
2、删除键:
functionpushbutton10_Callback(hObject,eventdata, handles)
n=[1:1000];
num=get(handles.edit1,'string');
l=length(num);
n10=strrep(num,num,num(1:l-1));%去掉末位号码在拨面板上的显示
鉴于CCITT对DTMF信号规定的指标,这里每个数字信号取1000个采样点模拟按键信号,并且每两个数字之间用100个0来表示间隔来模拟静音。以便区别连续的两个按键信号。间隔的静音信号也是在按键时产生的。
3、DTMF信号的检测识别
要实现电话拨号音(DTMF)信号的检测识别,可以通过直接计算付里叶变换得到输入信号的组成频率。这里采用FFT算法对信号进行解码分析。首先对接收到的数字信号作FFT分析,计算出其幅度谱,进而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。对于连续的双音多频(DTMF)信号,需要把有效的数字拨号信号从静音间隔信号。
n=[1:1000];
dB=sin(0.5903*n)+sin(1.2519*n);
space=zeros(1,100);
playerB=audioplayer(dB,8192);
playblocking(playerB);
globalNUM;
globaln_show;
NUM=[];%清空拨号音信号
四、教师评语
指导教师 年 月 日
player_NUM=audioplayer(NUM,8192);%重播拨号音信号
playblocking(player_NUM);
end
(3)实验现象:
各个数字按键音的频谱:
相关主题