【雷达原理】雷达测角原理及实现方法

目录

  • 一、雷达测角原理
    • 1.1 测角研究历史和现状
    • 1.2 测角方法总结
    • 1.3 3DFFT测角
      • 1.3.1 基本原理
      • 1.2.2 测角性能
  • 二、MATLAB仿真案例
  • 参考文献

一、雷达测角原理

1.1 测角研究历史和现状

(1)早期采用窄波束对准目标,目标的角度对应于天线的角度读数,这种使得波束中目标回波的信号强度最大的方法并不能满足所需精度要求。
(2)1937 年一种称为波束切换的技术,首次在美军通信兵SCR-268雷达的原型机上得到演示。这种雷达专门为引导防空火力而设计,并且成为首批成功采用波束切换技术将天线对准目标的成品雷达。
(3)搜索照射技术是利用反射体天线在观测空间的俯仰维上产生窄的笔形波束,以机械扫描的方式对准待观测目标方向或者接近观测目标方向,从而确定待观测目标的空间俯仰角。
(4)点头式雷达广泛应用于雷达系统中的俯仰角测量之中,它通过利用雷达天线摆动或“点头”的方法,在俯仰维上使用窄垂直波束宽度的扇状水平波束进行扫描。
(5)相控阵雷达是一种自适应能力很强的雷达探测系统, 其阵元天线利用阵元间信号的相位关系,根据设定的观测角度快速的形成波束指向,同时可以有效的设定波束形状,不需要使用机械扫描方法。
(6)阵列天线的优势在于可以通过调节行馈源输出端的移相器实现俯仰维扫描或控制笔形窄波束。这种方法在 3D 雷达测高技术中应用广泛,能充分利用频带,并使波形和波束位置相互完全独立。
(7)在精密跟踪测量领域中,单脉冲测角技术是一种工程中较为实用的测角技术,它具有方法简单、计算量小的特点, 在雷达角度测量领域得到广泛应用。
(8)堆积波束雷达将同时形成的接收波束在俯仰维上垂直堆积起来,并在方位维机械旋转,以实现目标的检测和三坐标测量。

1.2 测角方法总结

测角方法分为相位法测角和振幅法测角
相位法测角: 通过比较两天线接收信号的相位信息来确定目标角度的方法。
振幅法测角: 利用目标回波的幅度来定向并利用幅度鉴别器确定目标角度的方法。振幅法测角可以分为最大信号法和等信号法两种。
在这里插入图片描述
对于毫米波雷达,通常采用波达方向估计(Direction of Arrival,DOA)进行测角,这类方法利用多个阵列接收的回波信号之间存在的相位变化关系进行计算,包括 F F T FFT FFT D B F DBF DBF 以及超分辨测角方法。

1.3 3DFFT测角

以一维均匀线阵为例,X波段甚至频率更高的毫米波雷达,其接收阵元的间距为厘米级,对于几米外的目标可视为远场目标,该目标到达各个阵元的回波均相互平行。回波到达相邻两个阵元之间的相位差相同,如图1所示。
对于 LFMCW 雷达的多个接收阵元,做空间 F F T FFT FFT 运算可求得目标反射波在不同天线阵列的相位变化规律,因此可以计算出目标的角度信息。

1.3.1 基本原理

如图1所示,设该雷达系统的天线为1发8收的均匀线阵,接收阵元的间距为 d d d d = λ / 2 d=λ/2 d=λ/2 λ 为波长 λ为波长 λ为波长,目标相对于天线法线方向的夹角为 θ θ θ,则相邻阵元之间接收信号的波程差为 d s i n θ dsinθ dsinθ,由此得到对应的相位差为:
w = 2 π d s i n θ λ ( 1 − 1 ) w=\frac{2πdsinθ}{λ} (1-1) w=λ2πdsinθ11
式(1-1)描述了相邻接收阵元的相位差与目标角度的关系,即通过测量出相邻阵元之间的相位差来间接解算出目标相对雷达的角度。
在这里插入图片描述
图1 一维均匀线阵信号接收示意图
对所有接收阵元的回波信号进行 N f f t N_{fft} Nfft F F T FFT FFT 处理,设获取峰值对应的下标为 k k k k ∈ [ − N f f t / 2 , N f f t / 2 − 1 ] k∈[-N_{fft}/2,N_{fft}/2-1] k[Nfft/2,Nfft/21],则根据 F F T FFT FFT 频谱分析的原理可知 w = 2 π k N f f t w=\frac{2πk}{N_{fft}} w=Nfft2πk,得到 w w w 后,并根据式(1-1)可计算得到目标角度信息:
θ = a r c s i n ( w λ 2 π d ) = a r c s i n ( k λ N f f t d ) = a r c s i n ( 2 k N f f t ) ( 1 − 2 ) θ=arcsin(\frac{wλ}{2πd})=arcsin(\frac{kλ}{N_{fft}d})=arcsin(\frac{2k}{N_{fft}})(1-2) θ=arcsin(2πdwλ)=arcsin(Nfftd)=arcsin(Nfft2k)12
由式(1-2)知,使用 F F T FFT FFT 的方法来进行DOA估计时,采用更多的 F F T FFT FFT 点数有利于提高角度计算精度。

1.2.2 测角性能

(1)测量精度
根据式(1-1)可知,相位差 w w w 与目标角度 θ θ θ 是一种非线性的关系。如图2所示, s i n θ sinθ sinθ 随着 θ θ θ 的增大而逐渐缓慢变化,即该曲线的斜率减小。因此,当 θ θ θ 为0°时,相位差 w w w 对目标角度 θ θ θ 的变化最敏感,此时角度测量的精度最高, w w w 对目标角度 θ θ θ 的灵敏度会随着 θ θ θ 的增加而降低,直到 θ θ θ 为90°时,相位差 w = 0 w=0 w=0,测角精度大大降低。
在这里插入图片描述
图2 正弦曲线示意图

(2)最大不模糊角度
在这里插入图片描述
雷达的最大视场角由估计的最大到达角(Angle of Arrival,AOA)决定。当相位差 w > 0 w>0 w>0 时,目标在雷达的左侧;当相位差 w < 0 w<0 w<0 时,目标在雷达的由侧;但当相位差 w > π w>π w>π 时,就无法确定目标在雷达的哪一侧,这便产生了角度模糊。因此为了测角无模糊,需要满足以下条件:
w = 2 π d s i n θ λ < π ,即 θ = a r c s i n ( λ 2 d ) ( 1 − 3 ) w=\frac{2πdsinθ}{λ}<π,即θ=arcsin(\frac{λ}{2d})(1-3) w=λ2πdsinθ<π,即θ=arcsin(2dλ)13
因此,对于间距为 d d d 的两个阵元可提供的最大不模糊角度为 θ m a x = a r c s i n ( λ 2 d ) θ_{max}=arcsin(\frac{λ}{2d}) θmax=arcsin(2dλ) ,当阵元间距满足 d = λ / 2 d=λ/2 d=λ/2 时, θ m a x = ± 90 ° θ_{max}=±90° θmax=±90°

(3)角度分辨率
角度分辨率反映了雷达对角度相近目标的分辨能力,在3DFFT的计算中则表现为两个目标频谱的峰值相靠近直至成一个单峰。
如下图所示,随着到达角的增加,雷达对目标的角度分辨力下降。
在这里插入图片描述
对于两个目标,其分辨率的计算方法推导如下:
Δ ω = 2 π d λ ( s i n ( θ + Δ θ ) − s i n ( θ ) ) ⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡ ≈ 2 π d λ c o s ( θ ) Δ θ ( 1 − 4 ) Δω =\frac {2πd}{λ}(sin(θ + Δθ) − sin (θ)) ⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡≈ \frac{2πd}{λ}cos(θ) Δθ(1-4) Δω=λ2πd(sin(θ+Δθ)sin(θ))⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡λ2πdcos(θ)Δθ14
式(4-1)利用了导数的概念: s i n ( θ + Δ θ ) − s i n ( θ ) Δ θ = c o s ( θ ) \frac{sin(θ + Δθ) − sin (θ)}{Δθ}=cos(θ) Δθsin(θ+Δθ)sin(θ)=cos(θ)
又因为, Δ ω > 2 π N ( 1 − 5 ) 又因为,Δω >\frac{2π}{N}(1-5) 又因为,Δω>N2π15
由式(1-4)和式(1-5),可以得到:
2 π d λ c o s ( θ ) Δ θ > 2 π N ⇒ Δ θ > λ N d c o s ( θ ) \frac{2πd}{λ}cos(θ) Δθ >\frac{2π}{N} ⇒ Δθ >\frac{λ}{Ndcos(θ)} λ2πdcos(θ)Δθ>N2πΔθ>Ndcos(θ)λ
因此,角度分辨率 θ r e s = λ N d c o s ( θ ) θ_{res}=\frac{λ}{Ndcos(θ)} θres=Ndcos(θ)λ
通常认为 d = λ / 2 , θ = 0 d=λ/2,θ=0 d=λ/2θ=0,所以最终的角度分辨率为:
θ r e s = 2 N θ_{res}=\frac{2}{N} θres=N2

二、MATLAB仿真案例

有关测角的代码(不完整)如下:
1)该程序首先建立1发8收的雷达系统模型,对目标回波进行处理,得到8个通道的距离-多普勒二维数据;
2)其次,对8个通道的距离-多普勒二维数据进行通道间的非相干积累,进而分别在多普勒维和距离维进行不同类型的CFAR检测,得到目标的距离维、速度维下标;
3)最后,提取目标在8个通道的距离维、速度维下标的对应数据,进行空间FFT,获取目标的角度维下标;
4)最终计算出目标的距离、速度和角度等信息,与仿真设置的目标参数保持一致。

clc;
clear;
close all;

%% 雷达系统仿真模型
setParameter();     %  设置雷达系统参数
cancel_On = 0;      %  对消开启或者关闭
chioce = 1;         %  选择均值类CFAR器的类型

global para;
% 设置目标参数
set_TarInfo.tarNum = 5;
set_TarInfo.tar_R0 = [500,1000,1500,2000,2500];                 % 目标距离
set_TarInfo.tar_V0 = [5,1,-8,-1,8];                             % 目标速度
set_TarInfo.tar_Ag = [-20,-10,0,10,20];                         % 目标角度
set_TarInfo.Rcs = [0.1,1,5,1,5];                                % 目标rcs
set_TarInfo.SNR = 10;                                           % 信噪比

% 雷达发射和接收信号模型
para.Tx_Num = 1;        % 发射阵元数目
para.Rx_Num = 8;        % 接收阵元数目
rawData = RadarSigModel_MultiCh(set_TarInfo);

figure(101);plot(abs(rawData(:,1,1)));
xlabel('采样点');ylabel('幅度/mV');title('ADC输入信号');

%% 雷达信号处理
global NumADC;
global NumChirp;

fs = para.fs;
u = para.u;
PRT = para.PRT;
c = para.c;
B = para.B;
Lambda = para.Lambda;
Rx_Num = para.Rx_Num;

Nfft1 = 2^ceil(log2(NumADC));                           % 距离维FFT点数
Nfft2 = 2^ceil(log2(NumChirp));                         % 速度维FFT点数
Nfft3 = 64;                                             % 通道间FFT点数

R_point = (fs/Nfft1)*c/(2*u);                           % 距离点精度
delta_R = c/(2*B);                                      % 距离分辨率
V_point = Lambda/(2*PRT*Nfft2);                         % 速度点精度
delta_V = Lambda/(2*PRT*NumChirp);                      % 速度分辨率
Ag_point = 2/Nfft3*180/pi;                              
delta_Ag = 2/Rx_Num*180/pi;                              % 角度分辨率为delta_Ag=Lambda/(N*d),单位rad。其中N为阵元数目,d为阵元间距,所以要转换为角度

win1 = hamming(NumADC);       % 加汉明窗
fft_Data = zeros(Nfft1,NumChirp);
fft2D_Data = zeros(Nfft1,Nfft2,Rx_Num);
cfarData_In = 0;
for Ch_Num = 1:Rx_Num
    % 距离维FFT
    for ii = 1:NumChirp
        fft_Data(:,ii) = fft(rawData(:,ii,Ch_Num).*win1,Nfft1);
    end
    
    if cancel_On == 1
        % 二次对消
        H_coef = [1,-1];            % 对消器系数
        Cancel_Data = Cancellation(fft_Data,H_coef);
    else
        Cancel_Data = fft_Data;
    end
    
    % 速度维FFT
    fft_tempData = MTD(Cancel_Data);
    fft2D_Data(:,:,Ch_Num) = fft_tempData;
    
    % 通道间的非相干积累
    cfarData_In = cfarData_In+abs(fft_tempData);
end

figure(201);
for Ch_Num = 1:Rx_Num
    subplot(2,4,Ch_Num);
    mesh(mag2db(abs(fft2D_Data(:,:,Ch_Num))));
    xlabel('速度维');ylabel('距离维');zlabel('信号功率(dB)');title(['通道',num2str(Ch_Num),'-MTD']);
    view([0 90]);
end

figure(301);
mesh(mag2db(cfarData_In));
xlabel('速度维');ylabel('距离维');zlabel('信号功率(dB)');title('各通道积累结果');
view([0 90]);

% 计算平均底噪
noiseData = calcu_Noise(cfarData_In);

% 目标CFAR检测
global sensitive;
global P_fa;
global referWin;
global guradWin;
global os_ReferWin;
global os_GuardWin;

sensitive = 1;   % 灵敏度
P_fa = 1e-6;    % 虚警概率
referWin = 8;   % 参考窗大小
guradWin = 5;   % 保护窗大小
os_ReferWin = 8;    % os-cfar参考窗
os_GuardWin = 3;    % os-cfar保护窗

global CA_MaxNum;
CA_MaxNum = 128;    % 速度维CFAR最大检测目标数

% 速度维CFAR
T_start = tic;
cfarData = ML_CFAR(cfarData_In,chioce);
count1_Time = toc(T_start);
disp(['速度维CFAR用时t1=',num2str(count1_Time),'s']);

figure(401);
mesh(cfarData);xlabel('速度维');ylabel('距离维');title('CA-CFAR');
view([0 90]);

% 距离维CFAR
T_start = tic;
Os_cfarOut = OS_CFAR(cfarData_In,cfarData);
count2_Time = toc(T_start);
disp(['速度维CFAR用时t2=',num2str(count2_Time),'s']);

figure(402);
mesh(Os_cfarOut);xlabel('速度维');ylabel('距离维');title('OS-CFAR');
view([0 90]);

% 获取目标位置等参数
global get_TarInfo;
[Rpos,Vpos] = find(Os_cfarOut==1);
[Rpos,I] = sort(Rpos);      % 按距离从近到远排序
Vpos = Vpos(I);
TarNum = length(Rpos);

TargetA = zeros(1,TarNum);
fft3D_Data = zeros(TarNum,Nfft3);      %  用于获取fft测角数据
win3 = hamming(Rx_Num);
for num = 1:TarNum
    Data_temp = zeros(1,Rx_Num);
    for Ch_Num = 1:Rx_Num
        Data_temp(Ch_Num) = fft2D_Data(Rpos(num),Vpos(num),Ch_Num);
    end
    
	deltaPha = mean(phase(Data_temp(2:end)./Data_temp(1:end-1)));     % 求相邻两通道见的相位差,再取平均
    TargetA(num) = -asind(deltaPha/pi);      % 公式法计算目标角度

    fft3D_Data(num,:) = abs(fft(Data_temp.*win3',Nfft3));    %  获取3DFFT后取模值
    
    % 计算目标角度所在下标
    [~,Ag_Pos] = max(fft3D_Data(num,:));
    
    % 获取目标测量结果
    get_TarInfo.Range(num) = (Rpos(num)-1)*R_point;
    
    if Vpos(num)<=(NumChirp/2)
        get_TarInfo.Velocity(num) = (Vpos(num)-1)*V_point;
    else
        get_TarInfo.Velocity(num) = -(NumChirp-Vpos(num))*V_point;
    end
    
    if Ag_Pos<=(Nfft3/2)
        get_TarInfo.Azimu(num) = -(Ag_Pos-1)*Ag_point;
    else
        get_TarInfo.Azimu(num) = (Nfft3-Ag_Pos)*Ag_point;
    end
    
    get_TarInfo.Energy(num) = db(cfarData_In(Rpos(num),Vpos(num))); % 获取目标峰值能量
    get_TarInfo.SNR(num) = get_TarInfo.Energy(num) - noiseData;
    disp(['目标',num2str(num),':距离R=',num2str(get_TarInfo.Range(num)),',速度V=',num2str(get_TarInfo.Velocity(num)),',角度A=',num2str(get_TarInfo.Azimu(num))]);
    disp(['能量:',num2str(get_TarInfo.Energy(num)),',信噪比:',num2str(get_TarInfo.SNR(num))]);
end
get_TarInfo.TarNum = TarNum;

计算结果如下:
目标1:距离R=500.63,速度V=4.977,角度A=-19.6954
能量:79.9525,信噪比:61.125
目标2:距离R=1001.26,速度V=1.0247,角度A=-10.743
能量:76.3724,信噪比:57.5449
目标3:距离R=1496.6202,速度V=-7.9047,角度A=0
能量:75.7472,信噪比:56.9197
目标4:距离R=1997.2501,速度V=-0.95149,角度A=8.9525
能量:51.3515,信噪比:32.524
目标5:距离R=2503.1499,速度V=7.9779,角度A=17.9049
能量:57.9947,信噪比:39.1672

参考文献

[1] Introduction to mmwave Sensing:FMCW Radars.
[2] 许成洋. 相控阵LFMCW雷达信号处理方法及实现[D].西安电子科技大学,2021.
[3] 王成海. 雷达测角方法研究[D].西安电子科技大学,2014.
[4] 雷达测角原理、测角精度、测角分辨率以及3DFFT角度估计算法汇总

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

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

相关文章

【高性能服务器】服务器概述

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 服务器概述 服…

[深入理解DDR] 总目录

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 蓝色的是传送门&#xff0c;点击链接即可到达指定文章。 图。 DDR 分类 导论 [RAM] DRAM 导论&#xff1a;DDR4 | DDR5 | LPDDR5 | GDRR6 | HBM 应运而生 运存与内存&#xff1f;内存与存…

Golang-GMP

GMP调度 golang-GMP语雀笔记整理 GMP调度设计目的&#xff0c;为何设计GMP?GMP的底层实现几个核心数据结构GMP调度流程 设计目的&#xff0c;为何设计GMP? 无论是多进程、多线程目的都是为了并发提高cpu的利用率&#xff0c;但多进程、多线程都存在局限性。比如多进程通过时…

第三方服务提供商的五大风险

亚马逊如何应对网络安全挑战 关键网络安全统计数据和趋势 移动优先世界中安全和隐私策略 当今数字时代网络安全的重要性 用户无法停止犯安全错误的 3 个原因 首席安全官可能过于依赖 EDR/XDR 防御 随着业务流程变得越来越复杂&#xff0c;公司开始转向第三方来提高其提供关…

Unity动画系统(1)

6.1 动画系统基础1-5_哔哩哔哩_bilibili 模型信息 Generic非人型 Configure 虚线圈可以没有&#xff0c;实线圈必须有&#xff0c;15个骨骼是必须的 p313 尾巴、翅膀属于非人型 p314 一般使用create from this model 游戏对象不再旋转 游戏对象不再发生位移 调整中心位置

WP黑格导航主题BlackCandy

BlackCandy-V2.0全新升级&#xff01;首推专题区(推荐分类)更多自定义颜色&#xff01;选择自己喜欢的色系&#xff0c;焕然一新的UI设计&#xff0c;更加扁平和现代化&#xff01; WP黑格导航主题BlackCandy

springcloud第4季 分布式事务seata实现AT模式案例2【经典案例】

一 seata案例 1.1 背景说明 本案例使用seata的at模式&#xff0c;模拟分布式事务场景&#xff1a;【下订单&#xff0c;减库存&#xff0c;扣余额&#xff0c;改状态】 AT模式原理&#xff1a;是2pc方案的演变&#xff0c; 一阶段&#xff1a;业务数据和回滚日志记录在同一…

kubernetes中使用Helm搭建Redis集群

1. 环境要求 首先需要有kubernetes集群环境&#xff0c;搭建kubernetes集群可以使用kubeSphere、kubespray等工具安装集群。其次要安装helm&#xff0c;并且添加了可用的Chart仓库 2. 确认合适的Chart包 helm官网上搜索redis 找到Star数多的Chart包&#xff0c;一类是redis包…

JVM(12):虚拟机性能分析和故障解决工具之JConsole

1 JConsole作用 查看Java应用程序的运行概况&#xff0c;监视垃圾收集器管理的虚拟机内存(堆和元空间)的变化趋势&#xff0c;以及监控程序内的线程。 2 使用说明 代码如下&#xff1a; package com.example.demo;import java.io.IOException; import java.util.ArrayList; …

04.Ambari自定义服务开发-自定义服务配置文件在Ambari中的设置方法

文章目录 设置方法配置文件设置Custom xxx配置文件详细的配置方法.xml文件的整体格式基础参数格式value-attributes配置介绍设置属性在服务安装后不可修改设置允许字段为空是否显示配置名称参数类型设置字符串类型PasswordBooleanIntFloatDirectoryDirectoriesContent-多行文本…

2024 vue3入门教程:windows系统下部署node环境

一、打开下载的node官网 Node.js — 下载 Node.js 二、根据个人喜好的下载方法&#xff0c;下载到自己的电脑盘符下 三、我用的是方法3下载的压缩包&#xff0c;解压到E盘nodejs目录下&#xff08;看个人&#xff09; 四、配置电脑的环境变量&#xff0c;新建环境变量的时候…

【Flink】Flink SQL

一、Flink 架构 Flink 架构 | Apache Flink 二、设置TaskManager、Slot和Parallelism 在Apache Flink中&#xff0c;设置TaskManager、Slot和Parallelism是配置Flink集群性能和资源利用的关键步骤。以下是关于如何设置这些参数的详细指南&#xff1a; 1. TaskManager 设置 …

【TB作品】智能台灯控制器,ATMEGA128单片机,Proteus仿真

题目 8 &#xff1a;智能台灯控制器 基于单片机设计智能台灯控制器&#xff0c;要求可以调节 LED 灯的亮度&#xff0c;实现定时开启与关闭&#xff0c; 根据光照自动开启与关闭功能。 具体要求如下&#xff1a; &#xff08;1&#xff09;通过 PWM 功能调节 LED 灯亮度&#x…

RabbitMQ-交换机的类型以及流程图练习-01

自己的飞书文档:‌‍‬‍‬‍​‍‬​⁠‍​​​‌⁠​​‬‍​​​‬‬‌​‌‌​​&#xfeff;​​​​&#xfeff;‍​‍​‌&#xfeff;⁠‬&#xfeff;&#xfeff;&#xfeff;​RabbitMQ的流程图和作业 - 飞书云文档 (feishu.cn) 作业 图片一张 画rabbit-mq 消息发…

Java 并发编程常见问题

1、线程状态它们之间是如何扭转的&#xff1f; 1、谈谈对于多线程的理解&#xff1f; 1、对于多核CPU&#xff0c;多线程可以提升CPU的利用率&#xff1b; 2、对于多IO操作的程序&#xff0c;多线程可以提升系统的整体性能及吞吐量&#xff1b; 3、使用多线程在一些场景下可…

前端笔记-day11

文章目录 01-空间-平移02-视距03-空间旋转Z轴04-空间旋转X轴05-空间旋转Y轴06-立体呈现07-案例-3D导航08-空间缩放10-动画实现步骤11-animation复合属性12-animation拆分写法13-案例-走马灯14-案例-精灵动画15-多组动画16-全民出游全民出游.htmlindex.css 01-空间-平移 <!D…

Linux随记(十)

一、升级harbor v2.6.4 --> harbor-offline-installer-v2.11.0-rc3 --> v2.9.4 – 随记 漏洞信息&#xff1a; CVE-2023-20902timing condition in Harbor 2.6.x and below, Harbor 2.7.2 and below, Harbor 2.8.2 and below, and Harbor 1.10.17 and below allows an…

逆变器--学习笔记(一)

并网&#xff1a; 逆变器中的“并网”指的是逆变器将其产生的交流电与电网同步&#xff0c;并输送到公共电网中。并网逆变器通常用于太阳能发电系统和其他分布式发电系统&#xff0c;将其产生的电能输送到电网供其他用户使用。 THD谐波失真总量: 逆变器的THD&#xff08;Tot…

如何玩单机版:QQ音速

前言 我是研究单机的老罗&#xff0c;今天教大家带来一款怀旧游戏QQ音速 的教程。根据我的文章&#xff0c;一步一步就可以玩了。 如今市面上的资源参差不齐&#xff0c;大部分的都不能运行&#xff0c;本人亲自测试&#xff0c;运行视频如下&#xff1a; QQ音速 搭建教程 此…

Node.js全栈指南:静态资源服务器

上一章【认识 MIME 和 HTTP】。 我们认识和了解了 MIME 的概念和作用&#xff0c;也简单地学习了通过浏览器控制台查看请求和返回的用法。 通过对不同的 HTML、CSS、JS 文件进行判断&#xff0c;设置不同的 MIME 值&#xff0c;得以让我们的浏览器正正确地接收和显示不同的文…