天天看点

基于MATLAB的语音信号预处理

3.1.语音信号的预加重处理

对语音的的高频部分进行加重以去除口唇部分的影响,就必须要对输入的数字语音信号进行预加重处理,以此来增加语音的高频分辨率。通常通过传递函数为的一阶FIR高通数字滤波器来实现预加重,其中为预加重系数,0.9<<1.0。设n时刻的语音采样值为 X (n), 经过预加重处理的结果为,这里取=0.98。图3.1为该高通滤波器的幅频特性及相频特性。图3.2中分别给出了预加重前和预加重后的一段浊音信号及频谱,可以看出预加重后的频谱在高频部分的幅度有了提升。实现高频提升的MATLAB程序如下。

fid=fopen('voice2.txt','rt');
 e=fscanf(fid,'% f');
 ee=e(200:455);
r=fft(ee,1024);
r1=abs(r);
pinlv=(0:1:255)* 8000/512
yuanlai=20* log10(r1)
signal(1:256);
[h1,f1]=freqz([1,-0.98],[1],256,4000);
Pha=angle(h1);
H1=abs(h1);
r2(1:256)
u=r2.* h1’
 
u2=abs(u)
u3=20* log10(u2)
un=filter([1,-0.98],[1],ee)
figure(1);subplot(211);
plot(f1,H1);title(‘高通滤波器的幅频特性’);
xlabel(‘ 频率/Hz’);ylabel(‘幅度’);
subplot(212);plot(pha);title(‘高通滤波器的相频特性’);
xlabel(‘频率/Hz/’);ylabel(‘角度 /rad’);
figure(2);subplot(211);plot(ee);title(‘原始语音信号’);
xlabel(‘样点数’);ylabel(‘幅度’);
axis([0 256-3*10ˆ4 2*10ˆ4]);
subplot(212);plot(real(un));
title(‘经高通滤波后的语音信号’);axis([0 256-1* 10ˆ41*10ˆ4]);
xlabel(‘样点数’);ylabel(‘幅度’);
figure(3);subplot(211);plot(pinlv,signal);               title(‘原始语音信号频谱’);
xlabel(‘频率/Hz’);ylabel(‘幅度/dB’);
subplot(212);plot(pinlv,u3);title(‘经高通滤波后的信号频谱’);
xlabel(‘频率/HZ’);ylabel(‘幅度/dB’);      

在对语音信号进行预加重处理后,接下来要进行加窗分帧处理。语音信号主要分为浊音和清音两类,是一种随时间变化的信号。浊音的基音周期、清浊音信号幅度以及声道参数等都随时间而缓慢变化。由于发音器官的惯性运动,可以认为在一个很小的时间段里(一般在10~30ms)语音信号近似不变,即语音信号具有短时平稳性。如此,便可以把语音信号分为一些短段(称为分析帧)来进行处理。语音信号的分帧是采用可移动的有限长度窗口进行加权的方法来实现的。每秒的帧数一般为33~100帧,看实际情况而定。分帧虽然可以采用连续分段的方法,但一般要采用图3.2.1所示的交叠分段的方法,这样做是为了使帧与帧之间能平滑过渡,保持较好的连续性。帧与帧之间的交叠部分称为帧移,帧移与帧长的比值一般取为0~0.5,图3.2.1给出了帧移与帧长示意图。

这两种窗的时域和频域波形用MATLAB程序来实现,下面分别叙述。

  • 矩形窗时域和频域波形,窗长N=65

【程序3.2】 juxing.m

x=linspace(0,90,1000);      %在0-90的横坐标间取1000个
y=zeros(1000,1);            %为矩阵h赋0值
y(1:191)=0;                 %前190个值取为0值
y(192:800)=1;               %窗长,窗内值取为1
y(801:1000)=0;              %后200个值取为0值
figure(1);                  %定义图号
subplot(1,2,1)              %画第一个图
plot(x,y,'k');              %画波形,横坐标为x,纵坐标为y,k表示黑色
title('矩形窗时域波形');    %图标题
xlabel('样点数');           %横坐标名称
ylabel('振幅');             %纵坐标名称
axis([0,100,-0.5,1.5])      %限定横、纵坐标范围
line([0,100],[0,0])         %画出x轴
w1=linspace(0,65,65);         %取窗长内的65个点
w1(1:65)=1;                   %赋值1,相当于矩形窗
w2=fft(w1,512);               %对时域信号进行512点的傅里叶变换
w3=w2/w2(1)                   %幅度归一化
w4=20*log10(abs(w3));         %对归一化幅度去对数
w=2*(0:511)/512;              %频率归一化
subplot(1,2,2);               %画第二个子图
plot(w,w4,'k');               %画幅度特性图
axis([0,1,-100,0]);           %限定横、纵坐标范围
title('矩形窗幅度特性');      %图标题
xlabel('归一化频率、f/fs');   %横坐标名称
ylabel('振幅;/dB');           %纵坐标名称a      
图3.2.2  矩形窗及其频谱
基于MATLAB的语音信号预处理

图3.2.1是程序运行后对应的矩形窗时域波形和频谱特性图。

x=linspace(20,90,65);
h=hamming(65);
figure(1);
subplot(1,2,1);
plot(x,h,'k');
title('汉明窗食欲波形');
xlabel('样点数');ylabel('幅度');
w1=linspace(0,65,65);
w1(1:65)=hamming(65);
w2=fft(w1,1224);
w3=w2/w2(1);
w4=20*log10(abs(w3))
w=2*[0:1223]/1224;
subplot(1,2,2)
plot(w,w4,'k')
axis([0,1,-100,0])
title('汉明窗幅度特性');
xlabel('归一化频率');ylabel('幅度/dB');      

图3.2.3是程序运行以后相应的汉明窗时域波形和幅频特性。

继续阅读