1.对短时过零率针对不同语音片段进行验证
短时平均过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。
对于连续语音信号,过零即意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值改变符号,则称为过零。
短时平均过零率就是样本数值改变符号的次数。
发音时声带不震动、送气的叫清辅音;
发音时声带震动、不送气的叫浊辅音。
在美国英语里面,发清辅音的字母有:p、t、k、c、q、f、s(在词首或词中,前或后接清辅音),th(在实词中)、sh、h、ch、tch、ts、tr、wh
分别读入不同的语音文件进行分析
实现代码
%短时平均过零率
clear all; clc; close all;
[xx,Fs]=audioread('C2_2_y.wav');% 读入数据文件
x=xx-mean(xx); % 消除直流分量
wlen=200; inc=80; % 设置帧长、帧移
win=hanning(wlen); % 窗函数
N=length(x); % 求数据长度
X=enframe(x,win,inc)'; % 分帧
fn=size(X,2); % 获取帧数
zcr1=zeros(1,fn); % 初始化
for i=1:fn
z=X(:,i); % 取得一帧数据
for j=1: (wlen-1) % 在一帧内寻找过零点
if z(j)* z(j+1)< 0 % 判断是否为过零点
zcr1(i)=zcr1(i)+1; % 是过零点,记录1次
end
end
end
time=(0:N-1)/Fs; % 计算时间坐标
frameTime=frame2time(fn,wlen,inc,Fs); % 求出每帧对应的时间
% 作图
subplot 211; plot(time,x,'b'); grid;
title('语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']);
subplot 212; plot(frameTime,zcr1,'b'); grid;
title('短时平均过零率');
ylabel('过零率'); xlabel(['时间/s' 10 '(b)']);
运行结果
画出语音“朝辞白帝彩云间”的平均短时过零率
实现代码
%短时平均过零率
clear all; clc; close all;
[xx,Fs]=audioread('C6_2_y.wav');% 读入数据文件
x=xx-mean(xx); % 消除直流分量
wlen=200; inc=80; % 设置帧长、帧移
win=hanning(wlen); % 窗函数
N=length(x); % 求数据长度
X=enframe(x,win,inc)'; % 分帧
fn=size(X,2); % 获取帧数
zcr1=zeros(1,fn); % 初始化
for i=1:fn
z=X(:,i); % 取得一帧数据
for j=1: (wlen-1) % 在一帧内寻找过零点
if z(j)* z(j+1)< 0 % 判断是否为过零点
zcr1(i)=zcr1(i)+1; % 是过零点,记录1次
end
end
end
time=(0:N-1)/Fs; % 计算时间坐标
frameTime=frame2time(fn,wlen,inc,Fs); % 求出每帧对应的时间
% 作图
subplot 211; plot(time,x,'b'); grid;
title('语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']);
subplot 212; plot(frameTime,zcr1,'b'); grid;
title('短时平均过零率');
ylabel('过零率'); xlabel(['时间/s' 10 '(b)']);
运行结果
2.验证窗函数
三种窗函数的主瓣宽度B和第一旁瓣衰减A
主瓣宽度B为幅值下降3dB时的宽度
△w是谱分析时的角频率分辨率。从表中可看出,矩形窗主瓣的宽度最窄,但第一旁瓣的衰减最小。也就是说,它的频谱泄漏要比另外两种窗函数大。在语音分析中,可根据不同的情况选择不同的窗函数。
实现代码
%矩形窗的幅频响应曲线, 窗长M=32
clc; close all;
w=linspace(-pi,pi,501); %linspace用于产生-pi,pi之间的501点行线性的矢量
% 窗长=32
M=51; n=0:M;
x1=ones(1,length(n)); %矩形窗计算函数
X1=dtft(x1,n,w); %求离散时间傅里叶变换
magX1=abs(X1); %归一化处理
magX1=magX1/max(magX1);
% 海宁窗的幅频响应曲线
% M = 32
x2=0.5*(1-cos((2*pi*n)/(M-1))); %海宁窗计算函数
X2=dtft(x2,n,w);
magX2=abs(X2);
magX2=magX2/max(magX2);
% 汉明窗的幅频响应曲线
% M = 32
x3=0.54-0.46*cos((2*pi*n)/(M-1));
X3=dtft(x3,n,w);
magX3=abs(X3);
magX3=magX3/max(magX3); %汉明窗计算函数
%画矩形窗的幅频响应
subplot(311)
plot(w/pi,20*log10(magX1));
axis([-1 1 -80 0]);
ylabel('|X|');
title(['矩形窗M=32的的幅频响应']);
%画汉明窗的幅频响应
subplot(312)
plot(w/pi,20*log10(magX3));
axis([-1 1 -80 0]);
ylabel('|X|');
title(['汉明窗M = 32的幅频响应']);
%画海宁窗的幅频响应
subplot(313)
plot(w/pi,20*log10(magX2));
axis([-1 1 -80 0]);
ylabel('|X|');
title(['海宁窗M = 32的幅频响应']);
function [ X ] = dtft( x,n,w )
% 计算离散时间傅里叶变换
% [X] = dtft(x,n,w)
% X = DTFT values computed at w.frequencies
% x = finite duration sequence over n
% n = sample position vector
% w = frequency location vector
X = x*exp(-1j*n'*w);%傅里叶变换
end
3.语音的同态处理、复倒谱、倒谱
同态处理
同态处理是一种设法将非线性问题转化为线性问题来进行处理的方法,它能将两个通过乘法或卷积合成的信号分开。
语音信号x(n)可以看作是声门激励信号x1(n)和声道冲激响应x2(n)的卷积,即
x ( n ) = x 1 ( n ) ∗ x 2 ( n ) x(n)=x_{1}(n) * x_{2}(n) x(n)=x1(n)∗x2(n)
同态系统由两个特征子系统和一个线性子系统组成:
第一个子系统是将卷积性信号转换为加