精华内容
下载资源
问答
  • 目标方位估计的经典算法的matlab源码。功能:两信噪比都为15dB的非相关窄带信号源分别从-1°2°入射到基阵,与信号不相关窄带高斯白噪声,采用常规波束(DAS)扫描、MVDR波束形成、MUSIC估计目标方位。
  • 利用MATLAB实现了MUSIC算法、Root MUSIC算法、ESPRIT算法和MVDR算法,对阵列信号处理中的DOA估计有更深入的理解
  • 利用MATLAB实现了MVDR算法与认知的MVDR算发的对比,通过对比结果可以看出,基于认知的MVDR算法能够更好地形成零陷
  • 此代码为常用的算法,包括CBF
  • CBF,MVDR,MUSIC算法.zip

    2021-03-21 13:22:08
    传统波形形成(CBF),最小方差无失真响应(MVDR是一种基于最大信干噪比(SINR)准则的自适应波束形成算法),多重信号分类(MUSIC算法是一种基于矩阵特征空间分解的方法),用于天线阵列信号处理的角度估计
  • 里面算法很全面,各种基本算法及个算法的优化都包含在里面,各个算法均可仿真,适合初学者及有需要的人士学习。虽然要10分,但你不会吃亏的。
  • 231752211224329_MUSICMVDR_mvdr_CBF算法_music_mvdr算法c代码.zip
  • 231752211224329_MUSICMVDR_mvdr_CBF算法_music_mvdr算法c代码_源码.zip
  • 经典MUSIC算法MATLAB仿真,带详细注释,仿真通过。可以直接使用。 经典MUSIC算法MATLAB仿真,带详细注释,仿真通过。可以直接使用。
  • 常规波束形成,阵列信号处理, CBF/MVDR/MUSIC三种算法之间的对比分析 主要内容是CBF和MUSIC算法对比分析,MVDR和MUSIC算法对比分析,其次是MUSIC在不同信噪比下的对比分析,仿真图片清晰明了。
  • 声源定位系统设计(一)——MVDR波束形成算法

    千次阅读 多人点赞 2020-05-28 22:56:41
    声源定位系统设计(一)——MVDR算法 下一篇:声源定位系统设计(二)——MUSIC算法以及Python代码实现将讲述本篇博客中算法的代码实现以及另一种波束形成算法。 目录 声源定位系统设计(一)——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代码实现将讲述本篇博客中算法的代码实现以及另一种波束形成算法。

    展开全文
  • music和esprit算法MATLAB程序

    热门讨论 2011-08-15 20:35:07
    用MATLAB编写的程序,适用于均匀阵列,注释详细,初学者就能看明白。
  • 均匀线阵均匀圆阵的MUSIC算法仿真,即MVDR滤波。程序还包括数字上变频下变频
  • mvdr波束形成matlab

    2021-04-25 10:42:58
    研究 并仿真了基于最小均方误差准则的 LMS 算法、RLS 算法和 MVDR 自适应 算法,并且做了一些比较。关键词:数字......MVDR算法matlab程序_计算机软件及应用_IT/计算机_专业资料。clc ...根据期望信号的导向矢量,可以...

    信息与通信工程学院 阵列信号处理实验报告(自适应波束形成 Matlab 仿真) ...

    同时研究了窄带信号的自适应波束形成的经典算法。研究 并仿真了基于最小均方误差准则的 LMS 算法、RLS 算法和 MVDR 自适应 算法,并且做了一些比较。关键词:数字......

    MVDR算法matlab程序_计算机软件及应用_IT/计算机_专业资料。clc ...

    根据期望信号的导向矢量,可以采取 MVDR 算法、特征子空间法等进行最优波束形成。 1.最小方差无畸变响应算法(MVDR) 采用在通信、雷达信号处理中具 有重要应用的最......

    最小方差无失真响应(MVDR)自适应波束形成方法在声纳阵列信号处理中得到了广泛的应用。当存在强干扰时,传统的MVDR算法的稳定性较差,在有限次快拍数条件下,会带来......

    度,改善了雷达阵列系统分辨性能.文中给出了MIMO阵列相关滤波器组分离目标回波信号的原理框图,并进行了MIMO阵列常规波束形成器和最小方差无失真响应(MVDR)波束形成 ......

    关键词:波束形成;空间波数谱估计;MVDR;对角加 载 ___ ___ Study of MVDR Self-adapting Beam-forming Algorism Abstract Beamforming technology and signal speci......

    研究并仿真了基于最小均方误差准 则的 LMS 算法、RLS 算法和 MVDR 自适应算法,并且做了一些比较。 关键词:数字波束形成、自适应波束形成、智能天线、最小均方......

    同时研 究了窄带信号的自适应波束形成的经典算法。研究并仿真了基于最小均方误差准 则的 LMS 算法、RLS 算法和 MVDR 自适应算法,并且做了一些比较。关键词:数字......

    自适应波束形成算法的现... 3页 免费 自适应波束形成与Matlab... 24页 5下载券 数字波束形成-DBF 50页 1下载券 MVDR自适应波束形成算法... 23页 2......

    (LS-CMA ),基于 DOA 估 计的 空间 线性 约束最小方差算法(LCMV )、最小方差无畸变响应(MVDR )算法 、特征子 空间(ESB )算法等,以上算法各有其优缺点 [5......

    根据期望信号的导向矢量,可以采取 MVDR 算法、特征子空间法等进行最优波束形成。 1.最小方差无畸变响应算法(MVDR) 采用在通信、雷达信号处理中具 有重要应用的最......

    二、波束形成技术 日前,波束形成技术具有很多性能各异的算法,如延迟求和算法、相移算法、MVDR 算法、MUSIC 算法以及 LMS 算法等自适应算法,同时水听器阵列也具有不......

    基于拉伸处理的宽带频域接收波束形成方法 [J], 曹运合; 张守宏; 王胜华; 尚 海燕; 罗永健 5.基于分数时延的 TAMVDR 宽带波束形成方法 [C], XU Zhong-liang......

    III MVDR 算法得到的最优权值为: (3-59) WMVDR ~. 風“他) (3-60) 将其投影到信号子空间可得: (3-61) 3.3 基于 MATLAB 的波束形成算法仿真为验证......

    对普通波束形成曲线进行峰值检测,发现目 标后,对频域阵列信号进行子阵划分,并且只对 目标附近的方位做子阵聚焦 MVDR 波束形成,进行 二次方位检测,得到更精确的......

    声源定位在军事、工业噪声定位等领域具有广泛应用,基于麦克风阵列信号的波束形成是声源定位的主要方法.与传统波束形成算法相比,最小方差无失真响应(MVDR)算法具有较大......

    MVDR波束形成算法的风速风向测量方法 西继东,朱阁彦,李新波,石要武 (吉林大...

    11,又称为最小方差无失真响应的自适 应波束形成器.LCMV波束形成器由最小方差无失真响应(MVDR)波束形成器推广得到,将单一的期 望信号无失真输出线性约束拓展到多......

    基于MVDR算法的波束形成抗干扰性能分析_郭涛_天文/地理_自然科学_专业资料。基于 M V 算法 的波 束形成抗干扰性能 分析 , , , D R 郭涛尹 文茂 李希友 刘 ......

    展开全文
  • 目录声源定位系统设计(二)——MUSIC算法以及Python代码实现一、前言二、MUSIC算法三、MVDR代码实现四、MUSIC算法代码实现 一、前言 上篇博客中已经详细介绍了声源定位的一些概念以及MVDR波束形成法的原理,在本篇...

    声源定位系统设计(二)——MUSIC算法以及Python代码实现

    上一篇:声源定位系统设计(一)——MVDR波束形成算法讲述了声源定位系统的一些基本概念以及MVDR算法的原理。

    一、前言

    上篇博客中已经详细介绍了声源定位的一些概念以及MVDR波束形成法的原理,在本篇博客中,我将介绍另一种更为精准的波束形成算法:MUSIC算法以及这两种算法的Python代码实现。

    二、MUSIC算法

    MUSIC(Multiple Signal Classification)算法的方法类似于MVDR算法,只是在最后计算的时候有些许不同。该算法建立在一下假设基础上:
    ①、噪声为高斯分布,每个麦克风之间的噪声分布为随机过程,之间相互独立,空间平稳,即每个麦克风噪声方差相等。
    ②、要求空间信号为高斯平稳随机过程,且与单元麦噪声互不相干,相互独立。
    ③、目标声源数目小于阵列元数目。
    ④、阵元间隔不大于来波信号中频率最高波长的1/2。
    MUSIC算法是空间谱估计技术的代表之一,它利用特征结构分析。其基本原理是将协方差矩阵进行特征值分解。它通常把空间信号分为两种,一种是信号特征向量对应的信号空间,另一种是噪声向量对应的噪声空间,利用噪声空间和信号空间的正交性原理,构造空间谱函数进行搜索,从而预估出DOA信息。
    按照上一篇博客的做法,阵列数据的协方差矩阵为:
    R = E [ X ( t ) X H ( t ) ] = A R S A + R N R=E[X(t)X^H(t)]=AR_SA+R_N R=E[X(t)XH(t)]=ARSA+RN
    其中, R S R_S RS R N R_N RN分别为信源的协方差矩阵和噪源的协方差矩阵。
    通过对阵列协方差矩阵进行特征值分解,将特征值进行升序排列,其中有D个较大的特征值,对应于声源信号,而有M-D个较小的特征值,对应于噪声信号。
    λ i \lambda_i λi为第i个特征值, v i v_i vi为其对应的特征向量,则:
    R v i = λ i v i Rv_i=\lambda_i v_i Rvi=λivi
    λ i = σ 2 \lambda_i=\sigma^2 λi=σ2是R的最小特征值,则:
    R v i = σ 2 v i , i = D + 1 , D + 2 , . . . , M Rv_i=\sigma^2v_i,i=D+1,D+2,...,M Rvi=σ2vi,i=D+1,D+2,...,M
    R = A R S A H + σ 2 I R=AR_SA^H+\sigma^2I R=ARSAH+σ2I代入上式得:
    σ 2 v i = ( A R S A H + σ 2 I ) v i \sigma^2v_i=(AR_SA^H+\sigma^2I)v_i σ2vi=(ARSAH+σ2I)vi
    化简可得:
    A R S A H v i = 0 AR_SA^Hv_i=0 ARSAHvi=0
    由于 A H A A^HA AHA是满秩矩阵, ( A H A ) − 1 (A^HA)^{-1} (AHA)1存在,而 R S − 1 R_S^{-1} RS1也存在,则上式同乘以 R S − 1 ( A H A ) − 1 A H R_S^{-1}(A^HA)^{-1}A^H RS1(AHA)1AH后变成:
    R S − 1 ( A H A ) − 1 A H A R S A H v i = 0 R_S^{-1}(A^HA)^{-1}A^HAR_SA^Hv_i=0 RS1(AHA)1AHARSAHvi=0
    于是有 A H v i = 0 , i = D + 1 , D + 2 , . . . , M A^Hv_i=0,i=D+1,D+2,...,M AHvi=0,i=D+1,D+2,...,M
    故可以用噪声向量来求信号源的角度。先构造噪声矩阵 E n E_n En
    E n = [ v D + 1 , v D + 2 , . . . v M ] E_n=[v_{D+1},v_{D+2},...v_M] En=[vD+1,vD+2,...vM]
    最后定义空间谱 P ( θ ) P(\theta) P(θ)
    P ( θ ) = 1 a H ( θ ) E n E n H a ( θ ) P(\theta)=\frac{1}{a^H(\theta)E_nE_n^Ha(\theta)} P(θ)=aH(θ)EnEnHa(θ)1
    其中a为上一篇博客中的方向导向向量,通过遍历 θ \theta θ,即可得到一个空间的功率谱,寻找其最值即可寻得DOA方向角。二维的估计也想同,增加一个遍历的维度即可。

    三、MVDR算法代码实现

    直接上代码了:
    我这里用了一个16阵元的麦克风阵列信号采集板。设计两层圆阵。

    nmicro = 16
    layers = 2
    micros_every_layer = nmicro//layers
    R = [0.082, 0.103]
    theta_micro = np.zeros(nmicro)#所有麦克风阵元的角度
    for layer in range(layers):
        theta_micro[micros_every_layer*layer:micros_every_layer*(layer+1)] = \
            2*np.pi/micros_every_layer*(np.arange(micros_every_layer)+0.5*layer)
    #所有麦克风阵元的坐标
    pos = np.concatenate((np.stack([R[0] * np.cos(theta_micro[:8]), R[0] * np.sin(theta_micro[:8]), np.zeros(8)],axis = 1), \
        np.stack([R[1] * np.cos(theta_micro[8:]), R[1] * np.sin(theta_micro[8:]), np.zeros(8)],axis = 1)), axis=0)
    #PyAudio的信号采集参数
    CHUNK = 1600
    FORMAT = pyaudio.paInt16
    CHANNELS = 18
    RATE = 16000
    p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    #最后求得的声源位置
    xr = 0
    yr = 0
    #遍历的x和y,假设z为固定深度1m
    X_STEP = 20
    Y_STEP = 20
    x = np.linspace(-0.4, 0.4, X_STEP)
    y = np.linspace(-0.4, 0.4, Y_STEP)
    z = 1
    def beamforming():
        global xr, yr, x, y
        while True:
            data = stream.read(1600)
            data = np.frombuffer(data, dtype=np.short)
            data = data.reshape(1600,18)[:,:16].T
            p = np.zeros((x.shape[0], y.shape[0]))#声强谱矩阵
            #傅里叶变换,在频域进行检测
            data_n = np.fft.fft(data)/data.shape[1]# [16,1600]
            data_n = data_n[:, :data.shape[1]//2]
            data_n[:, 1:] *= 2
            #宽带处理,对于50个不同的频率都进行计算
            #r存储每个频率下对应信号的R矩阵
            r = np.zeros((50, nmicro, nmicro), dtype=np.complex)
            for fi in range(1,51):
                rr = np.dot(data_n[:, fi*10-10:fi*10+10], data_n[:, fi*10-10:fi*10+10].T.conjugate())/nmicro
                r[fi-1,...] = np.linalg.inv(rr)
            #MVDR搜索过程
            for i in range(x.shape[0]):
                for j in range(y.shape[0]):
                    dm = np.sqrt(x[i]**2+y[j]**2+z**2)
                    delta_dn = pos[:,0]*x[i]/dm + pos[:,1]*y[j]/dm
                    for fi in range(1,51):
                        a = np.exp(-1j*2*np.pi*fi*100*delta_dn/340)
                        p[i,j] = p[i,j] + 1/np.abs(np.dot(np.dot(a.conjugate(), r[fi-1]), a))
    
            xr = np.argmax(p)//Y_STEP
            yr = np.argmax(p)%Y_STEP
            print(x[xr],y[yr])
    
            #转为强度0-1
            p /= np.max(p)
            绘制声强图
            x1, y1 = np.meshgrid(x,y)
            ax = plt.axes(projection='3d')
            ax.plot_surface(x1,y1,np.abs(p.T))
            plt.pause(0.01)
    
    if __name__='__main__':
        while True:
            beamforming()
    

    四、MUSIC算法代码实现

    阵列与MVDR相同

    nmicro=16
    layers = 2
    micros_every_layer = nmicro//layers
    R = [0.082, 0.103]
    theta_micro = np.zeros(nmicro)#所有麦克风阵元的角度
    for layer in range(layers):
        theta_micro[micros_every_layer*layer:micros_every_layer*(layer+1)] = \
            2*np.pi/micros_every_layer*(np.arange(micros_every_layer)+0.5*layer)
    #所有麦克风阵元的坐标
    pos = np.concatenate((np.stack([R[0] * np.cos(theta_micro[:8]), R[0] * np.sin(theta_micro[:8]), np.zeros(8)],axis = 1), \
        np.stack([R[1] * np.cos(theta_micro[8:]), R[1] * np.sin(theta_micro[8:]), np.zeros(8)],axis = 1)), axis=0)
    #PyAudio的信号采集参数
    CHUNK = 1600
    FORMAT = pyaudio.paInt16
    CHANNELS = 18
    RATE = 16000
    p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    #最后求得的声源位置
    xr = 0
    yr = 0
    #遍历的x和y,假设z为固定深度1m
    X_STEP = 20
    Y_STEP = 20
    x = np.linspace(-0.4, 0.4, X_STEP)
    y = np.linspace(-0.4, 0.4, Y_STEP)
    z = 1
    def beamforming():
        global xr, yr, ifplot, x, y
        while True:
            data = stream.read(1600)
            data = np.frombuffer(data, dtype=np.short)
            data = data.reshape(1600,18)[:,:16].T
    
            data_n = np.fft.fft(data)/data.shape[1]# [16,1600]
            data_n = data_n[:, :data_n.shape[1]//2]
            data_n[:, 1:] *= 2
    
            r = np.zeros((50, nmicro, nmicro-1), dtype=np.complex)
            for fi in range(1,51):
                rr = np.dot(data_n[:, fi*10-10:fi*10+10], data_n[:, fi*10-10:fi*10+10].T.conjugate())/nmicro
                feavec,_,_ = np.linalg.svd(rr)
                r[fi-1,...] = feavec[:, 1:]
                
            p = np.zeros((x.shape[0], y.shape[0]))
            for i in range(x.shape[0]):
                for j in range(y.shape[0]):
                    dm = np.sqrt(x[i]**2+y[j]**2+z**2)
                    delta_dn = pos[:,0]*x[i]/dm + pos[:,1]*y[j]/dm
                    for fi in range(1,51):
                        a = np.exp(-1j*2*np.pi*fi*100*delta_dn/340)
                        p[i,j] = p[i,j] + 1/np.abs(np.dot(np.dot(np.dot(a.conjugate(), r[fi-1]), r[fi-1].T.conjugate()), a))
    
            #n = np.argmin(np
            xr = np.argmax(p)//Y_STEP
            yr = np.argmax(p)%Y_STEP
            print(x[xr],y[yr])
    
            p /= np.max(p)
            x1, y1 = np.meshgrid(x,y)
            ax = plt.axes(projection='3d')
            ax.plot_surface(x1,y1,np.abs(p.T))
            plt.pause(0.01)
    

    上一篇:声源定位系统设计(一)——MVDR波束形成算法讲述了声源定位系统的一些基本概念以及MVDR算法的原理。

    展开全文
  • 提供了DOA估计的几乎所有算法的matlab程序,有注释,而且多种算法进行了比较,图像清晰
  • 基于改良MUSIC和ADL-LCMV的自适应波束形成算法
  • 三、时、空域及功率谱 波束形成主要感兴趣的方向进行增强/抑制,而谱估计更多是参数估计问题,前者操作多为主动,后者操作多为被动,MVDR算法对二者均适用。这里暂且抛开应用场景,仅从时、空角度理解功率谱的”...

    信号的时域、空域特性 

    2017-09-01 07:17

    一、时域与空域特性

    以远场模型(平面波)为例,假设均匀线阵接收的为窄带信号,假设相邻振元间隔为d,入射角为:

    从空域坐标来看,相邻振元的间隔为:

    等价到时间轴来看,采样点的间距为:,对应时间间隔为:

    二、时、空域与采样定理

    A、空域角度理解

    相邻振元的相位差为:

    以干涉仪为例,如果存在相位模糊,有

    k为非零整数,如果希望不出现相位模糊

    对应扫描边界,则有

    容易证明,同干涉仪一样,均匀线阵谱估计中的导向矢量,如果不满足上面的约束条件,同样会有多峰的问题。

    B、时域角度理解

    前文提到,采样点对应的时间间隔为

    ,即采样周期。空域均匀线阵对应时域均匀采样,采样频率:

    入射信号的频率为:

    如果采样无混叠,需要满足Nyquist采样定理:

    该约束条件等价于:

    可以看出均匀线阵的相位无模糊对应时域均匀采样的奈奎斯特定理。多说一句,如果是非均匀线阵、圆阵等形式,可以理解成对应维度的非均匀采样;从空域角度理解,非均匀阵列可以解决模糊问题,从时域角度理解,稀疏采样/非均匀采样可以突破奈奎斯特采样定理。

    三、时、空域及功率谱

    波束形成主要对感兴趣的方向进行增强/抑制,而谱估计更多是参数估计问题,前者操作多为主动,后者操作多为被动,MVDR算法对二者均适用。这里暂且抛开应用场景,仅从时、空角度理解功率谱的”谱”特性。

    接着上文的时域、空域思路,这里先从时域的角度来表述,为了简化均不考虑加窗情形。

    A、时域角度理解

    对于N点均匀采样的信号,对其进行傅里叶变换:

    的相关函数为:

    容易证明有如下对应关系:

    而相关函数对应的傅里叶变换为功率谱密度,可以求解功率谱密度:

    B、空域角度理解

    N个均匀线阵接收单元,对应的波束形成为:

    即空域的波束形成可以理解为时域的傅里叶变换,

    从而空域的功率谱密度可以等价为:

    考虑到时域、空域具有等价性,空域的功率谱这么理解是合理的。

    现在以常用的MVDR算法来理解这种等价性:

    接收信号:

    MVDR就是含有等式约束的最优化问题:

    可以求解:

    这个时候,如果将最优的w带入y,空域角度理解:y对应就是波束形成的结果。时域角度理解:y对应为傅里叶变换的结果。

    通常MVDR的结果为的输出,根据上文分析可知,该结果从时域理解就是功率谱(差一个常数),所以从空域角度称作“谱”其实也是可以被接受的,对应功率(谱):

    因为这是在空域,为了与时域功率谱的名字加以区别,可以称其为空间谱。

    具体空间谱名称怎么由来,本文并没有考证。本文只是提供了一种理解“空间谱”名称的角度,至少MUSIC等算法的“谱”便与此不同,或许MUSIC等算法只是继承了“空间谱”这个名词也未可知。
     

    转载于:https://www.sohu.com/a/168802088_768739

    展开全文
  • 阵列信号DOA估计系列(三).MVDR/Capon波束形成(附代码)

    万次阅读 多人点赞 2020-05-27 13:16:41
    本文主要介绍Capn波束形成算法,又名最小方差无失真相应(Minimum Variance Distortionless Response, MVDR),并将其方法应用于DOA估计。
  • 包括解凸优化问题的matlab工具sedumi、MVDR角加载MVDR、RCB、DCRCB、Music
  • doa算法的matlab实现

    2013-10-28 15:21:29
    MUSIC,root-Muisc,TLS-ESPRIT,MVDR的matlab程序
  • 在我研究的问题中,只用到Capon算法(完整术语为:MVDR最小方差无失真响应/Capon滤波方法) ,其所谓的自适应其实只是 在期望方向最小化了测量数据的方差( 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP ...
  • 首先力荐鄢社锋老师的书籍《优化阵列信号处理》,对于麦克风阵列信号处理的讲解非常全面,阵列的基本概念与优化方法讲的很是透彻,而且最重要事情当然是全中文的啦,而且鄢社锋是本领域的顶尖专家,比很多翻译过来...
  • 圆阵目标方位估计,mvdr方法(matlab),自己编的,总共有三个,分别是mvdr,cbf和music方法
  • 包含MVDR算法,MUSIC算法,ESPRIT算法,FSAPES算法的MATLAB仿真,里面附有详细的注释,有不理解的地方可以评论区回复,适合初学者参考
  • 雷达阵列回波模拟DOA、MVDR仿真 下列matlab程序主要是仿真了3发4收等效为1发12收的连续扫频波制式下的阵列回波,并在阵列的基础上做DOA和MVDR角度分辨率实验。 %% 本程序为FMCW制式雷达发射信号与回波信号仿真...
  • DOAG估计算法

    2012-11-23 09:55:29
    分别利用MUSIC,RootMUSIC,ESPRIT,MVDR算法实现DOA估计。
  • 波束形成的一些程序,包括CBF,MVDR,RLS,MUSIC等等

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

mvdr和music算法对吧