GitPedia

SDR Matlab OFDM 802.11n

:satellite: Using Software Designed Radio to transmit MIMO-OFDM QPSK signals at 5 GHz

From MeowLucian·Updated June 23, 2026·View on GitHub·

This simple OFDM demo is based on IEEE 802.11n OFDM format for testing SDR hardware. The project is written primarily in Matlab, distributed under the MIT License license, first published in 2018. Key topics include: 80211, ad9361, analog-devices, fmcomms, fmcomms3.

SDR_Matlab_OFDM_802.11n

npm

This simple OFDM demo is based on IEEE 802.11n OFDM format for testing SDR hardware.

Using Software Designed Radio (SDR) to transmit OFDM signals at 5 GHz.

Transmitter and Receiver hardware : Zedboard (Xilinx Zynq®-7000) + AD9361 (Analog Device-FMCOMMS3)

Hardware

Software needed :

  • Matlab R2016a
  • support package for Xilinx Zynq-Based Radio (R2016a version)

Before executing this code, please follow this tutorial to install support package for Xilinx Zynq-Based Radio in Matlab.

Code Structure :

Please open multiple Matlab windows to run Hardware_TX.m and Hardware_RX.m respectively.

Hardware_TX.m

TX_signal.mat

OFDM_TX.m

  • data_Payload_1.mat
  • data_Payload_2.mat
  • oversamp.m
  • setstate0_TX.m

Hardware_RX.m

OFDM_RX.m

  • Long_preamble_slot_Frequency.mat
  • HTL_k_slot_Frequency.mat
  • setstate0_RX.m

RX_test

  • RX.mat
  • RX2.mat

GUI :

  • GUI_TX

Program GUI_TX

  • GUI_RX

Program GUI_RX

Video Demo : https://www.youtube.com/watch?v=CiHpd1Z8qK8
Program GUI gif

System Model :

OFDM Block Diagram

<img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/OFDM_Block_Diagram.png" width="800">

Code Function :

Implemented

  • Data Signal Mapping
  • Packet Detection
  • Coarse/Fine Frequency Offset Estimation & Compensation
  • Channel Estimation & One-Tap Equalizer
  • Data De-Mapping

Not implemented yet

  • AGC (Auto Gain Control)
  • Fine Symbol Timing Estimation
  • Convolutional Decoding
  • De-Interleaving
  • Frame check calculation (It assumes every packet is the same length)

TX System Model

<img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/TX%20System%20Model.png" width="500">
  • Short Preamble <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/TX%20System%20Model_Short%20Preamble.png" width="800">
  • Long Preamble <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/TX%20System%20Model_Long%20Preamble.png" width="800">
  • HT-Long Preamble (Tone Interleaving) <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/TX%20System%20Model_HTLong%20Preamble.png" width="800">
  • Payload <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/TX%20System%20Model_Payload.png" width="600">
  • TX signal <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/TX%20System%20Model_Final.png" width="700">

TX RX Hardware Parameters

Center Frequency5 GHz
Baseband Sample Rate (Bandwidth)20 MHz
Ts (Sampling time)50 ns
Samples Per Frame3500
PC Host IP address192.168.3.1
TX IP address192.168.3.2
RX IP address192.168.3.3

The way to change Hardware IP / Mac address

Edit newip.sh file in SD card

# Flush existing config
ip addr flush dev eth0
ip link set dev eth0 down
# Set up new config
ip addr add 192.168.3.3/24 dev eth0
ip link set eth0 address 00:0A:35:00:01:23
ip route add default via 192.168.3.1
ip link set dev eth0 up

Then, use router DHCP hand setting mode to distribute network configuration parameters :

Router setting

RX System Model

<img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model.png" width="300">
  • "Delay and Correlate" algorithm for Packet Detection <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model_Delay%20and%20Correlate%20algorithm.png" width="500">
  • Packet Detection (normal case) , Threshold=0.75 <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model_Packet%20Detection.png" width="600">
  • Coarse CFO Estimation & Compensation <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model_Coarse%20CFO%20Estimation.png" width="600">
  • Fine CFO Estimation & Compensation <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model_Fine%20CFO%20Estimation.png" width="600">
  • MIMO Channel Estimation Diagram (Tone Interleaving) <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model_Channel%20Estimation.png" width="600">
  • Channel Estimation & Equalizer <img src="https://raw.githubusercontent.com/MeowLucian/SDR_Matlab_OFDM_802.11n/master/Picture/RX%20System%20Model_Channel%20Estimation%20%26%20Equalizer.png" width="600">

Contributors

Showing top 1 contributor by commit count.

View all contributors on GitHub →

This article is auto-generated from MeowLucian/SDR_Matlab_OFDM_802.11n via the GitHub API.Last fetched: 6/29/2026