martaczaska

Wykresy_29.11

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