语音信号地采集与频谱分析报告附代码.docx
《语音信号地采集与频谱分析报告附代码.docx》由会员分享,可在线阅读,更多相关《语音信号地采集与频谱分析报告附代码.docx(25页珍藏版)》请在冰豆网上搜索。
![语音信号地采集与频谱分析报告附代码.docx](https://file1.bdocx.com/fileroot1/2023-2/6/f740cbe3-9fd4-4b54-a843-317d439bb8e4/f740cbe3-9fd4-4b54-a843-317d439bb8e41.gif)
语音信号地采集与频谱分析报告附代码
《信号与系统》大作业
语音信号的采集与频谱分析
——基于Matlab的语音信号处理
学生某某:
学号:
专业班级:
电子工程学院卓越班
指导教师:
2015年6月22日
摘要
本设计用苹果手机自带的录音设备采集了原始语音,并导入了电脑转成wav格式,然后用MATLAB和Adobeaudition对其进展时域分析。
接着利用傅里叶变换进展了频域分析,绘制频谱图,再录制一段加上歌曲的伴奏的语音与原唱进展了比照分析,得出了我与歌星在频域上的差异。
本设计给信号加了两种噪声并通过观察加噪后的频谱和试听回放效果比拟加噪前后的差异,
最后,设计了FIR数字低通滤波器和带通滤波器,分析滤波前后的频谱。
再次试听回放效果,得出结论。
关键词:
语音、FFT、频谱图、噪声、滤波器
Abstract
ThisdesignisbasedonthegeneralfunctionofMatlabandAdobeeditiontodealwithAudiosignals.TheoriginalsignalsarecollectedbyiPhone’sbuilt-inrecordingequipment.
First,Iparethefilegeneratedbymyselfwiththatofthesamesongsangbyafamoussinger.Theemphasisisgenerallylaidonanalysingthedifferenceinfrequncydomain,buttimedomainwillbeincludedtoo.
Afterthat,twonoisesignalsareaddedtotheoriginalsignalrespectivelyandletthempassafiltertoanalyseit.Inthetwoprocessmentionedbefore,Imakeparisonbetweenthebeforeandafterfrequencydomain.
SamplingTheoremisthebaseofmydesign.Itisbysamplingwecangetdiscretesignalsfromtheoriginaloneanddrawtheimageintimedomain.Also,fastfouriertransformisemployed(FFT)togetthesignalsinfrequencydomain.Theayalysisoffrequencydomainisthehighlightofthisdesign.
Throughthisdesign,IcandeepenmyprehensionofprinciplesofaudiosignalsandIhavelearnthowtodealwithit.Throughmetwithmuchhindrance,Iimprovedmyskillsfinally.
Keywords:
audiosignal、TTT、noise、filter
1绪论
语音信号处理属于信息科学的一个重要分支,它是研究用数字信号处理技术对语音信号进展处理的一门新兴学科,同时又是综合性的多学科领域和涉与面很广的交叉学科,因此我们进展语言信号处理具有时代的意义。
学会运用MATLAB的信号处理功能,采集语音信号,并对语音信号进展滤波与变换处理,观察其时域和频域特性,加深对信号处理理论的理解,这为今后熟练使用MATLAB进展系统的分析仿真和设计奠定根底。
1.2课题的目的与要求
利用Matlab和Adobeaudition对语音信号进展数字信号处理和分析,要求采集语音信号后,在软件平台进展频谱分析;并对所采集的语音信号参加干扰噪声,对参加噪声的信号进展频谱分析,设计适宜的滤波器滤除噪声,再进展频谱分析和再播放来感受噪声滤除的效果。
采样频率、采样位数的概念,采样定理;时域信号的FFT分析;数字滤波器设计原理和方法,各种不同类型滤波器的性能比拟。
2.1.时域信号的FFT分析
FFT即为快速傅氏变换,是离散傅氏变换的快速算法,它是根据离散傅氏变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进展改良获得的。
它利用“一分为二〞的思想不断进展,点数越多,运算量的节约就越大,这就是FFT的优越性。
在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进展处理。
采样定理,又称香农采样定律、奈奎斯特采样定律,是信息论,特别是通讯与信号处理学科中的一个重要根本结论。
采样是将一个信号〔即时间或空间上的连续函数〕转换成一个数值序列〔即时间或空间上的离散函数〕,这个数值序列即是一个数字信号。
采样定理是将连续的模拟信号转变为离散的数字信号的方法。
对于一个时域连续的信号f(t)利用开关函数s(t)进展采样,或者冲激函数序列进展采样〔
〕。
两种取样都具有一定的取样间隔,同时要求f(t)为频带带限信号,否如此取样后将发生频谱混合重叠,破坏原信号。
采样定理公式如下:
其中Ts为采样间隔,设f(t)的频谱区间在
之间,即信号频带带限,需满足的采样条件为:
,其中fs为采样频率,这样便完成了对于连续信号的采样形成离散的数字信号方便处理。
2.1.2数字滤波器
数字滤波器是一个输入输出都是离散时间信号的特定功能装置。
应用数字滤波器处理模拟信号〔对应模拟频率〕时,首先须对输入模拟信号进展限带、抽样和模数转换。
数字滤波器输入信号的数字频率〔2π*f/fs,f为模拟信号的频率,fs为采样频率,注意区别于模拟频率),按照奈奎斯特取样定理,要使抽样信号的频谱不产生重叠,应小于折叠频率〔ws/2=π),其频率响应具有以2π为间隔的周期重复特性,且以折叠频率即ω=π点对称。
为得到模拟信号,数字滤波器处理的输出数字信号须经数模转换。
数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。
数字滤波器有低通、高通、带通、带阻和全通等类型。
它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。
应用最广的是线性、时不变数字滤波器,以与FIR滤波器。
从单位脉冲响应的角度,可以把数字滤波器分为:
IIR滤波器〔无限长单位冲激响应滤波器〕和FIR滤波器〔有限长单位冲激响应滤波器〕
此次我选择的歌曲是赵薇的《情深深雨蒙蒙》,用苹果手机自带的录音功能〔VoiceMemos〕录音,和windows自带的录音机程序相比,优点是方便,而且可以忽略电脑运行本身的噪声。
然后将其导入到电脑,转换格式存为wave格式,并对从网上下载原唱的语音用同样的方式转换格式,并保存到正确的目录,以便以后能在matlab中打开。
同时手机自带的录音功能还能完成简单的音频剪辑操作,减掉多余的不需要的局部。
3.2语音处理工具的选择
①Matlab
Matlab是大家都熟悉的一种科学计算软件,在信号与系统中运用很广泛,优点是可编程性强,且具有很好的可移植性和可扩展性,而且和专业信号与系统关联更大。
但缺点是数据都以矩阵形式进展处理,对我来说不够直观。
②Adobeaudition
Adobeaudition是一款专门处理音频的软件,可提供先进的编辑、混音、控制和效果处理功能,优点是很方便,比如采样频率可以直接选择,处理效果很直观,缺点是和信号与系统相关性较小,可编程性差。
这次设计的频谱分析主要是采用了matlab进展分析,但对原始语音频谱的分析以与由采样频率不同带来的变化中我同时采用了matlab和adobeaudition来分析。
①rand函数产生随机噪声,具体语句将在下面的列表中列出
②高斯白噪声GaussianWhiteNoise
此噪声在《随机信号分析课程》中已学过,此次向原始信号中参加此噪声,加强理解。
3.4滤波器的选择
设计中选择的是FIR有限长单位冲激响应滤波器,相比于IIR滤波器,它有如下的优点:
⑴FIR滤波器,由于冲激响应有限长,可以用快速傅里叶变换,这样运算速度可以快很多;
⑵FIR滤波器可以做到严格的线性相位,而假如要IIR得到严格的线性相位,如此要大大增加滤波器的阶数,
⑶FIR滤波器主要采用非递归结构,因而从理论上以与时性从实际的有限精度的运算中,都是稳定的。
有限精度运算误差也较小,IIR滤波器必须采用递归的结构,极点必须在Z平面单位圆内,才能稳定,这种结构,运算中的四舍五入处理,有时会引起寄生振荡。
但是IIR也有一样技术指标下阶数较少,存储单元少,运算次数少的有点,此处不再加以赘述。
两种滤波器:
①低通巴特沃斯滤波器
巴特沃斯滤波器的特点为的通频带频率响应最为平滑,阻带缓慢衰减。
用窗函数法设计低通滤波器,具体指标为fp=3000Hz fc=4000Hz Ap=1dB As=100dB
②高通滤波器
具体指标为:
fp=35ooHzfc=4000HzAp=1dBAs=10dB
3.5Matlab函数的选择
〔1〕[y,fs,bits]=wavread(‘filename’)
wavread函数可读入语音信号y是采样获得的离散时域信号,fs是返回的采样频率,bits是采样位数,filename是音频信号的文件名。
〔2〕wavwrite(y,fs,bits,’filename’)
wavwrite函数,改变采样频率,可以将22.05KHz或者11.025KHz的信号写回并观察这样的采样频率会产生什么样的结果。
其中y是已经获得的时域离散信号,fs为写回的频率,bits是写回的位数,filename为要写回的文件名。
〔3〕sound(y,fs,bits)
sound函数,播放存在的离散音频信号其中的三个参数同wavread中的一样
〔4〕rnt=rand(a,b)
rand函数,为产生随机噪声,从而在信号中参加噪声。
改随机噪声是在〔0,1〕内的随机数,均值为0.5其中a、b为产生随机数矩阵的行和列。
〔5〕fy=fft(y)
y为离散时域信号,fft函数是所有程序分析的核心。
fft函数提供了以快速傅立叶变换算法的离散傅里叶变换的计算,等于对一个离散信号进展DFT离散傅立叶变换。
〔6〕y1=awgn(y,q,’measured’)
awgn函数,为向一个现有的离散信号参加高斯白噪声的函数,y为被添加噪声的信号,q为信噪比,一般要大于1,measured是一种控制名称。
〔7〕[n,fo,ao,w]=firpmord(f,a,dev,fs)
firpmord函数,为设计滤波器阶数的函数,f是滤波器的参数,主要为带边沿的参数,低通滤波器如此是通带与阻带截止频率。
a是通带与止带的幅频响应的幅度,也是一个向量。
dev是通带与止带的震荡幅度大小比例〔介于0到1〕,也是一个向量,fs如此是采样频率。
左边的4个参数,n是滤波器阶数,f0是频率向量,a0是幅频特性向量,w是权重。
这四个参数是用来下一步制作模拟滤波器的。
〔8〕h=firpm(n,fo,ao,w)
firpm函数,利用firpmord所产生的参数制作模拟滤波器,后面四个参数
是firpmord所计算出的。
〔9〕[ht,w]=freqz(h)
freqz函数,对一个设计好的滤波器求冲激响应,h为前一步firmp设计好的
滤波器,ht为频率响应,用abs取绝对值得到幅频特性,或者用log转化成dB
作图。
w是频率X围〔归一化的〕
〔10〕yf=fftfilt(h,y)
fftfilt函数,用设计好的滤波器滤波〔数字信号〕h为设计好的滤波器,y为待滤的信号。
〔11〕h=fir1(n,w,window)
fir1函数,用于使用做好的窗函数进展带通滤波器设计,做好窗函数如
hanning窗〔MATLAB也有这个函数〕,根据相应其他参数做出带通滤波器。
window是已经做好的窗,n是滤波器阶数,w是通带X围〔一定要在0到1
之间〕,为一个向量〔因为是带通滤波器〕。
〔13〕a=mean(y)
mean函数,用于求一个离散序列的均值,在实验中求采样所得的音频信号的均值y是一个向量〔数组〕,a是该数组的均值。
〔14〕a=var(y)
var函数,用于求离散序列的方差,在实验中用于求采样所得音频信号的方差,
y为一个数组,a为该数组的方差。
4.课程设计的具体实现与仿真结果分析
4.1语音信号的采集、录入、与打开
把我的原始语音信号保存为qingshenshen.wav保存在相应路径,此语音信号的长度小于30s。
通过matlab的函数wavread〔〕可读入一个.wav格式的音频文件,例如下面的语句
[y,fs,bits]=wavread(‘’);
读入wav文件并放入向量y中,对于双声道的音频文件,y有两行,此处我们仅对一个声道的音频进展分析。
fs为采样频率,.wav格式默认的采样频率为44.1KHz,下文将比拟不同采样频率对语音信号的影响。
回放声音:
用sound〔〕函数,例如:
sounf(x,fs,bits);
〔具体程序见附录一〕
运行结果如下
原始语音信号时域频域图
此时可在workspace中看到fs的值value为44100
通过调整放大第三章小图,可以看出我声音的频率X围主要集中在200-450hz之间属于女低音
原始语音信号频域幅值图
用Adobeaudition画出的频域图为,分析可得频域X围与Matlab分析所得很接近,只是Adobeaudition的横轴显示的标准不同。
然后我将原唱赵薇的〔带伴奏〕进展同样的分析,
〔具体程序见附录一〕
原唱语音信号时域频域图
原唱语音信号频域幅值图
通过比照可以发现,赵薇的频域更宽,从几十到1000hz都有较大的分布,算是个女高音吧,但大局部集中在几十到600hz这个区间段,看来我在高音局部与原唱有较大差距,怪不得唱她的歌的时候总有种唱不上去的感觉。
特征值的分析:
通过matlab函数mean〔〕和var〔〕的计算,可以得出原唱的均值与方差为:
m1=1.0e-003*
而我的语音的均值与方差为:
比对可知,我唱的歌在均值和方差上和原唱差距都很差,说明我对歌曲的复原度不高,还需要加强唱歌技巧的联系。
特别要注意的是,在这次作图过程中,有两个横坐标的量要加以特别的控制,一个是时域分析的横坐标时间,所以参加了对横坐标的控制语句t=(0:
n-1)/fs;,使它的单位为时间s;二是频域分析的横坐标控制语句yol=(0:
length(X)-1)'*fs/length(X);如果不加这句很可能出来的不是应有的频率X围。
上面的分析都是默认频率44.1KHz下进展的,可以通过wavwrite函数改变采样频率,例如:
wavwrite(x,220500,’’)
然后用sound函数试听,发现音乐失真很大,速度变得很快,原本30s的音频几秒便放完了,同时音调也变得很高,这是我最直观的感受。
同理,如果用500hz的频率去采样,声音就变得很低沉,像风的呼啸与野兽的低喘,可在workspace中观察到fs的值变了
此处,我对我的原始语音分别参加了两个噪声,一个是随机序列噪声,一个是高斯白噪声。
注意,以下的分析全都是基于44.1khz的采样频率下进展的。
⑴随机序列噪声
程序中用rand函数产生与采样获得的信号y维度一样的噪声信号,参加原信号中,同样进展时域与频域的分析,画出时域图像、幅频特性,相频特性用处不大在此忽略不画。
这里rand的维度通过y的维度得到,可用语句whos查看,
〔具体程序见附录二〕
运行结果如下:
与上文未加噪声的波形比照,可看出时域波形幅值变化较大,波形更加参差不齐,二频域波形变化不大。
用sound回放,可明显感觉到有杂音,就像老式的电视机放出的那种刺啦刺啦的声音。
然后再计算加噪后的均值与方差:
与加噪声前相比,均值变增大了135%,而方差只变化了4.3%,主要因为参加了大小同信号大小幅度差不多的噪声,并且全都在大于0的区域。
此处分析时我仅仅分析了我翻唱的音频信号,对翻唱的信号加噪声分析,对于原唱的分析类似,只要改变文件名即可,因此不再赘述。
同样在画图时有坐标控制,此后的程序也有,不再加以称述。
⑵高斯白噪声
用函数awgn〔〕产生高斯白噪声,这里取信噪比为10dB,防止噪声太大而淹没原始信号。
〔具体程序如下见附录二〕
运行结果如下:
从图片上可以看出,通过比照可以明显看出加完噪声后时域幅值变大,频域变化不大。
参加高斯白噪声后试听的效果同参加随机噪声的结果都有刺啦刺啦的声音但相对而言高斯白噪声的噪声更大。
同样对于歌星原唱的音频信号不再重复操作。
均值与方差分别为:
与未加噪声前相比,均值变化很大,而方差仍根本没有变化。
⑴低通滤波器
具体的指标为:
通带截止频率为3000Hz ,阻带截止频为4000Hz,通带最大衰减为1dB,阻带最大衰减为100dB.通带阻带的幅频相应幅度一个是1一个是0,震荡比例在通带是0.05,阻带为0.01。
并用frez计算频率响应。
〔具体程序见附录三〕
设计出滤波器后,画出幅频响应和相频响应图为:
通过滤波器前后的噪声的时域和频域图为:
比照可看出,低频局部,尤其是频率小于3000hz的局部的频谱根本没有发生变化,而在蓝色的途中看以明显看出绿色图中的高频局部被滤除了。
试听感觉,声音相比未滤波之前的更加沉闷一些,因为高频成分被滤去的缘故。
⑵高通滤波器
此处采用凯塞窗函数构成高通滤波器,设计指标为:
阻带截止频率为3500Hz,通带截止频率为4000Hz,阻带衰减为1dB,通带衰减为100dB。
〔具体程序见附录三〕滤波器的频率响应图为:
加噪信号通过滤波器前后频谱的变化如如下图:
从视觉上可以很明显地看出,通过滤波器后,低频信号都被滤除了,只剩蓝色的高频分量,同时滤波前后的波形变化也很大,滤波后的波形更为规整。
试听后觉得声音很尖,是因为低频局部的分量被滤除的原因。
遇到的问题首先与矩阵的维度有关,Matlab是以矩阵形式存储和处理数据的,而我经常忽略矩阵的维度而直接对两个矩阵进展加减运算,无疑会出现矩阵维度不匹配的问题,一开始我并不知道数据的维度终究是多少,也不知道如何解决,但后来我学会了用whos语句查看变量的维度,之后又学会了怎么取出矩阵的某一行某一列,问题便得到了解决。
然后遇到的问题是如何改变采样频率,一开始我会直接在程序开头定义采样频率为22050Hz或者5500Hz,但之后发现这样做出来的试听效果是一样的,后来查阅了才知道wave格式默认的采样频率为44.1kHz,要用wavwrite函数改变信号的采样频率,问题迎刃而解。
通过这次设计,又加深了我对傅里叶变换以与采样定理的理解,深感信号与系统真是博大精深,我们平时所学都只是冰山一角,只是皮毛,更多的内容在等着我们去探索。
一开始想直接用Adobeaudition进展滤波,但是说来惭愧,连教程都看不懂,想要将歌曲的伴奏滤都做的很差。
想想也是,哪有那么轻易的事,怎么可能用简答的几步就完成人家苦苦研究的课题。
后来用Matlab编程,感觉自己的编程能力还是很欠缺,遇到了很多问题,一些细节一些小的指令总是被我轻易的忽略。
但我同时也再次感受到了Matlab的神奇,它有那么多功能,和信号与系统一样,也许我原来知道的只是其中很小的一局部。
总的来说,在以后的学习中,要一手抓理论知识,即掌握教师上课讲的内容,同时也要加强编程能力的锻炼。
对于这次试验所做的内容,其实只是对语音信号的一个粗略的分析,通过结果也可以看出,滤波器设计得并不理想。
由于本人能力和时间有限,所以未进展更深层次的研究,以后一定会加强。
参考资料:
【1】郭宝龙,闫允一,朱娟娟,吴宪祥.工程信号与系统[M].:
高等教育.
【2】王祯飞.基于MATLAB的语音信号分析和处理[C].某某师X大学协和学院.
【3】丁玉美,高西全,数字信号处理. 3 版[M]. 某某:
某某电子科技大学,2008.
附录
附录一:
语音信号的打开与频域分析
%我的语音〔原始语音〕
fs=44100;%44.1KHz为默认采样频率,可改变
[x,fs,bits]=wavread('qingshenshen.wav');%读入原始语音:
情深深雨蒙蒙
sound(x,fs,bits);
X=fft(x);
aX=abs(X);
figure;%产生一个新图形界面
n=length(x);%取y数据的长度;
t=(0:
n-1)/fs;%求时间单位s的运算公式;
subplot(311);plot(t,x);
xlabel('s');
title('时域波形图')%绘制以时间单位s的时域波形
subplot(312);plot(X);
title('原始信号频谱');%画出原始信号频谱图
subplot(313);
yol=(0:
length(X)-1)'*fs/length(X);%控制横坐标X围
plot(yol(1:
length(yol)/2),aX(1:
length(yol)/2));%画出原始信号频谱的幅值
axis([0150003000]);
xlabel('Hz');
title('原始信号幅值');
m2=mean(x);
v2=var(x);
%原唱语音
fs=44100;%44.1KHz为默认采样频率,可改变
[x,fs,bits]=wavread('yuanchang.wav');%读入原始语音:
yuanchang.wav
sound(x,fs,bits);
X=fft(x);
aX=abs(X);
figure;%产生一个新图形界面
n=length(x);%取y数据的长度;
t=(0:
n-1)/fs;%求时间单位s的运算公式;
subplot(311);plot(t,x,’g’);
xlabel('s');
title('时域波形图')%绘制以时间单位s的时域波形
subplot(312);plot(X);
title('原始信号频谱');%画出原始信号频谱图
subplot(313);
yol=(0:
length(X)-1)'*fs/length(X);%控制横坐标X围
plot(yol(1:
length(yol)/2),aX(1:
length(yol)/2));