当前位置:文档之家› 语音信号盲分离测试工具

语音信号盲分离测试工具

基于Tcl/Tk 与C 的语音信号盲分离测试工具马骏西安市地下铁道有限责任公司 西安 710018摘要:如何分离多说话人环境下麦克风所采集的混合语音信号是盲源分离研究的一个重要课题。

文章采用TCL/TK 与C 语言混合编程,自主开发了用于语音信号盲分离测试的工具,并介绍了该工具的结构、界面和功能。

最后通过试验验证了该工具的正确性。

关键词:盲源分离 语音信号 Tcl/TkA Tcl/Tk & C-based testing tool for blind separation ofaudio signalsMa JunXi'an Metro Co., Ltd. Xi'an 710018Abstract: Separating independent signal from audio mixtures is one of the elementary problems in Blind Source Separation (BSS) research. The interface between Tcl/Tk is explained, and a testing tool for blind separation of audio signals is developed. The structure, interface and function of the tool are introduced. The validity of the tool is proved by experiment. Keywords :Blind source separation Audio signals Tcl/Tk1.引言盲源分离(BSS )[1,2,3,4]是人工神经网络与统计信号处理以及信息论相结合的产物,而混合语音信号的盲分离是该领域的一个重要课题。

使计算机具有和人类一样的听觉,是计算机智能领域研究者们的梦想。

语音识别技术为我们实现计算机听觉的这一目标提供了有效的途径,使得计算机能听懂我们人类的语言,计算机操作从此变得更互动和简单自然,方便了人机的交流。

混合语音信号盲分离虽然不能实现计算机听觉这一目标,但是通过该技术却能使原本相互混叠的语音信号相互剥离,来作为语音识别的预处理,从而使得噪声环境下和多说话人情形下的语音识别的实现成为可能,增大了识别算法的鲁棒性和适应能力,从这种意义上来讲该问题的研究具有很大的现实意义。

本文首先阐述了盲源分离的基本理论知识以及Tcl/Tk [5]与C 语言的接口编程,然后采用分层软件模型开发了用于语音信号盲分离的测试工具,其外壳选择灵活的事件驱动脚本Tcl/Tk 作为基本的界面开发平台,完成配置、控制任务;而其低层的BSS 核心算法库则利用高效的编译型C 语言实现。

另外为了完成语音信号的读写等操作还参考了snack [6]语音处理库及其源代码。

文章介绍了该工具的结构、界面和功能,最后通过实验验证了该测试工具的正确性。

2.盲源分离模型及算法设由N 个未知的统计独立的信号源)(t s i 构成了一个列向量,)](),...,([)(1T N t s t s t S =其中t 是离散采样时刻。

设A 是一个未知的N M ⨯维矩阵,通常称为混合矩阵。

设[]T M t x t x t X )(),...,()(1=是由M 个传感器观测到混合信号)(t x i 构成的列向量,且满足下列方程:)()((t)t V t AS X += (1) 其中T M 1t ,...,v t v t V )]()([)(=是由M 个空间白化、统计独立噪声信号(t)i v 构成的列向量。

盲源分 离的命题是,对任何t ,根据观测到的)(t X ,在A 未知的条件下求)(t S 。

图1给出了语音信号盲分离算法框架图。

图1算法框图由图1知,求解BSS 的思路是寻找一个M N ⨯维的解混合阵W ,)(t X 经过W 变换后得到N 维输出列向量[]T N 1(t),y (t),y t Y =)(,即有:)()()(ˆ)(t WAS t WX t S t Y === (2)显然,如果通过学习得以实现PD WA = (其中P 为置换矩阵,D 为对角矩阵),则输出信号与源信号的波形便能保持一致。

业已证明,BSS 实现正确的分离的结果只能表现在Y (t )的各个分量统计独立上。

按以上基本思路,目前国际上已经提出了多种有效算法,其最终目标都是估计分离矩阵W 。

表1给出了工具包中已经实现的一些算法。

表1 盲源分离算法列表3.基于Tcl/Tk 与C 语言进行混合编程[5]Tcl 是一种功能强大的可嵌入式解释型语言,其最初设计目的就是提供一种可扩充的语言与用户的应用程序协同工作。

Tk 是Tcl 的一种扩充,由一组简化构造窗口应用程序的C 语言库过程组成,通过提供按钮、菜单等控件(Widget)增加了图形窗口界面。

Tcl/Tk 采用层次结构对其已有的各控件进行管理。

另外,Tcl/Tk 提供了访问用户应用程序的接口,使得用户界面处理与应用程序的其余部分完全分离,提高了可移植性。

用户可以集中精力设计自己的应用程序的核心部分,编译成可执行程序后供Tcl/Tk 设计的脚本调用。

Tcl/Tk 被设计成可以通过用C 语言编写新的命令来进行方便的扩展。

Tcl/Tk 的解释器本身是以C 的库函数方式提供的,它可以嵌入任何用C 写的程序;C 应用程序可以启动一个命令解释器,并由它来解释执行任何一个Tcl 脚本。

同时,也可以将任何一个C 过程变为Tcl 的一个新命令,也就是说,可以从Tcl 中调用任何C 过程,一方面是因为C 实现比Tcl/Tk 的效率要高,另一方面是因为有些应用无法用Tcl/Tk 实现。

Tcl/Tk 库程序提供一个Tcl_Main 函数由应用程序调用。

Tcl_Main 创建一个Tcl 解释器及所有标准Tcl 命令,然后调用Tcl_AppInit 函数(该函数由用户定义,其中可以注册新的Tcl 命令),最后读入一段程序并进入交互式循环。

类似地,Tk_Main 也具有同样地调用过程。

由于Tk_Main 包含了Tcl_Main ,若用户使用到了Tk 的命令,则只需调用Tk_Main 。

4.语音信号盲分离测试工具(WAVBSS )基于上述BSS 模型及相应算法框架,兼顾Tcl/Tk 在界面编程中的长处和用C 语言来处理BSS 算法涉及到的大量的矩阵运算的高效性,本文的工具采用 C 与 tcl/tk 共同开发。

该工具具有界面简洁友好,使用方便,跨平台等特点,能完成对线性混合语音信号的盲分离。

4.1 WAVBSS 的结构和功能图2所示为WAVBSS 的软件结构图。

其主要包括如下几个功能模块:信号的加载与编辑模块;信号的混合及加噪模块;信号预处理模块;BSS 算法模块;数据/曲线模块等。

图2 WAVBSS 的软件结构图 信号的加载模块主要是基于snack 库实现语音文件(*.wav )读、写等操作。

另外,通过信号编辑模块用户可以对已加载的信号随意的进行删除或添加。

一旦源信号被加载,WAVBSS 将可以通过多种方式人为的生成混合信号。

若加载的信号已经是经过混合后的信号,则可以选择不再进行混合。

WAVBSS 包含了5种不同的混合方式。

其中,对于任意一种矩阵混合方式用户都可以在软件包中进行任意的修改。

另外为了考察特定算法对加性噪声的鲁棒性,WAVBSS 允许用户在进行信号BSS 之前人为加入一定强度的噪声。

软件包提供信噪比分别为0dB ,5dB ,10db ,15dB ,20dB 五个等级的两种噪声,即高斯白噪声和均匀噪声供用户选择。

通常在对混合信号进行分离之前,需先对其进行一些预处理[3],为此工具提供了信号预处理模块。

目前该工具包含的预处理方法有信号中心化、白化、PCA 处理。

BSS 算法模块作为WAVBSS 的核心部分,目前提供了4种不同的性能优异的BSS 算法,其中包括FASTICA 算法、自然梯度算法、EASI 算法和Adaptive RLS 算法等优秀的算法,用户可以从中选取一种对已获得的语音数据进行BSS 测试。

曲线/数据模块是测试工具的一个重要部分,语音数据处理结果可以语音数据文件(.wav )的格式被输出到硬盘,同时通过观察曲线显示界面,有助于对仿真的结果进行分析。

曲线显示包括源信号波形、混合信号波形和分离信号波形的显示等,而且每种视图可以任意的被显示、关闭、重新显示、移动、放大缩小而且互不影响。

以上各个功能模块的组织、协调皆围绕其核心模块——BSS 算法模块而实现,内部采用函数式封装结构,具有可扩展的优点。

4.2 WAVBSS 的图形界面的Tcl/tk 设计与移植按照如上所述的模块化结构,设计WAVBSS 的界面主窗口如图3所示,其显示了工具的框架结构、工具的操作流程以及系统的运行状态,主要包括菜单栏与语音信号盲分离的分步骤操作区。

其中各分步骤操作区实际上与前述相应功能模块对应,意义直观明了,易于操作。

图3 主界面 WAVBSS 在Windows 和Linux 的安装目录分别为“C:/wavbss ”和“/usr/local/bin ”。

Tcl 变量tcl_platform 是Tcl 的一个内部数组,其元素platform 保存了当前的工作平台。

用以下Tcl/Tk 脚本可以获取WAVBSS 当前的工作平台,并保存在变量sysplt 中,然后在变量DIRECTORY_WAVBSS_Root 中设置WAVBSS 的安装目录。

Set sysplt $tcl_platform(platform)If {$sysplt==”windows”} {Set DIRECTORY_WAVBSS_Root “c:\\wavbss\\”} else {Set DIRECTORY_WAVBSS_Root “/usr/local/bin/”}由于Tcl在Windows上运行时,能够自动地将Tcl/Tk脚本中的文件和目录中的字符“/”转换为“\”,故在将WAVBSS的图形界面从Linux移植到Windows时,不必修改其它文件和目录的名称,只需修改sysplt变量,对C编译程序的名称等几处在Linux和Windows存在差别的地方分别作不同的处理即可。

5.实验研究分别由两人讲“good morning”与“こんばんは”(采样频率为16kHz),利用声卡采集两个人的语音信号作为源信号,波形图如图4(a)所示。

通过在界面上选取“随机矩阵混合”将将上图所示的双源信号进行线性混合,最后生成混合信号,如图4(b)所示。

一旦预处理完毕,用户便可以从软件包中的算法列表中选取一种算法开始仿真试验。

相关主题