语音的时频分析(一)

一、实验目标

1、用matlab完成一个短句的预处理(读取数据、预加重、分帧、加hamming窗),只用基本语句;

2、接着用matlab提取该段语音的短时能量、短时平均幅度和短时平均过零率,利用matlab的画图函数plot,画出这三个参数的时域曲线图,以上三幅图连同波形的时域曲线图放在一起。

二、实验原理

1、语音的预处理

1)预加重(pre-emphasis)

语音信号的平均功率谱受声门激励和口鼻辐射的影响,高频端大约在800Hz以上按6dB/倍频程跌落,预加重的目的是提升高频部分,使信号的频谱变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,以便于频谱分析或声道参数分析。

2)分帧

语音信号是非平稳的,但具有“准平稳特性”,在较短的时间间隔内(一般10~30ms),发音器官运动缓慢,可以认为语音信号的特征基本保持不变。

短时分析将语音流分为一段一段来处理,每一段称为一“帧”(frame);

帧长(frame rate):10~30ms,20ms常见;
帧移(overlap):0~1/2帧长,保证帧与帧之间的平滑过渡;

一般每秒的帧数约为33-100

3)窗函数

扫描二维码关注公众号,回复: 14635836 查看本文章

为了减小语音帧截断效应导致的频谱能量泄漏(Leakage),分帧时需要加窗处理:sw(n)=s(n)∗w(n)。泄漏与窗函数频谱两侧旁瓣有关,如果两侧瓣高度趋于零,而使能量相对集中在主瓣,就可较为接近真实频谱,为此,在可采用不同窗函数来截断信号。有三种常见的窗函数为:

矩形窗:

汉明窗:

海宁窗:

2、短时分析参数

1)短时平均能量

短时能量随时间变化比较明显,一般清音部分的能量要比浊音小得多。

窗长的选取是个矛盾。希望窗长小一点,可以响应快速的幅度变化;但是太小的窗,得不到平滑的能量函数。

使用短时能量的主要意义:

可以区别清音和浊音;

其次在高信噪比的情况下,可以判定有声段和无声段;

韵母和声母的分界;

语音中连字的分界;

3、短时平均幅度

短时能量由于是对信号平方,人为增加了高低信号之间的差距,所以对高电平信号非常敏感,在一些场合不太适用,因此有了短时平均幅度函数。它也是能量大小的表征,衡量的角度不一样:样本之间不受平方的影响。

短时平均幅度与短时平均能量的比较:

短时平均幅度能较好地反映清音范围内的幅度变化;

无平方运算,动态范围比短时能量小,接近标准能量计算的动态范围平方根,

所能反映幅度变化动态范围比短时平均能量好;

短时平均幅度反映清音和浊音之间的电平差次于短时平均能量。

4、短时过零率

指每帧内信号波形穿过横轴(零电平)的次数

对于纯正弦信号,平均过零率就是信号频率除以两倍的采样频率,而采样频率是固定的,所以短时过零率可以在一定程度上视为对信号频率的简单度量。

短时平均过零率可以用于语音信号请浊音的判断。浊音能量集中在低频段,约3kHz以下,清音相反。而过零率一定程度上反映了频率的高低,所以浊音一般过零率较低,清音反之。但是也有些音是处于中间,很难分辨。

三、实验程序

%读取语音信号

[y,fs] = audioread('Beijing.wav');

y=y/max(abs(y)); %信号幅值进行归一化处理

N=length(y);  %信号长度

time=(0:N-1)/fs; %信号时间刻度

%预加重

y1=filter([1 -0.98],1,y); %对信号进行高通滤波,提高高频分量

%加窗分帧处理

len=200;  % 帧长

inc=100;   % 帧移

win=hamming(len); %取帧长宽的汉明窗

y2=enframe(y1,win,inc)';  % 分帧

fn=size(y2,2);   % 获取帧数

frameTime=((0:fn-1)*inc+len/2)/fs; %计算每帧对应的时间刻度

%短时平均幅值

A=sum(abs(y2),1); %对每帧信号幅值累加求和

A=A/max(A);%归一化处理

%短时能量

E=sum(y2.^2,1); %对每帧能量累加求和

E=E/max(E);%归一化处理

%短时平均过零率

y1_z=y1-mean(y1);   %短时平均过零率的修正:消除直流分量

y2_z=enframe(y1_z,win,inc)';  %分帧后的数组(帧长×帧数)

fn_z=size(y2_z,2);   %获取帧数

frameTime_z=((0:fn_z-1)*inc+len/2)/fs;

zcr=zeros(1,fn_z); %初始化数组

for i=1:fn_z

    z=y2(:,i);   %获取每一帧的数据

    for j=1:(len-1)  %在一帧内寻找过零点

        if z(j)*z(j+1)<0  %判断是否过零

           zcr(i)=zcr(i)+1;  %是过零点,记录1次

        end

    end

end

zcr=zcr / max(zcr); %归一化处理

%作图

plot(time,y,'k',frameTime,A,'c',frameTime,E,'g',frameTime_z,zcr,'r');

xlim([0 max(time)]);

title('语音信号短时分析');

ylabel('幅值');

xlabel('时间/s');

 图3.1“我到北京去”语音信号及其短时平均能量、短时平均幅度和短时过零率曲线

四、实验分析

如图,黑色为“我到北京去”的语音信号时域波形,绿色为短时平均能量曲线,蓝色为短时平均幅度曲线,红色为短时平均过零率曲线。

其中,短时平均能量曲线和短时平均幅度曲线大致和波形一致,无声基本为零;短时平均幅度动态范围比短时能量小,所能反映幅度变化动态范围比短时平均能量好;短时平均幅度反映清音和浊音之间的电平差次于短时平均能量。

从短时平均过零率曲线,清音成分高的地方过零率高,浊音成分高的地方过零率低。

猜你喜欢

转载自blog.csdn.net/weixin_47546087/article/details/126556796
今日推荐