ofdm implementation in gnu radio
DESCRIPTION
OFDM Implementation in GNU Radio. Matt Ettus, Thomas W. Rondeau, and Robert McGwier Wireless@VT Symposium, 2007. OFDM: Basic Principles. Transmitter Flow Graph. Receive Flow Graph. Signal Acquisition. Signal Detection. Two methods implemented: Maximum Likelihood - PowerPoint PPT PresentationTRANSCRIPT
OFDM Implementation in GNU Radio
Matt Ettus, Thomas W. Rondeau, and Robert McGwier
Wireless@VT Symposium, 2007
OFDM: Basic Principles
Transmitter Flow Graph
Frame Source
SymbolModulation
Scale (1/√N)
Insert Preambles
Add Cyclic Prefix
Known preambles
IFFT
Receive Flow Graph
Channel Filter
FFT
Symbol synchronization
OFDM Preamble
Correlation
Symbol Demodulation
Build Frame and transfer to
higher layer
Signal Acquisition
Signal Detection
• Two methods implemented:• Maximum Likelihood
– Correlate with cyclic prefix– J. van de Beek, M. Sandell, P. Ola. Borjesson, “ML
Estimation of Time and Frequency Offset in OFDM Systems,” IEEE Trans. On Signal Processing, vol. 45, no. 7, pp. 1800—1805, July 1997.
• PN Sequence correlation– Transmit known symbol with repetition in the time
domain– T. M. Schmidl and D. C. Cox, “Robust Frequency and
Timing Synchronization for OFDM,” IEEE Trans. Communications, vol. 45, no. 12, pp. 1613—1621, Dec. 1997.
ML Estimation
Delay of FFT Size
Input
Magnitude Squared
Magnitude Squared
conjugate
Moving average filter
Moving average filter
Magnitude Squared
Angle S/H
-
+
Peak Detector
DPLL
NCO
Sampler
Sampled Signals out
Peak to 0
Hold angle for frequency
correction
Delay to CP
Correlate to delayed CP
Gate symbol
ML PerformanceCorrelation
Peaks
Correlations occur every OFDM symbol
ML PerformanceCorrelation
Peaks
Peaks should occur every FFT length + CP length
ML Performance
Missing a peak inside a packet will cause a rotation in versus the other symbols
Histogram of Peak Timing
PN Correlation
K KCP
Repeated Known Symbol in time: ABCDABCD
Create sample in frequency with 0’s in every other bin:
V 0 W 0 X 0 Y 0 Z 0
IFFT
Synchronizer Flow Graph
Delay of FFT Size / 2
Magnitude Squared
conjugate
Moving average filter
Moving average filter
Magnitude Squared
Angle
Input
Angle out
S/H
Moving average filter
(Matched Filter)
-1Peak
DetectorRegenerate
Peaks
SamplerSampled
Signals out
¸
Signal Power Detects edge
Hold angle for frequency
correction
Regenerate for each symbol
Delay first half
Correlate to preamble
Gate symbol
PN Sync PerformanceCorrelation
Match FilteredRegen. Peaks
Correlations occur every packet
PN Sync Performance
Regenerating peaks by a known amount
CorrelationMatch FilteredRegen. Peaks
PN Sync Comparison
Noise and multipath affects against a perfect signal
PN Sync Performance
Differences do not affect this method as much because the rotation is constant in the packet
Histogram of Peak Timing
Frame Detection
• Uses known symbols to correlate and find beginning of frame
• Once correlated, use the known symbols and receive symbols to generate a 1-tap equalizer
• Use the equalizer to correct phase shifts and multipath
ML Frequency ambiguity
Fine Frequency compensation
Frequency
PN Frequency ambiguity
-0.5 0.5-1.5 1.5-2.5 3.5-3.5 2.5
Coarse Frequency compensationcorrected in frame detector
Frequency
Shifted full FFT bin
-0.5 0.5-1.5 1.5-2.5 3.5-3.5 2.5
Fine Frequency Error from PN Sync
Frequency error calculated once per packet; does not fix for clock offset drift throughout packet.
Implementation Results
QPSK
QPSK Repeated Preamble (1/13)FFT length=512, Occupied Tones=200, CP Length=128
QPSK Known Preamble 1 (2/13)FFT length=512, Occupied Tones=200, CP Length=128
QPSK Known Preamble 3 (3/13)FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (4/13)FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (5/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (6/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (7/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (8/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (9/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (10/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (11/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Data (12/13) FFT length=512, Occupied Tones=200, CP Length=128
QPSK Repeated Preamble (13/13) FFT length=512, Occupied Tones=200, CP Length=128
QAM16
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
QAM16 Repeated Preamble (1/1) FFT length=512, Occupied Tones=200, CP Length=128
Profiling Support
• Use OProfile
• Collects amount of processing done by each component of a process
• Used to tune performance
• Started at 100 kHz bandwidth• 1.5 hours of profiling increased to 600 kHz
Profiling Support – QPSK Receiver
% symbol name29.2 .loop211.5 .loop26.05 gr_fast_atan2f5.14 gr_fft_filter_ccc::work4.31 gr_single_threaded_scheduler::main_loop4.10 gr_ofdm_correlator3.80 .cleanup3.15 gr_multiply_cc::work2.44 gr_fir_ccf_simd::filter1.81 gr_fir_fff_simd::filter
Profiling Support – QPSK Receiver
1.7259 gr_divide_ff::work1.5111 gr_frequency_modulator_fc::work1.4963 gr_block_detail::input1.4815 gr_peak_detector_fb::work1.3111 gr_ofdm_correlator::coarse_freq_comp1.2667 .loop11.0593 gr_complex_to_mag_squared::work1.0222 .loop10.9556 gr_fft_vcc::work0.8963 gr_ofdm_sampler::general_work0.8593 gr_add_const_cc::work0.8593 gr_ofdm_correlator::general_work
GNU Radio Interface
• Command-line options allow selection of– FFT bins (any value, odd or even)– Occupied bins (must be < fft bins)– Cyclic prefix length (< fft bins)
• Flow graphs are built at runtime
• Should tie directly in with current method to use an PHY/MAC interface card
./benchmark –R A –f 2411M --fft-length=512 \--occupied-tones=300 --cp-length=128
Future Work and Goals
• Hit 1 MHz in receiver
• More modulations
• Implement a variation of the PN sync
• Implement adaptive equalizer over the entire packet
• SINR calculation
• Forward Error Correction
• Performance tuning
Thank You
Questions?