概述
一、实验目标
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)窗函数
为了减小语音帧截断效应导致的频谱能量泄漏(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“我到北京去”语音信号及其短时平均能量、短时平均幅度和短时过零率曲线
四、实验分析
如图,黑色为“我到北京去”的语音信号时域波形,绿色为短时平均能量曲线,蓝色为短时平均幅度曲线,红色为短时平均过零率曲线。
其中,短时平均能量曲线和短时平均幅度曲线大致和波形一致,无声基本为零;短时平均幅度动态范围比短时能量小,所能反映幅度变化动态范围比短时平均能量好;短时平均幅度反映清音和浊音之间的电平差次于短时平均能量。
从短时平均过零率曲线,清音成分高的地方过零率高,浊音成分高的地方过零率低。
最后
以上就是大力睫毛为你收集整理的语音的时频分析(一)的全部内容,希望文章能够帮你解决语音的时频分析(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复