语音信号的延时和混响.docx
《语音信号的延时和混响.docx》由会员分享,可在线阅读,更多相关《语音信号的延时和混响.docx(20页珍藏版)》请在冰豆网上搜索。
![语音信号的延时和混响.docx](https://file1.bdocx.com/fileroot1/2023-2/24/a7fe9758-b165-4c29-8778-67310419312a/a7fe9758-b165-4c29-8778-67310419312a1.gif)
语音信号的延时和混响
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
声音的延时和混响仿真
初始条件:
MATLAB软件,windows下的录音机。
要求完成的主要任务:
(1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样。
(2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图。
(3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较。
(4)设计几种特殊类型的滤波器:
单回声滤波器,多重回声滤波器,无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。
(5)用自己设计的滤波器对采集的语音信号进行滤波。
(6)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
(7)回放语音信号。
参考书:
1.《电子线路设计·实验·测试》第三版,谢自美主编,华中科技大学出版社
2.《数字信号处理的原理和实现》第二版,刘泉主编,武汉理工大学出版社
时间安排:
第18周理论讲解。
第19周理论设计、实验室安装调试。
地点:
鉴主13楼通信工程综合实验室、鉴主15楼通信工程实验室(3)。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
数字信号处理是将信号以数字方式表示并处理的理论和技术,而MATLAB则是一款功能强大的集数学运算和仿真为一体的软件。
这次课设就是利用MATLAB软件对声音信号进行数字处理的过程。
当然,这次主要运用了软件强大的计算功能,尤其是软件自带的一些比较复杂的函数的调用,比方说:
快速傅里叶变换。
同时也利用软件的仿真功能,设计各种滤波器,对读入的声音信号进行滤波处理。
总体上来讲,通过课设学习了数字信号处理的相关理论知识,熟悉了软件的使用和滤波器的设计,了解了语音信号的特点。
关键词:
数字信号处理,快速傅里叶变换,延时与混响,滤波器。
Abstract
Digitalsignalprocessingiswillsignaltodigitalwaysaidthetheoryandtechniqueoftheandprocessing,andMATLABisapowerfulmathematicaloperationandsimulationofthesetforoneofthesoftware.ThisclasssetistheuseofthesoftwareMATLABvoicesignaldigitalprocessingprocess.Ofcourse,themainusingsoftwarepowerfulcomputingfunctions,especiallysoftwarebringingsomecomplexfunctioncall,forexample:
fastFouriertransformation.Atthesametimealsousingthesoftwaresimulationfunction,designoffilter,toreadinavoicesignalfilteringprocessing.Ingeneral,throughtheclasssetstudythedigitalsignalprocessingrelatedtheoryknowledge,befamiliarwiththeuseofthesoftwareandthedesignoffilter,understandthecharacteristicsofthespeechsignal.
Keywords:
digitalsignalprocessing,fastFouriertransform,delayandreverb,filter.
1任务与要求
1.1课程设计的任务
这次综合课程设计,是利用MATLAB软件对声音信号进行一系列的处理。
主要要做的任务有一下几点:
(1)利用Windows下的录音机或其他软件,录制一段自己的语音信号,时间控制在1s左右,并对录制的信号进行采样。
(2)语音信号的频谱分析,画出采样后语音信号的时域波形和频谱图。
(3)将信号加入延时和混响,再分析其频谱,并与原始信号频谱进行比较。
(4)设计几种特殊类型的滤波器:
单回声滤波器,多重回声滤波器,无限个回声滤波器,全通结构的混响器,并画出滤波器的频域响应。
(5)用自己设计的滤波器对采集的语音信号进行滤波。
(6)分析得到信号的频谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。
(7)回放语音信号。
1.2课程设计的要求
这次课程设计是为了培养我们的学习能力和处理能力,所以对这次的课设有如下的几点要求:
(1)熟悉离散信号和系统的时域特性。
(2)熟悉语音信号的特点。
(3)掌握数字信号处理的基本概念,基本理论和基本方法。
(4)掌握序列快速傅里叶变换方法。
(5)学会MATLAB的使用,掌握MATLAB的程序设计方法。
(6)掌握MATLAB设计各种数字滤波器的方法和对信号进行滤波的方法。
2原理分析
2.1原始信号
用windows的录音机录制一段我的语音信号,要用MATLAB对其进行处理,首先要读入这段语音信号,可以调用软件自带的wavread()函数,找到正确的文件路径就行,但是这个命令只能对*.wav文件处理,所以如果不是的话,要转化格式。
回放语音信号,也是可以直接调用软件自带的sound()函数,它的参数的选择和读入函数是一样的,不过随着采样频率的不同,读出来的效果差别很大。
用软件的绘图工具绘制语音信号的时域和频域的图形,时域的图形和简单就是把读入的信号按时间和音量的大小绘制一张图即可,但是频域的图形,就要先对语音信号进行傅里叶变换才可以得到频谱图,不过考虑到MATLAB软件自带的快速傅里叶变换函数,所以就直接调用fft()就行,当然还用到了fftshift()函数对频谱的中心进行搬移。
2.2延时和混响
延时的处理就是利用向量(矩阵)的补零,然后使得有效的数据被押后,显示的时候,就会有延时效果,因为开始的零数据没有意义,即没有有用信息,然后零数据的多少,由需要被延时的时间决定。
混响的处理就是利用向量(矩阵)的加法运算,使得两个不同的信号进行相互叠加,即我们说的混响效果。
首先是产生两个不同的信号矩阵,一个就用延时后的信号,另一个处理的方式差不多,就是利用补零方法,不过补零的措施不同于延时处理,而是在原始信号的后面补零,其实没有什么实质上的意义,因为不能改变什么,但是由于矩阵的加法要求相加的矩阵的形状一样,即元素的个数一样,所以补零。
2.3滤波器设计
滤波器的设计按要求有四种,还要自己设计一种。
考虑到实际生活中的回声类型,比较接近IIR滤波器,即下面公式:
Y(n)=x(n)+a1*y(n-d1)+a2*y(n-d2)+a3*y(n-d3)+a4*y(n-d4)+a5*y(n-d5)+a6*y(n-d6)+a7*y(n-d7)+a8*y(n-d8)+a9*y(n-d9)+10*y(n-d10)+a11*y(n-d11)-----------公式1
不过,原理大都是一致的,在MATLAB中,都是调用filter()函数,但是,最最重要的是确定这个函数的两个主要参数a和b。
确定了这两个参数就可以进行滤波了,所以只用设计参数a和b,a为传递函数分母系数向量,b为传递函数分子系数向量。
单回声滤波器的设计就是取a和b向量分别为[1,zeros(1,4410),0.2]和全1。
然后进行滤波就可以了。
多重回声滤波器,无限回声滤波器以及全通结构的滤波器的设计都只是改变a和b向量的参数而已。
多重回声滤波器的a和b向量取值为[1,1,1,1,1,1,1,1,1,1,1]和[1,0,0,0,0,0,0,0,0,0,0.2],正好和单回声滤波器的a和b取值相反。
无限回声滤波器的a和b取值为[0,0,0,0,0,0,0,0,0,0,1]和[1,0,0,0,0,0,0,0,0,0,-0.5]。
还有全通结构的a和b的取值为[0.5,0,0,0,0,0,0,0,0,0,1]和[1,0,0,0,0,0,0,0,0,0,0.5]。
我自己设计的滤波器是一个IIR低通滤波器,是在巴特沃斯滤波器的基础上设计的,参数的设计没有实际的意义,比方说采样频率ft和通带截止频率fp以及阻带截止频率fs和通带,阻带的衰减参数都是随便设定的,只是为了检测一下设计出来的滤波器的性能是否可以达到。
首先把几个自己设定的频率归一化,然后计算巴特沃斯滤波器的参数wp和ws,再利用函数的调用,和参数以及衰减的要求,把滤波器的阶数和参数wc求出来,最后调用butter()函数,就可以求出滤波器的参数a和b向量了,不过要进行双线性变换下,使得模拟的低通滤波器变成数字的低通滤波器,当然,也要相应把模拟域下的频率变成数字域下的频率,最后用设计好的滤波器滤波,再绘制图形即可。
3结果分析
3.1原始信号
对用windows的录音机录制的语音信号进行采样后,用MATLAB对其进行处理,利用其绘图工具,绘制语音信号的时域和频域波形图,图形如下:
图1原始信号的时域和频域图
从图形可以看出,我的语音信号的频率主要集中在低频段,分布呈金字塔状,但是接近零频率的附近的频率成分也很少。
分析其他同学的语音信号,可以得出类似的结论,只是男生和女生的频谱图看上去略有点差别,即分布不是那么有规则,很明显的锯齿状。
3.2延时和混响的信号
延时的处理和混响的处理,处理后的结果的时域和频域的图形,如下图所示:
从原始信号和处理后的延时图可以看出,延时并没有真正意义上改变语音信号,只是把信号的时域推后了,频谱图也可以看出,只是频谱的位置变化了,而且是线性搬移的。
从原始信号和处理后的混响的图可以看出,混响改变了语音信号的时域特性,音量有叠加的成分,其频谱也有改变,从图可见,混响的低频段呈明显的凹状分布,说明零频段的频率成分在语音信号中占得比例非常少,本来看不出来,但是混响使得频谱相同部分叠加了,就显得很明显了。
图2延时的时域和频域
图3混响的时域
图4混响的频域
3.3滤波器的滤波
按要求设计五类滤波器,并用这五类滤波器分别进行滤波,滤波的结果如下图:
从单回声滤波器的处理图可以看出,对原始语音信号的改变并不是很明显,只是频谱上可以发现低频段的细微变化,时域上几乎没有改变,所以回放语音信号基本上是听不出差别的。
多重回声和无限回声滤波器的处理来看,就可以明显看到对时域和频域的改变,不过如果是人去听回放的语音信号的话,还是听不出有什么特别的差别,只是会比较舒服,圆润,因为从频谱上可以看出来,语音信号的频谱变得均匀了一些,所以会有这种效果。
全通结构的滤波器的处理来看,对时域的改变还是比较明显的,但是从频谱的角度来说,他的效果和无限回声滤波器没有本质上的差别,或者说两者的目的是一样的,所以看起来很相似,甚至相近。
至于我自己设计的滤波器,由于只是截取我录制的语音的一个狭窄的频段进行滤波,所以看起来变化很大,其实是和前面几个滤波器的效果大同小异,没有什么本质上的差别,只是频带变小,如果把前面几个的滤波的图放大到这一频带段上来看,还是比较接近的,因为原理都是简单的滤波过程。
图5单回声滤波器时域波形
图6单回声滤波器频域波形
图7多重回声滤波器时域波形
图8多重回声滤波器频域波形
图9无限回声滤波器时域波形
图10无限回声滤波器频域波形
图11全通结构的混响器时域波形
图12全通结构的混响器频域波形
图13自己设计的IIR滤波器的波形
4心得体会
在这次综合课程设计中,首先要感谢我的室友把电脑借给我,让我不用每天去机房调试程序和写报告。
当然,这次课程设计的成功,很大方面都要归功于网络上的资料和我的课本,但是最该感谢的毫无疑问是我自己的努力,因为很多的程序网上是给出来了,但是看懂是另外一回事,而且要把它变成自己的就更加靠自己了。
同学问我要了我搜索到的程序,我直接就给他了,因为我觉得程序不是最主要的,最主要的是自己学会什么,他看懂了我没看懂的,就是比我多学了点东西,再教会我,岂不是更好。
做课程设计是为了加深我们对平时学习的理论知识的理解,在理论和实验教学基础上进一步巩固所学基本理论和提高应用所学知识并加以综合应用的能力,培养学生将所学知识应用于实际的思想,提高分析和解决问题的能力,增强学生的综合能力,开发学生的智力,激发学生的创新精神,为毕业设计和以后工作打下必要基础。
这次为期数日的综合课程设计,使我们弄明白了不少的知识,也学到了不少的东西。
首先我们认识到了MATLAB工具箱的强大的功能和方便的操控性,通过软件可以使设计简化,运算简单,而且可以使设计者腾出时间来把重点放在一些困难概念的理解和掌握上。
MATLAB的功能很强大,可用于电子,通信,图像等领域的信号处理与系统设计。
要精通MATLAB并不是件很容易的事,这得花较多的时间来研究和分析。
通过使用软件,我们不仅加深了对书本知识的了解,还将理论与实际相结合,提高了自己实际思考问题、独立分析问题、冷静解决问题的能力,对数字信号处理这门课也更加充满了兴趣。
设计滤波器是数字信号处理中最为重要的应用之一,因此学好滤波器的设计及分析,对于我们大学生来说是十分重要的。
这次设计我们最大的收获是掌握了滤波器设计的步骤和方法,比如用到双线性变换法,可以在确定滤波器的系统函数后,用双线性变换公式带入而求得结果。
我自己设计的最后一个滤波器就是用这种方法做的。
还有就是学习过程中的不足,这主要体现在做课程设计的过程中,我们深深感觉到自身所学知识的有限,书本上没有提及的环节,我们基本都没有去研究过,做的过程有时突然间觉得有点茫然,虽然通过查阅可以解决问题,但还是浪费了许多时间,这一点是我们在以后的学习中必须加以改进的地方,同时在以后的学习过程中也要督促自己不断地完善自我,超越自我。
另外要提的一点,就是团队精神,在这次课程设计中我们遇到问题都是聚在一起讨论,一起思考、寻找解决问题的方法,讨论的过程也是互相学习互相促进的过程。
所谓”当局者迷,旁观者清”,有些问题自己写的是时候感觉没什么错误,偏偏运行的时候就是有错误,让队友帮忙看了一下,才发现其实是个很小的错误。
还有就是分工要明确,大家根据个人的优势分工,干起事情来才有效率。
所以说,团队精神是很重要的一点。
通过这次的课程设计,我们深深地体会到数字信号处理的有用性和重要性。
同时也发现了自身存在的不少不足之处,这给今后的学习敲响了警钟,也提供了经验教训。
做设计就如做人一样,都是要扎扎实实、一步一个脚印去做,天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难矣。
所以说我们做什么事都要认真、踏实地去做,无论成功与否,只要自己曾经努力过,就可以无悔了,而你在做事过程中的经历是任何人都不会有的宝贵的财富。
5参考文献
[1]谢自美.电子电路设计.实验.测试.武昌:
华中理工大学出版社,1994
[2]《数字信号处理的原理和实现》第二版,刘泉主编,武汉理工大学出版社
[3]《数字信号处理教程》程佩青,清华大学出版社
[4]《数字信号处理》丁玉美、高西全编著,西安电子科技大学出版社
[5]数理统计与MATLAB工程数据分析,王岩,隋思涟,王爱青,清华大学出版社
附录
附录
原始信号的处理程序:
[x1,fs,bits]=wavread('录音.wav');
sound(x1,fs,bits);
x1=x1(:
1);
subplot(2,2,1);
plot(x1);%做原始语音信号的时域图形
title('原始语音信号');gridon;
xlabel('时间n');ylabel('音量n');
y1=fft(x1);
subplot(2,2,2);
plot(abs(y1));%画出原始的语音信号的频谱图
title('原始信号的频谱');gridon;
延时和混响的处理程序:
z=[zeros(20000,1);x1];
sound(z,fs,bits);
subplot(2,2,3);
plot(z);
title('延时后的时域图');gridon;
Z=fft(z);
y1=fftshift(Z);
subplot(2,2,4);
plot(abs(Z));
title('延时后的频域图');gridon;
y2=[x1;zeros(20000,1)];
y3=y2+z;%混响后信号叠加(两个信号必须长度相等)
sound(y3,fs,bits);
figure;
plot(y3);
title('混响的时域图');gridon;
Y3=fft(y3);%混响信号fft变换
figure;
plot(abs(Y3));
title('混响后的频域图');gridon;
单回声滤波器滤波:
yy1=filter([1,zeros(1,20000),0.5],1,[x1',zeros(1,20000)]);
sound(yy1,fs,bits);
figure;
plot(yy1);
title('单回声滤波器时域波形');gridon
YY1=fft(yy1);
figure;
plot(abs(YY1));
title('单回声滤波器频谱图');gridon;
多重回声滤波器滤波:
yy1=filter(1,[1,zeros(1,20000),0.7],[x1',zeros(1,20000)]);
sound(yy1,fs,bits);
figure;
plot(yy1);
title('多重回声滤波器时域波形');gridon
YY1=fft(yy1);
figure;
plot(abs(YY1));
title('多重回声滤波器频谱图');gridon;
无限回声滤波器滤波:
a=0.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,x1);
sound(yy1,fs,bits);
figure;
plot(yy1);
title('无限个回声滤波器时域波形');gridon
YY1=fft(yy1);
figure;
plot(abs(YY1));
title('无限个回声滤波器频谱图');gridon;
全通结构混响器滤波:
a=0.5;
Bz=[a,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,x1);
sound(yy1,fs,bits);
figure;
plot(yy1);
title('全通结构的混响器的时域波形');gridon
YY1=fft(yy1);
figure;
plot(abs(YY1));
title('全通结构的混响器的频谱图');gridon;
自己设计的滤波器滤波:
y=wavread('录音.wav');
N=length(y);
subplot(2,2,1);
plot(y);
title('滤波前的时域波形');
Y=fft(y);
subplot(2,2,2);
plot(Y);
title('滤波前的频域波形');
axis([0,70000,0,1000]);
ft=8000;
fp=1000;
fs=1200;
wp=2*pi*fp/ft;
ws=2*pi*fs/ft;
fp=2*ft*tan(wp/2);
fs=2*ft*tan(ws/2);
[N,wc]=buttord(wp,ws,1,50,'s');
[b,a]=butter(N,wc,'s');
[bz,az]=bilinear(b,a,0.5);
[h,w]=freqz(bz,az);
zll=filter(bz,az,y);
mll=fft(zll);
subplot(2,2,3);
plot(zll,'g');
title('滤波后的时域波形');
subplot(2,2,4);
plot(abs(mll),'r');
title('滤波后的频域波形');
axis([0,70000,0,1000]);sound(zll);