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

相关文章

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代