martaczaska

rewgq

Dec 1st, 2020
429
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package eti.radio.pr_inz;
  2.  
  3. import javax.imageio.ImageIO;
  4. import javax.swing.*;
  5. import java.awt.*;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.awt.event.KeyEvent;
  9. import java.awt.image.BufferedImage;
  10. import java.io.File;
  11. import java.io.IOException;
  12. import java.util.Random;
  13.  
  14. import org.jfree.chart.ChartFactory;
  15. import org.jfree.chart.ChartPanel;
  16. import org.jfree.chart.ChartUtils;
  17. import org.jfree.chart.JFreeChart;
  18. import org.jfree.chart.axis.CategoryAxis;
  19. import org.jfree.chart.axis.NumberAxis;
  20. import org.jfree.chart.axis.NumberTickUnit;
  21. import org.jfree.chart.axis.ValueAxis;
  22. import org.jfree.chart.plot.CategoryPlot;
  23. import org.jfree.chart.plot.Plot;
  24. import org.jfree.chart.plot.PlotOrientation;
  25. import org.jfree.chart.renderer.category.CategoryItemRenderer;
  26. import org.jfree.chart.renderer.category.LineAndShapeRenderer;
  27. import org.jfree.chart.renderer.category.ScatterRenderer;
  28. import org.jfree.data.category.DefaultCategoryDataset;
  29. import org.jfree.data.xy.XYDataset;
  30. import org.jfree.data.xy.XYSeries;
  31. import org.jfree.data.xy.XYSeriesCollection;
  32.  
  33. public class Wykresy extends JPanel implements ActionListener {
  34.  
  35.     //
  36.     public Double[] xp = new Double[850];
  37.     public Double[] yp = new Double[850];
  38.     public Integer[] x = {470, 300, 300, 470, 640, 640, 470};
  39.     public Integer[] y = {400, 480, 313, 230, 313, 480, 570};
  40.     public double UT_x, UT_y, UT_odl;
  41.     public double BS0_x = x[0], BS0_y = y[0];
  42.     public double zasieg;
  43.  
  44.     int nw = 0, s = 1;
  45.     //double f_c = 2.6; // [GHz] *Math.pow(10, 9);
  46.     double d_2D; //m
  47.     double c = 3*Math.pow(10, 8);
  48.     int d_2D_IN = 1;
  49.     int h_BS = 25, h_UT = 1;  ///zrobić jako Slidery
  50.     int h_E = 1; // 1m
  51.     int h = 5; //w metrach, do RMa
  52.     int W = 20; //w metrach, do RMa
  53.  
  54.     double sigma_LOS, sigma_NLOS;
  55.     public Double[][] PL_LOS= new Double[7][850];
  56.     public Double[][] PL_NLOS= new Double[7][850];
  57.     public Double[][] PL_NLOS2= new Double[7][850];
  58.     double d_BP, d2_BP;
  59.     public Double[] p = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
  60.     public Double[] d2D = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
  61.     public Double[][] d_3D = new Double[7][850];
  62.     public Double[] radius = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  63.     public Double[] SNR = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  64.     public Double[] SNR_WAT = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
  65.     public double I_suma_NLOS = 0, I_suma_LOS = 0;
  66.     double N = -174;
  67.     double N_W = Math.pow(10, (N/10 - 3));
  68.     //
  69.  
  70.     private JButton wyjscie;
  71.     private JLabel tytul7;
  72.     public JTabbedPane tabbedPane;
  73.     public String nazwaModelu = "";
  74.     public BufferedImage tlo_wykresy;
  75.     public double f_c = 3; //GHz
  76.     Double[] SINR_NLOS = new Double[850];
  77.     Double[] SINR_LOS = new Double[850];
  78.     Double[] SINR_dB_NLOS = new Double[850];
  79.     Double[] SINR_dB_LOS = new Double[850];
  80.     /////////////////////////////////////////
  81.     Double[] SINR_dB_NLOS_zaniki = new Double[850];
  82.     Double[] SINR_dB_LOS_zaniki = new Double[850];
  83.     /////////////////////////////////////////
  84.  
  85.     public int nr_tytulu = 0;
  86.  
  87.     public Wykresy(){
  88.         setLayout(null);
  89.         setVisible(true);
  90.  
  91.         for(int i=0; i < 850; i++){ // zerowanie SINRów, chyba jednak nie ma znaczenia
  92.             SINR_NLOS[i] = 0.0;
  93.             SINR_LOS[i] = 0.0;
  94.             SINR_dB_NLOS[i] = 0.0;
  95.             SINR_dB_LOS[i] = 0.0;
  96.         }
  97.  
  98.         File zdj_menu = new File("zdjecia/strona.png");
  99.         try{ tlo_wykresy = ImageIO.read(zdj_menu); }
  100.         catch(IOException e){ System.err.println("Blad odczytu obrazków"); }
  101.  
  102.         tytul7 = new JLabel( "Wykresy przedstawiające wartość SINR zależną od odległości UT od BS ", JLabel.CENTER);
  103.         tytul7.setBounds(5, 70, 1000, 100);
  104.         tytul7.setFont(new Font("Sitka Text", Font.BOLD, 25));
  105.  
  106.         wyjscie = new JButton("Wyjście");
  107.         wyjscie.addActionListener(this);
  108.         wyjscie.setBounds(750, 650, 180, 50);
  109.         wyjscie.setFont(new Font("Sitka Text", Font.BOLD, 25));
  110.         wyjscie.setBackground(Color.white);
  111.  
  112.         tabbedPane = new JTabbedPane();
  113.  
  114.         add(tabbedPane); add(tytul7); add(wyjscie);
  115.     }
  116.  
  117.     /*public DefaultCategoryDataset daneUT(double ut_distance){
  118.         DefaultCategoryDataset dane_UT = new DefaultCategoryDataset();
  119.  
  120.         for(int i=0; i < 850; i++){
  121.             if(i == (int)ut_distance){
  122.                 dane_UT.addValue((int)ut_distance,"UT", SINR_dB_NLOS[(int)ut_distance]);
  123.             }
  124.         }
  125.         return dane_UT;
  126.     }*/
  127.  
  128.     public DefaultCategoryDataset daneNLOS(){
  129.         DefaultCategoryDataset dane = new DefaultCategoryDataset();
  130.             for(int i=0; i < 850; i++){
  131.                 dane.addValue(i, "NLOS",  SINR_dB_NLOS[i]);
  132.             }
  133.  
  134.         return dane;
  135.     }
  136.  
  137.  
  138.     public XYDataset daneLOS(){
  139.         XYSeriesCollection zbior_danych = new XYSeriesCollection();
  140.         XYSeries dane = new XYSeries("");
  141.  
  142.         for(int i=0; i < 850; i++){
  143.             dane.add(i, SINR_dB_LOS[i]);
  144.         }
  145.         zbior_danych.addSeries(dane);
  146.  
  147.         return zbior_danych;
  148.     }
  149.  
  150.     ///////////////////////////////////////////////
  151.     public XYDataset daneNLOS_zaniki(){
  152.         XYSeriesCollection zbior_danych = new XYSeriesCollection();
  153.         XYSeries dane = new XYSeries("");
  154.  
  155.         for(int i=0; i < 850; i++){
  156.             dane.add(i, SINR_dB_NLOS_zaniki[i]);
  157.         }
  158.         zbior_danych.addSeries(dane);
  159.  
  160.         return zbior_danych;
  161.     }
  162.     public XYDataset daneLOS_zaniki(){
  163.         XYSeriesCollection zbior_danych = new XYSeriesCollection();
  164.         XYSeries dane = new XYSeries("");
  165.  
  166.         for(int i=0; i < 850; i++){
  167.             dane.add(i, SINR_dB_LOS_zaniki[i]);
  168.         }
  169.  
  170.         zbior_danych.addSeries(dane);
  171.  
  172.         return zbior_danych;
  173.     }
  174.     //////////////////////////////////////////////
  175.  
  176.     public void Rysuj_wykres(){
  177.         ///////////////// BLOP /////////////////
  178.         CategoryPlot plot_1 = new CategoryPlot();
  179.  
  180.         CategoryItemRenderer lineRenderer = new LineAndShapeRenderer();
  181.         plot_1.setDataset(0, daneNLOS());
  182.         plot_1.setRenderer(0, lineRenderer);
  183.         CategoryItemRenderer scatterRenderer = new ScatterRenderer();
  184.         plot_1.setDataset(1, daneUT(UT_odl));
  185.         plot_1.setRenderer(1, scatterRenderer);
  186.         plot_1.setDomainAxis(new CategoryAxis("d [m]"));
  187.         plot_1.setRangeAxis(new NumberAxis("SINR [dB]"));
  188.  
  189.         JFreeChart wykres_1 = new JFreeChart(plot_1);
  190.         wykres_1.setTitle("Funkcja wartości SINR od odległości od stacji bazowej (scenariusz LOS)");
  191.         ChartPanel chPanel_1 = new ChartPanel(wykres_1);
  192.  
  193.         ///////////////// BLOP /////////////////
  194.  
  195.         /////////////////////////
  196.        /* ValueAxis rangeAxis = wykres_1.getXYPlot().getDomainAxis();
  197.         rangeAxis.setRange(0.0, 80.0);
  198.         rangeAxis.setAutoTickUnitSelection(true);
  199.  
  200.         ValueAxis domainAxis = wykres_1.getXYPlot().getRangeAxis();
  201.         if(s == 1){domainAxis.setRange(0, 1000);}
  202.         else if(s == 2){ domainAxis.setRange(0, 1000);}
  203.         else if(s == 3){ domainAxis.setRange(0, 1000);}
  204.         else if(s == 4){ domainAxis.setRange(0, 650);}
  205.         else if(s == 5){ domainAxis.setRange(0, 650);}
  206.         else if(s == 6){ domainAxis.setRange(0, 5000);}
  207.         else if(s == 7){ domainAxis.setRange(0, 5000);}
  208.         domainAxis.setAutoTickUnitSelection(true);*/
  209.  
  210.         /////////////////////////////////////////
  211.  
  212.  
  213.         XYDataset dane_LOS = daneLOS(); //dodawanie wartości SINR
  214.  
  215.         JFreeChart wykres_2 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej (scenariusz LOS)",
  216.                 "d [m]",
  217.                 "SINR [dB]",
  218.                 dane_LOS,
  219.                 PlotOrientation.VERTICAL,
  220.                 true, true, false);
  221.  
  222.  
  223.         ChartPanel chPanel_2 = new ChartPanel(wykres_2);
  224.  
  225.         ///////////////////////////////////////////////////////
  226.         XYDataset dane_NLOS_zaniki = daneNLOS_zaniki(); //dodawanie wartości SINR
  227.  
  228.         JFreeChart wykres_3 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej z uwzględnieniem zaników powolnych (scenariusz NLOS)",
  229.                 "d [m]",
  230.                 "SINR [dB]",
  231.                 dane_NLOS_zaniki,
  232.                 PlotOrientation.VERTICAL,
  233.                 true, true, false);
  234.  
  235.         ChartPanel chPanel_3 = new ChartPanel(wykres_3);
  236.  
  237.         XYDataset dane_LOS_zaniki = daneLOS_zaniki(); //dodawanie wartości SINR
  238.  
  239.         JFreeChart wykres_4 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej z uwzględnieniem zaników powolnych (scenariusz LOS)",
  240.                 "d [m]",
  241.                 "SINR [dB]",
  242.                 dane_LOS_zaniki,
  243.                 PlotOrientation.VERTICAL,
  244.                 true, true, false);
  245.  
  246.         ChartPanel chPanel_4 = new ChartPanel(wykres_4);
  247.         ///////////////////////////////////////////////////////
  248.  
  249.         SwingUtilities.invokeLater(() -> {
  250.             chPanel_1.setBounds(1, 200, 520, 380);
  251.             chPanel_1.setVisible(true);
  252.  
  253.             chPanel_2.setBounds(500, 200, 520, 380);
  254.             chPanel_2.setVisible(true);
  255.  
  256.             chPanel_3.setBounds(500, 200, 520, 380);
  257.             chPanel_3.setVisible(true);
  258.  
  259.             chPanel_4.setBounds(500, 200, 520, 380);
  260.             chPanel_4.setVisible(true);
  261.         });
  262.  
  263.  
  264.         /////// JTabbedPane :
  265.         //JTabbedPane tabbedPane = new JTabbedPane();
  266.         tabbedPane.setBounds(130, 130, 750, 500);
  267.         tabbedPane.setBackground(Color.WHITE);
  268.  
  269.         tabbedPane.addTab("Wykres NLOS", chPanel_1);
  270.         tabbedPane.setMnemonicAt(0, KeyEvent.VK_2);
  271.  
  272.         tabbedPane.addTab("Wykres LOS", chPanel_2);
  273.         tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
  274.  
  275.         tabbedPane.addTab("Wykres NLOS z uwzględnieniem zaników", chPanel_3);
  276.         tabbedPane.setMnemonicAt(2, KeyEvent.VK_2);
  277.  
  278.         tabbedPane.addTab("Wykres LOS z uwzględnieniem zaników", chPanel_4);
  279.         tabbedPane.setMnemonicAt(3, KeyEvent.VK_2);
  280.  
  281.         tabbedPane.setVisible(true);
  282.  
  283.         //tytul7 = new JLabel( "Wykresy przedstawiające wartość SINR dla modelu " + nazwaModelu, JLabel.CENTER);
  284.         //add(chPanel_1);  add(chPanel_2); add(tytul7);
  285.         add(tabbedPane);
  286.     }
  287.  
  288.     public void actionPerformed(ActionEvent e){
  289.         Object source = e.getSource();
  290.         if(source == wyjscie){
  291.             System.exit(0);
  292.         }
  293.     }
  294.  
  295.     public void paintComponent(Graphics graphic) {
  296.         Graphics2D g2d = (Graphics2D) graphic;
  297.         g2d.drawImage(tlo_wykresy, 0, 0, this);
  298.     }
  299.  
  300.  
  301.     public double PL_O2I(int n, double pl){
  302.         double L_szklo = 2 + 0.2*f_c; //dB
  303.         double L_beton = 5 + 4*f_c; //dB
  304.         double PL_przeniki = 0;
  305.         double PL_tw, PL_in, sigma_P;
  306.         double N = 5;  // !!!!!!!!!!!!!!!!!!! ZMIENIĆ
  307.         PL_in = 0.5*d_2D_IN;
  308.  
  309.         if(n == 0){ //nisko stratny model
  310.             PL_tw = 5 - Math.log10(0.3*Math.pow(10, (-L_szklo/10)) + 0.7*Math.pow(10, (-L_beton/10)));
  311.             sigma_P = 4.4; //dB
  312.             PL_przeniki = pl + PL_tw + PL_in; // + N;
  313.         }
  314.         else if(n == 1){ ////wysoko stratny model
  315.             PL_tw = 5 - Math.log10(0.7*Math.pow(10, (-L_szklo/10)) + 0.3*Math.pow(10, (-L_beton/10)));
  316.             sigma_P = 4.4; //dB
  317.             PL_przeniki = pl + PL_tw + PL_in; // + N;
  318.         }
  319.         return PL_przeniki;
  320.     }
  321.  
  322.     public double licz_sygnal_odebrany(double P_T, double G_TX, double L_FTX, double G_RX, double L_FRX, double PathL){
  323.         //SINR = P_T + G_TX - L_FTX + (PL +I) + G_RX - L_FRX - N - F - IM
  324.         int IM = 2;
  325.         double S, t_e = 1, t_o = 290, N, F;
  326.         //double k = 1.38*Math.pow(10, (-38)); //N = 10*Math.log10(k * t_o * pasmo); //N = -174; // [dBm]
  327.         F = 6 ;
  328.         S = P_T + G_TX - L_FTX - PathL + G_RX - L_FRX - F - IM; // [dBm]
  329.  
  330.         return S;
  331.     }
  332.  
  333.     public void pathLossDlaModelu(double ut_x, double ut_y, double f, boolean zmiennaLosowa){
  334.         if(s == 1){
  335.             d_2D = 140;
  336.             sigma_LOS = 3; //dB
  337.             sigma_NLOS = 8.03; //dB
  338.         }
  339.         else if(s == 2){
  340.             d_2D = 1000;
  341.             sigma_LOS = 4; //dB
  342.             sigma_NLOS = 6; //dB
  343.         }
  344.         else if(s == 3){
  345.             d_2D = 1000;
  346.             sigma_LOS = 4; //dB
  347.             sigma_NLOS = 6; //dB
  348.         }
  349.         else if(s == 4 ){
  350.             d_2D = 650;
  351.             sigma_LOS = 4; //dB
  352.             sigma_NLOS = 7.82; //dB
  353.         }
  354.         else if(s == 5){
  355.             d_2D = 650;
  356.             sigma_LOS = 4; //dB
  357.             sigma_NLOS = 7.82; //dB
  358.         }
  359.         else if(s == 6){
  360.             d_2D = 5000;
  361.             if(d_2D >= 10 && d_2D <= d2_BP){sigma_LOS = 4;} //dB}
  362.             else if(d_2D >= d2_BP && d_2D <= 21000){sigma_LOS = 6;} //dB}
  363.             sigma_NLOS = 8;
  364.         }
  365.         else if(s == 7){
  366.             d_2D = 5000;
  367.             if(d_2D >= 10 && d_2D <= d2_BP){sigma_LOS = 4;} //dB}
  368.             else if(d_2D >= d2_BP && d_2D <= 21000){sigma_LOS = 6;} //dB}
  369.             sigma_NLOS = 8;
  370.         }
  371.  
  372.         for(int k = 1; k < 7; k++){
  373.             xp[0] = 470.0;
  374.             yp[0] = 400.0;
  375.             radius[k] = Math.sqrt( Math.pow((x[k] - xp[0]), 2) + Math.pow((y[k] - yp[0]), 2));
  376.             d2D[k] = (radius[k]*d_2D)/85;
  377.             d_3D[k][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[k], 2) );
  378.             System.out.println("d_3D["+k+"] = " + d_3D[k][0]);
  379.         }
  380.  
  381.         d_3D[0][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(Double.MIN_VALUE, 2) );
  382.         //d_3D[0][0] = Double.MIN_VALUE; //!!!!!!!!!
  383.  
  384.         for(int j=1; j < 850; j++){
  385.             if((ut_x > BS0_x) && (ut_y < BS0_y)){ // I ćwiartka
  386.                 xp[j] = xp[j-1] + 0.1;
  387.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  388.             }
  389.             else if((ut_x < BS0_x) && (ut_y < BS0_y)){ // II ćwiartka
  390.                 xp[j] = xp[j-1] - 0.1;
  391.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  392.             }
  393.             else if((ut_x < BS0_x) && (ut_y > BS0_y)){ // III ćwiartka
  394.                 xp[j] = xp[j-1] - 0.1;
  395.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  396.             }
  397.             else if((ut_x > BS0_x) && (ut_y > BS0_y)){ // IV ćwiartka
  398.                 xp[j] = xp[j-1] + 0.1;
  399.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  400.             }
  401.  
  402.             for(int i = 0; i < 7; i++){
  403.                 radius[i] = Math.sqrt( Math.pow((x[i] - xp[j]), 2) + Math.pow((y[i] - yp[j]), 2));
  404.                 d2D[i] = (radius[i] * d_2D)/85; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
  405.                 d_3D[i][j] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[i], 2) );
  406.             }
  407.         }
  408.  
  409.  
  410.         if(s == 1){ //model Indoor Hotspot - InH
  411.             for(int j = 0; j < 850; j++){
  412.                 for(int i=0; i < 7; i++){
  413.                     PL_LOS[i][j] = 32.4 + 17.3*Math.log10(d_3D[i][j]) + 20*Math.log10(f + 0.1*i);     //- path loss for LOS
  414.                     PL_NLOS2[i][j] = 38.3*Math.log10(d_3D[i][j]) + 17.3 + 24.9*Math.log10(f + 0.1*i);
  415.                     PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);                           //- path loss for NLOS
  416.                 }
  417.             }
  418.             /*sigma_LOS = 3; //dB
  419.             sigma_NLOS = 8.03; //dB*/
  420.         }
  421.  
  422.         else if(s == 2 || s == 3){ //model Urban Macro- UMa
  423.             for(int j = 0; j < 850; j++){
  424.                 for(int i=0; i < 7; i++){
  425.                     if( d_2D >= 10 && d_2D <= d_BP){
  426.                         PL_LOS[i][j] = 28 + 22*Math.log10(d_3D[i][j]) + 20*Math.log10(f + 0.1*i);
  427.                         PL_NLOS2[i][j] = 13.54 + 39.08*Math.log10(d_3D[i][j]) + 20*Math.log10(f + 0.1*i) -0.6*(h_UT-1.5);
  428.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  429.                     }
  430.                     else if(d_2D >= d_BP && d_2D <= 5000){
  431.                         PL_LOS[i][j] = 28 + 40*Math.log10(d_3D[i][j]) + 20*Math.log10(f + 0.1*i) -9*Math.log10(Math.pow(d_BP,2) + Math.pow((h_BS + h_UT),2));
  432.                         PL_NLOS2[i][j] = 13.54 + 39.08*Math.log10(d_3D[i][j]) + 20*Math.log10(f + 0.1*i) -0.6*(h_UT-1.5);
  433.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  434.                     }
  435.                 }
  436.             }
  437.             /*sigma_LOS = 4; //dB
  438.             sigma_NLOS = 6; //dB*/
  439.  
  440.             if(s == 3) {
  441.                 for(int j = 0; j < 850; j++){
  442.                     for(int i=0; i < 7; i++){
  443.                         PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
  444.                         PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
  445.                     }
  446.                 }
  447.             }
  448.         }
  449.         else if(s == 4 || s == 5){ //model Urban Micro- UMi
  450.             for(int j = 0; j < 850; j++){
  451.                 for(int i=0; i < 7; i++){
  452.                     if( d_2D >= 10 && d_2D <= d_BP){
  453.                         PL_LOS[i][j] = 32.4 + 21*Math.log10(d_3D[i][j]) + 20*Math.log10(f);
  454.                         PL_NLOS2[i][j] = 22.4 + 35.3*Math.log10(d_3D[i][j]) + 21.3*Math.log10(f) -0.3*(h_UT-1.5);
  455.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  456.                     }
  457.                     else if(d_2D >= d_BP && d_2D <= 5000){
  458.                         PL_LOS[i][j] = 32.4 + 40*Math.log10(d_3D[i][j]) + 20*Math.log10(f) -9.5*Math.log10(Math.pow(d_BP,2) + Math.pow((h_BS + h_UT),2));
  459.                         PL_NLOS2[i][j] = 22.4 + 35.3*Math.log10(d_3D[i][j]) + 21.3*Math.log10(f) -0.3*(h_UT-1.5);
  460.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  461.                     }
  462.                 }
  463.             }
  464.             sigma_LOS = 4; //dB
  465.             sigma_NLOS = 7.82; //dB
  466.  
  467.             if(s == 5) {
  468.                 for(int j = 0; j < 850; j++){
  469.                     for(int i=0; i < 7; i++){
  470.                         PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
  471.                         PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
  472.                     }
  473.                 }
  474.             }
  475.         }
  476.  
  477.         else if(s == 6 || s == 7) { //model Rural Macro- RMa
  478.             for(int j = 0; j < 850; j++){
  479.                 for(int i=0; i < 7; i++){
  480.                     if (d_2D >= 10 && d_2D <= d2_BP) {
  481.                         PL_LOS[i][j] = 20 * Math.log10((40 * Math.PI * d_3D[i][j] * f) / 3) + Math.min(Math.pow(0.03 * h, 1.72), 10) * Math.log10(d_3D[i][j]) - Math.min(Math.pow(0.044 * h, 1.72), 14.77) + 0.002 * Math.log10(h) * d_3D[i][j];
  482.                         PL_NLOS2[i][j] = 161.04 - 7.1 * Math.log10(W) + 7.5 * Math.log10(h) - (24.37 - 3.7 * Math.pow((h / h_BS), 2)) * Math.log10(h_BS) + (43.42 - 3.1 * Math.log10(h_BS)) * (Math.log10(d_3D[i][j]) - 3) + 20 * Math.log10(f) - (3.2 *Math.pow(Math.log10(11.75 * h_UT), 2) - 4.97);
  483.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  484.                         sigma_LOS = 4; //dB
  485.                     } else if (d_2D >= d2_BP && d_2D <= 21000) {
  486.                         PL_LOS[i][j] = 20 * Math.log10((40 * Math.PI * d2_BP * f) / 3) + Math.min(Math.pow(0.03 * h, 1.72), 10) * Math.log10(d2_BP) - Math.min(Math.pow(0.044 * h, 1.72), 14.77) + 0.002 * Math.log10(h) * d2_BP + 40 * Math.log10(d_3D[i][j] / d2_BP);
  487.                         PL_NLOS2[i][j] = 161.04 - 7.1 * Math.log10(W) + 7.5 * Math.log10(h) - (24.37 - 3.7 * Math.pow((h / h_BS), 2)) * Math.log10(h_BS) + (43.42 - 3.1 * Math.log10(h_BS)) * (Math.log10(d_3D[i][j]) - 3) + 20 * Math.log10(f) - (3.2 *Math.pow(Math.log10(11.75 * h_UT), 2) - 4.97);
  488.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  489.                         sigma_LOS = 6; //dB
  490.                     }
  491.                 }
  492.             }
  493.             sigma_NLOS = 8; //dB
  494.  
  495.             if (s == 7) {
  496.                 for(int j = 0; j < 850; j++){
  497.                     for(int i=0; i < 7; i++){
  498.                         PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
  499.                         PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
  500.                         System.out.println("Udało się, yaaaaaaaaaaaaaaaaaaaaaaaaay!");
  501.                     }
  502.                 }
  503.             }
  504.         }
  505.  
  506.     }
  507.  
  508.     public void licz_SINR() {
  509.         Double[] S_NLOS = new Double[7];
  510.         Double[] S_LOS = new Double[7];
  511.         Double[] I_W_NLOS = new Double[7]; //inerferencje w watach
  512.         Double[] I_W_LOS = new Double[7]; //inerferencje w watach
  513.         Double[] S_0_NLOS = new Double[850];
  514.         Double[] S_0_LOS = new Double[850];
  515.  
  516.         for (int q = 0; q < 2; q++) {
  517.             if(q==1){
  518.                 Random r = new Random();
  519.                 for(int j = 0; j < 850; j++){
  520.                     for(int i=0; i < 7; i++){
  521.                         PL_LOS[i][j] = PL_LOS[i][j] + r.nextGaussian()*sigma_LOS;
  522.                         PL_NLOS[i][j] = PL_NLOS[i][j] + r.nextGaussian()*sigma_NLOS;
  523.                     }
  524.                 }
  525.             }
  526.  
  527.         for (int t = 0; t < 850; t++) {
  528.             for (int i = 0; i < 7; i++) {
  529.                 if (i == 0) {
  530.                     if (t == 0) {
  531.                         S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, 0);
  532.                         S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, 0);  //LOS tylko między UT i BS0
  533.                     }
  534.                     S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
  535.                     S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_LOS[i][t]);  //LOS tylko między UT i BS0
  536.                 } else {
  537.                     S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
  538.                     S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
  539.                 }
  540.             }
  541.  
  542.             S_0_NLOS[t] = Math.pow(10, (S_NLOS[0] / 10 - 3)); // z dBm na waty
  543.             I_W_NLOS[0] = 0.0;
  544.             I_suma_NLOS = 0.0;
  545.  
  546.             S_0_LOS[t] = Math.pow(10, (S_LOS[0] / 10 - 3)); // z dBm na waty
  547.             I_W_LOS[0] = 0.0;
  548.             I_suma_LOS = 0.0;
  549.  
  550.             for (int j = 1; j < 7; j++) {
  551.                 I_W_NLOS[j] = Math.pow(10, S_NLOS[j] / 10 - 3); // z dBm na waty
  552.                 I_suma_NLOS = I_suma_NLOS + I_W_NLOS[j];
  553.  
  554.                 I_W_LOS[j] = Math.pow(10, (S_LOS[j] / 10 - 3)); // z dBm na waty
  555.                 I_suma_LOS = I_suma_LOS + I_W_LOS[j];
  556.             }
  557.  
  558.             if(q == 0){
  559.                 SINR_NLOS[t] = S_0_NLOS[t] / (I_suma_NLOS + N_W);
  560.                 SINR_dB_NLOS[t] = 10 * Math.log10(SINR_NLOS[t]); //na dB
  561.  
  562.                 SINR_LOS[t] = S_0_LOS[t] / (I_suma_LOS + N_W);
  563.                 SINR_dB_LOS[t] = 10 * Math.log10(SINR_LOS[t]); //na dB
  564.             }
  565.             else if(q == 1){
  566.                 SINR_NLOS[t] = S_0_NLOS[t] / (I_suma_NLOS + N_W);
  567.                 SINR_dB_NLOS_zaniki[t] = 10 * Math.log10(SINR_NLOS[t]); //na dB
  568.  
  569.                 SINR_LOS[t] = S_0_LOS[t] / (I_suma_LOS + N_W);
  570.                 SINR_dB_LOS_zaniki[t] = 10 * Math.log10(SINR_LOS[t]); //na dB
  571.             }
  572.  
  573.         }
  574.  
  575.         System.out.println("SINR_dB_NLOS dla t = 0 " + SINR_dB_NLOS[0]);
  576.         System.out.println("SINR_dB_LOS dla t = 0 " + SINR_dB_LOS[0]);
  577.  
  578.         System.out.println("SINR_dB_NLOS dla t = 850 " + SINR_dB_NLOS[849]);
  579.         System.out.println("SINR_dB_LOS dla t = 850 " + SINR_dB_LOS[849]);
  580.  
  581.         }
  582.  
  583.     }
  584.  
  585. }
RAW Paste Data