麦克风阵列盲源分离技术
盲源分离技术仅根据观察到的每一路混叠信号估计原始多路信号,独立成分分析(independent component analysis)卷积混合情况的盲源分离技术。第一部分麦克风数量大于声源数量的ICA的方法,第二部分是麦克风数量小于声源数量的时频分集方法,第三部分是基于最大后验概率的单麦克盲源分离技术。
盲源分离解决的问题:
- 线性模型,又称瞬时模型
- 卷积模型,语音更符合这个模型
盲源分离存在两种不确定性:分离后信号的排列顺序和复振幅(幅值和相位)。当源信号之间相互独立时,如果对源信号矢量进行变换,当且仅当变换后的信号之间保持相互独立,该变换矩阵可以分解为一个满秩对角阵和一个转置矩阵的乘积,仅改变源信号的幅度和排列顺序,并没有改变信号波形。
独立分量分析证明了只要通过适当的线性变换,使得变换后的各个信号之间相互独立就可以实现源信号的盲分离,即将盲源分离问题,转换为对独立分量分析的求解问题。可以使用的判决准则:
1.自然梯度
2.随机梯度
-
信息论法:
1.基于互信息法:对比函数是一个用来衡量变换后各个信号之间相互独立程度的实值标量函数,当且仅当各个输出信号之间相互独立时,对比函数取得最大值或最小值。
2.基于信源的非高斯性测度(仅指峭度)
3.近似负嫡准则,成为FastICA。计算简单,收敛速度快,不需要任何步长参数,且迭代稳定,占用内存少。还可以通过非线性函数的适当选取来找到最优解。 -
统计量方法:
1.基于二阶统计量
2.基于高阶统计量,BP网络分离信号方法,能分离线性和非线性混合,
PCA主成份分析。高斯噪声分离。
ICA,非高斯噪声分离,(前提假设线性,静态混合)
- 研究集中于以下几点:
1.欠定问题,源数目多于传感器(麦克风)
2.单通道问题,只有一个传感器,分离出多个源
3.多维BSS,
4.非线性BSS,
5.盲解卷积(声源场景)
6.全局收敛算法
7.非平稳环境下的BSS
- 信号预处理,分离前
1.中心化,即去均值。
2.白化,
项目 | 波束形成算法 | 基于ICA的盲源分离算 |
---|---|---|
优势 | 已经商用 | 能够动态跟踪声源 |
劣势 | 动态跟踪声源性能差 | 分离矩阵计算量较大;硬件和麦克风成本较高 |
ICA方法
1.1 方法
语音信号的卷积盲分离:
- 基于块扩展的自然梯度法
- 空时扩展的FastICA方法
1.2瞬时混合模型
图1.1 瞬时混合模型BSS分离
mm是位置语音源si(k),1≤i≤msi(k),1≤i≤m数量,观察到nn个输出xj(k),1≤j≤nxj(k),1≤j≤n.
xj(k)=∑i=1majisi(k)+vj(k)xj(k)=∑i=1majisi(k)+vj(k)
ajiaji是矩阵A(n∗m)A(n∗m)线性时不变系统的系数,vj(k)vj(k)是加性噪声。瞬时混合盲源分离技术就是要找到一个m∗nm∗n的解混合矩阵BB.
yi(k)=∑j=1nbij(k)xj(k)yi(k)=∑j=1nbij(k)xj(k)
然而室内语音由于反射和混响,其要使用卷积混合模型进行分离。
卷积混合分离模型
xj(k)=∑l=−∞∞∑i=1mbjilsi(k−l)xj(k)=∑l=−∞∞∑i=1mbjilsi(k−l)
这里忽略了噪声,其响应的矩阵表示是:
y(k)=∑l=0L−1BlX(K−l)y(k)=∑l=0L−1BlX(K−l)
这里要求输入信号之间是统计独立的,短时平稳的。
使用空域独立特性的时域卷积盲分离
使用信源统计独立性进行BSS的方法可以分为两类:
- 基于密度匹配法
- 基于对比函数法
密度匹配法使用自然梯度
对于瞬时混合,仍然可以从ICA的信息最大化的推导出密度匹配法。在线性混合条件下,上面两个准则认为联合概率密度函数如下:
p(s)=∏k=1mps(sk)p(s)=∏k=1mps(sk)
将观察到的信号
X(k)=[x1(k)...xm(k)]TX(k)=[x1(k)...xm(k)]T
根据系统解混合矩阵BB线性变换得到的输出向量y(k)=B(k)X(k)y(k)=B(k)X(k),密度匹配BSS方法是使输出向量的概率密度函数
pyypyy
匹配模型的概率密度函数pˆy(y)p^y(y).
pyypyy
和pˆy(y)p^y(y)的差异可以使用相对熵(KL散度)来度量:
D(py||pˆy(y))=∫py(y)log(pypˆy(y))D(py||p^y(y))=∫py(y)log(pyp^y(y))
式中dy=dy1...dmdy=dy1...dm.
此外还有对比函数法等方法
频域卷积BSS
对中等程度的混响就需要较长的多通道FIR滤波,这可以放到频域来做,因为时域卷积对应频域相乘。从时域变换到频域可以通过滑窗DFT或者通过短时傅里叶变换(STFT)。窗长内的信号要是准静态的,将T时间内的采样点写成矩阵X(k)X(k):
X(k)=[X(k),X(k+1),...,X(k+T−1)]X(k)=[X(k),X(k+1),...,X(k+T−1)]
其DFT如下:
X(ω,k)=∑τ=0T−1X(k+τ)e−j2πωτ/TX(ω,k)=∑τ=0T−1X(k+τ)e−j2πωτ/T
做FFT通常会进行加窗处理。观测信号和源信息源的关系如下:
X(ω,k)≈A(ω)s(ω,k)X(ω,k)≈A(ω)s(ω,k)
图:频域盲分离的框图
y(ω,k)=B(ω,k)A(ω)s(ω,k)=G(ω,k)S(z)y(ω,k)=B(ω,k)A(ω)s(ω,k)=G(ω,k)S(z)
分离准则
盲源分离方法建立在对声源和混合矩阵的不同假设的基础上,一般声源是独立的,至少是不相关的。分离的判决准则可以分为两类,一类是基于高阶统计量(HOS,higher-order statics),和二阶统计量(SOS,second-order statics)。N表示声源数,M表示麦克风数。这在后文一个实例中使用到这一准则。
N<MN<M | N=MN=M | N>MN>M |
---|---|---|
子空间方法 | 二阶或者三阶累积量 | 非静态,列优先,互质 |
降到瞬时混合情况求解 | 1.SOS/HOS对于2*2系统 2.独立功率谱 3.累计量的书序大于二,ML准则 | 互累计量,时频域稀疏 |
卷积盲源分离频域法
卷积盲源分离包括两类主要方法:时域和频域。设s1,...,sNs1,...,sN是N个源信号。{x_jk}是第jj个麦克风从第kk个声源在卷积模型下的观察的信号值。
Xji(t)=∑l=0phjk(l∙ts)sk(t−l∙ts)Xji(t)=∑l=0phjk(l∙ts)sk(t−l∙ts)
其中t(ts=1/fs)t(ts=1/fs)是时间的离散表示,h_{jk}是声源k到麦克风jj的脉冲响应。假设N个声源,则有:
xjt=∑k=1Nxjk(t)=∑k=1N∑l=0Phjk(l∙ts)sk(t−l∙ts)xjt=∑k=1Nxjk(t)=∑k=1N∑l=0Phjk(l∙ts)sk(t−l∙ts)
对分离效果的好坏使用信号/干扰比(signal-to-interference ratio, SIR)和信号/失真比(signal-to-distortion ratio)。
InputSTRi=10log10∑t|xji(t)|2∑t|∑k≠ixjk(t)|2InputSTRi=10log10∑t|xji(t)|2∑t|∑k≠ixjk(t)|2 (dB)
OutputSTRi=10log10∑t|yji(t)|2∑t|∑k≠iyjk(t)|2OutputSTRi=10log10∑t|yji(t)|2∑t|∑k≠iyjk(t)|2 (dB)
yikyik是sksk在输出端yiyi的部分。
SDR定义如下:
SDRi=10log10∑t|αiyji(t−δ)|2∑t|yji−αixji(t−δi)|2SDRi=10log10∑t|αiyji(t−δ)|2∑t|yji−αixji(t−δi)|2
失真定义于分母,这通过找到合适的幅度调节因子αiαi和时间调节因子δiδi最小化失真获得SDR。最优δiδi通过最大化互相关获得:
δi=argmaxδ∑tyji(t)(t−δ)δi=argmaxδ∑tyji(t)(t−δ)
αiαi通过最小均方误差获得:
αi=∑tyii(t)xji(t−δ)∑t|xji(t−δ)|2αi=∑tyii(t)xji(t−δ)∑t|xji(t−δ)|2
频域BSS
通过STFT将每一个麦克风观察到的时域信号xj(t)xj(t)转换到频域时间信号xj(n,f)xj(n,f):
xj(n,f)←∑txj(t)wina(t−nSts)e−t2πftxj(n,f)←∑txj(t)wina(t−nSts)e−t2πft
每一个离散的频点f∈{0,1Lfs,...,L−1Lfs}f∈{0,1Lfs,...,L−1Lfs}.分析用的窗函数可以使用汉宁窗。如果帧长LL能够包括绝大部分的脉冲响应hjkhjk,则卷积模型可近似使用瞬时模型近似:
xjk(n,f)=hjk(f)sk(n,f)xjk(n,f)=hjk(f)sk(n,f)
则有:
xj(n,f)=∑Nk=1xjk(n,f)=∑Nk=1hjk(f)sk(n,f)xj(n,f)=∑k=1Nxjk(n,f)=∑k=1Nhjk(f)sk(n,f)
向量表示如下:
X(n,f)=∑Nk=1hk(f)sk(n,f)X(n,f)=∑k=1Nhk(f)sk(n,f)
接下来的操作,分离,置换以及缩放和T-F掩码都在频域做。复共轭矩阵的关系如下:
xj{n,mLfs}=x∗j{n,L−mLfs,m=1,...,L2−1xj{n,mLfs}=xj∗{n,L−mLfs,m=1,...,L2−1
这里最关键的就是求分离矩阵,这个非常类似AEC情况下的回声消除求权重的过程,由于AEC是一维,BSS是多维且矩阵间互相影响,所以其计算特别耗时。
但是这时可以利用SL(sound location)DS/GCC/GCC-PHAT技术,在大概知道多个声源的方向,这时分离矩阵的系数应该让各个方向上能量和其它方向上的能量比值最大。
另外针对也许特殊的场景,不放考虑使用DNN方式,先前训练好几组权重系数。
这里给出一个matlab版本程序,需要说明的是,这个程序在无背景噪声,线阵,麦克风大间距下效果非常明显。
测试matlab
调用BSS主体
%read 6 audio sigal, include two for AEC
y=audioread('/home/gsc/_0_1.wav');
%row = number mic
y=y';
y1=y(1,:)';
y2=y(2,:)';
y3=y(3,:)';
y4=y(4,:)';
x=[y1';y2';y3';y4'];
Ns=1;
nFFT=4096;
nP=50;
nSample=10000;
ovl=0.75;
[y,w]=alcobs(x,Ns,nFFT, nP, nSample, ovl);
运行完毕后可以使用如下命令听:
audioplayer(y(1,:),48000);
p=audioplayer(y(1,:),48000);
play(p)
BSS实现主体
可以参考论文《A Frequency Domain Method for Blind Source Separation of Convolutive Audio Mixtures》
“`
function [y,W] = alcobs(x, Ns, nFFT, nP, nSample, ovl);
% Alternating Least Squares Convolutive Blind Source Separation
% Version 1.0
% Author: Kamran Rahbar
% Institue: McMaster University (Statistical Signal processing Lab)
% This function does blind source separation of
% convolutive mixtures useing a frequency domain approach.
% For more info. see:
% Kamran Rahbar, James P. Reilly,
% “A Frequency Domain Method for Blind Source Separation
% of Convolutive Audio Mixtures”,
% IEEE Trans. on Speech and Audio Processing (to be published).
%
% Please report any bug or problem to reillyj@mcmaster.ca
%
% usage:
% [y,w]=alcobs(x, Ns, nFFT, nP, nSample, ovl);
%
% x Observed signals from convolutive mixtures
% Ns Number of sources
% nFFT Number of FFT points (usually greather than the length of channel)
% nP Number of cross spectral density matrices
% nSample Number of samples in each epoch
% ovl Overlap percetange (0