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,主叫线路识别提示)。

电话信号音标准及解释

电话信号音标准及解释

电话信号⾳标准及解释信号(DTMF),电话系统中电话机与之间的⼀种⽤户信令,通常⽤于发送被叫号码。

程控电话的各种信号⾳⽤户在使⽤程控电话的过程中,学会识别电话的各种信号,将有很⼤的帮助。

这些信号⾳主要有:◆拨号⾳——“嗡…”的连续⾳。

◆回铃⾳——“嘟,嘟…”的继续⾳(响1秒,断4秒)。

◆忙⾳——“嘟,嘟,嘟…”短促⾳(响0.35秒,断0.35秒)。

◆长途电话通知⾳——当⽤户在市内电话通话过程中,⼜听到“嘟,嘟”声,跟着⼀⼩段间歇,⼜再“嘟,嘟”,这样的短⾳(响0.2秒,断0.2秒,⾳隙0.6秒)就是“长途电话通知⾳”,告诉⽤户有⼈⼯长途电话要和您通话,请尽快结束市内通话,准备接听长途电话。

这种长途电话通知⾳随着我国长途电话⾃动化的普及也越来越少了。

◆特种拨号⾳——这是⼀种“嘟,嘟…”的⼀短⼀长的声⾳,当⽤户的电话中登记了某种程控电话服务项⽬后,摘机听到的拨号⾳就是这种特种拨号⾳,⽤以提醒该⽤户。

这种拨号⾳不妨碍该⽤户打电话,只要在规定产时间(5秒)内拨号即可。

◆拥塞⾳——这是⼀种“嘟,嘟…”的短⾳(响0.7秒,⾳隔0.7秒)。

拥塞⾳有点像忙⾳,但⽐忙⾳声⾳要长,它表⽰程控交换机因某种原因机线拥塞不通。

◆空号⾳——这是⼀种“嘟,嘟,嘟,嘟…”的三短⼀长的声⾳(短⾳持续0.1秒,间断0.1秒,长⾳持续0.4秒)。

它表⽰⽤户拨叫的电话号码是尚未使⽤的空号。

◆呼叫等待⾳——在⽤户登记了“呼叫等待”服务项⽬后,如果该⽤户正与对⽅通话时,⼜有第三者呼叫该⽤⽤,则该⽤户在受话器中会听到⼀种微弱的信号⾳,这种信号是“嘟…”的短促⾳(响0.4秒,⾳隔0.4秒,再响0.4秒)。

它表⽰有第三者在呼叫,提醒该⽤户是否要与第三者通话。

◆催挂⾳——当⽤户⽤完电话,没有挂机或话机⼿柄没有放好时,程控电话局会发出⼀种由⼩逐渐变⼤的连续⾳(950HZ),提醒该⽤户把话机挂好。

双音多频拨号系统答辩问题

双音多频拨号系统答辩问题

双音多频拨号系统答辩问题双音多频拨号系统(DTMF)是一种在电话通信中使用的拨号系统,它使用了双音多频信号来区分不同的按键。

该系统广泛应用于电话按键、语音信箱、自动语音应答系统等领域。

下面是一些关于双音多频拨号系统的答辩问题及其参考内容。

1. 什么是双音多频拨号系统?答:双音多频拨号系统是一种拨号系统,它使用了由两个合成声音合成的不同频率的声波来表示数字、字母或其他特定功能。

这种系统广泛应用于电话通信中,可以用于电话按键、语音信箱、自动语音应答系统等场景。

2. 双音多频拨号系统如何工作?答:双音多频拨号系统工作的基本原理是通过发送特定频率的声音信号来表示按键。

每个按键都对应着两个频率的组合,通过检测接收到的声波信号,系统可以解码并识别出来自拨号方的按键。

3. 双音多频拨号系统中的双音是指什么?答:双音是指由两个频率的声音信号合成的音调。

在双音多频拨号系统中,每个按键都对应着一个特定的双音,通过发送不同的双音来表示不同的按键。

4. 双音多频拨号系统的优缺点是什么?答:双音多频拨号系统具有以下优点:- 可靠性高:与脉冲拨号系统相比,双音多频拨号系统使用声音信号,能够更准确地传输和识别拨号信息。

- 速度快:双音多频系统可以实现按键之间的快速切换,从而提高拨号的速度。

- 兼容性强:双音多频拨号系统可以与传统的拨号系统兼容,可以适应不同的通信设备。

然而,双音多频拨号系统也存在一些缺点:- 环境干扰:在某些环境下,如嘈杂的场所或低质量的通信线路中,背景噪声可能会导致信号识别的困难。

- 安全性问题:由于双音多频拨号系统的信号可以被解码,可能存在被他人拦截和窃取拨号信息的风险。

5. 双音多频拨号系统在哪些领域得到了应用?答:双音多频拨号系统广泛应用于以下领域:- 电话通信:传统的电话通信系统中使用双音多频拨号系统来实现用户之间的语音通话和按键操作。

- 语音信箱:语音信箱系统通过双音多频拨号系统来实现用户的语音留言和查询功能。

DTMF信号的产生及检测

DTMF信号的产生及检测

DTMF信号的产生及检测DTMF信号的产生及检测----在MATLAB环境下的仿真实现DTMF(Double T one Multi Frequency,双音多频)作为实现电话号码快速可靠传输的一种技术,它具有很强的抗干扰能力和较高的传输速度,因此,可广泛用于电话通信系统中。

但绝大部分是用作电话的音频拨号。

另外,它也可以在数据通信系统中广泛地用来实现各种数据流和语音等信息的远程传输。

研究其在MA TLAB下的仿真实现有助于其具体系统的优化设计。

一. 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:二.DTMF 信号的产生:首先来分析下正弦信号的产生算法和抽样频率频率选取。

设有一系统:其传输函数H (z )没有零点,只有一对处在单位圆上的共扼的极点,则单位冲击响应为恒幅度的振荡,即产生了正弦信号。

1212()1b H z a za z--=++其中:00sin b A w =102cos a w =- 21a =相位信息:1,2jwP e±=时域单位冲激响应:0()sin((1))()h n A n w u n =+?然后,由两个不同频率的正弦信号叠加而成来模拟双音频信号,有上面的式子可得: y(n)=h1(n)+h2(n). ( h1(n)为具有行频的正弦信号,h2(n)为具有列频的正弦信号)根据A T&T 技术规范:(1)数字号码最大传输速度为每秒10个,即一个号码占100ms 时间片。

数字信号处理实验报告--电话拨号音合成与识别

数字信号处理实验报告--电话拨号音合成与识别

大连理工大学实验报告学院(系):专业:班级:姓名:学号:组:___实验时间:实验室:实验台:指导教师签字:成绩:实验二电话拨号音合成与识别一、实验结果与分析数字拨号音频谱分析(代码与频谱):n=[1:410];fs=8192;d1=sin(2*pi*697/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); t1=(0:length(d1)-1)*fs/length(d1)-fs/2; figure(1);plot(t1,fftshift(abs(D1)));title('按键‘1’的频谱'); d1=sin(2*pi*697/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(2);plot(t1,fftshift(abs(D1)));title('按键‘2’的频谱'); d1=sin(2*pi*697/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1); figure(3);plot(t1,fftshift(abs(D1)));title('按键‘3’的频谱'); d1=sin(2*pi*770/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); figure(4);plot(t1,fftshift(abs(D1)));title('按键‘4’的频谱'); d1=sin(2*pi*770/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(5);plot(t1,fftshift(abs(D1)));title('按键‘5’的频谱'); d1=sin(2*pi*770/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1); figure(6);plot(t1,fftshift(abs(D1)));title('按键‘6’的频谱'); d1=sin(2*pi*852/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); figure(7);plot(t1,fftshift(abs(D1)));title('按键‘7’的频谱'); d1=sin(2*pi*852/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(8);plot(t1,fftshift(abs(D1)));title('按键‘8’的频谱'); d1=sin(2*pi*852/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1);figure(9);plot(t1,fftshift(abs(D1)));title('按键‘9’的频谱');d1=sin(2*pi*941/fs*n)+sin(2*pi*1209/fs*n); D1=fft(d1); figure(10); plot(t1,fftshift(abs(D1)));title('按键‘*’的频谱');d1=sin(2*pi*941/fs*n)+sin(2*pi*1336/fs*n); D1=fft(d1); figure(11); plot(t1,fftshift(abs(D1)));title('按键‘0’的频谱');d1=sin(2*pi*941/fs*n)+sin(2*pi*1477/fs*n); D1=fft(d1); figure(12); plot(t1,fftshift(abs(D1)));title('按键‘#’的频谱');频谱图如下:-2000-1500-1000-0050100150200250按键‘1’的频谱-2000-1500-1000-0 050100150200250按键‘2’的频谱-2000-1500-1000-0 50100150200250按键‘3’的频谱-2000-1500-1000-0 50100150200250按键‘4’的频谱-2000-1500-1000-0 050100150200250按键‘5’的频谱-2000-1500-1000-0 050100150200250按键‘6’的频谱-2000-1500-1000-0 050100150200250按键‘7’的频谱-2000-1500-1000-0 050100150200250按键‘8’的频谱-2000-1500-1000-0 050100150200250按键‘9’的频谱-2000-1500-1000-0 050100150200250按键‘*’的频谱-2000-1500-1000-0050100150200250按键‘0’的频谱温馨推荐您可前往百度文库小程序享受更优阅读体验不去了立即体验-2000-1500-1000-0050100150200250按键‘#’的频谱图形电话拨号面板的制作:首先是框架的搭建:利用callback 在.m 文件中对各个模块进行代码的编辑(下面列出主要部分):1、数字0~9的显示与发声(以数字‘7’为例):% --- Executes on button press in pushbutton7.function pushbutton7_Callback(hObject, eventdata, handles)% hObject handle to pushbutton7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n0=strcat(get(handles.numshow,'string'),'7'); % 获取数字号码set(handles.numshow,'string',n0); % 显示号码n=[1:handles.DTMFnum]; % 每个数字410 个采样点表示d0=sin(2*pi*852/handles.fs*n)+sin(2*pi*1209/handles.fs*n); % 对应行频列频叠加space=zeros(1,handles.DTMFnum); %400 个0 模拟静音信号phone=[handles.NUM,d0];handles.NUM=[phone,space]; % 存储连续的拨号音信号guidata(hObject, handles);wavplay(d0,8192);2、删除键‘*’的代码:% --- Executes on button press in pushbutton11.function pushbutton11_Callback(hObject, eventdata, handles)% hObject handle to pushbutton11 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)n=[1:1000];num=get(handles.numshow,'string');l=length(num);n11=strrep(num,num,num(1:l-1));d11=sin(0.7217*n)+sin(0.9273*n);set(handles.numshow,'string',n11);L=length(handles.NUM);handles.NUM=handles.NUM(1:L-820);guidata(hObject, handles);wavplay(d11,8192);3、确认键‘#’的代码:% --- Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)% hObject handle to pushbutton12 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDA TA)n0=strcat(get(handles.numshow,'string'),'#'); % 获取数字号码set(handles.numshow,'string',n0); % 显示号码n=[1:handles.DTMFnum]; % 每个数字410 个采样点表示d0=sin(2*pi*941/handles.fs*n)+sin(2*pi*1477/handles.fs*n); % 对应行频列频叠加guidata(hObject, handles);wavplay(d0,8192);4、清空键‘Reset’的代码:% --- Executes on button press in btFW.function btFW_Callback(hObject, eventdata, handles)% hObject handle to btFW (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDA TA) handles.NUM=[];set(handles.numshow,'string',[]); % 显示号码set(handles.numRec,'string',[]); % 显示号码guidata(hObject, handles);5、显示键的代码:% --- Executes on button press in btRec.function btRec_Callback(hObject, eventdata, handles)% hObject handle to btRec (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDA TA)L=length(handles.NUM);n=L/handles.DTMFsum;number='';for i=1:nj=(i-1)*handles.DTMFsum+1;d=handles.NUM(j:j+(handles.DTMFnum-1)); % 截取出每个数字f=fft(d,8192); % 以N=2048 作FFT 变换a=abs(f);p=a.*a/handles.fs; % 计算功率谱% p=a.*a/10000; % 计算功率谱num(1)=find(p(1:1000)==max(p(1:1000))); % 找行频num(2)=1000+find(p(1000:1700)==max(p(1000:1700))); % 找列频if (num(1) < 730)row=1; % 确定行数elseif (num(1) < 810)row=2;elseif (num(1) < 900)row=3;elserow=4;endif (num(2) < 1260) column=1; % 确定列数elseif (num(2) < 1400) column=2;elsecolumn=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.numRec,'string',number); % 显示号码GUI界面的操作:(1)初始化界面(2)输入数字后的界面(3)按‘*’后删除一位(4)按‘#’后确认键(5)按下显示键显示出来(6)按下Reset键清空二、讨论、建议、质疑做本实验分两部分,第一部分是做图形化(GUI)界面的设计,第二部分是做电话信号的频谱分析。

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

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

题目2: DTMF电话拨号音的合成与识别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 所示。

f L/f H(Hz)1209 1336 1477 1633697 1 2 3 A 770 4 5 6 B 852 7 8 9 C 941 * 0 # D表 1 : DTMF 的组合功能根据对应的行列频率,按键对应的信号可以表达为:=sin +sin (1)其中 , 分别是数字或字符按键对应行、列的低频、高频信号的角频率。

双音多频信号的产生和检测

双音多频信号的产生和检测

摘要所谓双音多频(DTMF ),就是用两个频率一一行频和列频来表示电话机键盘上的一个数字。

DTMF电话的指令正在迅速的取代脉冲指令。

除了在电话呼叫信号中使用外,DTMF还广泛的使用在交互式控制应用,例如电话银行、电子邮件甚至家电远程控制等,用户可以从电话机发送DTMF信号来做菜单选择。

本文基于MATLAB的双音多频拨号系统的仿真实现。

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

并进一步利用MATLAB中的图形用户界面GUI制作简单直观的模拟界面,根据提示输入8位电话号码,通过按下输入键可以听见8位电话号码对应的DTMF 信号的声音,通过按下解码键可输出相应的8幅频谱图,并显示检测到的电话号码。

关键词:多音双频MATLAB GOERTZEL算法频谱图第一章、绪论1 • 1研究背景及意义双音多频(Dual Tone Multi Frequency , DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。

这种信号制式具有很高的拨号速度,且容易自动监测识别,很快就代替了原有的用脉冲计数方式的拨号制式。

这种双音多频信号制式不仅用在电话网络中,还可以用于传输十进制数据的其它通信系统中,用于电子邮件和银行系统中。

这些系统中用户可以用电话发送DTMF信号选择语音菜单进行操作。

1.2研究内容及任务说明DTMF编码,是将电话拨号盘上的数字0~9,字母A~D,及*、#,共16个字符,用音频范围的8个频率表示出来,具体来说,将8个频率分为高频群和低频群两组,分别作为列频和行频,每一个键的频率模式由来自于列频和行频的两个频率叠加而成。

要求生成8位电话号码的DTMF信号,并在接受端进行检测。

生成和检测模块要求分开。

第二章双音频信号产生与检测的原理和内容2.1双音频信号产生与检测的原理介绍双音多频(Dual Tone Multi Frequency, DTMF)信号是音频电话中的拨号信号,由美国AT&T贝尔公司实验室研制,并用于电话网络中。

电话按键音的识别

电话按键音的识别

一、 实验目的1. 本实验的容基于对通信系统中拨号音的识别仿真实验。

主要涉及到拨号音识别的基本原理和识别的主要法。

利用matlab 软件以及fft 算法实现对通信系统中拨号音的识别。

并进一步利用matlab 中的图形用户界面制作简单直观的模拟界面,使其对拨号音的识别有个基本的了解。

2. 能够利用矩阵不同的基频合成0-9不同按键的拨号音,并能够对不同的拨号音加以正确的识别。

进一步画出简单的图形,从而实现对拨号音系统的简单的实验仿真。

3.了解学习DTMF (双音多频)相关知识,知道双音多频的信号是用两个特定的单音频率信号的组合来代表数字或功能。

二、实验仪器安装有MATLAB 软件的计算机一台。

三、实验原理1. DTMF (双音多频) (1) 基本概念拨号有两种,脉冲和音频,所谓音频也成双音多频(DTMF )信号的拨号式即是拨号时每按一个键,有两个音频频率叠加成一个双音频信号,十六个按键由八个音频频率区分。

(2) 编制规则具体DTMF 编制规则如表1所示个高频。

用户每按一个键就发送一个高频和低频的正弦信号组合。

2. 按键音识别MATLAB 中audioread 函数可以实现多种音频信号的读取,调用形式为[y,fs]=audioread(filename)其中y 为所读取的音频数据; 而fs 为采样频率;调用的filename 为指定载入的音频文件名称。

用fft 频谱分析公式/2/w T fs f fs π=Ω=Ω= (1)2/w N k π=⋅ (2)由公式(1)和(2)可得:/f fs k N =* (3)四.实验容本实验要实现拨号音(DTMF)信号的检测的识别,可以通过直接计算傅里叶变换时的输入信号组成的频率。

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

首先对接收到的数字信号作FFT 分析。

计算出其频幅谱,继而得到功率谱,组成输入信号的频率必定对应功率谱的峰值。

对于连续的双音多频(DTMF)信号。

双音多频拨号系统DTMF的实验报告

双音多频拨号系统DTMF的实验报告

双音多频拨号系统DTMF的实验设计报告所谓双音多频(DTMF),就是用两个频率——行频和列频来表示机键盘上的一个数字。

DTMF 的指令正在迅速的取代脉冲指令。

除了在呼叫信号中使用外,DTMF 还广泛的使用在交互式控制应用,例如银行、电子甚至家电远程控制等,用户可以从机发送DTMF 信号来做菜单选择。

本文基于MATLAB的双音多频拨号系统的仿真实现。

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

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

还能够利用矩阵不同的基频合成 0 - 9 不同按键的拨号音,并能够对不同的拨号音加以正确的识别,实现由拨号音解析出的过程,进一步利用 GUI 做出了简单的图形操作界面。

本文具有界面清楚,画面简洁,易于理解,操作简单的优点,从而实现对拨号音系统的简单的信号仿真。

关键词:双音多频(DTMF) MATLAB GUI 信号仿真在中,数字0~9的中每一个都用两个不同的单音频传输,所用的8个频率分成高频带和低频带两组,低频带有四个频率:679Hz,770Hz,852Hz和941Hz;高频带也有四个频率:1209Hz,1336Hz,1477Hz和1633Hz.。

每一个数字均由高、低频带中各一个频率构成,例如1用697Hz和1209Hz两个频率,信号用表示,其中,。

这样8个频率形成16种不同的双频信号。

一,利用GUI 作图(简单的界面)如下:利用 GUI 图形用户界面设计工具制作拨号面板,把 DTMF 信号和机的键盘矩阵对应起来。

其中选用我们熟悉的 10 个数字键 0 — 9 , 3 个功能键“ 回删”、“拨号”,“解码”。

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

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

静态文本框可用( Static Text )添加,如图再加个解码键( Push Button )二,再点运行,得出与上图对应的m文件,再用鼠标右击上图的每个键,点callback导入每个键的编译程序如下:1,按键1的程序:% --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); % 把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];%每个数字1000个采样点y=sin(0.5345*n)+sin(0.9272*n);%对应行频列频时域叠加,数字1的低频697Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);%100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; % 储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'1'];set(handles.text1,'string',[NoCtrl]);end2,按键2的程序:function pushbutton5_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is tooelsen=[1:1000];% 每个数字1000个采样点y=sin(0.5345*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字2的低频697Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'2'];set(handles.text1,'string',[NoCtrl]);end3.按键3的程序:% --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is tooelsen=[1:1000];% 每个数字1000个采样点y=sin(0.5345*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字3的低频697Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'3'];set(handles.text1,'string',[NoCtrl]);end4,按键4的程序:% --- Executes on button press in pushbutton10. function pushbutton10_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is tooelsen=[1:1000];% 每个数字1000个采样点y=sin(0.5905*n)+sin(0.9272*n);% 对应行频列频时域叠加,数字4的低频770Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'4'];set(handles.text1,'string',[NoCtrl]);end5,按键5的程序:% --- Executes on button press in pushbutton9. function pushbutton9_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];%每个数字1000个采样点vy=sin(0.5905*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字5的低频770Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'5'];set(handles.text1,'string',[NoCtrl]);end6,按键6的程序:% --- Executes on button press in pushbutton8. function pushbutton8_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.5905*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字6的低频770Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'6'];set(handles.text1,'string',[NoCtrl]);end7,按键7的程序:% --- Executes on button press in pushbutton13. function pushbutton13_Callback(hObject, eventdata,handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.6534*n)+sin(0.9272*n);% 对应行频列频时域叠加,数字7的低频852Hz和高频1209Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'7'];set(handles.text1,'string',[NoCtrl]);end8,按键8的程序:% --- Executes on button press in pushbutton12.function pushbutton12_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.6534*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字8的低频852Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100);% 100个0模拟静音信号global NUMphone=[NUM,y]; %循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'8'];set(handles.text1,'string',[NoCtrl]);end% --- Executes on button press in pushbutton14. function pushbutton14_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];% 每个数字1000个采样点y=sin(0.6534*n)+sin(1.1328*n);% 对应行频列频时域叠加,数字9的低频852Hz和高频1477Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'9'];set(handles.text1,'string',[NoCtrl]);end% --- Executes on button press in pushbutton17. function pushbutton17_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); %把数字显示在屏幕上if(length(x)>15)errordlg('Sorry . The number you have input is too long !','Input Error•','modal')elsen=[1:1000];每个数字1000个采样点y=sin(0.7217*n)+sin(1.0247*n);% 对应行频列频时域叠加,数字0的低频941Hz和高频1336Hz叠加wavplay(y,8192) %产生拨号音space=zeros(1,100); %100个0模拟静音信号global NUMphone=[NUM,y];% 循环储存NUM=[phone,space]; %储存连续的拨号音信号NoCtrl=x;NoCtrl=[NoCtrl,'0'];set(handles.text1,'string',[NoCtrl]);end11,按键#号程序:% --- Executes on button press in pushbutton16. function pushbutton16_Callback(hObject, eventdata, handles)set(handles.text1,'string',['']);set(handles.tbutton,'visible',['off']);set(handles.tbutton,'value',[0]);clear all12,按键*的程序:% --- Executes on button press in pushbutton18. function pushbutton18_Callback(hObject, eventdata, handles)set(handles.text1,'string',['']);set(handles.tbutton,'visible',['off']);set(handles.tbutton,'value',[0]);clear all13,回删键的程序:% --- Executes on button press in pushbutton20. function pushbutton20_Callback(hObject, eventdata, handles)x=get(handles.text1,'string');% 把数字显示在屏幕上if(isempty(x))errordlg('Please input the phone No.','Input error','modal')elsexll=length(x);x(xll)=[];%去掉末尾号在面板上的显示set(handles.text1,'string',[x]);global NUMll=length(NUM);%删除末尾在拨号音信号中的储存for i=ll-1100+1:llNUM(ll)=[];ll=length(NUM);endend14,拨号键的程序:% --- Executes on button press in pushbutton21. function pushbutton21_Callback(hObject, eventdata, handles)x=get(handles.text1,'string'); % 把数字显示在屏幕上xx=str2num(x);if(isempty(NUM))errordlg('Please input the phone No.','Input error','modal')elsewavplay(NUM,8192);msgbox('拨号成功!若需再次拨号请按#号复位!','Done','help')set(handles.tbutton,'visible',['on']);set(handles.text1,'string',['Dieling Done.']); end14,关闭键的程序:% --- Executes on button press in pushbutton22. function pushbutton22_Callback(hObject, eventdata, handles)clear allclose all15,解码的程序:% --- Executes on button press in tbotton.function tbotton_Callback(hObject, eventdata, handles)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; %0在4行2列elseif z==[1,1] tel=1; %1在1行1列elseif z==[1,2] tel=2; %2在1行2列elseif z==[1,3] tel=3; %3在1行3列elseif z==[2,1] tel=4; %4在2行1列elseif z==[2,2] tel=5; %5在2行2列elseif z==[2,3] tel=6; %6在2行3列elseif z==[3,1] tel=7; %7在3行1列elseif z==[3,2] tel=8; %8在3行2列elseif z==[3,3] tel=9; %9在3行3列endt(i)=tel;c=strcat(number,int2str(tel));number=c;i=i+1;endset(handles.text1,'string',['解码中...']);h = waitbar(0,'Decoding...Please wait...'); steps = 1500;for step = 1:steps% computations take place herewaitbar(step / steps)endclose(h);set(handles.text1,'string',number);% hObject handle to tbotton (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)三,运行以上程序调出如下图界面:即可以进行仿真拨号。

DTMF信号的产生与识别

DTMF信号的产生与识别

目录一、实验背景------------------------------------3二、实验目的------------------------------------3三、实验内容------------------------------------3四、实验原理----------------------------------3五、实验程序及注释------------------------------5六、CCS5000程序调试-----------------------------91、编译过程、工程架构、编译环境设置2、程序运行结果(图形显示、数据显示)七、实验总结及感想----------------------------DTMF信号的产生与识别一、实验背景:双音多频DTMF(Dual Tone Multi-Frequency)信令,逐渐在全世界范围内使用在按键式电话机上,因其提供更高的拨号速率,迅速取代了传统转盘式电话机使用的拨号脉冲信令。

作为实现电话号码快速可靠传输的一种技术,它具有很强的抗干扰能力和较高的传输速度,因此,可广泛用于电话通信系统中。

但绝大部分是用作电话的音频拨号。

另外,它也可以在数据通信系统中广泛地用来实现各种数据流和语音等信息的远程传输。

近年来DTMF也应用在交互式控制中,诸如语言菜单、语言邮件、电话银行和ATM 终端等。

将DTMF信令的产生与检测集成到任一含有数字信号处理器(DSP)的系统中,是一项较有价值的工程应用。

二、实验目的:(1)熟悉DSP5402的体系结构、指令系统、汇编语言程序的编写;(2)了解DTMF的基础知识;(3)学习用c语言对DTMF的编程方法;(4)掌握DTMF的信号产生及信号检验;(5)在CCS环境下,最终完成程序的调试三、实验内容:(1)利用DTMF信号产生的原理合成数字1,其合成公式是分析其时域波形和频谱;(2)生成各个按键信号;(3)利用fft分析0~9十个数字拨号信息的频谱,观察频谱图中的峰值点的幅值以及它们出现的位置。

电话拨号音识别PPT课件

电话拨号音识别PPT课件

仿真结果
改进与完善
功能较少
界面粗糙不美观
只能实现0—9的 10个数字的识别, 功能较少
只是简单的使用GUI 来设计拨号面板,所 以界面很粗糙简单。
各个实现程序都太分 立,频谱分析、识别、 拨号按键等功能的显 示不在同一平面内,查 看还需要分别打开。
写在最后
经常不断地学习,你就什么都知道。你知道得越多,你就越有力量 Study Constantly, And You Will Know Everything. The More
DTMF检测识别
对电话拨号音( DTMF )信号的检测识别的仿真实现,可以直接计算付 里叶变换得到输入的信号频率。这里采用 FFT 算法对信号进行解码分析。 首先对接收到的数字信号作 FFT 分析,计算出其幅频谱,进而得到功率 谱。对于连续的双音多频( DTMF )信号,需要把有效的数字拨号信号 从静音间隔信号中分割提取出来,然后再用 FFT 算法对信号进行解码分 析。程序代码见论文。
You Know, The More Powerful You Will Be
结束语
感谢聆听
不足之处请大家批评指导
Please Criticize And Guide The Shortcomings
讲师:XXXXXX XX年XX月XX日
电话拨号音识别
目录
目标实现
基于对电话通信系统中拨号音合成与识别的仿真实现。主要涉及到电话 拨号音合成的基本原理及识别的主要方法,利用 MATLAB 软件以及 FFT 算 法实现对电话通信系统中拨号音的合成与识别。并进一步利用 MATLAB 中
的图形用户界面 GUI 制作简单直观的模拟界面。能够利用矩阵不同的 基频合成 0 - 9 不同按键的拨号音,并能够对不同的拨号音加以正确 的识别,实现由拨号音解析出电话号码的过程。
  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 = 。

相关文档
最新文档