
电子信息工程学院
DSP 课程设计报告
题 目:基于语音信号的回声信号发生器
专业班级:06通信工程C、D班
学 号:********* ********3
060442322 060442332
姓 名:刘安娜 李婷
彭祎 闫地
指导教师:韩萍 何玮琨
二〇〇九 年 十二 月 十一 日
一、设计目的………………………………………………1
二、设计要求………………………………………………1
三、设计原理及方案………………………………………1
四、软件流程………………………………………………2
五、调试分析………………………………………………3
六、设计总结………………………………………………4
七、参考文献………………………………………………5
八、附录(程序代码及元件清单)………………………5
一、设计目的
1、掌握利用数字信号处理的方法实现多回声产生方法
2、掌握回声产生原理设计信号发生器
3、复习MATLAB有关命令
4、培养小组分工合作能力
5、熟悉简单课题设计流程,为毕业设计做准备
二、设计要求
1、实现一次,两次…多次回声信号的产生
2、利用MATLAB的GUI设计一个操作简单的信号发生器界面
3、波形显示输入语音信号和输出回声语音信号的幅度、时域信号,比较二者波形及听取语音差别
4、波形显示信号发生器系统的幅度、相位频谱
三、设计原理及方案
(一)设计原理
多回声语音信号的产生原理
时域模型
其中,a表示衰减系数且|a|<1
频域模型
R为延迟间隔,采样频率为22050Hz
(二)设计方案
1、利用WINDOWS下的录音机或其他软件,录制一段自己的语音信号,或直接截取一段语音信号,时间控制在2s左右,并对信号进行采样。
2、对语音信号进行频谱分析,画出采样后语音信号的时域波形和频谱波形。
3、将语音信号加入延时,再分析其频谱并与原始信号频谱进行比较。
4、播放回声语音信号,与原始语音信号相比较。
5、波形显示所设计的回声信号发生器的系统幅度、相位频谱。
(三)小组分工
查阅资料、语音信号采集:闫地主要负责;
原理分析、MATLAB语言实现:刘安娜、李婷;
GUI界面、PPT展示:彭祎主要负责;
课程设计报告:全体成员。
四、软件流程
五、调试分析
回声语音信号发生器设计过程中,程序在MATLAB中直接运行成功,但在加入到GUI界面中,对控制按键进行callback编辑时,出现了一些问题,经过研究讨论已解决。
1波形显示:原有程序中的figure函数无法在GUI的指点位置显示波形,用axes(handles.axes1)语句加以替换(axes1即要求显示波形的目的框图),即可在指定位置显示要求的波形。
2延时时间及回声次数选择:在插入文本输入控制框时,我们首先采用的是用语句N=str2num(get(handles.edit1,'String'))解决赋值问题,但是全局变量的定义问题使得原本的global命令失效,不稳定。经过调试我们最终采用句柄,用语句handles.t=t,定义全局变量t,实现延时时间的输入功能。回声次数设置同理。
六、设计总结
(一)设计功能仍不完善
目前该设计仅能实现单个语音信号的回声信号发生,对于语音信号文件的选择功能尚未实现。
(二)心得体会
1在本次试验中由于一些函数的使用是在平时上课中没有学到的,我们查阅了大量的资料。这大大提高了我们的自学能力使我们能够更好的用已知的只是来解决未知的问题不在单纯的依靠老师的讲解,锻炼了我们的自学能力,也为毕业设计打下一个良好的基础。
2在实验中我们明白要多动手写程序、调试程序。尤其是调试程序,有的时候一次调试就可以成功的运行但是有的时候总是调试不出来结果。经过大家的努力之后发现问题、解决问题不仅提高了我们的动手能力也提高了我们解决问题的能力。
3在这次实验的过程中我们发觉几乎所有的问题都可 以在MATLAB的帮助里找到解决问题的办法。将大问题化为小问题、小函数,然后在MATLAB帮助里找那个这种问题、函数的用法。通过MATLAB的使用使我们明白了在以后使用各种软件的过程中要善于利用软件自身提供的帮助来解决各种问题。
4善于向别人学习。在我们解决了一个问题之后,可能会发现别人有更简单的解决方法或者是更强的函数,这个时候大家相互学习相互借鉴,可以更加完善自己的程序。
5虽然实习结束但仍应继续学习MATLAB软件,希望能够将该设计的语音信号文件选择这一功能实现,解决这一问题。小组实习培养了大家团队合作能力,分工负责各自擅长的部分,共同完成整个设计课程。感谢老师提出的宝贵意见,指点我们改进设计。
七、参考文献
【1】韩萍,何玮琨.数字信号处理实验指导书.中国民航大学,2008
【2】董长虹主编.Matlab信号处理与应用.国防工业出版社,2005
【3】张志涌.Matlab教程——基于6.X版本.北京航空航天大学出版社,2001
八、附录(程序代码)
t=str2num(get(handles.edit2,'String'));
handles.t=t;
N=str2num(get(handles.edit1,'String'));
handles.N=N;
x=wavread('2005.wav');
FW=abs(fft(x));
t1=impz(x);
axes(handles.axes1);
plot(FW);xlabel('n');
axes(handles.axes2);
plot(t1);xlabel('n');
y=filter([1,zeros(1,22050*t*N-1),-0.4^N],[1,zeros(1,22050*t-1),-0.4],[x',zeros(1,5000)]);
sound(y,12050);
y_fft=abs(fft(y));
t2=impz(y);
axes(handles.axes3);
plot(y_fft);
axes(handles.axes4);
plot(t2); hn1=freqz([1,zeros(1,22050*t*N-1),-0.4^N],[1,zeros(1,22050*t-1),-0.4],256);
axes(handles.axes5);
plot(abs(hn1));
xlabel('n'); axes(handles.axes6);
plot(angle(hn1));
xlabel('n'); grid on;
