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

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

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

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

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

数字信号处理课程设计

《数字信号处理课程设计》

课程总结报告

 

题目

运用matlab的数字音效处理系统设计

学院

电子信息工程学院

专业

通信工程

姓名

赵亚

学号

P2*******

队员

吴双胜程勇

 

2015年12月21日

安徽大学电子学院通信工程系

 

 

1、设计的目的和意义

1.1设计的目的和意义

现在随着时代的发展,人类已开始进入了信息化时代,用现代手段研究语音信号,使人们能更加有效地产生、传输、存储、获取和应用语音信息,这对于促进社会的发展具有十分重要的意义。

学习了数字信号处理以及相关课程,就想自己动手做一段音频处理,来锻炼自己的动手能力,把知识学以致用。

一般的录音是单声道的,放音时也是由一个扬声器发出声音,感觉不到立体感,因此就需要我们对声音进行处理,使得声音信号在平时听起来也可以产生立体感。

综合所学的数字信号处理知识,利用MATLAB语言编程进行单回声、多回声、混音和和声的设计,并对处理后的信号进行频谱分析,实现的单回声、多回声、混音及和声的产生。

同时通过处理音乐,我们也能更加的了解编码,熟悉运用MATLAB软件来处理音乐、声音,并熟悉数字信号处理方面的理论知识。

1.2关于MATLAB软件:

1.MATLAB语言具备高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;

2.具有完备的图形处理功能,实现计算结果和编程的可视化;

3.友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;

4.功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等),为用户提供了大量方便实用的处理工具。

1.3课题要求

1.课题要求

(1).录制采集一段自己的语音信号;

(2).设计滤波器,实现单回声、多回声、混响效果和和声效果;

2、实现方案

2.1总体方案

首先,对原始的音频信号进行频谱分析;然后通过数字信号处理对原声信号进行延时,衰减,产生单回声信号及多回声信号,通过图形与原声信号进行比较。

混响效果主要是用于增加音源的融合感。

自然音源的延时声阵列非常密集、复杂,所以模拟混响效果也复杂多变。

声音在一个密闭的控件到达听众时,包含直达声、早期的反射和混响几部分。

早期的反射有几个空间上临近的直达声的基本延迟和衰减组成,而混响则有密集的回声组成。

当振幅有少量变换并声音之间有很少的时间差别时,会产生和声效果。

延时可用如下函数实现:

注意:

在时刻n处

的值通常是一个非整数值,在实际视线中,输出样本值需要用到内插法进行计算。

 

2.2设计流程图

 

打开界面选择功能

原信号分析

输出原信号分析波形

原信号取样

设计一个FIR滤波器,进行延时及衰减处理,得到回声信号。

频谱分析,绘出信号的频谱图以及时域波形

单回声

设计一个IIR滤波器,进行延时及衰减处理,得到回声信号。

将每一级回声相对于上一级回声一次衰减和延时R个周期

频谱分析,绘出信号的频谱图以及时域波形

 

多回声

设计全通滤波器,进行延时和叠加,达到混响效果。

频谱分析,绘出信号的频谱图以及时域波形

 

混响

设计滤波器,把原信号进行不同延迟和衰减,叠加达到和声效果。

频谱分析,绘出信号的频谱图以及时域波形

 

和声

 

1.通过计算机中的y=fft(x)傅里叶变换,对原声信号和回声信号进行频谱分析。

2.通过设计FIR、IIR滤波器对原声信号进行衰减、延时产生一次、多次(次数可通过N改变,此处以三次为例)。

三、设计原理

3.1回声部分设计原理

回声的定义:

当声音投射到距离声源有一段距离的大面积上时,声能的一部分被吸收,而另一部分声能会被反射会俩,如果听者听到由声源直接发出的声和反射回来的声的时间间隔超过1/10秒,就能分辨这是两个声音,将返回的声音成为“回声”。

1、单回声滤波器:

回声可以由简单的延时单元产生。

直达声和在R抽样周期后出现的一种单个回音可以用FIR滤波器产生。

微分方程为:

y(n)=x(n)+αx(n-R)

该差分方程的系统函数可表示为:

H(z)=1+

传递函数的幅频响应形状像梳子,这种滤波器又叫做梳状滤波器

此滤波器为FIR滤波器,其结构图如下:

 

α

图2.2FIR滤波器结构

2、多重回声滤波器:

为了产生以间隔R个抽样周期分开的具有指数衰减振幅的多重回声,可用一个以下形式传输函数的IIR滤波器:

无限个振幅以指数衰减间隔为R个抽样周期的多重回声可用以下形式传输函数的IIR滤波器生成:

IIR滤波器结构图:

 

图2.3IIR滤波器结构图

3.2混响部分设计原理

混响则有密集的回声组成。

上述多重回声滤波器不能提供自然声音混响。

有其幅频特性可知其幅度响应对于所有频率不是常数,不能达到应产生的效果。

为了产生更真实的混响效果,采用全通结构的混响器器,其传输函数为:

3.3和声部分设计原理

和声是对原始信号进行不同程度的衰减和延时,最后这些信号和原信号进行叠加会产生和声效果。

延时可用如下函数实现:

四、设计过程

4.1设计方案

1.读取语音信号与回放

一段合适的原声信号,用“[x,fs]=audioread('d:

\v4.mp3');”来读取录制好的语音信号,这是以采样频率fs来读取语音,并将采样信号值放入x中。

用sound(x,fs)对声音信号进行回放。

2.傅里叶变换FFT

傅里叶变换调用格式:

y=fft(x)

其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT。

且和x相同长度。

若x为一矩阵,则y是对矩阵的每一列向量进行FFT。

如果x长度是2的幂次方,函数fft执行高速基-2FFT算法;否则fft执行一种混合基离散傅里叶变换算法,计算速度大较慢。

3.函数filter

函数filter的调用格式为:

y=filter(b,a,x)

该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。

其中向量b和a分别表示系统函数的分子、分母多项式的系数,若a=1,此时表示FIR滤波器,否则就是IIR滤波器。

该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放入向量y。

4.函数zearos

函数的一种调用格式为:

B=zeros(n)

返回一个n*n的矩阵,其元素都为0,如果参数n不是一个标量就会报错。

函数的另一种调用格式为:

B=zeros(m,n)或B=zeros([mn])

返回一个m*n的零矩阵。

函数的另一种调用格式为:

B=zeros(m,n,p,...)或B=zeros([mnp...])

返回一个m*n*p*...的零矩阵。

注意:

参数m,n,p都是非负整数,负整数都会看成0。

4.2实验程序

4.2.1原始信号分析

读取一段语音信号,画出其时域波形图,用fft对语音信号进行傅里叶变换,并画出其相位与幅值。

(1)实验程序:

[x,fs]=audioread('d:

\v4.mp3');

x=x(:

1);

n1=0:

2000;

N=size(x,1);

figure

(1);

subplot(2,1,1);

plot(x);

title('原始信号的时域波形');

Y=fft(x);

subplot(2,1,2);

plot(n1(1:

1000),Y(1:

1000));

title('原始信号的频谱图');

figure

(2);

subplot(2,1,1);

plot(abs(Y));

title('幅值');

subplot(2,1,2);

plot(angle(Y));

title('相位');

sound(x,fs);

(2)实验结果

4.2.2回声信号的产生

对原始信号取出单声道信号,并用filter函数对其进行衰减和延时,得到回声信号。

1、FIR滤波器产生一次回声

(1)实验程序:

[x,fs]=audioread('d:

\v4.mp3');

R=5000;

n1=0:

2000;

num=[1,zeros(1,R-1),0.8];

den=[1];

y=filter(num,den,x);

figure

(1);

subplot(2,1,1);

plot(y);

title('单回声后信号时域波形');

y1=fft(y);

subplot(2,1,2);

plot(n1(1:

1000),y1(1:

1000));

title('单回声后信号频谱图');

figure

(2);

subplot(2,1,1);

plot(abs(y1));

title('单回声后信号幅值');

subplot(2,1,2);

plot(angle(y1));

title('单回声后信号相频响应');

sound(y,fs);

(2)实验结果:

2.IIR滤波器产生多次回声:

yy2=filter(1,[1,zeros(1,80000/(N+1)),0.7],[b’,zeros(1,40000)]);通过改变的N的数值可设置回声的次数,

(1)实验程序:

[x,fs]=audioread('d:

\v4.mp3');

N=3;

a=0.8;

R=5000;

n1=0:

2000;

num=[1,zeros(1,N*R-1),0.8^N];

den=[1,zeros(1,N*R-1),0.8];

z=filter(num,den,x);

figure

(1);

subplot(2,1,1);

plot(z);

title('多回声后信号时域波形');

z1=fft(z);

subplot(2,1,2);

plot(n1(1:

1000),z1(1:

1000));

title('多回声后信号频谱图');

figure

(2);

subplot(2,1,1);

plot(abs(z1));

title('多回声后信号幅频响应');

subplot(2,1,2);

plot(angle(z1));

title('多回声后信号相频响应');

sound(z,fs);

(2)实验结果:

4.2.3混响的产生

在整理资料时发现,其中对原信号的读取位数大小和FFT变换的点数都会影响其频谱图。

(1)实验程序:

[x,fs]=audioread('d:

\v4.mp3');

N1=3;

a1=0.6;

R1=2000;

n1=0:

2000;

num1=[1,zeros(1,N1*R1-1),0.6^N1];

den1=[1,zeros(1,R1-1),0.6];

p1=filter(num1,den1,x);

N2=4;

a2=0.7;

R2=2000;

num2=[1,zeros(1,N2*R2-1),0.7^N2];

den2=[1,zeros(1,R2-1),0.7];

p2=filter(num2,den2,x);

p3=p1+p2;

a8=0.8;

R8=1100;

num11=[0.8,zeros(1,R8-1),1];

den11=[1,zeros(1,R8-1),0.8];

p4=filter(num11,den11,p3);

y=x+p4;

[h1,w1]=freqz(num1,den1);

[h2,w2]=freqz(num2,den2);

[h3,w3]=freqz(num11,den11);

H=(h1+h2).*h3;

figure

(1);

subplot(2,1,1);

plot(y);

title('混响时域波形');

y1=fft(y);

subplot(2,1,2);

plot(n1(1:

1000),y1(1:

1000));

title('混响频谱图');

figure

(2)

subplot(2,1,1);

H1=fft(y);

plot(abs(H1));

title('混响信号幅频响应');

subplot(2,1,2);

plot(angle(H1));

title('混响信号相频响应');

sound(y,fs);

(2)实验结果:

4.2.4和声的产生

和声是对原始信号进行不同程度的衰减和延时,最后这些信号和原信号进行叠加产生的:

(1)实验程序:

[x,fs]=audioread('d:

\v4.mp3');

x1=x(1:

526463);

N=length(x);

fori=1:

N;

w1=2*pi;

a1=0.6;

R1=800;

D1=R1/2*(1-cos(w1*i)/fs);

DC1=ceil(D1);

if(D1<=(i-1));

y1(i)=a1*(x(i-DC1)+(x(i-DC1+1)-x(i-DC1))*(DC1-D1));

end

end

N=length(x);

fori=1:

N;

w2=2*2*pi;

a2=0.5;

R2=600;

D2=R2/2*(1-cos(w2*i)/fs);

DC2=ceil(D2);

if(D2<=(i-1));

y2(i)=a2*(x(i-DC2)+(x(i-DC2+1)-x(i-DC2))*(DC2-D2));

end

end

fori=1:

N;

w3=2*3*pi;

a3=0.7;

R3=750;

D3=R3/2*(1-cos(w3*i)/fs);

DC3=ceil(D3);

if(D3<=(i-1));

y3(i)=a3*(x(i-DC3)+(x(i-DC3+1)-x(i-DC3))*(DC3-D3));

end

end

y4=x1+y2+y3;

sound(y4,fs);

figure

(1)

subplot(2,1,1);

Y=fft(y4);

plot(abs(Y));

title('和声幅频');

subplot(2,1,2);

plot(angle(Y));

title('和声相频');

sound(y4,fs);

(2)实验结果:

4.4.5简易的界面设计

4.5实验结果分析

通过实验得到的频谱图分析发现,多重回声效果叫单回声效果更加明显,如果延时调试得当,会得到更好的回声效果,混响较前两者更加明显,和声的效果由于叠加的声音较少导致效果不明显,但可以分辨出和声效果与会声效果的区别。

(完整程序代码见附录一)

五、设计总结

本次DSP课程设计,我主要做的是混响部分的设计。

通过编程与GUI界面的实现,完成回声信号产生器的基本功能与混响、和声功能的实现。

通过实验得到的频谱图分析发现,多重回声效果较单回声效果更加明显,如果延时得当,会得到很好的回声效果,产生类似在演唱会现场的效果,自然混响的效果则较前两个更加明显,和声的效果由于人数较少不太明显,但能确实的分辨出和声效果与回声效果的区别。

5.1课程设计的可取之处:

1.回声信号产生器可设置N的值自主选择产生多少次的回声,并且可设置回声的延时时长。

2.可对声音信号进行不同的混响及和音效果。

5.2课程设计的不足

1.回声信号采用点增多,执行程序时间过长,在GUI演示时已经体现出来

2.GUI界面插入背景图片会影响下静态文本框界面,因而造成不太美观

5.3编程中遇到的问题

1.之前并没有接触过matlab这个软件,所以从软件的安装到后期的编程都学习了很多的知识,包括从图书馆借的书和利用网络资源进行学习。

2.分析声音信号时,要注意选择单声道信号进行分析。

由于起初并没有进行选择,出现了很多问题。

至于单声道问题,我觉得应该是对信号的收集是单边调制的缘故。

3.在读取语音信号程序中,用”[x,fs,bits]=wavread(‘y’,[140000])”读取出现音频读不全的现象,后来改动数值40000读取的声音更多,但后来又读取较长音频文件时发现仍不能完全读出,所以后来就缺省采样位数[140000],最终实现了声音的完美呈现。

六、收获与感受

通过实验,是我对MATLAB有了一个基础的了解,在学习MATLAB编程中需要很多的参考书,要尽量多的熟悉matlab自带的函数及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。

这一点对程序非常有帮助,可以使程序简单,运行效率高,可以节省很多时间。

本次课设中用了很多MATLAB自带的函数,使程序变得很简单而有效。

 

在编程的过程中学习,程序需要什么知识再去补充,编程是一点一点积累的,所以需要做一些随手笔记什么的。

课题需要什么函数,需要什么模块就应该去着重看那个知识点,就应该一步一步学,如果太急于把所有东西都学到,也是不好的,更是实现不了的。

 

总之,通过这次学习,我了解了一下这个软件总体的功能,以及通过自己编写一些代码也学到了一些用法和知识。

我相信通过不时的积累,我会慢慢的学会使用MATLAB。

七、参考文献

[1]《数字信号处理》,朱军,合肥工业大学出版社

[2]《MATLAB6.5及其在信号处理中的应用》王宏,清华大学出版社,2004

[3]《数字信号处理教程[M]》,程佩青,清华大学出版社,2002

 

附录一

functionvarargout=cy(varargin)

%CYMATLABcodeforcy.fig

%CY,byitself,createsanewCYorraisestheexisting

%singleton*.

%

%H=CYreturnsthehandletoanewCYorthehandleto

%theexistingsingleton*.

%

%CY('CALLBACK',hObject,eventData,handles,...)callsthelocal

%functionnamedCALLBACKinCY.Mwiththegiveninputarguments.

%

%CY('Property','Value',...)createsanewCYorraisesthe

%existingsingleton*.Startingfromtheleft,propertyvaluepairsare

%appliedtotheGUIbeforecy_OpeningFcngetscalled.An

%unrecognizedpropertynameorinvalidvaluemakespropertyapplication

%stop.Allinputsarepassedtocy_OpeningFcnviavarargin.

%

%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone

%instancetorun(singleton)".

%

%Seealso:

GUIDE,GUIDATA,GUIHANDLES

%Edittheabovetexttomodifytheresponsetohelpcy

%LastModifiedbyGUIDEv2.521-Dec-201520:

51:

55

%Begininitializationcode-DONOTEDIT

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@cy_OpeningFcn,...

'gui_OutputFcn',@cy_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(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

%---Executesjustbeforecyismadevisible.

functioncy_OpeningFcn(hObject,eventdata,handles,varargin)

%Thisfunctionhasnooutputargs,seeOutputFcn.

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

%varargincommandlineargumentstocy(seeVARARGIN)

%Choosedefaultcommandlineoutputforcy

handles.output=hObject;

%Updatehandlesstructure

guidata(hObject,handles);

%UIWAITmakescywaitforuserresponse(seeUIRESUME)

%uiwait(handles.figure1);

%---Outputsfromthisfunctionarereturnedtothecommandline.

functionvarargout=cy_OutputFcn(hObject,eventdata,handles)

%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);

%hObjecthandletofigure

%eventdatareserved-tobedefinedinafutureversionofMATLAB

%handlesstructurewithhandlesanduserdata(seeGUIDATA)

%Getdefaultcommandlineoutputfromhandlesstructure

varargout{1}=handles.output;

%---Executesonbuttonpressinpushbutton1.

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

当前位置:首页 > 工程科技 > 电子电路

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

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