MATLAB听拨号音识别号码应用

1引言

       双音多频信号(Dual Tone Multiple Frequency , DTMF)最初是由美国贝尔实验室研制。它具有很强的抗干扰能力以及较快的传输速度,因此被广泛应用于音频电话系统中。另外,它也可以在数据通信系统中被用来实现各种数据流和语音等信息的远程传输。DTMF信号令因其能实现更快的拨号速率而逐渐在全世界范围内被广泛采用,加上它便于自动检测识别以及电话业务的扩展,所以很快取代了传统转盘式电话机使用的脉冲计数方式的拨号形式,可以说DTMF语音识别技术已经发展的相对成熟。DTMF信号是将两个特定的单音频信号进行组合来代表特定的数字信号进行数据传输的编码方式,因其具有较强的抗干扰能力,目前被广泛应用于电话拨号以及交互式控制系统中,对它的检测十分关键。本文提出一种基于MATLAB的语音识别系统,通过读取手机拨号音录音文件,经过频率分析,实现了手机号码识别的功能。

 

2设计原理

2.1 拨号音信号的实质

       拨号音信号为DTMF: 即Double Tone Multiple Frequency,双音多频信号 。DTMF信号的产生原理:双音频信号是两个正弦波信号的叠加,选定两个频率fl和fh后很容易地得到这种信号的数学表达式: 。

2.2 DTMF信号特点

1.所有音频都位于人的可听范围内,因此按键下去时人可以听到。

2.8个频率中没有一个频率是其他任意一个频率的倍数。

3.任意两个频率的组合,相加或相减都不等于其他任意一个频率。

       这些特性不仅简化了DTMF信号的解码同时也降低了DTMF误检的概率。国际上采用的频率有:低频组(697hz,770hz,852hz,941hz),高频群(1209hz,1366hz,1477hz,1633hz)。用这8种频率可形成16种不同的组合,从而代表16种不同的数字或功能键,具体组合如图一:

MATLAB听拨号音识别号码应用_第1张图片

 图1 DTMF信号组合表

2.3识别DTMF信号的方法

      利用傅里叶变换估计出DTMF信号中两个单频信号的频率值,在误差的范围内对照DTMF信号表即可知道DTMF信号表达的值,从而实现听拨号音识别号码的功能。

3设计思路

3.1 系统总体构想

读取拨号音的录音文件,找到有效信号,将拨号音信号分为11个有效的单个信号;制作两个带通滤波器,一个带通范围697Hz到941Hz,另一个1209Hz到1477Hz,使11个有效的单个信号依次通过这两个带通滤波器,通过算法获得信号的低频率段最高频率和高频率段最高频率,然后通过判断语句识别单个信号,将数据储存在数组中,最后依次输出数组中的值从而得到号码。

3.2 系统框架图

MATLAB听拨号音识别号码应用_第2张图片

图2 系统框架图

4功能实现

4.1 拨号音录音文件的读取

    通过audioread函数读取拨号音的录音文件,如图三所示。audioread函数的用法:

[y,Fs] = audioread(filename)

[y,Fs] = audioread(filename,samples)

[y,Fs] = audioread(___,dataType)

输入:

filename指要读取的文件名称, 注意引号和文件后缀;

samples指读取文件的区域,举个例子,如果文件有100个数据那么长,如果读取前一半的数据,此处应为[1,50];

datatype指读取后文件的数据格式,如double和native。

输出:

y是读出数据,为数组,双声道为二维数组,两个列向量

Fs为音频文件的采样率

MATLAB听拨号音识别号码应用_第3张图片

图3 拨号音时域图

4.2 信号分割

根据该信号的时域图,找到有效信号的采样点,然后用[y,Fs] = audioread(filename,samples);将信号分为11个有效单个信号,如图四所示:

MATLAB听拨号音识别号码应用_第4张图片

图4 分割的单个拨号音时域图

4.3 信号储存

  11个有效单个信号储存在cell{}数组中,方便后面使用。

4.4 带通滤波器

      应用切比雪夫滤波器,设计了带通滤波器:

     function Hd=band_pass(fsl,f1,f3,fsh,rp,Apass,rs,Fs),fs1:衰减截止左边界、f1:通带左边界、f3:通带右边界 、fsh:衰减截止右边界 ,通过改变fs1、f1、f3、fsh的值可做出低频段和高频段的带通滤波器。

      令fs1=500,f1=697,f3=941,fsh=1000,做出一个697HZ到1941HZ的低频段的带通滤波器。

MATLAB听拨号音识别号码应用_第5张图片

 图5 单个信号通过低频段带通滤波器后的时域图

      令fs1=1000,f1=1209,f3=1477,fsh=1600,做出一个1209HZ到1477HZ的高频段的带通滤波器。

MATLAB听拨号音识别号码应用_第6张图片

图6单个信号通过高频段带通滤波器后的时域图

4.5 提取特征频率

4.5.1 傅里叶变换

通过y=fft(x)函数对滤波后的信号进行傅里叶变换,绘制该信号的频域图,可得到信号的低频段最高频率和高频段最高频率。

原始按键音:

 MATLAB听拨号音识别号码应用_第7张图片

 图7 分割的单个拨号音频域图

通过低频段带通滤波器后:

MATLAB听拨号音识别号码应用_第8张图片

 图8 单个信号通过低频段带通滤波器后的频域图

通过高频段带通滤波器后:

MATLAB听拨号音识别号码应用_第9张图片 图9 单个信号通过高频段带通滤波器后的频域图

4.5.2 获得低频和高频段最高频率

Z=abs(fft(x1));                %数组Z为信号滤波后各频率的绝对值

[mal, I]=max(Z);               %求Z中最大值

index_lo=I/length(Z)*Fs;       %求出最大频率

4.6 判断单个号码

用if、 if else实现条件判断,需同时满足低频和高频段最高频率条件才识别为一个号码。本系统提取的低频和高频段最高频率存在误差,其中低频段30HZ,高频段40HZ,判断条件中加入了误差范围,使其识别更精准。

4.7 识别整个号码

用for i=1:1:11 实现循环,意思是从i=1开始,循环一次后i加一,直到i=11时停止,实现依次对11个有效单个信号的循环判断。

5系统输出结果

录一段手机号码拨号音的录音文件,保存在电脑的相应位置,运行程序,成功识别并输出手机号码,程序运行结果如下图:

MATLAB听拨号音识别号码应用_第10张图片图11 程序运行结果图

你可能感兴趣的:(语音识别,matlab)