Advertisement
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 java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.awt.geom.*;
- import java.lang.Math;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- public class Licz extends JPanel implements ActionListener, MouseListener {
- private JButton wykresy;
- private JButton wyjscie;
- private JLabel tytul6, l_BS0, l_BS1, l_BS2, l_BS3, l_BS4, l_BS5, l_BS6, l_UT;
- //public double xp = 470, yp = 400; //xp = 470, yp = 315;
- public Double[] xp = new Double[850];
- public Double[] yp = new Double[850];
- //public double xp = 0, yp = 0; //xp = 470, yp = 315;
- /*public Integer[] x = {0, -170, -170, 0, 170, 170, 0};
- public Integer[] y = {0, -80, 77, 170, 77, -80, -170};*/
- public Integer[] x = {470, 300, 300, 470, 640, 640, 470};
- public Integer[] y = {400, 480, 313, 230, 313, 480, 570};
- public BufferedImage tlo_dane;
- public double UT_x, UT_y;
- public double BS0_x = x[0], BS0_y = y[0];
- String str_UT = "";
- int nw = 0, s = 1;
- double f_c = 2.6; // [GHz] *Math.pow(10, 9);
- //double f_c = 10;
- 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[7][850];
- public Double[][] PL_NLOS= new Double[7][850];
- public Double[][] PL_NLOS2= new Double[7][850];
- double d_BP, d2_BP;
- public Double[] p = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
- public Double[] d2D = {10.0, 10.0, 10.0, 10.0, 10.0, 10.0, 10.0};
- public Double[][] d_3D = new Double[7][850];
- public Double[] radius = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
- public Double[] SNR = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
- public Double[] SNR_WAT = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
- public double I_suma_NLOS = 0, I_suma_LOS = 0;
- double N = -174;
- double N_W = Math.pow(10, (N/10 - 3));
- Wykresy rysuj_wykresy;
- public Licz(Wykresy rysuj_wykresy){
- setLayout(null);
- this.rysuj_wykresy = rysuj_wykresy;
- File zdj_menu = new File("zdjecia/strona_logo.png");
- try{ tlo_dane = ImageIO.read(zdj_menu); }
- catch(IOException e){ System.err.println("Blad odczytu obrazków"); }
- wyjscie = new JButton("Wyjście");
- wyjscie.addActionListener(this);
- wyjscie.setBounds(100, 620, 200, 60);
- wyjscie.setFont(new Font("Sitka Text", Font.BOLD, 25));
- wyjscie.setBackground(Color.white);
- wykresy = new JButton("Wykresy");
- wykresy.addActionListener(this);
- wykresy.setBounds(724, 620, 200, 60);
- wykresy.setFont(new Font("Sitka Text", Font.BOLD, 25));
- wykresy.setBackground(Color.white);
- System.out.println("Wybrany model: " + s);
- System.out.println("Wybrany scenariusz O2I: " + nw);
- tytul6 = new JLabel( "Wskaż położenie terminala użytkownika w komórce zerowej", JLabel.CENTER);
- tytul6.setSize(1000, 100);
- tytul6.setLocation(5, 50);
- tytul6.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS0 = new JLabel( "BS0", JLabel.CENTER);
- l_BS0.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS1 = new JLabel( "BS1", JLabel.CENTER);
- l_BS1.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS2 = new JLabel( "BS2", JLabel.CENTER);
- l_BS2.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS3 = new JLabel( "BS3", JLabel.CENTER);
- l_BS3.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS4 = new JLabel( "BS4", JLabel.CENTER);
- l_BS4.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS5 = new JLabel( "BS5", JLabel.CENTER);
- l_BS5.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_BS6 = new JLabel( "BS6", JLabel.CENTER);
- l_BS6.setFont(new Font("Sitka Text", Font.BOLD, 23));
- l_UT = new JLabel( "UT", JLabel.CENTER);
- l_UT.setFont(new Font("Sitka Text", Font.BOLD,23));
- l_UT.setForeground(Color.RED);
- add(tytul6); add(l_BS0); add(l_BS1); add(l_BS2); add(l_BS3); add(l_BS4); add(l_BS5); add(l_BS6); add(l_UT); add(wyjscie); add(wykresy);
- addMouseListener(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;
- 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; // + N;
- }
- 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; // + N;
- }
- return PL_przeniki;
- }
- public void actionPerformed(ActionEvent e){
- Object source = e.getSource();
- if(source == wykresy){
- CardLayout CL =(CardLayout)(Main.noweOkno.karty.getLayout());
- CL.show(Main.noweOkno.karty, "rysuj_wykresy");
- pathLossDlaModelu(UT_x, UT_y);
- licz_SINR();
- System.out.println("SINR dla NLOS : " + rysuj_wykresy.SINR_dB_NLOS[0]);
- System.out.println("SINR dla LOS : " + rysuj_wykresy.SINR_dB_LOS[0]);
- }
- else if(source == wyjscie){
- System.exit(0);
- }
- }
- public void mouseClicked(MouseEvent e) {}
- public void mousePressed(MouseEvent e) {
- UT_x = e.getX();
- UT_y = e.getY();
- str_UT = "UT";
- System.out.println("Nacisnięty punkt: x = " + UT_x + " y = " + UT_y);
- repaint();
- }
- public void mouseReleased(MouseEvent e) {}
- public void mouseEntered(MouseEvent e) {}
- public void mouseExited(MouseEvent e) {}
- public void paintComponent(Graphics graphic) {
- //int R = Math.round(Math.sqrt(3)*125);
- Graphics2D g2d = (Graphics2D) graphic;
- g2d.drawImage(tlo_dane, 0, 0, this);
- Ellipse2D circle0 = new Ellipse2D.Double(370, 300, 200, 200);
- Rectangle2D BS0 = new Rectangle2D.Double((int)circle0.getCenterX(), (int)circle0.getCenterY(), 5, 5);
- l_BS0.setBounds((int)BS0.getX()-15, (int)BS0.getY()-15, 100, 50);
- Ellipse2D circle1 = new Ellipse2D.Double(200, 380, 200, 200);
- Rectangle2D BS1 = new Rectangle2D.Double((int)circle1.getCenterX(), (int)circle1.getCenterY(), 5, 5);
- l_BS1.setBounds((int)BS1.getX()-15, (int)BS1.getY()-15, 100, 50);
- Ellipse2D circle2 = new Ellipse2D.Double(200, 213, 200, 200);
- Rectangle2D BS2 = new Rectangle2D.Double((int)circle2.getCenterX(), (int)circle2.getCenterY(), 5, 5);
- l_BS2.setBounds((int)BS2.getX()-15, (int)BS2.getY()-15, 100, 50);
- Ellipse2D circle3 = new Ellipse2D.Double(370, 130, 200, 200);
- Rectangle2D BS3 = new Rectangle2D.Double((int)circle3.getCenterX(), (int)circle3.getCenterY(), 5, 5);
- l_BS3.setBounds((int)BS3.getX()-15, (int)BS3.getY()-15, 100, 50);
- Ellipse2D circle4 = new Ellipse2D.Double(540, 213, 200, 200);
- Rectangle2D BS4 = new Rectangle2D.Double((int)circle4.getCenterX(), (int)circle4.getCenterY(), 5, 5);
- l_BS4.setBounds((int)BS4.getX()-15, (int)BS4.getY()-15, 100, 50);
- Ellipse2D circle5 = new Ellipse2D.Double(540, 380, 200, 200);
- Rectangle2D BS5 = new Rectangle2D.Double((int)circle5.getCenterX(), (int)circle5.getCenterY(), 5, 5);
- l_BS5.setBounds((int)BS5.getX()-15, (int)BS5.getY()-15, 100, 50);
- Ellipse2D circle6 = new Ellipse2D.Double(370, 470,200, 200);
- Rectangle2D BS6 = new Rectangle2D.Double((int)circle6.getCenterX(), (int)circle6.getCenterY(), 5, 5);
- l_BS6.setBounds((int)BS6.getX()-15, (int)BS6.getY()-15, 100, 50);
- Ellipse2D UT = new Ellipse2D.Double(UT_x, UT_y, 5, 5);
- l_UT.setBounds((int)UT.getX()-15, (int)UT.getY()-15, 80, 50);
- g2d.draw(UT); g2d.draw(BS0); g2d.draw(BS1); g2d.draw(BS2); g2d.draw(BS3); g2d.draw(BS4); g2d.draw(BS5); g2d.draw(BS6);
- g2d.draw(circle0); g2d.draw(circle1); g2d.draw(circle2); g2d.draw(circle3); g2d.draw(circle4); g2d.draw(circle5); g2d.draw(circle6);
- }
- 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;
- double S, t_e = 1, t_o = 290, N, F;
- //double k = 1.38*Math.pow(10, (-38)); //N = 10*Math.log10(k * t_o * pasmo); //N = -174; // [dBm]
- F = 6 ;
- 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){
- if(s == 1){d_2D = 140;}
- else if(s == 2 || s == 3){d_2D = 1000;}
- else if(s == 4 || s == 5){d_2D = 650;}
- else if(s == 6 || s == 7){d_2D = 5000;}
- d_3D[0][0] = 0.0;
- for(int k = 1; k < 7; k++){
- xp[0] = 470.0;
- yp[0] = 400.0;
- radius[k] = Math.sqrt( Math.pow((x[0] - xp[0]), 2) + Math.pow((y[0] - 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 < 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 < 7; 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; // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
- d_3D[i][j] = Math.sqrt( Math.pow((h_BS-h_UT), 2) + Math.pow(d2D[i], 2) );
- }
- }
- //MODELE W ZALEŻNOŚCI OD WYBORU UŻYTKOWNIKA PROGRAMU
- //d_BP = 4*((h_BS - 1)*(h_UT - 1)*f_c*Math.pow(10, 9))/c;
- //System.out.println("d_BP : " + d_BP);
- //d2_BP = 2*(Math.PI*h_BS*h_UT*f_c*Math.pow(10, 9))/c;
- //System.out.println("d2_BP : " + d2_BP);
- if(s == 1){ //model Indoor Hotspot - InH
- for(int j = 0; j < 850; j++){
- for(int i=0; i < 7; i++){
- PL_LOS[i][j] = 32.4 + 17.3*Math.log10(d_3D[i][j]) + 20*Math.log10(f_c + 0.1*i); //- path loss for LOS
- PL_NLOS2[i][j] = 38.3*Math.log10(d_3D[i][j]) + 17.3 + 24.9*Math.log10(f_c+ 0.1*i);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]); //- path loss for NLOS
- }
- }
- sigma_LOS = 3; //dB
- sigma_NLOS = 8.03; //dB
- }
- else if(s == 2 || s == 3){ //model Urban Macro- UMa
- for(int j = 0; j < 850; j++){
- for(int i=0; i < 7; 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_c);
- PL_NLOS2[i][j] = 13.54 + 39.08*Math.log10(d_3D[i][j]) + 20*Math.log10(f_c) -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_c) -9*(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_c) -6*(h_UT-1.5);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- }
- }
- sigma_LOS = 4; //dB
- sigma_NLOS = 6; //dB
- if(s == 3) {
- for(int j = 0; j < 850; j++){
- for(int i=0; i < 7; 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 < 7; 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_c);
- PL_NLOS2[i][j] = 22.4 + 35.3*Math.log10(d_3D[i][j]) + 21.3*Math.log10(f_c) -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_c) -9.5*(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_c) -0.3*(h_UT-1.5);
- PL_NLOS[i][j] = Math.max(PL_LOS[i][j], PL_NLOS2[i][j]);
- }
- }
- }
- sigma_LOS = 4; //dB
- sigma_NLOS = 7.82; //dB
- if(s == 5) {
- for(int j = 0; j < 850; j++){
- for(int i=0; i < 7; 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 < 7; i++){
- if (d_2D >= 10 && d_2D <= d2_BP) {
- PL_LOS[i][j] = 2 * Math.log10((40 * Math.PI * d_3D[i][j] * f_c) / 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_c) - (3.2 * (Math.log10(11.75 * h_UT) - 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] = 2 * Math.log10((40 * Math.PI * d2_BP * f_c) / 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_c) - (3.2 * (Math.log10(11.75 * h_UT) - 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 < 850; j++){
- for(int i=0; i < 7; i++){
- PL_LOS[i][j] = PL_O2I(nw, PL_LOS[i][j]);
- PL_NLOS[i][j] = PL_O2I(nw, PL_NLOS[i][j]);
- System.out.println("Udało się, yaaaaaaaaaaaaaaaaaaaaaaaaay!");
- }
- }
- }
- }
- }
- public void licz_SINR(){
- Double[] S_NLOS = new Double[7];
- Double[] S_LOS = new Double[7];
- Double[] I_W_NLOS = new Double[7]; //inerferencje w watach
- Double[] I_W_LOS = new Double[7]; //inerferencje w watach
- Double[] S_0_NLOS = new Double[850];
- Double[] S_0_LOS = new Double[850];
- for(int t=0; t < 850; t++){
- if(t==0){
- for (int i = 0; i < 7; i++) {
- 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);
- }
- }
- else if(t > 0){
- for (int i = 0; i < 7; i++) {
- 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]);
- }
- }
- 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 < 7; 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];
- }
- rysuj_wykresy.SINR_NLOS[t] = S_0_NLOS[t] / ( I_suma_NLOS + N_W);
- rysuj_wykresy.SINR_dB_NLOS[t] = 10*Math.log10(rysuj_wykresy.SINR_NLOS[t]); //na dB
- rysuj_wykresy.SINR_LOS[t] = S_0_LOS[t] / ( I_suma_LOS + N_W);
- rysuj_wykresy.SINR_dB_LOS[t] = 10*Math.log10(rysuj_wykresy.SINR_LOS[t]); //na dB
- }
- System.out.println("SINR_dB_NLOS dla t = 0 " + rysuj_wykresy.SINR_dB_NLOS[0]);
- System.out.println("SINR_dB_LOS dla t = 0 " + rysuj_wykresy.SINR_dB_LOS[0]);
- System.out.println("SINR_dB_NLOS dla t = 850 " + rysuj_wykresy.SINR_dB_NLOS[849]);
- System.out.println("SINR_dB_LOS dla t = 850 " + rysuj_wykresy.SINR_dB_LOS[849]);
- rysuj_wykresy.dane(0); //K == 0 - > NLOS
- rysuj_wykresy.dane(1); //K == 1 -> LOS
- rysuj_wykresy.Rysuj_wykres();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement