DOA估计算法——Capon算法

 1.波速形成基本思想

        在理解Capon算法之前,我们有必要先了解波束形成的基本思想以及原理到底是什么。这有助于我们更好的理解Capon算法的思想。

图 1 

如图1展示了均匀阵列波束导向的示意图。图中wm表示加权值,波速形成(DBF)的基本思想就是将各阵元输出进行加权求和,在一定时间内将天线阵列“导向”到一个方向上,对期望信号得到最大输出功率的导向位置,同时这个位置也表征了目标或波达方向。

        此外,DBF的基本原理简单来说,就是利用阵元直接相干叠加而获得输出,其缺点在于只有垂直于阵列平面方向的入射波在阵列输出端才能同相叠加,从而形成方向图中主瓣的极大值。反过来说,如果阵列可以围绕它的中心轴旋转,那么当阵列输出最大时,空间波必然由垂直于阵列平面的方向入射而来。但有些天线阵列是很庞大的,且是不能转动的。因此,设法设计一种相控天线法(或称常规波束形成法),这是最早出现的阵列信号处理方法。这种方法中,阵列输出选取一个合适的加权向量以补偿各个阵元的传播延时,从而使在某一期望方向上阵列输出可以同相叠加,进而使阵列在该方向上产生一个主瓣波束,而对其他方向上产生较小的响应,用这种方法对整个空间进行波束扫描就可确定空中待测信号的方位。因此,计算权值wm是波束形成这类方法的关键,目前DBF权重主要基于以下准则进行计算:

  • 最大信噪比准则(MSNR):使期望信号分量功率与噪声分量功率之比最大,但是必须知道噪声的统计量和期望信号的波达方向。
  • 最大信干噪比准则(MSINR):使期望信号功率与干扰功率及噪声分量功率之和的比最大。
  • 最小均方误差准则(MMSE):在非雷达应用中,阵列协方差矩阵中通常都含有期望信号,基于此种情况提出的准则。使得阵列输出与某期望响应的均方误差最小,不需要知道期望信号的波达方向。
  • 最大似然比准则(MLH):在对有用信号完全先验未知的情况下,参考信号无法设置,因此,在干扰噪声背景下,首先要取得对有用信号的最大似然估计。
  • 线性约束最小方差准则(LCMV):对有用信号形式和来向完全已知,在某种约束条件下使阵列输出的方差最小。

 2.Capon算法

        Capon算法属于一种在线性约束最小方差准则(LCMV)下的波束形成算法,所谓波束形成即在某些准则约束下,求解阵列输出的最优权。实质上波束形成属于一种空域滤波器。波束形成的“导向”作用是通过调整加权系数完成的,阵列的输出是对各阵元的接收信号量x(n)在 各阵元上的加权和,令权向量为w,则输出可写作为:

可见对不同的权向量,上式对来自不同方向的信号有不同的响应从而形成不同方向的空间波束。假设空间远场有一个感兴趣的信号d(t) (其波达方向为θd)和J个干扰信号,1,..J((其波达方向为θi),令每个阵元上的加性白噪声为nk(t),它们具有相同的方差。在这些假定的条件下,第k个阵元上的接收信号可以表示为

等式右边的三项分别表示信号,干扰和噪声。假设有M个阵元如果用矩阵的形式表示式(2),则有

其中 ,分别为M个阵元上接收的数据;

 表示波达方向来自的方向向量。假设接收端得到了N个快拍数据,则根据式(1)可得到波形形成器的输出的平均功率为:

式(4)可以表示为:

如上式子所示,输出功率关于波达角的函数通常被称为空间谱。为了保证来自 方向的信号正常接收,同时完全抑制掉其它J个干扰,很容易根据式子(5)得到权向量的约束条件为:

综上所述,我们可以得出Capon算法所要求解的优化问题可以表述为:

可以采用拉格朗日乘子法求解。求解过程如下:

令:

L分别对w和λ求偏导并使各自的偏导数为零,由此可得:

将式(9)中的第二个式子左乘并将第一个式子代入可得 

式(10)右乘,可得 

于是得

式(12)右乘可得 

于是得

将式(14)代入式(12)并取复共轭转置可得:

将式(15)代入式(5)即可得到Capon的空间谱为:

根据式(16)进行谱峰搜索,峰值所在的索引表征了目标波达方向(DOA)。

3.Capon算法仿真 

        仿真环境:Matlab2021b;

        波达方向分别为:10°、-15°、21°;

        信源快拍数、阵元个数:1024、32;

        分别对信噪比为:-10dB、20dB、30dB

        仿真代码如下:

%%  Author:Poulen
%%  Data:2023.5.29
%%  Capon算法仿真
clear 
close all;
clc;

%%  产生信号
M=32;                       %阵元单元
c=3e8;                      %光速
f0=77e9;                    %初始频率
lambda=c/f0;                %波长
slope=30e12;                %调频斜率
time=60e-6;                 %60us
d=0:lambda/2:(M-1)*lambda/2;%阵列天线
thita=[-15,21,10];          %波达方向
K = length(thita);
N=1024;                     %信号长度
t=linspace(0,time,N);
A=zeros(M,K);               %导向向量空间 M*K
S=zeros(K,N);               %信号空间

f = 100+f0; 
for i = 1:K
    A(:,i) = exp(-1j*2*pi/lambda*d(:)*sind(thita(i)));
    S(i,:) = exp(1j*2*pi*f*t(:));
    f = 1000+f;
end
S = A*S;                    %产生阵列接收数据

%%  向数据添加白噪声
SNR = 60;                   %单位dB
S = S +(randn(size(S)).*std(S))/db2mag(SNR);

%%  计算信号协方差矩阵
R = (1/N).*S*conj(S).';
R_inv = inv(R);

%%  Capon 算法
scale = -60:0.1:59;         %扫面范围
P_Capon = zeros(length(scale),1);
idx = 1;
for i=scale
    a = exp(-1j*2*pi/lambda*d(:)*sind(i));
    P_Capon(idx) = 1/(conj(a.')*R_inv*a); 
    idx = idx + 1;
end
figure;
plot(scale,db(P_Capon),'LineWidth',1.6,'Color',[0 0 0]);
xlabel('AngleRange(°)');
ylabel('Amplitude(dB)');
title('CaponAlgorithm');
legend(' SNR = 60dB');

仿真效果如下图所示:

 

从仿真结果我们不难得出,随着信噪比的增大,Capon估计精度及性能逐渐增强。此外对Capon算法的优缺点做如下总结:

优点:不需要信源数的先验信息,该算法也具有一定的抗干扰性和鲁棒性,能够适用于不同类型和复杂度的信号处理应用。

缺点:需要对协方差矩阵进行求逆,算法的计算和实现较为复杂,需要一定的数字和计算机技术的支持。

4.结束语

        本次分享到此结束,另外创作不易,希望各位毫不吝啬的给博主加加关注,点点赞,非常感谢大家的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/158084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AVL树的底层实现

文章目录 什么是AVL树?平衡因子Node节点插入新节点插入较高左子树的左侧新节点插入较高左子树的右侧新节点插入较高右子树的左侧新节点插入较高右子树的右侧 验证是否为平衡树二叉树的高度AVL的性能 什么是AVL树? AVL树又称平衡二叉搜索树,相…

基于ssm+vue的程序设计课程可视化教学系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Jmeter进行压力测试不为人知的秘密

jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。jmeter是免…

Mysql中的进阶增删查改操作(二)

联合查询和合并查询 一.联合查询1.内连接2.外链接2.1左外连接2.2右外连接 3.自连接4.子查询5.合并查询 一.联合查询 步骤 1.进行笛卡尔积 2.列出连接条件 3.根据需求再列出其他条件 4.针对列进行精简(可以使用聚合函数) 我们先搭建一个多表查询的框架 这样一个多表查询就搭建出…

换硬币C语言(超详细分析!包会)

换硬币C语言(详解) 题目介绍分析题目代码题目讲解 题目介绍 分析 通过枚举的方式找出所有可能的找零方案,并统计满足条件的方案的个数。使用三层嵌套的循环遍历所有可能的组合,判断总金额是否等于给定的金额 x,并输出…

Smart Tomcat的使用

文章目录 Smart Tomcat的作用Smart Tomcat的安装Smart Tomcat的配置Smart Tomcat的启动 Smart Tomcat的作用 我们知道使用Servlet来完成一个项目一共需要七个步骤,即创建maven项目、添加依赖、创建目录结构、编写代码、打包程序、部署程序、验证程序。这样的确是完…

城市建设后如何进行对建筑的实时监测,预防危险?

建筑后健康监测是指对已建成的建筑物进行定期的结构健康监测,以确保其安全性和稳定性。这种监测可以包括对建筑物的振动、变形、裂缝、损伤等进行监测,以及对其结构完整性进行评估。此外,建筑物健康监测也可以促进建筑物的智能化和自动化管理…

Java-Review

题型分值总分分布简答 5 ∗ 8 ′ 5*8 5∗8′ 4 0 ′ 40 40′面向对象、异常处理、多线程、输入输出处理程序分析和补全 3 ∗ 1 0 ′ 3*10 3∗10′ 3 0 ′ 30 30′异常处理、Collection、图形化界面、输入输出处理编程 2 ∗ 1 5 ′ 2*15 2∗15′ 3 0 ′ 30 30′Collections、多线…

Docker Swarm: 容器编排的力量和优势深度解析

文章目录 Docker Swarm的核心概念1. 节点(Node)2. 服务(Service)3. 栈(Stack) 使用Docker Swarm1. 初始化Swarm2. 加入节点3. 创建服务4. 扩展和缩减服务5. 管理栈6. 管理服务更新 Docker Swarm的优势深度解…

JAVA深化篇_42—— 正则表达式

3 正则表达式 3.1正则表达式介绍 3.1.1 什么是正则表达式 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),是计算机科学的一个概念。正则表达式通常被用来…

前端反卷计划-组件库-03-组件样式

Hi, 大家好!我是程序员库里。 今天开始分享如何从0搭建UI组件库。这也是前端反卷计划中的一项。 在接下来的日子,我会持续分享前端反卷计划中的每个知识点。 以下是前端反卷计划的内容: 目前这些内容持续更新到了我的 学习文档 中。感兴趣…

2023年【陕西省安全员B证】考试题库及陕西省安全员B证找解析

题库来源:安全生产模拟考试一点通公众号小程序 陕西省安全员B证考试题库是安全生产模拟考试一点通生成的,陕西省安全员B证证模拟考试题库是根据陕西省安全员B证最新版教材汇编出陕西省安全员B证仿真模拟考试。2023年【陕西省安全员B证】考试题库及陕西省…

5g路由器赋能园区无人配送车联网应用方案

随着人工智能、无人驾驶技术和自动化技术的不断进步,无人配送技术得到了极大的发展。园区内的物流配送任务通常是繁琐的,需要大量的人力资源和时间。无人配送技术能够提高配送效率并减少人力成本。无人配送车辆和机器人能够根据预定的路线和计划自动完成…

23111701[含文档+PPT+源码等]计算机毕业设计javaweb点餐系统全套餐饮就餐订餐餐厅

文章目录 **项目功能简介:****点餐系统分为前台和后台****前台功能介绍:****后台功能介绍:** **论文截图:****实现:****代码片段:** 编程技术交流、源码分享、模板分享、网课教程 🐧裙:77687156…

实践小记——C#格式化小数输出

文章导航 格式化小数位数示例格式化小数总结参考文章 面向Winform的实践过程中,遇到的一些使用到的小细节; 当然其他地方基本上也同理。 写作不易,希望友善多金的码友能够随手点一个赞,共同创建氛围更加良好的开发者社区&#xf…

QTcpSocket发送结构体的做法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> QTcpSocket发送结构体其实很简单:使用QByteArray类对象进行封装发送,示例代码如下: /* 消息结构体 */ struct stMsg {int m_A…

VRRP专题

一,VRRP:虚拟路由冗余协议 将多个路由设备联合组成一台虚拟的路由设备,这台虚拟的路由设备做用户的网关,转发数据;这台虚拟的设备的网关由一个高优先级的设备承载,该设备被称为master路由器,其…

Flutter 应用启动从闪屏页短暂黑屏再到第一个页面

由于应用初始状态启动会有白屏现象,便使用 flutter_native_splash 2.3.5 插件生成了启动相关的配置,并且按照示例使用了 import package:flutter_native_splash/flutter_native_splash.dart;void main() {WidgetsBinding widgetsBinding WidgetsFlutte…

软件开发和测试

一,敏捷软件开发 二,软件测试

Vue3.0和2.0语法不同分析

前言&#xff1a;本篇文章只做VUE3.0和VUE2.0语法上的不同分析&#xff0c;不做性能和源码架构等的分析。 一、VUE3.0和VUE2.0代码结构不同 VUE3.0代码实例 <template><div><span>count is {{ count }}</span><span>plusOne is {{ plusOne }}…