Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package eti.radio.pr_inz;
- import javax.imageio.ImageIO;
- import javax.swing.*;
- import javax.swing.table.TableColumn;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.util.Random;
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartPanel;
- import org.jfree.chart.JFreeChart;
- import org.jfree.chart.axis.ValueAxis;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.data.xy.XYDataset;
- import org.jfree.data.xy.XYSeries;
- import org.jfree.data.xy.XYSeriesCollection;
- public class Wykresy extends JPanel implements ActionListener {
- public Double[] xp = new Double[100];
- public Double[] yp = new Double[100];
- public Integer[] x = {470, 323, 323, 470, 617, 617, 470, 323, 176, 176, 176, 323, 470, 617, 764, 764, 764, 617, 470};
- public Integer[] y = {400, 485, 315, 230, 315, 485, 570, 655, 570, 400, 230, 145, 60, 145, 230, 400, 570, 655, 740};
- public double UT_x, UT_y, UT_odl, x_UT = 0, y_UT = 0;
- public double BS0_x = x[0], BS0_y = y[0];
- public double zasieg;
- int nw = 0, s = 1;
- double d_2D, c = 3*Math.pow(10, 8), h_BS = 25, h_UT = 1;
- int d_2D_IN = 1, h_E = 1, h = 5, W = 20;
- double sigma_LOS, sigma_NLOS, sigma_P;
- public Double[][] PL_LOS= new Double[19][100];
- public Double[][] PL_NLOS= new Double[19][100];
- public Double[][] PL_NLOS2= new Double[19][100];
- double d_BP, d2_BP;
- public Double[] p = new Double[19];
- public Double[] d2D = new Double[19];
- public Double[][] d_3D = new Double[19][100];
- public Double[] radius = new Double[19];
- public double I_suma_NLOS = 0, I_suma_LOS = 0;
- double Gtx, Lftx, Grx, Lfrx, IM;
- double k=1.38*Math.pow(10, -23), T = 300.0, B = 20*Math.pow(10, 6), F = 10*Math.pow(10, 7/10);
- double N_ut = 10*Math.log10(k*T*B*F);
- double N_W = Math.pow(10, (N_ut/10))*Math.pow(10, 3);
- private JButton wyjscie;
- private JLabel tytul7, tytul8;
- public JTabbedPane tabbedPane;
- public String nazwaModelu = "";
- public BufferedImage tlo_wykresy;
- public double f_c = 3; //GHz
- Double[] SINR_NLOS = new Double[100];
- Double[] SINR_LOS = new Double[100];
- Double[] SINR_dB_NLOS = new Double[100];
- Double[] SINR_dB_LOS = new Double[100];
- Double[] SINR_dB_NLOS_zaniki = new Double[100];
- Double[] SINR_dB_LOS_zaniki = new Double[100];
- public int nr_tytulu = 0;
- public Wykresy(){
- setLayout(null);
- setVisible(true);
- File zdj_menu = new File("zdjecia/strona.png");
- try{ tlo_wykresy = ImageIO.read(zdj_menu); }
- catch(IOException e){ System.err.println("Blad odczytu obrazków"); }
- tytul7 = new JLabel( "Wykresy przedstawiające wartość SINR ", JLabel.CENTER);
- tytul7.setBounds(262, 10, 500, 50);
- tytul7.setFont(new Font("Sitka Text", Font.BOLD, 25));
- tytul8 = new JLabel( "zależną od odległości UT od BS ", JLabel.CENTER);
- tytul8.setBounds(262, 50, 500, 50);
- tytul8.setFont(new Font("Sitka Text", Font.BOLD, 25));
- wyjscie = new JButton("Wyjście");
- wyjscie.addActionListener(this);
- wyjscie.setBounds(750, 650, 180, 50);
- wyjscie.setFont(new Font("Sitka Text", Font.BOLD, 25));
- wyjscie.setBackground(Color.white);
- tabbedPane = new JTabbedPane();
- add(tabbedPane); add(tytul7); add(tytul8); add(wyjscie);
- }
- public XYDataset daneNLOS(){
- XYSeriesCollection zbior_danych = new XYSeriesCollection();
- XYSeries dane = new XYSeries("");
- double dZnorm = 0.05;
- double step = 0.01;
- for(int i=5; i < 100; i++){
- dane.add(dZnorm, SINR_dB_NLOS[i]);
- dZnorm = dZnorm + step;
- }
- zbior_danych.addSeries(dane);
- return zbior_danych;
- }
- public XYDataset daneLOS(){
- XYSeriesCollection zbior_danych = new XYSeriesCollection();
- XYSeries dane = new XYSeries("");
- double dZnorm = 0.05;
- double step = 0.01;
- for(int i=5; i < 100; i++){
- dane.add(dZnorm, SINR_dB_LOS[i]);
- dZnorm = dZnorm + step;
- }
- zbior_danych.addSeries(dane);
- return zbior_danych;
- }
- public XYDataset daneNLOS_zaniki(){
- XYSeriesCollection zbior_danych = new XYSeriesCollection();
- XYSeries dane = new XYSeries("");
- double dZnorm = 0.05;
- double step = 0.01;
- for(int i=5; i < 100; i++){
- dane.add(dZnorm, SINR_dB_NLOS_zaniki[i]);
- dZnorm = dZnorm + step;
- }
- zbior_danych.addSeries(dane);
- return zbior_danych;
- }
- public XYDataset daneLOS_zaniki(){
- XYSeriesCollection zbior_danych = new XYSeriesCollection();
- XYSeries dane = new XYSeries("");
- double dZnorm = 0.05;
- double step = 0.01;
- for(int i=5; i < 100; i++){
- dane.add(dZnorm, SINR_dB_LOS_zaniki[i]);
- dZnorm = dZnorm + step;
- }
- zbior_danych.addSeries(dane);
- return zbior_danych;
- }
- public double zaokraglij(double wejscie){
- double zaokraglenie;
- zaokraglenie = (double)Math.round(wejscie *1000) / 1000;
- return zaokraglenie;
- }
- public void Rysuj_wykres() {
- XYDataset dane_NLOS = daneNLOS(); //dodawanie wartości SINR
- JFreeChart wykres_1 = ChartFactory.createXYLineChart("Wykres zależności SINR od odległości od stacji bazowej (scenariusz NLOS)",
- "d/R [m]",
- "SINR [dB]",
- dane_NLOS,
- PlotOrientation.VERTICAL,
- true, true, false);
- ValueAxis domainAxis_1 = wykres_1.getXYPlot().getDomainAxis();
- domainAxis_1.setRange(0.0, 1.0);
- ChartPanel chPanel_1 = new ChartPanel(wykres_1);
- XYDataset dane_LOS = daneLOS(); //dodawanie wartości SINR
- JFreeChart wykres_2 = ChartFactory.createXYLineChart("Wykres zależności SINR od odległości od stacji bazowej (scenariusz LOS)",
- "d/R [m]",
- "SINR [dB]",
- dane_LOS,
- PlotOrientation.VERTICAL,
- true, true, false);
- ValueAxis domainAxis_2 = wykres_2.getXYPlot().getDomainAxis();
- domainAxis_2.setRange(0.0, 1.0);
- ChartPanel chPanel_2 = new ChartPanel(wykres_2);
- XYDataset dane_NLOS_zaniki = daneNLOS_zaniki(); //dodawanie wartości SINR
- JFreeChart wykres_3 = ChartFactory.createXYLineChart("Wykres zależności SINR od odległości od stacji bazowej z uwzględnieniem zaników powolnych (scenariusz NLOS)",
- "d/R [m]",
- "SINR [dB]",
- dane_NLOS_zaniki,
- PlotOrientation.VERTICAL,
- true, true, false);
- ValueAxis domainAxis_3 = wykres_3.getXYPlot().getDomainAxis();
- domainAxis_3.setRange(0.0, 1.0);
- ChartPanel chPanel_3 = new ChartPanel(wykres_3);
- XYDataset dane_LOS_zaniki = daneLOS_zaniki(); //dodawanie wartości SINR
- JFreeChart wykres_4 = ChartFactory.createXYLineChart("Wykres zależności SINR od odległości od stacji bazowej z uwzględnieniem zaników powolnych (scenariusz LOS)",
- "d/R [m]",
- "SINR [dB]",
- dane_LOS_zaniki,
- PlotOrientation.VERTICAL,
- true, true, false);
- ValueAxis domainAxis_4 = wykres_2.getXYPlot().getDomainAxis();
- domainAxis_4.setRange(0.0, 1.0);
- ChartPanel chPanel_4 = new ChartPanel(wykres_4);
- SwingUtilities.invokeLater(() -> {
- chPanel_1.setSize(520, 340);
- chPanel_1.setVisible(true);
- chPanel_2.setBounds(500, 200, 520, 340);
- chPanel_2.setVisible(true);
- chPanel_3.setBounds(500, 200, 520, 340);
- chPanel_3.setVisible(true);
- chPanel_4.setBounds(500, 200, 520, 340);
- chPanel_4.setVisible(true);
- });
- String[] kolumnyTab = {"Scenariusz", "UT dokładnie przy BS", "UT w połowie promienia komórki", "UT w wybranym miejscu", "UT na granicy"};
- if (s == 1 || s == 4 ) {
- Object[][] dane = {
- {"LOS", zaokraglij(SINR_dB_LOS[5]), zaokraglij(SINR_dB_LOS[49]), zaokraglij(SINR_dB_LOS[(int)Math.round(UT_odl)]), zaokraglij(SINR_dB_LOS[99])},
- {"NLOS", zaokraglij(SINR_dB_NLOS[5]), zaokraglij(SINR_dB_NLOS[49]), zaokraglij(SINR_dB_NLOS[(int)Math.round(UT_odl)]), zaokraglij(SINR_dB_NLOS[99])},
- {"LOS z zanikami", zaokraglij(SINR_dB_LOS_zaniki[5]), zaokraglij(SINR_dB_LOS_zaniki[49]), zaokraglij(SINR_dB_LOS_zaniki[(int)Math.round(UT_odl)]), zaokraglij(SINR_dB_LOS_zaniki[99])},
- {"NLOS z zanikami", zaokraglij(SINR_dB_NLOS_zaniki[5]), zaokraglij(SINR_dB_NLOS_zaniki[49]), zaokraglij(SINR_dB_NLOS_zaniki[(int)Math.round(UT_odl)]), zaokraglij(SINR_dB_NLOS_zaniki[99])}
- };
- JTable tabela = new JTable(dane, kolumnyTab);
- tabela.setFont(new Font("Arial", Font.PLAIN, 15));
- JScrollPane panelTab = new JScrollPane(tabela);
- tabela.setFillsViewportHeight(true);
- TableColumn kolumna = null;
- for (int i = 0; i < 5; i++) {
- kolumna = tabela.getColumnModel().getColumn(i);
- if(i == 0){kolumna.setPreferredWidth(130);}
- else{ kolumna.setPreferredWidth(180);}
- }
- /////// JTabbedPane :
- tabbedPane.setBounds(87, 90, 850, 550);
- tabbedPane.setBackground(Color.WHITE);
- tabbedPane.addTab("Wykres NLOS", chPanel_1);
- tabbedPane.setMnemonicAt(0, KeyEvent.VK_2);
- tabbedPane.addTab("Wykres LOS", chPanel_2);
- tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
- tabbedPane.addTab("Wykres NLOS z uwzględnieniem zaników", chPanel_3);
- tabbedPane.setMnemonicAt(2, KeyEvent.VK_2);
- tabbedPane.addTab("Wykres LOS z uwzględnieniem zaników", chPanel_4);
- tabbedPane.setMnemonicAt(3, KeyEvent.VK_2);
- tabbedPane.addTab("Podsumowanie wyników", panelTab);
- tabbedPane.setMnemonicAt(4, KeyEvent.VK_2);
- tabbedPane.setVisible(true);
- add(tabbedPane);
- } else if(s == 2 ||s == 3 || s == 5 || s == 6 || s == 7) {
- Object[][] dane = {
- {"NLOS", zaokraglij(SINR_dB_NLOS[5]), zaokraglij(SINR_dB_NLOS[49]), zaokraglij(SINR_dB_NLOS[73]), zaokraglij(SINR_dB_NLOS[99])},
- {"NLOS z zanikami", zaokraglij(SINR_dB_NLOS_zaniki[5]), zaokraglij(SINR_dB_NLOS_zaniki[49]), zaokraglij(SINR_dB_NLOS_zaniki[73]), zaokraglij(SINR_dB_NLOS_zaniki[99])}
- };
- JTable tabela = new JTable(dane, kolumnyTab);
- tabela.setFont(new Font("Arial", Font.PLAIN, 15));
- JScrollPane panelTab = new JScrollPane(tabela);
- tabela.setFillsViewportHeight(true);
- TableColumn kolumna = null;
- for (int i = 0; i < 5; i++) {
- kolumna = tabela.getColumnModel().getColumn(i);
- if(i == 0){kolumna.setPreferredWidth(130);}
- else{ kolumna.setPreferredWidth(180);}
- }
- /////// JTabbedPane :
- tabbedPane.setBounds(87, 90, 850, 550);
- tabbedPane.setBackground(Color.WHITE);
- tabbedPane.addTab("Wykres NLOS", chPanel_1);
- tabbedPane.setMnemonicAt(0, KeyEvent.VK_2);
- tabbedPane.addTab("Wykres NLOS z uwzględnieniem zaników", chPanel_3);
- tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
- tabbedPane.addTab("Podsumowanie wyników", panelTab);
- tabbedPane.setMnemonicAt(2, KeyEvent.VK_2);
- tabbedPane.setVisible(true);
- add(tabbedPane);
- }
- }
- public void actionPerformed(ActionEvent e){
- Object source = e.getSource();
- if(source == wyjscie){
- System.exit(0);
- }
- }
- public void paintComponent(Graphics graphic) {
- Graphics2D g2d = (Graphics2D) graphic;
- g2d.drawImage(tlo_wykresy, 0, 0, this);
- }
- public double PL_O2I(int n, double pl, double f){
- double L_szklo = 2 + 0.2*f; //dB
- double L_beton = 5 + 4*f; //dB
- double PL_przeniki = 0;
- double PL_tw, PL_in;
- PL_in = 0.5*d_2D_IN;
- if(n == 0){ //nisko stratny model
- PL_tw = 5 - Math.log10(0.3*Math.pow(10, (-L_szklo/10)) + 0.7*Math.pow(10, (-L_beton/10)));
- PL_przeniki = pl + PL_tw + PL_in;
- }
- else if(n == 1){ ////wysoko stratny model
- PL_tw = 5 - Math.log10(0.7*Math.pow(10, (-L_szklo/10)) + 0.3*Math.pow(10, (-L_beton/10)));
- PL_przeniki = pl + PL_tw + PL_in;
- }
- return PL_przeniki;
- }
- public double licz_sygnal_odebrany(double P_T, double G_TX, double L_FTX, double G_RX, double L_FRX, double PathL){
- double S = P_T + G_TX - L_FTX + G_RX - L_FRX - PathL ;// [dBm]
- return S;
- }
- public void pathLossDlaModelu(double ut_x, double ut_y, double f, int s){
- if(s == 1){ // InH
- d_2D = 15;
- sigma_LOS = 3; //dB
- sigma_NLOS = 8.03; //dB
- Gtx = 3; Lftx = 1; Grx = 3; Lfrx = 0; IM = 4;
- }
- else if(s == 2){ //UMa
- d_2D = 500;
- sigma_LOS = 4; //dB
- sigma_NLOS = 6; //dB
- Gtx = 10; Lftx = 2; Grx = 6; Lfrx = 0; IM = 4;
- }
- else if(s == 3){ //UMa z O2I
- d_2D = 500;
- sigma_LOS = 4; //dB
- sigma_NLOS = 6; //dB
- if(nw == 0){sigma_P = 4.4;}
- else if(nw == 1){sigma_P = 6.5;}
- Gtx = 10; Lftx = 2; Grx = 6; Lfrx = 0; IM = 4;
- }
- else if(s == 4 ){//UMi
- d_2D = 130;
- sigma_LOS = 4; //dB
- sigma_NLOS = 7.82; //dB
- Gtx = 8; Lftx = 2; Grx = 3; Lfrx = 1; IM = 4;
- }
- else if(s == 5){ //UMi z O2I
- d_2D = 130;
- sigma_LOS = 4; //dB
- sigma_NLOS = 7.82; //dB
- if(nw == 0){sigma_P = 4.4;}
- else if(nw == 1){sigma_P = 6.5;}
- Gtx = 8; Lftx = 2; Grx = 3; Lfrx = 1; IM = 4;
- }
- else if(s == 6){ //RMa
- d_2D = 5000;
- if(d_2D >= 10 && d_2D <= d2_BP){sigma_LOS = 4;} //dB}
- else if(d_2D >= d2_BP && d_2D <= 21000){sigma_LOS = 6;} //dB}
- sigma_NLOS = 8;
- Gtx = 20; Lftx = 2; Grx = 4; Lfrx = 0; IM = 4;
- }
- else if(s == 7){ //RMa z O2I
- d_2D = 5000;
- if(d_2D >= 10 && d_2D <= d2_BP){sigma_LOS = 4;} //dB}
- else if(d_2D >= d2_BP && d_2D <= 21000){sigma_LOS = 6;} //dB}
- sigma_NLOS = 8;
- if(nw == 0){sigma_P = 4.4;}
- else if(nw == 1){sigma_P = 6.5;}
- Gtx = 7; Lftx = 4; Grx = 3; Lfrx = 0; IM = 4;
- }
- d_3D[0][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(Double.MIN_VALUE, 2) );
- for(int k = 1; k < 19; k++){
- xp[0] = 470.0;
- yp[0] = 400.0;
- radius[k] = Math.sqrt( Math.pow((x[k] - xp[0]), 2) + Math.pow((y[k] - yp[0]), 2));
- d2D[k] = (radius[k]*d_2D)/85;
- d_3D[k][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[k], 2) );
- }
- for(int j=1; j < 100; j++){
- if((ut_x > BS0_x) && (ut_y < BS0_y)){ // I ćwiartka
- xp[j] = xp[j-1] + 0.85;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo wartość y rośnie w dół
- }
- else if((ut_x < BS0_x) && (ut_y < BS0_y)){ // II ćwiartka
- xp[j] = xp[j-1] - 0.85;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo wartość y rośnie w dół
- }
- else if((ut_x < BS0_x) && (ut_y > BS0_y)){ // III ćwiartka
- xp[j] = xp[j-1] - 0.85;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo wartość y rośnie w dół
- }
- else if((ut_x > BS0_x) && (ut_y > BS0_y)){ // IV ćwiartka
- xp[j] = xp[j-1] + 0.85;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo wartość y rośnie w dół
- }
- for(int i = 0; i < 19; i++){
- radius[i] = Math.sqrt( Math.pow((x[i] - xp[j]), 2) + Math.pow((y[i] - yp[j]), 2));
- d2D[i] = (radius[i] * d_2D)/85;
- d_3D[i][j] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[i], 2) );
- }
- }
- if(s == 1){ //model Indoor Hotspot - InH
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- PL_LOS[i][j] = 32.4 + 17.3*Math.log10(d_3D[i][j]) + 20*Math.log10(f);
- PL_NLOS2[i][j] = 38.3*Math.log10(d_3D[i][j]) + 17.3 + 24.9*Math.log10(f);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- }
- }
- else if(s == 2 || s == 3){ //model Urban Macro- UMa
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- if( d_2D >= 10 && d_2D <= d_BP){
- PL_LOS[i][j] = 28 + 22*Math.log10(d_3D[i][j]) + 20*Math.log10(f);
- PL_NLOS2[i][j] = 13.54 + 39.08*Math.log10(d_3D[i][j]) + 20*Math.log10(f) -0.6*(h_UT-1.5);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- else if(d_2D >= d_BP && d_2D <= 5000){
- PL_LOS[i][j] = 28 + 40*Math.log10(d_3D[i][j]) + 20*Math.log10(f) -9*Math.log10(Math.pow(d_BP,2) + Math.pow((h_BS + h_UT),2));
- PL_NLOS2[i][j] = 13.54 + 39.08*Math.log10(d_3D[i][j]) + 20*Math.log10(f) -0.6*(h_UT-1.5);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- }
- }
- if(s == 3) {
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j], f);
- }
- }
- }
- }
- else if(s == 4 || s == 5){ //model Urban Micro- UMi
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- if( d_2D >= 10 && d_2D <= d_BP){
- PL_LOS[i][j] = 32.4 + 21*Math.log10(d_3D[i][j]) + 20*Math.log10(f);
- 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);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- else if(d_2D >= d_BP && d_2D <= 5000){
- 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));
- 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);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- }
- }
- if(s == 5) {
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j], f);
- }
- }
- }
- }
- else if(s == 6 || s == 7) { //model Rural Macro- RMa
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- if (d_2D >= 10 && d_2D <= d2_BP) {
- 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];
- 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);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- sigma_LOS = 4; //dB
- } else if (d_2D >= d2_BP && d_2D <= 21000) {
- 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);
- 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);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- sigma_LOS = 6; //dB
- }
- }
- }
- sigma_NLOS = 8; //dB
- if (s == 7) {
- for(int j = 0; j < 100; j++){
- for(int i=0; i < 19; i++){
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j], f);
- }
- }
- }
- }
- }
- public void licz_SINR() {
- Double[] S_NLOS = new Double[19];
- Double[] S_LOS = new Double[19];
- Double[] I_W_NLOS = new Double[19];//inerferencje w watach
- Double[] I_W_LOS = new Double[19]; //inerferencje w watach
- Double[] S_0_NLOS = new Double[100];
- Double[] S_0_LOS = new Double[100];
- double nGaussNLOS = 0, nGaussLOS = 0, nGaussO2I = 0;
- for (int q = 0; q < 2; q++) {
- if(q == 0){ //BEZ ZANIKÓW
- for (int t = 0; t < 100; t++) {
- for (int i = 0; i < 19; i++) {
- if (i == 0) {
- S_NLOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, PL_NLOS[i][t]);
- S_LOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, PL_LOS[i][t]); //LOS tylko między UT i BS0
- } else {
- S_NLOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, PL_NLOS[i][t]);
- S_LOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, PL_NLOS[i][t]);
- }
- }
- S_0_NLOS[t] = Math.pow(10, (S_NLOS[0] / 10));
- I_W_NLOS[0] = 0.0;
- I_suma_NLOS = 0.0;
- S_0_LOS[t] = Math.pow(10, (S_LOS[0] / 10));
- I_W_LOS[0] = 0.0;
- I_suma_LOS = 0.0;
- for (int j = 1; j < 19; j++) {
- I_W_NLOS[j] = Math.pow(10, (S_NLOS[j] / 10));
- I_suma_NLOS = I_suma_NLOS + I_W_NLOS[j];
- I_W_LOS[j] = Math.pow(10, (S_LOS[j] / 10));
- I_suma_LOS = I_suma_LOS + I_W_LOS[j];
- }
- SINR_NLOS[t] = S_0_NLOS[t] / (I_suma_NLOS + N_W);
- SINR_dB_NLOS[t] = 10 * Math.log10(SINR_NLOS[t]); //na dB
- SINR_LOS[t] = S_0_LOS[t] / (I_suma_LOS + N_W);
- SINR_dB_LOS[t] = 10 * Math.log10(SINR_LOS[t]); //na dB
- }
- }
- else if (q == 1) { //Z ZANIKAMI
- Random r1 = new Random();
- Random r2 = new Random();
- Random r3 = new Random();
- for (int m = 0; m < 9; m++) {
- nGaussLOS = nGaussLOS + Math.abs(r1.nextGaussian() * sigma_LOS) / 10;
- nGaussNLOS = nGaussNLOS + Math.abs(r2.nextGaussian() * sigma_NLOS) / 10;
- }
- if(s == 3 || s == 5 || s == 7){
- for (int m = 0; m < 9; m++) {
- nGaussO2I = nGaussO2I + Math.abs(r3.nextGaussian() * sigma_P) / 10;
- }
- nGaussLOS = nGaussLOS + nGaussO2I;
- nGaussNLOS = nGaussNLOS + nGaussO2I;
- }
- for (int t = 0; t < 100; t++) {
- for (int i = 0; i < 19; i++) {
- if (i == 0) {
- S_NLOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, (PL_NLOS[i][t] + nGaussNLOS));
- S_LOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, (PL_LOS[i][t] + nGaussLOS)); //LOS tylko między UT i BS0
- } else {
- S_NLOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, PL_NLOS[i][t]);
- S_LOS[i] = licz_sygnal_odebrany(p[i], Gtx, Lftx, Grx, Lfrx, PL_NLOS[i][t]);
- }
- }
- S_0_NLOS[t] = Math.pow(10, (S_NLOS[0] / 10));
- I_W_NLOS[0] = 0.0;
- I_suma_NLOS = 0.0;
- S_0_LOS[t] = Math.pow(10, (S_LOS[0] / 10));
- I_W_LOS[0] = 0.0;
- I_suma_LOS = 0.0;
- for (int j = 1; j < 19; j++) {
- I_W_NLOS[j] = Math.pow(10, (S_NLOS[j] / 10));
- I_suma_NLOS = I_suma_NLOS + I_W_NLOS[j];
- I_W_LOS[j] = Math.pow(10, (S_LOS[j] / 10));
- I_suma_LOS = I_suma_LOS + I_W_LOS[j];
- }
- SINR_NLOS[t] = S_0_NLOS[t] / (I_suma_NLOS + N_W);
- SINR_dB_NLOS_zaniki[t] = 10 * Math.log10(SINR_NLOS[t]); //na dB
- SINR_LOS[t] = S_0_LOS[t] / (I_suma_LOS + N_W);
- SINR_dB_LOS_zaniki[t] = 10 * Math.log10(SINR_LOS[t]); //na dB
- }
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment