语音信号处理基础(八)——同态处理、倒谱、复倒谱

本文介绍了语音信号处理中的关键概念,包括短时过零率验证、窗函数的选择,以及同态处理、倒谱和复倒谱的原理与应用。通过实例展示了如何分析语音的过零率,验证不同窗函数的效果,并详细解释了同态处理如何将非线性问题转化为线性问题。此外,文章讨论了倒谱分析在清音和浊音判断、基音周期估计中的作用,以及复倒谱在消除语音混响和回声中的应用。
摘要由CSDN通过智能技术生成

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)
同态系统由两个特征子系统和一个线性子系统组成:

第一个子系统是将卷积性信号转换为加

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值