您好,欢迎来到好兔宠物网。
搜索
您的当前位置:首页雷达仿真模型设计与实现

雷达仿真模型设计与实现

来源:好兔宠物网
实用第一 智慧密集  .~ …  .= .  , ..… 雷达仿真模型设谴与实现 鲁华杰 田云鹏 摘 要:针对作战仿真和战争类游戏开发,从雷达的功能入手,建立其数学模型并采用c++语言编 程实现。通过仿真案例应用表明,该模型具有形式简洁、计算速度快、可信度高等特点。 关键词:作战仿真;游戏开发;雷达;仿真模型;C++ 雷达在空间中的姿态可用欧拉角来确定,如图3所示。 1 引言 雷达作为现代武器的眼睛,是获取战场信息的重要装备。 闲此,在作战仿真和战争类游戏中,雷达仿真模型的设计与实 现是非常重要的。由于雷达系统对信号处理的复杂性,因此信 号级仿真模型复杂度高、计算量大。为降低仿真模型的的复杂 度,从雷达系统的功能出发,建立其模型 2建模原理 2.1 坐标系的建立 在仿真或游戏中,各物体位置、姿态的确定需要一个参考 系,冈此,建立遵循右手规则的世界坐标系。如图1所示。 图3雷达的欧拉角 2.2雷达的数学模型 2-2.1探测区域 雷达系统的主要功能是对一定区域内的目标进行探测.该 区域范围由以下3部分决定: (1)雷达探测距离的远界、近 界; (2)雷达水平扫描形成的水平央角; (3)雷达垂直扫描 形成的垂直夹角。如图4所示。 Y 图1 世界坐标系示意图 建立以雷达主方向为X轴的右手坐标系为雷达的局部坐标 系,如图2所示。 () () /以 图42_2.2通视距离 雷达探测区域示意图 在雷达的实际使用过程中,最远探测距离除受雷达本身的 技术性能影响,还受地球曲率影响,即雷达的通视距离。如图 图2雷达局部坐标系示意图 5所示。 32z 电: 捩 电磁毒岛幢捩 1 3巧与巧 与壤 ;《 …… PROGRAMLANGU觚E……………………… ………………………………………… …………………… 图5雷达通视距离示意图 雷达通视距离取决于雷达天线所在位置的高度h,和目标 的高度h:。 由于存在大气折射的影响,应该使用等效地球半径R 来 代替实际地球半径R,一般条件下R 的取值为8490km,因此 雷达直视距离R 为: =√( ,+ ) 一 +√( + ) 一 ≈42Re(√ .+√721) =4.12×10 ×( + ) ( ’ 上式中考虑地球弯曲引起的遮蔽影响,R 的单位为米。 式中R :标准大气下地球当量半径(约为8490公里 ; h,:雷达天线所在高度,(米); h2:目标高度,(米)。 2_2.3探测概率 理论上,在此区域内的目标,都会被雷达发现,但实际上 存在一定的概率。工程实践表明,该概率主要与目标的距离有 关,经验拟合公式如下: jf 1 尸( )=P x (2) 式中r:目标的距离, (公里); :最大探测距离, (公里)。 A:探测系数(不同雷达探测系数不同) 2-2_4坐标转换 为方便计算,将目标在世界坐标系下的坐标转换到雷达局 部坐标系下。 绕相应坐标轴依次旋转 ,l9,A,每一次旋转称为基元旋 转,相应的其基元旋转矩阵为ll_: 绕y轴的基元旋转矩阵为: L, (1//)=lr co0 S 0l  0 ln ]   Isin 0 cos ̄/t I (3) 绕Z轴的基元旋转矩阵为: 厂cos,9 sin t9 0] Lz )=l—sin ̄9 cos,9 0  ll 0 0 1 f (4) 绕X轴的基元旋转矩阵为: ( )=}f 01 0 cos y sin?0],)  l 0一sin cosy  I(5) 在世界坐标系下( , z),设目标的坐标为( ,l,,z),雷达 的坐标为( ),雷达的姿态角为( ,|9,A),则在雷达局部 坐标系下目标的坐标为 Y .: ): = )£ (I9)0 ll — 『二一Z (6) 令£( ,t9,,)=£ ( ( ),贝H£ , ,,): 『 c。s c。s sm 一c㈣,gsiI1 ] l—s儿lg ̄cos +sin ̄/sinr c(,s,gcos sin8 shw/cos +COS V/sm I lsln c0 吼ny+㈨、 co —c ̄s,9sin r —sin,9sing/siny+c0 c0s y{ (7) 2-2.5工作流程 雷达模型工作的流程如图6所示 图6雷达模型流程图 l ……  lE |l  J JJ ¨ ’ … I_ 实用第一 智慧密集 … 一一… 3编程实现 为提高该模型的可重用性,将其封装成Radar类。具体实 现代码如下: .h文件代码: //Radar h:interface for the Radar class. |t lllI lllI IllI IllI IllIIlll lll l|| #if!defined(AFX RADAR—H——532DDBCD一4444_4F1 6—98E 5 CEAD69B1 2F1 9 INCLUDED_) #define AFX_RADAR—H——532DDBCD一4444 4F1 6—98E5一CEA D69B1 2F1 9 INCLUDED—— #if MSC VER>1000 #pragma once #endif//一MSC_VER>1 000 #include”math h‘。 #include<windows.h> #define pi 3.1 41 5926535898 ∥定义坐标结构体 struct coordinate { double×: double Y: double Z: }: //定义通用雷达类 class Radar { public: Radar(); virtual—Radar(); ∥构造函数 Radar(double D_farl,double D—near1,double A_rightl, double AJeft1.double A upl,double A.downl,double coefficient1): //设置雷达的位置和姿态 void setRadar《double Xl,double Y1,double Z1,double E_Y1,double E_Z1,double E_X1): 根据目标坐标判断是否被探测到 bool DetectionResult (double X_Aim,double Y—Aim, double Z—Aim): private: ∥雷达的相关参数 double X://雷达在世界坐标系下的X轴的坐标 double Y://雷达在世界坐标系下的Y轴的坐标 double Z:∥雷达在世界坐标系下的Z轴的坐标 double E—Y ∥绕Y轴旋转的欧拉角 double E_Z //绕Z轴旋转的欧拉角 double E_X:∥绕X轴旋转的欧拉角 double D—far;//雷达远界 double D—nearI//雷达近界 342012.蔽13圬, 恩厢鞭程与罐 《 double A right;//雷达水平扫描的右角 double A left;//雷达水平扫描的左角 double A up ∥雷达垂直扫描的上角 double A down;儋达垂直扫描的下角 double coefficient;/雷达探测系数 double D Aim;/ ̄标距离 ∥判断一个点是否在夹角之内,参数分别为正负夹角 //Angleplus,Angleminus、所在平面的横向坐标值Lateral、纵向 //坐标值Ordinate bool poine—in—angle (double Angleplus,double Angleminus,double Lateral,double Ordinate); ∥求目标的距离,参数为目标的在世界坐标系的坐标 void GetD_Aim{double X_Aim,double Y_Aim,double ZJ m); ∥判断目标是否在雷达的通视距离之内,不在返同真。参数 ,/为目标的在世界坐标系的高度 bool NotinDintervisibility(double Y__Aim); ∥将目标在世界坐标系下的坐标转换到雷达局部坐标系 /FF,参数为目标的在世界坐标系的坐标 CO0rdinate ConversionOfcoordinate 《double XAim, _double Y—Aim,double Z—Aim): //概率处理函数 bool TransformProbability0; ) #endif||\defined(AFX_RADAR—H 532DDBCD_444 4 4F16 98E5 CEAD69B12F19_INCLUDED_) ,cpp文件代码: ||Radar.cpp:implementation of the Radar class |l lll lllljllljIllllll{lllIllljIlllIllI Ill Illl I|| nclude"Radar.h llll IllIIllIllI lllI ㈣lllIIlllIlllIllIIlljl “Construction/Destruction llllIlllllljllljIllIlllllllIIlllIlllIll}IlllIllllllIIl}IIllj lllll IRadar::Radar() { ×=O: Y=0: Z=O: E Y=O: E Z=O: E—X=O: D far=O: D near=0: A_right=0; A left=0; A_up=0; A down=0; cOe什icient=O: D_Aim=0; ) ~ … PROGRAM LANGUAGE … 一一 -…… … … … ……r … ……, 一 … ……-u一 ” … r ~ ~m - t 一 一-…- - … Radar ~Radar(){ } ∥构造函数 Radar::Radar《double D_farl,double D—near1 double A_rightl。double A_leftl,double A_upl,double A_down1, double coefficient1): D—far(D_far1),D—near(D—near1) A_right(A_right1),A_left {A_left1),A_uP (A_up1),A_down (A_down1) coefficient (coefficient1){) ∥设置雷达的位置和姿态 void Radar::setRadar(double X1,double Y1,double Z1, double E_Y1,double E—Z1,double E_X1) ( X=Xl: Y=Y1: Z=Z1: E—Y=E_Y1 E_Z=E—Z1: E—×=E—.X1: ) /lfu断一个点是否在夹角之内,参数分别为正负夹角 //Angleplus。Angleminus、所在平面的横向坐标值Lateral、纵向 脞标值Ordinate bool Radar::poine_l‘n—angle(double AnglepluS,double Angleminus,double Lateral, double Ordinate) { ∥将度转化为弧度 Angleplus=Angleplus pi/1 80; Angleminus=Angleminus pi/1 80; if(Ordinate>=0)// ̄u果纵坐标>=0,则只判断点是否落在 //0。一Angleplus。之间 { if{(Lateral/(sqrt(LateraI Lateral+Ordinate Ordinat e)))>cos(Angleplus)) { return true; } ) else//: ̄1]果纵坐标<O,则只判断点是否落在Angleminus。~ ,/O。之间 ( if((Lateral/(sqrt(Lateral*Lateral+Ordinate*O rdinate)))>cos(Angleminus)) { return true; ) ) return false; ) //求目标的距离,参数为目标的在世界坐标系的坐标 void Radar::GetD_Aim(double X_Aim,double YJAim, double Z_Aim) ( DAim=sqrt((×一X_Aim) (X—X_Aim)+(Y—Y—_Aim) 《Y— Y__Aim)+(Z—Z_Aim) (z-Z__A m)) ) U断目标是否在雷达的通视距离之内,参数为目标的在世 ∥界坐标系的坐标 bool Radar::NotinD ntervjsibility(double、r —Aim) ( double Dintervisibility=41 20 (sqrt(Y)+sqrt(Y_—Aim)): ,*=41 20 (sqrt(Y)+sqrt(Y—Aim)):∥通视距离 / {f(D_Aim>Dintervisibility)/f ̄J断若目标距离大于通视距离 ( return true; ) return false; ) ∥将目标在世界坐标系下的坐标转换到雷达局部坐标系下, //参数为目标的在世界坐标系的坐标 coordinate Radar::ConversiOnOfcOordinate(dOuble X Aim, double、r_Aim,double Z—A m) ( //将欧拉角由度转换为弧度 double E_Z1=E—Z pill 80; double E_Y1=E Y pi/180; double E_×1-E_x pill 80; //求在世界坐标系下,目标相对雷达的矢量 doubie X1=×Aim一×: double Y1=Y—‘A m—Y: double Zl=Z_Aim-Z; ∥聿专换后的目标坐标 coordinate AimNew; AimNew,X=cos(E_Z1) cos(E_Y1) X1+sin(E_Z1) Y1一COS (E_Z1 sin(E—Y1) Z1; AimNew.Y=(-sin(E_Z1) cos(E_Y1) cos(E_X1)+sin(E—Y1) sin(E_X1)) X1 +cos(E_Z1) cos(E_X1) Y1  ̄(sin(E_Z1) sin(E_Y1) cos(E X1)+cos(E_Y1) sin(E_X1)) Z1: AimNew.Z=(sin《E_Z1) COS(E_Y1) sin(E X1)+sin(E—Y1) cos(E_X1)) ×1 -cos(E_Z1) sin(E_X1) Y1 +(-sin(E_Z1) sin(E_Y1) sin(E_X1)+COS IE—lY1) cos(E_X1)) Z1: return AimNew; ) //概率处理函数 bool Radar::TransformProbability() ( ∥根据距离计算探测概率 dOUble probabi“ty:e×p(一cOeff.cient (D_Aim/D_far)); 脑 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- howto1234.com 版权所有 湘ICP备2023017662号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务