语音信号盲分离测试工具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Tcl/Tk 与C 的语音信号盲分离测试工具
马骏
西安市地下铁道有限责任公司 西安 710018
摘要:如何分离多说话人环境下麦克风所采集的混合语音信号是盲源分离研究的一个重要课题。文章采用TCL/TK 与C 语言混合编程,自主开发了用于语音信号盲分离测试的工具,并介绍了该工具的结构、界面和功能。最后通过试验验证了该工具的正确性。 关键词:盲源分离 语音信号 Tcl/Tk
A Tcl/Tk & C-based testing tool for blind separation of
audio signals
Ma Jun
Xi'an Metro Co., Ltd. Xi'an 710018
Abstract: 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/Tk
1.引言
盲源分离(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 算法模块;数据/曲线模块等。