/** * proposal for an temporary solution for the minimum path loss * as discussed in STG 33 6 - 8 February 2013 */ import org.seamcat.model.propagation.*; import org.seamcat.model.technical.exception.ModelException; import org.seamcat.propagation.HataSE21Model; import org.seamcat.propagation.HataSE24Model; import java.util.ArrayList; import java.util.List; /** * * @author Karl Koch * @version Temporary adaptation of the functionality Minimum Coupling Loss of the ILT - VLR * path

*

* The plugin is restricted to: * *

*

*

* The plugin works as follows: *

*

* * * */ public class SE24_MinPathLoss_R2 implements PropagationPluginModel { private final int INDOOR = 0; private final int OUTDOOR = 1; private final int BELOWROOF = 1; private final int ABOVEROOF = 1; private final int URBAN = 0, SUBURBAN = 1, RURAL = 2; private HataSE21Model hata; private HataSE24Model hataSRD; private double pathLoss; private int genEnv; private boolean useIndoor; private String modelToUse; private boolean belowRoof; private Double maxAntennaGain; private Double MCL; private Double wallLoss; private Double wallLossSTDDEV; private Double sizeOfRoom; private Double heightOfFloor; @Override public double evaluate(double frequency, double distance, double TxHeight, double RxHeight, boolean variation, Parameter... params) { initPlugin(params); if (modelToUse.endsWith("SRD")) { hataSRD = new HataSE24Model(); initHataSRD(variation); try { pathLoss = hataSRD.evaluate(frequency, distance, TxHeight, RxHeight); } catch (ModelException e) { e.printStackTrace(); } } else { hata = new HataSE21Model(); initiHata(variation); try { pathLoss = hata.evaluate(frequency, distance, TxHeight, RxHeight); } catch (ModelException e) { e.printStackTrace(); } } pathLoss = Math.max(pathLoss, MCL ); return pathLoss; } private void initiHata(boolean variation) { hata.setGeneralEnv(genEnv); hata.setVariationsSelected(variation); if (belowRoof) { hata.setPropagEnv(BELOWROOF); } else hata.setPropagEnv(ABOVEROOF); if (useIndoor) { hata.setRxLocalEnv(INDOOR); hata.setTxLocalEnv(INDOOR); } else { hata.setRxLocalEnv(OUTDOOR); hata.setTxLocalEnv(OUTDOOR); } } private void initHataSRD(Boolean variation) { hataSRD.setGeneralEnv(genEnv); hataSRD.setVariationsSelected(variation); if (belowRoof) { hataSRD.setPropagEnv(BELOWROOF); } else hataSRD.setPropagEnv(ABOVEROOF); if (useIndoor) { hataSRD.setRxLocalEnv(INDOOR); hataSRD.setTxLocalEnv(INDOOR); } else { hataSRD.setRxLocalEnv(OUTDOOR); hataSRD.setTxLocalEnv(OUTDOOR); } } private void initPlugin(Parameter[] params) { String rGenEnv = params[0].getValue(); if (rGenEnv.equals("Rural")) genEnv = RURAL; else if (rGenEnv.equals("Suburban")) genEnv = SUBURBAN; else genEnv = URBAN; String rModel = params[1].getValue(); if (rModel.endsWith("SRD")) modelToUse = "HATA SRD"; else modelToUse = "HATA"; useIndoor = params[2].isEnabled(); belowRoof = params[3].isEnabled(); if(useIndoor)belowRoof = true; MCL = params[4].getValue(); } @Override public List getParameterDefinitions() { List parameters = new ArrayList(); parameters.add(new SelectionParameter("General Environment", "Rural", "Suburban", "Urban")); parameters.add(new SelectionParameter("Model to be used", "Extended Hata", "Extended Hata SRD")); parameters.add(new BooleanParameter("simulate indoor-indoor").defaultValue(true).description("if not selected it simulates outdoor - outdoor")); parameters.add(new BooleanParameter("simulate below roof top").defaultValue(false)); parameters.add(new DoubleParameter("Minimum Coupling Loss").defaultValue(0.0).unit("dB")); return parameters; } }