2019-03-13 16:31:16 weiqiwu1986 阅读数 3324
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    29891 人正在学习 去看看 张中强

噪声问题一直是语音识别的一个老大难的问题,在理想的实验室的环境下,识别效果已经非常好了,之前听很多音频算法工程师抱怨,在给识别做降噪时,经常发现WER不降反升,降低了识别率,有点莫名其妙,又无处下手。

  刚好,前段时间调到了AIlab部门,有机会接触这块,改善语音识别的噪声问题,虽然在此之前,询问过同行业的朋友,单通道近场下,基本没有太大作用,有时反而起到反作用,但是自己还是想亲身实践一下,至少找到这些方法失效的原因,看看是否在这些失败的原因里面,改进下思路,可能有新的发现;同时去Ailab,顺带把深度学习降噪实践一把,就算在ASR没有效果,以后还能用在语音通信这个领域。

  任务的要求是保证声学模型不变动的情况下,即不重新训练声学模型,即单纯利用降噪来改善那些环境恶劣的样本,同时保证不干扰纯净语音或者弱噪声的语音场景,所以非常具有挑战性。

  为了赶项目,用自己非常熟悉的各种传统的降噪方法:包括最小值跟踪噪声估计,MCRA, IMCRA,等各种噪声估计方法,以及开源项目 webrtc NS, AFE(ETSI ES 202 050 Advanced DSR Front-end Codec, two stages of Wiener filtering),剩下的任务就是调参,经过很多次努力,基本没有什么效果,相反WER还会有1%点左右的增加。

分析对比了降噪和没有降噪的识别文本对比和频谱分析,总结了以下这些原因,希望对后面的人有些参考意义:

  1.DNN本身就有很强的抗噪性,在弱噪声和纯净语音下,基本都不是问题。

通常场景下,这点噪声,用线上数据或者刻意加噪训练,是完全可以吸收掉的,只有在20db以下,含噪样本的频谱特征和纯净样本的频谱特征差异太大,用模型学习收敛就不太好,这时需要降噪前端。

  2.降噪对于纯净语音或者弱噪声环境下,不可避免的对语音有所损伤,只有在恶劣的环境下,会起到非常明显的作用。

传统降噪是基于统计意义上面的一个处理,难以做到瞬时噪声的精准估计,这个本身就是一个近似的,粗略模糊化的一个处理,即不可避免的对噪声欠估计或者过估计,本身难把握,保真语音,只去噪,如果噪声水平很弱,这个降噪也没有什么用或者说没有明显作用,去噪力度大了,又会破坏语音。可以预见,根据测试集进行调参,就像是在绳子上面玩杂技。

我们的测试样本集,90%的样本都在在20db以上,只有200来条的样子,环境比较恶劣。所以通常起来反作用。

  3.降噪里面的很多平滑处理,是有利于改善听感的,但是频谱也变得模糊,这些特征是否能落到正确的类别空间里面,也是存在疑问的。所以在前端降噪的基础上,再过一遍声学模型重新训练,应该是有所作用的,但是训练一个声学模型都要10来天,损失太大,也不满足任务要求。

  4. 传统降噪,通常噪声初始化会利用初始的前几帧,而如果开头是语音,那就会失真很明显。

  5.估计出噪声水平,在SNR低的情况下降噪,SNR高时,不处理或者进行弱处理,在中间水平,进行软处理,这个思路似乎可以行的通。

  6.用基于声学特征的传统降噪方法,尝试过,在测试集里面,有不到1%的WER降低。

  7.到底用什么量来指导降噪过程?既然降噪没法做好很好的跟踪,处理的很理想。即不可能处理的很干净,同时不能保证语音分量不会被损伤,即降噪和保证语音分量是个相互矛盾,同时也是一个权衡问题。那其实换个角度,降噪主要是改善了声学特征,让原来受噪声影响错分类的音素落到正确的音素类别,即降低CE。那么应该直接将降噪和CE做个关联,用CE指导降噪过程参数的自适应变化,在一个有代表性的数据集里面,有统计意义上的效果,可能不一定能改善听感,处理的很干净,但是在整体意义上,有能改善识别的。所以说语音去噪模块必须要和声学前端联合起来优化,目标是将去噪后的数据投影到声学模块接受的数据空间,而不是改善听感,即优化的目标是降低声学模型的CE,或者说是降低整条链路的wer,所以用降噪网络的LOSS除了本身的损失量,还应绑定CE的LOSS自适应去训练学习是比较合理的方案。也可以将降噪网络看成和声学模型是一个大网络,为CE服务,当然,这不一定是降噪网络,也可以是传统的自适应降噪方法,但是如果是基于kaldi开发,里面涉及到的工程量是很大的。

  8.在整个语音识别体系中,由于声学模型的强抗噪性,所以单通道下的前端降噪似乎没有什么意义,1%左右的wer的改变,基本不影响整个大局,所以想要搞识别这块的朋友,应该先把重要的声学模型,语言模型,解码器,搞完之后,再来撸撸这块,因为即便没有单独的前端,整个识别大多数场景都是OK的,恶劣的场景比较少,一般场景大不了扩增各种带噪数据训练,大不了扩增各种带噪数据,也是可以的。

我们的线上数据,影响识别的因素排序是口语化,方言,短词,其次才是噪声,另外,少量混响,语速,音量,也是影响因素之一,以上是自己的一点片面之言,希望对大家有参考意义,少走弯路。

 

2019-05-16 14:37:08 qq_43019717 阅读数 1103
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    29891 人正在学习 去看看 张中强

大家好,上期小君给大家分享了语速对语音引擎识别的影响,相信大家对语速对识别的影响有了初步的认识。经过一个多月的调研,小君本期给各位带来了一次新的评测,即科大讯飞,百度,思必驰,云知声四家语音引擎在降噪性能上的差异。
本次评测主要是对比每家语音识别引擎降噪性能,采取将语音文件直接送接口的方式进行测试,接口同样是基于各家公司给广大语音开发爱好者提供的开源开发接口。
测试语音信息详情如下:
• 音频编码格式:wav
• 音频采样率:16000Hz
• 文本字数:每条平均8字左右,共计1586字。
• 音频分类:安静环境下音频、SNR=15环境下音频、SNR=5环境下音频(SNR为信噪比)
• 音频领域:手机基本操作,领域涉及有常用应用,导航,音乐,天气,设置,日期6个领域,共计200条
• 音频信息:北方自然语速,男女比例1:1,共计20人
• 噪音合成:采取噪音合成的方式对纯净音频进行加噪
• 噪音:中文歌曲

展示一下文本样例:

  1. 导航领域:请帮我绕开从王府井到西单的拥堵地段
  2. 设置领域:设置每周一早上7点的闹钟
  3. 手机基本操作领域:发短信给小明

由于本次测试采取的是直接将数据送入识别接口的方式进行,没有类似于终端产品对整个环境的收音模块,所以噪音不能直接以播放的方式进行增加,但咱们还得测试不同信噪比下的数据呢,难不倒小君的,小君有噪音合成工具!可以将选定的噪音数据与语音数据进行,且SNR可设定,问题解决,而且还能更好的保证噪音数据一致性!
语音识别引擎在噪音消除方面的性能好坏会基于产品的定位,对不同的噪音也会有不同的处理方式,本次小君选取噪音集为常用噪音集,中文歌曲;由于本次测试专注于降噪算法的对比,为了减少变量、保证数据一致性,选取的语音数据为消音室录制的语料。

测试数据的信息大家了解的差不多了,那让我们来看一下对比结果,来分析各引擎的优缺点吧。
首先我们通过识别引擎在不同噪音环境下进行识别率的对比,通过下图数据可以看出科大讯飞和思必驰在三种环境下识别率差异不大,识别率从安静环境到SNR=5环境下降了1%左右,表现较好。百度在安静条件的语音识别率达到了97.51%,SNR=15时识别率为96.35%,SNR=5时降到了81.26%,可以看出随着噪音声压级的增大,百度识别引擎的降噪算法性能出现了大幅度的下降;云之声则时安静条件到SNR=15时下降幅度较大,从94.41%下降到了89.78%。SNR=15到SNR=5时的识别率下降幅度较小。

然后再对四款语音识别引擎间进行识别率的对比,可以看出安静条件下,云之声较其他三款产品的识别率最低,识别率为94.41%;SNR=15时,科大讯飞和思必驰表现较好,云之声相对较差,识别率为89.78%;随着背景噪音声压级的增大,在SNR=5时,百度识别率下降幅度较大,下降到81.26%,云之声同样较差,识别率为87.33%。测试详细数据如下:
在这里插入图片描述
在这里插入图片描述
(备注:以上测评结果仅基于本次验证集)

综合以上两方面的对比,基于本次测试数据的测试结果可以看出,科大讯飞和思必驰在降噪处理方面综合表现较好,百度和云之声在该方面则表现较差。
另外小君在本次测试过程中发现一个有趣的现象,思必驰识别引擎在安静条件下要比SNR=15时的识别率要低0.19%。为了搞清楚这0.19%的差距在哪,小君将两组测试结果分别对比,发现差异并不大,仅有6条语音的识别结果存在差异,主要体现在安静条件下的替换错误增加,而SNR=15条件下插入错误增加,下面列举一下部分识别结果供大家参考。
在这里插入图片描述

本次小君仅从中文音乐噪音的消除性能方面对四款公开的识别引擎进行了对比,不作为评价四款识别引擎降噪性能好坏的评价标准。因为仅仅是音乐噪音又区分了不同的语言、高中低频等,如果您想了解识别引擎的整体降噪性能,需要多个维度进行测评,对语音识别引擎降噪算法的测试感兴趣的话,可以随时联系小君,小君表示热烈欢迎。

2015-05-24 17:38:46 xiaoding133 阅读数 4277
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    29891 人正在学习 去看看 张中强

              本文主要采用matlab和C语言设计并实现了一个鲁棒性语音识别实验系统,通过该系统验证各种抗噪语音特征在不同信噪比的噪声环境下的识别率,并详细介绍了系统的结构以及开发工具与平台,最后介绍了系统的功能、实验流程以及该系统的实现。

系统演示下载路径:http://pan.baidu.com/s/1o61Kaa2

一、系统结构

        本文研究的是非特定人鲁棒性语音识别,采用的是小词汇量孤立词语音。本系统使用了两种语音识别模型,分别为HMM模型和VQ模型。在系统中,利用HMM模型进行抗噪鲁棒性语音识别,采用VQ模型进行SLVQ算法的评估。通过语音库的训练得到识别模型,然后对待测试语音进行识别。其系统结构如图1-1。


图1-1系统结构图

在图1-1所示的结构图中,语音预处理与特征和模型训练器是整个系统的核心。特征提取是训练器的前提,同时也是识别器的前提。语音采集模块完成录音,可以作为语音库来训练识别模型。结果输出模块主要用于将中间识别结果以及系统其他状态信息显示出来。

二、开发工具与平台

本文的语音识别系统在PC上,采用Matlab(R2010b)作为开发工具。语音识别模型HMM采用PMT(Probabilistic Model Toolkit)[97]工具包进行二次开发。下面简单介绍下Matlab和PMT。

Matlab是一个功能强大的科学及工程计算工具,它将矩阵运算、数值分析、图形处理、编程技术等功能有机地结合在一起,被广泛应用于自动控制、系统仿真、图形图像分析、数字信号处理、人工智能、虚拟现实等领域。本系统采用Matlab的主要原因如下:

(1) 丰富的数学函数库;Matlab包含了大量的数学函数库,有求和、复数运算、矩阵运算以及傅里叶变换等函数,这些都为语音信号的处理带来了方便。

(2) 强大的图形功能;它提供了丰富的图形函数库,用一些简单的命令就可以完成多维数据的显示以及图像处理,也可以完成图形用户界面的设计,很方便地完成自己的运算和控制代码。

(3) 应用程序接口(API);它提供了应用程序接口函数库,允许用户使用C或C++语言编写程序与Matlab连接,本系统多处采用C语言编写的程序,采用MEX接口调用,弥补了Matlab速度慢的缺点。

PMT工具包是惠普开发公司提供的一个Matlab和C语言编写的概率模型包,它可以用来建立基本的静态和动态概率模型,目前支持的概率模型包括高斯混合、马尔可夫链、隐马尔可夫模型、线性动态系统等。对于每个概率模型都包括推理、学习的函数,采用最大似然估计来计算模型参数。由于工具包中很多核心函数是采用C语言编写的,提高了运行速度并且可以进行功能扩展。

2.1C-MEX技术

所谓MEX是Matlab Executable的缩写,即Matlab的可执行程序。在Windows操作系统中,它是以DLL为后缀名的文件。MEX文件是Matlab调用其他语言编写的程序算法接口。通过它,用户可以完成以下功能[98]

(1)代码重用

可以在Matlab系统中像调用Matlab的内在函数一样调用已经存在的用C语言或C++语言编写完成的算法,通过添加入口程序mexFunciton,而无须将这些函数重新编写为Matlab的M文件,从而使资源得到充分利用。

(2)速度提升

当需要进行大量的数据处理时,Matlab的执行效率往往比较低,这时可以使用其他高级编程语言进行算法的设计,然后在Matlab环境中调用,从而大幅度提高数据处理的速度。在Matlab中,可以把含有大量循环迭代的代码用C语言代替,然后编译为MEX文件。

(3)功能扩展

通过MEX文件,用户可以服Matlab对硬件访问功能不足的缺点直接对硬件进行编程,如A/D采集,D/A输出卡等,以用于数据采集或控制,进一步扩展Matlab的应用领域。

2.2MEX文件结构与执行流程

MEX文件由两个部分组成,一部分是对mex.h头文件进行包含,该文件定义了矩阵的相关操作,另一部分是入口子程序,其构成形式如下:

void  mexFunciton(int nlhs,mxArray *plhs[],intnrhs,const mxArray *prhs[]);

该函数包括四个参数,从右往左分别为一个mxArray结构体类型的指针数组prhs,该数组指向所有的输入参数;整数类型的nrhs,表示输入参数的个数;一个mxArray类型的指针数组plhs,它指向所有的输出参数;nlhs标明了输出参数的个数,为整数类型。这些参数是用来传递Matlab启动MEX文件的参数。

在该入口函数中,用户主要完成两个方面的任务。一方面,从输入的mxArray结构体中获取计算完毕的数据,然后在用户子程序中利用。另一方面,用户可以将计算完毕的结果返回给一个用于输出的mxArray的结构体,这样Matlab系统就能够识别从用户计算子程序返回的结果。

 MEX文件的执行流程图如下:


图2-2 MEX文件执行流程图

三、系统实现

系统的运行主界面如图3-3所示。从运行主界面图可以看到,系统分为四个部分:数据集区、参数设置区、结果输出区和识别控制区。下面分别介绍这四个部分。

1、数据集区:它包括新增词汇、删除词汇及语音、语音录制以及载入训练集。新增词汇和删除词汇主要为训练语音库和测试语音库增加和删除新的类别。录制语音主要为各词汇采集语音文件,用于训练和识别。录制语音界面如图3-4。

2、参数设置区:它包括特征提取参数设置、端点检测参数设置、识别器参数设置。在特征参数类型中可选择并实现了的参数有MFCC、DAS-MFCC、RASTA-PLP、PNCC、APNSCC等。端点检测参数设置主要包括是否使用端点检测以及检查方法,本系统暂不考虑端点检测给识别结果带来的影响。识别器参数设置包括识别方法的选择(VQ 、HMM)及它们的参数设置(如HMM状态个数、高斯分量数)。

图3-3 系统主界面图


图3-4 声音录制界面

3、结果输出区:主要用于输出系统操作状态信息以及识别结果信息等。

4、识别控制区:主要用于选择识别方式,主要分为测试语音数据识别、训练语音数据识别、单文件语音数据识别、批量语音数据识别、和实时语音识别(包含噪声语音识别)。测试语音数据和训练语音数据识别选项分别表示对所选数据库中的测试语音集合和训练语音集合进行识别,然后在输出模块输出该数据集的正确识别率。单语音识别对单个语音文件进行识别,给出识别结果。批量语音识别对多个语音进行识别,然后输出正确识别率(前提是这些语音文件已经加标签分类)。实时语音识别界面如图3-5所示:


图3-5 实时语音识别界面

在图3-5中,开始按钮用于实时声音采集,然后将识别结果显示在输出框,单击停止按钮,中断信号的采集。除此之外,也可以采用单文件语音识别,选择要识别的语音文件,然后单击确定按钮就可以将识别结果输出在下面。实时语音识别和单文件语音识别都可以选择是否加噪,并且可以选择不同信噪比的多种噪声类型。由于实时声音采集识别速度比较慢并且不好控制环境噪声,这里实验采用事先录制好的单文件语音识别,然后加入各种不同的噪声。

系统的流程图如图3-6所示:


图3-6 系统流程图

从图3-6可以看到,本系统的流程大致分为两部分:第一部分是直接利用现有数据库进行训练识别模型进行实验,然后保存识别模型;第二部分是载入已经保存的模型来进行实验。通过该系统可以很方便地进行鲁棒性的语音识别实验。


系统实验演示见http://pan.baidu.com/s/1o61Kaa2

四、本系统提出的一种改进的抗噪语音特征参数APNSCC提取流程



APNSCC特征参数提取主要代码,分为六步
wave2APNSCC (data)
{data为语音信号;
1.语音信号预处理
yPreEmp = filter([1, -FP.preEmCoef], 1, data);预加重
[framedY,Nframe]= buffer2(yPreEmp, FP.frameSize, FP.overlap);分帧
2.计算自相关序列
for k=1:Nframe
     [c,lags]=xcorr(framedY(:,k),lag, 'unbiased');计算无偏自相关序列
     Rp(:,k)=c(lag+1:end);
end
3.自相关序列滤波与Gammatone功率谱计算
Rp1=Rp; L=2; 滤波器长度 
for i=L+1:Nframe-L
    Rp1(:,i)=(-2*Rp(:,i-2)-Rp(:,i-1)+Rp(:,i+1)+2*Rp(:,i+2))/10;
end
aad_H=ComputeFilterResponse(iNumFilts,iFFTSize,dLowFreq,dHighFreq,dSampRate);
aad_H = abs(NormalizeGammaGain(aad_H, dSampRate));  计算Gammatone滤波器响应
adSpec=fft(Rp,iFFTSize,1);
 ad_X=abs(adSpec);
 fftMag=ad_X(1:iFFTSize/2,:);
for j = 1 : iNumFilts
aad_P(:, j)  = sum((fftMag.* repmat(aad_H(:, j),1,Nframe)) .^ 2)'; 
end
4.非对称滤波
aad_PBias = aad_Q* 0.9; 按照公式(4.15)进行滤波
for j=1:Nframe
   for i = 1 : iNumFilts,   
    if (aad_Q(j,i) > aad_PBias(j,i))
aad_PBias(j,i) = FP.dLamda * aad_PBias(j,i)  + (1 - FP.dLamda) * aad_Q(j,i);
    else
   aad_PBias(j,i) = FP.dLamdb * aad_PBias(j,i) + (1 - FP.dLamdb) * aad_Q(j,i);
    end
   end
end
aad_QS=aad_Q - aad_PBias; 
5.计算倒谱及频谱差分
aadSpec = aad_QHR .^1/ 15
 aadDCT= dct(aadSpec')';计算倒谱系数
[Cdelta,Cddelta] = specD(aad_QHR', deltaWindow, FP.ApnsccNum); 计算频谱差分
6.计算Gammatone谱熵
 H=ComputeEntroy(aad_P',1);  H= heq1(H);直方图均衡化


2019-05-21 10:32:30 weixin_43476455 阅读数 229
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    29891 人正在学习 去看看 张中强

AID.Speech是以Tengine-Lite为平台的嵌入式前端语音唤醒/打断算法,它可以在Arm Cortex-M4上流畅运行,适用于各种语音交互的IoT场景;包含,行业领先的语音识别算法;优秀的单麦本地语音解决方案 ,具体有语音降噪算法,语音活性检测算法,声学回声消除算法等。

 

Tengine-Lite 简介

Tengine-Lite是专为MCU场景设计的超轻量级AI推理框架,提供有史以来最佳的MCU AI应用开发体验。

Tengine-Lite向上兼容Arm中国周易Tengine应用接口,支持Caffe/MXNet/TensorFlow模型,采用程序与模型分离的开发流程,支持常见RTOS操作系统和Bare-metal运行环境,支持Keil/IAR等主流开发环境,大幅度提高MCU AI应用开发效率。

同时为了满足超低成本的部署需求,Tengine-Lite采用纯C语言开发,最小程序体积20K。此外Tengine-Lite针对Arm Cortex-M CPU提供HCL-M计算库,支持FP32/INT8计算精度,兼容CMSIS-NN,同时支持调用DSP和AI硬件加速器进行异构计算,赋能MCU+AI加速器芯片。

 

同时AID.Speech提供友好、简洁、通用的API,可以快速部署到目标硬件平台,加速语音识别终端快速产品化落地;默认支持FreeRTOS/Zephyr操作系统,经过简单修改就适配其他操作系统;提供唤醒词的定制以及在特定产品上的效果调优服务。

语音识别算法流程

语音识别需要经过声学回声消除、语音降噪、自动增益控制、声学特征提取、语音识别等多个步骤,通过使用Tengine-Lite/HCL-M大大提升了现有嵌入式SoC的算力,使得语音识别系统可部署在各类种嵌入式设备上,并提供超预期的识别用户体验。

AID.Speech产品特性

使用Tengine Lite,极快的识别速度;

针对于不同CPU指令集、微架构级别优化,以及DSP/NPU的异构计算支持;

3 识别本地化,支持完全离线工作模式;

4 基于深度学习算法,超小模型,对内存容量要求低;

抗噪声能力强;

支持FreeRTOS/Zephyr等多种RTOS系统;

AID.Speech产品性能

AID.Speech采用多种语音前处理算法,在极大地抑制噪声的同时,适当地增强语音信号;采用回声消除算法,从输入语音中消除设备自身播放的影响,赋予设备全双工的能力。语音识别模型大小可以根据需要在50~350KB内自由选择,在保证误唤醒率<3次/天的条件下,识别率高达95%。

Cortex-M4上的性能数据

典型应用场景

AID.Speech不同环境下唤醒打断及命令词demo

视频地址:https://v.qq.com/x/page/e0872xztwzt.html

 

OPEN AI LAB 于2016年12月成立,由Arm中国联合产业伙伴发起,致力于推动芯片、算力、算法、应用和数据等产业链各层次的深度协作,加速人工智能产业化应用部署和应用场景边界拓展,为最终实现万物智能贡献力量。更多:http://www.openailab.com/?csdn0521

2018-11-05 10:54:40 weixin_38858860 阅读数 176
  • Java经典算法讲解

    在面试中,算法题目是必须的,通过算法能够看出一个程序员的编程思维,考察对复杂问题的设计与分析能力,对问题的严谨性都能够体现出来。一个算法的好坏,直接影响一个方法调用的性能,进而影响软件的整体性能。算法是学习所有编程语言的基础,在Java的学习过程中首先也会选择以算法起步,本次课程重点讲解Java开发中常用的基本算法。

    29891 人正在学习 去看看 张中强

   通过两方面提高说话人识别系统环境的鲁棒性:(1)在特征参数提取的过程中加入一些提高噪声鲁棒性的措施,如采用自相关去噪处理(RAS)等技术,或通过选取具有强耐噪性的特征参数来提高鲁棒性;(2)在模型训练过程中加入提高鲁棒性的措施。如 模型补偿方法、模型自适应技术等。本文主要研究如何得到具有强耐噪性能的特征参数。

   在感知倒谱分析的基础上引入了多分辨率小波分析技术,利用小波变换的时频局域性并结合感知频域上的滤波技术,提出了一种基于离散小波变换和感知频域滤波的算法,一种新型强耐噪性的语音特征——小波变换Mel倒谱系数。

 语音信号系统的特征是信号、噪声的频谱较宽且重叠,噪声传递函数复杂甚至为IIR函数,改变其性能的方法是把输入信号进行正交化降价处理,减少特征值的分散度,如格型滤波器,Gram-Schmidt正交化,离散傅里叶变换。本文的方法如图一。

其中X为含噪语音信号,N'为与X中的噪声N类似的噪声,AS3,DS3,DS2,DS1是输入语音经过小波分解后的低频分量和高频分量;AN3,DN3,DN3',DN1是噪声经过小波分解后的低频分量和高频分量;AE3,DE3,DE2,DE1是语音各分量通过ANC处理后的低频分量和高频分量,Y是经过小波重构后的输出。把离散小波分解和重构应用于自适应消噪系统中,通过不同的小波基把输入信号和噪声分解于不同的频段中,然后在各个频段分别进行自适应去噪,由于噪声和信号得到简化,因此减少了滤波器的级数,是系统的收敛时间和去噪效果提高。在小波重构之前对各小波系数进行加权处理,然后再把各个频段的输出通过小波重构恢复信号,最后通过MEL滤波器组把小波系数转化为MFCC。

离散小波变换自适应消噪系统

    通过多尺度分析可构造正交小波基,并且在多尺度分析上产生有限尺度二进制小波的Mallat算法。

离散平滑逼近递推公式

     输入信号是X(含噪信号),即X=S+N'(S为输入信号,N'为与N相关的同源噪声),先把X,N经过小波分解,分解于不同的频段内,则输入信号经过小波变换后,再在不同的频段中分别对他们进行自适应噪声抵消,递推表如下:

根据说话人识别的特点,即在高频(》2000HZ)和在低频(《500HZ)比中间频含有更多的说话人信息,因而在小波重构之前对各小波系数进行加权处理,其递推表达式:

总结

在噪声环境下的说话人识别框架图

 

 

WebRTC之VAD算法

阅读数 29520

没有更多推荐了,返回首页