语音信号采集和分析报告.docx
《语音信号采集和分析报告.docx》由会员分享,可在线阅读,更多相关《语音信号采集和分析报告.docx(12页珍藏版)》请在冰豆网上搜索。
语音信号采集和分析报告
语音信号的采集与分析
一、背景介绍
1、语音信号处理的相关内容
通过语音相互传递信息是人类最重要的基本功能之一.语言是人类特有的功能.声音是人类常用工具,是相互传递信息的最重要的手段.虽然,人可以通过多种手段获得外界信息,但最重要,最精细的信息源只有语言,图像和文字三种.与用声音传递信息相比,显然用视觉和文字相互传递信息,其效果要差得多.这是因为语音中除包含实际发音内容的话言信息外,还包括发音者是谁及喜怒哀乐等各种信息.所以,语音是人类最重要,最有效,最常用和最方便的交换信息的形式.另一方面,语言和语音与人的智力活动密切相关,与文化和社会的进步紧密相连,它具有最大的信息容量和最高的智能水平。
语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科,处理的目的是用于得到某些参数以便高效传输或存储;或者是用于某种应用,如人工合成出语音,辨识出讲话者,识别出讲话内容,进行语音增强等.
语音信号处理是一门新兴的学科,同时又是综合性的多学科领域,是一门涉及面很广的交叉学科.虽然从事达一领域研究的人员主要来自信息处理及计算机等学科.但是它与语音学,语言学,声学,认知科学,生理学,心理学及数理统计等许多学科也有非常密切的联系.
语音信号处理是许多信息领域应用的核心技术之一,是目前发展最为迅速的信息科学研究领域中的一个.语音处理是目前极为活跃和热门的研究领域,其研究涉及一系列前沿科研课题,巳处于迅速发展之中;其研究成果具有重要的学术及应用价值.
2、工作流程:
相关的信号与系统知识:
傅里叶变换在信号处理中具有十分重要的作用,它通常能使信号的某些特性变得很明显,而在原始信号中这些特性可能含糊不清或至少不明显.在语音信号处理中,傅里叶表示在传统上一直起主要作用.其原因一方面在于稳态语音的生成模型由线性系统组成,此系统被一随时间作周期变化或随机变化的源所激励.因而系统输出频谱反映了激励与声道频率响应特性.另一方面,语音信号的频谱具有非常明显的语音声学意义,可以获得某些重要的语音特征(如共振峰频率和带宽等).
根据语音信号的产生模型,可以将其用一个线性非时变系统的输出表示,即看作是声门激励信号和声道冲激响应的卷积.在语音信号数字处理所涉及的各个领域中,根据语音信号求解声门激励和声道响应具有非常重要的意义.例如,为了求得语音信号的共振蜂就要知道声道传递函数(共振峰就是声道传递函数的各对复共轭极点的频率).又如,为了判断语音信号是清音还是浊音以及求得浊音情况下的基音频率,就应知道声门激励序列.在实现各种语音编码,合成,识别以及说话人识别时无不需要由语音信号来求得声门激励序列和声道冲激响应.
3、相关MATLAB知识:
MATLAB语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析
、声音回放以及各种图的呈现等,信号处理是MATLAB重要应用的领域之一。
2、语音信号的录制采集和分析
我使用的是自己手机的录音功能,录制了一段歌声“YR_220444.amr”,然后使用格式工厂软件将其转换成wav格式并重命名为“02120008.wav”。
在matlab窗口中,调用wavread函数,读取音频文件。
具体调用费事如下:
[y,fs,bits]=wavread('C:
\Users\Lenovo\Desktop\02120008.wav');
通过调用wavread函数,将录制好的音频文件信息储存在一个矩阵y中,fs保存wav格式音频文件的采样频率,其值为44.1kHZ。
并用一个变量n来储存信息y的长度:
n=length(y);
然后,调用decimate函数对y进行采样处理,在matlab中输入helpdecimate,可以得到其调用方式如下:
DECIMATEResampledataatalowerrateafterlowpassfiltering.
Y=DECIMATE(X,R)resamplesthesequenceinvectorXat1/Rtimesthe
originalsamplerate.TheresultingresampledvectorYisRtimes
shorter,i.e.,LENGTH(Y)=CEIL(LENGTH(X)/R).Bydefault,DECIMATE
filtersthedatawithan8thorderChebyshevTypeIlowpassfilterwith
cutofffrequency.8*(Fs/2)/R,beforeresampling.
Y=DECIMATE(X,R,N)usesanN'thorderChebyshevfilter.ForNgreater
than13,DECIMATEwillproduceawarningregardingtheunreliabilityof
theresults.SeeNOTEbelow.
Y=DECIMATE(X,R,'FIR')usesa30thorderFIRfiltergeneratedby
FIR1(30,1/R)tofilterthedata.
Y=DECIMATE(X,R,N,'FIR')usesanNthFIRfilter.
Note:
ForbetterresultswhenRislarge(i.e.,R>13),itis
recommendedtobreakRupintoitsfactorsandcallingDECIMATEseveral
Times.
这样,通过调用这个函数,就能实现信号采集。
本次课题中,采集的序列分别是之前的1/2,1/4,因此,参数R分别区2,4。
并将采样后的信息保存在z1,z2中。
然后,通过调用fft函数对信号进行傅里叶变换,得到采样前后信号的幅频特性曲线,以便进行频域分析。
通过调用matlab中的plot函数,可以得到采样前后时域,频域的波形。
三、分析
1.时域分析和频域分析
①:
原始信号fs=8KHz。
②取R=2即采样频率fs2=1/2*fs=4KHz.
③取R=4即采样频率fs3=1/4*fs=1kHz
分析:
通过对比上述几幅幅频特性的曲线,可以发现,当采样频率变低时,低频信号会有一定缺失,并产生了高频信号,出现一定程度的失真。
2.添加噪声
通过调用wgn函数,为原始信号添加高斯白噪声,得到合成之后的音频信息,为保证噪声不会完全覆盖原始声音文件,适度地降低了噪声的幅度。
由于添加的噪声是高斯白噪声,噪声会均匀分布在各个频率段上。
3.声音信息的滤波操作
通过观察添加了噪声之后的声音信息的幅频特性曲线的观察,可以发现,噪声多集中在高频段,而在低频段,主要是原始的声音信号,因此,结合原始信号的幅频特性曲线,可以选用一个截止频率在3000Hz左右的低通滤波器进行滤波操作。
本次课题研究中,通过kaiser函数来确定滤波器的参数,其具体调用参数如下:
KAISERORDFIRorderestimator(lowpass,highpass,bandpass,multiband).
[N,Wn,BTA,FILTYPE]=KAISERORD(F,A,DEV,Fs)istheapproximateorderN,
normalizedfrequencybandedgesWn,KaiserwindowbetaparameterBTA
andfiltertypeFILTYPEtobeusedbytheFIR1function:
B=FIR1(N,Wn,FILTYPE,kaiser(N+1,BTA),'noscale')
Theresultingfilterwillapproximatelymeetthespecificationsgiven
bytheinputparametersF,A,andDEV.
FisavectorofbandedgefrequenciesinHz,inascendingorder
between0andhalfthesamplingfrequencyFs.Aisavectorof0sand
1sspecifyingthedesiredfunction'samplitudeonthebandsdefinedby
F.ThelengthofFistwicethelengthofA,minus2(itmusttherefore
beeven).Thefirstfrequencybandisassumedtostartatzero,and
thelastonealwaysendsatFs/2.
DEVisavectorofmaximumdeviationsorripples(inlinearunits)
allowableforeachband.Thesmallestdeviationspecified(MIN(DEV))is
usedforboththepassbandandthestopband.
Fsisthesamplingfrequency(whichdefaultsto2ifyouleaveitoff).
C=KAISERORD(F,A,DEV,Fs,'cell')isacell-arraywhoseelementsarethe
parameterstoFIR1.
根据拟定的参数,设计出一个低通滤波器,并用该滤波器处理合成之后的声音文件,得到如下的幅频特性曲线:
观察上图可以发现,经过了低通滤波器之后,合成声音信息的高频噪音已经去除,而低频的声音信号很大程度上保留。
由于高斯白噪声分布在所有频带,无可避免低频段的噪声仍然存留。
但是经过听前后的声音,可以发现,滤波后的声音文件音质改善了很多。
4、总结
通过这次的大作业,让我自己动手采集、分析语音信号,更加加深了对书本上知识的理解,并且了解到了语音信号处理和matlab软件操作的一部分知识,受益匪浅。
2014、6、26
附录:
clear;
[y,fs,bits]=wavread('C:
\Users\Lenovo\Desktop\02120008.wav');
n=length(y);
time=1/fs:
1/fs:
n/fs;
sound(y,fs)
Y=fft(y,n);
figure(6)
plot(abs(Y));
figure
(1)
subplot(1,2,1);
plot(time,y);
title('原始信号波形');
M=0:
n/2;
freq=M*fs/n;
subplot(1,2,2);
mag=abs(Y);
plot(freq,mag(M+1));
title('原始信号频谱');
y0=decimate(y,2,10);
wavwrite(y0,fs,'C:
\Users\Lenovo\Desktop\shuchu.wav');
z1=decimate(y,2,10);
m1=length(z1);
time1=1/fs:
1/fs:
m1/fs;
X1=fft(z1,m1);
figure
(2)
subplot(1,2,1);
plot(time1,z1);
title('采样后波形');
M1=0:
m1/2;
freq1=M1*fs/m1;
mag1=abs(Y(M1+1));
subplot(1,2,2);
plot(freq1,mag1);
title('采样后频谱');
z2=decimate(y,4,10);
m2=length(z2);
time2=1/fs:
1/fs:
m2/fs;
X2=fft(z2,m2);
figure(3)
subplot(1,2,1);
plot(time2,z2);
title('采样后波形');
M2=0:
m2/2;
freq2=M2*fs/m2;
mag2=abs(Y(M2+1));
subplot(1,2,2);
plot(freq2,mag2);
title('采样后频谱');
[row,col]=size(y);
noise=0.1*wgn(row,col,0);
cmb=noise+y;
X3=fft(cmb,n);
figure(4)
subplot(1,2,1);
plot(time,cmb);
title('加噪声后波形');
subplot(1,2,2);
mag3=abs(X3(M+1));
plot(freq,mag3);
title('加噪声后频谱');
[order,Wn,bta,filtype]=kaiserord([503000],[10],[0.010.1],fs);
b=fir1(order,Wn,filtype,kaiser(order+1,bta));
f_cmb=filter(b,1,cmb);
X4=fft(f_cmb,n);
figure(5)
subplot(1,2,1);
plot(time,f_cmb);
title('滤波后波形');
subplot(1,2,2);
mag4=abs(X4(M+1));
plot(freq,mag4);
title('滤波后频谱');