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.DefaultTableModel;
- import javax.swing.table.TableCellRenderer;
- 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.geom.Ellipse2D;
- 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.ChartUtils;
- import org.jfree.chart.JFreeChart;
- import org.jfree.chart.axis.NumberTickUnit;
- import org.jfree.chart.axis.ValueAxis;
- import org.jfree.chart.plot.Plot;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.chart.plot.XYPlot;
- import org.jfree.chart.renderer.category.ScatterRenderer;
- import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
- import org.jfree.data.category.DefaultCategoryDataset;
- 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[850];
- public Double[] yp = new Double[850];
- 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;
- public double BS0_x = x[0], BS0_y = y[0];
- public double zasieg;
- int nw = 0, s = 1;
- double d_2D; //m
- double c = 3*Math.pow(10, 8);
- int d_2D_IN = 1;
- int h_BS = 25, h_UT = 1; ///zrobić jako Slidery
- int h_E = 1; // 1m
- int h = 5; //w metrach, do RMa
- int W = 20; //w metrach, do RMa
- double sigma_LOS, sigma_NLOS;
- public Double[][] PL_LOS= new Double[19][850];
- public Double[][] PL_NLOS= new Double[19][850];
- public Double[][] PL_NLOS2= new Double[19][850];
- double d_BP, d2_BP;
- public Double[] p = new Double[19];
- public Double[] d2D = new Double[19];
- public Double[][] d_3D = new Double[19][850];
- public Double[] radius = new Double[19];
- public double I_suma_NLOS = 0, I_suma_LOS = 0;
- double k = 1.38*Math.pow(10, -23), T = 300.0, B = 20*Math.pow(10, 6), F = Math.pow(10, (5/10));
- //double N = 10*Math.log10(k*T*B*F);
- //double N_W = Math.pow(10, (N/10 - 3));
- double N_W = k*T*B*F ;
- //
- 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[850];
- Double[] SINR_LOS = new Double[850];
- Double[] SINR_dB_NLOS = new Double[850];
- Double[] SINR_dB_LOS = new Double[850];
- Double[] SINR_dB_NLOS_zaniki = new Double[850];
- Double[] SINR_dB_LOS_zaniki = new Double[850];
- 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.0;
- double step = 0.00117647;
- for(int i=0; i < 850; 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.0;
- double step = 0.00117647;
- for(int i=0; i < 850; 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.0;
- double step = 0.00117647;
- for(int i=0; i < 850; 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.0;
- double step = 0.00117647;
- for(int i=0; i < 850; 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 = Math.round(wejscie *1000.0) / 1000.0;
- return zaokraglenie;
- }
- public void Rysuj_wykres(){
- XYDataset dane_NLOS = daneNLOS(); //dodawanie wartości SINR
- JFreeChart wykres_1 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej (scenariusz NLOS)",
- "d/R [m]",
- "SINR [dB]",
- dane_NLOS,
- PlotOrientation.VERTICAL,
- true, true, false);
- ChartPanel chPanel_1 = new ChartPanel(wykres_1);
- XYDataset dane_LOS = daneLOS(); //dodawanie wartości SINR
- JFreeChart wykres_2 = ChartFactory.createXYLineChart("Funkcja wartości SINR od odległości od stacji bazowej (scenariusz LOS)",
- "d/R [m]",
- "SINR [dB]",
- dane_LOS,
- PlotOrientation.VERTICAL,
- true, true, false);
- ChartPanel chPanel_2 = new ChartPanel(wykres_2);
- XYDataset dane_NLOS_zaniki = daneNLOS_zaniki(); //dodawanie wartości SINR
- JFreeChart wykres_3 = ChartFactory.createXYLineChart("Funkcja wartoś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);
- ChartPanel chPanel_3 = new ChartPanel(wykres_3);
- XYDataset dane_LOS_zaniki = daneLOS_zaniki(); //dodawanie wartości SINR
- JFreeChart wykres_4 = ChartFactory.createXYLineChart("Funkcja wartoś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);
- 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 miejscu wybranym przez użytkownika programu", "UT w połowie promienia komórki", "UT przy granicy komórki"};
- Object[][] dane = {
- {"LOS", zaokraglij(SINR_dB_LOS[0]), zaokraglij(SINR_dB_LOS[(int)UT_odl]), zaokraglij(SINR_dB_LOS[425]), zaokraglij(SINR_dB_LOS[849])},
- {"NLOS", zaokraglij(SINR_dB_NLOS[0]), zaokraglij(SINR_dB_NLOS[(int)UT_odl]), zaokraglij(SINR_dB_NLOS[425]), zaokraglij(SINR_dB_NLOS[849])},
- {"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])},
- {"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])}
- };
- JTable tabela = new JTable(dane, kolumnyTab);
- tabela.setFont(new Font("Sitka Text", 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);
- //tytul7 = new JLabel( "Wykresy przedstawiające wartość SINR dla modelu " + nazwaModelu, JLabel.CENTER);
- //add(chPanel_1); add(chPanel_2); add(tytul7);
- 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 L_szklo = 2 + 0.2*f_c; //dB
- double L_beton = 5 + 4*f_c; //dB
- double PL_przeniki = 0;
- double PL_tw, PL_in, sigma_P;
- double N = 5; // !!!!!!!!!!!!!!!!!!! ZMIENIĆ
- PL_in = 0.5*d_2D_IN;
- Random r = new Random();
- 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)));
- sigma_P = 4.4; //dB
- PL_przeniki = pl + PL_tw + PL_in; // + r.nextGaussian()*sigma_P;
- }
- 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)));
- sigma_P = 4.4; //dB
- PL_przeniki = pl + PL_tw + PL_in; // + r.nextGaussian()*sigma_P;
- }
- 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){
- //SINR = P_T + G_TX - L_FTX + (PL +I) + G_RX - L_FRX - N - F - IM
- int IM = 2, F = 5 ; //margines interferencji, noise figure
- double S;
- S = P_T + G_TX - L_FTX - PathL + G_RX - L_FRX - F - IM; // [dBm]
- return S;
- }
- public void pathLossDlaModelu(double ut_x, double ut_y, double f, int s){
- if(s == 1){
- d_2D = 10;
- sigma_LOS = 3; //dB
- sigma_NLOS = 8.03; //dB
- }
- else if(s == 2){
- d_2D = 1000;
- sigma_LOS = 4; //dB
- sigma_NLOS = 6; //dB
- }
- else if(s == 3){
- d_2D = 1000;
- sigma_LOS = 4; //dB
- sigma_NLOS = 6; //dB
- }
- else if(s == 4 ){
- d_2D = 650;
- sigma_LOS = 4; //dB
- sigma_NLOS = 7.82; //dB
- }
- else if(s == 5){
- d_2D = 650;
- sigma_LOS = 4; //dB
- sigma_NLOS = 7.82; //dB
- }
- else if(s == 6){
- 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;
- }
- else if(s == 7){
- 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;
- }
- 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) );
- System.out.println("d_3D["+k+"] = " + d_3D[k][0]);
- }
- d_3D[0][0] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(Double.MIN_VALUE, 2) );
- for(int j=1; j < 850; j++){
- if((ut_x > BS0_x) && (ut_y < BS0_y)){ // I ćwiartka
- xp[j] = xp[j-1] + 0.1;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
- }
- else if((ut_x < BS0_x) && (ut_y < BS0_y)){ // II ćwiartka
- xp[j] = xp[j-1] - 0.1;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
- }
- else if((ut_x < BS0_x) && (ut_y > BS0_y)){ // III ćwiartka
- xp[j] = xp[j-1] - 0.1;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo y rośnie w dół
- }
- else if((ut_x > BS0_x) && (ut_y > BS0_y)){ // IV ćwiartka
- xp[j] = xp[j-1] + 0.1;
- yp[j] = ((-1)*(ut_y - y[0])/(ut_x - x[0])) * (xp[j] - x[0]) + y[0]; // (-1) bo 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 < 850; 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 - 20*i); //+ 20*(18-i)); //- path loss for LOS [MHz] ??????????????????????????
- PL_NLOS2[i][j] = 38.3*Math.log10(d_3D[i][j]) + 17.3 + 24.9*Math.log10(f - 20*i); //+ 20*(18-i)); // 24.9*Math.log10(f*1000 + 20*i);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]); //- path loss for NLOS
- }
- }
- }
- else if(s == 2 || s == 3){ //model Urban Macro- UMa
- for(int j = 0; j < 850; 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*1000+ 20*i);
- 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);
- 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*1000+ 20*i) -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*1000+ 20*i) -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 < 850; j++){
- for(int i=0; i < 19; i++){
- PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
- }
- }
- }
- }
- else if(s == 4 || s == 5){ //model Urban Micro- UMi
- for(int j = 0; j < 850; 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*1000 + 20*i);
- 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);
- 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*1000 + 20*i) -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*1000 + 20*i) -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 < 850; j++){
- for(int i=0; i < 19; i++){
- PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
- }
- }
- }
- }
- else if(s == 6 || s == 7) { //model Rural Macro- RMa
- for(int j = 0; j < 850; 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*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];
- PL_NLOS2[i][j] = 161.04 - 7.1 * Math.log10(W) + 7.5 * Math.log10(h) - (24.37 - 3.7 * Math.pow((h / h_BS), 2)) * Math.log10(h_BS) + (43.42 - 3.1 * Math.log10(h_BS)) * (Math.log10(d_3D[i][j]) - 3) + 20 * Math.log10(f*1000 + 20*i) - (3.2 *Math.pow(Math.log10(11.75 * h_UT), 2) - 4.97);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- } else if (d_2D >= d2_BP && d_2D <= 21000) {
- 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);
- PL_NLOS2[i][j] = 161.04 - 7.1 * Math.log10(W) + 7.5 * Math.log10(h) - (24.37 - 3.7 * Math.pow((h / h_BS), 2)) * Math.log10(h_BS) + (43.42 - 3.1 * Math.log10(h_BS)) * (Math.log10(d_3D[i][j]) - 3) + 20 * Math.log10(f*1000 + 20*i) - (3.2 *Math.pow(Math.log10(11.75 * h_UT), 2) - 4.97);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- }
- }
- if (s == 7) {
- for(int j = 0; j < 850; j++){
- for(int i=0; i < 19; i++){
- PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
- }
- }
- }
- }
- }
- 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[850];
- Double[] S_0_LOS = new Double[850];
- for (int q = 0; q < 2; q++) {
- if(q==1){
- Random r = new Random();
- for(int j = 0; j < 850; j++){
- for(int i=0; i < 19; i++){
- PL_LOS[i][j] = PL_LOS[i][j] + r.nextGaussian()*sigma_LOS;
- PL_NLOS[i][j] = PL_NLOS[i][j] + r.nextGaussian()*sigma_NLOS;
- }
- }
- }
- for (int t = 0; t < 850; t++) {
- for (int i = 0; i < 19; i++) {
- if (i == 0) {
- if (t == 0) {
- S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, 0);
- S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, 0); //LOS tylko między UT i BS0
- }
- S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
- S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_LOS[i][t]); //LOS tylko między UT i BS0
- } else {
- S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
- S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, PL_NLOS[i][t]);
- }
- /*if(s == 3 || s == 5 || s == 7){
- S_NLOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, (PL_NLOS[i][t] + sigma_P);
- S_LOS[i] = licz_sygnal_odebrany(p[i], 17, 2, 0, 0, (PL_NLOS[i][t]) + sigma_P);
- }*/
- }
- S_0_NLOS[t] = Math.pow(10, (S_NLOS[0] / 10 - 3)); // z dBm na waty
- I_W_NLOS[0] = 0.0;
- I_suma_NLOS = 0.0;
- S_0_LOS[t] = Math.pow(10, (S_LOS[0] / 10 - 3)); // z dBm na waty
- 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 - 3); // z dBm na waty
- I_suma_NLOS = I_suma_NLOS + I_W_NLOS[j];
- I_W_LOS[j] = Math.pow(10, (S_LOS[j] / 10 - 3)); // z dBm na waty
- I_suma_LOS = I_suma_LOS + I_W_LOS[j];
- }
- ///////////////////
- if(t == 1){
- System.out.println("I_suma_NLOS :" + I_suma_NLOS );
- double bleeech = 10*Math.log10(I_suma_LOS);
- System.out.println("bleeech :" + bleeech );
- }
- ///////////////////
- if(q == 0){
- 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){
- 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
- }
- }
- System.out.println("SINR_dB_NLOS dla t = 0 " + SINR_dB_NLOS[0]);
- System.out.println("SINR_dB_LOS dla t = 0 " + SINR_dB_LOS[0]);
- System.out.println("SINR_dB_NLOS dla t = 850 " + SINR_dB_NLOS[849]);
- System.out.println("SINR_dB_LOS dla t = 850 " + SINR_dB_LOS[849]);
- System.out.println("S_NLOS[0] :" + S_NLOS[0] );
- }
- }
- }
Add Comment
Please, Sign In to add comment