大连理工大学数字信号处理实验二电话拨号音的合成与识别

合集下载

数字信号处理在多音频拨号系统中的应用实验

数字信号处理在多音频拨号系统中的应用实验

实验四:数字信号处理在多音频拨号系统中的应用1、实验目的了解电话中双音多频(DMTF)信号的产生与检测1、程序清单%DTMF双音多频拨号信号的生成和检测仿真程序:exp6.m tm=[1,2,3,65;4,5,6,66;7,8,9,67; 42,0,35,68];%DTMF信号代表的16个数N=205;K=[18,20,22,24,31,34,38 ,42]; %8个基频对应的8个K值f1=[697,770,852,941];%行频率向量f2=[1209,1336,1477,1633];%列频率向量TN=input('键入6位电话号码='); %输入6位数字TNr=0%接受段电话号码初值为零form=1:6;%分别对每位号码数字处理:产生信号,发声,检测d=fix(TN/10^(6-m));%计算出第m位号码数字TN=TN-d*10^(6-m);for p=1:4;for q=1:4;iftm(p,q)==abs(d);break,end %检测与第m位号码相符的列号qendiftm(p,q)==abs(d);break,end %检测与第m位号码相符的列号pendn=0:1023;%为了发声,加长序列x=sin(2*pi*n*f1(p)/8000)+sin(2*pi* n*f2(q)/8000);%构成双频信号sound(x,8000);%发出声音pause(0.1)%相邻号码响声之间加0.1秒停顿%接受检测端的程序X=goertzel(x(1:N),K+1);%用Goertzel算法计算八点DFT样本val=abs(X);%列出八点DFT的模subplot(3,2,m);stem(K,val,'.');grid;xl abel('k');ylabel('|X(k)|')%画出8点DFT的幅度axis([10 50 0 120])limit=80;%基频检测门限为80for s=5:8;ifval(s)>limit,break,end %查找列号endfor r=1:4;ifval(r)>limit,break,end %查找行号endTNr=TNr+tm(r,s-4)*10^(6-m);%强6位电话号码表示成一个6位数,以便显示enddisp('接收端检测到的号码为:')disp(TNr)%显示接收到的6位电话号码%此程序为exp6的改进程序,与exp6的区别是:%(1)增加了输入电话号码长度判别语句,保证输入位数为6为;%(2)增加了首位非0识别,能保证类似"012345、001234、000123、000000"号码正确识别与显示.clc;clear;tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,6 8];N=205;K=[18,20,22,24,31,34,38,42];f1=[697,770,852,941];f2=[1209,1336,1477,1633];first_flag=0;TN0=input('please input telephone number (8bit) is =','s'); %输入6位电话号码,以字符型输入TN=str2num(TN0); %将字符型转换为实数类型len=length(TN0);%将字符型数据的长度if len==8 %若输入位数为6位,则顺序执行;否则输入号码不是6位(少于6位或大于6位),则输出错误提示信息TNr=0;for m=1:8d=fix(TN/10^(8-m));TN=TN-d*10^(8-m);temp_number(m)=d; %将每位号码保存在数组中for p=1:4for q=1:4if tm(p,q)==abs(d)break;endendif tm(p,q)==abs(d)break;endendn=0:1023;x=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2 (q)/8000);sound(x,8000);pause(0.2);X=goertzel(x(1:N),K+1);val=abs(X);subplot(4,2,m);stem(K,val,'.');grid;xlabel('K');ylabel('|X(k)|');axis([10 50 0 120]);limit=80;for j=5:8if val(j)>limitbreak;endendfor r=1:4if val(r)>limitbreak;endendTNr=TNr+tm(r,j-4)*10^(8-m);if (m==1)&(TNr==0)first_flag=1;endendif(first_flag==1) %判断首位是否为0,如果为0,显示结果将补0,直至首位非0位add_zero='0';%字符型变量初始化temp_zero='0';for k=2:5if temp_number(k)==0 %判断需要补几位0,此程序的目的是要保证类似“001234、000123、000000”显示正确add_zero=strcat(add_zero,temp_zero); %字符型变量组合elsebreak;endendTNr_disp_0=num2str(TNr); %实数型变量转字符型变量TNr_disp=strcat(add_zero,TNr_disp_0);first_flag=0;elseTNr_disp=num2str(TNr);add_zero='';endTNr_disp_0=num2str(TNr);TNr_disp=strcat(add_zero,TNr_disp_0) disp('telephone number from the receiver is:');disp(TNr_disp);elsedisp(TN0);disp('please input the right telephone number(8 bit)');end%DTMF双音多频拨号信号生成与检测,滤波器组方法%此程序为滤波器组方法的改进程序,与原有滤波器组方法的区别是:%(1)增加了输入电话号码长度判别语句,保证输入位数为6为;%(2)增加了首位非0识别,能保证类似"012345、001234、000123、000000"号码正确识别与显示.clc;clear;%首先设计带通滤波器组,利用滤波器组检测信号rp=1;rs=30;fs=8000; %采样频率8kHzfpl1=677;fph1=717;fsl1=657;fsh1=737; fpl2=750;fph2=790;fsl2=730;fsh2=810; fpl3=832;fph3=872;fsl3=812;fsh3=892; fpl4=921;fph4=961;fsl4=901;fsh4=981; fpl5=1179;fph5=1239;fsl5=1149;fsh5=1269;fpl6=1306;fph6=1366;fsl6=1276;fsh6=1 396;fpl7=1447;fph7=1507;fsl7=1417;fsh7=1 537;fpl8=1603;fph8=1663;fsl8=1573;fsh8=1 693;wpl1=fpl1/(fs/2);wph1=fph1/(fs/2);wsl1=fsl1/(fs/2);wsh1=fsh1/(fs/2);wpl2=fpl2/(fs/2);wph2=fph2/(fs/2);wsl2=fsl2/(fs/2);wsh2=fsh2/(fs/2);wpl3=fpl3/(fs/2);wph3=fph3/(fs/2);wsl3=fsl3/(fs/2);wsh3=fsh3/(fs/2);wpl4=fpl4/(fs/2);wph4=fph4/(fs/2);wsl4=fsl4/(fs/2);wsh4=fsh4/(fs/2);wpl5=fpl5/(fs/2);wph5=fph5/(fs/2);wsl5=fsl5/(fs/2);wsh5=fsh5/(fs/2);wpl6=fpl6/(fs/2);wph6=fph6/(fs/2);wsl6=fsl6/(fs/2);wsh6=fsh6/(fs/2);wpl7=fpl7/(fs/2);wph7=fph7/(fs/2);wsl7=fsl7/(fs/2);wsh7=fsh7/(fs/2);wpl8=fpl8/(fs/2);wph8=fph8/(fs/2);wsl8=fsl8/(fs/2);wsh8=fsh8/(fs/2);wp1=[wpl1 wph1];ws1=[wsl1 wsh1]; wp2=[wpl2 wph2];ws2=[wsl2 wsh2]; wp3=[wpl3 wph3];ws3=[wsl3 wsh3]; wp4=[wpl4 wph4];ws4=[wsl4 wsh4]; wp5=[wpl5 wph5];ws5=[wsl5 wsh5]; wp6=[wpl6 wph6];ws6=[wsl6 wsh6]; wp7=[wpl7 wph7];ws7=[wsl7 wsh7]; wp8=[wpl8 wph8];ws8=[wsl8 wsh8];[N1,wc1]=buttord(wp1,ws1,rp,rs) [Bz1,Az1]=butter(N1,wc1)[N2,wc2]=buttord(wp2,ws2,rp,rs) [Bz2,Az2]=butter(N2,wc2)[N3,wc3]=buttord(wp3,ws3,rp,rs) [Bz3,Az3]=butter(N3,wc3)[N4,wc4]=buttord(wp4,ws4,rp,rs) [Bz4,Az4]=butter(N4,wc4)[N5,wc5]=buttord(wp5,ws5,rp,rs) [Bz5,Az5]=butter(N5,wc5) [N6,wc6]=buttord(wp6,ws6,rp,rs)[Bz6,Az6]=butter(N6,wc6)[N7,wc7]=buttord(wp7,ws7,rp,rs)[Bz7,Az7]=butter(N7,wc7)[N8,wc8]=buttord(wp8,ws8,rp,rs)[Bz8,Az8]=butter(N8,wc8)%产生DTMF信号tm=[1,2,3,65;4,5,6,66;7,8,9,67;42,0,35,6 8]; %DTMF信号代表的16个数字%N=205;%K=[18,20,22,24,31,34,38,42]; %8个基频对应的8个k值f1=[697,770,852,941];f2=[1209,1336,1477,1633];first_flag=0;TN0=input('please input telephone number (6bit) is =','s'); %输入6位电话号码,以字符型输入TN=str2num(TN0); %将字符型转换为实数类型len=length(TN0);%将字符型数据的长度if len==6 %若输入位数为6位,则顺序执行;否则输入号码不是6位(少于6位或大于6位),则输出错误提示信息TNr=0;for m=1:6d=fix(TN/10^(6-m));TN=TN-d*10^(6-m);temp_number(m)=d; %将每位号码保存在数组中for p=1:4for q=1:4if tm(p,q)==abs(d) %检测列号break;endendif tm(p,q)==abs(d) %检测行号break;endendn=0:1023;x=sin(2*pi*n*f1(p)/8000)+sin(2*pi*n*f2 (q)/8000); %产生双频信号sound(x,8000);pause(0.1);%用滤波器组检测DTMFy1=filter(Bz1,Az1,x);y2=filter(Bz2,Az2,x);y3=filter(Bz3,Az3,x);y4=filter(Bz4,Az4,x);y5=filter(Bz5,Az5,x);y6=filter(Bz6,Az6,x);y7=filter(Bz7,Az7,x);y8=filter(Bz8,Az8,x);y=[y1;y2;y3;y4;y5;y6;y7;y8];figure;for k=1:8yy=y(k,:);subplot(4,2,k);plot(n,yy,'-');endlimit=0.6;for j=5:8if (max(abs(y(j,:)))>limit)break;endendfor r=1:4if (max(abs(y(r,:)))>limit)break;endendTNr=TNr+tm(r,j-4)*10^(6-m);if (m==1)&(TNr==0)first_flag=1;endendif(first_flag==1) %判断首位是否为0,如果为0,显示结果将补0,直至首位非0位add_zero='0';%字符型变量初始化temp_zero='0';for k=2:5if temp_number(k)==0 %判断需要补几位0,此程序的目的是要保证类似“001234、000123、000000”显示正确add_zero=strcat(add_zero,temp_zero); %字符型变量组合elsebreak;endendTNr_disp_0=num2str(TNr); %实数型变量转字符型变量TNr_disp=strcat(add_zero,TNr_disp_0);first_flag=0;elseTNr_disp=num2str(TNr);add_zero='';endTNr_disp_0=num2str(TNr);TNr_disp=strcat(add_zero,TNr_disp_0) disp('telephone number from the receiver is:');disp(TNr_disp);elsedisp(TN0);disp('the telepone number is wrong, please input the right telephone number(6 bit)');end3、仿真波形 输入123456输入123456781020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|1020304050050100k|X (k )|2、 思考题简述DTMF 信号的参数:采样频率、DFT 的变换点数以及观测时间的确定原则。

电话拨号音的识别——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中,可以得出拨号⾳对于频率表。

大连理工大学通信网实验-实验一预习报告剖析

大连理工大学通信网实验-实验一预习报告剖析

大连理工大学实验预习报告学院(系):信息与通信工程专业:通信工程班级:电通1402姓名:糜智华学号:201483051 组:___实验时间:2016年11月14日实验室:C221 实验台:实验一程控交换机语音通信实验预习报告一、实验目的和要求通过该实验使学生理解通信网络的基本概念,了解和掌握现代通信网的网络拓扑结构、通信网使用的设备连接方法和信号传输过程。

本实验将进行基于数字程控交换机的语音通信实验。

通过对交换机的简单配置,了解电话网的基本组成和交换机构成及各部分的功能,熟悉固定电话的接续流程,以对将来通信行业的硬件和软件工作有一定的了解。

二、实验原理和内容实验内容:a)熟悉实验室通信设备,了解各通信设备基本功能,能够简单配置和操作设备。

b)操作和配置程控交换机,实现电话之间通话实验实验原理:电话网是传递电话信息的电信网,是可以进行交互型话音通信、开放电话业务的电信网。

电话网包括本地电话网、长途电话网、国际电话网等多种类型。

是业务量最大、服务面最广的电信网。

电话网经历了由模拟电话网向综合数字电话网的演变。

除了电话业务,还可以兼容许多非电话业务。

因此电话网可以说是电信网的基础。

最早的电话通信形式只是两部电话机中间用导线连接起来便可通话。

电话网采用电路交换方式,由发送和接收电话信号的用户终端设备(如电话机)进行电路交换的交换设备(电话交换机)、连接用户终端和交换设备的线路(用户线)和交换设备之间的链路(中继线)组成。

电话网基本结构形式分为多级汇接网和无级网两种。

端局:端局就是直接下挂用户或者直接拨入(DID局)的交换机。

在移动通信中,端局之间若没有进行直连,则通过汇接局进行连接,运营商之间的中继互联是通过关口局来进行连接的。

关口局是出网的局点。

各个端局通过中继的方式汇聚到一个局点,再上行到关口局或长途局。

汇接局:汇接局属于本地网内的一种交换局,它汇接各端局通过中继线送来的话务量,然后送至相应的端局。

实验4 双音多频信号的合成与检测.

实验4 双音多频信号的合成与检测.

实验四双音多频信号的合成与检测一实验目的1.理解电话拨号音的合成与检测的基本原理;2.深入理解信号频谱分析理论中相关参数的作用和意义; 3.了解频谱分析在实际工程中的应用实例。

二实验基础双音多频(dual-tone multifrequency, DTMF信号的产生及检测在现代通信系统中有着广泛的应用,家用电话、移动电话以及公共程控交换机(PBX都采用DTMF 信号发送和接收电话拨号号码。

本实验要求利用信号的时域分析和频域分析的基本理论实现DTMF 的合成和检测。

1. DTMF信号合成DTMF 信号由低频组和高频组两组频率信号构成。

按键电话上每个按键都由对应的两个频率组成,如表4.1。

当按下某个键时,所得到的按键信号是由相应两个频率的正弦信号叠加而成。

设x(n为DTMF 信号,产生方式为:x (n =sin (ωH n +sin (ωH n式中:ωH =f s,ωL =f sf s =8KHz 。

DTMF 信号的标准是:在传送过程中每个按键字占用100ms ,其中信号必须持续至少40ms ,且不得多于55ms ,100ms 里的其余时间为静音(无信号)。

表4.1按键频率对应表2. DTMF信号检测DTMF 信号的检测是将信号的两个频率提取出来,从而确定接收到的DTMF 对应的按键。

利用DFT 对DTMF 信号进行N 点的频谱分析,N 的选取决定了频率分辨率以及捕捉N 个样值所需要的时间。

根据谱峰出现的频率点位置m 就可以确定DTMF 信号的频率f k:/k s f kf N =这样计算出的DTMF 信号频率可能与实际的DTMF 信号频率有一定的差别,但可以通过加大N 的选取来减小这种频率差异。

然而从另外一方面来考虑,虽然加大N 值会减小检测频率误差,但这势必会带来捕捉N 个样值所需要的时间增加,从而会对检测的效果造成一定影响。

由DTMF 信号频率所具有的特性不难发现要选取一定的N 值使得计算出的频率和真实的DTMF 信号的频率相一致几乎不可能,而实际中也并不需要计算出来的频率值与其真实频率相一致,只需偏差保持在±1.5%即可认为是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来表示间隔来模拟静音。

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

信与系统实验电话拨音的合成与分解
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 为例,简单介绍拨号音产生的过程:

电话拨号音识别全解

电话拨号音识别全解

原理(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

数字信号处理实验报告--含噪语音信号的分析

数字信号处理实验报告--含噪语音信号的分析

大连理工大学实验报告学院(系):专业:班级:姓名:学号:组:___实验时间:实验室:实验台:指导教师签字:成绩:实验五含噪语音信号的分析一、实验目的和要求二、实验原理和内容三、实验结果与分析第一部分:产生含噪的语音信号首先分析原始的语音信号的波形和频谱:[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. 语音信号采集:使用语音采集设备录制一段时长约为10秒的语音样本,确保录音环境安静,语音清晰。

2. 语音信号预处理:对采集到的语音信号进行预处理,包括去噪、归一化等操作,以提高后续处理的准确性。

3. 语音信号分析:利用傅里叶变换等方法分析语音信号的频谱特性,观察并记录基频、谐波等特征。

4. 语音信号滤波:设计并实现一个带通滤波器,用于提取语音信号中的特定频率成分,去除噪声和非目标频率成分。

5. 特征提取:从处理后的语音信号中提取关键特征,如梅尔频率倒谱系数(MFCC)等,为后续的语音识别或分类任务做准备。

6. 实验总结:根据实验结果,撰写实验报告,总结语音信号处理的关键技术和实验中遇到的问题及其解决方案。

实验设备与工具:- 计算机一台,安装有语音信号处理相关软件(如Audacity、MATLAB 等)。

- 麦克风:用于采集语音信号。

- 耳机:用于监听和校正采集到的语音信号。

实验步骤:1. 打开语音采集软件,调整麦克风输入设置,确保录音质量。

2. 录制语音样本,注意控制语速和音量,避免过大或过小。

3. 使用语音分析软件打开录制的语音文件,进行频谱分析,记录观察结果。

4. 设计带通滤波器,设置合适的截止频率,对语音信号进行滤波处理。

5. 应用特征提取算法,获取语音信号的特征向量。

6. 分析滤波和特征提取后的结果,评估处理效果。

实验结果与讨论:- 描述语音信号在预处理、滤波和特征提取后的变化情况。

- 分析实验中遇到的问题,如噪声去除不彻底、频率成分丢失等,并提出可能的改进措施。

- 探讨实验结果对语音识别、语音合成等领域的潜在应用价值。

结论:通过本次实验,我们成功实现了语音信号的基本处理流程,包括采集、预处理、分析、滤波和特征提取。

电话按键音的识别

电话按键音的识别

一、 实验目的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信号的产生与识别

目录一、实验背景------------------------------------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十个数字拨号信息的频谱,观察频谱图中的峰值点的幅值以及它们出现的位置。

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

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.了解双音多频信号的产生、检测、包括对双音多频信号进展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所示。

表中最后一列在中暂时未用。

电话拨号音的识别

电话拨号音的识别

电话拨号音的识别
迟云飞
【期刊名称】《无线互联科技》
【年(卷),期】2014(0)5
【摘要】为了提高信息安全,防止密码失窃,对电话拨号音(DTMF信号)的合成与识别进行了深入的分析和研究。

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

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

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

【总页数】1页(P131-131)
【作者】迟云飞
【作者单位】长安大学信息工程学院,陕西西安 710064
【正文语种】中文
【相关文献】
1.基于计算机的电话拨号音的采集与分析
2.一种新的电话拨号音自动识别方法
3.拨个电话便打假——全省首例通过电话防伪系统识别假药案采访记
4.基于大数据挖掘技术的诈骗电话识别与管理
5.新型冠状病毒肺炎疫情期间发热患者电话初筛未识别对院前急救人员防护的影响
因版权原因,仅展示原文概要,查看原文内容请购买。

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

大连理工大学实验报告
学院(系):电子信息与电气工程专业:电子信息工程班级:姓名:学号:组:___
实验时间:实验室:实验台:指导教师签字:成绩:实验二、电话拨号音的合成与识别一、实验题目和代码
实现对电话通信系统中拨号音合成与识别的仿真实现。

系统界面设计:
源程序:
function varargout = zuoye(varargin)
function zuoye_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 GUIDA TA)
% varargin command line arguments to zuoye (see V ARARGIN)
% Choose default command line output for zuoye
handles.output = hObject;
handles.fs = 8192;
handles.DTMFsum=820;
handles.DTMFnum = handles.DTMFsum/2;
handles.NUM=[];
handles.number = [];
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 GUIDA TA)
n0=strcat(get(handles.numshow,'string'),'1'); % 获取数字号码
set(handles.numshow,'string',n0); % 显示号码
n=[1:handles.DTMFnum]; % 每个数字410 个采样点表示
d0=sin(2*pi*697/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);
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 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);
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 GUIDA TA)
L=length(handles.NUM);
n=L/handles.DTMFsum;
number='';
for i=1:n
j=(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;
else
row=4;
end
if (num(2) < 1260)
column=1; % 确定列数elseif (num(2) < 1400)
column=2;
else
column=3;
end
z=[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;
end
t(i)=tel;
c=strcat(number,int2str(tel));
number=c;
i=i+1;
end
set(handles.numshow2,'string',number);
实验结果:
拨号:识别:
二、总结、讨论和建议
本次试验是第一次接触matlab中的gui功能,对其还不是特别熟悉,在老师的指导下完成了任务。

在本次试验中,主要遇到的问题就是编代码时没有考虑清屏操作,导致前一次的显示结果也会保留在窗口上,加入set(handles.numshow2,'string',number);这段代码后程序功能才正常运行;运行程序的时候,没有完成语音信号的识别。

其他部分没有太大的问题。

同时通过本次实验进一步熟悉了MATLAB中GUI的操作。

相关文档
最新文档