语音信号是一个非稳态的、时变的信号。
短时,是指10ms-30ms,在短时分析中,将语音信号分为一段一段地来分析其特征参数,其中每一段称为一"帧",帧长一般取10~30 ms。这样,对于整体的语音信号来讲,每一帧特征参数组成了特征参数时间序列。
1、读入wav数据
输入参数wavFilename是指以.wav为扩展名的音频文件名称。
输出参数:y是数字化的音频信号;fs是采样频率;nbits是每个样点在编码时的二进制位数(比特数)
function frameTime=frame2time(frameNum,framelen,inc,fs)
% 分帧后计算每帧对应的时间
frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;
2、分幁
产生重叠:在两个不重叠的帧之间插一些帧来提取特征参数,这就形成了相邻帧之间有重叠部分,
设读入语音文件的数据存放在y中,y长为N,采样频率为f,取每帧长为wlen,后一帧对前一帧的位移量(简称为帧移)用inc表示
输入参数: x是语音信号;win是帧长或窗函数,若为窗函数,帧长便取窗函数长;inc是帧移。
输出参数:f是分帧后的数组,将为帧数×帧长。f x L
function f=enframe(x,win,inc)
nx=length(x(:)); % 取数据长度
nwin=length(win); % 取窗长
if (nwin == 1) % 判断窗长是否为1,若为1,即表示没有设窗函数
len = win; % 是,帧长=win
else
len = nwin; % 否,帧长=窗长
end
if (nargin < 3) % 如果只有两个参数,设帧inc=帧长
inc = len;
end
nf = fix((nx-len+inc)/inc); % 计算帧数
f=zeros(nf,len); % 初始化
indf= inc*(0:(nf-1)).'; % 设置每帧在x中的位移量位置
inds = (1:len); % 每帧数据对应1:len
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); % 对数据分帧
if (nwin > 1) % 若参数中包括窗函数,把每帧乘以窗函数
w = win(:)'; % 把win转成行数据
f = f .* w(ones(nf,1),:); % 乘窗函数
end
常用三种窗函数
3、时域分析
能量:
应用:
平均幅度
应用:
平均过零率
短时平均过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数
应用:
在实际计算短时平均过零率参数时,需要十分注意的一个问题是,如果输入信号中包含漂移,即信号在通往AD转换器前就有一个直流分量,使AD转换后继续带有这个直流分量。因为直流分量的存在影响了短时平均过零率的正确估算,所以建议在语音信号处理前先消除直
流分量。
频域:
stft 短时傅里叶变换
function d=stftms(x,win,nfft,inc)
if length(win)==1 % 判断有否设置窗函数
wlen=win; % 否,设帧长
win=hanning(wlen); % 设置窗函数
else
wlen=length(win); % 设帧长
end
x=x(:); win=win(:); % 把x和win都变为列数组
s = length(x); % 计算x的长度
c = 1;
d = zeros((1+nfft/2),1+fix((s-wlen)/inc)); % 初始化输出数组
for b = 0:inc:(s-wlen) % 设置循环
u = win.*x((b+1):(b+wlen)); % 取来一帧数据加窗
t = fft(u,nfft); % 进行傅里叶变换
d(:,c) = t(1:(1+nfft/2)); % 取1到1+nfft/2之间的谱值
c = c+1; % 改变帧数,求取下一帧
end;
短时功率谱密度
function [Pxx] = pwelch_2(x, nwind, noverlap, w_nwind, w_noverlap, nfft)
% 计算短时功率谱密度函数
% x是信号,nwind是每帧长度,noverlap是每帧重叠的样点数
% w_nwind是每段的窗函数,或相应的段长,
% w_noverlap是每段之间的重叠的样点数,nfft是FFT的长度
x=x(:);
inc=nwind-noverlap; % 计算帧移
X=enframe(x,nwind,inc)'; % 分帧
frameNum=size(X,2); % 计算帧数
%用pwelch函数对每帧计算功率谱密度函数
for k=1 : frameNum
Pxx(:,k)=pwelch(X(:,k),w_nwind,w_noverlap,nfft);
end