数字信号处理课程设计报告.docx
《数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
数字信号处理课程设计报告
《数字信号处理》
课程设计报告
专业:
班级:
学号:
姓名:
指导教师:
2011年06月30日
目录
课程设计目的············································3
课程设计题目描述和要····································3
课程设计报告内容········································3
设计总结···············································11
参考数目···············································12
附录···················································13
一、课程设计目的
1.1课程设计目的
1、进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法。
2、掌握的基本理论和分析方法方面的知识得到进一步扩展。
3、能有效地将理论和实际紧密结合。
4、增强软件编程实现能力和解决实际问题的能力。
1.2课程设计目标
1、要求理解课题教学的理论内容。
2、掌握和熟悉matlab软件的编程方法和仿真过程。
3、掌握综合运用各种技术和知识的方法。
二、课程设计题目描述和要求
2.1题目描述
录音-->对原语音信号进行频谱分析、播放原语音信号-->产生噪声-->加噪、播放加噪后的信号-->设计FIR低通滤波器-->对已加噪的信号进行滤波-->对滤波后的信号进行频谱分析-->回放滤波后的信号。
2.2课程设计要求
1、认真独立的完成课程设计。
2、通过课程设计,加深对所学知识的理解和认识。
3、仿真调试通过,达到预期效果。
4、写出设计报告。
三、课程设计报告内容
3.1总体设计
1、利用Windows操作系统自带的录音机录制一段语音信号,存为.wav文件。
2、利用MATLAB中的wavread命令来读入采集的语音信号,将它赋值给某一向量,[y,fs,bits]=wavread(file),采样值放在向量y中,fs表示采样频率(hz),bits表示采样位数。
3、对向量y进行FFT变换实现频谱分析,并用sound命令播放原语音信号。
4、利用MATLAB中的随机函数产生噪声,randn函数有两种基本调用格式:
randn(n)和randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产
生m×n的随机数矩阵。
5、将产生的噪声加载到原始语音信号上,并对加噪后的信号进行频谱分析。
6、依据实际情况设计FIR低通滤波器(滤波器的过渡带为3000hz-3500hz),然后对加噪后的信号进行滤波,并分析滤波后的频谱。
7、利用MATLAB中sound命令来对滤波后语音信号进行回放,并在听觉上来感受声音的差别。
8、制作GUI界面,使整个课程设计的内容更加连贯,便于观察。
3.2软件调试程序
1、读入采集的语音信号,并进行频谱分析和播放
[y,fs,bits]=wavread('F:
\5.wav');%读取音频信息
sound(y,fs,bits);%回放该音频
Y=fft(y,4096);%进行傅立叶变换
figure
(1)
t=(0:
length(y)-1)/fs;
f=fs*(0:
2047)/4096;
subplot(2,1,1);plot(t,y);
xlabel('时间(s)');
ylabel('幅度');
title('声音信号的波形');
subplot(2,1,2)
plot(f,abs(Y(1:
2048)));
xlabel('频率(hz)');ylabel('幅度');
title('声音信号的频谱');
2、产生随机噪声并加载到语音信号中,对加噪的语音信号进行频谱分析和播放
[y,fs,nbits]=wavread('F:
\5.wav');
N=length(y);%求出语音信号的长度
Noise=0.01*randn(N,1);%随机函数产生噪声
Si=y+Noise;%语音信号加入噪声
S=fft(Si,4096);%傅里叶变换
sound(Si,fs,nbits);
figure
(2)
t=(0:
length(y)-1)/fs;
f=fs*(0:
2047)/4096;
subplot(2,1,1);
plot(t,Si);
xlabel('时间(s)');ylabel('幅度');
title('加噪语音信号的时域波形');
subplot(2,1,2);
plot(f,abs(S(1:
2048)));
xlabel('频率(hz)');ylabel('幅度');
title('加噪语音信号的频谱');
3、设计FIR低通滤波器(滤波器的过渡带为3000hz-3500hz),并分析滤波器幅频特性
Wp=3000*2*pi;Ws=3500*2*pi;Ap=0.3;As=50;fs=22050;
wp=Wp/fs;ws=Ws/fs;%归一化通带截频,阻带截频
wdelta=ws-wp;%过渡带宽
%由阻带最小衰减指标确定选用汉明窗,并确定其阶数
N=ceil(6.6*pi/wdelta)
Nw=N;
n=0:
N-1;
alpha=(N-1)/2;
m=n-alpha+eps;%理想滤波器脉冲响应
wc=(wp+ws)/2;%理想截频
hd=sin(wc*m)./(pi*m);%采用汉明窗设计
win=hamming(Nw);
H=hd.*win';
b=H;
[H,f]=freqz(b,1,512,fs);%绘制滤波器的幅频响应图
figure(3)
plot(f,20*log10(abs(H)));
xlabel('频率(hz)');ylabel('幅度');
title('滤波器幅频特性');gridon;
4、对加噪的信号进行滤波,分析对比滤波前后的时域波形和频谱,并回放滤波后的音频信号
fi=fftfilt(b,Si);
sound(fi,fs);%回放声音
t=(0:
length(y)-1)/fs;
f=fs*(0:
2047)/4096;
figure(4)
subplot(2,2,1)
plot(t,Si);
gridon;axistight;
xlabel('时间(t)');
ylabel('幅度');
title('滤波前的时域波形');
subplot(2,2,2)
plot(t,fi);
gridon;axistight;
xlabel('时间(t)');
ylabel('幅度');
title('滤波后的时域波形');
Fi=fft(fi,4096);
f=fs*(0:
2047)/4096;
S=fft(Si,4096);
subplot(2,2,3);
plot(f,abs(S(1:
2048)));
gridon;axistight;
xlabel('频率(Hz)');
ylabel('幅度');
title('滤波前的频谱');
subplot(2,2,4)
plot(f,abs(Fi(1:
2048)));
gridon;axistight;
xlabel('频率(Hz)');
ylabel('幅度');
title('滤波后的频谱');
5、制作简单的GUI界面
打开Matlab,点击file->new->GUI,开始制作界面并保存,将弹出生成的程序窗口,将原有的程序添加到生成的文件中后,点击运行,将弹出设计好的GUI界面如下:
3.3调试结果
1、原始语音信号的时域波形和频谱如下:
2、加噪后语音信号的时域波形和频谱如下:
3、FIR滤波器的幅频特性如下:
4、滤波前后的时域波形和频谱如下:
3.4结果分析
1、采样位数越大,录制和回放的声音就越真实。
因为录音的本质就是把模拟声音信号转换成数字信号;而播放时则是把数字信号还原成模拟声音信号输出,都与采样位数有关。
2、采样频率fs是指录音设备在一秒钟内对声音信号的采样次数,采样频率越高声音的还原就越真实。
3、通过t=(0:
length(y)-1)/fs、f=fs*(0:
2047)/4096转换,才可以使横坐标是时间和频率,若录制的语音信号是二维的话,应通过t=(0:
length(y)-1)/(2*fs)转换,才会使时域波形的长度正确。
4、鼠标点击GUI界面上的按键,将运行对应的程序,从而生成对应的波形和频谱。
5、对音频进行回放的格式有:
sound(y,Fs)、sound(y)和sound(y,Fs,bits),使用第一种和第三种回放方法可以使信号与采样时一致,否则将会出现回放的声音变慢,若录制的语音信号是二维的话,采用sound(y,2*Fs)播放的才是真实的信号。
6、加噪后信号的时域波形变得比较宽,频谱变得比较复杂。
7、通过对比滤波前后的频谱,滤波后的频谱比滤波前的频谱窄,从滤波器截止频率处滤掉高频部分,滤波后的声音比滤波前的清晰了很多,但仍有噪声,声音也显得比较低沉,因为原始信号经过低通滤波器后,高频部分被滤掉了。
3.5增加部分
针对采样点用正弦函数产生噪声,然后加载到原始语音信号上,再用相同的滤波器滤波
[y,fs,nbits]=wavread('F:
\5.wav');
n=length(y);%求出语音信号的长度
t=[1/n:
1/n:
1]';
Noise=0.04*sin(10000*pi*t);%正弦函数产生噪声
Si=y+Noise;%语音信号加入噪声
sound(Si,fs);
t=(0:
length(y)-1)/fs;
f=fs*(0:
2047)/4096;
figure
(2)
subplot(2,1,1);
plot(t,Si);
xlabel('时间(s)');ylabel('幅度');
title('加噪语音信号的时域波形');
S=fft(Si);%傅里叶变换
subplot(2,1,2);
plot(f,abs(S(1:
2048)));
xlabel('频率(hz)');ylabel('幅度');
title('加噪语音信号的频谱');
加噪后和滤波后的时域波形、频谱如下:
四、设计总结
在上学期学数字信号处理的时候,就用过Matlab做实验,因为当时是第一次接触Matlab,根部就不知道怎样使用,更别说写程序了,所以程序基本上都是上网找的或在图书馆查的。
这次的课程设计也是查了很多资料,摸索了很久,才有了点眉目,尤其在做GUI界面时,因为以前根本就没做过这种东西,不知道该怎么下手,经过查资料、看视频、和同学讨论,才慢慢的做了个最简单的图形化界面。
经过两个星期的数字信号处理课程设计,不但巩固了数字信号处理的理论知识,还学会了使用Matlab软件。
虽然只有短短的两星期,但仍然可以发现和解决很多问题,例如:
滤波器的设置、改进程序时回放的信号不在比真实的慢、设置GUI界面等等,增强了我们动手、思考和解决问题的能力。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能更加深刻的认识、理解问题,从而掌握本质。
通过这两次的课程设计,我感觉自己的能力固然很重要,和同学、老师的沟通交流能力更最重要,因为不论干什么事,都不仅仅是一个人去完成,合作和协助在以后的工作、学习中都是很重要的。
参考书目:
[1]陈后金,《DSP技术及应用》,机械工业出版社,2004年
[2]楼顺天,《基于matlab7.X的系统分析与设计》,西安电子科技大学出版社
[3]程佩青,《数字信号处理教程》,清华大学出版社,2007年
[4]周开利,《MATLAB基础及其应用教程》,北京大学出版社,2007年
[5]徐靖涛,《基于MATLAB的语音信号分析与处理》,重庆科技学院学报,2008年
[6]张文,《基于MATLAB的语音信号的滤波与实现.,山西电子技术出版社,2008年
附录:
(GUI源程序代码)
functionvarargout=GUI(varargin)
%GUIM-fileforGUI.fig
%GUI,byitself,createsanewGUIorraisestheexisting
%singleton*.
%
%H=GUIreturnsthehandletoanewGUIorthehandleto
%theexistingsingleton*.
%
%GUI('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinGUI.Mwiththegiveninputarguments.
%
%GUI('Property','Value',...)createsanewGUIorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforeGUI_OpeningFunctiongetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.AllinputsarepassedtoGUI_OpeningFcnviavarargin.
%
%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone
%instancetorun(singleton)".
%
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%EdittheabovetexttomodifytheresponsetohelpGUI
%LastModifiedbyGUIDEv2.530-Jun-201017:
27:
15
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@GUI_OpeningFcn,...
'gui_OutputFcn',@GUI_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[]);
ifnargin&isstr(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
});
end
%Endinitializationcode-DONOTEDIT
%---ExecutesjustbeforeGUIismadevisible.
functionGUI_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstoGUI(seeVARARGIN)
%ChoosedefaultcommandlineoutputforGUI
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakesGUIwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=GUI_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton1(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
[y,fs,bits]=wavread('F:
\5.wav');%读取音频信息
sound(y,fs,bits);%回放该音频
Y=fft(y,4096);%进行傅立叶变换
figure
(1)
t=(0:
length(y)-1)/fs;
f=fs*(0:
2047)/4096;
subplot(2,1,1);
plot(t,y);
xlabel('时间(s)');ylabel('幅度');
title('声音信号的波形');
subplot(2,1,2)
plot(f,abs(Y(1:
2048)));
xlabel('频率(hz)');ylabel('幅度');
title('声音信号的频谱');
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton2(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
[y,fs,nbits]=wavread('F:
\5.wav');
N=length(y);%求出语音信号的长度
Noise=0.01*randn(N,1);%随机函数产生噪声
Si=y+Noise;%语音信号加入噪声
S=fft(Si,4096);%傅里叶变换
sound(Si,fs,nbits);
figure
(2)
t=(0:
length(y)-1)/fs;
f=fs*(0:
2047)/4096;
subplot(2,1,1);
plot(t,Si);
xlabel('时间(s)');ylabel('幅度');
title('加噪语音信号的时域波形');
subplot(2,1,2);
plot(f,abs(S(1:
2048)));
xlabel('频率(hz)');ylabel('幅度');
title('加噪语音信号的频谱');
%---Executesonbuttonpressinpushbutton3.
functionpushbutton3_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton3(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
Wp=3000*2*pi;Ws=3500*2*pi;Ap=0.3;As=50;fs=22050;
wp=Wp/fs;ws=Ws/fs;%归一化通带截频,阻带截频
wdelta=ws-wp;%过渡带宽
%由阻带最小衰减指标确定选用汉明窗,并确定其阶数
N=ceil(6.6*pi/wdelta)
Nw=N;
n=0:
N-1;
alpha=(N-1)/2;
m=n-alpha+eps;%理想滤波器脉冲响应
wc=(wp+ws)/2;%理想截频
hd=sin(wc*m)./(pi*m);%采用汉明窗设计
win=hamming(Nw);
H=hd.*win';
b=H;
[H,f]=freqz(b,1,512,fs);%绘制滤波器的幅频响应图
figure(3)
plot(f,20*log10(abs(H)))
xlabel('频率(hz)');ylabel('幅度');
title('滤波器幅频特性');gridon;
%---Executesonbuttonpressinpushbutton4.
functionpushbutton4_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton4(seeGCBO)
%eventdatare