基于小波阈值去噪法的智能音箱语音识别研究

更新时间:2023-04-08 21:58:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于小波阈值去噪法的智能音箱语音识别研究

智能语音,是实现人与机器之间的通信,主要有语音识别、语音合成技术。智能语音技术的研究是以语音识别技术为开端,随着信息技术的发展,智能语音技术成为人们日常生活中沟通与交流的有效、便捷手段。目前,智能音箱已成为智能语音技术深入人们日常生活的应用实例,如Amazon Echo、Google Home、天猫精灵等。为了更好的对智能音箱进行语音识别,需要对麦克风采集到的原始语音数据进行处理,以期送往语音识别引擎的数据,能有更高的识别率。

本文针对智能音箱的音频预处理问题,基于MATLAB软件,结合小波变换理论,设计了一种处理声音信号噪音的方法。通过MATLAB调取麦克采集到的原始语音数据,然后采用小波分解,设置信号阈值对声音信号中的噪声进行滤波处理,小波重构等过程,最后,画出处理前后的波形图,通过对比,可知处理后的声音信号滤除了高频噪声,显示的信号更清晰,有助于提高语音识别率。

一、智能音箱-音频预处理赛题简介

本次赛题中采用的智能音箱的语音信号由两个麦克采集得到,Mic1和Mic2 采集到的数据分别对应着chann1.pcm和chann2.pcm,数据为16bit、采样率16k 的pcm文件。现有智能音箱在家庭环境中得到的7组语音数据,其中含有一定的家庭背景噪声。根据每组数据中的1路或者2路声音信号,设计算法对其进行处理,以提高后台引擎的识别率。

二、智能音箱的音频信号导入

本文的语音识别程序主要在MATLAB软件上完成,MATLAB是一款功能强大的数学软件,可用于算法开发、数据可视化、数据分析等方面。MATLAB提供了许多函数处理声音信号,比如wavread、wavedec、waverec等等,可以利用这些函数方便的处理信号,还有诸如plot等绘图函数。

根据已有的7组智能音箱获取的数据,首先进行声音的读入,由于这里有7

组不同的语音信号数据,为了方便读入,本文采用字符串的形式来获取语音数据地址,以一路Mic的数据为例,

A={'_01','_02','_03','_04','_05','_06','_07'};%7路数据信号的编号

getstr=A{i};

str_route1='array\preliminaries';% 7路数据信号相同的路径部分

str_num1='\chann1.pcm'; % 7路数据信号的Mic1路径部分

str_chann1=[str_route1,getstr,str_num1]; % Mic1的7路数据信号路径

通过以上操作,获取了两麦克的7路语音数据地址,下面采用MATLAB软件中的fread函数分别读取二进制形式的语音数据,并将数据存入矩阵中,在读入数据之前,需要利用fopen函数来打开数据文件,并指定该文件的操作方式。

fid = fopen(str_chann1,'r');

sound_Mic1 = fread(fid,inf,'int16');

plot(sound_Mic1);%显示处理前的Mic1的波形图

为了进一步提高智能音箱的语音信号识别率,本文设计中将Mic1和Mic2采

集到的两路语音数据按照权重为0.5的比例进行融合,最后得到的处理前

Mic1、Mic2、Mic1& Mic2的波形图如下:

(a)Mic1波形图(b)Mic2波形图

(c)Mic1& Mic2波形图

图1 处理前的波形图

通过对比(a)、(b)、(c)三幅波形图对比可见,将两路Mic采集到的语音数据信号进行融合,可以在一定程度上消除因两麦克位置不同而对采集到的同

一个音频信号数据形成的误差,更能贴近真实的智能音箱采集到的家庭环境中的语音信息。

三、语音数据的小波去噪处理

3.1、小波去噪原理

传统的语音去噪方法是将含噪声的信号进行傅里叶变换后,通过滤波器进行滤波来达到去除噪声的目的。傅里叶变换对于平稳的信号滤波效果较好,但对于突变的非平稳信号,以及信号和噪声频带相重合的语音信号,其去噪能力将会削弱。小波变换拥有较好的时频局部化特性,能对信号进行时频空间上的细致处理和分离,因此利用小波变换对非平稳信号进行去噪处理可以取得良好的效果。

语音信号是生活中存在较多的非平稳信号,在实际环境中,语音总是会受到外界环境各种噪声的干扰,并对信号的处理分析带来很大影响。例如本文中的智能音箱在比较嘈杂的环境下,系统的识别准确率将会降低。因此本文采用小波变换来对音箱采集的语音数据进行去噪处理。

图 2 小波去噪原理框图

如图2所示,小波去噪的关键是第二步中对各尺度下小波系数进行去噪处理,根据系数处理规则,本文中采用小波阈值去噪法。小波阈值去噪法是D.L.Donoho在1992年提出的一种简洁有效的去噪方法,其主要原理为:原始信号的能量一般主要集中在小波域内有限的几个系数中,而噪声的能量却分布于整个小波域内,因此经小波分解后信号的系数要大于噪声的系数。此时,可以在各尺度上找到一个合适的数 作为阈值(门限),当小波系数小于该阈值时,认为这时的小波系数主要是由噪声引起的,予以舍弃置零处理。当小波系数大于该阈值时,认为这时的小波系数主要是由信号引起的,则把这一部分的小波系数直接保留下来或按某一固定量向0收缩,然后由新的小波系数进行小波重构得到去噪后的信号。

对于上节中得到的两麦克融合后的语音信号数据,首先抽取声音信号的第

一通道信息,利用length函数完成对语音信号长度的获取;根据时间-频率公式

t

L

f

,即可获得该段音频信号的时间。MATLAB中程序代码如下:sound=sound(:,1); %抽取声音信号的第一通道

sinLength=length(sound); %获取声音长度

fs=16000;

t=(0:sinLength-1)/fs; %音频信号时间

3.2 小波阈值去噪法

一般来说,信号小波阈值去噪法的基本步骤主要包括如下三步:

(1)信号的小波分解;

(2)小波分解高频系数的阈值量化;

(3)信号的小波重构,使用分解的低频系数以及阈值量化后的高频系数进行小波重构。下面将对小波阈值去噪法过程进行详述。

3.2.1 语音信号的小波分解

MATLAB软件中常用的小波分解函数有dwt和wavedec函数,调用方式分别为:

[cA,cD]=dwt(X,’wname’)

[C,L]=wavedec(X,N,’wname’)

其中,dwt函数使用小波'wname'对信号X进行单层分解,求得的近似系数存放在数组cA中,细节系数存放在数组cD中,即dwt函数返回的cA,cD分别存放是信号的近似和细节;而wavedec函数则利用小波'wname'对信号X进行多层分解,从分解系数[C,L]中提取第N层近似系数,返回的近似和细节都存放在C中,即C=[cA,cD],L存放是近似和各阶细节系数对应的长度。

通过对dwt和wavedec函数的用法分析可见,说dwt只能对某个输入矩阵X 进行一层分解,而wavedec可以对输入矩阵X进行N层分解,结合本文要求,采用wavedec函数进行小波分解。

语音信号小波分解程序如下:

[c,l] = wavedec(sound',3,'db5'); %使用小波函数“db5”对信号进行3层分解

3.2.2 语音信号的小波阈值处理

MATLAB中实现信号的阈值去噪函数有wden、wdencmp、wthresh、wthcoef、wpthcoef以及wpdencmp。其中函数wden用于一维信号的自动消噪;函数wdencmp用于一维或二维信号的消噪或压缩;函数wthcoef用于一维信号小波系数的阈值处理。

在本文中,对小波分解系数使用函数wthcoef进行阈值处理,程序代码如下:n = [1,2,3]; %设置尺度向量

p = [79.5,74,63]; %设置阈值向量

nc = wthcoef (‘d’, c, l, n, p); %对高频系数进行阈值处理

在该部分中,返回小波分解结构[c,l]经向量n和p定义的压缩率处理后的新的小波分解向量nc,[nc,l]构成一个新的小波分解结构。n包含被压缩的细节向量,p是把较小系数置0的百分比信息的向量。n和p的长度必须相同。

3.2.3 语音信号的小波重构处理

在经过小波分解,小波阈值处理后,在该部分利用阈值处理后的小波系数进行重构达到去噪目的。程序代码如下:

xd = waverec(nc,l,'db5');%对修正后的小波分解结构进行重构

在经过上面小波阈值去噪法的小波分解、小波阈值处理,小波重构后基本完成了对音频信号的去噪处理。由于在信号进行小波分解的过程中,对信号矩阵sound进行了转置,因此在去噪处理完成后,需要对信号进行再转置,并进行调参处理,程序如下:

xd=xd*8.78;

xd=xd';

四、仿真结论

上述过程为本次比赛音频信号噪声处理算法设计的整个过程,最后得到的仿真结果如下:

(a)Mic1& Mic2处理前波形图(b)小波去噪处理后波形图

图3 音频信号处理前后波形图

通过图(a)与图(b)对比可知,音频信号经小波去噪后高频信号在一定程度上有所减少。可见,本次设计的小波阈值去噪法滤掉了部分所需信号外的其它噪声干扰,达到了处理高频噪声的目的,使声音信号更加清晰,有助于提高后台语音识别引擎的语音识别率。

本文来源:https://www.bwwdw.com/article/jbol.html

Top