GW-H5GSDR Logo
Edition-24a.2

Contents:

  • Course Overview
    • Course deliverables:
  • Pre-requisites
  • Getting Started with the Course
  • Course Contents
    • 1. Introduction to ADALM-Pluto SDR and its application programming interface
    • 2. Analysis of Wireless Channel Spectrum using Software Defined Radios
    • 3. Coarse Downlink Time Synchronization in 5G-Wireless Networks
    • 4. Implementation of OFDM in 5G networks
    • 5. Carrier Frequency Offset Estimation and Correction using PSS in 5G Networks
    • 6. Channel Estimation and Equalization for SSB/PBCH using PBCH-DMRS
    • 7. Implementation of PBCH Chain in 5G Networks
    • 8. PDCCH Implementation and Blind Decoding in 5G Networks
    • 9. Data Communication using PDSCH in 5G Networks
    • 10. MIMO-OFDM Systems in 5G Networks
    • 11. Important System Parameters and their effect on the 5G Networks Performance
  • Codes
    • Introduction to Software Defined Radios (SDRs) and Its Application Programming Interface
      • Import Python libraries
      • System Parameters
      • Set-up the SDR
      • Transmitting the data
      • Receiving the data
    • 2. Analysis of Wireless Channel Spectrum using ADALM-Pluto SDR
      • Wireless Spectrum Analysis based on Fast Fourier Transform techniques
        • 2. Import libraries
        • 2. System Parameters
        • 2. Setup SDRs
        • 2. Transmitter Side
          • 2. Generate Samples for transmission
          • 2. Transmit the samples
        • 2. Receiver Side
          • 2. Signal Acquisition: Receive the samples
        • 2. Spectrum Computation
          • 2. Compute the power spectral density
          • 2. Display the power spectral density
        • 2. Quasi realtime Spectrum Analysis
      • Transmitter-side: Wireless Spectrum Analysis based on Fast Fourier Transform techniques
        • 2.1 Import libraries
        • 2.1 System Parameters
        • 2.1 Setup SDRs
        • 2.1 Transmitter Side
          • 2.1 Generate Samples for transmission
          • 2.1 Transmit the samples
      • Receiver-side:Fast Fourier Transform based Spectrum Analysis
        • 2.2 Import libraries
        • 2.2 System Parameters
        • 2.2 Setup SDRs
        • 2.2 Receiver Side
          • 2.2 Signal Acquisition: Receive the samples
        • 2.2 Spectrum Computation
          • 2.2 Compute the power spectral density
          • 2.2 Display the power spectral density
        • 2.2 Quasi Real-time Spectrum Analysis
    • 3. Coarse Downlink Time/OFDM frame Synchronization in 5G-Wireless Networks
      • Downlink Time/Frame Synchronization using PSS in 5G Networks
        • 3. Import Libraries
          • 3. Import Some Basic Python Libraries
          • 3. Import 5G Libraries
        • 3. Emulation Parameters
        • 3. Generate SSB Parameters
        • Generate PSS
        • Generate SSS
        • Generate PBCH-DMRS
        • Generate PBCH Payload
        • Generate SSB
        • Load SSB into SSB resource Grid
        • 3. Construct Transmission Grid and Generate Time Domain Samples
        • OFDM Modulation
        • 3. SDR-Setup Configurations
        • 3. Transmission: SDR RF Transmitter
        • 3. Reception: SDR RF Receiver
        • 3. Time Synchronization: Based on PSS Correlation
        • 3. Frame Synchronization: Visualization
        • 3. Saving Running frames
      • BS Side Implementation-Downlink Time/Frame Synchronization using PSS in 5G Networks
        • 3.1 Import Libraries
          • 3.1 Import Some Basic Python Libraries
          • 3.1 Import 5G Libraries
        • 3.1 Emulation Parameters
        • 3.1 Generate SSB Parameters
        • 3.1 Construct Transmission Grid and Generate Time Domain Samples
        • 3.1 SDR-Setup Configurations
        • 3.1 Transmission: SDR RF Transmitter
      • UE Side Implementation-Downlink Time/Frame Synchronization using PSS in 5G Networks
        • 3.2 Import Libraries
          • 3.2 Import Some Basic Python Libraries
          • 3.2 Import 5G Libraries
        • 3.2 Emulation Parameters
        • 3.2 SDR-Setup Configurations
        • 3.2 Reception: SDR RF Receiver
        • 3.2 Time Frequency Configurations
        • 3.2 Time Synchronization: Based on PSS Correlation
        • 3.2 Frame Synchronization: Visualization
        • 3.2 Saving Running frames
    • 4. OFDM in 5G Networks
      • OFDM in 5G Networks
        • 4. Import Libraries
          • 4. Import Python and SDR Libraries
          • 4. Import 5G Toolkit Libraries
        • 4. Emulation Parameters
        • 4. Transmitter Implementation
        • 4. Generate the SSB Grid for synchronization
        • 4. PSS, SSS, PBCH, DMRS Generation
        • 4. SSB Generation
        • 4. Generate transmission Grid
        • 4. OFDM Modulation: Transmitted SSB
        • 4. SDR-Setup Configurations
        • 4. Transmission
        • 4. Reception
        • 4. Receive Samples from SDR
        • 4. Time Synchronization: Detection of PSS
        • 4. OFDM Demodulation: Receiver
        • 4. Quasi-realtime reception of OFDM Grid
      • Transmitter side implementation: OFDM in 5G Networks
        • 4.1 Import Libraries
          • 4.1 Import Python and SDR Libraries
          • 4.1 Import 5G Toolkit Libraries
        • 4.1 Emulation Parameters
        • 4.1 Transmitter Implementation
        • 4.1 Generate the SSB Grid for synchronization
        • 4.1 PSS, SSS, PBCH, DMRS Generation
        • 4.1 SSB Generation
        • 4.1 Generate transmission Grid
        • 4.1 OFDM Modulation: Transmitted SSB
        • 4.1 SDR-Setup Configurations
        • 4.1 Transmission
      • Receiver side implementation: OFDM in 5G Networks
        • 4.2 Import Libraries
          • 4.2 Import Python and SDR Libraries
          • 4.2 Import 5G Toolkit Libraries
        • 4.2 Emulation Parameters
        • 4.2 SDR-Setup Configurations
        • 4.2 Reception
        • 4.2 Receive Samples from SDR
        • 4.2 Time Synchronization: Detection of PSS
        • 4.2 OFDM Demodulation: Receiver
        • 4.2 Quasi-realtime reception of OFDM Grid
    • 5. Carrier frequency offset (CFO) Estimation and Correction in 5G networks
      • 5. Carrier frequency offset estimation and correction in 5G networks
        • 5. Import Libraries
          • 5. Import Python and SDR Libraries
        • 5. Toolkit Libraries
        • 5. Simulation Parameters
        • 5. PBCH Payload Generation: MIB + ATI
        • 5. PSS, SSS, PBCH, DMRS Generation
        • 5. Constellation Diagram: Base Station
        • 5. SSB Generation
        • 5. OFDM Implementation: Transmission of SSB
        • 5. SDR Setup
        • 5. Transmission of samples
        • 5. Receiver
          • 5. Receive Samples from SDR
        • 5. Time Synchronization: Coarse Tuning
        • 5. CFO Estimation
        • 5. OFDM Demodulation
        • 5. Extract SSB Grid
        • 5. PBCH Processing
        • 5. Constellation Diagram: User Equipment
        • 5. Error vector magnitude (EVM)
        • 5. Quasi-realtime: CFO Estimation and Reconstruction
      • 5.1 Base-station side: Carrier frequency offset (CFO) estimation and correction in 5G networks
        • 5.1 Import Libraries
          • 5.1 Import Python and SDR Libraries
        • 5.1 Toolkit Libraries
        • 5.1 Simulation Parameters
        • 5.1 PBCH Payload Generation: MIB + ATI
        • 5.1 PSS, SSS, PBCH, DMRS Generation
        • 5.1 Constellation Diagram: Base Station
        • 5.1 SSB Generation
        • 5.1 OFDM Implementation: Transmission of SSB
        • 5.1 SDR Setup
        • 5.1 Transmission of samples
      • 5. UE_Side: Carrier frequency offset (CFO) estimation and correction in 5G networks
        • 5.2 Import Libraries
          • 5.2 Import Python and SDR Libraries
        • 5.2 Toolkit Libraries
        • 5.2 Simulation Parameters
        • 5.2 TimeFrequency Parameters
        • 5.2 SDR Setup
        • 5.2 Receiver
          • 5.2 Receive Samples from SDR
        • 5.2 Time Synchronization: Coarse Tuning
        • 5.2 CFO Estimation
        • 5.2 OFDM Demodulation
        • 5.2 Extract SSB Grid
        • 5.2 PBCH Processing
        • 5.2 Constellation Diagram: User Equipment
        • 5.2 Error vector magnitude (EVM)
        • 5.2 Quasi-realtime: CFO Estimation and Reconstruction
    • 6. Channel Estimation and Equalization for SSB-PBCH using PBCH-DMRS
      • 6. Channel Estimation and Equalization for SSB-PBCH in 5G Networks
        • 6. Import Libraries
          • 6. Import Python and SDR Libraries
          • 6. Import 5G Toolkit Libraries
        • 6. Emulation Parameters
        • 6. PBCH Payload Generation: MIB + ATI
        • 6. PSS, SSS, PBCH, DMRS Generation
        • 6. Constellation Diagram: Base Station
        • 6. SSB Generation
        • 6. OFDM Implementation– Transmission of SSB.
        • 6. SDR Setup
        • 6. Transmission
        • 6. Receive Samples from SDR
        • 6. Time Synchronization: Coarse Tuning
        • 6. CFO Estimation
        • 6. OFDM Demodulation
        • 6. Extract SSB Grid
        • 6. SSS and DMRS Parameter Detection
        • 6. Channel Estimation and PBCH Symbol Equalization
        • 6. PBCH Decoding
        • 6. Constellation Diagram: UE
        • 6. Checking whether CRC is correct
        • 6. Quasi-realtime: CFO Estimation and Reconstruction
      • 6. BS-Side: Channel Estimation and Equalization for SSB-PBCH in 5G Networks
        • 6.1 Import Libraries
          • 6.1 Import Python and SDR Libraries
          • 6.1 Import 5G Toolkit Libraries
        • 6.1 Emulation Parameters
        • 6.1 PBCH Payload Generation: MIB + ATI
        • 6.1 PSS, SSS, PBCH, DMRS Generation
        • 6.1 Constellation Diagram: Base Station
        • 6.1 SSB Generation
        • 6.1 OFDM Implementation– Transmission of SSB.
        • 6.1 SDR Setup
        • 6.1 Transmission
      • 6. UE-Side: Channel Estimation and Equalization for SSB-PBCH in 5G Networks
        • 6.2 Import Libraries
          • 6.2 Import Python and SDR Libraries
          • 6.2 Import 5G Toolkit Libraries
        • 6.2 Emulation Parameters
        • 6.2 Time-frequency Parameter
        • 6.2 SDR Setup
        • 6.2 Receive Samples from SDR
        • 6.2 Time Synchronization: Coarse Tuning
        • 6.2 CFO Estimation
        • 6.2 OFDM Demodulation
        • 6.2 Extract SSB Grid
        • 6.2 SSS and DMRS Parameter Detection
        • 6.2 Channel Estimation and PBCH Symbol Equalization
        • 6.2 PBCH Decoding
        • 6.2 Constellation Diagram: UE
        • 6.2 Checking whether CRC is correct
        • 6.2 Quasi-realtime: CFO Estimation and Reconstruction
    • 7. PBCH and MIB in 5G Networks
      • 7. Physical Broadcast Channel in 5G Networks
        • 7. Import Libraries
          • 7. Import Python and SDR Libraries
          • 7. Import 5G Toolkit Libraries
          • 7. Import PBCH Components
        • 7. Emulation Configurations
        • 7. PBCH Payload Generation: MIB + ATI
        • 7. PSS, SSS, PBCH, DMRS Generation
        • 7. PBCH: Transmitter
        • 7. Constellation Diagram: Base Station
        • 7. SSB Generation
        • 7. OFDM Implementation
        • 7. SDR Setup
        • 7. Transmission
        • 7. Receive Samples from SDR
        • 7. Time Synchronization: Coarse Tuning
        • 7. CFO Estimation
        • 7. OFDM Demodulation
        • 7. Extract SSB Grid
        • 7. PBCH Processing
        • 7. Channel Estimation and PBCH Symbol Equalization
        • 7. PBCH Decoding
        • 7. PBCH Receiver: Components
        • 7. Constellation Diagram: UE
        • 7. Checking whether CRC is correct
        • 7. MIB and ATI Parameters at User Equioment
      • 7. Base-station side: Physical Broadcast Channel in 5G Networks
        • 7.1 Import Libraries
          • 7.1 Import Python and SDR Libraries
          • 7.1 Import 5G Toolkit Libraries
          • 7.1 Import PBCH Components
        • 7.1 Emulation Configurations
        • 7.1 PBCH Payload Generation: MIB + ATI
        • 7.1 PSS, SSS, PBCH, DMRS Generation
        • 7.1 PBCH: Transmitter
        • 7.1 Constellation Diagram: Base Station
        • 7.1 SSB Generation
        • 7.1 OFDM Implementation
        • 7.1 SDR Setup
        • 7.1 Transmission
        • MIB Information: Transmitted
      • 7. User equipment side: Physical Broadcast Channel in 5G Networks
        • 7.2 Import Libraries
          • 7.2 Import Python and SDR Libraries
          • 7.2 Import 5G Toolkit Libraries
          • 7.2 Import PBCH Components
        • 7.2 Emulation Configurations
        • 7.2 Time Frequency Parameters
        • 7.2 SDR Setup
        • 7.2 Receive Samples from SDR
        • 7.2 Time Synchronization: Coarse Tuning
        • 7.2 CFO Estimation
        • 7.2 OFDM Demodulation
        • 7.2 Extract SSB Grid
        • 7.2 PBCH Processing
        • 7.2 Channel Estimation and PBCH Symbol Equalization
        • 7.2 PBCH Decoding
        • 7.2 PBCH Receiver: Components
        • 7.2 Constellation Diagram: UE
        • 7.2 Checking whether CRC is correct
        • 7.2 MIB and ATI Parameters at User Equioment
    • 8. Blind Decoding of Physical Downlink Control Channel in 5G Networks
      • 8. Blind Decoding Of Physical Downlink Control Channel on Plutto-SDR
        • 8. Import Libraries
          • 8. Import Python and SDR Libraries
          • 8. Import 5G Toolkit Libraries
        • 8. Emulation Configurations
        • 8. Transmitter Implementation
        • 8. Generate the SSB Grid for synchronization
        • 8. CORESET and Search Space Set Parameters
        • 8. Display Grids
          • 8. PDCCH Grid
          • 8. SSB Grid
          • 8. SSB, PDCCH Merged Grid
        • 8. Constellation Diagram
        • 8. OFDM Modulation: Tx
        • 8. SDR-Setup Configurations
        • 8. Transmission: SDR RF Transmitter
        • 8. Receiver Implementation
        • 8. Reception: SDR RF Receiver
        • 8. Time Synchronization: Based on PSS Correlation
        • 8. OFDM Demodulation and SSB Extraction
        • 8. SSB Grid: Transmitter and Receiver
        • 8. Spectrum: Transmitted Grid and Received Grid
        • 8. Parameter Estimation for SSB and PBCH
        • 8. Channel Estimation and PBCH Symbol Equalization
        • 8. PBCH Decoding and Constellation
        • 8. Performance Verification
        • 8. Channel Estimation and Equalization of PDCCH
        • 8. Blind Decoding of PDCCH candidates
          • 8. Received Constellation
        • 8. Quasi real time animation
      • 8.1 Base station side: Blind Decoding Of Physical Downlink Control Channel on Plutto-SDR
        • 8.1 Import Libraries
          • 8.1 Import Python and SDR Libraries
          • 8.1 Import 5G Toolkit Libraries
        • 8.1 Emulation Configurations
        • 8.1 Transmitter Implementation
        • 8.1 Generate the SSB Grid for synchronization
          • 8.1 CORESET and Search Space Set Parameters
          • 8.1 Display Grids
        • 8.1 Constellation Diagram
        • 8.1 OFDM Modulation: Tx
        • 8.1 SDR-Setup Configurations
        • 8.1 Transmission: SDR RF Transmitter
      • 8.2 User-Equipment side: Blind Decoding Of Physical Downlink Control Channel on Plutto-SDR
        • 8.2 Import Libraries
          • 8.2 Import Python and SDR Libraries
          • 8.2 Import 5G Toolkit Libraries
        • 8.2 Emulation Configurations
        • 8.2 SDR-Setup Configurations
        • 8.2 Receiver Implementation
        • 8.2 Reception: SDR RF Receiver
        • 8.2 Time-Frequency Parameters
        • 8.2 Time Synchronization: Based on PSS Correlation
        • 8.2 CFO Estimation
        • 8.2 OFDM Demodulation and SSB Extraction
        • 8.2 Spectrum: Received Grid
        • 8.2 Parameter Estimation for SSB and PBCH
        • 8.2 Channel Estimation and PBCH Symbol Equalization
        • 8.2 PBCH Decoding and Constellation
        • 8.2 CORESET and Search Space Parameters
        • 8.2 Channel Estimation and Equalization of PDCCH
        • Blind Decoding
          • Blind Decoding of PDCCH candidates
          • 8.2 Received Constellation
        • 8.2 Quasi-real-time simulation
    • 9. Data Communication in 5G Networks using Physical Downlink Shared Channel
      • 9. Downlink Data Communication in 5G Networks
        • 9. Import Python Libraries
        • 9. 5G Toolkit Libraries
        • 9. Emulation Parameters
        • 9. PDSCH Transmitter Implementation
        • 9. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 9. Generate the PDSCH Resource Grid
        • 9. SSB Transmitter Implementation
        • 9. Generate the SSB Resource Grid
        • 9. SDR-Setup Configurations
        • 9. Transmission: SDR RF Transmitter
        • 9. Receiver Implementation: SSB
        • 9. Reception: SDR RF Receiver
        • 9. Time Synchronization: Based on PSS Correlation
        • 9. PBCH Receiver
        • 9. SSB Grid: Transmitter and Receiver
        • 9. Spectrum: Transmitted Grid and Received Grid
        • 9. PBCH Decoding and Constellation
        • 9. Performance Verification
        • 9. PDSCH Receiver Implementation
          • 9. Extract PDSCH Resource Grid
          • 9. PDSCH Receiver
          • 9. Constellation Diagram
        • 9. Key Performance Indicators
        • Quasi-realtime simulation
      • 9. Base-station side: Downlink Data Communication in 5G Networks
        • 9.1. Import Python Libraries
        • 9.1. 5G Toolkit Libraries
        • 9.1. Emulation Parameters
        • 9.1. PDSCH Transmitter Implementation
        • 9.1. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 9.1. Generate the PDSCH Resource Grid
        • 9.1. SSB Transmitter Implementation
        • 9.1. Generate the SSB Resource Grid
        • 9.1. SDR-Setup Configurations
        • 9.1. Transmission: SDR RF Transmitter
      • 9. UE Side: Downlink Data Communication in 5G Networks
        • 9.2. Import Python Libraries
        • 9.2. 5G Toolkit Libraries
        • 9.2. Emulation Parameters
        • Time-Frequency Parameters
        • 9.2. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 9.2. SDR-Setup Configurations
        • 9.2. Receiver Implementation: SSB
        • 9.2. Reception: SDR RF Receiver
        • 9.2. Time Synchronization: Based on PSS Correlation
        • 9.2. PBCH Receiver
        • 9.2. SSB Grid: Transmitter and Receiver
        • 9.2. Spectrum: Transmitted Grid and Received Grid
        • 9.2. PBCH Decoding and Constellation
        • 9.2. PDSCH Receiver Implementation
          • 9.2. Extract PDSCH Resource Grid
          • 9.2. PDSCH Receiver
          • 9.2. Constellation Diagram
        • 9.2. Key Performance Indicators
        • 9.2. Quasi-realtime simulation
    • 10. MIMO-OFDM in 5G Networks
      • 10. MIMO-OFDM in Spatial Multiplexing Mode in 5G Networks
        • 10. Import Python Libraries
        • 10. 5G Toolkit Libraries
        • 10. Emulation Parameters
        • 10. PDSCH Transmitter Implementation
        • 10. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 10. Generate the PDSCH Resource Grid
        • 10. SSB Transmitter Implementation
        • 10. Generate the SSB Resource Grid
        • 10. Precoding and Beamforming Architecture
        • 10. SDR-Setup Configurations
        • 10. Transmission: SDR RF Transmitter
          • 10. Precoding and Beamforming the OFDM signal
        • 10. Receiver Implementation: SSB
        • 10. Reception: SDR RF Receiver
        • 10. Time Synchronization: Based on PSS Correlation
        • 10. PBCH Receiver
        • 10. SSB Grid: Transmitter and Receiver
        • 10. Spectrum: Transmitted Grid and Received Grid
        • 10. PBCH Decoding and Constellation
        • 10. Performance Verification
        • 10. PDSCH Receiver Implementation
          • 10. Extract PDSCH Resource Grid
          • 10. PDSCH Receiver
          • 10. Constellation Diagram
        • 10. Key Performance Indicators
        • 10. Quasi-realtime simulation: MIMO in Spatial Multiplexing Mode
      • 10 MIMO-OFDM in Spatial Diversity Mode in 5G Networks
        • 10.1 Import Python Libraries
        • 10.1. 5G Toolkit Libraries
        • 10.1. Emulation Parameters
        • 10.1. PDSCH Transmitter Implementation
        • 10.1. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 10.1. Generate the PDSCH Resource Grid
        • 10.1. SSB Transmitter Implementation
        • 10.1. Generate the SSB Resource Grid
        • 10.1 Precoding and Beamforming Architecture
        • 10.1. SDR-Setup Configurations
        • 10.1. Transmission: SDR RF Transmitter
          • 10.1 Precoding and Beamforming the OFDM signal
        • 10.1. Receiver Implementation: SSB
        • 10.1. Reception: SDR RF Receiver
        • 10.1. Time Synchronization: Based on PSS Correlation
        • 10.1. PBCH Receiver
        • 10.1. SSB Grid: Transmitter and Receiver
        • 10.1. Spectrum: Transmitted Grid and Received Grid
        • 10.1. PBCH Decoding and Constellation
        • 10.1. Performance Verification
        • 10.1. PDSCH Receiver Implementation
          • 10.1. Extract PDSCH Resource Grid
          • 10.1. PDSCH Receiver
          • 10.1. Constellation Diagram
        • 10.1. Key Performance Indicators
        • 10.1. Quasi-realtime simulation: MIMO in Spatial Diversity Mode
    • 11. Effect of System Parameters on the Performance of 5G Networks
      • 11.1 Effect of Bandwidth on 5G Networks Performance
        • 11.1. Import Python Libraries
        • 11.1. 5G Toolkit Libraries
        • 11.1. Emulation Parameters
          • 11.1. Initialization
        • 11.1. Time Frequency Parameters
        • 11.1. PDSCH Transmitter Implementation
        • 11.1. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 11.1. Generate the PDSCH Resource Grid
        • 11.1. SSB Transmitter Implementation
        • 11.1. Generate the SSB Resource Grid
        • 11.1.Precoding and Beamforming Architecture
        • 11.1. SDR-Setup Configurations
        • 11.1. Transmission: SDR RF Transmitter
          • 11.1. Precoding and Beamforming the OFDM signal
        • 11.1. Receiver Implementation: SSB
        • 11.1. Reception: SDR RF Receiver
        • 11.1. Time Synchronization: Based on PSS Correlation
        • 11.1. PBCH Receiver
        • 11.1. SSB Grid: Transmitter and Receiver
        • 11.1. Spectrum: Transmitted Grid and Received Grid
        • 11.1. PBCH Decoding and Constellation
        • 11.1. Performance Verification
        • 11.1. PDSCH Receiver Implementation
          • 11.1. Extract PDSCH Resource Grid
          • 11.1. PDSCH Receiver
          • 11.1. Constellation Diagram
        • 11.1. Key Performance Indicators
        • 11.1. Bandwidth vs Network Throughput
      • 11.3 Effect of Modulation Order and Coding Rate (MCS) on 5G Networks Performance
        • 11.3. Import Python Libraries
        • 11.3. 5G Toolkit Libraries
        • 11.3. Emulation Parameters
          • 11.3. Initialization
        • 11.3. Time Frequency Parameters
        • 11.3. PDSCH Transmitter Implementation
        • 11.3. Generate the PDSCH related parameters: Use PDSCH Configurations
        • 11.3. Generate the PDSCH Resource Grid
        • 11.3. SSB Transmitter Implementation
        • 11.3. Generate the SSB Resource Grid
        • 11.3. SDR-Setup Configurations
        • 11.3. Receiver Implementation: SSB
        • 11.3. Reception: SDR RF Receiver
        • 11.3. Time Synchronization: Based on PSS Correlation
        • 11.3. PBCH Receiver
        • 11.3. SSB Grid: Transmitter and Receiver
        • 11.3. Spectrum: Transmitted Grid and Received Grid
        • 11.3. PBCH Decoding and Constellation
        • 11.3. Performance Verification
        • 11.3. PDSCH Receiver Implementation
          • 11.3. Extract PDSCH Resource Grid
          • 11.3. PDSCH Receiver
          • 11.3. Constellation Diagram
        • 11.3. Key Performance Indicators
        • 11.3. MCS Index (\(Q_m, r\)) vs Network Throughput
  • Upcoming versions of this Course
    • Edition-24a.3+ of GW-H5GSDR
    • Edition-24b of GW-H5GSDR
    • Edition-25a of GW-H5GSDR
    • 6G Features
  • Contributors to this course
  • Support Us
    • Cite this course
  • Downloads
  • Report your concerns
  • Back to 5G-Toolkit
GW-H5GSDR
  • Codes
  • 9. Data Communication in 5G Networks using Physical Downlink Shared Channel
  • 9. Base-station side: Downlink Data Communication in 5G Networks

YouTube logo Watch on YouTube View on GitHub Download notebook

9. Base-station side: Downlink Data Communication in 5G Networks

In this project we will demonstrate the transmission and reception of the data from base-station (BS) using low cost SDRs. The whole simulation consists of two parts:

Transmitter side:

  1. Generate the SSB block

  2. Generate the transport block ==> Process it with PDSCH chain ==> Create the slot resource grids

  3. Generate the resource grid and load SSB + PDSCH both into it.

  4. Pass the resource grid through the OFDM modulator: Generate the time domain I/Q samples.

  5. Pass it to the SDR and radiate the signal to the medium.

Receiver side:

  1. Sample the medium to receive the samples and store thm in the buffer.

  2. Downlink synchronization

    • This is performed using synchronization signal block (SSB).

    • Helps with

      • time/frame synchronization.

      • Coarse CFO correction.

      • Cell ID detection.

      • Decoding MIB information.

  3. Data transmission and decoding

SSB Transmitter

9.1. Import Python Libraries

[1]:
# %matplotlib widget

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.animation as animation

import numpy as np
import adi

# from IPython.display import display, HTML
# display(HTML("<style>.container { width:98% !important; }</style>"))

9.1. 5G Toolkit Libraries

[2]:
import sys
sys.path.append("../../../../")

from toolkit5G.SequenceGeneration import PSS, SSS, DMRS
from toolkit5G.PhysicalChannels   import PBCH
from toolkit5G.ResourceMapping    import SSB_Grid, ResourceMapperSSB
from toolkit5G.OFDM               import OFDMModulator
from toolkit5G.MIMOProcessing     import AnalogBeamforming
from toolkit5G.Configurations     import TimeFrequency5GParameters, GenerateValidSSBParameters

from toolkit5G.SequenceGeneration import PSS, SSS, DMRS
from toolkit5G.PhysicalChannels   import PBCH, PBCHDecoder
from toolkit5G.ResourceMapping    import SSB_Grid, ResourceMapperSSB
from toolkit5G.OFDM               import OFDMModulator, OFDMDemodulator
from toolkit5G.MIMOProcessing     import AnalogBeamforming, ReceiveCombining
from toolkit5G.ReceiverAlgorithms import PSSDetection, SSSDetection, ChannelEstimationAndEqualization, DMRSParameterDetection
from toolkit5G.Configurations     import TimeFrequency5GParameters, GenerateValidSSBParameters


from toolkit5G.PhysicalChannels.PDSCH import ComputeTransportBlockSize
from toolkit5G.PhysicalChannels       import PDSCHLowerPhy, PDSCHUpperPhy, PDSCHDecoderLowerPhy, PDSCHDecoderUpperPhy
from toolkit5G.Configurations         import PDSCHLowerPhyConfiguration, PDSCHUpperPhyConfiguration
from toolkit5G.SymbolMapping          import Mapper, Demapper
from toolkit5G.Scrambler              import DeScrambler, Scrambler
from toolkit5G.SymbolMapping          import Demapper
from toolkit5G.PhysicalChannels.PDSCH import LayerDemapper

from toolkit5G.PhysicalChannels   import PBCHDecoder
from toolkit5G.OFDM               import OFDMDemodulator
from toolkit5G.ReceiverAlgorithms import PSSDetection, SSSDetection, ChannelEstimationAndEqualizationPBCH, DMRSParameterDetection, CarrierFrequencyOffsetEstimation, ChannelEstimationAndEqualizationPDSCH

from toolkit5G.PhysicalChannels       import PDSCHLowerPhy, PDSCHUpperPhy, PDSCHDecoderLowerPhy, PDSCHDecoderUpperPhy

9.1. Emulation Parameters

[3]:
# Carrier Frequency
carrierFrequency = 1*10**9
numBatches       = 9        # Number of batches considered for simulation
scs              = 15*10**3   # Subcarrier Spacing for simulation
numBSs           = 1          # Number of BSs considered for simulation
bandwidth        = 30*10**6

# Number of UEs considered for simulation
numUEs           = numBatches # For now we are assuming that the numbatches are captured via numUEs
numRB            = 170         # Number of Resource mapping considered for simulation | # 1 RB = 12 subcarrier
slotNumber       = 0 # Index of the slot considered for simulation
Nfft             = 2048       # FFTSize

Nt               = 1

print("************ Simulation Parameters *************")
print()
print("     numBatches: "+str(numBatches))
print("          numRB: "+str(numRB))
print("       fft Size: "+str(Nfft))
print("         numBSs: "+str(numBSs))
print("         numUEs: "+str(numUEs))
print("            scs: "+str(scs))
print("     slotNumber: "+str(slotNumber))
print("Num of Antennas: "+str(Nt))
print()
print("********************************************")
************ Simulation Parameters *************

     numBatches: 9
          numRB: 170
       fft Size: 2048
         numBSs: 1
         numUEs: 9
            scs: 15000
     slotNumber: 0
Num of Antennas: 1

********************************************

9.1. PDSCH Transmitter Implementation

PDSCH Transmitter

9.1. Generate the PDSCH related parameters: Use PDSCH Configurations

[4]:
######################################### PDSCH Lower Physical Layer Parameters #########################################
pdschMappingType       = 'PDSCH-mapping-type-B'   # "PDSCH mapping type A" or "PDSCH mapping type B"
maxLength              = 'len1'                   #
startSymbol            = 2                        #
numSymbols             = 12                       #
betaDMRS               = 1                        # 0 to 1
configurationType      = "Configuration-type-1"   # "Configuration-type-1" or "Configuration-type-2"
dmrsTypeAPosition      = "pos2"                   # "pos2" or "pos3"
dmrsAdditionalPosition = 'pos1'                   # "pos0", "pos1", "pos2" or "pos3"
ld                     = numSymbols
l0                     = startSymbol
l1                     = 11
rank                   = 1
pdschLowerPhyConfig    = PDSCHLowerPhyConfiguration(pdschMappingType = pdschMappingType, maxLength = maxLength,
                                                    betaDMRS = betaDMRS, configurationType = configurationType,
                                                    dmrsTypeAPosition = dmrsTypeAPosition, rank = rank,
                                                    dmrsAdditionalPosition = dmrsAdditionalPosition, l0 = l0,
                                                    l1 = l1, startSymbol = startSymbol, numSymbols= numSymbols,
                                                    ld = ld, scramblingID = 0, nSCID = 0)
scramblingID           = pdschLowerPhyConfig.scramblingID
nSCID                  = pdschLowerPhyConfig.nSCID


######################################### PDSCH Upper Physical Layer Parameters #########################################

numTBs                 = 1
mcsIndex               = 15
mcsTable               = 'pdschTable1'
scalingField           = '00'
additionalOverhead     = 0
scalingField           = None
additionalOverhead     = None

pdschUpperPhyConfig    = PDSCHUpperPhyConfiguration(pdschMappingType = pdschMappingType, configurationType = configurationType,
                                                    dmrsTypeAPosition = dmrsTypeAPosition, maxLength = maxLength, numTBs = numTBs,
                                                    mcsIndex = mcsIndex, dmrsAdditionalPosition = dmrsAdditionalPosition, l0 = l0,
                                                    mcsTable = mcsTable, ld = ld, l1 = l1, startSymbol = startSymbol, numRB = numRB,
                                                    numSymbols = numSymbols, rank = rank, scalingField = scalingField,
                                                    additionalOverhead = additionalOverhead)

numTBs                 = pdschUpperPhyConfig.numTBs
mcsIndex               = pdschUpperPhyConfig.mcsIndex
mcsTable               = pdschUpperPhyConfig.mcsTable

numlayers              = pdschUpperPhyConfig.numlayers
tbLen1                 = pdschUpperPhyConfig.tbLen1
codeRate               = pdschUpperPhyConfig.codeRate
modOrder               = pdschUpperPhyConfig.modOrder

scalingField           = pdschUpperPhyConfig.scalingField
additionalOverhead     = pdschUpperPhyConfig.additionalOverhead
dmrsREs                = 6
dmrsREs                = pdschUpperPhyConfig.dmrsREs
scalingField           = pdschUpperPhyConfig.scalingField


numTargetBits1         = pdschUpperPhyConfig.numTargetBits1
if(numTBs == 2):
    numTargetBits1     = pdschUpperPhyConfig.numTargetBits1
    numTargetBits2     = pdschUpperPhyConfig.numTargetBits2
    tbLen2             = pdschUpperPhyConfig.tbLen2

numTargetBits          = pdschUpperPhyConfig.numTargetBits
************ PDSCH Parameters *************

       pdschMappingType: PDSCH-mapping-type-B
            startSymbol: 2
             numSymbols: 12
               betaDMRS: 1
                   rank: 1
      configurationType: Configuration-type-1
              maxLength: len1
      dmrsTypeAPosition: pos2
 dmrsAdditionalPosition: pos1
           Duration, ld: 12
       Start symbol, l0: 2
     Start symbol-1, l1: 11
          num of Layers: 1

********************************************
********************************************
          tbsize-1: 54296

            numTBs: 1
            numCBs: 7
         numLayers: 1 | LayerperTB: [1 0]
             numRB: 170
          coderate: 0.6015625
          modOrder: 4
additionalOverhead: 0
numberTargetBits: 89760
********************************************
[5]:
dmrsREs, scalingField, additionalOverhead
[5]:
(12, '00', 0)

9.1. Generate the PDSCH Resource Grid

[6]:

pdschUpperPhy = PDSCHUpperPhy(symbolsPerSlot = numSymbols, numRB = numRB, mcsIndex = mcsIndex, numlayers = numlayers, scalingField = scalingField, additionalOverhead = additionalOverhead, dmrsREs = dmrsREs, numTBs=numTBs, pdschTable = mcsTable, verbose = False) codeword = pdschUpperPhy(tblock = [None, None], rvid = [0, 0], enableLBRM = [False, False], numBatch = numBatches, numBSs = numBSs) rnti = 0 nID = 0 bits2 = codeword[1] if numTBs == 2 else None pdschLowerPhyChain = PDSCHLowerPhy(pdschMappingType, configurationType, dmrsTypeAPosition, maxLength, dmrsAdditionalPosition, l0, ld, l1) resourceGrid = pdschLowerPhyChain(codeword[0], numRB, rank, slotNumber, scramblingID, nSCID, rnti, nID, modOrder, startSymbol, bits2 = bits2) ## Load the resource Grid into the transmision Grid txGrid = np.zeros(resourceGrid.shape[0:-1]+(Nfft,), dtype= np.complex64) bwpOffset = np.int32(0.5*(Nfft-numRB*12)) txGrid[...,bwpOffset:bwpOffset+numRB*12] = np.sqrt(1/rank)*resourceGrid txGrid = txGrid/(np.linalg.norm(np.abs(txGrid), axis=-1)[...,np.newaxis] + 0.0001) pdschLowerPhyChain.displayDMRSGrid(), pdschLowerPhyChain.displayResourceGrid()

../../../../_images/api_Content_Codes_Tutorial-9%5BPDSCH%5D_9.BS_Side-5G_Data_Communication_using_PDSCH_10_1.png
[6]:
((<Figure size 640x480 with 2 Axes>,
  array([<Axes: title={'center': 'Port number: 0'}, xlabel='OFDM Symbol-Index', ylabel='Subcarrier-Index'>,
         <Axes: >], dtype=object)),
 None)
../../../../_images/api_Content_Codes_Tutorial-9%5BPDSCH%5D_9.BS_Side-5G_Data_Communication_using_PDSCH_10_3.png
[7]:
# Plot Resource Grid
#################################################################
fig, ax = plt.subplots()
plt.imshow(np.abs(txGrid[0,0,0]), cmap = 'hot', interpolation='nearest', aspect = "auto")
ax = plt.gca();
ax.grid(color='c', linestyle='-', linewidth=1)
ax.set_xlabel("Subcarrier-Index (k)")
ax.set_ylabel("OFDM Symbol Index (n)")
ax.set_title("Heat map of Transmit Grid")
# Gridlines based on minor ticks
plt.show()
../../../../_images/api_Content_Codes_Tutorial-9%5BPDSCH%5D_9.BS_Side-5G_Data_Communication_using_PDSCH_11_0.png

9.1. SSB Transmitter Implementation

SSB Transmitter

9.1. Generate the SSB Resource Grid

[8]:
## This class fetches valid set of 5G parameters for the system configurations
nSymbolFrame   = 14
numOFDMSymbols = 14
tfParams    = TimeFrequency5GParameters(bandwidth, scs, fftsize=Nfft)
tfParams(nSymbolFrame, typeCP = "normal")
nRB         = tfParams.numRBs        # SSB Grid size (Number of RBs considered for SSB transition)
Neff        = nRB*12
lengthCP    = (tfParams.lengthCP).astype(np.int32)    # CP length
#___________________________________________________________________

#### Generate MIB Information
lamda                           = 3e8/carrierFrequency
nSCSOffset                      = 1
ssbParameters                   = GenerateValidSSBParameters(carrierFrequency, nSCSOffset,
                                                             "caseA", ssbSubCarrierOffset = np.array([0]))

systemFrameNumber               = ssbParameters.systemFrameNumber
subCarrierSpacingCommon         = scs
ssbSubCarrierOffset             = ssbParameters.ssbSubCarrierOffset
DMRSTypeAPosition               = ssbParameters.DMRSTypeAPosition
controlResourceSet0             = ssbParameters.controlResourceSet0
searchSpace0                    = ssbParameters.searchSpace0

isPairedBand                    = ssbParameters.isPairedBand
nSCSOffset                      = ssbParameters.nSCSOffset
choiceBit                       = ssbParameters.choiceBit
ssbType                         = ssbParameters.ssbType
nssbCandidatesInHrf             = ssbParameters.nssbCandidatesInHrf
ssbIndex                        = ssbParameters.ssbIndex
hrfBit                          = ssbParameters.hrfBit
cellBarred                      = ssbParameters.cellBarred
intraFrequencyReselection       = ssbParameters.intraFrequencyReselection
withSharedSpectrumChannelAccess = ssbParameters.withSharedSpectrumChannelAccess

Nsc_ssb                         = 240
Nsymb_ssb                       = 4
#_______________________________________


N_ID2        = np.random.randint(3)

# Generate PSS sequence
pssObject    = PSS(N_ID2);
pssSequence  = pssObject()

N_ID1        = np.random.randint(336)
N_ID         = 3*N_ID1 + N_ID2

# Generate SSS sequence
sssObject    = SSS(N_ID1, N_ID2);
sssSequence  = sssObject()

# Generate DMRS sequence
dmrsLen      = 144;
dmrsObject   = DMRS("PBCH", N_ID, ssbIndex, nssbCandidatesInHrf, hrfBit)
# dmrsSeq = dmrs.getSequence("tensorflow")
dmrsSequence = dmrsObject(dmrsLen)


# Generate PBCH symbols
pbchObject   = PBCH(carrierFrequency, choiceBit, subCarrierSpacingCommon, DMRSTypeAPosition,
                   controlResourceSet0, searchSpace0, cellBarred, intraFrequencyReselection,
                   systemFrameNumber, ssbSubCarrierOffset, hrfBit, ssbIndex, N_ID,
                   nssbCandidatesInHrf)

pbchSymbols  = pbchObject()

## Generate SSB Object
ssbObject    = SSB_Grid(N_ID, True)
ssb          = ssbObject(pssSequence, sssSequence, dmrsSequence, pbchSymbols)  # generating SSB using PSS,SSS, PBCH payload and DMRS.

## Loading SSB to Resource Grid
ssbPositionInBurst    = np.zeros(nssbCandidatesInHrf, dtype=int)
ssbPositionInBurst[0] = 1

ssbRGobject    = ResourceMapperSSB(ssbType, carrierFrequency, isPairedBand, withSharedSpectrumChannelAccess)

offsetInRBs    = int((nRB-20)/2)
ssbGrid        = ssbRGobject(ssb[0], ssbPositionInBurst, offsetInSubcarriers = ssbSubCarrierOffset,
                      offsetInRBs = offsetInRBs, numRBs = nRB)[0:14]         # SSB Grid of size 14 X numbers of RBs x 12.
fig, ax = ssbObject.displayGrid(option=1)


firstSymbolIndex   = int(2)
numofGuardCarriers = (int((Nfft - Neff)/2), int((Nfft - Neff)/2))
offsetToPointA     = 0
firstSCIndex       = int(numofGuardCarriers[0] + offsetToPointA)

ssbResGrid = np.zeros((numOFDMSymbols, Nfft), dtype= np.complex64)
ssbResGrid[:, firstSCIndex:firstSCIndex+ssbGrid.shape[-1]] = ssbGrid

#__________________________________________________

## Concatenate the SSB and PDSCH Grid
X                 = np.concatenate([ssbResGrid, txGrid[:,0,0].reshape(-1,txGrid.shape[-1])], axis=0)

## OFDM Modulation at Transmitter
#####################################
modulator = OFDMModulator(lengthCP[1])
x_time    = modulator(X).flatten()
#______________________________________________________

# Plot Resource Grid
#################################################################
fig, ax = plt.subplots()
plt.imshow(np.abs(X).T, cmap = 'hot', interpolation='nearest', aspect = "auto")
ax = plt.gca();
ax.grid(color='c', linestyle='-', linewidth=1)
ax.set_xlabel("Subcarrier-Index (k)")
ax.set_ylabel("OFDM Symbol Index (n)")
ax.set_title("Heat map of Transmit Grid")
# Gridlines based on minor ticks
plt.show()
../../../../_images/api_Content_Codes_Tutorial-9%5BPDSCH%5D_9.BS_Side-5G_Data_Communication_using_PDSCH_13_0.png
../../../../_images/api_Content_Codes_Tutorial-9%5BPDSCH%5D_9.BS_Side-5G_Data_Communication_using_PDSCH_13_1.png

9.1. SDR-Setup Configurations

[9]:
## SDR Parameters
sample_rate         = Nfft*scs

# Pulse Shaping
numSamplesPerSymbol = 1

# number of samples returned per call to rx()
buffer_size         = int(Nfft*1.2*numSamplesPerSymbol*112)

# Basic SDR Setup
sdr = adi.Pluto("ip:192.168.3.1")
sdr.sample_rate           = int(sample_rate)

# Config Tx
sdr.tx_rf_bandwidth       = int(60*10**6) # filter cutoff, just set it to the same as sample rate
sdr.tx_lo                 = int(carrierFrequency)
sdr.tx_hardwaregain_chan0 = 0 # Increase to increase tx power, valid range is -90 to 0 dB

9.1. Transmission: SDR RF Transmitter

[10]:

# Start the transmitter sdr.tx_cyclic_buffer = True # Enable cyclic buffers scalingFactor = 1.1*2**17 pulseShaping = 1 sdr.tx(scalingFactor*x_time) # start transmitting
[11]:
np.abs(scalingFactor*x_time).max(), np.abs(scalingFactor*x_time).min()
[11]:
(11471.27841685508, 0.0)
[ ]:

[12]:
N_ID
[12]:
557
[ ]:

Previous Next

© Copyright 2024-2026, Gigayasa Wireless Private Limited.

Built with Sphinx using a theme provided by Read the Docs.