声源定位系统设计(一)——MVDR波束形成算法

声源定位系统设计(一)——MVDR算法

下一篇:声源定位系统设计(二)——MUSIC算法以及Python代码实现将讲述本篇博客中算法的代码实现以及另一种波束形成算法。


本篇博客希望通过通俗的方式讲清一些简单经典声源定位的方法,并能够按照这种方法自制一个声源定位系统。

一、声源定位、波束形成

首先,声源定位一定是一个阵列信号处理的系统,因为只有一个麦克风接收声音我们是不可能得到声音的方向信息的。利用麦克风阵列可以实现声源到达方向估计(direction-of-arrival estimation),也称为DOA估计。DOA估计的其中一种方法是计算到达不同阵元间的时间差来进行处理的,这一篇博客主要讲的也就是这一种方法中的一个经典算法:MVDR。
而波束形成又是什么呢?在进行声源定位的时候其实也进行了波束形成的过程。波束形成就是令该系统对某些方向的声波具有所需相应的过程。通俗的讲就是说,DOA只是找到了声源来的方向,而波束形成就是进一步把这一个方向的声音从麦克风接收到的声音中滤出来,所以,波束形成也可称为一种空间滤波器。

二、麦克风阵列

麦克风阵列的形式多种多样,我们可以设计成不同样式,在算法层面只需要改变参数即可。常见的阵列有线阵、圆阵、矩形阵、空间阵等等,阵的形状也顾名思义。需要注意的是,对于线阵,我们得不到除阵所在平面之外的信息,所以我们只能估计一个一维的角度,如图:
在这里插入图片描述
除了这个平面以外的信息我们无从得知。
而对于平面阵或空间阵来说,我们能够得到更高维的信息。下文将从线阵和圆阵两种阵型来展开分析,其他阵型方法类似。

三、远场与近场

根据声源和麦克风阵列距离的远近,可将声场模型分为两种:近场模型和远场模型。近场模型将声波看成球面波,它考虑麦克风阵元接收信号间的幅度差;远场模型则将声波看成平面波,它忽略各阵元接收信号间的幅度差,近似认为各接收信号之间是简单的时延关系。显然远场模型是对实际模型的简化,极大地简化了处理难度。一般语音增强方法就是基于远场模型。
近场模型和远场模型的划分没有绝对的标准,一般认为声源离麦克风阵列中心参考点的距离远大于信号波长时为远场;反之,则为近场。设均匀线性阵列相邻阵元之间的距离(又称阵列孔径)为D=n*d,n为阵列间距个数,一般是M-1;声源最高频率语音的波长(即声源的最小波长)为λmin,如果声源到阵列中心的距离大于 2 d 2 λ m i n \frac{2d^2}{\lambda_{min}} λmin2d2,则为远场模型,否则为近场模型,如下图所示。
在这里插入图片描述

四、窄带与宽带

顾名思义,窄带就是单一频率或者频宽很窄的信号,而宽带就频带很宽的信号,相对来说,我们实际信号都是宽带的。

五、MVDR

MVDR是一个自适应波束形成算法,按照波束形成的思想,我们想要去获得声源方向(即声强最强方向)的声音,而抑制其他方向的声音。
下来就是算法具体实现部分了。我分讨论均匀线阵然后迁移至圆阵。

1、均匀线阵

首先说明一下,我们假设入射信号为窄带信号。
在这里插入图片描述
如图,均匀线阵间距为d,入射角为 θ i \theta_i θi,那么该阵列接收到的信号一般表示为:
X ( t ) = A S ( t ) + N ( t ) X(t)=AS(t)+N(t) X(t)=AS(t)+N(t)
我们先给出了公式,然后再来解释:
X即为接收到的信号,他是时间的函数,读者应该也能够猜出,N是加性噪声。在这里,S是第一个麦克风接收到的原始信号,而A被称为阵列流型向量,有时也被称为导向向量,顾名思义,他与入射方向有关。设阵列中一共有M个麦克风,则:
A = [ 1 , e − j ω τ 2 , e − j ω τ 3 , . . . , e − j ω τ M ] A=[1,e^{-j\omega\tau_2},e^{-j\omega\tau_3},...,e^{-j\omega\tau_M}] A=[1,ejωτ2,ejωτ3,...,ejωτM]
这个公式有信号处理基础的小伙伴应该不难理解,其中 τ \tau τ为信号入射的时间差, ω \omega ω为信号的角频率。
根据几何关系,易知,均匀线阵中 τ n = n d s i n θ c \tau_n=\frac{ndsin\theta}{c} τn=cndsinθ,c为波速,这里取声速340。
对于多声源的情况,S与A变变成了矩阵,假设有N个声源:
在这里插入图片描述
更一般地,如果是宽带的情况,那就对应不同频率, ω \omega ω有不同的取值。
以上便是麦克风的输出模型,我们将其变换到频域:
y ( ω ) = a s ( ω ) + v ( ω ) y(\omega)=as(\omega)+v(\omega) y(ω)=as(ω)+v(ω)
设计一个滤波器 w ( ω ) w(\omega) w(ω),令:
z ( ω ) = w H ( ω ) y ( ω ) z(\omega)=w^H(\omega)y(\omega) z(ω)=wH(ω)y(ω)
a s = x as=x as=x,则 z = w H x + w H v z=w^Hx+w^Hv z=wHx+wHv,由于讨论窄带,我们省去 ω \omega ω
从频域来看,我们希望所需要的方向( θ \theta θ)的信号无失真地完整输出,那么要限制: w H a ( θ ) = 1 w^Ha(\theta)=1 wHa(θ)=1
又令自相关函数:
Φ x x = E [ x x H ] \Phi_{xx}=E[xx^H] Φxx=E[xxH]
根据自相关函数的性质可得:
Φ y y = Φ x x + Φ v v \Phi_{yy}=\Phi_{xx}+\Phi_{vv} Φyy=Φxx+Φvv
Φ z z = w H Φ x x w + w H Φ v v w = w H Φ y y w \Phi_{zz}=w^H\Phi_{xx}w+w^H\Phi_{vv}w=w^H\Phi_{yy}w Φzz=wHΦxxw+wHΦvvw=wHΦyyw
作为一个滤波器,我们想做的便是最小化噪声的影响,即:
m i n ( w H Φ y y w ) min(w^H\Phi_{yy}w) min(wHΦyyw)
故优化问题可以表达为:
m i n ( w H Φ y y w ) , s . t . w H a ( θ ) = 1 min(w^H\Phi_{yy}w),s.t.w^Ha(\theta)=1 min(wHΦyyw),s.t.wHa(θ)=1
通过拉格朗日乘子法解该优化问题可得:
w = Φ y y − 1 a ( θ ) a H ( θ ) Φ y y − 1 a ( θ ) (1) w=\frac{\Phi_{yy}^{-1}a(\theta)}{a^H(\theta)\Phi_{yy}^{-1}a(\theta)}\tag1 w=aH(θ)Φyy1a(θ)Φyy1a(θ)(1)
而其功率谱可表示为:
P ( θ ) = w H Φ y y w = 1 a H ( θ ) Φ y y − 1 a ( θ ) (2) P(\theta)=w^H\Phi_{yy}w=\frac{1}{a^H(\theta)\Phi_{yy}^{-1}a(\theta)}\tag2 P(θ)=wHΦyyw=aH(θ)Φyy1a(θ)1(2)
实际中,由于自相关函数不好计算,常用协方差矩阵代替:
Φ y y ≈ R = 1 N y H y \Phi_{yy}\approx R=\frac{1}{N}y^Hy ΦyyR=N1yHy
到此,功率谱与波束形成的系数已经推导完毕。
根据这个功率谱(公式2),我们可以通过扫描遍历空间所有的 θ \theta θ来找到功率最强的方向,即为声源方向,同时可以根据公式(1)提取出声源方向的信号。

2、圆阵

在这里插入图片描述
其实道理都相同,推导过程这里略去,对于二维圆阵,我们要估计的就是 θ \theta θ ϕ \phi ϕ两个,那么公式就拓展变成了:
P ( θ , ϕ ) = 1 a H ( θ , ϕ ) R − 1 a ( θ , ϕ ) (3) P(\theta,\phi)=\frac{1}{a^H(\theta,\phi)R^{-1}a(\theta,\phi)}\tag3 P(θ,ϕ)=aH(θ,ϕ)R1a(θ,ϕ)1(3)
同理,这里的a也就是在 θ , ϕ \theta,\phi θ,ϕ这个方向上的阵列流型向量,公式相同:
A = [ 1 , e − j ω τ 2 , e − j ω τ 3 , . . . , e − j ω τ M ] A=[1,e^{-j\omega\tau_2},e^{-j\omega\tau_3},...,e^{-j\omega\tau_M}] A=[1,ejωτ2,ejωτ3,...,ejωτM]
只是这里时延的计算不一样了。
事实上,我们可以固定一点O,计算所有麦克风距离O点的距离,把这个距离上的时延作为该麦克风的时延(反正都是相对的值,O点选哪都没关系)。自然地,我们选O为坐标原点,那么在直角坐标系下:
τ = k ⃗ H r ⃗ \tau=\vec k^H\vec r τ=k Hr
其中 k ⃗ \vec k k 为声音到达的方向的单位向量, r ⃗ \vec r r 为该阵的位置向量。
后面的计算想必大家就都会了~

六、总结

本篇博客讲述了一些声源定位的基本概念以及经典MVDR波束形成算法。其他一些基础的波束形成算法与MVDR也有相近的地方,在下一篇博客中,我将讲述另一种波束形成算法——MUSIC算法以及这两种算法的Python代码实现方式。

下一篇:声源定位系统设计(二)——MUSIC算法以及Python代码实现将讲述本篇博客中算法的代码实现以及另一种波束形成算法。

  • 44
    点赞
  • 339
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: CBF、MVDR和LMS波束形成是用于无线通信中的信号处理技术,其中CBF(Constant Beamforming)、MVDR(Minimum Variances Distortionless Response)和LMS(Least Mean Square)都是经典的算法。这些算法可以利用多个接收天线的信号进行波束形成,以提高信号的质量,加强通信的可靠性和稳定性。 在MATLAB环境下实现CBF、MVDR和LMS波束形成,主要需要完成以下步骤: 首先,需要对输入信号进行数据预处理,包括降噪、滤波、对齐等操作,以达到更高的信噪比和更好的频谱处理效果。 其次,需要设计一个多天线阵列,收取来自不同方向的信号,并对这些信号进行采样和量化处理,得到数字信号。 接下来,就可以使用CBF、MVDR和LMS等经典波束形成算法,对这些数字信号进行处理。具体的算法流程包括: CBF算法:通过对所有天线接收到的信号进行相位和振幅的加权平均,实现波束形成,以得到最佳信号质量。 MVDR算法:根据最小方差原则,通过调整各个天线接收到的信号的权重,使得接收到的信号具有最小的方差,从而提高信号的抗干扰能力。 LMS算法:利用最小均方误差原则,在每次迭代中,对接收到的信号进行调整,以达到最小误差的效果,从而提高信号的稳定性和可靠性。 最后,在MATLAB环境下对CBF、MVDR和LMS波束形成算法进行仿真和性能测试,从而确定最佳的算法和参数组合,以满足实际的通信需求。 综上所述,CBF、MVDR和LMS波束形成的MATLAB算法可以有效地提高无线通信的信号质量和稳定性,是一种非常实用的信号处理技术。 ### 回答2: CBF、MVDR和LMS波束形成是无线通信中常用的一种信号处理方法。CBF (Conventional Beamforming)是最简单的波束形成方法,MVDR (Minimum Variance Distortionless Response)波束形成是一种无偏差、最优的波束形成算法,LMS (Least Mean Square)波束形成是一种适应性滤波算法,通常用于自适应波束形成中。 Matlab是一款矩阵计算和数据可视化工具,它可以用来实现CBF、MVDR和LMS波束形成算法。以MVDR算法为例,首先需要确定波束形成器输入信号的协方差矩阵R,然后根据所选定的方向,设计阵列导向矢量a,并计算MVDR波束形成器权向量w。 具体实现步骤如下: 1. 构建导向矢量a:根据所选定的方向,设计导向矢量a; 2. 构建输入信号协方差矩阵R:根据所采集到的阵列信号,建立输入信号协方差矩阵R; 3. 计算MVDR波束形成器权向量w:将导向矢量a和协方差矩阵R代入到MVDR的权向量公式中,计算出MVDR波束形成器权向量w; 4. 对输入阵列信号进行波束形成:将输入信号和MVDR波束形成器权向量w相乘,得到波束形成后的输出信号。 至于LMS波束形成的实现,则需要根据所需要的自适应性,设计步长系数和误差信号参考值,并通过调整权向量w的系数来实现优化。 总之,CBF、MVDR和LMS波束形成算法在无线通信中扮演着重要的角色,在Matlab中也可以简单易行地实现。 ### 回答3: CBF(Conventional Beamforming)、MVDR(Minimum Variance Distortionless Response)和LMS(Least Mean Squares)是三种不同的波束形成算法,在声学、电子、信号处理和无线通信中有着广泛的应用。 CBF算法是一种传统的波束形成算法,主要用于抑制不感兴趣的信号,提高感兴趣信号的信噪比。CBF算法的思想是,指定一个狭窄的主瓣,沿着一个指定方向对信号进行增强,同时对其他方向的信号进行抑制。CBF算法最常用于消除从非声源方向的信号,以便更好地接收来自感兴趣源方向的信号。 MVDR算法是一种最小方差无失真响应波束形成算法,也是一种适用范围更广、更先进的波束形成算法MVDR算法的思想是,通过在狭窄主瓣方向上增加权重,使该方向上的干扰最小化,同时对其他方向的信号进行最小失真响应增强,进而实现更好的感兴趣信号接收。MVDR算法具有良好的干扰抑制能力和阵列方向性能,常用于各种无线通信、音频处理和雷达领域。 LMS算法是一种基于自适应滤波的波束形成算法,主要适用于多径传输时的信号处理。该算法通过不断调整滤波器的参数,使得传输信号的最小均方误差得以最小化,将信号从噪声背景中分离出来。LMS算法特别适用于远程传输中的多径干扰抑制、噪声消除和通信信号恢复等多种场合。 以上三种波束形成算法都可以用Matlab进行实现和仿真,具体实现方法可以根据算法特点和实际需求进行选择。对于工程应用中的具体场景,需要通过多方面的实验和优化,进行模拟和调试,以保证所选算法在实际应用中的效果最大化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值