【雷达】基于Matlab模拟海洋监视雷达检测仿真

news2024/9/20 8:05:19

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

​本文建立了基于 MATLAB 的预警雷达探测模型, 根据雷达和目标的运动参数和雷达系统参数, 模拟和动态显示预警雷达的探测性能; 并对其探测性能进行仿真验证.研究表明, 该方法能够有效仿真预警雷达的探测性能,具有良好的人机交互动态可视化功能.

⛄ 部分代码

else

    sensorIDs = cellfun(@(d)d.SensorIndex,dets);

end

numDets = numel(sensorIDs);

iPlats = zeros(numDets,1);

uSensorIDs = unique(sensorIDs);

iSensorPlats = findPlatforms(scene);

for m = 1:numel(uSensorIDs)

    thisID = uSensorIDs(m);

    

    usePlatIdx = -1;

    for k = 1:numel(iSensorPlats)

        idxPlat = iSensorPlats(k);

        thisPlat = scene.Platforms{idxPlat};

        foundSensor = false;

        for j = 1:numel(thisPlat.Sensors)

            thisSensor = thisPlat.Sensors{j};

            if thisSensor.SensorIndex == thisID

                foundSensor = true;

                break

            end

        end

        if foundSensor

            usePlatIdx = idxPlat;

            break

        end

    end

    

    if usePlatIdx>0

        iFnd = sensorIDs == thisID;

        iPlats(iFnd) = usePlatIdx;

    end

end

end

function [str,type] = platformName(~)

str = 'Tower';

type = 'DisplayName';

end

function [str,type] = detectionsName(~)

str = 'Radar detections';

type = 'DisplayName';

end

function val = localGetVal(thing, idx)

% Indexing that supports either cell or non-cell arrays

if iscell(thing)

    val = thing{idx};

else

    val = thing(idx);

end

end

function flag = isPublishing()

% Returns true when MATLAB is publishing

flag = ~isempty(snapnow('get'));

end

function writeAnimatedGIF(fname, frames, numFrames, rate, loopCount)

dt = 1/rate;

if isstruct(frames)

    % pFrames is set to getframe(h) frames

    for m = 1:numFrames

        im = frame2im(frames(m));

        [A,map] = rgb2ind(im,256);

        if m == 1

            imwrite(A,map,fname,'gif','LoopCount',loopCount,'DelayTime',dt);

        else

            imwrite(A,map,fname,'gif','WriteMode','append','DelayTime',dt);

        end

    end

else

    % pFrames is set to RGB images such as are returned

    % by print('-RGBImage','-opengl','-r0')

    for m = 1:numFrames

        im = frames(:,:,:,m);

        [A,map] = rgb2ind(im,256);

        if m == 1

            imwrite(A,map,fname,'gif','LoopCount',loopCount,'DelayTime',dt);

        else

            imwrite(A,map,fname,'gif','WriteMode','append','DelayTime',dt);

        end

    end

end

end

function localWriteVideo(fname, frames, numFrames, rate, profile)

vid = VideoWriter(fname,profile);

vid.FrameRate = rate;

open(vid);

if isstruct(frames)

    % pFrames is set to getframe(h) frames

    for m = 1:numFrames

        writeVideo(vid,frames(m));

    end

else

    % pFrames is set to RGB images such as are returned

    % by print('-RGBImage','-opengl','-r0')

    writeVideo(vid,frames(:,:,:,1:numFrames));

end

close(vid);

end

function [clrs,comps] = getColors(nClrs)

% Compute a set of unique colors whose complementary colors will also be

% unique colors

hsv = ones(nClrs,3);

hsv(:,3) = 1;

tmp = linspace(0,0.45,nClrs+1);

hsv(:,1) = tmp(1:nClrs);

clrs = hsv2rgb(hsv);

if nargout>1

    comps = getComplementaryColors(clrs);

end

end

function comps = getComplementaryColors(clrs)

% Compute complementary colors from set of colors

hsv = rgb2hsv(clrs);

hsv(:,1) = mod(hsv(:,1)+0.5,1);

comps = hsv2rgb(hsv);

end

function txSig = findEmittingSignal(thisSig,signals)

isTx = isTXSignals(signals);

txSignals = signals(isTx);

numTx = numel(txSignals);

txPos = zeros(3,numTx);

txVel = zeros(3,numTx);

for m = 1:numTx

    txPos(:,m) = txSignals(m).OriginPosition;

    txVel(:,m) = txSignals(m).OriginVelocity;

end

txDir = thisSig.OriginPosition(:)-txPos;

relVel = thisSig.OriginVelocity(:)-txVel;

rgs = sqrt(sum(abs(txDir).^2,1));

txDir = txDir./rgs;

rrs = dot(relVel,txDir,1);

errRg = rgs-thisSig.PropagationRange;

errRR = rrs-thisSig.PropagationRangeRate;

[~,iMin] = min(abs(errRg)+abs(errRR));

txSig = txSignals(iMin);

end

function [thisPlat, thisSystem] = findSystem(plats,type,ID)

thisPlat = [];

thisSystem = [];

if contains('Sensor',type,'IgnoreCase',true)

    propName = 'Sensors';

    idName = 'SensorIndex';

else

    propName = 'Emitters';

    idName = 'EmitterIndex';

end

numPlats = numel(plats);

wasFound = false;

for iPlat = 1:numPlats

    thisPlat = plats{iPlat};

    theseSystems = thisPlat.(propName);

    for iSys = 1:numel(theseSystems)

        thisSystem = theseSystems{iSys};

        if thisSystem.(idName) == ID

            wasFound = true;

            break

        end

    end

    

    if wasFound

        break

    end

end

end

function setupChaseGraphics(hAxes)

% setup axes

hAxes.DataAspectRatio = [1 1 1];

hAxes.Projection = 'perspective';

hAxes.CameraViewAngle = 30;

axis(hAxes,'vis3d');

% axis(hAxes,'off');

% Use camera zoom style

z = zoom(hAxes);

z.setAxes3DPanAndZoomStyle(hAxes,'camera');

shrinkZLimits([], hAxes);

end

function updateChaseCamera(hAxes,plat,system)

% set camera position

dims = plat.Dimensions;

fov = system.FieldOfView;

% get system mounting location and orientation

mntLoc = system.MountingLocation(:);

mntAng = system.MountingAngles;

mntRot = rotmat(quaternion(mntAng,'eulerd','zyx','frame'),'frame');

% get system look angle

lkAng = zeros(1,2); % [az el]

numAng = numel(system.LookAngle);

lkAng(1:numAng) = system.LookAngle;

lkRot = rotmat(quaternion([lkAng(1) -lkAng(2) 0],'eulerd','zyx','frame'),'frame');

R = lkRot*mntRot;

plat = pose(plat);

platRot = plat.Orientation;

if isa(platRot,'quaternion')

    platRot = rotmat(platRot,'frame');

end

R = R*platRot;

T = plat.Position(:)+mntLoc;

viewHt = 3/2 * dims.Height;

viewLoc = [-5/2 * dims.Length 0]';

cp = R'*[viewLoc; viewHt] + T;

% % translate ego mounting orientation it to scenario orientation

% yaw = 0;

% pitch = 0;

% roll = 0;

% cR = R*rotmat(quaternion([yaw pitch roll],'eulerd','zyx','frame'),'frame');

cR = R;

ct = cR(1,:)' + cp;

cu = cR(3,:)';

% hAxes.CameraPosition = cp;

% hAxes.CameraTarget = ct;

% hAxes.CameraUpVector = -cu;

% set(hAxes, ...

%     'DataAspectRatio', [1 1 1], ...

%     'Projection', 'perspective', ...

%     'CameraViewAngle', fov(1));

set(hAxes,  'CameraPosition', cp, ...

    'CameraTarget', ct, ...

    'CameraUpVector', -cu, ...

    'DataAspectRatio', [1 1 1], ...

    'Projection', 'perspective', ...

    'CameraViewAngle', fov(1));

end

function shrinkZLimits(rt, hAxes)

set(hAxes, ...

    'XLimMode','auto', ...

    'YLimMode','auto', ...

    'ZLimMode','auto', ...

    'CameraPositionMode','auto', ...

    'CameraTargetMode','auto', ...

    'CameraUpVectorMode','auto', ...

    'CameraViewAngleMode','auto');

% keep z limits within 10 m of vertical range of all road tiles

if ~isempty(rt)

    minZ = Inf;

    maxZ = -Inf;

    

    for iTile=1:numel(rt)

        if rt(iTile).TileID>0

            minZi = min(rt(iTile).Vertices(:,3));

            maxZi = max(rt(iTile).Vertices(:,3));

            minZ = min(minZi, minZ);

            maxZ = max(maxZi, maxZ);

        end

    end

    camP = hAxes.CameraPosition;

    camT = hAxes.CameraTarget;

    camU = hAxes.CameraUpVector;

    hAxes.DataAspectRatio = [1 1 1];

    xLim = hAxes.XLim;

    yLim = hAxes.YLim;

    set(hAxes,'XLim',xLim,'YLim',yLim,'ZLim',10*[minZ/10 1+floor(maxZ/10)], ...

        'CameraPosition',camP,'CameraTarget',camT,'CameraUpVector',camU);

    view(hAxes, -90,90);

end

end

function dur = sceneDuration(scene)

dur = inf;

for iPlat = 1:numel(scene.Platforms)

    traj = scene.Platforms{iPlat}.Trajectory;

    if isa(traj,'waypointTrajectory')

        dur = min(max(traj.TimeOfArrival),dur);

    end

end

end

function hfig = createFigure()

hfig = figure;

scale = 0.5;

pos = hfig.Position;

width = pos(3);

height = pos(4);

adjWidth = scale*width;

adjHeight = scale*height;

hfig.Position = pos+[-adjWidth/2 -adjHeight adjWidth adjHeight];

hfig.Units = 'normalized';

end

⛄ 运行结果

⛄ 参考文献

[1]熊军, 行小帅, 张清泉,等. 基于MATLAB的雷达目标测量仿真分析[J]. 海南师范大学学报:自然科学版, 2014, 27(3):4.

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界 真是阳间题

作者本题所使用工具 打开附件 艾尔登法环正式发售在即,迫不及待的mjj身上好像有蚂蚁在爬,写下了一句谜语: 32073579756415871361224665144251529616546134107283371422717502731249951057470539916408170663523436573989472489382550863584…

Nginx的安装与负载均衡、动静分离的初步使用(Windows)

了解Nginx Nginx的作用: 反向代理 正反向代理是什么? 正向代理:代客户端访问服务端 反向代理:代服务端接收客户端的访问 正反向代理示例: 正向代理:客户端A1、客户端A2...----->正向代理服务器------&…

解决vite不是内部或外部命令,也不是可运行的程序 或批处理文件。

前言 今天是要vite创建vue3.0项目的时候,到了最后一步npm run dev的时候出现了以下错误: ‘vite’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 如下图所示 思考问题 想了半天,调试了很久,本来以为是环境…

Eureka

Eureka介绍 注册中心 : 每个服务都有自己的ip和端口,,一个服务调用另一个服务的时候都需要知道对方的ip,,, Eureka类似 dubbo中的zookeeper Eureka 是 netflix公司提供的一款服务注册中心,&a…

刷爆力扣之非递减序列

刷爆力扣之非递减序列 HELLO,各位看官大大好,我是阿呆 🙈🙈🙈 今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜 该专栏按照不同类别标签进行刷题,…

电磁场几何和衍射理论的统一

在物理光学中,我们使用麦克斯韦方程组处理电磁场。为了快速求解该方程组,我们将不同的麦克斯韦算子结合在一个非序列场追迹概念中。进一步的,快速物理光学概念的支柱是:(1)尽可能在k域求解麦克斯韦方程组。…

深入理解Linux网络技术内幕(十一)——帧的传输

文章目录前言传输的开启和关闭设备调度以准备传输队列规则接口qdisc_restart函数dev_queue_xmit函数有队列设备无队列设备处理NET_TX_SOFTIRQ: net_tx_action看门狗定时器前言 “传输”这一术语用于离开系统的帧,也许是因为被系统传送出去,或者是因为被…

火山引擎 DataTester:如何用 A/B 测试做产品增长?

技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 随着如今越来越高的获客成本,用户拉新变得不再容易;而且由于获客成本的增高,让用户留存也变得更加重要。同时,一个产品的…

【C++】list的模拟实现+迭代器的设计思维

目录1.认识STL中的list2.迭代器的设计思维2.1 迭代器的定义2.2 迭代器的底层结构3.list的模拟实现3.1 list的节点3.2 list的迭代器3.3 list类4.list和vector的比较1.认识STL中的list 💨相比于vector简单的连续线性结构,list就稍显复杂了。 💨…

用细节问题撬动自我进化:首届雪浪算力开发者大赛来了!

12月2日,首届【雪浪算力开发者大赛】在无锡雪浪小镇正式揭幕,并由此开启了新一轮智能制造新生力量的博弈。本次大赛不仅将工业界开发者与创新企业置于聚光灯下,也是雪浪算力中心向社会公众展示其强大计算能力与支撑能力的震撼大秀。 在疫情威…

【关于Spring MVC框架中的@RequestBody】

关于Spring MVC框架中的RequestBody 在Spring MVC框架中,可以在POJO类型的请求参数前添加RequestBody。 当服务器端接收请求参数时,使用了RequestBody注解,客户端提交的请求参数必须是对象格式的! 如果客户端提交的请求参数不是…

Vue中使用vue-video-player插件播放本地mp4视频文件

场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_霸道流氓气质的博客-CSDN博客_前后端分离项目本地运行 在上面搭建项目的基础上,先实现了播放rtmp视频流 Vue中使用vue-video-player和vi…

Unity Animancer插件(一)基本使用

Animancer是什么?资源商店主页 一、快速播放 我们来通过Animancer实现一个最基本的动画播放效果。 首先创建一个脚本PlayAnimationOnEnable,编写如下代码 public AnimancerComponent animancer; public AnimationClip clip;private void OnEnable() …

pinia 持久化存储

pinia刷新数据持久化解决方案 无论是使用vuex 还是pinia都会面临一个问题:页面刷新,状态数据丢失的问题; 为了解决数据状态持久化问题,可以考虑使用插件 pinia-plugin-persistedstate 目录 安装pinia 并引入使用 npm install pin…

CCES软件如何来对ADI的SHARC DSP进行Flash的编程和烧写

如何做 Flash 烧写并实现脱机运行,其实我在之前的文章里有讲过,就可以用 Visual DSP来做,鼠标 点几下,非常简单。但是很多客户用的是 21569、21565这一类的SHARC DSP,不能再用 VDSP 来做烧写了,所以我想了 …

留学Essay写作怎么积累更多词汇量?

大部分留学生们都会感觉Essay挺难写作的,然而这其实是自身平时积累的不够多。当然,还有其他的正确方法!高分的Essay都是平时练习出来的,所以我们需要在平时多注意收集一些相关的写作知识。下面是一些常用的Essay写作词汇&#xff…

5 年经验年薪百万,一位阿里 P8 分享自己的成长干货

今天这篇文章,我前后读了 3 遍,主人公是阿里最年轻的 P8 之一,工作五年连升三级,他在一次采访中分享了自己的成长经历和职场心得,非常接地气,我们整理了 一下,真诚地推荐给每一个渴望成长和进步…

基于主成分分析的支持向量机入侵检测系统

基于主成分分析的支持向量机入侵检测系统学习目标:学习内容:A. 数据集分析B. 主成分分析 (PCA)--降维C. 支持向量机 (SVM)核函数数据集预处理--转换数据集预处理 --特征缩放算法过程核函数对比总结不足参考论文申明: 未经许可,禁止…

ESB产品Oracle数据库升级说明

ESB企业服务总线平台作为支撑企业综合集成的产品,在应用集成、数据集成、数据治理等解决方案都发挥着非常重要的作用。随着产品和解决方案的不断优化和升级,ESB企业服务总线平台功能需要逐步进行完善,不断提升产品功能的完备性、易用性和全面…

Github最新霸榜,Alibaba架构师手写的分布式系统核心原理手册

前言: 分布式的重要性就不需要我再强调了吧,它现在已经是大厂面试的“常驻嘉宾”了 前几天有粉丝在后台跟我吐槽:鑫哥,我觉得现在的风气真的变了,之前只觉得网上的情况是个例,结果自己就遇到了很多次&…