当前位置: 首页 > news >正文

波束形成(BF)从算法仿真到工程源码实现-第八节-波束图

一、概述

        本节对MVDR、LCMV、LMS等算法的波束图进行仿真。

二、MVDR代码仿真

2.1 mvdr代码

clc;
clear;
M = 18; % 天线数
lambda = 10;
d = lambda / 2;
L = 100;  %快拍数
thetas = [10];    % 期望信号入射角度
thetai = [-30 30]; % 干扰入射角度
n = [0:M-1]';
vs = exp(-1j * 2 * pi * n * d * sind(thetas) / lambda); % 信号方向向量
vn = exp(-1j * 2 * pi * n * d * sind(thetai) / lambda); % 干扰方向向量
f = 1600; % 载波频率
t = [0:L-1];
di = sin(2*pi*f*t/(8*f));    % 期望信号
vn1 = sin(2*pi*2 * f*t/(8*f));  % 干扰信号1 
vn2 = sin(2*pi*4 * f*t/(8*f));  % 干扰信号2 
A = [vs vn];
St = [di;vn1;vn2];
Xt = A*St + randn(M,L);   % 矩阵形式的公式
R_x = 1/L * (Xt * Xt');
R_x_inv = inv(R_x);
W_opt = R_x_inv * vs / (vs' * R_x_inv * vs);
% 测试此时的方向图
sita = 90 * [-1:0.001:1];
% 得到不同角度的方向矢量
v = exp(-1i*2*pi*n* d*sind(sita)/lambda);
B = abs(W_opt' * v);
plot(sita,20*log10(B/max(B)),'k')
title('波束图')
xlabel('角度/degree')
ylabel('波束图/dB')
grid on

2.2 mvdr波束图

三、LCMV代码仿真

3.1 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])

3.2 lcmv波束图

四、LMS代码仿真

4.1 lms代码

clear;
clc;
M = 16;
thetas = [0 30 60];
lambda = 10;
d = lambda /2;N = 1000;
n = 0:N-1;
f0 = 2000;
s = [1*sin(2*pi*f0 *n/(8*f0));...2*sin(2*pi*2*f0 *n/(8*f0));...3*sin(2*pi*3*f0 *n/(8*f0))];
% 生成方向矢量
A = exp(-1i * 2 * pi * d * (0:M-1)' * sind(thetas) / lambda);
St = A*s + randn(M,N);
% LMS 算法 开始 进行自适应滤波
di = s(1,:);  % 第一行为期望信号
u = 0.0001;
w = zeros(M,1);  % 初始化权重向量for k = 1:Ny(k) = w'*St(:,k);e(k) = di(k) - y(k);w = w + u * St(:,k) * conj(e(k));
end
scan_theta = [-89:90];
beam = zeros(1,length(scan_theta));
for i = 1 :length(scan_theta)% 构造该方向的方向向量v = exp(-1i * 2 * pi *d* (0:M-1)'.*sind(scan_theta(i))/lambda);beam(i) = abs(w'*v);
end
figure;
plot(scan_theta,20*log10(beam/max(beam)))
title('方向图')
figure;
for k = 1:Nen(k) = (abs(e(k)))^2;
end
semilogy(en); hold on;
xlabel('迭代次数')
ylabel('MSE')
title('MSE')

4.2 lms波束图

五、总结

        从结果上看,自适应滤波器效果要优于MVDR和LCMV算法,LCMV由于多了零点约束,比MVDR可控性更强。

相关文章:

波束形成(BF)从算法仿真到工程源码实现-第八节-波束图

一、概述 本节对MVDR、LCMV、LMS等算法的波束图进行仿真。 二、MVDR代码仿真 2.1 mvdr代码 clc; clear; M 18; % 天线数 lambda 10; d lambda / 2; L 100; %快拍数 thetas [10]; % 期望信号入射角度 thetai [-30 30]; % 干扰入射角度 n [0:M-1]; vs exp(-1j * 2…...

静态代码深度扫描详解

静态代码深度扫描是一种通过分析源代码结构、语法、语义及潜在逻辑,在不运行程序的情况下全面检测代码缺陷、安全漏洞和质量问题的技术。它通过结合数据流分析、控制流分析、符号执行等高级技术,实现对代码的深度理解,帮助开发团队在早期发现…...

LC25. K 个一组翻转链表(自己用)

25. K 个一组翻转链表 Java代码: 思路:利用虚拟头节点结合反转链表实现 Code: class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dummy new ListNode(0);if (head null || k 1)return head;ListNode…...

Spring事务同步器在金融系统中的应用:从风控计算到交易投递

一句话总结 通过 TransactionSynchronization 机制,成功将投行交易系统的可靠性提升至金融级要求,并在对公贷款风控中实现高效资源管理。未来,事务管理将不仅仅是“提交”与“回滚”的二元选择,而是向智能化、实时化演进的核心基础设施。 1. 架构设计 1.1 整体架构图 2.…...

sealos跳转到cusor安装出错

第一次打开cursor安装出错怎么办 我出现这个问题的解决方式是重新下载并且切换目录解决...

【CUDA 】第3章 CUDA执行模型——3.5循环展开(1)

CUDA C编程笔记 第三章 CUDA执行模型3.5 循环展开3.5.1 展开的规约 待解决的问题: 第三章 CUDA执行模型 3.5 循环展开 循环展开是一种循环优化的技术,通过减少分支出现频率循环维护指令。 循环主体代码被多次编写,任何封闭的循环可以把迭代…...

AndroidStudio编译报错 Duplicate class kotlin

具体的编译报错信息如下: Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt found in modules kotlin-stdlib-1.8.10 (org.jetbrains.kotlin:kotlin-stdlib:1.8.10) and kotlin-stdlib-jdk8-1.6.21 (org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21) D…...

LeetCode hot 100—搜索二维矩阵

题目 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 fa…...

栈与队列习题分享(精写)

最小栈 题解 一、题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素 val 推入堆栈。 void pop() 删除堆栈顶部的元素。 int…...

Kotlin 集合过滤全指南:all、any、filter 及高级用法

在 Kotlin 中,集合过滤是数据处理的核心操作之一。无论是简单的条件筛选,还是复杂的多条件组合,Kotlin 都提供了丰富的 API。本文将详细介绍 filter、all、any、none 等操作符的用法,并展示如何在实际开发中灵活运用它们。 1. 基础…...

【lerobot】3-开源SO-100 主从臂的舵机位置校正、遥控操作(ubuntu系统)

官方从零教程:https://github.com/huggingface/lerobot/blob/main/examples/10_use_so100.md 8-lerobot aloha装配完毕如何进行遥操作 需要先完成的 组装好了so-100 2个机械臂下载安装了lerobot的代码环境:固定好主从臂,通过usb链接到同一个…...

影刀RPA证书题库包含初级、中级、高级和AP初级

影刀rpa初级证书选择题答案,影刀证书答案,影刀rpa考试,影刀初级考试,影刀初级考试选择题 原因 以前的在线题库https://exam.ezrpa.store/是为了方便更新题目和使用的,但经过实际使用发现大部分人“不会用”&#xff1…...

LR(0)

LR0就是当我处在自动机为红色这些结束状态的时候,这些红色状态就代表我们识别到了一个句柄,那现在的问题就是识别到了句柄,那要不要对他进行归约?LR0就是我不管当前指针指向的终结符是什么,我都拿它做规约 这里的二号状…...

基于 Python 和 OpenCV 技术的疲劳驾驶检测系统(2.0 全新升级,附源码)

大家好,我是徐师兄,一个有着7年大厂经验的程序员,也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 🍅文末获取源码联系🍅 2025年最全的计算机软件毕业设计…...

Matplotlib库详解

Matplotlib 是 Python 里一个特别常用的绘图库,它能帮你创建各种各样的可视化图形,像折线图、柱状图、散点图等。对于数据可视化、数据分析和科学研究而言,它是非常重要的工具。接下来我会以初学者的视角,为你详细介绍 Matplotlib…...

daz dForce to UE 的原理分析

dForce是物理模拟,不是关键帧动画: dForce是一个物理引擎。当你运行模拟时,Daz Studio会根据你设置的物理属性(如裙子的重量、布料的硬度、摩擦力)、环境因素(如重力、风力)以及与角色的碰撞&am…...

速卖通商品详情API接口:功能、应用与开发指南

前言 在全球跨境电商蓬勃发展的背景下,速卖通(AliExpress)作为阿里巴巴旗下的国际电商平台,凭借丰富的商品种类和庞大的用户群体,成为众多商家和开发者拓展海外市场的首选平台。为了满足商家和开发者对商品数据的深度…...

4月14日星期一今日早报简报微语报早读

4月14日星期一,农历三月十七,早报#微语早读。 1、全国田径大奖赛接力摘金,苏炳添的传奇将延续至全运会; 2、中国红基会:2024年全年总收支12.85亿元; 3、我国2025年电影总票房已突破250亿 位居全球第一&a…...

快速排序(非递归版本)

引言 在排序算法的世界里,快速排序以其高效的性能脱颖而出。它采用分治法的思想,通过选择基准元素将数组分为两部分,递归地对左右两部分进行排序。然而,递归实现的快速排序在处理大规模数据时可能会导致栈溢出的问题。为了解决这…...

Ubuntu20.04 设置开机自启

参考: Ubuntu20.04 设置开机自启_ubuntu进bos系统-CSDN博客...

添加登录和注册功能

先写前端再写后端 前提&#xff1a;ideavue3mybatisspringBoot3前后端分离实现对一张表的增删改查&#xff08;完整代码版&#xff09;-CSDN博客 项目地址 1.添加一个Login.vue视图 <template><div class"login_container"><div class"login…...

弱口令爆破

1.简单介绍 弱口令是指一些简单易猜的密码&#xff0c;可通过社工方式和一些爆破工具进行破解&#xff0c;以下介绍一款爆破工具的用法。burpsuite简称BP&#xff0c;一款可以利用字典破解账户密码的工具。 2.部署网站 可以使用PHPstudy的Apache服务&#xff0c;也可以使用I…...

springboot调用python文件,在ubuntu上部署,踩坑之旅(已部署成功)

项目介绍 springboot 调用python文件&#xff0c;python调用另一个数据文件&#xff0c;然后计算出结果&#xff0c;看似简单&#xff0c;实际上有很多坑&#xff0c;因为涉及到python的三方库&#xff0c;有时候下载不下来&#xff0c;有时候版本不匹配&#xff0c;折腾了好久…...

Android studio消息同步机制:消息本地存储,服务器交互减压

文章目录 后端&#xff08;Flask&#xff09;代码前端&#xff08;Android Studio Java&#xff09;代码 消息同步机制: 手机端可以将消息存储在本地数据库中&#xff0c;减少与服务器的交互压力。同时&#xff0c;通过序列号机制&#xff0c;手机端可以与服务器同步消息&#…...

前端常用组件库全览与推荐

&#x1f4cc; 一、组件库生态全景图 &#x1f680; 二、React 生态组件库推荐 名称简介官网Ant Design阿里出品&#xff0c;企业级 UI 系统&#xff0c;设计规范完整&#xff0c;适合后台系统https://ant.designMaterial UIGoogle Material Design 实现&#xff0c;样式响应式…...

视觉算法+雾炮联动:开创智能降尘新时代

在许多工业环境中&#xff0c;尤其是那些涉及大量物料搬运和处理的地方&#xff0c;如工厂或仓库&#xff0c;扬尘问题是一个普遍存在的挑战。这不仅影响了工作人员的工作条件&#xff0c;还可能构成健康和安全隐患。为了改善这一状况&#xff0c;不少业主采用了物理方法来减少…...

【Pandas】pandas DataFrame items

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…...

易境通WMS系统代理仓解决方案:让代理仓管理无后顾之忧!

易境通WMS系统代理仓解决方案&#xff1a;让代理仓管理无后顾之忧&#xff01; 对于海外仓企业而言&#xff0c;除了自有仓库外&#xff0c;为了业务发展还会同时代理其他仓库&#xff0c;于是经常会面临主仓代理仓数据同步问题及费用问题。此外&#xff0c;由于个仓库分布较广…...

【智驾中的大模型 -2】VLM 在自动驾驶中的应用

1. 前言 随着端到端 AI 和多模态学习的迅猛发展&#xff0c;VLM&#xff08;视觉-语言模型&#xff09;在自动驾驶领域中的应用正逐渐成为一个备受瞩目的重要研究方向。VLM 凭借其强大的融合能力&#xff0c;将视觉&#xff08;如高清晰度的摄像头图像、精准的雷达数据&#x…...

L1-104 九宫格

L1-104 九宫格 - 团体程序设计天梯赛-练习集 九宫格是一款数字游戏&#xff0c;传说起源于河图洛书&#xff0c;现代数学中称之为三阶幻方。游戏规则是&#xff1a;将一个 99 的正方形区域划分为 9 个 33 的正方形宫位&#xff0c;要求 1 到 9 这九个数字中的每个数字在每一行…...

图像预处理(OpenCV)-part2

4 边缘填充 为什么要填充边缘呢&#xff1f;我们以下图为例。 原图旋转后的图 可以看到&#xff0c;左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了&#xff0c;同时&#xff0c;右图的四个顶点区域其实是什么都没有的&#xff0c;因此我们需要对空出来的区域进…...

SpringAI-ollama

SpringAi主要依赖 System Prompt &#xff1a;设置提示词 用来预设角色 ConversationMemory: 对话集 RAG: 检索增强生成 将业务数据存储在向量数据库中&#xff08;做相似性检索&#xff09;通过RAG进行链接 Function Calling 用来调用自己的api <dependencyManagement>&…...

如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡

如何在Windows 10系统中查看已连接WiFi密码-亲测可用-优雅草卓伊凡 通过系统设置查看 点击屏幕左下角的“开始”按钮&#xff0c;打开“设置”应用。在“设置”应用中&#xff0c;点击“网络和 Internet”。在“网络和 Internet”页面中&#xff0c;点击“WLAN”&#xff0c;…...

蓝耘赋能通义万相 2.1:用 C++ 构建高效 AI 视频生成生态

开篇&#xff1a;AI 视频生成新时代的号角 通义万相 2.1&#xff1a;AI 视频生成的领军者 核心技术揭秘 功能特点展示 与其他模型的全面对比 C&#xff1a;高效编程的基石 C 的发展历程与特性 C 在 AI 领域的广泛应用 通义万相 2.1 与 C 的完美融合 融合的意义与价值 …...

tmpfs的监控筛选/dev/shm下的shmem创建

一、背景 在一个比较注重性能的系统上&#xff0c;共享内存的使用肯定非常普遍。为了能更好的了解系统里共享内存的使用&#xff0c;比如创建、删除等操作&#xff0c;我们是可以对其进行监控的。 这篇博客以共享内存的创建监控为例来介绍如何监控共享内存。 这里有一个概念…...

如果你在使用 Ubuntu/Debian:使用 apt 安装 OpenSSH

情况 1&#xff1a;如果你在使用 Ubuntu/Debian&#xff1a; 使用 apt 安装 OpenSSH&#xff1a; bash 复制 sudo apt update sudo apt install openssh-server 完成后检查 SSH 服务状态&#xff1a; bash 复制 sudo systemctl status ssh 情况 2&#xff1a;如果你在使用 Ce…...

设计模式每日硬核训练 Day 11:适配器模式(Adapter Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 10&#xff1a;模板方法模式小结 在 Day 10 中&#xff0c;我们学习了模板方法模式&#xff1a; 它用于定义流程的“骨架”&#xff0c;将固定步骤放在父类&#xff0c;具体实现交给子类完成。实现了“统一流程 差异化行为”的复用范式。 而今天&am…...

xAI Elasticsearch 集群架构解析:索引数据规模与分片优化实践

Elasticsearch&#xff08;ES&#xff09;作为分布式搜索和分析引擎&#xff0c;是 xAI 构建高性能数据处理系统的基石。xAI 的业务场景&#xff0c;如实时日志分析、模型训练数据检索和用户行为分析&#xff0c;要求 Elasticsearch 集群兼顾高吞吐写入、低延迟查询和动态扩展能…...

[c语言日寄]时间复杂度

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…...

快速幂(蓝桥杯)

1. 递归实现 递归方法通过将问题分解为更小的子问题来实现。具体步骤如下&#xff1a; 如果指数 b 为 0&#xff0c;返回 1。 如果 b 是偶数&#xff0c;则递归计算 (a^2)b/2。 如果 b 是奇数&#xff0c;则递归计算 a⋅(a^2)(b−1)/2。 伪代码&#xff1a; function fas…...

[Python基础速成]2-模块与包与OOP

上篇➡️[Python基础速成]1-Python规范与核心语法 目录 Python模块创建模块与导入属性__name__dir()函数标准模块 Python包类类的专有方法 对象继承多态 Python模块 Python 中的模块&#xff08;Module&#xff09;是一个包含 Python 定义和语句的文件&#xff0c;文件名就是模…...

Spring AOP 学习笔记 之 常用注解

0 引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId><version>3.4.2</version></dependency> 要在springboot中启用AOP&#xff0c;需要引入spring-boot-…...

JVM——运行时数据区

目录 Class装载到JVM的过程 装载&#xff08;load&#xff09;——查找和导入class文件 正文------------------- Run-time Data Areas 运行时数据区 Method Area 方法区 Heap 堆 Java Virtual Machine Stacks&#xff08;Java虚拟机栈&#xff09; The PC Register 程…...

Conda 入门指令教程

Conda 入门指令教程 Conda 是一个强大的包和环境管理工具&#xff0c;广泛应用于数据科学和机器学习项目中。本文将介绍 Conda 的常用指令&#xff0c;帮助你快速上手。 1. Conda 基础操作 查看 Conda 版本 conda --version显示当前安装的 Conda 版本。 更新 Conda conda…...

基于STM32、HAL库的MAX14830总线转UART驱动程序设计

一、简介: MAX14830是一款四通道UART扩展器,通过SPI或I2C接口与微控制器通信。主要特性包括: 4个独立的全双工UART通道 可编程波特率(最高达12Mbps) 每个通道有128字节的发送和接收FIFO 支持硬件和软件流控制 可配置的GPIO引脚 工作电压:1.7V至5.5V 低功耗模式 二、硬件…...

x-cmd install | jellex - 用 Python 语法在终端里玩转 JSON 数据!

目录 核心功能与特点安装优势亮点适用场景 还在为命令行下处理 JSON 数据烦恼吗&#xff1f;jellex 来了&#xff01;它是一款基于终端的交互式 JSON 和 JSON Lines 数据处理工具&#xff0c;让你用熟悉的 Python 语法&#xff0c;轻松过滤、转换和探索 JSON 数据。 核心功能与…...

2025天梯赛 L2专项训练

L2-049 鱼与熊掌 - 团体程序设计天梯赛-练习集 思路就是模拟&#xff0c;正常写就完事 #include<bits/stdc.h> using namespace std; int main() {int a, b;cin >> a >> b;vector<vector<int>>arr(a, vector<int>(0));for (int i 0; i &…...

214、【数组】下一个排列(Python)

题目描述 原题链接&#xff1a;31. 下一个排列 思路 从后往前&#xff0c;找到第一个小于右侧集合的数&#xff0c;从右侧集合中找到一个比该数大的最小的数替换上去。 然后&#xff0c;将右侧集合从小到排列&#xff0c;就为当前排列中&#xff0c;下一个排列的数。 代码实…...

Why does Java‘s hashCode() in String use 31 as a multiplier?

HashCode 为什么使用 31 作为乘数&#xff1f; 1. 固定乘积 31 在这用到了2. 来自 stackoverflow 的回答3. Hash 值碰撞概率统计3.1 读取单词字典表3.2 Hash 计算函数3.3 Hash 碰撞概率计算封装碰撞统计信息的类3.4 针对一组乘数&#xff0c;分别计算碰撞率3.5 碰撞结果可视化3…...

如何将一个8s的接口优化到500ms以下

最近换了个工作&#xff0c;刚入职就接了个活--优化公司自营app的接口性能&#xff0c;提升用户体验。 刚开始还以为是1s优化到500ms这种&#xff0c;或者500ms优化到200ms的接口&#xff0c;感觉还挺有挑战的。下好app体验了一下。好家伙&#xff0c;那个慢已经超过了我的忍耐…...