0 引言
近年来,许多学者都针对盲信号分离不断地提出新的理论算法,盲信号分离(BSS)发展也日趋完善。而用DSP器件实现这种技术具有很大意义。本文提出了盲源信号分离的实现原理、算法和实现步骤,并对利用DSP实现时经常出现的问题提出了解决方案。
盲信号分离是指在传输信道特性和输入信息未知或者仅有少量先验知识的情况下,只由观测到的输出信号来辨识系统,以达到对多个信号分离的目的,从而恢复原始信号或信号源。它是一种在神经网络和统计学基础上发展起来的技术,并在近十年来获得了飞速发展。盲源信号分离对很多领域的多信号处理与识别提供了很大方便。该技术在通信、生物医学信号处理、语音信号处理、阵列信号处理以及通用信号分析等方面有着广泛的应用前景。它不仅对信号处理的研究,而且也对神经网络理论的发展起着积极的推动作用。
1 盲源信号分离的数学模型及常见算法
1.1 数学模型
盲分离问题的研究内容大体上可以划分为瞬时线性混叠盲分离、卷积混叠盲分离,非线性混叠盲分离以及盲分离的应用四部分。当混叠模型为非线性时,一般很难从混叠数据中恢复源信号,除非对信号和混叠模型有进一步的先验知识。图1所示是瞬时线性混叠盲分离信号模型示意图。
图1中,S=[s1(t),s2(t),…,sN(t)]T是未知的N维源信号向量,A是未知的混合矩阵,n=[n1(t),n2(t),…,nN(t)]T是M维噪声向量,X=[x1(t),x2(t),…,xM(t)]T是传感器输出的M维观测信号向量,有X=AS+n,盲源分离算法要求只知道X来确定S或A。独立分量分析(Independent ComponentAnalysis,ICA)是BSS的一种,其基本含义是把信号分解成若干个互相独立的成分。图1中,ICA的目标就是寻找一个分离矩阵W,使X经过变换后得到的新矢量Y=[y1(t),y2(t),…,yN(t)]T的各分量尽可能的独立。Y=WX为待求的分离信号向量,也就是源信号S的估计值。
1.2 盲信号预处理常见算法
在盲信号处理过程中,为了减少计算量,提高系统效率,通常需要经过预处理。预处理一般包括中心化和白化。中心化是使信号的均值为零。由于在一般情况下所获得的数据都具有相关性,所以通常都要求对数据进行初步的白化处理,因为白化处理可去除各观测信号之间的相关性,从而简化后续独立分量的提取过程。而且,通常情况下,对数据进行白化处理与不对数据进行白化处理相比,其算法的收敛性较好、工作量少、效率高。
线性混叠盲分离信号模型一般都采用独立分量分析的方法。ICA的主要依据和前提是假设源信号是独立的,因此,自然就可以设想ICA算法的第一步是建立目标函数来表征分离结果的独立程度。目标函数确定后,可通过各种不同的优化算法进行优化,进而确定分离矩阵W,其中有代表性的算法主要有最大信息量(Infomax)法、自然梯度法、快速独立元分析算法(FastICA)、矩阵特征值分解法等。盲分离中经常要用到优化运算,就优化手段而言,Infomax算法、自然梯度算法属于梯度下降(上升)寻优算法,收敛速度是线性的,速度略慢一些,但属于自适应方法,且具有实时在线处理能力;FastICA算法是一种快速而数值稳定的方法,采用拟牛顿算法实现寻优,具有超线性收敛速度,通常收敛速度较梯度下降寻优算法快得多;矩阵特征值分解方法一般通过对矩阵进行特征分解或者广义特征分解来估计分离矩阵,这是一种解析方法,可直接找到闭形式解(Closed Form Soutions),由于其没有迭代寻优过程,因此运行速度最快。
2 盲源信号分离的DSP实现方法
2.1 实现原理
由于FastICA算法和其他的ICA算法相比,具有许多人们期望的特性:如收敛速度快、无需选步长参数、能够通过选择适当的非线性函数g来最佳化、能减小计算量等。同时也有许多神经算法的优点,如并行、分布式且计算简单,内存要求很少等。因此,FastICA得到了广泛的应用。本文就采样了这种算法。
2.2 实现方法
基于负熵最大的FastICA算法的基本原理是基于中心极限定理。即:若一随机变量X由许多相互独立的随机变量Si(i=1,2,…,N)之和组成,那么,只要Si具有有限的均值和方差,则不论其为何种分布,随机变量X较Si更接近高斯分布。由信息论理论可知;在所有等方差的随机变量中,高斯变量的熵最大,因而可以利用熵来度量非高斯性,常用熵的修正形式,即负熵。因此,在分离过程中,可通过对分离结果的非高斯性度量来表示分离结果间的相互独立性,当非高斯性度量达到最大时,表明已完成对各独立分量的分离。负熵的定义公式如下:
式中:YGauss是与Y具有相同方差的高斯随机变量,H(·)为随机变量的微分熵,其表达式为:
当Y具有高斯分布时,Ng(Y)=0;Y的非高斯性越强,其微分熵越小,Ng(Y)值越大,所以,Ng(Y)可以作为随机变量Y非高斯性的测度。由于根据公式计算微分熵时,要知道Y的概率密度分布函数不切实际,于是可采用如下公式:
式中:E[·]为均值运算;g(·)为非线性函数,其表达式可用下列非线性函数表示:
这样就可以算出一个独立分量,但每次迭代完成后,还应对Wi进行归一化处理。当计算n个独立分量时,需要n个列矢量,并且每次迭代后,都需进行线性组合以去掉相关性。
3 软硬件实现
3.1 硬件平台
Blackfin处理器以RISC编程模型突破性地把信号处理性能和电源效率结合起来。这种处理器在统一的结构中可提供微控制器(MCU)和信号处理两种功能,并可以在控制和信号处理两种功能需求之间灵活的划分。
本硬件系统包含ADSP-BF533处理器,32 MBSDRAM MT48LC32M16A2TG,2 MB FLASHPSD4256G6V,ADV1836音频编解码器等,其系统结构框图如图2所示。
3.2 软件实现
Matlab仿真成功后,还需要用硬件来实现。这里以选用ADSP_BF533为例进行阐述。其流程图如图3所示。在用DSP编程实现时,其常见问题首先是白化处理中要用到特征值分解,采用的方式是进行多次QR分解。
为了使人耳可以分辨出不同的声音,观测时间应该足够大,在AD1836采集频率为48kHz时,采集约为22s的声音信号,其需要处理的数据长度为48K×22b,约为一百万个点。在常规的程序设计中,对此信号的处理就需要定义长度为一百万的数组,这远远的超出了内存容量,故其解决方案是直接访问(包括读写)存储在SDRAM中的数据,并把原来程序中的数组运算修改为针对每个元素的运算。每个元素均可直接访问SDR-AM,而不必将保存在SDRAM中的数据通过数组的方式传递到内存中。这就相当于用时间换取内存空间。
AD1836采集的数据为24位的二进制有符号整形数据。为了提高精度,减小误差,应选用32位而不是16位的数据格式进行处理。从24位到32位的转换可采用的方案如下:
对于负数:
其次,为了保证处理过程中的精度,还可选择将data转为float运算的方法。
一般地,处理完的数据数值很小,范围在(-10,10)之间,而播放时必须经过D/A,但D/A本身的热噪声会带来很大的误差,信噪比显然无法容忍。对此,其解决办法是将处理完的数据乘以较大的数值,这样,声音信号的相对值并没有发生改变,因而播放时可达到良好的效果。这一方法也是用数字电路工具(如DSP,FPGA等)处理模拟信号时的常用方法。
4 实际效果
图4所示是两段录音的音频信号时域图,图5则是经过瞬时线性混合后的信号时域图,图6是经过在BF533平台上利用FastICA算法得到的分离后的信号时域图。实验发现,图6所示的结果分离效果良好,可以清楚地听到不同的源信号。
5 结论
本文首先简单介绍了盲信号分离的数学模型以及常用的理论算法。之后详细介绍了用ADSP_BF533实现盲信号分离时的具体流程以及实现过程中常见问题的解决方案。本设计方案所需时间短,效率高,而且占用内存较少。在工程应用方面具有一定的参考价值。