菜鸡学习小结--麦克风阵列的波束成形论文(一)

ROBUST STEERABLE DIFFERENTIAL BEAMFORMERS WITH NULL CONSTRAINTS FOR CONCENTRIC CIRCULAR MICROPHONE ARRAYS--Xuehan Wang, Gongping Huang, Israel Cohen, Jacob Benesty, and Jingdong Chen(用于同心圆麦克风阵列的零点约束鲁棒可操纵差分波束形成器)

(1)麦克风阵列模型(CCMA)

p表示第几个环,m表示该环第几个全向麦克风,环半径为r_{p}

  \varphi_{m,p}:表示第p环第m个麦克风所在的位置角度;M_{P}表示第p环上全向麦克风的个数。

 \mathbf{r}_{p,m}表示第p环第m个麦克风所在的位置。

(2)导向矢量矩阵

 其中

 源信号(平面波),在远场中,它在无回声声环境中传播到CCMA。观测信号可以表示为

(3)性能评估方法

通常,需要通过三个指标来评估波束成形的最优值,即波束图、白噪声增益(WNG)和指向性因子(DF)。

波束图描述了波束成形器对来自θ方向的平面波撞击CCMA的灵敏度。

 WNG用于评估波束成形器对阵列缺陷的鲁棒性。

 DF量化麦克风阵列在混响存在时的表现。

\Gamma_{d}(\omega )是扩散噪声的伪相干矩阵,[\Gamma_{d}(\omega ) ]_{ij}=sinc(\omega \delta _{ij}/c)是任意两个麦克风之间的欧氏距离,即二范数。

(4)求解h (ω)

在麦克风阵列波束形成中,通常需要在观察方向上无失真约束 

这样,波束成形问题就变成了找到一个滤波器h (ω),可以在无失真约束下实现其最优性能。

文章主要提出了利用零点约束方法来找到最优滤波器问题,相较于作者在另外一篇文章中所提出的雅可比级数展开的方法获得了更好的性能。

1、零点约束

为了解决在其他文献中广泛讨论的环形麦克风阵列波束形成器在某些频率上可能存在不规则问题,文章提出了利用对称零约束来设计带有CCMA的差分波束形成器。

假设主波束指向\theta _{s}的N阶差分波束形成器有N个不同的零点:θs < θ1 <···< θN≤θs +π。具有CCMA的对称约束可以写成

其中

 引入零点约束可以得到

 其中D的维度为(2N+1)\times M ,i_{2N+1}是第一个元素为1,其余全是零的向量。

根据上述约束条件,可以通过优化某些性能度量得到CCMA差分波束形成滤波器。一种方法是通过最大化WNG,可以表示为以下优化问题

 从而得到

 同样地,CCMA差分波束成形滤波器也可由DF的最大化得到,即

 2、Jacobi-Anger(雅可比展开)

通过雅可比展开,可以将上面的

 展开成

N_{p}(N_{p} \leq N)是展开的阶数,J_{n}( \bar{\omega}_{p})是n阶第一类贝塞尔函数

 为了得到一个n阶对称波束图,需要确保max{Np, p = 1,2,…, Np} = N。

通过Jacobi-Anger展开,使设计的波束型与目标波束型相等,可以构造线性方程组,并通过求解线性方程组得到波束成形滤波器。

该方法的详细描述请参见G. Huang, J. Chen, and J. Benesty, “Insights into frequency-invariant beamforming with concentric circular microphone arrays,” IEEE/ACM Trans. Audio, Speech, Lang. Process., vol. 26, no. 12, pp. 2305–2318, 2018.

(5)设计示例

CMA:p=1,M=6,r=3cm,\theta _{s}=30

CCMA-I:p=2,M=6,r=3cm,\theta _{s}=30外加圆心位置一个麦克风

 CCMA-II:p=3,M_{1}=M_{2}=6,r_{1}=3cm,r_{2}=5cm,\theta _{s}=30,,\psi _{2,1}=30,\psi _{3,1}=0外加圆心位置一个麦克风。

 % CCMA2
    for n=1:length(d_theta)
        D2(n,:)=[1;exp(1j*k*r2(1)*cosd(d_theta(n)-fai_2(1:M2,:)));exp(1j*k*r2(2)*cosd(d_theta(n)-fai_2(1+M2:2*M2,:)))]';
    end
    h2=D2'*pinv(D2*D2')*i0;
    
    for n=1:length(r_p_m_2)
        for m=1:length(r_p_m_2)
            GAMA_2(n,m)=sinc(k*norm(r_p_m_2(n,:)-r_p_m_2(m,:)));
        end
    end
    WNG(3,i)=10*log10(abs(D2(1,:)*h2)^2/(h2'*h2));
    DF(3,i)=10*log10(abs(D2(1,:)*h2)^2/(h2'*GAMA_2*h2));

 论文中有一处需要注意的地方,[\Gamma_{d}(\omega ) ]_{ij}=sinc(\omega \delta _{ij}/c),这里的sinc函数在matlab编写的时候结果会出现错误,暂未找到具体原因,处理办法是使用sin函数。

PS:萌新刚接触波束形成,写了一些阅读论文的笔记,很多地方还一知半解,本来不想公开的,但还是希望能有大佬指出问题,帮助新手更好的学习!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值