martaczaska

Wykresy_5_12

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