martaczaska

wykresy_6_12

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