DTMF 电话拨号音的合成与识别

合集下载

DTMF信号模拟电话拨号制作教程DTMF信号模拟电话拨号制作教程

DTMF信号模拟电话拨号制作教程DTMF信号模拟电话拨号制作教程

DTMF信号模拟电话拨号在看一些电视剧或是电影的时候会有拨电话时并配上电话拨号声音这样的一些镜头,我们都知道很多的视频都是后期配音的,因为原音难免会有杂音或者是演员的声音不好听等。

电话拨号声音是可以用软件生成来模拟的哦。

要实现这一效果就要用到音频生成软件啦。

当然这个音频生成软件不仅仅是只能生成电话拨号声音,还能生成噪音等音频。

如何制作电话拨号声音?在开始前我们还是得先把音频生成软件下载下来,安装之后再打开软件即可。

选择文件新建一个会话,在弹出的新建波形窗口选择采样率为44100HKz,通道和分辨率都保持默认的立体声和16位就可以了。

新建了会话之后选择生成—脉冲信号,紧接着就弹出了生成脉冲信号的窗口。

在拨打号码那里输入你需要拨打的电话号码,如输入:,点击右下角的试听按钮即可试听声音效果。

但是这样听到的声音是很快的,那是因为还没有设置声音间隔,所以在间隔那里设置一下时间。

你是不是发现了这里的时间是以毫秒来计算的,但是我们平时以秒为单位的,现在是毫秒,那设置多长的时间好呢?那在这里我又得大家长点小知识啦,需要用到单位换算,1毫秒=0.001秒,那么按照这个换算的方法,大家就可以设置拨号声音的时间啦,因为这个是间隔的声音,所以不需要间隔太久,设置为500毫秒就已经差不多啦。

然后再试听一下,合适了就点击确定。

确定之后会在音频轨道上面看到生成的波形图,时间间隔为0.5秒就是拨打一个数字号的声音。

就这样生成了拨打电话拨号声音啦,是不是很简单呀。

当然音频生成软件不仅仅是只能生成电话拨号声音,还可以生成其他的声音,如生成噪音、音调等。

下面再给大家说说如何生成其他声音的。

先讲生成噪音,同样的,选择生成—生成噪波,在生成噪波的对话框里面你会看到里面有噪波的颜色和类型选项,颜色有褐噪、粉噪、白噪,而类型则有空间立体声、独立声道、单声道、反相。

最下面还可以设置生成噪波的强度及持续时间。

这个选项没有试听按钮,所以大家都可以通过生成之后来试听噪音的效果,生成之后再音频轨道就可看到噪音波形啦,如果不是所需要的噪音即可选中删除掉,然后再重新生成新的噪波就OK啦。

DSP实验报告 DTMF信号产生与检测

DSP实验报告 DTMF信号产生与检测

DTMF 信号的产生与检测一、 实验目的1、 了解语音拨号的产生和原理;2、 理解和掌握DTMF 信号的产生和检测;3、学会使用MATLAB 软件进行仿真分析;二、实验原理实际的拨号系统中,每一个按键都对应着一个高频信号和一个低频信号。

按下一个键之后,就会产生有一个相应的双音频信号。

通过一个窗函数就可以将其检测出来。

但在实际的过程中要考虑拨号时间之间的间隔。

窗的长短要合适,不能让窗同时滑过两个语音信号,否则就检测不出来。

Y[n]=cos(wl*t)+cos(wh*t)采用Goertzel 算法进行谱分析:Goertzel 算法本质上是一种非标准DFT ,它是DTMF 检测器的基础。

利用这种方法从输入信号中提取频谱信息有效且快速。

该算法实际上是利用双极点IIR 滤波器来有效地计算DFT 值。

一般的DFT 在开始处理之前都需要有一定的数据量,而Goertzel 算法的逐点递归结构就有明显的优点,可以有效地提高系统的响应速度。

Goertzel 滤波器在经过一定数量的样点N(等效于DFT 块的大小)后,输出便聚合到一个Go-ertzel 算法的内部变量Vii(n)上,并由它得出幅度的平方。

简单的数学描述如下:(1)递归计算:vdn)=2cos(2kn /N)·vdn .1).vk(n .2)+x(n)其中vd .1)=0,v 。

(-2)=0,x(n)=input ,n 0·N 。

(2)每N 次循环计算一次:Ix(k)12=yk(N)yk+(N)=V ,(N)+Vk2(N .1).2cos(2kn /N)W(N)Vd(N .1)由上面的分析可以看出,Goertzel 算法只需要对行频和列频及其相应的二次谐波,共计8个频点进行能量计算。

因为只需要少数的频率值并且只对这些值进行滤波,所以Goertzel 算法比DFT 快得多。

其中的二次谐波能量能够把DTMF 信号与声音信号区分开来。

Goertezl 算法的系统函数和流图如下图所示。

DTMF信号的产生及检测要点

DTMF信号的产生及检测要点

DTMF信号的产生及检测要点
1.频率生成:产生DTMF信号的关键是生成两个不同的频率。

一般采
用频率合成器,如计数器、D/A转换器等来产生。

其中,高频系列对应的
频率为1209Hz、1336Hz、1477Hz和1633Hz;低频系列对应的频率为
697Hz、770Hz、852Hz和941Hz。

2.频率叠加:将产生的高频和低频信号进行叠加,从而形成DTMF信号。

叠加可以通过电容或电感来实现,使得两个频率的波形在同一时间段
内同时存在。

3.声音接口:将产生的DTMF信号转换为声音信号,一般通过耳机、
扬声器等设备进行输出。

1.频率分离:DTMF信号检测的第一步是将输入的混合信号分离成高
频和低频两个信号。

这可以通过滤波器、带通滤波器等实现,将不同频段
的信号分离出来。

2. 频率识别:分离后的高频和低频信号需要进行频率识别,找出它
们所对应的频率。

常用的方法有傅里叶变换、Goertzel算法等。

将识别
结果与预设的DTMF频率进行比对,判断输入的信号是哪个数字、字母或
符号。

3.信号解码:识别出的频率对应了DTMF信号的一个组合,需要将其
解码为实际的数字、字母或符号。

一种常用的解码方法是根据频率识别结
果在一个查找表中查找对应的数字、字母或符号。

4.抗干扰:在DTMF信号的检测过程中,还需要考虑到信号的抗干扰性。

DTMF信号可能会受到来自外界的噪声或干扰信号的影响,因此需要
采取一些抗干扰的措施,如滤波、去噪等,以提高信号的可靠性和鲁棒性。

电话拨号音的识别

电话拨号音的识别

电话拨号音的识别作者:迟云飞来源:《无线互联科技》2014年第05期摘要:为了提高信息安全,防止密码失窃,对电话拨号音(DTMF信号)的合成与识别进行了深入的分析和研究。

利用话筒,单片机STC89C52RC和MT8880等芯片从硬件上实现了对电话拨号音的解码。

经过运行测试,系统能够正确的对拨号音信号进行解码。

研究结果具有一定的理论意义和实用价值。

关键词:DTMF;信号解码;MT8880;单片机1 课题研究意义DTMF(Dual Tone Multi Frequency)双音多频信号,是电话网中常用的信令,无论是家用电话、移动电话还是程控交换机,多采用DTMF信号发送接收号码。

DTMF信号的本质是一个高频信号和一个低频信号叠加所形成的一个组合信号,这使DTMF信号的编解码变得非常简单。

正因如此,对使用该技术的应用带来了很大的安全隐患,通过对DTMF信号音的识别来窃取电话号码及银行卡密码之事屡见不鲜。

通过对“电话拨号音的合成与识别”的分析和研究,从而对DTMF信号的编解码原理有清晰的认识,在此基础之上,使寻求一种可以增强其应用安全性的解决方案成为可能。

同时,该课题也涉及到了语音识别技术的相关知识,从而在该基础上可进一步探索研究语音识别技术。

2 硬件识别系统的设计与实现⑴硬件识别系统总体设计。

电话拨号音为音频信号,而硬件电路所能检测和识别的却是电信号。

所以,首先需要利用麦克风将声音信号转换为电信号,从而能够被硬件电路处理。

经麦克风转换后的信号便是DTMF信号。

该信号由于受到环境中的各种噪音的干扰以及麦克风本身声电转换性能的影响而变得很微弱。

硬件系统首先需要将麦克风采集的音频信号进行放大,以便满足后续电路的需要。

LM386是专用的音频放大芯片,其放大增益最大可以达到200倍,并且其外围电路较简单。

本系统利用LM386将麦克风所采集的信号进行放大。

经LM386放大的信号便可以作为MT8880的输入信号,MT8880是专用的DTMF信号编解码芯片,本系统主要是应用该芯片的解码功能。

频谱分析的应用--话拨号音合成与识别

频谱分析的应用--话拨号音合成与识别
式中:k=0,1,2, … ,N; 初始条件 Qm [ −1]= Qm [ −2]= 0;
WNm = e

2π N
m

由于对 DTMF 信号解码只需其频谱的幅值信息,因而可舍去相位信息,输出频谱的 幅度平方值,即
X [m = ]
2ห้องสมุดไป่ตู้
ym [ N = Qm [ N ] + Qm [ N − 1] − 2 cos ]
2.DTMF 信号识别 DTMF 信号的检测是将两个信号频率提取出来,从而确定所接收的 DTMF 是哪个数 字。利用 DFT 对 DTMF 信号进行 N 点的频谱分析,根据谱峰出现的频率点位置 Ni 就可
以确定 DTMF 信号的频率 fi:
f = Ni × f s / N i
DTMF 信号的解码要求快速、简单、准确,Goertzel 算法比 FFT 算法更为有效适用。 因为 FFT 涉及较多的复数乘法和加法,Goertzel 算法可以将复数运算转化为实数运算,从 而减少了计算量,提高了计算速度。Goertzel 算法的基本思想是对 DFT 公式进行转换, 使其成为一个二阶传输函数:
= x[n] sin(ωH n) + sin(ωL n)
式中:ωH 2 = = π f H / f s , ωL 2π f L / f s 分别表示高频低频频率,电话信号的典型抽样频率 为 f s = 8kHz 。 DTMF 信号的标准是:在传送过程中每个按键字占用 100ms,其中信号必须持续至少 40ms,且不得多于 55ms,100ms 里的其余时间为静音(无信号) 。 表 4.1 按键频率对应表 fL 697 Hz 770 Hz 852 Hz 941 Hz W=2pi*fL/fs rad/s 697 Hz 770 Hz 852 Hz 941 Hz 0.5474 0.6048 0.6692 0.7391 N=106 m 9.2 10.2 11.2 12.47 fH 1209 Hz 1 4 7 * m 取整 9 10 11 12 1209 Hz 1336 Hz 1477 Hz 1336 Hz 2 5 8 0 W=2pi*fH/fs rad/s 0.9495 1.0493 1.1600 1477 Hz 3 6 9 # N=106 m 16.02 17.70 19.57 m 取整 16 18 20

dtmf拨号原理

dtmf拨号原理

DTMF拨号原理1. 简介DTMF(Dual Tone Multi-Frequency)是一种用于电话系统中的拨号信号传输方法。

它使用了两个频率合成的音调来表示数字、字母和特殊字符,以实现电话号码的拨号和其他控制功能。

在本文中,我们将详细解释DTMF拨号原理的基本原理,包括DTMF信号的产生、传输和解码过程。

2. DTMF信号的产生DTMF信号由两个基本频率合成而成,分别称为行频和列频。

行频由4个低频音调组成,分别为697 Hz、770 Hz、852 Hz和941 Hz;列频由4个高频音调组成,分别为1209 Hz、1336 Hz、1477 Hz和1633 Hz。

每个按键都对应着一个唯一的行列频率组合。

例如,在电话键盘上按下数字“5”时,会同时发送行频852 Hz和列频1336 Hz的信号。

生成DTMF信号的方法有多种,其中最常见的是使用一个称为双音多路复用器(Dual Tone Multi-Frequency Generator)的集成电路芯片。

该芯片接收输入的数字或字符,并根据对应的行列频率生成相应的DTMF信号。

3. DTMF信号的传输DTMF信号在电话系统中通过音频通道传输,也就是说,它被转换为模拟音频信号后通过电话线路传输。

在拨号过程中,当用户按下电话键盘上的按键时,电话机会将对应的DTMF信号发送到电话交换机或基站。

电话交换机或基站会解码接收到的DTMF信号,并根据解码结果执行相应的操作。

由于DTMF信号是以模拟音频形式传输的,因此在传输过程中可能会受到一些干扰和失真。

为了减少这些干扰和失真对信号识别造成的影响,通常会对DTMF信号进行一些预处理和增强处理。

4. DTMF信号的解码接收到DTMF信号后,需要对其进行解码以获取用户所拨打的数字、字母或特殊字符。

解码过程通常由一个称为双音多路复用解码器(Dual Tone Multi-Frequency Decoder)的集成电路芯片完成。

MATLAB电话拨号音的合成与识别

MATLAB电话拨号音的合成与识别

知识就昱力量MATLAB 电话拨号音的合成与识别1. 实验目的1.本实验内容基于对电话通信系统中拨号音合成与识别的仿真实现。

主要涉及到电话拨号音合成的基本原 理及识别的主要方法,利用 MATLAB 软件以及FFT 算法实现对电话通信系统中拨号音的合成与识别。

并进一步利用 MATLAB 中的图形用户界面 GUI 制作简单直观的模拟界面。

使其对电话通信系统拨号音 的合成与识别有个基本的了解。

2. 能够利用矩阵不同的基频合成 0 — 9不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实 现由拨号音解析出电话号码的过程。

进一步利用 GUI 做出简单的图形操作界面。

要求界面清楚,画面简洁,易于理解,操作简单。

从而实现对电话拨号音系统的简单的实验仿真。

2.实验原理 1. DTMF 信号的组成双音多频 DTMF ( Dual Tone Multi-Frequency )信号,是用两个特定的单音频率信号的组合来代表数 字或功能。

在DTMF 电话机中有16个按键,其中10个数字键0 — 9, 6个功能键*、#、A 、D 。

其中12个按键是我们比较熟悉的按键,另外由第4列确定的按键作为保留,作为功能 1209Hz 、 1336Hz 、 1477H:、 1633Hz 高频群。

从低频群和高频群任意各抽出一种频率进行组合, 共有16种组合,代表16种不同的数字键或功能,每个按键唯一地由一组行频和列频组成,如表 示。

V4 Z Z.+DTMF 的组合功能3. 实验步骤1. DTMF 信号的产生合成现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置, 即对tu1.m 文件进行编辑。

其主要的功能是使对应的按键,按照表1的对应关系产生相应的拨号音,完成对应行频及列频的叠加输岀。

此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。

键留为今后他用。

根据CCITT 建议,国际上采用 697Hz 、770Hz 、 852Hz 、 941Hz 低频群及■I知识就昱力量鉴于CCITT对DTMF信号规定的指标,这里每个数字信号取1000个采样点模拟按键信号,并且每两个数字之间用100个0来表示间隔来模拟静音。

电话拨号及来电显示技术-双音多频DTMF和频移键控FSK

电话拨号及来电显示技术-双音多频DTMF和频移键控FSK

1.双音多频(DTMF)技术电话拨号有两种,脉冲和音频。

早期的电话系统中使用一连串的断续脉冲来传送被叫号码,称为脉冲拨号。

脉冲拨号需要电信局中的操作员手工完成长途接续(早期方法,很老很古董)。

这种方式随着电话业务的增加,逐渐体现出效率低、易出错的缺点。

为了解决这个问题,贝尔实验室的科学家们发明了DTMF(Dual Tone Multi-Frequency,双音多频),目的是为了能让电话系统自动接收号码然后完成呼叫。

所谓音频也称双音多频(DTMF)信号的拨号方式,双音多频既是电话拨号时每按一个键,有两个音频频率叠加成一个双音频信号,十二个按键由八个音频频率区分(见双音多频图册)。

双音多频信号(DTMF)是电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。

双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频。

用户每按一个键就发送一个高频和低频的正弦波信号组合,比如在键盘上按“1”键,电话机就会发送一个697 Hz和1209 Hz的组合信号给电话交换机。

交换机可以接收这些频率组合并确定用户所按的按键。

双音多频键盘是不是与我们常用电话机的键盘很相似呢?没错,电话机键盘就是从双音多频键盘发展而来的。

只不过已经不再使用A、B、C、D这四个键了。

2.FSK(Frequency-shift keying):频移键控。

现在国内来电制式通常有2种,一种是FSK,一种是DTMF。

FSK除了显示来电号码之外还传输很多别的信息,例如对时(就是自动调整时间),以后还可以显示来电的人名(电信可以设置),而DTMF就除了显示个号码之外什么其他功能都没有了。

自己可以测试一下自己家的固话开通的来电显示的制式是什么,方法是用别的电话拨一下自己固话,如果在响铃之前就显示了来电号码,就是DTMF制式,如果是在1-2声铃内显示来电号码,那么是FSK制式可以通过移频键控(FSK, Frequency Shift-keying)技术来支持“主叫号码显示”,俗称“来电显示”(Caller ID或CLIP,Caller Line Identification Presentation,主叫线路识别提示)。

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

辽宁工业大学通信综合设计课程设计(论文)题目:电话拨号音的合成与识别院(系):电子与信息工程学院专业班级:学号:08学生姓名:指导教师:***教师职称:讲师起止时间:2011.12.23-2012.01.06通信综合设计与制作(论文)任务及评语目录第1章电话拨号音合成与识别的目的及原理 (1)1.1电话拨号音合成与识别的目的 (1)1.2 电话拨号音合成与识别的原理 (1)第2章图形接口的制作及仿真 (2)2.1 关于MATLAB (2)2.2 gui图形接口功能模块的设计与仿真 (2)2.3 DTMF 信号的产生合成 (3)2.4 DTMF信号的检测识别仿真 (5)第3章按键的频率响应 (7)设计总结: (10)参考文献: (11)第1章电话拨号音合成与识别的目的及原理1.1电话拨号音合成与识别的目的1876年,贝尔发明电话,对通讯事业的发展做出巨大贡献,被载入史册,电话通讯便注定要成为人们生活中的一部分,而其中最基本的一项功能,拨号该如何来产生呢?如果只用单一的频率来表示某个按键被按下,那么在以前电子元器件的精度极不稳定的情况下,出现偏差的肯能性极大,即使在今天,也很难达到万无一失,于是这就催生了另外一种想法,如果同时用两种频率来表示一个按键信号,既二维矩阵的模式,增大频率之间的间隔,适当放宽误差范围,那么通过这种方法合成的拨号音,出现拨号音识别错误的可能性便会大大降低。

也正是因为这个优点,所以现在国际上普遍采用双音多频(DTMF)的编译码方法,其原理将在下一节中介绍。

1.2 电话拨号音合成与识别的原理基于对电话通信系统中拨号音合成与识别的仿真实现其主要涉及到电话拨号音合成的基本原理及识别的主要方法,利用 MATLAB 软件以及 FFT 算法实现对电话通信系统中拨号音的合成与识别。

能够利用矩阵不同的基频合成 0-9不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出电话号码的过程。

进一步利用 GUI 做出简单的图形操作接口,要求接口清楚,画面简洁,易于理解,操作简单。

从而实现对电话拨号音系统的简单的计算机仿真。

双音多频 DTMF(Dual Tone Multi Frequency),由高频群和低频群组成,高低频群各包含4个频率。

一个高频信号和一个低频信号迭加组成一个组合信号,代表一个数字。

DTMF信令有16个编码。

利用DTMF信令可选择呼叫相应的对讲机。

双音多频信号(DTMF),电话系统中电话机与交换机之间的一种用户信令,通常用于发送被叫号码。

在使用双音多频信号之前,电话系统中使用一连串的断续脉冲来传送被叫号码,称为脉冲拨号。

脉冲拨号需要电信局中的操作员手工完成长途接续。

双音多频信号是贝尔实验室发明的,其目的是为了自动完成长途呼叫。

双音多频的拨号键盘是4×4的矩阵,每一行代表一个低频,每一列代表一个高频。

每按一个键就发送一个高频和低频的正弦信号组合,比如'1'相当于697和1209赫兹(Hz)。

交换机可以译码这些频率组合并确定所对应的按键。

在本次课程设计中,由于只是简单的模拟电话键盘拨号音的合成与识别,所以只采用电话键盘上常用的按键,数字0~9,及功能按键*,#。

DTMF编译码器在编码时将击键或数字信息转换成双音信号并发送,解码时在收到的DTMF信号中检测击键或数字信息的存在性。

一个DTMF信号由两个频率的音频信号迭加构成。

这两个音频信号的频率来自两组预分配的频率组:行频组或列频组。

每一对这样的音频信号唯一表示一个数字或符号。

电话机中通常有16个按键,其中有10个数字键0~9和6个功能键*、#、A、B、C、D。

由于按照组合原理,一般应有8种不同的单音频信号。

因此可采用的频率也有8种,故称之为多频,又因它采用从8种频率中任意抽出2种进行组合来进行编码,所以又称之为“8中取2”的编码技术。

根据CCITT的建议,国际上采用的多种频率为687Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8种。

用这8种频率可形成16种不同的组合,从而代表16种不同的数字或功能键,具体组合见表1-1。

表 1-1 DTMF 的组合功能第2章图形接口的制作及仿真2.1 关于MATLABMATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

其功能之强大让人叹为观止,在此郑重向软件制作团队致敬!2.2 gui图形接口功能模块的设计与仿真图形电话拨号面板的制作是利用 GUI 图形用户接口设计工具制作电话拨号面板,把DTMF 信号和电话机的键盘矩阵对应起来。

其中选用我们熟悉的 10 个数字键 0 — 9 , 2 个功能键“ * ”、“#”,另四个键省略。

按照图 1 电话机键盘矩阵的排列方式制作四行三列的按键控件。

每个按键可用( Push Button )添加。

然后,为了更直观的反映对应的按键号码,可以设置一个编辑框,用于动态的显示拨号号码,模拟实际电话的拨号显示窗口。

编辑框可用( Edit Text )添加。

另外,为了图形电话拨号面板的简洁美观,可以添加空白区域作为背景,并用静态文本框制作文字信息。

背景可用( Frame )添加,静态文本框可用( Static Text )添加。

最终利用 GUI 图形用户接口设计工具生成的图形电话拨号面板用于拨号音的合成产生部分,如图3-1所示。

这里将其保存为num.fig文件。

图3-1 电话拨号音面板2.3 DTMF 信号的产生合成现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对num.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 键对应的Hz f L 941=,Hz f H 1336=计算得出,已知声音取样频率 Hz f s 8192=,则取样后7217.0/2==s L L f f πω,0247.1/2==s H H f f πω。

对于保留的两个功能键“ * ”“#”,按照现行键盘式拨号电话的习惯,将“ * ”作为删除键,“#”作为确认键。

“ * ”删除键的作用是将前面拨错的号码删除退回,表现为将显示窗口已经显示的错误号码退回一位数字,并且将连续拨号音信号的存储单元 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 NUML=length(NUM);NUM=NUM(1:L-1100); %删除末尾号码在拨号音信号中的存储wavplay(d11,8192);2.4 DTMF信号的检测识别仿真要实现电话拨号音( DTMF )信号的检测识别,可以通过直接计算付里叶变换得到输入信号的组成频率。

这里采用 FFT 算法对信号进行译码分析。

首先对接收到的数字信号作 FFT 分析,计算出其幅频谱,进而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。

对于连续的双音多频( DTMF )信号,需要把有效的数字拨号信号从静音间隔信号中分割提取出来,然后再用 FFT 算法对信号进行译码分析。

MATLAB 实现信号音的识别如下:% 信号音识别 ---------------------------------------------------------------- function varargout = pushbuttonNUM_Callback(h, eventdata, handles, varargin) global NUMwavplay(NUM,8192);L=length(NUM);n=L/1100;number='';for i=1:nj=(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;else row=4;endif (num(2) < 320) column=1; % 确定列数elseif (num(2) < 340) column=2;else column=3;endz=[row,column]; % 确定数位if z==[4,2] tel=0;elseif z==[1,1] tel=1;elseif z==[1,2] tel=2;elseif z==[1,3] tel=3;elseif z==[2,1] tel=4;elseif z==[2,2] tel=5;elseif z==[2,3] tel=6;elseif z==[3,1] tel=7;elseif z==[3,2] tel=8;elseif z==[3,3] tel=9;endt(i)=tel;c=strcat(number,int2str(tel)); number=c;i=i+1;endset(handles.edit3,'string',number); 程序解释:确定行频和列频的数值范围是通过计算得出的:已知输入信号的取样频率8192Hzsf=,而做FFT的N=2048,则频谱分辨率为/8192/20484HzsF f N===,由此可算出频谱图上任意点对应的频率/K f F = 。

相关文档
最新文档