拨号音识别matlab

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

尝试六电话拨号音的合成与辨认

1.尝试目标本尝试基于对电话通讯体系中拨号音合成与识此外仿真实现,首要涉及到电话拨号音合成的根基道理及识此外首要要领,操作 MATLAB 软件以及 FFT 算法实现对电话通讯体系中拨号音的合成与辨认。并进一步操作 MATLAB 中的图形用户界面 GUI 建造简朴直观的模仿界面。使其对电话通讯体系拨号音的合成与辨认有个根基的相识。可以或许操作矩阵差异的基频合成 0 - 9 差异按键的拨号音,并可以或许对差异的拨号音加以正确的辨认,实现由拨号音理会出电话号码的进程。进一步操作 GUI 做出简朴的图形操纵界面。要求界面清晰,画面简捷,易于领略,操纵简朴。从而实现对电话拨号音体系的简朴的尝试仿真。

2.尝试道理

双音多频 DTMF( Dual Tone Multi-Frequency )信号,是用两个特定的单音频率信号的组合来代表数字或成果。在 DTMF 电话机中有 16 个按键,个中 10 个数字键 0 — 9 , 6 个成果键 * 、 # 、 A 、 B 、C 、 D 。个中 12 个按键是我们较量认识的按键,其它由第 4 列确定的按键作为保存,作为成果键留为此后他用。按照 CCITT 提议,国际上回收 697Hz 、 770Hz 、 852Hz 、 94lHz 低频群及 1209Hz 、1336Hz 、 1477Hz 、 1633Hz 高频群。从低频群和高频群恣意各抽出一种频率举办组合,共有 16 种组合,代表 16 种差异的数字键或成果,每个按键独一地由一组行频和列频构成,如表 1 所示。

表 1 : DTMF 的组合成果

3.尝试内容

(1).图形电话拨号面板的建造操作 GUI 图形用户界面计划器材建造电话拨号面板,把 DTMF 信号和电话机的键盘矩阵对应起来。个中选用我们认识的 10 个数字键 0 — 9 , 2 个成果键“ * ”、“#”,另四个键省略。凭证图 1 电话机键盘矩阵的分列方法建造四行三列的按键控件。每个按键可用( Push Button )添加。

然后,为了更直观的反应对应的按键号码,可以配置一个编辑框,用于动态的表现拨号号码,模仿现实电话的拨号表现窗口。编辑框可用( Edit Text )添加。

其它,为了图形电话拨号面板的简捷雅观,可以添加空缺地区作为配景,并用静态文本框建造笔墨信息。配景可用( Frame )添加,静态文本框可用( Static Text )添加。

最终操作 GUI 图形用户界面计划器材天生的图形电话拨号面板用于拨号音的合成发生部门,如下图所示。这里将其生涯为tu1.fig文件。

(2). DTMF 信号的发生合成此刻将对上节建造的图形电话拨号面板上的各控件单元的举措和变革举办配置,即对 tu1.m 文件举办编辑。其首要的成果是使对应的按键,凭证表 1 的对应相关发生响应的拨号音,完成对应行频及列频的叠加输出。另外,对付图形界面的必要,还要使按键的号码数字表现在拨号表现窗口中。鉴于 CCITT 对 DTMF 信号划定的指标,这里每个数字信号取 1000 个采样点模仿按键信号,而且每两个数字之间用 100 个 0 来暗示隔断来模仿静音。以便区别持续的两个按键信号。隔断的静音信号也是在按键时发生的。

以按键 0 为例,简朴先容拨号音发生的进程: % 按键 0 的相应函数

function varargout = pushbutton0_Callback(h, eventdata, handles, varargin)

n=[1:1000]; % 每个数字 1000 个采样点暗示

d0=sin(0.7217*n)+sin(1.0247*n); % 对应行频列频叠加

n0=strcat(get(handles.edit1,'string'),'0'); % 获取数字号码

set(handles.edit1,'string',n0); % 表现号码

space=zeros(1,100); %100 个 0 模仿静音信号

global NUM

phone=[NUM,d0];

NUM=[phone,space]; % 存储持续的拨号音信号

wavplay(d0,8192); % 发生拨号音

措施表明: NUM 为界说的全局变量,用于存储持续的拨号音( DTMF )信号,包罗数字信号音以及静音信号。

d0=sin(0.7217*n)+sin(1.0247*n) 中的行频与列频是由表 1 中 0 键对应的 ,计较得出,已知声音取样频率,则取样后,。

对付保存的两个成果键“ * ”“#”,凭证现行键盘式拨号电话的风俗,将“ * ”作为删除键,“#”作为确认键。“ * ”删除键的浸染是将前面拨错的号码删除退回,示意为将表现窗口已经表现的错误号码退回一位数字,而且将持续拨号音信号的存储单位 NUM 中退回一位拨号音信号和静音信号。删除可以举办持续的操纵。“#”确认键的浸染是将前面拨过的号码举办确认保存,意味着此时持续拨号音信号的存储单位 NUM 中的信号即为最后用于识此外持续拨号音 DTMF 信号,并在表现窗口中表现“#”号作为标志。% 删除键的相应函数

function varargout = pushbuttonback_Callback(h, eventdata, handles, varargin)

n=[1:1000];

num=get(handles.edit1,'string');

l=length(num);

n11=strrep(num,num,num(1:l-1)); %去掉末端号码在面板上的表现

d11=sin(0.7217*n)+sin(0.9273*n);

set(handles.edit1,'string',n11);

global NUM

L=length(NUM);

NUM=NUM(1:L-1100); %删除末端号码在拨号音信号中的存储

wavplay(d11,8192);

(3).DTMF 信号的检测辨认要实现电话拨号音( DTMF )信号的检测辨认,可以通过直接计较付里叶调动获得输入信号的构成频率。这里回收 FFT 算法对信号举办解码说明。起首对吸取到的数字信号作 FFT 说明,计较出其幅频谱,进而获得功率谱,构成输入信号的频率一定对应功率谱的峰值。对付持续的双音多频( DTMF )信号,必要把有用的数字拨号信号从静音隔断信号中支解提取出来,然后再用 FFT 算法对信号举办解码说明。 MATLAB 实现信号音的辨认如下: % 信号音辨认

---------------------------------------------------------------- function varargout = pushbuttonNUM_Callback(h, eventdata, handles, varargin)

global NUM

wavplay(NUM,8192);

L=length(NUM);

n=L/1100;

number='';

for i=1:n

j=(i-1)*1100+1;

d=NUM(j:j+999); % 截取出每个数字

f=fft(d,2048); % 以 N=2048 作 FFT 调动

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; % 确定行数

elseif (num(1) < 200) row=2;

elseif (num(1) < 220) row=3;

相关文档
最新文档