Advertisement
martaczaska

plz

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