基于MATLAB的语音信号的特技处理时延和混响Word文档下载推荐.docx
《基于MATLAB的语音信号的特技处理时延和混响Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的语音信号的特技处理时延和混响Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
整理所有任务资料,答辩。
6
2011.6.24
撰写课程设计报告。
摘要(中文)
数字信号处理(DigitalSignalProcessing)技术,从20世纪60年代以来,随着计算机科学和信息科学发展,数字处理技术应运而生并得以快速发展。
语言是人们进行信息沟通的主要方式之一,它具有直接、自然、方便等优点。
语音则是语言的物理层表达方式。
语音处理主要是对语音进行机器处理,以达到传输、自动识别、机器理解等目的。
进行了语音处理过程的滤波、采样、傅立叶变换和谱包络提取的算法实现研究,讨论了在算法的DSP实现方法,
Matlab语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,Matlab功能强大、简单易学、编程效率高。
特别是Matlab还具有信号分析工具箱,不需具备很强的编程能力,就可以很方便地进行信号分析、处理和设计
关键词语音信号处理MATLAB语言滤波器频谱分析图形用户界面
摘要(英文)
DigitalSignalProcessing(DigitalSignalProcessing)technologyfromthe1960s,alongwiththedevelopmentofcomputerscienceandinformationscience,digitalprocessingtechniqueshaveemergedandtorapiddevelopment.Languageisthecommunicationofpeopletooneofthemain,ithasadirect,natural,andeasy.Voiceisthelanguageofthephysicallayerofexpression.Voiceprocessingmachinesmainlyforvoiceprocessing,inordertoachievetransmission,automaticrecognition,machineunderstandingofotherpurposes.Forvoiceprocessingfiltering,sampling,Fouriertransformandspectralenvelopeextractionalgorithmresearch,discussestheimplementationofDSPalgorithms,
Matlablanguageisawidelyusedengineeringcalculationandnumericalanalysisofthefieldofnewhigh-levellanguage,Matlabpowerful,easytolearn,programmingandhighefficiency.Matlabalsohasaparticularsignalanalysistoolbox,neednothavestrongprogrammingskills,youcaneasilycarryoutsignalanalysis,processinganddesign
KeywordsSpeechsignalprocessingSpectralanalysisofMATLABFilterSpectrumanalysisGraphicalUserInterface
1引言
数字信号处理主要是研究用数字或符号序列表示和处理信号。
处理的目的可以是削弱信号中的多余内容,滤除混杂的噪声和干扰,或者是将信号变换为容易分析和识别的形式,便于估计和选择它的特征参数。
声音信号是一维连续信号,而计算机只能处理离散信号。
为了从离散信号还原连续信号,根据采样定理,可以确定采样频率的最小值。
wav文件是一种数字声音文件格式,本课程设计基于Matlab分析了wav声音文件频谱与声音的关系。
通过采集个人的一段声音进行频谱分析等处理,然后设计数字滤波器处理这个原始声音的wav文件,并比较滤波以后输出声音信号与原声音信号的异同。
基于MATLAB的语音信号特技处理,其实质是针对于不同的滤波器性能的分析与比较。
对于滤波器的设计可以使用MATLAB中自带的工具,也可以通过编程或直接利用MATLAB中的函数库来实现。
2课程设计题目描述和要求
2.1设计内容
(1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样。
(2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图。
(3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较。
(4)设计几种特殊类型的滤波器:
单回声滤波器,多重回声滤波器,无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。
(5)用自己设计的滤波器对采集的语音信号进行滤波。
(6)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
(7)回放语音信号。
2.2设计要求
(1)熟悉离散信号和系统的时域特性。
(2)熟悉语音信号的特点。
(3)掌握数字信号处理的基本概念,基本理论和基本方法。
(4)掌握序列快速傅里叶变换方法。
(5)学会MATLAB的使用,掌握MATLAB的程序设计方法。
(6)掌握MATLAB设计各种数字滤波器的方法和对信号进行滤波的方法
3课程设计报告内容
3.1总体设计
3.1.1设计的总体方案图
3.1.2程序流程图
3.2详细设计过程
3.2.1混响与延时
混响效果主要是用于增加音源的融合感。
自然音源的延时声阵列非常密集、复杂,所以模拟混响效果的程序也复杂多变。
常见参数有以下几种:
(1)混响时间:
能逼真的模拟自然混响的数码混响器上都有一套复杂的程序,其上虽然有很多技术参数可调,然而对这些技术参数的调整都不会比原有的效果更为自然,尤其是混响时间。
(2)高频滚降:
此项参数用于模拟自然混响当中,空气对高频的吸收效应,以产生较为自然的混响效果。
一般高频混降的可调范围为0.1~1.0。
此值较高时,混响效果也较接近自然混响;
此值较低时,混响效果则较清澈。
(3)扩散度:
此项参数可调整混响声阵密度的增长速度,其可调范围为0~10,其值较高时,混响效果比较丰厚、温暖;
其值较低时,混响效果则较空旷、冷僻。
(4)预延时:
自然混响声阵的建立都会延迟一段时间,预延时即为模拟次效应而设置。
(5)声阵密度:
此项参数可调整声阵的密度,其值较高时,混响效果较为温暖,但有明显的声染色;
其值较低时,混响效果较深邃,切声染色也较弱。
(6)频率调制:
这是一项技术性的参数,因为电子混响的声阵密度比自然混响稀疏,为了使混响的声音比较平滑、连贯,需要对混响声阵列的延时时间进行调制。
此项技术可以有效的消除延时声阵列的段裂声,可以增加混响声的柔和感。
(7)调治深度:
指上述调频电路的调治深度。
延时就是将音源延迟一段时间后,再欲播放的效果处理。
依其延迟时间的不同,可分别产生合唱、镶边、回音等效果。
当延迟时间在3~35ms之间时人耳感觉不到滞后音的存在,并且他与原音源叠加后,会因其相位干涉而产生"
梳状滤波"
效应,这就是镶边效果。
如果延迟时间在50ms以上时,其延迟音就清晰可辨,此时的处理效果才是回音。
回音处理一般都是用于产生简单的混响效果。
延时、合唱、镶边、回音等效果的可调参数都差不多,具体有以下几项:
延时时间(Dly),即主延时电路的延时时间调整。
反馈增益(FBGain),即延时反馈的增益控制。
反馈高频比(HiRatio),即反馈回路上的高频衰减控制。
调制频率(Freq),指主延时的调频周期。
调制深度(Depth),指上述调频电路的调制深度。
高频增益(HF),指高频均衡控制。
预延时(IniDly),指主延时电路预延时时间调整。
均衡频率(EQF),这里的频率均衡用于音色调整,此为均衡的中点频率选择。
由于延时产生的效果都比较复杂多变,如果不是效果处理专家,建议使用设备提供的预置参数,因为这些预置参数给出的处理效果一般都比较好。
3.2.2离散傅立叶变换
在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅立叶变换和逆变换。
下面介绍这些函数。
函数FFT用于序列快速傅立叶变换。
函数的一种调用格式为
y=fft(x)
其中,x是序列,y是序列的FFT,x可以为一向量或矩阵,若x为一向量,y是x的FFT。
且和x相同长度。
若x为一矩阵,则y是对矩阵的每一列向量进行FFT。
如果x长度是2的幂次方,函数fft执行高速基-2FFT算法;
否则fft执行一种混合基的离散傅立叶变换算法,计算速度较慢。
函数FFT的另一种调用格式为
y=fft(x,N)
式中,x,y意义同前,N为正整数。
函数执行N点的FFT。
若x为向量且长度小于N,则函数将x补零至长度N。
若向量x的长度大于N,则函数截短x使之长度为N。
若x为矩阵,按相同方法对x进行处理。
经函数fft求得的序列y一般是复序列,通常要求其幅值和相位。
MATLAB提供求复数的幅值和相位函数:
abs,angle,这些函数一般和FFT同时使用。
用MATLAB工具箱函数fft进行频谱分析时需注意:
(1)
函数fft返回值y的数据结构对称性。
(2)
频率计算。
(3)
作FFT分析时,幅值大小与FFT选择点数有关,但不影响分析结果。
3.2.3滤波器设计
单回声滤波器的系统函数:
H(z)=
<
无限个回声滤波器的系统函数:
全通结构的混响器的系统函数:
1
函数filter
函数filter的调用格式为
y=filter(b,a,x)
该格式采用数字滤波器对数据进行滤波,既可以用于IIR滤波器,也可以用于FIR滤波器。
其中向量b和a分别表示系统函数的分子、分母多项式的系数,若a=1,此时表示FIR滤波器,否则就是IIR滤波器。
该函数是利用给出的向量b和a,对x中的数据进行滤波,结果放入向量y。
3.2.4图形用户界面设计
图形用户界面GUI(GraphicsUserInterface)是由各种图形对象,如图形窗口、图轴、菜单、按钮、文本框等构建的用户界面,是人机交流信息的工具和方法。
GUI设计即可以基本的MATLAB程序设计为主,也可以鼠标为主利用GUIDE工具进行设计。
GUIDE(GraphicsUserInterfaceDesignEnviron2ment)是一个专用于GUI程序设计的快速开发环境,使用者通过鼠标就能迅速地产生各种GUI控件,并随心所欲地改变它们的外形、大小及颜色等,从而帮助用户方便地设计出各种符合要求的图形用户界面。
调用GUIDE的方法有2种,在MATLAB命令窗口中输入guide命令,或在MATLAB主菜单中点击File→New→GUI即可打开一个可编辑的新窗口。
在GUIDE设计环境中,需要用到的工具有属性编辑器、控件布置编辑器、菜单编辑器、对象浏览器、网格标尺设置编辑器以及GUI应用属性设置编辑器等。
GUI设计面板是GUI设计工具应用的平台,面板上部提供了菜单和常用工具按钮,左边提供了多种GUI控件,如按钮、单选按钮、复选框、文本框等。
进行GUI设计时,首先单击GUI面板左边所需的控件,然后在右边的图形界面编辑区中再次单击某一恰当的位置,这时将在该位置上为图形界面添加一相应的控件,接下来,通过属性编辑器和对齐编辑器对各控件设置相关属性和进行界面布置,以完善界面功能。
4.设计的步骤及代码编写
4.1从Windows读取1s的语音信号
[x,fs,bits]=wavread('
bb.wav'
[50050000]);
用于读取语音,采样值放在向量x中,fs表示采样频率(Hz),bits表示采样位数。
[50050000]表示读取从501点到50000点的值(若只有一个N的点则表示读取前N点的采样值)。
4.2采样后语音信号的时域波形和频谱
x=x(:
1);
%我这里假设的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,
n1=0:
2000;
N=size(x,1);
axes(handles.axes3);
%GUI句柄将图形与axes3联系起来
plot(x);
title('
采样后语音信号的时域波形'
'
fontname'
宋体'
);
Y=fft(x,2001);
axes(handles.axes4);
plot(n1(1:
1000),Y(1:
1000));
采样后语音信号的频谱图'
4.3对采样后的信号延时100和混响
z=[zeros(100,1);
x];
plot(z);
延时后的时域图'
Z=fft(z,2001);
1000),Z(1:
延时后的频谱图'
x=[x;
zeros(100,1)];
y1=x+z;
plot(y1);
混响的时域图'
Y1=fft(y1,2001);
1000),Y1(1:
混响的频谱图'
4.4单回声滤波器
sound(y,fs,bits);
用于对声音的回放。
向量y则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号。
a=0.5;
y2=x+z*0.5;
plot(y2);
单回声滤时域图'
Y2=fft(y2,2001);
1000),Y2(1:
单回声滤波器频谱图'
sound(y2,fs,bits);
4.5无限个回声滤波器
Bz=[0,0,0,0,0,0,0,0,0,0,1];
Az=[1,0,0,0,0,0,0,0,0,0,-a];
yy1=filter(Bz,Az,x);
plot(yy1);
无限个回声滤波器时域波形'
YY1=fft(yy1,2001);
1000),YY1(1:
无限个回声滤波器频谱图'
sound(yy1,fs,bits);
4.6全通结构的混响器
Bz1=[a,0,0,0,0,0,0,0,0,0,1];
Az1=[1,0,0,0,0,0,0,0,0,0,a];
yy2=filter(Bz1,Az1,x);
plot(yy2);
全通应的时域图'
)
YY2=fft(yy2,2001);
1000),YY2(1:
全通应的频谱图'
sound(yy2,fs,bits);
1000),YZ(1:
5.调试分析
1设计的用户界面运行程序
2语音信号经过采样操作
图4采样后信号的时域和频域图
3采样后信号进行延时操作
图5延时后信号的时域和频域图
延时:
从时域图出延时是让原来的波形向右移动。
从频谱图看在刚开始延时前曲线往上,延时后曲线往下,
4采样后语音信号经混响操作
图6采样后信号的时域和频域图
混响:
在时域图看出来在前30Hz没有变化,混响之后幅度都变化了并且在频率有了延长了。
在频谱图中在刚开始延时前曲线往上,混响后的有跳动、下降、上升。
也在1000Hz幅度有变化,混响大概在2000Hz很密集,而混响前的很稀疏。
相反在大概3000Hz混响的很稀疏,混响前的很密集。
5语音信号通过单回声滤波器
图7单回声滤波后信号的时域和频域图
时域上形状大致相同,幅度有微小变化。
频谱上滤波前在开始先上跳变,再下降,在上升。
而滤波后先上跳变,后面的下降和上升波动很大,滤波前的密集的长度比滤波后的短。
6语音信号通过无限回声滤波器
图8无限回声滤波后信号的时域和频域图
时域上滤波前的幅度比滤波后的数值大,形状大体相似,在1800以后滤波前有较小的波动,滤波后只有一次的波动。
在频谱上在1000Hz以后幅度的变化趋势是相反的,滤波前的幅度大体上比滤波后的高,在5000Hz以后滤波前的波动比滤波后大。
7语音信号通过全通滤波器
图9全通滤波后信号的时域和频域图
时域上形状大致一样,滤波前的幅度比滤波后大,2000Hz左右滤波波动较小,滤波后的波动相比较大。
在频谱上滤波后有一条负值幅度很大的直线,其它的幅度都比滤波前的小,并且紧密的地方不同。
结果分析与体会
通过两周的课程设计对数字信号处理有了更进一步的熟悉,实际操作加深了对课本上的知识的理解。
本次课题是基于MATLAB的语音信号的特技处理,对语音信号进行延时、混响、滤波等操作。
通过上网搜索资料,查阅课本及课外书籍,动手设计滤波器、用户图形界面,采集语音,语音分析等工作,加强了对MATLAB程序的编写能力以及对数字信号处理的相关知识的理解。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,通过课程设计我们能够比较系统的了解理论知识,把理论和实践相结合,并且用到生活当中。
在做设计的过程中总会出现各种问题,在这种情况下我们都会努力寻求最佳路径解决问题,无形间提高了我们的动手,动脑能力,并且同学之间还能相互探讨问题,研究解决方案,增进大家的团队意识。
通过课程设计让我知道了,我们平时所学的知识如果不加以实践的话等于纸上谈兵。
课程设计主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种独立的意识。
我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把这门课学的扎实。
参考资料
1.邹彦,DSP原理及应用,第1版,电子工业出版社,2006;
2.张雄伟,DSP集成开发与应用实例,第1版,电子工业出版社,2002;
3.张洪涛等,数字信号处理,第一版,华中科技大学出版社,2007
4.彭启琮等,DSP技术的发展与应用,第二版,高等教育出版社,2007
5.杨述斌等,数字信号处理实践教程,第一版,华中科技大学出版社,2007
附录
functionvarargout=design100(varargin)
%DESIGN100M-filefordesign100.fig
%DESIGN100,byitself,createsanewDESIGN100orraisestheexisting
%singleton*.
%H=DESIGN100returnsthehandletoanewDESIGN100orthehandleto%theexistingsingleton*.
%DESIGN100('
CALLBACK'
hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinDESIGN100.Mwiththegiveninputarguments.
%
Property'
Value'
...)createsanewDESIGN100orraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforedesign100_OpeningFunctiongetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtodesign100_OpeningFcnviavarargin.
%*SeeGUIOptionsonGUIDE'
sToolsmenu.Choose"
GUIallowsonlyone
%instancetorun(singleton)"
.
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Copyright2002-2003TheMathWorks,Inc.
%Edittheabovetexttomodifytheresponsetohelpdesign100
%LastModifiedbyGUIDEv2.521-Jun-201119:
49:
33
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@design100_OpeningFcn,...
gui_OutputFcn'
@design100_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});