波束形成算法:LCMV实现(MATLAB)

2023-11-11 05:10

本文主要是介绍波束形成算法:LCMV实现(MATLAB),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 一、波束形成原理
  • 二、波束形成的最佳权向量
  • 三、代码思路
  • 四、代码(MATLAB)


前言

在这里记录阵列信号处理的学习过程。


一、波束形成原理

  利用阵元直接相干叠加而获得输出,其缺点在于只有垂直于阵列平面方向的入射波在阵列输出端才能同相叠加,从而形成方向图中主瓣的极大值。反过来说,如果阵列可以围绕它的中心轴旋转,那么当阵列输出为最大时,空间波必然由垂直于阵列平面的方向入射而来。但有些天线阵列是很庞大的,且是不能转动的。因此,设法设计一种相控阵天线法(或称常规波束形成法),这是最早出现的阵列信号处理方法。在这种方法中,阵列输出选取一个适当的加权向量以补偿各个阵元的传播延时,从而使在某一期望方向上阵列输出可以同相叠加,进而使阵列在该方向上产生一个主瓣波束,而对其他方向上产生较小的响应,用这种方法对整个空间进行波束扫描就可确定空中待测信号的方位。
  以一维M元等距线阵为例,如下图所示,设空间信号为窄带信号,每个通道用一个复加权系数来调整该通道的幅度和相位。
在这里插入图片描述
这时阵列的输出可表示为
y ( t ) = ∑ i = 1 M w i ∗ ( θ ) x i ( t ) y(t) = \sum_{i=1}^{M}w_{i}^{*}(\theta)x_i(t) y(t)=i=1Mwi(θ)xi(t)
采用向量形式表达,可得到以下公式
y ( t ) = w H ( θ ) x ( t ) y(t) = w^H(\theta)x(t) y(t)=wH(θ)x(t)
其中, x ( t ) = [ x 1 ( t ) x 2 ( t ) … x M ( t ) ] T , w ( θ ) = [ w 1 ( θ ) w 2 ( θ ) … w M ( θ ) ] T x(t) = [x_1(t) \ x_2(t)\ \dots \ x_M(t)]^T, w(\theta) = [w_1(\theta)\ w_2(\theta)\ \dots \ w_M(\theta)]^T x(t)=[x1(t) x2(t)  xM(t)]T,w(θ)=[w1(θ) w2(θ)  wM(θ)]T

二、波束形成的最佳权向量

  实际上波束形成就是通过调整权系数 w w w,使得天线阵列在某一个方向上增益最大,也就是指向了某个方向。
  对不同的权向量,上式对来自不同方向的电波便有不同的响应,从而形成不同方向的空间波束。一般用移相器进行加权处理,即只调整信号相位,不改变信号幅度,因为信号在任一瞬间各阵元上的幅度是相同的。不难看出,若空间只有一个来自方向 θ \theta θ的电波,其方向向量为 α ( θ k ) \alpha(\theta_k) α(θk) ,则当权向量 w w w α ( θ k ) \alpha(\theta_k) α(θk)时,输出 y ( n ) = α ( θ k ) H α ( θ k ) = M y(n) = \alpha(\theta_k)^H\alpha(\theta_k) = M y(n)=α(θk)Hα(θk)=M最大,实现导相定位作用。这时,各路的加权信号为相干叠加,称这一结果为空域匹配滤波。
  假设空间远场有一个期望信号 d ( t ) d(t) d(t)(到达方向为 θ d \theta_d θd)和 J J J个不感兴趣的信号 i j ( t ) , j = 1 , … , J i_j(t),j=1,\dots,J ij(t),j=1,,J(称为干扰信号,其到达方向为 θ i j \theta_{ij} θij),令每个阵元都加上了高斯白噪声 n k ( t ) n_k(t) nk(t),它们具有相同的方差 σ 2 \sigma^2 σ2。在这些假设下,第 k k k个阵元上的接受信号可以表示为
x k ( t ) = a k ( θ d ) d ( t ) + ∑ j = 1 J a k ( θ i j ) i j ( t ) + n k ( t ) x_k(t) = a_k(\theta_d)d(t) + \sum_{j=1}^{J}a_k(\theta_{ij})i_j(t)+n_k(t) xk(t)=ak(θd)d(t)+j=1Jak(θij)ij(t)+nk(t) ( x 1 ( t ) x 2 ( t ) ⋮ x M ( t ) ) = ( a ( θ d ) , a ( θ i 1 ) , a ( θ i 2 ) , … , a ( θ i j ) ) ( d ( t ) i 1 ( t ) ⋮ i J ( t ) ) + ( n 1 ( t ) n 2 ( t ) ⋮ n M ( t ) ) \begin{pmatrix} x_1(t) \\ x_2(t) \\ \vdots \\ x_M(t) \end{pmatrix} = \begin{pmatrix} a(\theta_d),a(\theta_{i1}),a(\theta_{i2}),\dots,a(\theta_{ij}) \end{pmatrix} \begin{pmatrix} d(t) \\ i_1(t) \\ \vdots \\ i_J(t) \end{pmatrix} + \begin{pmatrix} n_1(t) \\ n_2(t) \\ \vdots \\ n_M(t) \end{pmatrix} x1(t)x2(t)xM(t)=(a(θd),a(θi1),a(θi2),,a(θij))d(t)i1(t)iJ(t)+n1(t)n2(t)nM(t)

写成矩阵形式
x ( t ) = A s ( t ) + n ( t ) = a ( θ d ) d ( t ) + ∑ j = 1 ) J a ( θ i j ) i j ( t ) + n ( t ) x(t) = As(t) + n(t) = a(\theta_d)d(t) + \sum_{j=1)}^{J}a(\theta_{ij})i_j(t) + n(t) x(t)=As(t)+n(t)=a(θd)d(t)+j=1)Ja(θij)ij(t)+n(t)
N N N个快拍的波束形成器输出 t ( t ) = w H x ( t ) ( t = 1 , … , N ) 的 平 均 功 率 为 t(t) = w^Hx(t)(t=1,\dots,N)的平均功率为 t(t)=wHx(t)(t=1,,N)
P ( w ) = 1 N ∑ t = 1 N ∣ y ( t ) ∣ 2 = 1 N ∑ t = 1 N ∣ w H x ( t ) ∣ 2 P(w) = \frac{1}{N}\sum_{t=1}^{N}|y(t)|^2 = \frac{1}{N}\sum_{t=1}^{N}|w^Hx(t)|^2 P(w)=N1t=1Ny(t)2=N1t=1NwHx(t)2
化简得到
P ( w ) = ∣ w H a ( θ d ) ∣ 2 1 N ∑ t = 1 N ∣ d ( t ) ∣ 2 + ∑ j = 1 N [ 1 N ∑ i = 1 N ∣ i j ( t ) ∣ 2 ] ∣ w H a ( θ ) i j ∣ 2 + 1 N ∣ ∣ w ∣ ∣ 2 ∑ t = 1 N ∣ ∣ n ( t ) ∣ ∣ 2 P(w) = |w^Ha(\theta_d)|^2\frac{1}{N}\sum_{t=1}^{N}|d(t)|^2+\sum_{j=1}^{N} [\frac{1}{N}\sum_{i=1}^{N}|i_j(t)|^2]|w_Ha(\theta)_{ij}|^2+\frac{1}{N}||w||^2\sum_{t=1}^{N}||n(t)||^2 P(w)=wHa(θd)2N1t=1Nd(t)2+j=1N[N1i=1Nij(t)2]wHa(θ)ij2+N1w2t=1Nn(t)2
N → ∞ N \to \infty N时,上式可以表示为
P ( w ) = E [ ∣ d ( t ) ∣ 2 ] ∣ w H a ( θ d ) ∣ 2 + ∑ j = 1 J E [ ∣ i j ( t ) ∣ 2 ] ∣ w H a ( θ i j ) ∣ + σ ∣ ∣ w ∣ ∣ 2 P(w) = E[|d(t)|^2]|w^Ha(\theta_d)|^2 + \sum_{j=1}^{J}E[|i_j(t)|^2]|w^Ha(\theta_{ij})| + \sigma||w||^2 P(w)=E[d(t)2]wHa(θd)2+j=1JE[ij(t)2]wHa(θij)+σw2
  为了保证方向 θ d \theta_d θd期望信号的正确接收,并完全抑制其他 J J J个干扰,很容易根据上式得到关于权矢量的约束条件。
w H a ( θ d ) = 1 , w H a ( θ i j ) = 0 w^Ha(\theta_d)=1,\quad w^Ha(\theta_{ij})=0 wHa(θd)=1,wHa(θij)=0
  这称为波束的迫零条件,因为它强迫接收阵列的波束方向图的“零点”指向所有的 J J J个干扰信号。在以上两个约束条件下, P ( w ) = E [ ∣ d ( t ) ∣ 2 ] + σ ∣ ∣ w ∣ ∣ 2 P(w) = E[|d(t)|^2] + \sigma||w||^2 P(w)=E[d(t)2]+σw2
实际上我们需要同时降低P(w)的后两项,一项是 ∑ j = 1 J E [ ∣ i j ( t ) ∣ 2 ] ∣ w H a ( θ i j ) ∣ \sum_{j=1}^{J}E[|i_j(t)|^2]|w^Ha(\theta_{ij})| j=1JE[ij(t)2]wHa(θij),这是来自其他方向的波信号,还有一项是我们引入的噪声 σ ∣ ∣ w ∣ ∣ 2 \sigma||w||^2 σw2,当我们把前面一项强制置零时,会导致后面一项变大,所以我们要保证两者之和最小,所以我们只固定 w H a ( θ d ) = 1 w^Ha(\theta_d)=1 wHa(θd)=1从而问题变成了在约束条件的约束下,求满足约束条件的权向量,有 min ⁡ w P ( w ) \min_{w}P(w) wminP(w)
实际上 P ( w ) = E [ ∣ y ( t ) ∣ 2 ] = w H E [ x ( t ) x H ( t ) ] w = w H R w P(w) = E[|y(t)|^2] = w^HE[x(t)x^H(t)]w =w_HRw P(w)=E[y(t)2]=wHE[x(t)xH(t)]w=wHRw
式中, R R R x ( t ) x(t) x(t)的协方差矩阵,实际上这个 P ( w ) P(w) P(w)是总体的特征,而之前的是样本的特征,两个是差不多的意思。
所以我们把问题归结于,求满足约束条件的权矢量,有 min ⁡ w E [ ∣ y ( t ) ∣ ] = min ⁡ w w H R ~ w \min_wE[|y(t)|]=\min_w{w^H\tilde{R}w} wminE[y(t)]=wminwHR~w这个问题可以利用Lagrange乘数法求解,令目标函数为
L ( w ) = w H R ~ w + λ [ w H a ( θ d ) − 1 ] L(w) = w^H\tilde{R}w+\lambda[w^Ha(\theta_d)-1] L(w)=wHR~w+λ[wHa(θd)1]方程两边对 w w w求导,涉及到矩阵求导,本质上是对每个元素求导。
得到结果
∂ L ∂ w = 2 R ~ w + λ a ( θ d ) = 0 \frac{\partial L}{\partial w}=2\tilde{R}w+\lambda a(\theta_d)=0 wL=2R~w+λa(θd)=0得到最优权矢量
w o p t = u R − 1 a ( θ d ) w_{opt} = uR^{-1}a(\theta_d) wopt=uR1a(θd)式中, u u u为一比例常数; θ d \theta_d θd是期望信号的波达方向。这样就可以决定 J + 1 J+1 J+1个发射信号的波束形成的最佳权向量。此时,波束形成器将只接收来自 θ d \theta_d θd的信号,并一直其他波达方向的信号。
下面求 u u u,注意到 w H a ( θ d ) = 1 w^Ha(\theta_d) = 1 wHa(θd)=1等价于 a H ( θ d ) ∗ w = 1 a^H(\theta_d)*w=1 aH(θd)w=1,上式两边乘 a H ( θ d ) a^H(\theta_d) aH(θd),可以求出 u = 1 a H ( θ d ) R − 1 a ( θ d ) u=\frac{1}{a^H(\theta_d)R^{-1}a(\theta_d)} u=aH(θd)R1a(θd)1故得到 w o p t = R − 1 a ( θ d ) a H ( θ d ) R − 1 a ( θ d ) w_{opt} = \frac{R^{-1}a(\theta_d)}{a^H(\theta_d)R^{-1}a(\theta_d)} wopt=aH(θd)R1a(θd)R1a(θd)
这样所有的公式的推导已经结束,我们得到了这个最优的权向量,我们抛开前面推导的公式不开,仅仅看最后的结果,可以发现,波束形成期的最佳权向量 w w w取决于阵列方向向量 a ( θ k ) a(\theta_k) a(θk),也就是我们需要提前知道我们期望的信号到达的方向,即 a ( θ d ) a(\theta_d) a(θd),而在移动通信里这个方面一般是不知道的,这也是一个研究的方面,我下一篇再写,称为DoA估计,也就是估计信号的来向角度。

三、代码思路

推导了这么多,实际上我们需要的只是一个期望信号的角度方向,我们根据这个方向可以求出最优权矢量,使得天线方向图指向该角度。
代码其实也很简单。
假设我们本次仿真线性阵列,天线个数 M = 18 M = 18 M=18, λ = 10 \lambda=10 λ=10,间距 d = λ ∗ 0.5 d = \lambda *0.5 d=λ0.5,期望信号从10°射入,有两个干扰信号从-30,30度射入。
代码流程如下:
1.最终接收到信号Xt的协方差矩阵
2.根据公式算出最优w
3.画出方向图

四、代码(MATLAB)

clc;
clear;
M = 18; % 天线数
lambda = 10;
d = lambda / 2;
L = 100;  %快拍数
thetas = [10];    % 期望信号入射角度
thetai = [-30 30]; % 干扰入射角度
n = [0:M-1]';
vs = exp(-1j * 2 * pi * n * d * sind(thetas) / lambda); % 信号方向向量
vn = exp(-1j * 2 * pi * n * d * sind(thetai) / lambda); % 干扰方向向量
f = 1600; % 载波频率
t = [0:L-1];
di = sin(2*pi*f*t/(8*f));    % 期望信号
vn1 = sin(2*pi*2 * f*t/(8*f));  % 干扰信号1 
vn2 = sin(2*pi*4 * f*t/(8*f));  % 干扰信号2 
A = [vs vn];
St = [di;vn1;vn2];
Xt = A*St + randn(M,L);   % 矩阵形式的公式
R_x = 1/L * (Xt * Xt');
R_x_inv = inv(R_x);
W_opt = R_x_inv * vs / (vs' * R_x_inv * vs);
% 测试此时的方向图
sita = 90 * [-1:0.001:1];
% 得到不同角度的方向矢量
v = exp(-1i*2*pi*n* d*sind(sita)/lambda);
B = abs(W_opt' * v);
plot(sita,20*log10(B/max(B)),'k')
title('波束图')
xlabel('角度/degree')
ylabel('波束图/dB')
grid on

结果如下:
结果图,可以看出方向图指向了期望信号10度方向,干扰信号-30,30度都得到了相应的抑制

结果方向图,可以看出方向图指向了期望信号10度方向,干扰信号-30,30度都得到了相应的抑制。
本人也正在进行阵列信号处理的学习,欢迎大家交流。

主要参考:张小飞.阵列信号处理及MATLAB实现[M].电子工业出版社

这篇关于波束形成算法:LCMV实现(MATLAB)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/387774

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo