- To modify DMRS use -U flag followed by 3 integers
- Example: ./nr_ulsim -U 2 1 0
- 1st Value is the list of arguments -> e.g. 2
- 2nd Value is for TYPE{0=A,1=B} -> e.g. 1
- 3rd Value is for ADD_POS{0,1,2,3} -> e.g. 0
- To enable PTRS use -T flag followed by 3 integers
- Example: ./nr_ulsim -T 2 0 2
- 1st Value is the list of arguments -> e.g. 2
- 2nd Value is for L_PTRS{0,1,2} -> e.g. 0
- 3rd Value is for K_PTRS{2,4} -> e.g. 2
FEATURE STATEMENT:
- Introduce linear phase error noise model in Uplink at UE
- Perform common phase error (CPE) estimation and compensation at gNB
SOLUTION:
- A linear phase shift model is introduced in simulation.
- PTRS symbols are used to perform estimation of CPE from DMRS compensated signal
- The estimated values are interpolated in time domain and signal is compensated for the CPE.
- PTRS processing is done in Frequency Domain for each symbol in a slot and
LLR's are calculated for each symbol accordingly.
IMPLEMENTATION:
* sim.h/channle_sim.c
- Linear Phase Noise Generation model definition.
* nr_ul_channel_estimation.c/nr_ul_estimation.h
- CPE estimation from PTRS and DMRS compensated signal.
* nr_dmrs_rx.c/nr_refsig.h
- Regenerate PTRS symbols at gNB.
* nr_ulsch_demodulation.c
- Removed old PTRS processing code and move to a common PTRS processing function
* defs_gNB.h/init.c
- New PTRS variables definition and initialization
* nr_ulsch_ue.c
- Corrected PTRS parameter to get new PTRS symbols for each OFDM symbol
TESTING
* ulsim.c
- Added Phase noise, Enable PTRS signal and verified the output.
VERIFICATION
- The LLR are rotated back with estimated CPE and no error is observed in scrambling/decoding
- Check for timing_advance update _after_ RX (and TX) processing
- Update writeBlockSize when timing_advance value changes (for USRP)
- ignore timestamp when pre-reading the first OFDM symbol of a frame (for rfsimulator)
- do not busy wait for a finished RX-TX thread, use blocking wait instead