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

相关文章

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