RENEWLab
1.1.0
RENEW project
|
Public Member Functions | |
def | __init__ (self, filename, n_frames_to_inspect=0, n_fr_insp_st=0, sub_sample=0) |
def | open_hdf5 (self) |
def | get_data (self) |
def | get_metadata (self) |
def | filter_pilots (cmpx_pilots, z_padding=150, fft_size=64, cp=16, pilot_type='lts', seq_length=[]) |
def | log2csi_hdf5 (self, filename, offset=0) |
Static Public Member Functions | |
def | samps2csi (samps, num_users, samps_per_user=224, fft_size=64, offset=0, bound=94, cp=0, sub=1, legacy=False, pilot_f=[]) |
def | samps2csi_large (samps, num_users, samps_per_user=224, offset=47, chunk_size=1000, legacy=False) |
def | frame_sanity (match_filt, k_lts, n_lts, st_frame=0, frame_to_plot=0, plt_ant=0, cp=16) |
Public Attributes | |
h5file | |
filename | |
dirpath | |
h5struct | |
data | |
metadata | |
pilot_samples | |
uplink_samples | |
downlink_samples | |
noise_samples | |
n_frm_st | |
n_frm_end | |
sub_sample | |
def hdf5_lib.hdf5_lib.__init__ | ( | self, | |
filename, | |||
n_frames_to_inspect = 0 , |
|||
n_fr_insp_st = 0 , |
|||
sub_sample = 0 |
|||
) |
def hdf5_lib.hdf5_lib.filter_pilots | ( | cmpx_pilots, | |
z_padding = 150 , |
|||
fft_size = 64 , |
|||
cp = 16 , |
|||
pilot_type = 'lts' , |
|||
seq_length = [] |
|||
) |
|
static |
Creates a map of the frames per antenna. 3 categories: Good frames, bad frames, probably partial frames. Good frames are those where all k_lts peaks are present and spaced n_lts samples apart. Bad frames are those with random peaks. Potentially partial frames are those with some peaks at the right positions. This is a random event. Some frames may have accidentally some peaks at the right places. First the largest peak is detected, peaks at +1/-1 (probably due to multipath) and +CP/-CP samples are cleared out. Then, the positions of the largest k_lts peaks are determined. Finally, the function checks if these k_lts peaks are at the correct n_lts offstes. Disclaimer: This function is good only for a high SNR scenario!
def hdf5_lib.hdf5_lib.get_data | ( | self | ) |
Parse file to retrieve metadata and data. HDF5 file has been written in DataRecorder.cpp (in Sounder folder) Output: Data (hierarchy): -Path -Pilot_Samples --Samples -UplinkData --Samples Dimensions of input sample data (as shown in DataRecorder.cpp in Sounder): - Pilots dims_pilot[0] = maxFrame dims_pilot[1] = number of cells dims_pilot[2] = number of UEs dims_pilot[3] = number of antennas (at BS) dims_pilot[4] = samples per symbol * 2 (IQ) - Uplink Data dims_data[0] = maxFrame dims_data[1] = number of cells dims_data[2] = uplink symbols per frame dims_data[3] = number of antennas (at BS) dims_data[4] = samples per symbol * 2 (IQ)
def hdf5_lib.hdf5_lib.get_metadata | ( | self | ) |
-Attributes {FREQ, RATE, PREFIX_LEN, POSTFIX_LEN, SLOT_SAMP_LEN, FFT_SIZE, CP_LEN, BEACON_SEQ_TYPE, PILOT_SEQ_TYPE, BS_HUB_ID, BS_SDR_NUM_PER_CELL, BS_SDR_ID, BS_NUM_CELLS, BS_CH_PER_RADIO, BS_FRAME_SCHED, BS_RX_GAIN_A, BS_TX_GAIN_A, BS_RX_GAIN_B, BS_TX_GAIN_B, BS_BEAMSWEEP, BS_BEACON_ANT, BS_NUM_ANT, BS_FRAME_LEN, CL_NUM, CL_CH_PER_RADIO, CL_AGC_EN, CL_RX_GAIN_A, CL_TX_GAIN_A, CL_RX_GAIN_B, CL_TX_GAIN_B, CL_FRAME_SCHED, CL_SDR_ID, CL_MODULATION, UL_SLOTS}
def hdf5_lib.hdf5_lib.log2csi_hdf5 | ( | self, | |
filename, | |||
offset = 0 |
|||
) |
Convert raw IQ log to CSI. Converts input Argos HDF5 trace to frequency domain CSI and writes it to the same filename with -csi appended. Args: filename of log Returns: None
def hdf5_lib.hdf5_lib.open_hdf5 | ( | self | ) |
Get the most recent log file, open it if necessary.
|
static |
Convert an Argos HDF5 log file with raw IQ in to CSI. Asumes 802.11 style LTS used for trace collection. Args: samps: The h5py or numpy array containing the raw IQ samples, dims = [Frame, Cell, User, Antenna, Sample]. num_users: Number of users used in trace collection. (Last 'user' is noise.) samps_per_user: Number of samples allocated to each user in each frame. Returns: csi: Complex numpy array with [Frame, Cell, User, Pilot Rep, Antenna, Subcarrier] iq: Complex numpy array of raw IQ samples [Frame, Cell, User, Pilot Rep, Antenna, samples] Example: h5log = h5py.File(filename,'r') csi,iq = samps2csi(h5log['Pilot_Samples'], h5log.attrs['num_mob_ant']+1, h5log.attrs['samples_per_user'])
|
static |
Wrapper function for samps2csi_main for to speed up large logs by leveraging data-locality. Chunk_size may need to be adjusted based on your computer.
hdf5_lib.hdf5_lib.data |
hdf5_lib.hdf5_lib.dirpath |
hdf5_lib.hdf5_lib.downlink_samples |
hdf5_lib.hdf5_lib.filename |
hdf5_lib.hdf5_lib.h5file |
hdf5_lib.hdf5_lib.h5struct |
hdf5_lib.hdf5_lib.metadata |
hdf5_lib.hdf5_lib.n_frm_end |
hdf5_lib.hdf5_lib.n_frm_st |
hdf5_lib.hdf5_lib.noise_samples |
hdf5_lib.hdf5_lib.pilot_samples |
hdf5_lib.hdf5_lib.sub_sample |
hdf5_lib.hdf5_lib.uplink_samples |