波束形成算法: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

相关文章

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

python中列表list切分的实现

《python中列表list切分的实现》列表是Python中最常用的数据结构之一,经常需要对列表进行切分操作,本文主要介绍了python中列表list切分的实现,文中通过示例代码介绍的非常详细,对大家... 目录一、列表切片的基本用法1.1 基本切片操作1.2 切片的负索引1.3 切片的省略二、列表切分的高

基于Python实现一个PDF特殊字体提取工具

《基于Python实现一个PDF特殊字体提取工具》在PDF文档处理场景中,我们常常需要针对特定格式的文本内容进行提取分析,本文介绍的PDF特殊字体提取器是一款基于Python开发的桌面应用程序感兴趣的... 目录一、应用背景与功能概述二、技术架构与核心组件2.1 技术选型2.2 系统架构三、核心功能实现解析

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常

Golang中map缩容的实现

《Golang中map缩容的实现》本文主要介绍了Go语言中map的扩缩容机制,包括grow和hashGrow方法的处理,具有一定的参考价值,感兴趣的可以了解一下... 目录基本分析带来的隐患为什么不支持缩容基本分析在 Go 底层源码 src/runtime/map.go 中,扩缩容的处理方法是 grow