计算RCS(未成功)

Posted whitelc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算RCS(未成功)相关的知识,希望对你有一定的参考价值。

这里使用了C的库函数stdio.h和math.h,并假设在其他文件中已经实现了函数getDielectricSphereFieldUnderPlaneWave,plotOneMonoRCS和saveMonoRCSData。在C语言中需要声明函数的输入参数类型和返回值类型,因此将其添加到函数签名中。在函数中需要使用指针来传递E_r,E_theta,E_phi,H_r,H_theta和H_phi变量以获得从getDielectricSphereFieldUnderPlaneWave函数中返回的值。因为C语言没有内置的复数类型,因此使用了库函数cabs()来计算E数组的模长。

值得注意的是,由于C语言不允许将函数作为参数传递给其他函数,因此在该代码中的绘图和数据保存函数无法直接传递,需要在代码中实现这些功能。

#include <stdio.h>
#include <math.h>

void RCS_vs_freq(double radius, double ratio, double sensor_location[3], char *save_file, int show_plot, double *freq, double *mono_RCS) 
    double wavelength = radius / ratio;
    double background_velocity = 3e8 / wavelength;
    double background_phase_velocity = background_velocity / sqrt(1.0 + pow(background_material.getLossTangent(), 2));
    double frequency = background_phase_velocity / wavelength;

    double E_r, E_theta, E_phi, H_r, H_theta, H_phi;
    getDielectricSphereFieldUnderPlaneWave(radius, sphere_material, background_material, sensor_location, frequency, &E_r, &E_theta, &E_phi, &H_r, &H_theta, &H_phi);
    double E[3] = E_r, E_theta, E_phi;
    double mono_RCS = 4 * M_PI * (pow(sensor_location[0], 2) + pow(sensor_location[1], 2) + pow(sensor_location[2], 2)) * (pow(cabs(E[0]), 2) + pow(cabs(E[1]), 2) + pow(cabs(E[2]), 2));

    if (show_plot) 
        plotOneMonoRCS(radius, sphere_material, background_material, mono_RCS, frequency, save_file);
    

    if (save_file) 
        saveMonoRCSData(save_file, mono_RCS, frequency, sphere_material, radius);
    

    *freq = frequency;
    *mono_RCS = mono_RCS;


利用Gallop的Lua脚本实现RCS的批量计算

摘要:通过总场散射场技术,FDTD可以计算在平面波入射条件下的散射远场,从而得到目标的双站RCS,如果需要不同入射角情况下的单站RCS谱线,需要遍历所有入射角进行逐个计算。Gallop可以使用Lua[1]语言实现批量建模、计算、后处理。本示例以杏仁体模型为例,利用脚本实现单站RCS的计算和后处理。

 

参考文献

[1]   http://www.lua.org/

 

建模和仿真步骤

 

(1)新建脚本文件

打开Gallop软件,在Lua菜单上,或者工具栏上,可以新建脚本文件。Gallop内置了脚本编辑器,可以编辑、修改、保存脚本文件。


2)编辑脚本

 

在脚本里,可以实现GUI界面的所有操作,并可以方便实现批量化建模和计算,尤其适合工程应用。针对RCS、天线罩等应用,Gallop已经预安装有大量的前后处理脚本,用户只需要进行相应的参数设置,既可方便进行计算。

 

第一步:引用所需文件

----------------------------------------------------------------------------

--首先引用所需的头文件:建模、RCS设置文件、多节点计算文件

require "geometry"

require "RCS"

require "MPIPond"

----------------------------------------------------------------------------

 

 

第二步:设置RCS计算参数:极化、入射角、散射目标的模型路径、远场的频率点、激励源的设置等等

----------------------------------------------------------------------------

-- RCS 计算参数设置

--需要计算的极化:HH 水平极化,VV垂直极化

local polars ={"HH","VV"};  

 

--激励源的入射角度设置

local angs = {0,2,4,6,8};

 

--所需要计算的模型路径,可以是相对路径,也可以是绝对路径

local paths = {"ALMOND253-export.stp" }

 

--所需要计算的散射场频率

local freqs = {1.19,7,9.92}

 

--激励源的频率范围:需要包含散射场频率范围

local signal_freq_min = 1

local signal_freq_max = 10

 

--剖分参考频率

local mesh_freq = 15

----------------------------------------------------------------------------

 

第三步:创建计算池,并往计算池添加计算模型

----------------------------------------------------------------------------

-- 创建计算池:用于多模型的多节点并行计算

local calculater = MPIPond:new()

----------------------------------------------------------------------------

 

----------------------------------------------------------------------------

-- 向计算池添加计算模型

for _, path in pairs(paths) do

 

       --根据需要计算的散射体三维模型目录创建散射体模型

       functionRCS:create_scaters()

              ---------------------------

              --建立散射体的模型,可以修改成介质等材料

              localmat_pec = Geometry.NewMaterial("PEC")

              mat_pec:fill_color(0.5,0.5,0.5)

              mat_pec:sigma_e(1.0e13)

              -------------------------    

             

              ---------------------------

              --Target:建立散射体的几何结构,并赋予材料特性

              localtarget = Geometry.load_step{ path = path }

              target:material(mat_pec)

              target:triangulate(0.02)

              target:material(mat_pec )

              ---------------------------

             

              ---------------------------

              --设置计算区域:模型几何边界

              posxm,posym,poszm,posxp,posyp,poszp= target:bbox()

              ---------------------------

             

              return{target}, {bbox_x1 = posxm, bbox_y1 = posym, bbox_z1 = poszm, bbox_x2 = posxp, bbox_y2 = posyp,  bbox_z2 = poszp, }

       end

      

       for_,polar in pairs(polars) do

              for_,ang in pairs( angs ) do

                     localalmond = RCS:new( {

                                   name="rcs-".."path".."("..ang..")-"..polar;

                                   num_threads= 16;              --计算线程数

                                   dext= 6;                       -- 物体到空气盒子

                                   farbox_info= { freq=freqs; dfarbox = 4; };

                                   source_info= { freq_min = signal_freq_min;

                                                        freq_max= signal_freq_max; 

                                                        dsrc  = 2;

                                                        type= polar,

                                                        theta= ang; };

                                   units= { freq = GHz; dim = mm };

                                   mesh_freq= mesh_freq;

                                   })

                     table.insert(calculater.model, almond );

              end

       end

end

             

第四步:调用求解器进行计算

----------------------------------------------------------------------------

calculater:find_results()

calculater:run()

----------------------------------------------------------------------------

 

 

(3)调用脚本求解

 

创建计算脚本文件后,我们可以在Gallop里调用计算脚本进行计算,另外我们也可以通过命令行模式调用Gallop求解器。

 

1 Gallop的GUI界面调用脚本: 在lua菜单里,或者工具栏上点击RunScript,然后执行相应的脚本文件进行RCS计算。

利用Gallop的Lua脚本实现RCS的批量计算

 

2 命令行模式调用脚本:通过命令行模式调用脚本可以减少显示、用户交互的过程,在进行批量计算时更稳定、效率更高。首先打开windows开始菜单里找到的“运行”,并键入cmd,通过cd命令把当前目录切换到脚本文件目录,并运行 runGallop rcs_script.lua,运行结束后,会输出各入射角情况下的模型文件,并导出RCS文件。

(4)计算结果后处理

 

上述脚本运行结束后,将得到不同角度入射情况下的远场散射方向图,存储在不同的文件中,模型文件也一并保存。通过Lua脚本可以实现数据的后处理,画图,导出等功能。Gallop示例里提供了处理RCS计算结果的脚本,运行脚本后,我们可以生成所需要的图形。

觅玄电子科技 发起了一个读者讨论 欢迎讨论和留言


以上是关于计算RCS(未成功)的主要内容,如果未能解决你的问题,请参考以下文章

RCS随便写写没整理

R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型使用rms包的Predict函数计算指定连续变量和风险比HR值的关系可视化连续变量和风险值HR的关系

R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型检验模型是否满足等比例风险是否存在非线性关系使用rms包的Predict函数计算指定连续变量和风险比HR值的关系并可视化

R语言使用cph函数和rcs函数构建限制性立方样条cox回归模型使用rms包的Predict函数计算指定连续变量在不同分组变量下和风险比HR值的关系使用ggplot2可视化变量与风险值HR的关系

批处理文件在某些​​计算机上未完成 - 使用 Google Developer Console

RCS系统中使用的SIP(一)