1.一种基于无线声传感器网络的多节点信息融合声源定位方法,其特征在于包括以下步骤:
步骤一、由m个麦克风阵列节点组成观测区域,融合中心接收目标声源的各节点传送数据,来自第k个节点的数据包括:声源的远场DOA估计值θk或近场初步定位结果SN(k)=(θk,rk)、节点位置信息Pk=(xk,yk)及声源频谱的特征信息,其中k=1,2,…m;
步骤二、根据接收数据中距离信息rk将其分为两类:远场节点数据集合P和近场节点数据集合Q;P,Q集合大小分别为p,q,则有p个节点获得声源的远场DOA估计值(θ1,θ2,...θp),q个节点获得声源的近场定位结果((θ1,r1),(θ2,r2),…(θq,rq)),满足p<m,q<m且p+q=m;
步骤三、在近场节点数据集合Q中,第i个节点获得声源的近场定位结果为SN(i)=(θi,ri),对其进行坐标变换得SN(i)=(xi,yi)(i=1,2…q),计算声源的近场初步定位结果SN=(xN,yN),并将其作为KF的初始状态输入值;SN的计算公式为:
步骤四、针对远场节点数据集合P,计算声源的远场初步定位结果SF=(xF,yF);具体步骤为:
(a)从P中选取四个节点组成远场定位节点集合Pselect={mj}(j=1,2,3,4),节点位置坐标为Pj=(xj,yj),节点DOA估计值θj,并且有其中集合Pselect的选取需满足两个条件:
条件1:四个节点围成凸四边形,保证声源的近场初步定位结果在该四边形凸包内;
条件2:四个节点中任意两个节点两两组合,每组节点的最小角度距离函数A(X,Y)满足γ阈值条件;函数A(X,Y)∈(0,π)为X和Y之间的最小角度距离:
其中,X,Y∈(0,2π)分别为每组节点的DOA估计值θj1,θj2(j1≠j2);设定平行阈值γ(0<γ<π),则A(θj1,θj2)需满足:
γ<A(θj1,θj2)<π-γ (3)
若上式不成立则任意剔除其中一个节点,重新选择一个新节点加入到集合Pselect中,重复上述验证过程,直至满足要求获得Pselect;
(b)利用线性最小二乘法融合Pselect中节点的DOA估计值,计算公式为:
xFsinθ-yFcosθ=xjsinθ-yjcosθ(j=1,2,3,4) (4)
上式的矩阵表示形式记作ASFT=b,其中A,b分别为系数矩阵和常量矩阵,SFT为SF的转置,计算求得声源的远场初步定位结果:
SFT=(ATA)-1ATb (5)
(c)输出声源的远场初步定位结果SF=(xF,yF),并将其作为KF的第k次观测值赋值给Z(k)=(xk,yk),则Z(k)=SF;
步骤五、利用KF融合声源的远、近场初步定位结果SF和SN;在不考虑控制作用的情况下,线性离散系统的状态方程和观测方程为:
其中,X是状态变量,Φ是状态转移矩阵,Z是观测变量,H是观测矩阵;W,V为系统过程噪声和观测噪声,其协方差矩阵分别为Q(k)和R(k);uk(x),uk(y)分别为x,y方向的观测噪声,两分量相互独立,服从零均值,方差为的高斯白噪声分布;Q(k),W(k)的定义与观测噪声一致;
状态预测方程:
X(k|k-1)=ΦX(k-1|k-1) (7)
P(k|k-1)=ΦP(k-1|k-1)ΦT+Q(k-1) (8)
其中,ΦT是Φ的转置矩阵,P是X的协方差矩阵;
观测更新方程:
Kg(k)=P(k|k-1)HT/(HP(k|k-1)HT+R) (9)
X(k|k)=X(k|k-1)+Kg(k)(Z(k)-HX(k|k-1)) (10)
P(k|k)=(I-KgH)P(k|k-1) (11)
其中,Kg为卡尔曼增益,I为单位矩阵;
此外,将近场初步定位结果作为参考声源位置SR=(xR,yR),以此计算对应的协方差矩阵P,步骤三中声源的近场初步定位结果SN的协方差矩阵为PN,步骤四中声源的远场初步定位结果SF的协方差矩阵为PF,P的计算公式为:
其中,噪声方差分别为
KF融合过程中参数对应关系:初始状态输入值X0=SN,P0=PN;迭代过程中,第k次的观测值Z(k)=SF,第k次的预测值X(k|k-1),对应的估计值X(k|k);迭代终止,最终声源定位结果记为S*=(x*,y*);
具体实现流程:
①输入初始状态值X0=SN,P0=PN;
②利用公式(7)、公式(8)预测第k次迭代的声源位置,预测结果为X(k|k-1)=(xk,yk),对应的协方差矩阵为P(k|k-1);
③利用步骤四获得声源的远场初步定位结果SF=(xF,yF),由公式(12)计算对应的协方差矩阵PF;
④输入第k次的观测值Z(k)=SF,R(k)=PF,利用公式(9)、公式(10)校正预测结果,获得第k次的最优估计结果X(k|k)=(xk,yk),更新公式(11)获得协方差矩阵P(k|k);
⑤对第k次的估计结果,判断是否满足终止条件;若满足则终止迭代,输出估计结果S*=X(k|k);否则令k=k+1继续迭代,返回步骤②。