martaczaska

Wykresy

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