| 35 | self.AS = AS |
| 36 | |
| 37 | def access_P_L_shortest(self, sat_cbf, fac_cbf, fac_num, sat_num, |
| 38 | num_orbits, num_sats_per_orbit, duration, fac_ll, |
| 39 | sat_lla, bound_dis, alpha, antenna_num, path): |
| 40 | delay_matrix = np.zeros((fac_num + sat_num, fac_num + sat_num)) |
| 41 | for cur_time in range(duration): |
| 42 | for i in range(0, fac_num): |
| 43 | access_list = {} |
| 44 | fac_lat = float(fac_ll[i][0]) # latitude |
| 45 | up_lat = fac_lat + alpha # bound |
| 46 | down_lat = fac_lat - alpha |
| 47 | x2 = fac_cbf[i][0] |
| 48 | y2 = fac_cbf[i][1] |
| 49 | z2 = fac_cbf[i][2] |
| 50 | for j in range(0, sat_num): |
| 51 | if sat_lla[cur_time][j][0] >= down_lat and sat_lla[ |
| 52 | cur_time][j][0] <= up_lat: |
| 53 | x1 = sat_cbf[cur_time][j][0] # in km |
| 54 | y1 = sat_cbf[cur_time][j][1] |
| 55 | z1 = sat_cbf[cur_time][j][2] |
| 56 | dist = math.sqrt( |
| 57 | np.square(x1 - x2) + np.square(y1 - y2) + |
| 58 | np.square(z1 - z2)) |
| 59 | if dist < bound_dis: |
| 60 | # [satellite index,distance] |
| 61 | access_list.update({j: dist}) |
| 62 | if len(access_list) > antenna_num: |
| 63 | sorted_access_list = dict( |
| 64 | sorted(access_list.items(), key=lambda item: item[1])) |
| 65 | cnt = 0 |
| 66 | for key, value in sorted_access_list.items(): |
| 67 | cnt = cnt + 1 |
| 68 | if cnt > antenna_num: |
| 69 | break |
| 70 | delay_time = value / (17.31 / 29.5 * |
| 71 | 299792.458) * 1000 # ms |
| 72 | delay_matrix[sat_num + i][key] = delay_time |
| 73 | delay_matrix[key][sat_num + i] = delay_time |
| 74 | elif len(access_list) != 0: |
| 75 | for key, value in access_list.items(): |
| 76 | delay_time = value / (17.31 / 29.5 * |
| 77 | 299792.458) * 1000 # ms |
| 78 | delay_matrix[sat_num + i][key] = delay_time |
| 79 | delay_matrix[key][sat_num + i] = delay_time |
| 80 | for i in range(num_orbits): |
| 81 | for j in range(num_sats_per_orbit): |
| 82 | num_sat1 = i * num_sats_per_orbit + j |
| 83 | x1 = sat_cbf[cur_time][num_sat1][0] # km |
| 84 | y1 = sat_cbf[cur_time][num_sat1][1] |
| 85 | z1 = sat_cbf[cur_time][num_sat1][2] |
| 86 | num_sat2 = i * num_sats_per_orbit + ( |
| 87 | j + 1) % num_sats_per_orbit |
| 88 | x2 = sat_cbf[cur_time][num_sat2][0] # km |
| 89 | y2 = sat_cbf[cur_time][num_sat2][1] |
| 90 | z2 = sat_cbf[cur_time][num_sat2][2] |
| 91 | num_sat3 = ((i + 1) % num_orbits) * num_sats_per_orbit + j |
| 92 | x3 = sat_cbf[cur_time][num_sat3][0] # km |
| 93 | y3 = sat_cbf[cur_time][num_sat3][1] |
| 94 | z3 = sat_cbf[cur_time][num_sat3][2] |