数字信号处理课程设计报告.docx

上传人:b****5 文档编号:6299976 上传时间:2023-01-05 格式:DOCX 页数:18 大小:114.96KB
下载 相关 举报
数字信号处理课程设计报告.docx_第1页
第1页 / 共18页
数字信号处理课程设计报告.docx_第2页
第2页 / 共18页
数字信号处理课程设计报告.docx_第3页
第3页 / 共18页
数字信号处理课程设计报告.docx_第4页
第4页 / 共18页
数字信号处理课程设计报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数字信号处理课程设计报告.docx

《数字信号处理课程设计报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。

数字信号处理课程设计报告.docx

数字信号处理课程设计报告

 

《数字信号处理》

课程设计报告

 

专业:

班级:

学号:

姓名:

指导教师:

 

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

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

当前位置:首页 > 高等教育 > 艺术

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

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