实验二:语音信号的频域分析
实验目的:以MATLAB为工具,研究语音信号的频域特性,以及这些特性在《语音信号处理》中的应用情况。
实验要求:利用所给语音数据,分析语音的频谱、语谱图、基音频率、共振峰等频域参数。要求会求取这些参数,并举例说明这些参数在语音信号处理中的应用。
实验内容:
1、 语音信号的频谱分析
1.1加载“ma1_1”语音数据。基于DFT变换,画出其中一帧数据(采样频率为8kHz,帧长为37.5ms,每帧有300个样点)的频域波形(对数幅度谱)。
load ma1_1;
x = ma1_1 (4161:4460); plot (x)
N = 1024; k = - N/2:N/2-1;
X = fftshift (fft (x.*hann (length (x)),N));
plot (k,20*log10 (abs(X))), axis ([0 fix(N/2) -inf inf ])
已知该帧信号的时域波形如图(a)所示,相应的10阶LPC谱如图(b)所示。
问题1:这帧语音是清音还是浊音?基于DFT求出的对数幅度谱和相应的LPC谱相比,两者有什么联系和区别?
问题2:根据这帧基于DFT的对数幅度谱,如何估计出共振峰频率和基音周期?
问题3:时域对语音信号进行加窗,反映在频域,其窗谱对基于DFT的对数幅度谱有何影响?如何估计出窗谱的主瓣宽度?
1.2对于浊音语音,可以利用其频谱X()具有丰富的谐波分量的特点,求出其谐波乘积谱:
HPSx()X(r)r1R
式中,R一般取为5。在谐波乘积谱中,基频分量变得很大,更易于估计基音周期。
1.3加载“vowels.mat”语音数据,分别画出一帧/i/和一帧/u/(采样频率为10kHz,帧长为30ms,每帧有300个样点)的基于DFT的对数幅度谱。其Matlab代码如下:
load vowels
x = vowels.i_1(2001:2300);
N = 1024; k= -N/2:N/2-1;
X = fftshift (fft (x.*hann (length(x)),N));
plot (k,20*log10(abs(X))), axis([0 fix(N/2) 0 100])
x = vowels.u_1(2001:2300);
N= 1024; k = -N/2:N/2-1;
X = fftshift (fft (x.*hann(length(x)),N));
plot (k,20*log10(abs(X))), axis([0 fix(N/2) 0 100])
1.4画出一帧清音语音的基于DFT的对数幅度谱。语音数据为ma1_1中的第15701-15860个样点(采样频率为8kHz,帧长为20ms,每帧有160个样点)。
load ma1_1;
x = ma1_1 (4161:4460); plot (x)
N = 1024; k = -N/2:N/2-1;
X = fftshift (fft (x.*hann (length (x)),N));
plot (k,20*log10 (abs(X))), axis ([0 fix(N/2) -inf inf ])
问题5:清音帧的幅度谱有何特点?
2、 语音信号的语谱图分析
2.1加载“timit1”语音数据。利用函数specgram,画出该句语音的语谱图。其Matlab代码如下:
load timit1;
NFFT = 256 ; Fs = 16000; Win = 256; Noverlap = 128;
specgram(timit1, NFFT, Fs, Win, Noverlap);
问题6:该句语音的共振峰结构如何?
2.2加载“gliss”语音数据。画出该句语音的语谱图。
load gliss;
NFFT = 256 ; Fs = 10000; Win = 256; Noverlap = 128;
specgram(gliss.i_2, NFFT, Fs, Win, Noverlap);
问题7:如何识别出滑音/i/的共振峰结构及其基音频率?
问题8:基于浊音/清音分类函数voiunvoi.m和谐波乘积谱函数hpspectrum.m,编写一个用以计算浊音短时基音周期的函数“stpitch.m”。
问题9:利用函数stpitch.m,分别求出两句语音“timit1”和“timit2”的基音周期,各句语音的基音周期是如何变化的?
注:男声基音周期的范围通常在50-250Hz之间;女声基音周期的范围通常在120-500Hz之间。
因篇幅问题不能全部显示,请点此查看更多更全内容