基于神经网络的无源雷达测向系统仿真实现
基于神经网络的无源雷达测向系统仿真实现
项目概述
本项目实现了基于卷积神经网络(CNN)的无源雷达方向到达角(DOA)估计系统。通过深度学习方法,系统能够从接收到的雷达信号中准确估计出信号源的方向,适用于单目标和多目标场景。相比传统的DOA估计算法(如MUSIC、ESPRIT等),本系统在低信噪比环境下展现出更强的鲁棒性和更高的估计精度。
作者信息
- 咸鱼/B站:万能程序员
目录结构
无源雷达测向系统(Matlab)/
├── main.m # 主程序入口文件
├── generateData.m # 数据生成模块
├── generateAngleCombinations.m # 角度组合生成模块
├── createCNNModel.m # 单目标CNN模型构建
├── createMultiTargetCNNModel.m # 多目标CNN模型构建
├── customMSELayer.m # 自定义均方误差损失层
├── performAngleAccuracyTest.m # 角度精度测试(单目标)
├── performSNRTest.m # 信噪比测试(单目标)
├── plotAngleErrorCurve.m # 角度误差曲线(单目标)
├── compareSignalTypes.m # 信号类型对比(单目标)
├── performMultiAngleAccuracyTest.m # 角度精度测试(多目标)
├── performMultiSNRTest.m # 信噪比测试(多目标)
├── plotMultiAngleErrorCurve.m # 角度误差曲线(多目标)
├── compareMultiSignalTypes.m # 信号类型对比(多目标)
└── results/ # 结果文件夹├── net_single.mat # 训练好的单目标模型├── net_multi.mat # 训练好的多目标模型├── params.mat # 参数设置记录└── *.png # 各种测试结果图像
系统原理
1. 无源雷达测向基本原理
无源雷达测向系统不主动发射雷达信号,而是通过接收目标自身发射或反射的电磁波信号来确定目标方位。本项目使用均匀线阵(ULA)作为接收阵列,通过分析接收信号的相位差来估计信号的到达方向。
基本信号模型如下:
- 假设有一个由M个阵元组成的均匀线性阵列
- 阵元间距为d(通常取半波长λ/2)
- 信号源位于远场,到达阵列的信号可视为平面波
- 信号到达角度为θ(相对于阵列法线的角度)
则接收信号可表示为:
x(t) = a(θ)s(t) + n(t)
其中:
- x(t)是M×1的接收信号向量
- a(θ)是阵列流形向量(阵列响应)
- s(t)是源信号
- n(t)是加性白高斯噪声
阵列流形向量a(θ)的第m个元素为:
a_m(θ) = exp(-j2π(m-1)d·sin(θ)/λ)
2. 卷积神经网络测向方法
传统DOA估计方法(如MUSIC算法)在低信噪比环境下性能会显著下降。本项目采用深度学习方法,通过卷积神经网络直接从原始接收信号中学习DOA估计,具有以下优势:
- 端到端学习:无需手动特征提取,直接从原始信号学习
- 抗噪性能强:通过大量含噪数据训练,提高在低信噪比下的鲁棒性
- 计算效率高:训练完成后,推理过程计算量小,适合实时处理
本项目设计了两种CNN模型:
- 单目标CNN:用于单一信号源的DOA估计
- 多目标CNN:用于多个信号源的同时DOA估计
3. 数据生成与预处理
系统通过仿真生成训练和测试数据,主要步骤包括:
-
信号生成:支持正弦信号和线性调频(LFM)信号
- 正弦信号:
s(t) = exp(j(2πft + φ))
- LFM信号:
s(t) = exp(j(2π(f0t + 0.5kt²) + φ))
- 正弦信号:
-
阵列响应计算:根据阵列几何结构和信号到达角计算阵列流形向量
-
接收信号合成:将信号与阵列响应结合,并添加不同信噪比的噪声
-
信号预处理:
- 滤波:使用移动平均滤波减少噪声影响
- 归一化:对每个阵元的信号进行能量归一化
- 复数表示:将复数信号分解为实部和虚部作为CNN的输入通道
网络架构
1. 单目标CNN模型
单目标CNN模型设计用于估计单个信号源的DOA,其架构如下:
- 输入层:[2, array_size, num_snapshots],表示复数信号的实部和虚部
- 第1卷积块:
- 2×3卷积层,16个滤波器
- 批归一化层
- ReLU激活函数
- 1×2最大池化层
- 第2卷积块:
- 1×3卷积层,32个滤波器
- 批归一化层
- ReLU激活函数
- 1×2最大池化层
- 展平层:将特征图转换为一维向量
- 全连接层1:128个神经元,ReLU激活,Dropout(0.3)
- 全连接层2:64个神经元,ReLU激活
- 输出层:1个神经元(预测角度值)
- 损失函数:自定义均方误差损失
2. 多目标CNN模型
多目标CNN模型设计用于同时估计多个信号源的DOA,其架构与单目标模型类似,但输出层和网络容量有所调整:
- 输入层:[2, array_size, num_snapshots]
- 第1卷积块:
- 2×3卷积层,24个滤波器(增加滤波器数量以提取更复杂特征)
- 批归一化层
- ReLU激活函数
- 1×2最大池化层
- 第2卷积块:
- 1×3卷积层,48个滤波器
- 批归一化层
- ReLU激活函数
- 1×2最大池化层
- 展平层
- 全连接层:64个神经元,ReLU激活,Dropout(0.4)
- 输出层:num_sources个神经元(预测多个角度值)
- 损失函数:自定义均方误差损失
3. 自定义损失函数
项目实现了自定义的均方误差损失层(customMSELayer),支持角度权重调整,可以针对不同角度区域设置不同的损失权重,提高特定角度范围的估计精度。
系统功能与特点
1. 支持的信号类型
- 正弦信号:单频正弦信号,可设置随机频率变化和相位
- 线性调频信号(LFM):频率随时间线性变化的信号,更接近实际雷达应用
2. 目标场景
- 单目标场景:估计单个信号源的DOA
- 多目标场景:同时估计多个信号源的DOA,当前支持2个信号源
3. 性能评估指标
系统提供了全面的性能评估功能:
- 角度精度测试:测试不同角度下的DOA估计精度
- 信噪比测试:测试不同信噪比条件下的DOA估计精度
- 角度误差曲线:分析估计误差随角度变化的关系
- 信号类型对比:对比不同信号类型下的估计性能
4. 计算加速
系统自动检测并支持GPU加速:
- Mac系统:使用MPS (Metal Performance Shaders)加速
- Windows/Linux系统:使用CUDA加速
参数设置
主程序main.m
中的参数设置详解:
1. 信号参数
% 信号参数设置
params.signal_type = 'sine'; % 信号类型: 'sine'为正弦信号, 'lfm'为线性调频信号
params.snr_range = -10:5:30; % 信噪比范围,用于测试不同信噪比下的性能
params.angles_single = -60:5:60; % 单目标角度范围(训练和测试)
params.angles_multi = [-40, -20, 0, 20, 40]; % 多目标角度(用于测试)
params.num_samples = 200; % 每个角度生成的样本数
params.num_snapshots = 64; % 快拍数(每个样本的时间采样点数)
signal_type
:可选’sine’(正弦信号)或’lfm’(线性调频信号)snr_range
:测试的信噪比范围,影响模型在不同噪声环境下的性能评估angles_single
:单目标训练和测试的角度范围,角度间隔越小,训练样本越多angles_multi
:多目标测试使用的角度组合num_samples
:每个角度生成的样本数,增加样本数可提高模型泛化能力,但会增加训练时间num_snapshots
:每个样本的时间采样点数,增加快拍数可提高估计精度,但会增加计算复杂度
2. 阵列参数
% 阵列参数设置
params.array_size = 8; % 阵元数量
params.wavelength = 1; % 波长
params.element_spacing = params.wavelength/2; % 阵元间距为半波长
array_size
:阵列天线的阵元数量,增加阵元数可提高角度分辨率wavelength
:信号波长,设为1表示使用归一化波长element_spacing
:阵元间距,通常设为半波长以避免栅瓣效应
3. 网络训练参数
% 网络参数设置
params.epochs = 20; % 训练轮数
params.batch_size = 128; % 批次大小
params.validation_ratio = 0.2; % 验证集比例
params.test_ratio = 0.2; % 测试集比例
params.initial_learn_rate = 0.001; % 初始学习率
params.learn_rate_drop_factor = 0.5; % 学习率下降因子
params.learn_rate_drop_period = 5; % 学习率下降周期
epochs
:训练轮数,增加轮数可提高模型性能,但会增加训练时间batch_size
:每批训练的样本数,增大批次可加速训练,但可能影响收敛质量validation_ratio
和test_ratio
:验证集和测试集的比例initial_learn_rate
:初始学习率learn_rate_drop_factor
和learn_rate_drop_period
:学习率衰减参数
使用方法
系统要求
- MATLAB 2020a 或更高版本(推荐2024a)
- Deep Learning Toolbox
- Signal Processing Toolbox
- 支持GPU加速(可选)
Mac版本使用方法
- 下载项目到本地
- 打开MATLAB,将工作目录设置为项目所在文件夹
- 在命令窗口运行
main
命令启动程序 - 如果支持MPS加速,程序会自动启用GPU进行训练
- 结果将保存在
results
文件夹中
Windows版本使用方法
- 下载项目到本地
- 打开MATLAB,将工作目录设置为项目所在文件夹
- 在命令窗口运行
main
命令启动程序 - 如果支持CUDA加速,程序会自动启用GPU进行训练
- 结果将保存在
results
文件夹中
自定义参数
如需自定义系统参数,可在main.m
文件中修改相应的参数设置:
-
修改信号类型:
params.signal_type = 'lfm'; % 改为线性调频信号
-
修改角度范围:
params.angles_single = -90:5:90; % 扩大角度范围
-
增加样本数量:
params.num_samples = 500; % 增加每个角度的样本数
-
增加训练轮数:
params.epochs = 50; % 增加训练轮数
-
修改阵元数量:
params.array_size = 16; % 增加阵元数量
结果查看
程序运行完成后,results
文件夹中将包含以下文件:
-
训练好的网络模型:
net_single.mat
:单目标CNN模型net_multi.mat
:多目标CNN模型params.mat
:参数设置记录
-
测试结果图像:
- 角度精度测试图:展示不同角度下的DOA估计精度
- 信噪比测试图:展示不同信噪比下的DOA估计精度
- 角度误差曲线图:展示估计误差随角度变化的关系
结果分析
1. 单目标DOA估计结果
单目标场景下,系统能够在-60°到60°的角度范围内进行准确的DOA估计。在信噪比为20dB时,平均角度估计误差小于1°。系统在中心区域(-30°到30°)表现最佳,边缘区域误差略大。
主要性能指标:
- 在20dB信噪比下,平均绝对误差(MAE)约为0.5°
- 在0dB信噪比下,平均绝对误差约为2°
- 在-10dB信噪比下,平均绝对误差约为5°
2. 多目标DOA估计结果
多目标场景下,系统能够同时估计两个信号源的DOA。当两个信号源间隔大于20°时,估计性能较好;当间隔小于15°时,估计性能会有所下降。
主要性能指标:
- 对于间隔为60°的两个信号源(如-30°和30°),在20dB信噪比下,平均绝对误差约为1°
- 对于间隔为30°的两个信号源(如-15°和15°),在20dB信噪比下,平均绝对误差约为2°
- 在0dB信噪比下,对于间隔为60°的两个信号源,平均绝对误差约为3°
3. 不同信号类型对比
系统对正弦信号和线性调频(LFM)信号均有良好的估计性能。总体来看:
- LFM信号在低信噪比环境下表现略优于正弦信号
- 正弦信号在高信噪比环境下表现与LFM信号相当
- 多目标场景中,LFM信号的角度分辨能力略优于正弦信号
4. 信噪比影响分析
系统性能随信噪比变化明显:
- 信噪比高于10dB时,系统表现稳定,误差小
- 信噪比在0dB到10dB之间,误差开始增加但仍可接受
- 信噪比低于-5dB时,误差显著增加,但仍优于传统算法
高级应用与扩展
1. 使用预训练模型进行推理
如果您只需使用已训练好的模型进行DOA估计,可以加载保存的模型:
% 加载预训练模型
load('results/net_single.mat'); % 加载单目标模型% 生成测试数据
angle = 30; % 测试角度
num_test_samples = 10;
[X_test, ~] = generateTestData(angle, num_test_samples, 8, 64, 20, 'sine');% 重排数据维度
X_test_permuted = permute(X_test, [2, 3, 4, 1]);% 使用模型进行预测
Y_pred = predict(net_single, X_test_permuted);% 显示结果
fprintf('真实角度: %f, 平均估计角度: %f\n', angle, mean(Y_pred));
2. 支持更多信号类型
系统可以扩展支持更多类型的信号,如BPSK、QPSK等数字调制信号。只需在generateData.m
文件中添加相应的信号生成代码:
% BPSK信号生成示例
if strcmpi(signal_type, 'bpsk')t = (0:num_snapshots-1)/fs;freq = 0.1;bits = randi([0, 1], 1, num_snapshots);phase = bits * pi; % 0对应0相位,1对应π相位s = exp(1j * (2*pi*freq*t + phase));
end
3. 增加阵列几何配置
目前系统使用均匀线阵(ULA),可以扩展支持其他阵列几何结构,如圆阵(UCA)、平面阵等:
% 圆形阵列响应计算示例
if strcmpi(array_type, 'uca')R = 1; % 圆半径for m = 1:array_sizephi_m = 2*pi*(m-1)/array_size; % 阵元角度位置a(m) = exp(-1j * 2*pi/lambda * R * cos(theta_rad - phi_m));end
end
4. 结合传统算法
可以将CNN方法与传统DOA估计算法(如MUSIC)结合,形成混合处理方案:
% 混合处理示例
% 先用CNN进行粗估计
Y_pred_cnn = predict(net, X_test_permuted);% 然后用MUSIC算法在CNN估计结果附近进行精细搜索
angle_range = Y_pred_cnn - 5 : 0.1 : Y_pred_cnn + 5; % 在CNN结果附近±5°范围内搜索
Y_pred_refined = musicAlgorithm(X_test, angle_range); % 自定义MUSIC算法函数
常见问题与解决方案
1. 内存不足
如果遇到内存不足问题,可以尝试以下解决方案:
- 减少
num_samples
参数值 - 增大角度间隔,减少角度点数
- 减少
num_snapshots
参数值 - 使用更小的批次大小
batch_size
2. 训练时间过长
如果训练时间过长,可以尝试:
- 启用GPU加速(如果硬件支持)
- 减少训练轮数
epochs
- 增大批次大小
batch_size
- 减少训练样本数量
3. 估计精度不足
如果DOA估计精度不满足要求,可以尝试:
- 增加阵元数量
array_size
- 增加训练样本数量
num_samples
- 增加训练轮数
epochs
- 尝试更复杂的网络结构(修改
createCNNModel.m
) - 使用更高的信噪比数据进行训练
4. 多目标分辨率问题
如果多目标场景下信号源无法分辨,可以尝试:
- 增加阵元数量
- 使用更专业的多目标损失函数
- 增加网络深度和复杂度
- 结合传统高分辨算法
参考文献
- Schmidt, R. O. (1986). Multiple emitter location and signal parameter estimation. IEEE transactions on antennas and propagation, 34(3), 276-280.
- Huang, L., Wu, J. K., Zhang, X., & Meng, H. (2019). DOA estimation for coherent sources in uniform linear array using deep learning. IEEE Access, 7, 185908-185917.
- Liu, Z. M., Zhang, C., & Philip, S. Y. (2018). Direction-of-arrival estimation based on deep neural networks with robustness to array imperfections. IEEE Transactions on Antennas and Propagation, 66(12), 7315-7327.
- Chakrabarty, S., & Habets, E. A. (2019). Multi-speaker DOA estimation using deep convolutional networks trained with noise signals. IEEE Journal of Selected Topics in Signal Processing, 13(1), 8-21.
相关文章:
基于神经网络的无源雷达测向系统仿真实现
基于神经网络的无源雷达测向系统仿真实现 项目概述 本项目实现了基于卷积神经网络(CNN)的无源雷达方向到达角(DOA)估计系统。通过深度学习方法,系统能够从接收到的雷达信号中准确估计出信号源的方向,适用于单目标和多目标场景。相比传统的DOA估计算法&…...
《用MATLAB玩转游戏开发》Flappy Bird:小鸟飞行大战MATLAB趣味实现
《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-Flappy Bird:小鸟飞行大战MATLAB趣味实现 文章目录 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互…...
【C/C++】跟我一起学_C++同步机制效率对比与优化策略
文章目录 C同步机制效率对比与优化策略1 效率对比2 核心同步机制详解与适用场景3 性能优化建议4 场景对比表5 总结 C同步机制效率对比与优化策略 多线程编程中,同步机制的选择直接影响程序性能与资源利用率。 主流同步方式: 互斥锁原子操作读写锁条件变量无锁数据…...
linux 三剑客命令学习
grep Grep 是一个命令行工具,用于在文本文件中搜索打印匹配指定模式的行。它的名称来自于 “Global Regular Expression Print”(全局正则表达式打印),它最初是由 Unix 系统上的一种工具实现的。Grep 工具在 Linux 和其他类 Unix…...
【js基础笔记] - 包含es6 类的使用
文章目录 js基础js 预解析js变量提升 DOM相关知识节点选择器获取属性节点创建节点插入节点替换节点克隆节点获取节点属性获取元素尺寸获取元素偏移量标准的dom事件流阻止事件传播阻止默认行为事件委托 正则表达式js复杂类型元字符 - 基本元字符元字符 - 边界符元字符 - 限定符元…...
《Linux命令行大全(第2版)》PDF下载
内容简介 本书对Linux命令行进行详细的介绍,全书内容包括4个部分,第一部分由Shell的介绍开启命令行基础知识的学习之旅;第二部分讲述配置文件的编辑,如何通过命令行控制计算机;第三部分探讨常见的任务与必备工具&…...
补补表面粗糙度的相关知识(一)
表面粗糙度,或简称粗糙度,是指表面不光滑的特性。这个在机械加工行业内可以说是绝绝的必备知识之一,但往往也是最容易被忽略的,因为往往天天接触的反而不怎么关心,或者没有真正的去认真学习掌握。对于像我一样…...
Python实用工具:pdf转doc
该工具只能使用在英文目录下,且无法转换出图片,以及文本特殊格式。 下载依赖项 pip install PyPDF2 升级依赖项 pip install PyPDF2 --upgrade 查看库版本 python -c "import PyPDF2; print(PyPDF2.__version__)" 下载第二个依赖项 pip i…...
基于Dify实现对Excel的数据分析
在dify部署完成后,大家就可以基于此进行各种应用场景建设,目前dify支持聊天助手(包括对话工作流)、工作流、agent等模式的场景建设,我们在日常工作中经常会遇到各种各样的数据清洗、格式转换处理、数据统计成图等数据分…...
Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题
各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…...
java加强 -Collection集合
集合是一种容器,类似于数组,但集合的大小可变,开发中也非常常用。Collection代表单列集合,每个元素(数据)只包含1个值。Collection集合分为两类,List集合与set集合。 特点 List系列集合&#…...
BGP实验练习1
需求: 要求五台路由器的环回地址均可以相互访问 需求分析: 1.图中存在五个路由器 AR1、AR2、AR3、AR4、AR5,分属不同自治系统(AS),AR1 在 AS 100,AR2 - AR4 在 AS 200,AR5 在 AS …...
Nginx location静态文件映射配置
遇到问题? 以下这个Nginx的配置,愿意为访问https://abc.com会指向一个动态网站,访问https://abc.com/tongsongzj时会访问静态网站,但是配置之后(注意看后面那个location /tongsongzj/静态文件映射的配置)&…...
四、Hive DDL表定义、数据类型、SerDe 与分隔符核心
在理解了 Hive 数据库的基本操作后,本篇笔记将深入到数据存储的核心单元——表 (Table) 的定义和管理。掌握如何创建表、选择合适的数据类型、以及配置数据的读写方式 (特别是 SerDe 和分隔符),是高效使用 Hive 的关键。 一、创建表 (CREATE TABLE)&…...
每日脚本 5.11 - 进制转换和ascii字符
前置知识 python中各个进制的开头 二进制 : 0b 八进制 : 0o 十六进制 : 0x 进制转换函数 : bin() 转为2进制 oct() 转换为八进制的函数 hex() 转换为16进制的函数 ascii码和字符之间的转换 : chr(97) 码转为字符 …...
cookie和session的区别
一、基本概念 1. Cookie 定义:Cookie 是服务器发送到用户浏览器并保存在本地的一小块数据(通常小于4KB),浏览器会在后续请求中自动携带该数据。作用:用于跟踪用户状态(如登录状态)、记…...
Kotlin Multiplatform--03:项目实战
Kotlin Multiplatform--03:项目实战 引言配置iOS开发环境配置项目环境运行程序 引言 本章将会带领读者进行项目实战,了解如何从零开始编译一个能同时在Android和iOS运行的App。开发环境一般来说需要使用Macbook,笔者没试过Windows是否能开发。…...
图形学、人机交互、VR/AR领域文献速读【持续更新中...】
(1)笔者在时间有限的情况下,想要多积累一些自身课题之外的新文献、新知识,所以开了这一篇文章。 (2)想通过将文献喂给大模型,并向大模型提问的方式来快速理解文献的重要信息(如基础i…...
opencascade.js stp vite 调试笔记
Hello, World! | OpenCascade.js cnpm install opencascade.js cnpm install vite-plugin-wasm --save-dev 当你不知道文件写哪的时候trae还是有点用的 ‘’‘ import { defineConfig } from vite; import wasm from vite-plugin-wasm; import rollupWasm from rollup/plugi…...
openharmony系统移植之gpu mesa3d适配
openharmony系统移植之gpu mesa3d适配 文章目录 openharmony系统移植之gpu mesa3d适配1. 环境说明2. gpu内核panfrost驱动2.1 使能panfrost驱动2.2 panfrost dts配置 3. buildroot下测试gpu驱动3.1 buildroot配置编译 4. ohos下mesa3d适配4.1 ohos下mesa3d编译调试4.1.2 编译4.…...
Java开发经验——阿里巴巴编码规范经验总结2
摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…...
Linux中常见开发工具简单介绍
目录 apt/yum 介绍 常用命令 install remove list vim 介绍 常用模式 命令模式 插入模式 批量操作 底行模式 模式替换图 vim的配置文件 gcc/g 介绍 处理过程 预处理 编译 汇编 链接 库 静态库 动态库(共享库) make/Makefile …...
深入理解深度Q网络DQN:基于python从零实现
DQN是什么玩意儿? 深度Q网络(DQN)是深度强化学习领域里一个超厉害的算法。它把Q学习和深度神经网络巧妙地结合在了一起,专门用来搞定那些状态空间维度特别高、特别复杂的难题。它展示了用函数近似来学习价值函数的超能力…...
使用lldb看看Rust的HashMap
目录 前言 正文 读取桶的状态 获取键值对 键值对的指针地址 此时,读取数据 读取索引4的键值对 多添加几个键值对 使用i32作为键,&str作为值 使用i32作为键,String作为值 前言 前面使用ldb看了看不同的类型,这篇再使用…...
Vue3简易版购物车的实现。
文章目录 一、话不多说,直接上代码? 一、话不多说,直接上代码? <template><div><input type"text" placeholder"请输入内容" v-model"keywords"><button click"addGood…...
比亚迪全栈自研生态的底层逻辑
比亚迪全栈自研生态的底层逻辑:汽车工程师必须理解的闭环技术革命 引言:当技术壁垒成为护城河 2023年比亚迪销量突破302万辆的震撼数据背后,隐藏着一个更值得工程师深思的事实:其全栈自研体系覆盖了新能源汽车83%的核心零部件。这…...
[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)
[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八) 引言 在当今网络安全威胁日益严峻的背景下,为 Web 应用启用 HTTPS 已成为基本要求。Spring Boot 提供了简单高效的方式集成 HTTPS 支持,无论是开发环境测试还是生产环境部署࿰…...
5.1.1 WPF中Command使用介绍
WPF 的命令系统是一种强大的输入处理机制,它比传统的事件处理更加灵活和可重用,特别适合 MVVM (Model, View, ViewModel)模式开发。 一、命令系统核心概念 1.命令系统基本元素: 命令(Command): 即ICommand类,使用最多的是RoutedCommand,也可以自己继承ICommand使用自定…...
设计模式简述(十九)桥梁模式
桥梁模式 描述基本组件使用 描述 桥梁模式是一种相对简单的模式,通常以组合替代继承的方式实现。 从设计原则来讲,可以说是单一职责的一种体现。 将原本在一个类中的功能,按更细的粒度拆分到不同的类中,然后各自独立发展。 基本…...
常用设计模式
一、什么是设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验总结,旨在解决面向对象设计中反复出现的问题,提升代码的可重用性、可理解性和可靠性。以下从多个维度详细讲解ÿ…...
20242817-李臻-课下作业:Qt和Sqlite
实验内容 阅读附件内容,编译运行附件中第一章,第三章的例子。 实验过程 第一章 t1实践 #include <QApplication> #include <QWidget> #include <QPushButton> #include <QVBoxLayout>int main(int argc, char *argv[]) {QA…...
嵌入式机器学习平台Edge Impulse图像分类 – 快速入门
陈拓 2025/05/08-2025/05/11 1. 简介 官方网址 https://edgeimpulse.com/ 适用于任何边缘设备的人工智能: Gateways - 网关 Sensors & Cameras - 传感器和摄像头 Docker Containers - Docker容器 MCUs, NPUs, CPUs, GPUs 构建数据集、训练模型并优化库以…...
JavaWeb, Spring, Spring Boot
出现时间 JavaWeb - Spring - Spring Boot 一、JavaWeb 的发展历程 Servlet 和 JSP: Servlet:1997 年首次发布,用于处理 HTTP 请求和响应。 JSP:1999 年首次发布,用于动态生成 HTML 页面。 特点:提供了基…...
upload-labs靶场通关详解:第五关
一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array(".php",".php5",".php4",".php3",".php2",".html",".htm",".ph…...
【问题】Watt加速github访问速度:好用[特殊字符]
前言 GitHub 是全球知名的代码托管平台,主要用于软件开发,提供 Git 仓库托管、协作工具等功能,经常要用到,但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit(原名 Steam)是由江苏蒸汽凡星科技有限公…...
GitHub打开缓慢甚至失败的解决办法
在C:\Windows\System32\drivers\etc的hosts中增加如下内容: 20.205.243.166 github.com 199.59.149.236 github.global.ssl.fastly.net185.199.109.153 http://assets-cdn.github.com 185.199.108.153 http://assets-cdn.github.com 185.199.110.153 http://asset…...
【25软考网工】第六章(3)数字签名和数字证书
博客主页:christine-rr-CSDN博客 专栏主页:软考中级网络工程师笔记 大家好,我是christine-rr !目前《软考中级网络工程师》专栏已经更新二十多篇文章了,每篇笔记都包含详细的知识点,希望能帮助到你!…...
Android Native 函数 Hook 技术介绍
版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 Android Native 函数 Hook 技术是一种在应用运行时拦截或替换系统或自身函数行为的手段,常见实现包括 PLT Hook、Inline Hook。 PLT Hook 和…...
代码随想录算法训练营第60期第三十二天打卡
大家好,今天是我们贪心算法章节的第三阶段,前面我们讲过的几道题不知道大家理解的情况如何,还是那句话,贪心算法没有固定的套路与模板,一道题一个思路,我们要多思考这样慢慢地我就就可以水到渠成。今天我们…...
Problem C: 异常1
1.题目描述 检测年龄,其中若为负数或大于等于200岁皆为异常,请将下列代码补充完整。 // 你的代码将被嵌入这里 class Main{ public static void main(String[] args){ Person p1new Person("John",80); Person p2new Pers…...
Ollama部署使用以及模型微调和本地部署
ollama是一款开源的本地大语言模型管理工具,专注于简化大语言模型(LLM)的本地部署和使用。以下是关于 Ollama 应用的详细介绍: Ollama 的主要功能 本地化部署: Ollama 支持在本地运行模型,无需依赖外部云…...
汇编学习——iOS开发对arm64汇编的初步了解
汇编学习——iOS开发对arm64汇编的初步了解 文章目录 汇编学习——iOS开发对arm64汇编的初步了解前言栈 指令 寄存器寄存器指令运算指令寻址指令前变基 与 后变基 栈堆(Heap)内存机制三、栈(Stack)内存机制 3. 多级调用示例 例子A…...
前端代理问题
在前后端联调的时候,有一次因为前端项目代理配置有问题,导致请求接口对不上, transpileDependencies: true,devServer: {hot: true,port: 8081,proxy: {/api: {target: http://localhost:8080,changeOrigin: true,ws: true,pathRewrite: {^/a…...
E+H流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯
EH流量计通过Profibus DP主站转Modbus TCP网关与上位机轻松通讯 在现代工业自动化的广阔舞台上,Profibus DP与Modbus TCP这两种通信协议各领风骚,它们在不同的应用场景中发挥着举足轻重的作用。但工业生产的复杂性往往要求不同设备、系统之间能够顺畅沟…...
TCP/IP 模型每层的封装格式
TCP/IP 模型是一个四层网络架构,每一层在数据传输时都会对数据进行封装,添加相应的头部(和尾部)信息。以下是各层的封装格式及关键字段说明: 1. 应用层(Application Layer) 封装格式:…...
openjdk底层汇编指令调用(一)——汇编指令及指令编码基础
汇编指令 计算机在执行过程时只识别代表0或者1的电信号。因此为了让计算机能够执行则须向计算机输入一系列01构成的指令。 例如在x64平台下,0x53,二进制为01010011,表示将rbx寄存器中的值压栈。 但是,对于程序员而言,…...
5G-A来了!5G信号多个A带来哪些改变?
5G-A来了!5G信号多个A带来哪些改变? 随着科技不断进步,通信网络的迭代升级也在加速。自4G、5G的推出以来,我们见证了通信技术的飞跃式发展。最近,越来越多的用户发现自己手机屏幕右上角的5G标识已经变成了“5G-A”。那…...
探索虚拟化:云计算时代的资源优化之道
前言 如果您想知道云提供商如何在全球范围内运行无数应用程序,而每个应用程序都没有机架服务器,那么答案就在于虚拟化。 它是为云提供支持的核心技术之一,在幕后悄悄工作,使现代计算高效、可扩展且具有成本效益。 在本文中&#x…...
用户登录构件示例
目录 一、登录构件概述 二、构件内部结构 1. 构件组成元素(表格形式) 2. 组件连接件设计...
【软件测试】基于项目驱动的功能测试报告
目录 一、项目的介绍 1.1 项目背景 二、测试目标 2.1 用户服务模块 2.1.1 用户注册模块 2.1.1.1 测试点 2.1.1.2 边界值分析法(等价类+边界值) 2.1.1.2.1 有效等价类 2.1.1.2.2 无效等价类 2.1.1.2.3 边界值 2.1.1.2.4 测试用例设计 2.2 文章标签模块 2.3 文章模…...