连续语音信号的短时倒谱分析及其参数用途

本文详细介绍了语音信号的倒谱分析,包括倒谱的基本概念、计算过程、倒谱参数(如MFCC、LPCC、LPMFCC)以及在语音识别和端点检测中的应用。通过实例展示了如何使用MATLAB进行相关计算,并探讨了各种倒谱系数的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这段时间一直在学习语音信号倒谱分析的相关内容,由于倒谱分析在语音信号处理中应用广泛,导致学习过程中知识点太散、太凌乱,所以自己集中整理了一下倒谱分析在语音信号处理中的一些应用。虽然不全,但是内容量也挺多,那么这次就做一次详细的知识分享吧。
!!!!!!!!!!打个预防针先,内容比较长,希望耐心看完!!!!!!!

基本概念

在学习之前,必须弄清楚几个概念:
什么是倒谱分析?为什么要进行倒谱分析?什么是倒谱?以及倒谱分析有什么用?
首先,对于任意给定的一段语音信号,我们都希望从中获取一些“感兴趣的参数”来做一些处理。最基本的操作就是从时频域进行观察,可以得到时域图和它对应的频谱图或者是语谱图(声纹)。除了这两个处理域之外,还可以从倒谱域进行观察。倒谱分析属于“同态处理”,也叫同态滤波。简单理解就是将卷积关系变换为加性关系,是一个“解卷积”的过程。那么为什么要进行这一转化?
因为目前对连续语音信号分析的基础就是短时分析,将一段语音分成一帧帧信号进行处理。对于一帧语音信号,我们可以认为是平稳的,即在10~30ms内认为信号不发生变化。既然是平稳的,就可以认为一帧语音信号是经过线性时不变系统的输出,即由声门的激励信号与声道冲击响应经过卷积运算形成。相反,如果能够进行卷积的逆运算就能够分离出声门的激励信号和声道冲击响应,而同态处理就是实现“解卷积”的过程,因此倒谱分析也就是为了从语音信号中分离出声门的激励信号和声道冲击响应。那么另一个问题来了,分离出这两个参数要干嘛?
首先必须明白这两个参数是什么?第一、声门激励脉冲信号很好理解就是输入信号。对于经典语音信号模型,语音信号被看成是随机噪声或准周期脉冲序列激励线性时不变系统的输出。当发不同性质的音时,激励情况是不同的。大致上可以分成浊音和清音两种(所有的音)。当发浊音时,可以看成是准周期脉冲序列去激励系统产生输出。发清音则是另一种。对于汉语而言,每个字由声母和韵母组成,其中声母绝大部分为清音,而韵母为浊音,并且韵母还包含声调,具有语义辨识作用,因此对韵母分析具有重要意义。
是不是绕晕了,总结一下。对于汉语而言,我们更多关注韵母部分,韵母是发浊音,而浊音是由准周期脉冲序列激励产生的。也就是说如果我们能够获取发浊音时的准周期脉冲序列的基音周期,就可以人为的合成语音了。因此,分离出的声门激励脉冲信号主要是用来提取发浊音时的基音周期。当有了准确的基音周期之后就可以用来进行语音识别或者是语音合成。
第二,声道冲击响应顾名思义就是包含了声道信息。声道可以被看成是一根具有非均匀截面的声管,在发音的时候将起共鸣器的作用。简单理解就是当激励信号输入到声道中会引起不同的共振特性,产生一组共振频率,也就是共振峰。共振峰是区别不同韵母的重要参数。根据上文可知,对于汉语,不同的韵母代表不同的字。因此,分离出的声道冲击响应主要用来提取共振峰。有了共振峰就可以区别不同的韵母,即识别出不同的汉字,故可以用来做语音识别或者语音合成。
总结
语音信号的倒谱分析就是用来“解卷积”,将声门激励信号和声道冲击响应从语音信号中分离出来,从而提取相应参数的过程。

倒谱和倒谱参数

1、倒谱

在语音信号处理中,倒谱一般是指信号的对数实幅值谱的逆傅里叶变换,是实倒谱;其量纲是倒频率,单位是时间(s)。其运算过程如下:
在这里插入图片描述

首先,经过傅里叶变换由时域的卷积变到频域的相乘,在经过取模(取实数部分)取对数,由乘性关系变为加性关系;最后经过逆傅里叶变换,还原到时域,实现声门激励脉冲与声道冲激响应的分离。注意:这里的“时域”仅仅是广义上而言的,单位是时间。由于进行了取模运算,因此丢失了相位信息,故不能和时域完全等同,命名为倒谱域

2、复倒谱

与倒谱相对就有所谓的复倒谱。复倒谱也叫对数复倒谱,没有经过取模运算,其他与倒谱过程一致,因此保留着相位信息。复倒谱与倒谱的关系就是:复倒谱是爹,可以由复倒谱推导倒谱;但是不能反着来。
复倒谱主要用来消除语音信号中的混响和回声,用来做语音增强。可以参照以下论文,解释的很详细。简单理解就是,在复倒谱域纯净语音信号分布在靠近原点的位置,而回声的冲激响应分布在远离原点的位置。可以利用这个差异设计复倒谱域上的“低通”滤波器,从而保留纯净语音信号,消除回声和混响。
文献《复倒谱域语音信号去混响研究》
计算:MATLAB自带了函数可用于直接计算复倒谱,当然也可以根据上文的流程图,逐步编写程序。

[xhat,nd]=cceps(x);%xhat为计算得到的复倒谱,是实序列;
%nd是单位圆延迟,用以保证具有零相位

3、倒谱计算

为了和下面的其他参数进行区分,在此对倒谱参数进行限定,这里主要讨论原语音信号的倒谱。
原语音信号的倒谱计算比较简单,可以采用上面的流程图进行编程操作,或者利用自带的函数进行计算。两种方式的结果肯定是相同的。如下所示:

% %---------------------方法1---------------% %
y1=fft(s1);
y2=log(abs(y1));
y3=ifft(y2);
% %--------------------方法2---------------% %
[xh2,yh2]=rceps(s1);%原信号的倒谱,xh2为倒谱,yh2为最小相位重构

仿真结果:
在这里插入图片描述
结论:这两种方法计算得到的结果一样,在此一帧语音信号取了10ms。进一步观察可以发现,此时已经将声门激励信号和声道冲激响应分开。且声道冲激响应在前(黑色矩形框),声门激励信号在后(红色椭圆),因为具有周期特性
用途:将经过倒谱运算分离出来的声门激励信号和声道冲激响应用来提取其他参数。

(1)、由声门激励信号提取基音周期

由于基音频率的范围分布在60~500HZ内,所以只要在这个频段内找倒谱上的峰值即可。但是需要完成频域到倒频域的转换。代码如下:

% %--------------------提取基音周期---------------% %
[xh2,yh2]=rceps(s1);%原信号的倒谱
% %频域到倒频域的转换(60~500HZ)
lmin=fix(Fs/500);                           % 基音周期的最小值
lmax=fix(Fs/60);                            % 基音周期的最大值
q1=zeros(1,320);
q=xh2(lmin:lmax)';
q1(lmin:lmax)=q;%长度补齐
[r,Lc]=max(xh2(lmin:lmax));%找最大值
T0=(Lc+lmin-1)/Fs;%基音周期(加上延迟量)
F0=1/T0;%基音频率
fprintf('基音周期T0=%5.4f ms\n',T0*1e3);
fprintf('基音频率F0=%5.4f HZ\n',F0);

注意:此时对基音周期的估算仅仅取前1个周期。结果如下:
基音周期T0=4.3750 ms,
基音频率F0=228.5714 HZ。
在这里插入图片描述

结论:由图可知,在这一帧10ms语音信号中总共有两个周期。此时,仅仅取了前1个周期,并计算得到对应的基音频率和周期数值如上。

(2)、由声道冲激响应估算共振峰

这一部分的内容见下文,倒谱的频谱参数。

4、倒谱的频谱

根据上文的分析,倒谱是原语音信号的对数实幅值谱的逆傅里叶变换,因此倒谱的频谱就是原语音信号的对数实幅值谱,可以近似等效于原语音信号的频谱,仅仅多了取对数运算。但是需要与共振峰参数区分。共振峰是声道冲激响应的频谱,反映了原语音信号的包络,并认为谱包络的极大值就是共振峰。
在利用声道冲激响应估算共振峰之前需要进行预加重处理,为了将声门脉冲的影响降到最低,只留下声道信息。从上图可知,声道冲击响应分布在倒谱域靠近原点的位置,因此需要在倒频率域添加一个低通窗来提取共振峰参数。代码如下:

s1=y(:,50);%取第50帧信号(有话帧)
u=filter([1 -.99],1,s1); % 预加重
% %--------------------共振峰估算---------------% %
[xh2,yh2]=rceps(u);%原信号的倒谱
Fre=real(fft(xh2));%原信号的幅值谱
cepst=zeros(1,wlen);           
cepstL=4;%窗长(取谱线长度-折中数值)
cepst(1:cepstL)=xh2(1:cepstL);                 
cepst(end-cepstL+2:end
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值