free5GRAN  V1.0
free5GRAN::phy::signal_processing Namespace Reference

Functions

void channelEstimation (complex< float > *pilots, complex< float > *reference_pilot, vector< vector< int >> &pilot_indexes, vector< vector< complex< float >>> &coefficients, float &snr, int num_sc, int num_symbols, int pilot_size)
 
void hard_demodulation (vector< complex< float >> signal, int *bits, int signal_length, int modulation_scheme)
 
void soft_demodulation (vector< complex< float >> signal, double *soft_bits, int signal_length, int modulation_scheme)
 
void compute_fine_frequency_offset (vector< complex< float >> input_signal, int symbol_duration, int fft_size, int cp_length, int scs, float &output, int num_symbols)
 
void transpose_signal (vector< complex< float >> *input_signal, float freq_offset, int sample_rate, int input_length)
 
void channel_demapper (vector< vector< complex< float >>> &input_signal, vector< vector< vector< int >>> &ref, complex< float > **output_channels, vector< vector< vector< int >>> &output_indexes, int num_channels, int num_symbols, int num_sc)
 
double compute_freq_from_gscn (int gscn)
 
free5GRAN::pdcch_t0ss_monitoring_occasions compute_pdcch_t0_ss_monitoring_occasions (int pdcch_config, int pbch_scs, int common_scs, int i)
 
void compute_rb_start_lrb_dci (int RIV, int n_size_bwp, int &lrb, int &rb_start)
 
void get_pdsch_dmrs_symbols (const string &type, int duration, int additionnal_position, int l0, int **output, int &size)
 
void compute_cp_lengths (int scs, int nfft, int is_extended_cp, int num_symb_per_subframes, int *cp_lengths, int *cum_sum_cp_lengths)
 
void compute_phase_decomp (int *cp_lengths, int *cum_sum_symb, float sampling_rate, float f0, int num_symb_per_subframes, complex< float > *phase_decomp_factor)
 
int compute_nre (int num_symb_pdsch, int num_dmrs_symb)
 
void fft (vector< complex< float >> time_domain_signal, vector< vector< complex< float >>> &output_signal, int fft_size, int *cp_lengths, int *cum_sum_symb, int num_symbols, int num_sc_output, int first_symb_index, int offset)
 
void get_candidates_frames_indexes (vector< vector< int >> &frame_indexes, int *frame_numbers, int sfn, int index_first_pss, int num_samples_before_pss, int frame_size)
 

Function Documentation

◆ channel_demapper()

void free5GRAN::phy::signal_processing::channel_demapper ( vector< vector< complex< float >>> &  input_signal,
vector< vector< vector< int >>> &  ref,
complex< float > **  output_channels,
vector< vector< vector< int >>> &  output_indexes,
int  num_channels,
int  num_symbols,
int  num_sc 
)

Consumes an input signal and returns different channels containing corresponding data, based on ref indexes

Parameters
[in]input_signalInput signal to be de-mapped
[in]refArray containing the indexes of the different channels inside the OFDM grid
[in]channel_sizesArray containing the outpu transport_channel sizes
[out]output_channelsChannels symbols
[out]output_indexesIndexes of the output_channels elements
[in]num_channelsNumber of channels
[in]num_symbolsNumber of symbols in the OFDM grid
[in]num_scNumber of subcarriers in the OFDM grid

Definition at line 298 of file libphy.cpp.

◆ channelEstimation()

void free5GRAN::phy::signal_processing::channelEstimation ( complex< float > *  pilots,
complex< float > *  reference_pilot,
vector< vector< int >> &  pilot_indexes,
vector< vector< complex< float >>> &  coefficients,
float &  snr,
int  num_sc,
int  num_symbols,
int  pilot_size 
)

Estimate channel coefficients for equalization

  • Compute channel coefficients for pilots
  • Linear interpolation in frequency domain
  • Linear interpolation in time domain
Parameters
[in]pilotsSignal received pilots
[in]reference_pilotGenerated pilots
[in]pilot_indexesPilot indexes in the signal
[out]coefficientsChannel coefficient returned by the function
[out]snrComputed SNR
[in]num_scNumber of subcarriers in the signal
[in]num_symbolsNumber of symbols in the signal
[in]pilot_sizePilot size

Definition at line 27 of file libphy.cpp.

◆ compute_cp_lengths()

void free5GRAN::phy::signal_processing::compute_cp_lengths ( int  scs,
int  nfft,
int  is_extended_cp,
int  num_symb_per_subframes,
int *  cp_lengths,
int *  cum_sum_cp_lengths 
)

Compute cyclic prefix size

3GPP standard: TS38.211 V15.2.0 Section 5.3

Parameters
[in]scsSubcarrier spacing
[in]nfftFFT/iFFT size
[in]is_extended_cpTrue if current CP is extended CP
[in]num_symb_per_subframesNumber of symbols per subframe
[out]cp_lengthsReturned CP
[out]cum_sum_cp_lengthsCumulative CP sum

Definition at line 483 of file libphy.cpp.

◆ compute_fine_frequency_offset()

void free5GRAN::phy::signal_processing::compute_fine_frequency_offset ( vector< complex< float >>  input_signal,
int  symbol_duration,
int  fft_size,
int  cp_length,
int  scs,
float &  output,
int  num_symbols 
)

Compute fine frequency offset of a received signal by computing phase offset between cyclic prefix and corresponding symbol data.

Parameters
[in]input_signalReceived signal
[in]symbol_durationNumber of samples per symbol
[in]fft_sizeNumber of samples in a symbol, after removing cyclic prefix
[in]cp_lengthCyclic prefix size
[in]scsSubcarrier spacing
[out]outputFrequency offset in Hertz
[in]num_symbolsNumber of symbols in the signal

Definition at line 247 of file libphy.cpp.

◆ compute_freq_from_gscn()

double free5GRAN::phy::signal_processing::compute_freq_from_gscn ( int  gscn)

Computing frequency from received GSCN

3GPP standard: TS38.104 V15.2.0 Table 5.4.3.1-1

Parameters
[in]gscnInput GSCN

Definition at line 338 of file libphy.cpp.

◆ compute_nre()

int free5GRAN::phy::signal_processing::compute_nre ( int  num_symb_pdsch,
int  num_dmrs_symb 
)

Compute number of PDSCH RE per RB

Parameters
[in]num_symb_pdschNumber of PDSCH symbols
[in]num_dmrs_symbNumber of DMRS symbols
Returns
number of PDSCH RE per RB

Definition at line 532 of file libphy.cpp.

◆ compute_pdcch_t0_ss_monitoring_occasions()

free5GRAN::pdcch_t0ss_monitoring_occasions free5GRAN::phy::signal_processing::compute_pdcch_t0_ss_monitoring_occasions ( int  pdcch_config,
int  pbch_scs,
int  common_scs,
int  i 
)

Compute PDCCH monitoring occasion informations

3GPP standard: TS38.213 V15.2.0 Section 13

Parameters
[in]pdcch_configPDCCH config received from MIB
[in]pbch_scsPBCH subcarrier spacing
[in]common_scsBWP subcarrier spacing
[in]iSSB index

Definition at line 369 of file libphy.cpp.

◆ compute_phase_decomp()

void free5GRAN::phy::signal_processing::compute_phase_decomp ( int *  cp_lengths,
int *  cum_sum_symb,
float  sampling_rate,
float  f0,
int  num_symb_per_subframes,
complex< float > *  phase_decomp_factor 
)

Compute phase decompensation vector from frequency

3GPP standard: TS38.211 V15.2.0 Section 5.3

Parameters
[in]cp_lengthsCP lengths
[in]cum_sum_symbCP lengths cumulative sum
[in]sampling_rateRF device sample rate
[in]f0Frequency in Hz
[in]num_symb_per_subframesNumber of symbols per subframes
[out]phase_decomp_factorPhase de-compensator vector

Definition at line 511 of file libphy.cpp.

◆ compute_rb_start_lrb_dci()

void free5GRAN::phy::signal_processing::compute_rb_start_lrb_dci ( int  RIV,
int  n_size_bwp,
int &  lrb,
int &  rb_start 
)

Compute RB start and LRB from DCI

3GPP standard: TS38.214 V15.2.0 Section 5.1.2.2.2

Parameters
[in]RIVFrequency domain resource allocation
[in]n_size_bwpActive BWP size (in RB)
[out]lrbNumber of PDSCH RB
[out]rb_startFirst PDSCH RB index in BWP

Definition at line 419 of file libphy.cpp.

◆ fft()

void free5GRAN::phy::signal_processing::fft ( vector< complex< float >>  time_domain_signal,
vector< vector< complex< float >>> &  output_signal,
int  fft_size,
int *  cp_lengths,
int *  cum_sum_symb,
int  num_symbols,
int  num_sc_output,
int  first_symb_index,
int  offset 
)

Perform FFT on time domain signal to recover frequency domain signal (= RE grid)

Parameters
[in]time_domain_signalInput time domain signal
[out]output_signalOutput RE grid
[in]fft_sizeFFT size (Number of samples per symbol, excluding CP)
[in]cp_lengthsArray of CP lengths for 1 subframe (= 1ms)
[in]cum_sum_symbCumulative sum of symbols length in one subframe
[in]num_symbolsNumber of symbols in output RE grid (= Number of rows of output_signal)
[in]num_sc_outputNumber of subcarriers in output RE grid (= Number of columns of output_signal).
[in]first_symb_indexIndex of first symbol to be extracted in frame.
[in]offsetNumber of amples to be left before extracting. Can be used while extracting specific slots in a radio frame.

Definition at line 543 of file libphy.cpp.

◆ get_candidates_frames_indexes()

void free5GRAN::phy::signal_processing::get_candidates_frames_indexes ( vector< vector< int >> &  frame_indexes,
int *  frame_numbers,
int  sfn,
int  index_first_pss,
int  num_samples_before_pss,
int  frame_size 
)

Definition at line 580 of file libphy.cpp.

◆ get_pdsch_dmrs_symbols()

void free5GRAN::phy::signal_processing::get_pdsch_dmrs_symbols ( const string &  type,
int  duration,
int  additionnal_position,
int  l0,
int **  output,
int &  size 
)

Retrieve DMRS symbols

3GPP standard: TS38.211 V15.2.0 Table 7.4.1.1.2-3

Parameters
[in]additionnal_positionNumber of additional positions
[in]l0First DMRS symbol
[out]outputDMRS symbols array
[out]sizeNumber of DMRS symbols

Definition at line 438 of file libphy.cpp.

◆ hard_demodulation()

void free5GRAN::phy::signal_processing::hard_demodulation ( vector< complex< float >>  signal,
int *  bits,
int  signal_length,
int  modulation_scheme 
)

Samples hard demodulation

Parameters
[in]signalInput IQ data to be demodulated
[in]signal_lengthNumber of symbols to be demodulated
[in]modulation_schemeModulation used (0: BPSK, 1: QPSK)
[out]bitsOutput hard bits

Definition at line 166 of file libphy.cpp.

◆ soft_demodulation()

void free5GRAN::phy::signal_processing::soft_demodulation ( vector< complex< float >>  signal,
double *  soft_bits,
int  signal_length,
int  modulation_scheme 
)

Samples soft demodulation

  • Compute minimum distance to 1 and 0 candidate sample
  • Take the difference between shortest distance to 1 and shortest distance to 0
Parameters
[in]signalInput IQ data to be demodulated
[out]bitsOutput LLR bits
[in]signal_lengthNumber of symbols to be demodulated
[in]modulation_schemeModulation used (0: BPSK, 1: QPSK)

Definition at line 203 of file libphy.cpp.

◆ transpose_signal()

void free5GRAN::phy::signal_processing::transpose_signal ( vector< complex< float >> *  input_signal,
float  freq_offset,
int  sample_rate,
int  input_length 
)

Shift signal in frequency domain by a frequency offset

Parameters
[in]input_signalInput signal to be shifted
[in]freq_offsetFrequency offset
[in]sample_rateSignal sample rate
[in]input_lengthInput signal length

Definition at line 282 of file libphy.cpp.