阵列信号处理—窄带波束形成(二)

1. 常规波束形成(Conventional Beamforming)

最经典的波束形成器即常规波束形成,其直接选取阵列导向矢量作为阵列输出的权重向量,进而补偿阵列时延,然后对期望信号方向加权输出以形成波束主瓣:

\mathbf{W}_{cb}=\mathbf{A}/M

显然计算复杂度低是CB算法的一大特点,但是由于其权重直接与阵列导向矢量相关,如果导向矢量出现失配,则算法性能会严重下降,且权重固定,算法整体鲁棒性较差。

2. CB算法仿真

首先仿真生成期望信号为15 kHz频率的正弦波

import matplotlib.pyplot as plt
import numpy as np
import scipy.io as scio

Fs = 65536 # 采样频率
c = 340    # 声速
f = 15000  # 信号中心频率
N = 2**16  # 采样点

# SOI
t = np.arange(0, Fs/N, 1/Fs)
s = np.sin(2*np.pi*f*t)

接下来建立一个声源面网格,距离麦克风阵列2m。在网格中任取一点作为仿真声源位置:(0.8485,-0.5676)

# source plane
dx = 4; dy = 3
xs = np.linspace(-dx, dx, 200)
ys = np.linspace(-dy, dy, 150)
Xs, Ys = np.meshgrid(xs,ys)
Zs = 2

# source position
sp = np.array([xs[60], ys[30]])  #(0.8485,-0.5676)

计算出阵列导向矢量,然后遍历声源面网格

def CB_beamformer(sv,M,Rxx):
    p = np.zeros((Xs.shape[0],Xs.shape[1]),dtype='complex_')
    for j in range(Xs.shape[1]):
        for i in range(Xs.shape[0]):
            g = np.squeeze(sv[:,i,j])
            w = g/M
            p[i,j] = np.array([w])@Rxx@w
            
    return p

定位结果如下,也可以根据pcolor调其他好看的颜色

 之前基本都是使用matlab来复现算法,所以写python的话还是掉进了不少坑,过程中调试了很多小毛病。本文只附了部分代码,仅作个人总结随笔,感兴趣的可以私信交流,谢谢!

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值