LCMV波束形成和GSC波束形成算法原理介绍及MATLAB实现

2024-02-18 02:10

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

LCMV波束形成

线性约束最小方差波束形成算法(Linearly constrained minimum variance,LCMV)
为了消除阵列方向图在期望信号出现零陷,采取多个线性约束的方式来强制接收期望信号,即
{ min ⁡ w w H R ^ x w s . t . C H w = f \left\{ \begin{aligned} & \underset{\mathbf{w}}{\mathop{\min }}\,\ {{\mathbf{w}}^{H}}\hat{\mathbf{R}}_{x}\mathbf{w} \\ & s.t.\ \ {{\mathbf{C}}^{H}}\mathbf{w}=\mathbf{f} \\ \end{aligned} \right. wmin wHR^xws.t.  CHw=f
其中, f = [ 1 , 1 , ⋯ , 1 ] T \mathbf{f}={{\left[ 1,1,\cdots ,1 \right]}^{T}} f=[1,1,,1]T N × 1 N\times 1 N×1的约束值向量, C = [ a ˉ ( θ 01 ) , a ˉ ( θ 02 ) , ⋯ , a ˉ ( θ 0 N ) ] \mathbf{C}=\left[ \bar{\mathbf{a}}\left( {{\theta }_{01}} \right),\bar{\mathbf{a}}\left( {{\theta }_{02}} \right),\cdots ,\bar{\mathbf{a}}\left( {{\theta }_{0N}} \right) \right] C=[aˉ(θ01),aˉ(θ02),,aˉ(θ0N)] M × N M\times N M×N维的约束矩阵, θ 0 n {{\theta }_{0n}} θ0n n = 1 , 2 , ⋯ , N n=1,2,\cdots ,N n=1,2,,N为可能的期望信号方向。 a ˉ ( θ 0 n ) \bar{\mathbf{a}}\left( {{\theta }_{0n}} \right) aˉ(θ0n)为对应的导向矢量。这样做的目的是在所有期望信号方向上设置无失真约束来达到扩展主瓣的目的。通过拉格朗日乘数法,可以求解得到最终的权系数为
w = R ^ x − 1 C ( C H R ^ x − 1 C ) − 1 f \mathbf{w}\text{=}\mathbf{\hat{R}}_{x}^{-1}\mathbf{C}{{\left( {{\mathbf{C}}^{H}}\mathbf{\hat{R}}_{x}^{-1}\mathbf{C} \right)}^{-1}}\mathbf{f} w=R^x1C(CHR^x1C)1f
当约束矩阵为一个矢量时,该方法退化为最小方差无失真响应(MVDR)波束形成算法,也就是说MVDR算法是LCMV算法的一个特例。

广义旁瓣对消(GSC)算法



在这里插入图片描述



GSC算法是与LCMV算法等效的,其权矢量被分解为自适应部分和非自适应部分,其中自适应部分正交于约束子空间,而非自适应部分位于约束子空间内,其权矢量可以表示为
w = w q − B w a \mathbf{w}={{\mathbf{w}}_{q}}-\mathbf{B}{{\mathbf{w}}_{a}} w=wqBwa
其中, w q = ( C C H ) − 1 C f {{\mathbf{w}}_{q}}={{\left( \mathbf{C}{{\mathbf{C}}^{H}} \right)}^{-1}}\mathbf{Cf} wq=(CCH)1Cf w a = ( B H R ^ x B ) − 1 B H R ^ x w q {{\mathbf{w}}_{a}}={{\left( {{\mathbf{B}}^{H}}{{{\mathbf{\hat{R}}}}_{x}}\mathbf{B} \right)}^{-1}}{{\mathbf{B}}^{H}}{{\mathbf{\hat{R}}}_{x}}{{\mathbf{w}}_{q}} wa=(BHR^xB)1BHR^xwq B \mathbf{B} B为阻塞矩阵,正交于约束矩阵 B H C = 0 {{\mathbf{B}}^{H}}\mathbf{C}=\mathbf{0} BHC=0,其作用是为了阻止期望信号进入辅助支路。关于 B \mathbf{B} B可以通过求 C \mathbf{C} C的补空间来确定
B = I − C ( C H C ) − 1 C H \mathbf{B}=\mathbf{I}-\mathbf{C}{{\left( \mathbf{C}^{H}{{\mathbf{C}}} \right)}^{-1}}{{\mathbf{C}}^{H}} B=IC(CHC)1CH
主支路的输出 y = w q H x \mathbf{y}=\mathbf{w}_{q}^{H}\mathbf{x} y=wqHx, 阻塞矩阵投影后的输出为 z = B H x \mathbf{z}={{\mathbf{B}}^{H}}\mathbf{x} z=BHx,那么自适应的权矢量可以表示为
w a = R ^ z − 1 P ^ z {{\mathbf{w}}_{a}}\text{=}\mathbf{\hat{R}}_{z}^{-1}{{\mathbf{\hat{P}}}_{z}} wa=R^z1P^z
其中, R ^ z = B H R ^ x B {{\mathbf{\hat{R}}}_{z}}={{\mathbf{B}}^{H}}{{\mathbf{\hat{R}}}_{x}}\mathbf{B} R^z=BHR^xB z \mathbf{z} z的协方差矩阵, P ^ z = B H R ^ x w q {{\mathbf{\hat{P}}}_{z}}={{\mathbf{B}}^{H}}{{\mathbf{\hat{R}}}_{x}}{{\mathbf{w}}_{q}} P^z=BHR^xwq z \mathbf{z} z y \mathbf{y} y的互协方差矩阵。
GSC是LCMV的等效,其将后者的有约束的优化问题变成了无约束的优化问题,当 z \mathbf{z} z中含有较少期望信号时,GSC还能正常工作,反之,其性能会大幅度下降。

仿真参数设置

参数名称参数值
阵元数10
期望信号角度 − 5 ∘ -5^{\circ} 5
干扰信号角度 − 3 0 ∘ -30^{\circ} 30 3 0 ∘ 30^{\circ} 30
SNR10dB
INR20
快拍数60

基于上述仿真参数,可以得到LCMV的方向图为

在这里插入图片描述

从图中来看,LCMV的方向图能够在干扰方向形成零陷, 但是由于增加了主瓣约束,将多个方向当作期望信号,导致其主瓣宽度增加。当约束只有一个时,可以得到如下结果
在这里插入图片描述
可以看出,其能够在期望信号方向形成最大增益,干扰方向上形成零陷。
代码如下:

clear;
close all;
clc;
warning off
%% 初始化
M = 10;             %阵元数
fs = 5000;          % 采样频率
f = 1000;           % 信号频率
snap = 600;         % 快拍数
T = 0.5;           %采样时间
t = 1/fs:1/fs:T;
c = 340;
lamda = c/f;              %波长
d = 0.5*lamda;          %阵元间距
theta0 =-5;                %期望信号角度
theta1 =-30;                %干扰角度
theta2 = 30;                %干扰角度
snr=10;                     %信噪比
inr1 =20;                   %干噪比
inr2 = 20;                   %干噪比
snr_noise = 0;              %噪声功率1,0dBW%% 导向矢量
a0 = exp(-1j*2*pi*d*sind(theta0)*(0:M-1)'/lamda);
a1 = exp(-1j*2*pi*d*sind(theta1)*(0:M-1)'/lamda);
a2 = exp(-1j*2*pi*d*sind(theta2)*(0:M-1)'/lamda);%% 信号、干扰和噪声
tar_sig = wgn(1,length(t), snr);
inf1 = wgn(1,length(t),inr1);
inf2 = wgn(1,length(t),inr2);
noise = wgn(M,length(t),snr_noise);%% 阵列接收信号
rec_sig = a0*tar_sig + a1*inf1 + a2*inf2 + noise;
interference = a1*inf1 + a2*inf2;
sig = a0 * tar_sig;%% 协方差矩阵
Rx = rec_sig(:,1:snap)*rec_sig(:,1:snap)'/snap;
Rs = sig(:,1:snap)*sig(:,1:snap)'/snap;
Ri = interference(:,1:snap)*interference(:,1:snap)'/snap;
Rn = noise(:,1:snap)*noise(:,1:snap)'/snap;%% LCMV算法
a01 = exp(-1j*2*pi*d*sind(theta0 + 5)*(0:M-1)'/lamda);
a02 = exp(-1j*2*pi*d*sind(theta0 - 5)*(0:M-1)'/lamda);
C=[a0,a01,a02]; 
f=[1,1,1]'; 
w_lcmv =inv(Rx)*C*(inv(C'*inv(Rx)*C))*f;	%权系数
theta = -90:0.1:90; % scan angle
p = exp(-1j*2*pi*d*(0:M-1)'*sind(theta)/lamda);
y = w_lcmv'*p;
yy = 20*log10(abs(y)/max(abs(y)));
%% 绘图
figure(1);
plot(theta,yy,'linewidth', 2);
xlabel('角度(\circ)');ylabel('归一化增益(dB)')
grid on;
xlim([-90 90])

参考文献:
[1]张小飞.阵列信号处理的理论和应用.国防工业出版社

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



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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三