数字信号处理实验报告电话拨号音合成与识别精品资料.docx

上传人:b****5 文档编号:28164553 上传时间:2023-07-08 格式:DOCX 页数:16 大小:115.63KB
下载 相关 举报
数字信号处理实验报告电话拨号音合成与识别精品资料.docx_第1页
第1页 / 共16页
数字信号处理实验报告电话拨号音合成与识别精品资料.docx_第2页
第2页 / 共16页
数字信号处理实验报告电话拨号音合成与识别精品资料.docx_第3页
第3页 / 共16页
数字信号处理实验报告电话拨号音合成与识别精品资料.docx_第4页
第4页 / 共16页
数字信号处理实验报告电话拨号音合成与识别精品资料.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数字信号处理实验报告电话拨号音合成与识别精品资料.docx

《数字信号处理实验报告电话拨号音合成与识别精品资料.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验报告电话拨号音合成与识别精品资料.docx(16页珍藏版)》请在冰豆网上搜索。

数字信号处理实验报告电话拨号音合成与识别精品资料.docx

数字信号处理实验报告电话拨号音合成与识别精品资料

大连理工大学实验报告

学院(系):

专业:

班级:

姓名:

学号:

组:

___

实验时间:

实验室:

实验台:

指导教师签字:

成绩:

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

一、实验结果与分析

数字拨号音频谱分析(代码与频谱):

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('按键‘#’的频谱');

频谱图如下:

图形电话拨号面板的制作:

首先是框架的搭建:

利用callback在.m文件中对各个模块进行代码的编辑(下面列出主要部分):

1、数字0~9的显示与发声(以数字‘7’为例):

%---Executesonbuttonpressinpushbutton7.

functionpushbutton7_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton7(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

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、删除键‘*’的代码:

%---Executesonbuttonpressinpushbutton11.

functionpushbutton11_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton11(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

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、确认键‘#’的代码:

%---Executesonbuttonpressinpushbutton12.

functionpushbutton12_Callback(hObject,eventdata,handles)

%hObjecthandletopushbutton12(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

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’的代码:

%---ExecutesonbuttonpressinbtFW.

functionbtFW_Callback(hObject,eventdata,handles)

%hObjecthandletobtFW(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

handles.NUM=[];

set(handles.numshow,'string',[]);%显示号码

set(handles.numRec,'string',[]);%显示号码

guidata(hObject,handles);

5、显示键的代码:

%---ExecutesonbuttonpressinbtRec.

functionbtRec_Callback(hObject,eventdata,handles)

%hObjecthandletobtRec(seeGCBO)

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

L=length(handles.NUM);

n=L/handles.DTMFsum;

number='';

fori=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];%确定数字

ifz==[4,2]

tel=0;

elseifz==[1,1]

tel=1;

elseifz==[1,2]

tel=2;

elseifz==[1,3]

tel=3;

elseifz==[2,1]

tel=4;

elseifz==[2,2]

tel=5;

elseifz==[2,3]

tel=6;

elseifz==[3,1]

tel=7;

elseifz==[3,2]

tel=8;

elseifz==[3,3]

tel=9;

end

t(i)=tel;

c=strcat(number,int2str(tel));

number=c;

i=i+1;

end

set(handles.numRec,'string',number);%显示号码

GUI界面的操作:

(1)初始化界面

(2)输入数字后的界面

(3)按‘*’后删除一位(4)按‘#’后确认键

(5)按下显示键显示出来(6)按下Reset键清空

二、讨论、建议、质疑

做本实验分两部分,第一部分是做图形化(GUI)界面的设计,第二部分是做电话信号的频谱分析。

做GUI设计中的问题:

删除键部分‘*’在ppt模板的基础上,将全局变量globalNUM删掉了,而改为用句柄handles.NUM.还有就是用guidata(hObject,handles);进行实时更新从而确保删除后能在内存中也删除。

同时注意删除是820个点,不是1100个点。

确认键’#’只需要发声和显示即可,不用放在内存中,显示键用的是ppt上的模板,其他部分都顺利完成。

第二部分频谱分析是利用FFT变换实现的,由于抽样过程会出现频谱搬移的现象,为了看到原有信号的频谱,采用:

t1=(0:

length(d1)-1)*fs/length(d1)-fs/2;从而保证抽样频率不会在频谱中体现出来,一共做出了12个拨音信号的频谱。

本实验作为综合性的实验,既让我熟悉了GUI的设计,又强化了信号频谱分析的知识,这是本次实验的体会。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1