大连理工大学数字信号处理实验二——电话拨号音的合成与识别
电话拨号音的识别——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中,可以得出拨号⾳对于频率表。
大连理工大学通信网实验-实验一预习报告剖析
大连理工大学实验预习报告学院(系):信息与通信工程专业:通信工程班级:电通1402姓名:糜智华学号:201483051 组:___实验时间:2016年11月14日实验室:C221 实验台:实验一程控交换机语音通信实验预习报告一、实验目的和要求通过该实验使学生理解通信网络的基本概念,了解和掌握现代通信网的网络拓扑结构、通信网使用的设备连接方法和信号传输过程。
本实验将进行基于数字程控交换机的语音通信实验。
通过对交换机的简单配置,了解电话网的基本组成和交换机构成及各部分的功能,熟悉固定电话的接续流程,以对将来通信行业的硬件和软件工作有一定的了解。
二、实验原理和内容实验内容:a)熟悉实验室通信设备,了解各通信设备基本功能,能够简单配置和操作设备。
b)操作和配置程控交换机,实现电话之间通话实验实验原理:电话网是传递电话信息的电信网,是可以进行交互型话音通信、开放电话业务的电信网。
电话网包括本地电话网、长途电话网、国际电话网等多种类型。
是业务量最大、服务面最广的电信网。
电话网经历了由模拟电话网向综合数字电话网的演变。
除了电话业务,还可以兼容许多非电话业务。
因此电话网可以说是电信网的基础。
最早的电话通信形式只是两部电话机中间用导线连接起来便可通话。
电话网采用电路交换方式,由发送和接收电话信号的用户终端设备(如电话机)进行电路交换的交换设备(电话交换机)、连接用户终端和交换设备的线路(用户线)和交换设备之间的链路(中继线)组成。
电话网基本结构形式分为多级汇接网和无级网两种。
端局:端局就是直接下挂用户或者直接拨入(DID局)的交换机。
在移动通信中,端局之间若没有进行直连,则通过汇接局进行连接,运营商之间的中继互联是通过关口局来进行连接的。
关口局是出网的局点。
各个端局通过中继的方式汇聚到一个局点,再上行到关口局或长途局。
汇接局:汇接局属于本地网内的一种交换局,它汇接各端局通过中继线送来的话务量,然后送至相应的端局。
频谱分析的应用--话拨号音合成与识别
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 电话拨号音的合成与识别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来表示间隔来模拟静音。
电话拨号音的识别
电话拨号音的识别
迟云飞
【期刊名称】《无线互联科技》
【年(卷),期】2014(0)5
【摘要】为了提高信息安全,防止密码失窃,对电话拨号音(DTMF信号)的合成与识别进行了深入的分析和研究。
利用话筒,单片机STC89C52RC和MT8880等芯片从硬件上实现了对电话拨号音的解码。
经过运行测试,系统能够正确的对拨号音信号进行解码。
研究结果具有一定的理论意义和实用价值。
【总页数】1页(P131-131)
【作者】迟云飞
【作者单位】长安大学信息工程学院,陕西西安 710064
【正文语种】中文
【相关文献】
1.基于计算机的电话拨号音的采集与分析
2.一种新的电话拨号音自动识别方法
3.拨个电话便打假——全省首例通过电话防伪系统识别假药案采访记
4.基于大数据挖掘技术的诈骗电话识别与管理
5.新型冠状病毒肺炎疫情期间发热患者电话初筛未识别对院前急救人员防护的影响
因版权原因,仅展示原文概要,查看原文内容请购买。
信与系统实验电话拨音的合成与分解
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 为例,简单介绍拨号音产生的过程:
电话拨号音识别全解
原理(DTMF)
双音多频 DTMF ( Dual Tone Multi-Frequency )信号,是用两个
特定的单音频率信号的组合来代表数字或功能。在 DTMF 电话机中有 16 个按键,其中 10 个数字键 0 — 9 , 6 个功能键 * 、 # 、 A 、 B 、 C 、 D 。其中 12 个按键是我们比较熟悉的按键,另外由第 4 列 确定的按键作为保留,作为功能键留为今后他用。 根据 CCITT 建议, 国际上采用 697Hz 、 770Hz 、 852Hz 、 94lHz 低频群及 1209Hz 、 1336Hz 、 1477H: 、 1633Hz 高频群。从低频群和高频群任意各抽出一 种频率进行组合,共有 16 种组合,代表 16 种不同的数字键或功能, 每个按键唯一地由一组行频和列频组成,如表 1 所示:
DTMF产生合成
现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化 进行设置,即对 tu1.m 文件进行编辑。其主要的功能是使对应的按键,
按照表 1 的对应关系产生相应的拨号音,完成对应行频及列频的叠加
输出。此外,对于图形界面的需要,还要使按键的号码数字显示在拨 号显示窗口中。 鉴于 CCITT 对 DTMF 信号规定的指标,这里每个数字信号取 1000 个采 样点模拟按键信号,并且每两个数字之间用 100 个 0 来表示间隔来模 拟静音。以便区别连续的两个按键信号。间隔的静音信号也是在按键 时产生的。程序代码见论文。
实现步骤
制作拨号面板
DTMF产生合成
DTMF检测识别
仿真结果
电话拨号面板的制作
利用 GUI 图形用户界面设计工具制作电话拨号面板,把 DTMF 信号和 电话机的键盘矩阵对应起来。其中选用我们熟悉的 10 个数字键 0 — 9 , 2 个功能键“ * ”、“#”,另四个键省略。按照图 1 电话机键盘矩 阵的排列方式制作四行三列的按键控件。每个按键可用 ( Push
数字信号处理在双音多频拨号系统中的应用
实验一、数字信号处理在双音多频拨号系统中的应用一、实验目的1.了解双音多频信号的产生、检测、包括对双音多频信号进行DFT 时的参数选择等。
2.初步了解数字信号处理在是集中的使用方法和重要性。
3.掌握matlab 的开发环境。
二、实验原理双音多频(Dual Tone Multi Frequency, DTMF )信号是音频电话中的拨号信号.由美国AT&T 贝尔公司实验室研制.并用于电话网络中。
这种信号制式具有很高的拨号速度.且容易自动监测识别.很快就代替了原有的用脉冲计数方式的拨号制式。
这种双音多频信号制式不仅用在电话网络中.还可以用于传输十进制数据的其它通信系统中.用于电子邮件和银行系统中。
这些系统中用户可以用电话发送DTMF 信号选择语音菜单进行操作。
DTMF 信号系统是一个典型的小型信号处理系统.它要用数字方法产生模拟信号并进行传输.其中还用到了D/A 变换器;在接收端用A/D 变换器将其转换成数字信号.并进行数字信号处理与识别。
为了系统的检测速度并降低成本.还开发一种特殊的DFT 算法.称为戈泽尔(Goertzel)算法.这种算法既可以用硬件(专用芯片)实现.也可以用软件实现。
下面首先介绍双音多频信号的产生方法和检测方法.包括戈泽尔算法.最后进行模拟实验。
下面先介绍电话中的DTMF 信号的组成。
在电话中.数字0-9的中每一个都用两个不同的单音频传输.所用的8个频率分成高频带和低频带两组.低频带有四个频率:679Hz,770Hz,852Hz 和941Hz ;高频带也有四个频率:1209Hz,1336Hz,1477Hz 和1633Hz.。
每一个数字均由高、低频带中各一个频率构成.例如1用697Hz 和1209Hz 两个频率.信号用)2sin()2sin(21t f t f ππ+表示.其中Hz f 6791=.Hz f 12092=。
这样8个频率形成16种不同的双频信号。
具体号码以及符号对应的频率如表4.1所示。
数字信号处理实验报告--电话拨号音合成与识别
大连理工大学实验报告学院(系):专业:班级:姓名:学号:组:___实验时间:实验室:实验台:指导教师签字:成绩:实验二电话拨号音合成与识别一、实验结果与分析数字拨号音频谱分析(代码与频谱):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)界面的设计,第二部分是做电话信号的频谱分析。
数字信号处理实验报告--含噪语音信号的分析
大连理工大学实验报告学院(系):专业:班级:姓名:学号:组:___实验时间:实验室:实验台:指导教师签字:成绩:实验五含噪语音信号的分析一、实验目的和要求二、实验原理和内容三、实验结果与分析第一部分:产生含噪的语音信号首先分析原始的语音信号的波形和频谱:[x,fs,bits]=wavread('009.wav');%sound(x,fs,bits);X=fft(x);t1=(0:length(x)-1)*fs/length(x)-fs/2;figure(1);subplot(2,1,1);plot(x);axis([0,400000,-2,2]);title('原始语音信号时域波形');subplot(2,1,2);plot(t1,fftshift(abs(X)));title('原始语音信号的频谱');%添加噪声N=length(x);noise=0.3*randn(size(x));x1=x+noise;X1=fft(x1);t2=(0:length(x1)-1)*fs/length(x1)-fs/2;%sound(x1,fs,bits);figure(2);subplot(2,1,1);plot(x1);title('加噪语音信号时域波形');subplot(2,1,2);plot(t2,fftshift(abs(X1)));title('加噪语音信号的频谱');0.511.522.533.54x 105-2-1012原始语音信号时域波形-2.5-2-1.5-1-0.500.51 1.52 2.5x 104050001000015000原始语音信号的频谱0.511.522.533.54x 105-2-1012加噪语音信号时域波形-2.5-2-1.5-1-0.500.51 1.52 2.5x 104050001000015000加噪语音信号的频谱利用MATLAB 命令生成含噪语音信号:wavwrite(x1,fs,16,'x1.wav'); 将生成的x1.wav 文件作为后续的GUI 图形界面中用于分析的语音信号。
电话按键音的识别
一、 实验目的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)信号。
信号处理与系统4案例-声音信号的合成与处理
-3
x 10 1
时域波形
0.5
0
-0.5
-1
0
1
2
3
4
5
6
7
8
9 10
n 频谱图
x 104
2
1.5
1
0.5
0 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 Hz
图 1 合成乐曲的时域波形和频谱图
目前数字信号处理技术广泛应用于电子音乐合成等领域。电子合成器已称为 音乐工作者的标准器材,它能够模拟钢琴、吉他、小提琴和长笛等等,模仿效果 日益完善。
y=note(n(1,m),0.7*n(2,m),Fs,3); %锯齿波 t=linspace(0,0.7*n(2,m),length(y)); envelope=(t+0.2).*exp(-3*(t+2)).*cos(2*t); %包络 y=y.*envelope; ys=cat(2,ys,y); end soundsc(ys,Fs);
329.63(0.5)329(0.5)|440(3)329.63(0.5)329(0.5)|293.66(3)329.63(0.5)369.99(0.5)| 440(0.5)523.25(1)440(0.5)392(0.5)261.63(1)329.63(0.5)|293.66(3)…
括号外的数字为音符频率,括号内的数字为音符持续时间。 为方便起见,先编写一个音符转化为声音数据的函数。 文件名:note.m
elseif waveform == 3 y=sawtooth(2*pi*f*t);
end
调用该函数产生上面乐曲的程序为: 文件名:Sound2.m
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十个数字拨号信息的频谱,观察频谱图中的峰值点的幅值以及它们出现的位置。
大连理工大学数字信号处理实验实验三——IIR滤波器的设计
大连理工大学实验报告学院(系):电子信息与电气工程专业:电子信息工程班级:姓名:学号:组:___实验时间:实验室:实验台:指导教师签字:成绩:实验三、IIR数字滤波器设计与信号滤波一、实验题目和代码1. 用双线性变换法设计一个巴特沃斯IIR低通数字滤波器。
设计指标参数为:在通带内频率低于0.4*pi 时,最大衰减小于2dB ;在阻带内[0.6*pi, pi] 频率区间上,最小衰减大于15dB 。
要求:(1)用buttord,buttap,zp2tf,lp2lp,bilinear等指令实现(2)用buttord,butter指令实现并分别绘制两种设计方法的频响曲线实验源程序:% 方法一:用buttord,buttap,zp2tf,lp2lp,bilinear等指令实现%求模拟滤波器参数,clc;clear all; close allRp=2; Rs=15;wp=0.4*pi; ws=0.6*pi;Fs=1;Wo=wp;wap=2*Fs*tan(wp/2);was=2*Fs*tan(ws/2);[N,Wn]=buttord(wap,was,Rp,Rs,'s'); %选择滤波器的最小阶数[Z,P,K]=buttap(N); %创建butterworth模拟滤波器[b,a]=zp2tf(Z,P,K); %把滤波器零极点模型转化为传递函数模型 [B,A]=lp2lp(b,a,Wo); %把模拟滤波器原型转换成截至频率为Wn的低通滤波器%用双线性变换法实现模拟滤波器到数字滤波器的转换[bz,az]=bilinear(B,A,Fs);%绘制频率响应曲线[H,W]=freqz(bz,az);figureplot(W,abs(H));gridxlabel('频率/弧度')ylabel('频率响应幅度')axis([0 pi 0 1.1])figureplot(W,20*log10(abs(H)));gridxlabel('频率/弧度')ylabel('对数幅频响应/dB')axis([0 pi -700 10])实验结果:% 方法二:用buttord,butter指令实现%设置滤波器参数clc;clear all;Rp=2; Rs=15;wp=0.4*pi/pi; ws=0.6*pi/pi;Fs=1;%选择滤波器的最小阶数[N,Wn]=buttord(wp,ws,Rp,Rs);%用双线性变换法的butter指令直接实现IIR数字滤波器的设计 [bz,az]= butter(N,Wn)%绘制频率响应曲线[H,W]=freqz(bz,az);figureplot(W,abs(H));gridxlabel('频率/弧度')ylabel('频率响应幅度')axis([0 pi 0 1.1])figureplot(W,20*log10(abs(H)));gridxlabel('频率/弧度')ylabel('对数幅频响应/dB')axis([0 pi -700 10])实验结果:2. 用双线性变换法的模拟滤波器原型设计一个巴特沃兹低通滤波器,给定技术指标是100p f Hz = 300st f Hz = 3p dB α=20s dB α= ,抽样频率为1000s F Hz = 。
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 、B 、C 、D 。
其中12 个按键是我们比较熟悉的按键,另外由第4 列确定的按键作为保留,作为功能键留为今后他用。
根据CCITT 建议,国际上采用697Hz 、770Hz 、852Hz 、94lHz 低频群及1209Hz 、1336Hz 、1477H: 、1633Hz 高频群。
从低频群和高频群任意各抽出一种频率进行组合,共有16 种组合,代表16 种不同的数字键或功能,每个按键唯一地由一组行频和列频组成,如表1 所示。
(文章来自:/forestlong/blog/item/dd33911a24b5fbf 3ae5133ee.html转载请注明出处。
)DTMF 的组合功能 3.实验步骤1. DTMF 信号的产生合成现在将对上节制作的图形电话拨号面板上的各控件单位的动作和变化进行设置,即对tu1.m 文件进行编辑。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连理工大学实验报告学院(系):电信专业:电子信息工程班级:电子1204 姓名:梁宇学号:201281001 组:___ 实验时间:实验室:实验台:指导教师签字:成绩:实验二、电话拨号音的合成与识别一、实验题目和代码实现对电话通信系统中拨号音合成与识别的仿真实现。
系统界面设计:源程序:function varargout = sy2(varargin)% SY2 MATLAB code for sy2.fig% SY2, by itself, creates a new SY2 or raises the existing% singleton*.%% H = SY2 returns the handle to a new SY2 or the handle to% the existing singleton*.%% SY2('CALLBACK',hObject,eventData,handles,...) calls the local% function named CALLBACK in SY2.M with the given input arguments. %% SY2('Property','Value',...) creates a new SY2 or raises the% existing singleton*. Starting from the left, property value pairs are% applied to the GUI before sy2_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to sy2_OpeningFcn via varargin.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help sy2% Last Modified by GUIDE v2.5 03-Jun-2015 23:06:41% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @sy2_OpeningFcn, ...'gui_OutputFcn', @sy2_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before sy2 is made visible.function sy2_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% varargin command line arguments to sy2 (see VARARGIN)% Choose default command line output for sy2handles.output = hObject;handles.fs=8192;handles.DTMFsum=820;handles.DTMFnum=410;handles.NUM=[];handles.numshow2=[];% Update handles structureguidata(hObject, handles);% UIWAIT makes sy2 wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line. function varargout = sy2_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;% --- Executes on button press in num1.function num1_Callback(hObject, eventdata, handles)% hObject handle to num1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n1=strcat(get(handles.numshow,'string'),'1') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n1); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d1=sin(2*pi*697/handles.fs*n)+sin(2*pi*1209/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d1,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d1,8192);% --- Executes on button press in num2.function num2_Callback(hObject, eventdata, handles)% hObject handle to num2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n2=strcat(get(handles.numshow,'string'),'2') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n2); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d2=sin(2*pi*697/handles.fs*n)+sin(2*pi*1336/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d2,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d2,8192);% --- Executes on button press in num3.function num3_Callback(hObject, eventdata, handles)% hObject handle to num3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n3=strcat(get(handles.numshow,'string'),'3') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n3); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d3=sin(2*pi*697/handles.fs*n)+sin(2*pi*1477/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d3,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d3,8192);% --- Executes on button press in num4.function num4_Callback(hObject, eventdata, handles)% hObject handle to num4 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n4=strcat(get(handles.numshow,'string'),'4') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n4); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d4=sin(2*pi*770/handles.fs*n)+sin(2*pi*1209/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d4,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d4,8192);% --- Executes on button press in num5.function num5_Callback(hObject, eventdata, handles)% hObject handle to num5 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n5=strcat(get(handles.numshow,'string'),'5') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n5); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d5=sin(2*pi*770/handles.fs*n)+sin(2*pi*1336/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d5,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d5,8192);% --- Executes on button press in num6.function num6_Callback(hObject, eventdata, handles)% hObject handle to num6 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n6=strcat(get(handles.numshow,'string'),'6') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n6); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d6=sin(2*pi*770/handles.fs*n)+sin(2*pi*1477/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d6,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d6,8192);% --- Executes on button press in num7.function num7_Callback(hObject, eventdata, handles)% hObject handle to num7 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n7=strcat(get(handles.numshow,'string'),'7') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n7); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d7=sin(2*pi*852/handles.fs*n)+sin(2*pi*1209/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d7,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d7,8192);% --- Executes on button press in num8.function num8_Callback(hObject, eventdata, handles)% hObject handle to num8 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n8=strcat(get(handles.numshow,'string'),'8') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n8); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d8=sin(2*pi*852/handles.fs*n)+sin(2*pi*1336/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d8,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d8,8192);% --- Executes on button press in num9.function num9_Callback(hObject, eventdata, handles)% hObject handle to num9 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n9=strcat(get(handles.numshow,'string'),'9') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n9); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d9=sin(2*pi*852/handles.fs*n)+sin(2*pi*1477/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d9,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d9,8192);% --- Executes on button press in num10.function num10_Callback(hObject, eventdata, handles)% hObject handle to num10 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)n=[1:1000];num=get(handles.numshow,'string');l=length(num);n10=strrep(num,num,num(1:l-1));d10=sin(0.7217*n)+sin(0.9273*n);set(handles.numshow,'string',n10);L=length(handles.NUM);handles.NUM=handles.NUM(1:L-820);guidata(hObject, handles);audioplayer(d10,8192);% --- Executes on button press in num0.function num0_Callback(hObject, eventdata, handles)% hObject handle to num0 (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'),'0') %»ñÈ¡Êý×ÖºÅÂëset(handles.numshow,'string',n0); %ÏÔʾºÅÂën=[1:handles.DTMFnum];d0=sin(2*pi*941/handles.fs*n)+sin(2*pi*1336/handles.fs*n);%¶ÔÓ¦ÐÐÁÐƵÂÊspace=zeros(1,handles.DTMFnum);%410¸ö0Ä£Äâ¾²ÒôÐźÅtemp=[d0,space];handles.NUM=[handles.NUM,temp];%´æ´¢Á¬ÐøµÄ²¦ºÅÒôÐźÅguidata(hObject,handles);audioplayer(d0,8192);% --- Executes on button press in num11.function num11_Callback(hObject, eventdata, handles)% hObject handle to num11 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)set(handles.numshow,'string',[get(handles.numshow,'string'),'#']); fs=8192;fL=941;fH=1477;wL=2*pi*fL/fs;wH=2*pi*fH/fs;n=1:410;d12=sin(wL*n)+sin(wH*n);sound=[d12,zeros(1,410)];audioplayer(sound,fs)pause(.5);if ~isempty(handles.NUM)audioplayer(handles.NUM,fs);all_numdata=handles.NUM;n=length(handles.NUM)/820;rowf_mat=zeros(1,n);colf_mat=zeros(1,n);identify_result='';for i=1:nd=all_numdata((i-1)*820+1:i*820);f=fft(d,fs);a=abs(f);p=a.*a/fs;[value,rowf_mat(i)]=max(p(1:1000));[value,colf_mat(i)]=max(p(1000:1700));colf_mat(i)=colf_mat(i)+1000;endfor i=1:nrowf=rowf_mat(i);colf=colf_mat(i);if rowf<730;row=1;elseif rowf<810row=2;elseif rowf<900row=3;elserow=4;endif colf<1272.5;col=1;elseif colf<1406.5col=2;elsecol=3;endif row==4&&col==2row=1;col=0;endidentify_result=strcat(identify_result,num2str(3*(row-1)+col));endset(handles.numshow2,'string',identify_result);end实验结果:1.拨号2.删除二、总结、讨论和建议本次实验开始时用的wavplay函数实现拨号音,但是在电脑上运行时因为MA TLAB版本较高,wavplay函数已删除,改为了audioplayer函数实现,但是audioplayer函数需要参数定义,查阅了很多资料也没有学到,以至于运行程序的时候,总是在“#”回显是因为audioplayer的缘故不能实现回显,没有完成语音信号的识别。