实验六 电话拨号音的合成与识别

合集下载

电话拨号音的识别——MATLAB之旅-A01-20150416

电话拨号音的识别——MATLAB之旅-A01-20150416

电话拨号⾳的识别——MATLAB之旅-A01-20150416技术博客对于程序员来说,是很重要的。

《暗时间》的作者刘未鹏,⼤⼆就开始写技术博客,最后其博客访问量超过了百万。

写技术博客好处众多,有两点是突出的。

⼀⽅⾯,写是为了更好的思考,写作是理清思维过程的重要⽅式;另⼀⽅⾯,写作是为了与他⼈更好地交流,⼀个单独个体的思维的局限性只有经过与他⼈思维碰撞的过程才能体现出来,这样⼀个⼈才能进步。

基于上述理由,我今天开始写MATLAB编程相关的技术博客。

MATLAB对⼀个学⼯程的⼈的重要性不必多说,⾃⼰考研的⽅向专业今后主要⼯具也是MATLAB,⾃⼰⼜⽐较喜欢⽤MATLAB写程序,说到这⾥,理由⽅⾯的充分性我想已经说完了。

技术博客要长期坚持,这⼀点是⾄关重要的。

坚持对于⽆论何种成功,都是核⼼因素之⼀。

博客的主要内容主要有:MATLAB笔记,遇到的问题,需要主要的关键点,优秀例程,和⼼得体会。

----------------------------------------------------------------------------------------------传统电话的拨号⾳是有两个不同频率的纯⾳合成的,现在的问题是,如何从⼀串合成的拨号⾳中找到对应的电话号码?⼀个⽐较正常的思路是:第⼀步,先对独⽴的每个合成⾳进⾏处理和分析,找到对应的两个频率,然后得到⼀个对应关系表;第⼆步,对要处理的⼀串拨号⾳进⾏处理,得到时域上的对应频率分布图,通过查表得到拨号⾳代表的数字。

下⾯是m主程序:%% 这⾥的%%是对程序进⾏分块,每块可分步执⾏,快捷键为Ctrl+Enter%problem1clear all;folder='D:\documents\Matlab\DSPLAB\dsp2\'; %folder addressfiles=dir([folder '*.wav']) %dir函数读取folder路径下所有wav结尾的⽂件,并存⼊矩阵filesfor i=1:length(files)file=[folder files(i).name];res(i).file=file;try[y,Fs,bits]=wavread(file); %wav⽂件的读⼊res(i).y=y; %定义结构数组res(i).Fs=Fs;res(i).bits=bits;catchwarning(['No suppot for the format.'])endendfor k=1:11wavplay(res(1,k).y,res(1,k).Fs)end%% problem2for n=1:11A(1,n).y=mean(res(1,n).y,2); %对左右声道进⾏平均,合成单声道A(1,n).y=detrend(A(1,n).y); %去基线,即去直流分量end%% problem3figure(1) %若要单独输出多个图形,⽤figure函数for u1=1:5subplot(5,1,u1),plot(A(1,u1).y) %注意结构数组的数据调⽤,在workspace⾥可以理清其结构xlabel('t')ylabel('A')endfigure(2)cs=1;for u2=6:10subplot(5,1,cs),plot(A(1,u2).y)xlabel('t')ylabel('A')cs=cs+1;endfigure(3) %这⼀段是画短时傅⾥叶变换频谱图的通⽤程序for h=1:10fs=Fs;N=length(A(1,h).y); %numhn=0:N-1;t=n/fs;x=A(1,h).y; %numhy1=fft(x,N);mag=abs(y1);f=n*fs/N;subplot(5,2,h),plot(f,mag);xlim([650,1500])xlabel('Frenquency/Hz');ylabel('Amp');grid on;end%% probblem4&5figure(4)plot(A(1,11).y)xlabel('t')ylabel('A')%% problem6A(1,11).y=downsample(A(1,11).y,10); %降采样处理%% problem7fs1=Fs/10;figure(5)spectrogram(A(1,11).y,1024,1020,1024,fs1) %画出时频分布图,注意spectrogram函数的参数xlim([680 1500])%% problem8phonenumber='188********'%%problem9Phonenumber_s_master='JiaYiMin'通过%problem3中的步骤,figure3中,可以得出拨号⾳对于频率表。

语音课实验报告

语音课实验报告

实验名称:语音识别与合成实验实验时间:2023年4月15日实验地点:语音实验室一、实验目的1. 了解语音识别与合成的基本原理和过程。

2. 掌握语音识别与合成系统的搭建和调试方法。

3. 提高语音处理和语音识别的实践能力。

二、实验原理语音识别与合成技术是人工智能领域的一个重要分支,主要涉及语音信号处理、模式识别和自然语言处理等方面。

语音识别是将语音信号转换为相应的文本信息,而语音合成则是将文本信息转换为自然流畅的语音输出。

三、实验内容1. 语音信号采集实验采用麦克风采集语音信号,将采集到的语音信号进行预处理,包括去除噪声、归一化等操作。

2. 语音特征提取从预处理后的语音信号中提取特征,如梅尔频率倒谱系数(MFCC)、线性预测系数(LPC)等,为后续的语音识别和合成提供依据。

3. 语音识别利用训练好的语音识别模型对采集到的语音信号进行识别,将识别结果输出为文本信息。

4. 语音合成将识别出的文本信息转换为语音输出,包括合成语音的音调、音量、语速等参数的调整。

四、实验步骤1. 语音信号采集(1)连接麦克风,确保设备正常工作。

(2)打开录音软件,调整录音参数,如采样率、量化位数等。

(3)进行语音采集,确保采集到的语音信号清晰、无杂音。

2. 语音特征提取(1)对采集到的语音信号进行预处理,包括去除噪声、归一化等操作。

(2)提取语音特征,如MFCC、LPC等。

3. 语音识别(1)使用已有的语音识别模型进行训练,如使用隐马尔可夫模型(HMM)或深度学习模型。

(2)将训练好的模型应用于采集到的语音信号,进行语音识别。

4. 语音合成(1)使用语音合成引擎,如FreeTTS、MaryTTS等,将识别出的文本信息转换为语音输出。

(2)调整合成语音的音调、音量、语速等参数,使语音输出更自然。

五、实验结果与分析1. 实验结果本次实验成功采集了语音信号,并提取了相应的语音特征。

通过语音识别,识别出了采集到的语音信号对应的文本信息。

实验六 手机短信中电话号码和手机号码的识别与提取

实验六 手机短信中电话号码和手机号码的识别与提取

数据结构实验实验六小型系统开发计算机科学与技术系0902班组长:雷耀阳组员:柴瑞东、李志鹏、张玲春日期:实验报告实验类型__综合设计__实验室__软件实验室1__ 1.实验题目手机短信中电话号码和手机号码的识别与提取2.实验目的和要求掌握小型系统开发方法,提高学生综合开发能力。

根据实际问题,设计方案,综合运用课程知识,完成《学生成绩管理系统》或《数据结构算法演示系统》的设计、编程与调试工作。

3.需求分析要从手机短信的内容中识别电话号码或手机号码,必须从短信的第一个字符开始查找,找到第一个数值型字符(‘0’~‘9’),然后依次判断其后的字符,若其后有连续的6个或7个数值型字符,则将其识别成电话号码并提取,若其后有连续的10个数值型字符,则将其识别成手机号码并提取。

继续向后搜索直到整个短信查找完毕。

4.概要设计①短信的存储结构类型定义typedef struct{char word[200];/*短信内容*/int length; /*短信长度*/}Message;②通讯录中记录的存储结构类型的定义typedef struct{char call[7]; /*电话号码*/char phone[11]; /*手机号码*/}Note;③流程图5.详细设计根据输入的短信进行检索,找出其中的电话号码并输出。

次代码共分4个模块:主函数、输入函数、手机号码检索模块、电话号码检索模块。

其中手机和电话号码检索又分别分为查找和输出模块。

主函数:void main(){input();phone();call();}短信输入函数:void input(){int n=0;printf("请输入短信内容:\n");scanf("%s",Q.word);}手机号码查找:void phone(){int i=0,j=0,k=0,flag=0;while(i<200){if(Q.word[i]=='0'||Q.word[i]=='1'||Q.word[i]=='2'||Q.word[i]=='3'||Q.word[i]=='4'||Q.word[i]=='5'||Q.word[i]=='6'||Q.word[i]=='7'||Q.word[i]=='8'||Q.word[i]=='9'){for(k=0;k<11;k++){if(Q.word[i+k+1]=='0'||Q.word[i+k+1]=='1'||Q.word[i+k+1]=='2'||Q.word[i+k+1]=='3'||Q.word[i+k+1]=='4'||Q.word[i+k+1]=='5'||Q.word[i+k+1]=='6'||Q.word[i+k+1]=='7'||Q.word[i+k+1]=='8'||Q.word[i+k+1]=='9'){flag++;}}if(flag==10&&(Q.word[i-1]!='0'&&Q.word[i-1]!='1'&&Q.word[i-1]!='2'&&Q.word[i-1]!='3'&&Q.word[i-1]!='4'&&Q.word[i-1]!='5'&&Q.word[i-1]!='6'&&Q.word[i-1]!='7'&&Q.word[i-1]!='8'&&Q.word[i-1]!='9')){phoneadd(i);flag=0;}elseflag=0;}i++;}}电话号码查找:void call(){int i=0,j=0,k=0,flag=0;while(i<200){if(Q.word[i]=='0'||Q.word[i]=='1'||Q.word[i]=='2'||Q.word[i]=='3'||Q.word[i]=='4'||Q.word[i]=='5'||Q.word[i]=='6'||Q.word[i]=='7'||Q.word[i]=='8'||Q.word[i]=='9'){for(k=0;k<7;k++){if(Q.word[i+k+1]=='0'||Q.word[i+k+1]=='1'||Q.word[i+k+1]=='2'||Q.word[i+k+1]=='3'||Q.word[i+k+1]=='4'||Q.word[i+k+1]=='5'||Q.word[i+k+1]=='6'||Q.word[i+k+1]=='7'||Q.word[i+k+1]=='8'||Q.word[i+k+1]=='9'){flag++;}}if(flag==6&&(Q.word[i-1]!='0'&&Q.word[i-1]!='1'&&Q.word[i-1]!='2'&&Q.word[i-1]!='3'&&Q.word[i-1]!='4'&&Q.word[i-1]!='5'&&Q.word[i-1]!='6'&&Q.word[i-1]!='7'&&Q.word[i-1]!='8'&&Q.word[i-1]!='9')){calladd(i);flag=0;}elseflag=0;}i++;}}手机号码输出:void phoneadd(int i){int j;for(j=0;j<11;j++)P.phone[j]=Q.word[i++];printf("%s\n",P.phone);strcpy(&P.phone,"\0");}电话号码输出:void calladd(int i){int j;for(j=0;j<7;j++)P.call[j]=Q.word[i++];printf("%s\n",P.call);strcpy(&P.call,"\0");}6.调试分析在C_free里出现很多错误和警告,经过讨论解决了错误,但是没有解决警告的问题,但是系统可以被编译,并出现结果。

电话拨号音的识别

电话拨号音的识别

电话拨号音的识别作者:迟云飞来源:《无线互联科技》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

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来表示间隔来模拟静音。

拨号音识别matlab

拨号音识别matlab

尝试六电话拨号音的合成与辨认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 电话机键盘矩阵的分列方法建造四行三列的按键控件。

信与系统实验电话拨音的合成与分解

信与系统实验电话拨音的合成与分解
3.涉及的MATLAB相关内容
1. Set
功能:设置对象属性。
基本调用格式:set(H,'PropertyName',PropertyValue,...) 用属性值'PropertyValue'设置关于用参量 H 标志的对象(一个或多个)的属性名'PropertyName'(一个或多个)。H 可以为一句柄的向量。在这种情形下,命令 set 可以设置所有对象的属性值。
n=[1:1000]; % 每个数字 1000 个采样点表示
d0=sin(2*pi*697/8192*n)+sin(2*pi*1209/8192*n); % 对应行频列频叠加
n0=strcat(get,'string'),'1'); % 获取数字号码
set,'string',n0); % 显示号码
space=zeros(1,100); %100 个 0 模拟静音信号
end
t(i)=tel;
c=strcat(number,int2str(tel));
number=c;
i=i+1;
end
msgbox(strcat('拨打的号码为:',number),'分析');
程序解释: 确定行频和列频的数值范围是通过计算得出的:已知输入信号的取样频率fs=8192Hz ,而做 FFT 的 N=2048,则频谱分辨率为
2. DTMF 信号的产生合成
现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对 文件进行编辑。其主要的功能是使对应的按键,按照表 1 的对应关系产生相应的拨号音,完成对应行频及列频的叠加输出。此外,对于图形界面的需要,还要使按键的号码数字显示在拨号显示窗口中。 鉴于 CCITT 对 DTMF 信号规定的指标,这里每个数字信号取 1000 个采样点模拟按键信号,并且每两个数字之间用 100 个 0 来表示间隔来模拟静音。以便区别连续的两个按键信号。间隔的静音信号也是在按键时产生的。 以按键 1 为例,简单介绍拨号音产生的过程:
  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 NUMphone=[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);(3).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);程序解释:确定行频和列频的数值范围是通过计算得出的:已知输入信号的取样频率8192Hz s f = ,而做FFT 的N=2048,则频谱分辨率为/8192/20484Hz s F f N === ,由此可算出频谱图上任意点对应的频率/K f F = 。

例如,数字8的高、低端频率为852,1336L H f Hz f Hz ==,则在谱图上对应的点/213,/334L L H H K f F K f F ====。

4.实验内容实验报告要求:(1) 简述实验目的及原理。

(2) 打印出一个数字拨号音的频谱图,加以分析说明,并解释DTMF 信号的检测识别的原理。

(3) 总结实验得出主要结论。

相关文档
最新文档