Advertisement
martaczaska

mgr_1

Jan 8th, 2022
1,205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.92 KB | None | 0 0
  1. #!/usr/bin/env python
  2. import pandas as panda
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. import math
  6.  
  7.  
  8. #constants
  9. freq_reuse_factor = 3
  10. R_c = 600
  11. mi = 0.6
  12. centre_range = mi * R_c
  13. edge_range = R_c - centre_range
  14. f = 2.1 #* 10**9 #[GHz]
  15. h_UE = 1.5 #[m]
  16. h_BS = 10 # [m]
  17. d = 1 ### ?
  18. R_0 = 100 #[m], nominal reference distance
  19. gamma = 4 #path loss exponent
  20. alfa = ...
  21. omega = 1.25
  22. C = 3*10**8 #[m/s]
  23.  
  24. #noise
  25. k = 1.38 * 10**(-23)
  26. T_0 = 297
  27. BW = 20 #[MHz] ?, w atykule BW = 5MHz i S = 25 sub-ch
  28. S = 100 #number of subchannels in the whole bandwidth
  29. N = k * T_0 * (BW * 10**6/S)
  30.  
  31. #values needed to calculate fi and ni
  32. Xf = 6 * math.log10(f/2) #correction factor for frequencies above 2 GHz
  33. Xh = -d * math.log10(h_UE/2) #correction factor for the receiver
  34. s = 1 #shadowing term, normal random variable (value from normal distribution) ???
  35. T = 16 #number of subchannels available at the edge of a cell, T=4 w artykule
  36.  
  37. #bilans
  38. G_T = 18
  39. G_R = 0
  40. L_T = 7 #?
  41. L_R = 1# ?
  42. P_T = 10 #[dBm]
  43.  
  44.  
  45. def calculateFi(R, R_0_prim, c, freq):
  46.     power_1 = (G_T + G_R - (s + Xf + Xh + L_T + L_R))/10
  47.     power_2 = (G_T + G_R - (s + L_T + L_R))/10
  48.  
  49.     wavelght = c / (freq * 10**9)
  50.  
  51.     if(R/R_c > R_0_prim/R_c):
  52.         fi = (R_0/R_c)**gamma * (wavelght/(4*math.pi*R_0_prim))**2 * 10**power_1
  53.     else:
  54.         fi = (wavelght/(4*math.pi*R_c))**2 * 10**power_2
  55.  
  56.     return fi
  57.  
  58. def changeToLinear(x):
  59.     linear = 10**(x/10)
  60.     return linear
  61.  
  62. def calculateNi(R, R_0_prim):
  63.     if(R/R_c > R_0_prim/R_c):
  64.         ni = gamma
  65.     else:
  66.         ni = 2
  67.    
  68.     return ni
  69.  
  70. def calculateP_Tc(P_T, omega):
  71.     P_T_Wat = 10**(P_T/10 - 3)
  72.     P_Tc = P_T_Wat/(omega*T + S - freq_reuse_factor*T)
  73.  
  74.     return P_Tc
  75.  
  76. def calculateFresnelZoneBreakpoint(h_t, h_r, c, freq):
  77.     sum = h_t + h_r
  78.     diff = h_t - h_r
  79.     wavelght = c / (freq * 10**9)
  80.     R_0_prim = 1/wavelght*math.sqrt((sum**2 - diff**2)**2 -2*(sum**2 + diff**2)*(wavelght/2)**2 + (wavelght/2)**4)
  81.  
  82.     return R_0_prim
  83.  
  84. def calculateSINRinCellCenter(R, mi, omega, P_Tc, ni, fi, fi_2):
  85.     S = (R/R_c)**(-ni)
  86.     I_c1 = 6*(fi_2/fi) * math.sqrt(3)**(-gamma)
  87.     I_c2 = 12*(fi_2/fi) * math.sqrt(3*freq_reuse_factor)**(-gamma)
  88.     # I_c1 = 6 * math.sqrt(3)**(-gamma)
  89.     # I_c2 = 12 * math.sqrt(3*freq_reuse_factor)**(-gamma)
  90.     Noise = N / (fi *P_Tc)
  91.  
  92.     SINR = S/(I_c1 + I_c2 + Noise)
  93.  
  94.     return SINR
  95.  
  96. def calculateSINRinCellEdge(R, mi, omega, P_Tc, ni, fi, fi_2):
  97.     S = (R/R_c)**(-ni)
  98.     # I_c = 6* math.sqrt(3*freq_reuse_factor)**(-gamma)
  99.     # Noise = N / (omega*0.0001728125828342691 *P_Tc)
  100.     I_c = 6*(fi_2/fi) * math.sqrt(3*freq_reuse_factor)**(-gamma)
  101.     Noise = N / (omega*fi *P_Tc)
  102.  
  103.     SINR = S/(I_c + Noise)
  104.  
  105.     return SINR
  106.  
  107. def plotGraph(x, y):
  108.     graph = panda.DataFrame(y, x)
  109.     graph.plot(kind='line', grid=True)
  110.     plt.show()
  111.     plt.savefig('wykres SINR.png')
  112.  
  113.  
  114. def main():
  115.     calculated_SINR = []
  116.     x = []
  117.     P_tc = calculateP_Tc(P_T, omega)
  118.     R_0_prim = calculateFresnelZoneBreakpoint(h_BS, h_UE, C, f)
  119.     file = open("calculated_SINR.txt", "w")
  120.     file.write("P_tc: ")
  121.     file.write(str(P_tc))
  122.     file.write(" \n")
  123.     file.write("R_0_prim: ")
  124.     file.write(str(R_0_prim))
  125.     file.write(" \n")
  126.  
  127.     fi_result = calculateFi(200, R_0_prim, C, f)
  128.     fi_2 = calculateFi(500, R_0_prim, C, f)
  129.  
  130.     for r in range(1, R_c):
  131.         ni_result = calculateNi(r, R_0_prim)
  132.         # x.append(i/R_c)
  133.         x.append(r)
  134.  
  135.         if(r < R_0_prim):
  136.             sinr = calculateSINRinCellCenter(r, mi, omega, P_tc, ni_result, fi_result, fi_2)
  137.         else:
  138.             sinr = calculateSINRinCellEdge(r, mi, omega, P_tc, ni_result, fi_result, fi_2)
  139.         sinr_in_dB = 10*math.log10(sinr)
  140.         calculated_SINR.append(sinr_in_dB)
  141.        
  142.         file.write(str(sinr_in_dB))
  143.         file.write(" \n")
  144.  
  145.     plotGraph(x, calculated_SINR)
  146.     file.close()
  147.  
  148. if __name__ == "__main__":
  149.     main()
  150.  
  151.  
  152.  
  153.  
  154.    
  155.  
  156.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement