53 nec_float in_theta_start, nec_float in_phi_start,
54 nec_float in_delta_theta, nec_float in_delta_phi,
57 int in_ifar, nec_float in_wavelength,
58 nec_float pinr, nec_float pnlr,
59 int in_rp_output_format,
int in_rp_normalization,
int in_rp_ipd,
int in_rp_power_average,
63 virtual void write_to_file(ostream& os)
override {
64 write_to_file_aux(os);
67 virtual enum nec_result_type get_result_type()
override {
68 return RESULT_RADIATION_PATTERN;
73 void write_gain_normalization() {
75 nec_float norm = get_maximum_gain_db();
76 printf(
"Max Gain: %f\n",norm);
88 return _power_gain_vert;
92 return _power_gain_horiz;
96 return _power_gain_tot;
100 return _polarization_axial_ratio;
106 return _polarization_axial_ratio(theta_index, phi_index);
110 return _polarization_tilt;
114 return _polarization_sense_index;
121 return _polarization_sense_index(theta_index, phi_index);
127 return abs(_e_theta(theta_index, phi_index));
133 return arg_degrees(_e_theta(theta_index, phi_index));
145 return abs(_e_phi(theta_index, phi_index));
151 return arg_degrees(_e_phi(theta_index, phi_index));
164 nec_float get_normalization_factor() {
165 return get_gain_normalization_factor(m_rp_gnor);
168 nec_float get_average_power_gain() {
169 return _average_power_gain;
172 nec_float get_average_power_solid_angle() {
173 return _average_power_solid_angle;
180 nec_float get_range() {
184 nec_float get_wavelength() {
191 for (int32_t i=0; i<n_theta; i++)
196 nec_float get_delta_theta() {
200 nec_float get_theta_start() {
201 return m_theta_start;
207 for (int32_t i=0; i<n_phi; i++)
212 nec_float get_delta_phi() {
216 nec_float get_phi_start() {
225 int get_rp_normalization() {
226 return m_rp_normalization;
229 int get_rp_output_format() {
230 return m_rp_output_format;
233 int get_rp_power_average() {
234 return m_rp_power_average;
244 nec_float get_maximum_gain_db() {
245 return get_gain_normalization_factor(0);
254 int64_t rows = pattern.rows();
255 int64_t cols = pattern.cols();
256 for (int64_t i=0;i<rows;i++) {
257 for (int64_t j=0;j<cols;j++) {
258 sum += pattern(i,j) * _averaging_scales(i,j);
261 int64_t len = rows*cols;
262 return sum/(nec_float(len*2) / pi());
265 nec_float sd(
const real_matrix& pattern, nec_float _mean)
const {
267 int64_t rows = pattern.rows();
268 int64_t cols = pattern.cols();
270 for (int64_t i=0;i<rows;i++) {
271 for (int64_t j=0;j<cols;j++) {
272 nec_float diff = pattern(i,j) - _mean;
273 sum += diff*diff * _averaging_scales(i,j);
276 int64_t len = rows*cols;
277 return std::sqrt(sum/(nec_float(len*2) / pi()));
282 nec_float get_gain_max()
const {
283 return _power_gain_tot.maxCoeff();
286 nec_float get_gain_min()
const {
287 return _power_gain_tot.minCoeff();
290 nec_float get_gain_mean()
const {
291 return mean(_power_gain_tot);
294 nec_float get_gain_sd()
const {
295 nec_float _mean = get_gain_mean();
296 return sd(_power_gain_tot, _mean);
300 nec_float get_gain_rhcp_max()
const {
301 return _power_gain_rhcp.maxCoeff();
304 nec_float get_gain_rhcp_min()
const {
305 return _power_gain_rhcp.minCoeff();
308 nec_float get_gain_rhcp_mean()
const {
309 return mean(_power_gain_rhcp);
312 nec_float get_gain_rhcp_sd()
const {
313 nec_float _mean = get_gain_rhcp_mean();
314 return sd(_power_gain_rhcp, _mean);
318 nec_float get_gain_lhcp_max()
const {
319 return _power_gain_lhcp.maxCoeff();
322 nec_float get_gain_lhcp_min()
const {
323 return _power_gain_lhcp.minCoeff();
326 nec_float get_gain_lhcp_mean()
const {
327 return mean(_power_gain_lhcp);
330 nec_float get_gain_lhcp_sd()
const {
331 nec_float _mean = get_gain_lhcp_mean();
332 return sd(_power_gain_lhcp, _mean);
342 return (m_theta_start + delta_theta*theta_index);
354 return (m_phi_start + delta_phi*phi_index);
366 return _gain(theta_index, phi_index);
372 return _power_gain_vert(theta_index, phi_index);
378 return _power_gain_horiz(theta_index, phi_index);
384 return _power_gain_tot(theta_index, phi_index);
390 nec_float a = get_pol_axial_ratio(theta_index, phi_index);
395 nec_float f = (1-2*a+a*a)/(2*(1+a*a));
396 return dbi + 10*log10(f);
402 nec_float a = get_pol_axial_ratio(theta_index, phi_index);
407 nec_float f = (1+2*a+a*a)/(2*(1+a*a));
408 return dbi + 10*log10(f);
413 int get_index(
int theta_index,
int phi_index)
const;
415 bool m_analysis_done;
419 nec_float m_theta_start, delta_theta;
420 nec_float m_phi_start, delta_phi;
426 nec_float _wavelength;
430 nec_float _average_power_gain;
431 nec_float _average_power_solid_angle;
432 nec_float _maximum_gain;
434 int m_rp_normalization;
435 int m_rp_output_format;
436 int m_rp_power_average;
456 void write_to_file_aux(ostream& os);
458 nec_float get_gain_normalization_factor(nec_float gnor);
460 void write_normalized_gain(ostream& os);
Container for an nec2++ simulation.
Definition nec_context.h:80