Advertisement
martaczaska

Wykresy

Nov 30th, 2020
730
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 23.35 KB | None | 0 0
  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, UT_odl;
  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.     /////////////////////////////////////////
  74.     Double[] SINR_dB_NLOS_zaniki = new Double[850];
  75.     Double[] SINR_dB_LOS_zaniki = new Double[850];
  76.     /////////////////////////////////////////
  77.  
  78.     public int nr_tytulu = 0;
  79.  
  80.     public Wykresy(){
  81.         setLayout(null);
  82.         setVisible(true);
  83.  
  84.         for(int i=0; i < 850; i++){ // zerowanie SINRów, chyba jednak nie ma znaczenia
  85.             SINR_NLOS[i] = 0.0;
  86.             SINR_LOS[i] = 0.0;
  87.             SINR_dB_NLOS[i] = 0.0;
  88.             SINR_dB_LOS[i] = 0.0;
  89.         }
  90.  
  91.         File zdj_menu = new File("zdjecia/strona.png");
  92.         try{ tlo_wykresy = ImageIO.read(zdj_menu); }
  93.         catch(IOException e){ System.err.println("Blad odczytu obrazków"); }
  94.  
  95.         tytul7 = new JLabel( "Wykresy przedstawiające wartość SINR zależną od odległości UT od BS ", JLabel.CENTER);
  96.         tytul7.setBounds(5, 70, 1000, 100);
  97.         tytul7.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(wyjscie);
  108.     }
  109.  
  110.  
  111.     public XYDataset daneNLOS(double ut_distance){
  112.         XYSeriesCollection zbior_danych = new XYSeriesCollection();
  113.         XYSeries dane = new XYSeries("");
  114.             for(int i=0; i < 850; i++){
  115.                 dane.add(i, SINR_dB_NLOS[i]);
  116.             }
  117.  
  118.         XYSeries dane_UT = new XYSeries("UT");
  119.         //dane_UT.add((int)ut_distance, SINR_dB_NLOS[(int)ut_distance]);
  120.  
  121.         for(int i=0; i < 850; i++){
  122.             if(i == (int)ut_distance){
  123.                 dane_UT.add((int)ut_distance, SINR_dB_NLOS[(int)ut_distance]);
  124.             }
  125.         }
  126.         zbior_danych.addSeries(dane_UT);  zbior_danych.addSeries(dane);
  127.  
  128.         return zbior_danych;
  129.     }
  130.  
  131.     public XYDataset daneLOS(){
  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.  
  143.     ///////////////////////////////////////////////
  144.     public XYDataset daneNLOS_zaniki(){
  145.         XYSeriesCollection zbior_danych = new XYSeriesCollection();
  146.         XYSeries dane = new XYSeries("");
  147.  
  148.         for(int i=0; i < 850; i++){
  149.             dane.add(i, SINR_dB_NLOS_zaniki[i]);
  150.         }
  151.         zbior_danych.addSeries(dane);
  152.  
  153.         return zbior_danych;
  154.     }
  155.     public XYDataset daneLOS_zaniki(){
  156.         XYSeriesCollection zbior_danych = new XYSeriesCollection();
  157.         XYSeries dane = new XYSeries("");
  158.  
  159.         for(int i=0; i < 850; i++){
  160.             dane.add(i, SINR_dB_LOS_zaniki[i]);
  161.         }
  162.  
  163.         zbior_danych.addSeries(dane);
  164.  
  165.         return zbior_danych;
  166.     }
  167.     //////////////////////////////////////////////
  168.  
  169.     public void Rysuj_wykres(){
  170.         XYDataset dane_NLOS = daneNLOS(UT_odl); //dodawanie wartości SINR
  171.  
  172.         JFreeChart wykres_1 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej (scenariusz NLOS)",
  173.                 "d [m]",
  174.                 "SINR [dB]",
  175.                 dane_NLOS,
  176.                 PlotOrientation.VERTICAL,
  177.                 true, true, false);
  178.  
  179.         JFreeChart wykres_1_1 = ChartFactory.createScatterPlot();
  180.  
  181.  
  182.         /////////////////////////
  183.        /* ValueAxis rangeAxis = wykres_1.getXYPlot().getDomainAxis();
  184.         rangeAxis.setRange(0.0, 80.0);
  185.         rangeAxis.setAutoTickUnitSelection(true);
  186.  
  187.         ValueAxis domainAxis = wykres_1.getXYPlot().getRangeAxis();
  188.         if(s == 1){domainAxis.setRange(0, 1000);}
  189.         else if(s == 2){ domainAxis.setRange(0, 1000);}
  190.         else if(s == 3){ domainAxis.setRange(0, 1000);}
  191.         else if(s == 4){ domainAxis.setRange(0, 650);}
  192.         else if(s == 5){ domainAxis.setRange(0, 650);}
  193.         else if(s == 6){ domainAxis.setRange(0, 5000);}
  194.         else if(s == 7){ domainAxis.setRange(0, 5000);}
  195.         domainAxis.setAutoTickUnitSelection(true);*/
  196.  
  197.         /////////////////////////////////////////
  198.  
  199.         ChartPanel chPanel_1 = new ChartPanel(wykres_1);
  200.  
  201.         XYDataset dane_LOS = daneLOS(); //dodawanie wartości SINR
  202.  
  203.         JFreeChart wykres_2 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej (scenariusz LOS)",
  204.                 "d [m]",
  205.                 "SINR [dB]",
  206.                 dane_LOS,
  207.                 PlotOrientation.VERTICAL,
  208.                 true, true, false);
  209.  
  210.  
  211.         ChartPanel chPanel_2 = new ChartPanel(wykres_2);
  212.  
  213.         ///////////////////////////////////////////////////////
  214.         XYDataset dane_NLOS_zaniki = daneNLOS_zaniki(); //dodawanie wartości SINR
  215.  
  216.         JFreeChart wykres_3 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej z uwzględnieniem zaników powolnych (scenariusz NLOS)",
  217.                 "d [m]",
  218.                 "SINR [dB]",
  219.                 dane_NLOS_zaniki,
  220.                 PlotOrientation.VERTICAL,
  221.                 true, true, false);
  222.  
  223.         ChartPanel chPanel_3 = new ChartPanel(wykres_3);
  224.  
  225.         XYDataset dane_LOS_zaniki = daneLOS_zaniki(); //dodawanie wartości SINR
  226.  
  227.         JFreeChart wykres_4 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej z uwzględnieniem zaników powolnych (scenariusz LOS)",
  228.                 "d [m]",
  229.                 "SINR [dB]",
  230.                 dane_LOS_zaniki,
  231.                 PlotOrientation.VERTICAL,
  232.                 true, true, false);
  233.  
  234.         ChartPanel chPanel_4 = new ChartPanel(wykres_4);
  235.         ///////////////////////////////////////////////////////
  236.  
  237.         SwingUtilities.invokeLater(() -> {
  238.             chPanel_1.setBounds(1, 200, 520, 380);
  239.             chPanel_1.setVisible(true);
  240.  
  241.             chPanel_2.setBounds(500, 200, 520, 380);
  242.             chPanel_2.setVisible(true);
  243.  
  244.             chPanel_3.setBounds(500, 200, 520, 380);
  245.             chPanel_3.setVisible(true);
  246.  
  247.             chPanel_4.setBounds(500, 200, 520, 380);
  248.             chPanel_4.setVisible(true);
  249.         });
  250.  
  251.  
  252.         /////// JTabbedPane :
  253.         //JTabbedPane tabbedPane = new JTabbedPane();
  254.         tabbedPane.setBounds(130, 130, 750, 500);
  255.         tabbedPane.setBackground(Color.WHITE);
  256.  
  257.         tabbedPane.addTab("Wykres NLOS", chPanel_1);
  258.         tabbedPane.setMnemonicAt(0, KeyEvent.VK_2);
  259.  
  260.         tabbedPane.addTab("Wykres LOS", chPanel_2);
  261.         tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
  262.  
  263.         tabbedPane.addTab("Wykres NLOS z uwzględnieniem zaników", chPanel_3);
  264.         tabbedPane.setMnemonicAt(2, KeyEvent.VK_2);
  265.  
  266.         tabbedPane.addTab("Wykres LOS z uwzględnieniem zaników", chPanel_4);
  267.         tabbedPane.setMnemonicAt(3, KeyEvent.VK_2);
  268.  
  269.         tabbedPane.setVisible(true);
  270.  
  271.         //tytul7 = new JLabel( "Wykresy przedstawiające wartość SINR dla modelu " + nazwaModelu, JLabel.CENTER);
  272.         //add(chPanel_1);  add(chPanel_2); add(tytul7);
  273.         add(tabbedPane);
  274.     }
  275.  
  276.     public void actionPerformed(ActionEvent e){
  277.         Object source = e.getSource();
  278.         if(source == wyjscie){
  279.             System.exit(0);
  280.         }
  281.     }
  282.  
  283.     public void paintComponent(Graphics graphic) {
  284.         Graphics2D g2d = (Graphics2D) graphic;
  285.         g2d.drawImage(tlo_wykresy, 0, 0, this);
  286.     }
  287.  
  288.  
  289.     public double PL_O2I(int n, double pl){
  290.         double L_szklo = 2 + 0.2*f_c; //dB
  291.         double L_beton = 5 + 4*f_c; //dB
  292.         double PL_przeniki = 0;
  293.         double PL_tw, PL_in, sigma_P;
  294.         double N = 5;  // !!!!!!!!!!!!!!!!!!! ZMIENIĆ
  295.         PL_in = 0.5*d_2D_IN;
  296.  
  297.         if(n == 0){ //nisko stratny model
  298.             PL_tw = 5 - Math.log10(0.3*Math.pow(10, (-L_szklo/10)) + 0.7*Math.pow(10, (-L_beton/10)));
  299.             sigma_P = 4.4; //dB
  300.             PL_przeniki = pl + PL_tw + PL_in; // + N;
  301.         }
  302.         else if(n == 1){ ////wysoko stratny model
  303.             PL_tw = 5 - Math.log10(0.7*Math.pow(10, (-L_szklo/10)) + 0.3*Math.pow(10, (-L_beton/10)));
  304.             sigma_P = 4.4; //dB
  305.             PL_przeniki = pl + PL_tw + PL_in; // + N;
  306.         }
  307.         return PL_przeniki;
  308.     }
  309.  
  310.     public double licz_sygnal_odebrany(double P_T, double G_TX, double L_FTX, double G_RX, double L_FRX, double PathL){
  311.         //SINR = P_T + G_TX - L_FTX + (PL +I) + G_RX - L_FRX - N - F - IM
  312.         int IM = 2;
  313.         double S, t_e = 1, t_o = 290, N, F;
  314.         //double k = 1.38*Math.pow(10, (-38)); //N = 10*Math.log10(k * t_o * pasmo); //N = -174; // [dBm]
  315.         F = 6 ;
  316.         S = P_T + G_TX - L_FTX - PathL + G_RX - L_FRX - F - IM; // [dBm]
  317.  
  318.         return S;
  319.     }
  320.  
  321.     public void pathLossDlaModelu(double ut_x, double ut_y, double f, boolean zmiennaLosowa){
  322.         if(s == 1){
  323.             d_2D = 140;
  324.             sigma_LOS = 3; //dB
  325.             sigma_NLOS = 8.03; //dB
  326.         }
  327.         else if(s == 2){
  328.             d_2D = 1000;
  329.             sigma_LOS = 4; //dB
  330.             sigma_NLOS = 6; //dB
  331.         }
  332.         else if(s == 3){
  333.             d_2D = 1000;
  334.             sigma_LOS = 4; //dB
  335.             sigma_NLOS = 6; //dB
  336.         }
  337.         else if(s == 4 ){
  338.             d_2D = 650;
  339.             sigma_LOS = 4; //dB
  340.             sigma_NLOS = 7.82; //dB
  341.         }
  342.         else if(s == 5){
  343.             d_2D = 650;
  344.             sigma_LOS = 4; //dB
  345.             sigma_NLOS = 7.82; //dB
  346.         }
  347.         else if(s == 6){
  348.             d_2D = 5000;
  349.             if(d_2D >= 10 && d_2D <= d2_BP){sigma_LOS = 4;} //dB}
  350.             else if(d_2D >= d2_BP && d_2D <= 21000){sigma_LOS = 6;} //dB}
  351.             sigma_NLOS = 8;
  352.         }
  353.         else if(s == 7){
  354.             d_2D = 5000;
  355.             if(d_2D >= 10 && d_2D <= d2_BP){sigma_LOS = 4;} //dB}
  356.             else if(d_2D >= d2_BP && d_2D <= 21000){sigma_LOS = 6;} //dB}
  357.             sigma_NLOS = 8;
  358.         }
  359.  
  360.         for(int k = 1; k < 7; k++){
  361.             xp[0] = 470.0;
  362.             yp[0] = 400.0;
  363.             radius[k] = Math.sqrt( Math.pow((x[k] - xp[0]), 2) + Math.pow((y[k] - yp[0]), 2));
  364.             d2D[k] = (radius[k]*d_2D)/85;
  365.             d_3D[k][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[k], 2) );
  366.             System.out.println("d_3D["+k+"] = " + d_3D[k][0]);
  367.         }
  368.  
  369.         d_3D[0][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(Double.MIN_VALUE, 2) );
  370.         //d_3D[0][0] = Double.MIN_VALUE; //!!!!!!!!!
  371.  
  372.         for(int j=1; j < 850; j++){
  373.             if((ut_x > BS0_x) && (ut_y < BS0_y)){ // I ćwiartka
  374.                 xp[j] = xp[j-1] + 0.1;
  375.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  376.             }
  377.             else if((ut_x < BS0_x) && (ut_y < BS0_y)){ // II ćwiartka
  378.                 xp[j] = xp[j-1] - 0.1;
  379.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  380.             }
  381.             else if((ut_x < BS0_x) && (ut_y > BS0_y)){ // III ćwiartka
  382.                 xp[j] = xp[j-1] - 0.1;
  383.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  384.             }
  385.             else if((ut_x > BS0_x) && (ut_y > BS0_y)){ // IV ćwiartka
  386.                 xp[j] = xp[j-1] + 0.1;
  387.                 yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
  388.             }
  389.  
  390.             for(int i = 0; i < 7; i++){
  391.                 radius[i] = Math.sqrt( Math.pow((x[i] - xp[j]), 2) + Math.pow((y[i] - yp[j]), 2));
  392.                 d2D[i] = (radius[i] * d_2D)/85; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
  393.                 d_3D[i][j] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[i], 2) );
  394.             }
  395.         }
  396.  
  397.  
  398.         if(s == 1){ //model Indoor Hotspot - InH
  399.             for(int j = 0; j < 850; j++){
  400.                 for(int i=0; i < 7; i++){
  401.                     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
  402.                     PL_NLOS2[i][j] = 38.3*Math.log10(d_3D[i][j]) + 17.3 + 24.9*Math.log10(f + 0.1*i);
  403.                     PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);                           //- path loss for NLOS
  404.                 }
  405.             }
  406.             /*sigma_LOS = 3; //dB
  407.             sigma_NLOS = 8.03; //dB*/
  408.         }
  409.  
  410.         else if(s == 2 || s == 3){ //model Urban Macro- UMa
  411.             for(int j = 0; j < 850; j++){
  412.                 for(int i=0; i < 7; i++){
  413.                     if( d_2D >= 10 && d_2D <= d_BP){
  414.                         PL_LOS[i][j] = 28 + 22*Math.log10(d_3D[i][j]) + 20*Math.log10(f + 0.1*i);
  415.                         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);
  416.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  417.                     }
  418.                     else if(d_2D >= d_BP && d_2D <= 5000){
  419.                         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));
  420.                         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);
  421.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  422.                     }
  423.                 }
  424.             }
  425.             /*sigma_LOS = 4; //dB
  426.             sigma_NLOS = 6; //dB*/
  427.  
  428.             if(s == 3) {
  429.                 for(int j = 0; j < 850; j++){
  430.                     for(int i=0; i < 7; i++){
  431.                         PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
  432.                         PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
  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 < 7; 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);
  442.                         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);
  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) -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) -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.             sigma_LOS = 4; //dB
  453.             sigma_NLOS = 7.82; //dB
  454.  
  455.             if(s == 5) {
  456.                 for(int j = 0; j < 850; j++){
  457.                     for(int i=0; i < 7; i++){
  458.                         PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
  459.                         PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
  460.                     }
  461.                 }
  462.             }
  463.         }
  464.  
  465.         else if(s == 6 || s == 7) { //model Rural Macro- RMa
  466.             for(int j = 0; j < 850; j++){
  467.                 for(int i=0; i < 7; i++){
  468.                     if (d_2D >= 10 && d_2D <= d2_BP) {
  469.                         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];
  470.                         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);
  471.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  472.                         sigma_LOS = 4; //dB
  473.                     } else if (d_2D >= d2_BP && d_2D <= 21000) {
  474.                         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);
  475.                         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);
  476.                         PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
  477.                         sigma_LOS = 6; //dB
  478.                     }
  479.                 }
  480.             }
  481.             sigma_NLOS = 8; //dB
  482.  
  483.             if (s == 7) {
  484.                 for(int j = 0; j < 850; j++){
  485.                     for(int i=0; i < 7; i++){
  486.                         PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
  487.                         PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
  488.                         System.out.println("Udało się, yaaaaaaaaaaaaaaaaaaaaaaaaay!");
  489.                     }
  490.                 }
  491.             }
  492.         }
  493.  
  494.         /*Random r = new Random();
  495.         if(zmiennaLosowa == true){
  496.             for(int j = 0; j < 850; j++){
  497.                 for(int i=0; i < 7; i++){
  498.                     PL_LOS[i][j] = PL_LOS[i][j] + r.nextGaussian()*sigma_LOS;
  499.                     PL_NLOS[i][j] = PL_NLOS[i][j] + r.nextGaussian()*sigma_NLOS;
  500.                 }
  501.             }
  502.         }*/
  503.  
  504.     }
  505.  
  506.     public void licz_SINR() {
  507.         Double[] S_NLOS = new Double[7];
  508.         Double[] S_LOS = new Double[7];
  509.         Double[] I_W_NLOS = new Double[7]; //inerferencje w watach
  510.         Double[] I_W_LOS = new Double[7]; //inerferencje w watach
  511.         Double[] S_0_NLOS = new Double[850];
  512.         Double[] S_0_LOS = new Double[850];
  513.  
  514.         for (int q = 0; q < 2; q++) {
  515.             if(q==1){
  516.                 Random r = new Random();
  517.                 for(int j = 0; j < 850; j++){
  518.                     for(int i=0; i < 7; i++){
  519.                         PL_LOS[i][j] = PL_LOS[i][j] + r.nextGaussian()*sigma_LOS;
  520.                         PL_NLOS[i][j] = PL_NLOS[i][j] + r.nextGaussian()*sigma_NLOS;
  521.                     }
  522.                 }
  523.             }
  524.  
  525.         for (int t = 0; t < 850; t++) {
  526.             for (int i = 0; i < 7; i++) {
  527.                 if (i == 0) {
  528.                     if (t == 0) {
  529.                         S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, 0);
  530.                         S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, 0);  //LOS tylko między UT i BS0
  531.                     }
  532.                     S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
  533.                     S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_LOS[i][t]);  //LOS tylko między UT i BS0
  534.                 } else {
  535.                     S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
  536.                     S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
  537.                 }
  538.             }
  539.  
  540.             S_0_NLOS[t] = Math.pow(10, (S_NLOS[0] / 10 - 3)); // z dBm na waty
  541.             I_W_NLOS[0] = 0.0;
  542.             I_suma_NLOS = 0.0;
  543.  
  544.             S_0_LOS[t] = Math.pow(10, (S_LOS[0] / 10 - 3)); // z dBm na waty
  545.             I_W_LOS[0] = 0.0;
  546.             I_suma_LOS = 0.0;
  547.  
  548.             for (int j = 1; j < 7; j++) {
  549.                 I_W_NLOS[j] = Math.pow(10, S_NLOS[j] / 10 - 3); // z dBm na waty
  550.                 I_suma_NLOS = I_suma_NLOS + I_W_NLOS[j];
  551.  
  552.                 I_W_LOS[j] = Math.pow(10, (S_LOS[j] / 10 - 3)); // z dBm na waty
  553.                 I_suma_LOS = I_suma_LOS + I_W_LOS[j];
  554.             }
  555.  
  556.             if(q == 0){
  557.                 SINR_NLOS[t] = S_0_NLOS[t] / (I_suma_NLOS + N_W);
  558.                 SINR_dB_NLOS[t] = 10 * Math.log10(SINR_NLOS[t]); //na dB
  559.  
  560.                 SINR_LOS[t] = S_0_LOS[t] / (I_suma_LOS + N_W);
  561.                 SINR_dB_LOS[t] = 10 * Math.log10(SINR_LOS[t]); //na dB
  562.             }
  563.             else if(q == 1){
  564.                 SINR_NLOS[t] = S_0_NLOS[t] / (I_suma_NLOS + N_W);
  565.                 SINR_dB_NLOS_zaniki[t] = 10 * Math.log10(SINR_NLOS[t]); //na dB
  566.  
  567.                 SINR_LOS[t] = S_0_LOS[t] / (I_suma_LOS + N_W);
  568.                 SINR_dB_LOS_zaniki[t] = 10 * Math.log10(SINR_LOS[t]); //na dB
  569.             }
  570.  
  571.         }
  572.  
  573.         System.out.println("SINR_dB_NLOS dla t = 0 " + SINR_dB_NLOS[0]);
  574.         System.out.println("SINR_dB_LOS dla t = 0 " + SINR_dB_LOS[0]);
  575.  
  576.         System.out.println("SINR_dB_NLOS dla t = 850 " + SINR_dB_NLOS[849]);
  577.         System.out.println("SINR_dB_LOS dla t = 850 " + SINR_dB_LOS[849]);
  578.  
  579.         }
  580.  
  581.     }
  582.     /*public void zaniki(){
  583.         pathLossDlaModelu(UT_x, UT_y, f_c, true);
  584.         licz_SINR();
  585.     }*/
  586. }
  587.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement