WiFi 802.11a Receiver
Decodes IEEE 802.11a frames from a 20 MS/s recording and prints each MAC header.
- Author Marc
- Category Wi-Fi
- Blocks 23
- Connections 23
- File
wifi/wifi_receiver.grc
Blocks used
| Block | Module | Used |
|---|---|---|
| Variable | GNU Radio | 3 |
| Delay | GNU Radio | 2 |
| Moving Average | GNU Radio | 2 |
| Complex Conjugate | GNU Radio | 1 |
| Complex to Mag | GNU Radio | 1 |
| Complex to Mag^2 | GNU Radio | 1 |
| Divide | GNU Radio | 1 |
| FFT | GNU Radio | 1 |
| GR World Recording | GNU Radio | 1 |
| Multiply | GNU Radio | 1 |
| Note | GNU Radio | 1 |
| QT GUI Waterfall Sink | GNU Radio | 1 |
| Stream to Vector | GNU Radio | 1 |
| Throttle | GNU Radio | 1 |
| WiFi Decode MAC | gr-ieee802_11 | 1 |
| WiFi Frame Equalizer | gr-ieee802_11 | 1 |
| WiFi Parse MAC | gr-ieee802_11 | 1 |
| WiFi Sync Long | gr-ieee802_11 | 1 |
| WiFi Sync Short | gr-ieee802_11 | 1 |
Notes in this flowgraph
- A 20 MS/s recording of 802.11a frames at BPSK 1/2 (6 Mbit/s), about 15 dB SNR. Short training sequence detection, long training sequence alignment, a 64-point FFT and the frame equalizer recover the OFDM symbols; WiFi Decode MAC runs the Viterbi decoder and checks the CRC, and WiFi Parse MAC prints each header to the console below.
Flowgraph source
wifi/wifi_receiver.grc
options:
parameters:
author: Marc
copyright: ''
description: Decodes IEEE 802.11a frames from a 20 MS/s recording and prints each MAC header.
generate_options: qt_gui
id: WiFi_802_11a_Receiver
title: WiFi 802.11a Receiver
states:
coordinate: [10, 10]
rotation: 0
state: enabled
blocks:
- name: samp_rate
id: variable
parameters:
comment: ''
value: '20000000'
states:
coordinate: [600, 10]
rotation: 0
state: enabled
- name: sync_length
id: variable
parameters:
comment: ''
value: '320'
states:
coordinate: [770, 10]
rotation: 0
state: enabled
- name: window_size
id: variable
parameters:
comment: ''
value: '48'
states:
coordinate: [950, 10]
rotation: 0
state: enabled
- name: average_corr
id: blocks_moving_average_xx
parameters:
affinity: ''
alias: ''
comment: ''
length: window_size
max_iter: '4000'
maxoutbuf: '0'
minoutbuf: '0'
scale: '1'
type: complex
vlen: '1'
states:
coordinate: [80, 550]
rotation: 0
state: enabled
- name: average_power
id: blocks_moving_average_xx
parameters:
affinity: ''
alias: ''
comment: ''
length: window_size + 16
max_iter: '4000'
maxoutbuf: '0'
minoutbuf: '0'
scale: '1'
type: float
vlen: '1'
states:
coordinate: [390, 670]
rotation: 0
state: enabled
- name: conjugate
id: blocks_conjugate_cc
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
states:
coordinate: [1040, 260]
rotation: 0
state: enabled
- name: corr_mag
id: blocks_complex_to_mag
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
states:
coordinate: [390, 570]
rotation: 0
state: enabled
- name: correlate
id: blocks_multiply_xx
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
num_inputs: '2'
type: complex
vlen: '1'
states:
coordinate: [1290, 260]
rotation: 0
state: enabled
- name: decode_mac
id: ieee802_11_decode_mac
parameters:
affinity: ''
alias: ''
comment: ''
debug: 'False'
log: 'False'
maxoutbuf: '0'
minoutbuf: '0'
states:
coordinate: [1430, 850]
rotation: 0
state: enabled
- name: delay_ltf
id: blocks_delay
parameters:
affinity: ''
alias: ''
comment: ''
delay: sync_length
maxoutbuf: '0'
minoutbuf: '0'
type: complex
states:
coordinate: [1230, 570]
rotation: 0
state: enabled
- name: delay_stf
id: blocks_delay
parameters:
affinity: ''
alias: ''
comment: ''
delay: '16'
maxoutbuf: '0'
minoutbuf: '0'
type: complex
states:
coordinate: [700, 260]
rotation: 0
state: enabled
- name: equalizer
id: ieee802_11_frame_equalizer
parameters:
affinity: ''
algo: ieee802_11.LS
alias: ''
bw: samp_rate
comment: ''
debug: 'False'
freq: '5320000000'
log: 'False'
maxoutbuf: '0'
minoutbuf: '0'
states:
coordinate: [1060, 830]
rotation: 0
state: enabled
- name: fft
id: fft_vxx
parameters:
affinity: ''
alias: ''
comment: ''
fft_size: '64'
forward: 'True'
maxoutbuf: '0'
minoutbuf: '0'
nthreads: '1'
shift: 'True'
type: complex
window: '[1.0] * 64'
states:
coordinate: [710, 830]
rotation: 0
state: enabled
- name: intro
id: note
parameters:
affinity: ''
alias: ''
comment: ''
note: A 20 MS/s recording of 802.11a frames at BPSK 1/2 (6 Mbit/s), about 15 dB SNR. Short training sequence detection, long training sequence alignment, a 64-point FFT and the frame equalizer recover the OFDM symbols; WiFi Decode MAC runs the Viterbi decoder and checks the CRC, and WiFi Parse MAC prints each header to the console below.
states:
coordinate: [1130, 10]
rotation: 0
state: enabled
- name: normalize
id: blocks_divide_xx
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
num_inputs: '2'
type: float
vlen: '1'
states:
coordinate: [700, 570]
rotation: 0
state: enabled
- name: parse_mac
id: ieee802_11_parse_mac
parameters:
affinity: ''
alias: ''
comment: ''
debug: 'True'
log: 'False'
maxoutbuf: '0'
minoutbuf: '0'
states:
coordinate: [80, 1010]
rotation: 0
state: enabled
- name: power
id: blocks_complex_to_mag_squared
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
states:
coordinate: [80, 690]
rotation: 0
state: enabled
- name: recording
id: wasm_gr_world_recording
parameters:
affinity: ''
alias: ''
comment: ''
length: '0'
maxoutbuf: '0'
minoutbuf: '0'
offset: '0'
recording: wifi_80211a_bpsk12_20M
repeat: 'True'
type: complex
states:
coordinate: [10, 230]
rotation: 0
state: enabled
- name: sync_long
id: ieee802_11_sync_long
parameters:
affinity: ''
alias: ''
comment: ''
debug: 'False'
log: 'False'
maxoutbuf: '0'
minoutbuf: '0'
sync_length: sync_length
states:
coordinate: [140, 850]
rotation: 0
state: enabled
- name: sync_short
id: ieee802_11_sync_short
parameters:
affinity: ''
alias: ''
comment: ''
debug: 'False'
log: 'False'
maxoutbuf: '0'
min_plateau: '2'
minoutbuf: '0'
threshold: '0.56'
states:
coordinate: [950, 540]
rotation: 0
state: enabled
- name: throttle
id: blocks_throttle2
parameters:
affinity: ''
alias: ''
comment: ''
ignoretag: 'True'
limit: time
maximum: '0.1'
maxoutbuf: '0'
minoutbuf: '0'
samples_per_second: samp_rate
type: complex
vlen: '1'
states:
coordinate: [370, 240]
rotation: 0
state: enabled
- name: to_symbols
id: blocks_stream_to_vector
parameters:
affinity: ''
alias: ''
comment: ''
maxoutbuf: '0'
minoutbuf: '0'
num_items: '64'
type: complex
vlen: '1'
states:
coordinate: [420, 860]
rotation: 0
state: enabled
- name: waterfall
id: qtgui_waterfall_sink_x
parameters:
affinity: ''
alias: ''
alpha1: '1'
axislabels: 'True'
color1: '0'
comment: ''
fc: '0'
fftsize: '1024'
grid: 'False'
int_max: '40'
int_min: '-40'
label1: ''
legend: 'True'
maxoutbuf: '0'
minoutbuf: '0'
name: '"802.11a bursts"'
samp_rate: samp_rate
update_time: '0.1'
states:
coordinate: [700, 360]
rotation: 0
state: enabled
connections:
- [average_corr, '0', corr_mag, '0']
- [average_corr, '0', sync_short, '1']
- [average_power, '0', normalize, '1']
- [conjugate, '0', correlate, '1']
- [corr_mag, '0', normalize, '0']
- [correlate, '0', average_corr, '0']
- src_blk_id: decode_mac
src_port_id: out
snk_blk_id: parse_mac
snk_port_id: in
- [delay_ltf, '0', sync_long, '1']
- [delay_stf, '0', conjugate, '0']
- [delay_stf, '0', sync_short, '0']
- [equalizer, '0', decode_mac, '0']
- [fft, '0', equalizer, '0']
- [normalize, '0', sync_short, '2']
- [power, '0', average_power, '0']
- [recording, '0', throttle, '0']
- [sync_long, '0', to_symbols, '0']
- [sync_short, '0', delay_ltf, '0']
- [sync_short, '0', sync_long, '0']
- [throttle, '0', correlate, '0']
- [throttle, '0', delay_stf, '0']
- [throttle, '0', power, '0']
- [throttle, '0', waterfall, '0']
- [to_symbols, '0', fft, '0']
metadata:
file_format: 2
grc_version: 3.11.0.0