语音信号的倒谱分析及其应用案例

根据对语音产生的机理的研究可知,语音信号x(n)可看作是声门激励信号x1(n)和声道冲激响应信号x2(n)的卷积,即 

为了便于处理各卷积信号,系统通常采用同态处理的方法进行解卷积,即将卷积关系变为求和关系,分离参与卷积的各个信号。一般同态系统可分解为三个部分,如图所示。

如图所示,系统包含两个特征子系统(取决于信号的组合规则)和一个线性子系统(取决于处理的要求)。图中,符号*、+和 · 分别表示卷积、加法和乘法运算。第一个子系统D_{*}[ ]完成将卷积性信号转化为加性信号的运算,即对于信号x(n)=x1(n)*x2(n)进行如下运算处理:

语音信号的倒谱分析及其应用案例_第1张图片
第二个子系统是一个普通线性系统,满足线性叠加原理,用于对加性信号进行线性变换。由于\hat{x}(n)为加性信号,所以第二个子系统可对其进行需要的线性处理得到\hat{y}(n)

第三个子系统是逆特征系统D_{*}^{-1}[ ],它对\hat{y}(n)=\hat{y_{1}}(n)+\hat{y_{2}}(n)进行逆变换,使其恢复为卷积性信号,处理如下:

语音信号的倒谱分析及其应用案例_第2张图片

由此可知,通过第一个子系统D_{*}[ ],可以将x(n)=x1(n)*x2(n)变换为\hat{x}(n)=\hat{x_{1}}(n)+\hat{x_{2}}(n)。此时,如果\hat{x_{1}}(n)\hat{x_{2}}(n)处于不同的位置并且互不交替,那么适当地设计线性系统,便可将x1(n)与x2(n)分离开来。
D_{*}[ ]D_{*}^{-1}[ ]系统中,\hat{x}(n)\hat{y}(n)信号也是时域序列,但是它们与x(n)和y(n)所处的
离散时域不同,称为复倒频谱域。\hat{x}(n)是x(n)的复倒频谱域,简称复倒谱。其表达式如下:

MATLAB工具箱为倒谱计算提供了三个函数:
1)cceps函数——计算复倒谱
调用格式:
[xhat,nd]=cceps(x)
说明:x是被测信号序列;xhat是实信号序列x的复倒谱;nd是为了保证频率m处具有
零相位特性而对信号x所做的单位圆延迟。
2)rceps函数——计算实倒谱
调用格式:
[xh,yh]=rceps(x)
说明:x是被测信号序列;xh是实信号序列x的实倒谱;yh是最小相位重构序列。
3)icceps函数——计算逆复倒谱
调用格式:
xh =icceps(xhat,nd)
说明:xh是复倒谱xhat的逆变换;nd为所要去除的时间延迟。

案例、从sul.txt中读入语音数据,信号的采样频率为16000Hz,计算信号的倒谱,并从中把语音的声门激励信号和声道冲激响应分离,分别得到声门激励信号的频谱和声道冲激响应的频谱。

程序如下:

clear all; clc; close all;
y=load('su1.txt');                            % 读入数据
fs=16000; nfft=1024;                          % 采样频率和FFT的长度
time=(0:nfft-1)/fs;                           % 时间刻度
figure(1), subplot 211; plot(time,y,'k');     % 画出信号波形
title('信号波形'); axis([0 max(time) -0.7 0.7]);
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']); grid;
figure(2)
nn=1:nfft/2; ff=(nn-1)*fs/nfft;               % 计算频率刻度
Y=log(abs(fft(y)));                           % 按式(3-1-8)取实数部分
subplot 211; plot(ff,Y(nn),'k'); hold on;     % 画出信号的频谱图
z=ifft(Y);                                    % 按式(3-1-8)求取倒谱
figure(1), subplot 212; plot(time,z,'k');     % 画出倒谱图
title('信号倒谱图'); axis([0 time(512) -0.2 0.2]); grid; 
ylabel('幅值'); xlabel(['倒频率/s' 10 '(b)']);
mcep=29;                                      % 分离声门激励脉冲和声道冲激响应
zy=z(1:mcep+1);
zy=[zy' zeros(1,nfft-2*mcep-1) zy(end:-1:2)']; % 构建声道冲激响应的倒谱序列
ZY=fft(zy);                                   % 计算声道冲激响应的频谱
figure(2),                                    % 画出声道冲激响应的频谱,用灰线表示
line(ff,real(ZY(nn)),'color',[.6 .6 .6],'linewidth',3);
grid; hold off; ylim([-4 5]);
title('信号频谱(黑线)和声道冲激响频谱(灰线)')
ylabel('幅值'); xlabel(['频率/Hz' 10 '(a)']); 

ft=[zeros(1,mcep+1) z(mcep+2:end-mcep)' zeros(1,mcep)]; % 构建声门激励脉冲的倒谱序列
FT=fft(ft);                                  % 计算声门激励脉冲的频谱
subplot 212; plot(ff,real(FT(nn)),'k'); grid;% 画出声门激励脉冲的频谱
title('声门激励脉冲频谱')
ylabel('幅值'); xlabel(['频率/Hz' 10 '(b)']); 

 运行结果如下:

 语音信号的倒谱分析及其应用案例_第3张图片

语音信号的倒谱分析及其应用案例_第4张图片

参考文献:

语音信号处理实验教程;梁瑞宇、赵力、魏昕(编著) 

MATLAB语音信号分析与合成(第二版);宋知用(编著)

你可能感兴趣的:(语音识别,人工智能)