Ejemplo n.º 1
0
def to_tfrecord(analysis_area,
                object_file_name,
                paths_file_name,
                resolution=1,
                antenna_number=4):
    with open(object_file_name) as infile:
        obj = objects.ObjectFile.from_file(infile)

    interest_car_i = None
    polygon_list = []
    for structure_group in obj:
        for structure_i, structure in enumerate(structure_group):
            if structure.name == 'flowC.0':
                interest_car_i = structure_i
            for sub_structure in structure:
                polygon_list.append(sub_structure.as_polygon())

    matrix = calc_position_matrix(analysis_area, polygon_list, resolution)

    #print(matrix.shape)
    #matrix_plot(matrix[1])

    paths = P2mPaths(paths_file_name)

    rec_i = 0
    departure_angle = paths.get_departure_angle_ndarray(rec_i + 1)
    arrival_angle = paths.get_arrival_angle_ndarray(rec_i + 1)
    p_gain = paths.get_p_gain_ndarray(rec_i + 1)

    t1 = calc_rx_power(departure_angle, arrival_angle, p_gain, antenna_number)
    t1 = np.abs(t1)
    best_tx_rx = np.argwhere(t1 == np.max(t1))[0]
    best_tx_rx = best_tx_rx.astype(np.uint8)

    return matrix[interest_car_i], best_tx_rx
Ejemplo n.º 2
0
                                'ERROR: thisEpisodeNumber != ep_i. They are:',
                                thisEpisodeNumber, 'and', ep_i, 'file: ',
                                sumoOutputInfoFileName, 'read:', row)
                            exit(1)
                        break  # process only first 2 rows / line AK-TODO should eliminate the loop

            if simulation_info['scene_i'] != this_scene_i:
                raise SceneNotInEpisodeSequenceError(
                    'Expecting {} found {}'.format(
                        this_scene_i,
                        simulation_info['scene_i'],
                    ))

            print(abs_paths_file_name
                  )  # AK TODO take out this comment and use logging
            paths = P2mPaths(abs_paths_file_name)
            cir = P2mCir(abs_cir_file_name)

            # for receiver_number in range(numTxRxPairsPerScene): #if num Tx = 1, then receiver_number is the receiver index
            receiver_number = 0  # assume that each transmitter in this case has only 1 receiver associated to it
            if paths.get_total_received_power(receiver_number + 1) is not None:
                total_received_power = paths.get_total_received_power(
                    receiver_number + 1)
                mean_time_of_arrival = paths.get_mean_time_of_arrival(
                    receiver_number + 1)

                sixParameters = paths.get_6_parameters_for_all_rays(
                    receiver_number + 1)
                numRays = sixParameters.shape[0]
                areLOSChannels = paths.is_los(receiver_number + 1)
                phases = cir.get_phase_ndarray(
Ejemplo n.º 3
0
def test_channel():
    # RESULTS_DIR='/Users/psb/ownCloud/Projects/DNN Wireless/rwi-3d-modeling/restuls/run00000'
    # RESULTS_DIR = 'D:/insitedata/pc128/example_working/restuls/run00000'
    RESULTS_DIR = 'D:/github/5gm-rwi-simulation/example/results_new_simuls/run00003/'
    antenna_number = 2
    BASE_DIR = os.path.dirname(os.path.realpath(__file__))
    P2MPATHS_FILE = os.path.join(RESULTS_DIR, 'study',
                                 'model.paths.t001_01.r002.p2m')
    print('Reading file', P2MPATHS_FILE)
    with open(P2MPATHS_FILE, 'rb') as infile:
        paths = P2mPaths(P2MPATHS_FILE)
        #get info for a given receiver
        rec_i = 0  #first receiver is 0 here and 1 in the database
        departure_angles = paths.get_departure_angle_ndarray(rec_i + 1)
        arrival_angles = paths.get_arrival_angle_ndarray(rec_i + 1)
        p_gainsdB = paths.get_p_gain_ndarray(rec_i + 1)
        abs_cir_file_name = P2MPATHS_FILE.replace(
            "paths", "cir")  # name for the impulse response (cir) file
        if os.path.exists(abs_cir_file_name) == False:
            print('ERROR: could not find file ', abs_cir_file_name)
            print(
                'Did you ask InSite to generate the impulse response (cir) file?'
            )
            exit(-1)
        cir = P2mCir(abs_cir_file_name)  #read impulse response with phases
        pathPhasesInDegrees = cir.get_phase_ndarray(rec_i + 1)

    if True:  # enable for debugging with fixed angles
        ad = (np.pi / 4) * 180 / np.pi  # in degrees, as InSite provides
        aa = (3 * np.pi / 2) * 180 / np.pi
        g = 10
        departure_angles = ad * np.ones(departure_angles.shape,
                                        departure_angles.dtype)
        arrival_angles = aa * np.ones(arrival_angles.shape,
                                      arrival_angles.dtype)
        p_gainsdB = g * np.ones(p_gainsdB.shape, p_gainsdB.dtype)
        pathPhasesInDegrees = np.zeros(len(p_gainsdB))

    print(arrival_angles.shape)
    azimuths_tx = departure_angles[:, 1]  # azimuth is 2nd column
    azimuths_rx = arrival_angles[:, 1]

    start = datetime.datetime.today()
    t1_py = calc_rx_power(departure_angles, arrival_angles, p_gainsdB,
                          antenna_number)

    number_Rx_antennas = antenna_number * antenna_number
    number_Tx_antennas = antenna_number * antenna_number
    normalizedAntDistance = 0.5

    t1 = getNarrowBandUPAMIMOChannel(departure_angles,
                                     arrival_angles,
                                     p_gainsdB,
                                     number_Tx_antennas,
                                     number_Rx_antennas,
                                     normalizedAntDistance=0.5)
    t1 = np.abs(t1)
    t2 = getNarrowBandULAMIMOChannel(azimuths_tx,
                                     azimuths_rx,
                                     p_gainsdB,
                                     number_Tx_antennas,
                                     number_Rx_antennas,
                                     normalizedAntDistance=0.5,
                                     angleWithArrayNormal=1,
                                     pathPhases=pathPhasesInDegrees)
    print('MSE 1 = ', np.mean(np.power(np.abs(t1 - t1_py), 2)))
    print('MSE 2 = ', np.mean(np.power(np.abs(t1 - t2), 2)))
    # print(t2)
    t2 = np.abs(t2)
    (bestRxIndex, bestTxIndex) = np.unravel_index(np.argmax(t2, axis=None),
                                                  t2.shape)
    print('bestRxIndex: ', bestRxIndex, ' and bestTxIndex: ', bestTxIndex)

    stop = datetime.datetime.today()
    print(stop - start)
Ejemplo n.º 4
0
        arrival_vec = calc_vec_i(i, arrival_omega, antenna_range)
        H = H + path_gain[i] * departure_vec.conj().T * arrival_vec
    t1 = wt.conj().T * H * wr
    return t1


if __name__ == '__main__':

    RESULTS_DIR = '/Users/psb/ownCloud/Projects/DNN Wireless/rwi-3d-modeling/restuls/run00000'

    BASE_DIR = os.path.dirname(os.path.realpath(__file__))
    P2MPATHS_FILE = os.path.join(RESULTS_DIR, 'study',
                                 'model.paths.t001_01.r002.p2m')

    with open(P2MPATHS_FILE, 'rb') as infile:

        paths = P2mPaths(P2MPATHS_FILE)
        departure_angle = paths.get_departure_angle_ndarray(1)
        arrival_angle = paths.get_arrival_angle_ndarray(1)
        p_gain = paths.get_p_gain_ndarray(1)
        antenna_number = 4
        print(arrival_angle.shape)

        start = datetime.datetime.today()
        t1_py = calc_rx_power(departure_angle, arrival_angle, p_gain,
                              antenna_number)
        stop = datetime.datetime.today()

        #print(np.mean(np.power(t1 - t1_py, 2)))
        print(stop - start)
        print(t1_py)
Ejemplo n.º 5
0
    def calc_scene(self, object_file_name, paths_file_name):
        with open(object_file_name) as infile:
            obj = objects.ObjectFile.from_file(infile)

        # store the polygons for which matrix will be calculated
        polygons_of_interest_idx_list = []
        # store the index of the receiver for each polygon in the first dimension of matrix
        position_matrix_rec_map = []
        l = self.n_paths_to_tfrecord
        polygon_list = []
        for structure_group in obj:
            for structure in structure_group:
                for sub_structure in structure:
                    if structure.name in self.cars_with_antenna:
                        polygons_of_interest_idx_list.append(len(polygon_list))
                        position_matrix_rec_map.append(
                            self.cars_with_antenna.index(structure.name))
                    polygon_list.append(sub_structure.as_polygon())

        matrix = calc_position_matrix(
            self.analysis_area,
            polygon_list,
            self.resolution,
            polygons_of_interest_idx_list=polygons_of_interest_idx_list)

        #print(matrix.shape)
        #matrix_plot(matrix[1])

        paths = P2mPaths(paths_file_name)

        n_rec = len(self.cars_with_antenna)
        matrix_scene = np.empty((n_rec, *matrix.shape[1:]), matrix.dtype)
        matrix_scene.fill(np.nan)
        best_tx_rx_scene = np.empty((n_rec, 2), np.uint8)
        best_tx_rx_scene.fill(np.nan)
        departure_angle_scene = np.empty((n_rec, l, 2), np.float32)
        departure_angle_scene.fill(np.nan)
        arrival_angle_scene = np.empty((n_rec, l, 2), np.float32)
        arrival_angle_scene.fill(np.nan)
        p_gain_scene = np.empty((n_rec, l), np.float32)
        p_gain_scene.fill(np.nan)
        t1_scene = np.empty(
            (n_rec, self.n_antenna_elements, self.n_antenna_elements),
            np.complex64)
        t1_scene.fill(np.nan)

        for rec_i, rec_name in enumerate(self.cars_with_antenna):
            try:
                obj_order_rec_i = position_matrix_rec_map.index(rec_i)
            except ValueError:
                pass

            departure_angle = paths.get_departure_angle_ndarray(
                obj_order_rec_i + 1).astype(np.float32)
            arrival_angle = paths.get_arrival_angle_ndarray(obj_order_rec_i +
                                                            1).astype(
                                                                np.float32)
            p_gain = paths.get_p_gain_ndarray(obj_order_rec_i + 1).astype(
                np.float32)

            if l < len(departure_angle):
                logging.warning(
                    "Saving only {} of {} available paths for {}".format(
                        l, len(departure_angle), paths_file_name))

            matrix_scene[rec_i, :] = matrix[obj_order_rec_i]

            departure_angle_scene[
                rec_i, :len(departure_angle), :] = departure_angle
            arrival_angle_scene[rec_i, :len(arrival_angle), :] = arrival_angle
            p_gain_scene[rec_i, :len(p_gain)] = p_gain

            t1 = calc_rx_power(departure_angle, arrival_angle, p_gain, self.antenna_number, self.frequency) \
                .astype(np.complex64)
            t1_abs = np.abs(t1)
            t1_scene[rec_i, :] = t1
            best_tx_rx = np.argwhere(t1_abs == np.max(t1_abs))[0]
            best_tx_rx_scene[rec_i, :] = best_tx_rx.astype(np.uint8)
            #best_idx = np.argmax(p_gain)
            #best_tx_rx = np.array((departure_angle[best_idx], arrival_angle[best_idx]), dtype=np.float32)
        return matrix_scene, best_tx_rx_scene, departure_angle_scene, arrival_angle_scene, p_gain_scene, t1_scene