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

相关文章

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景