根据对语音产生的机理的研究可知,语音信号x(n)可看作是声门激励信号x1(n)和声道冲激响应信号x2(n)的卷积,即
为了便于处理各卷积信号,系统通常采用同态处理的方法进行解卷积,即将卷积关系变为求和关系,分离参与卷积的各个信号。一般同态系统可分解为三个部分,如图所示。
如图所示,系统包含两个特征子系统(取决于信号的组合规则)和一个线性子系统(取决于处理的要求)。图中,符号*、+和 · 分别表示卷积、加法和乘法运算。第一个子系统完成将卷积性信号转化为加性信号的运算,即对于信号x(n)=x1(n)*x2(n)进行如下运算处理:
第二个子系统是一个普通线性系统,满足线性叠加原理,用于对加性信号进行线性变换。由于为加性信号,所以第二个子系统可对其进行需要的线性处理得到。
第三个子系统是逆特征系统,它对进行逆变换,使其恢复为卷积性信号,处理如下:
由此可知,通过第一个子系统,可以将x(n)=x1(n)*x2(n)变换为。此时,如果与处于不同的位置并且互不交替,那么适当地设计线性系统,便可将x1(n)与x2(n)分离开来。
在和系统中,和信号也是时域序列,但是它们与x(n)和y(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)']);
运行结果如下:
参考文献:
语音信号处理实验教程;梁瑞宇、赵力、魏昕(编著)
MATLAB语音信号分析与合成(第二版);宋知用(编著)