Hello,
In the last months, we have developed an ofdm system using your gnuradio
architecture as part of a research on dynamic resource allocation. Now
we
like to contribute parts of our code to the gnuradio project. We think
that
it will be useful to you since it partially employs more advanced
techniques
than in your example. If you like it, I suggest to add it as an
alternative
ofdm system.
We are using this system on USRPs at revision 4 with daughterboards
RFX2400.
It is tested, stable and has a good performance in BER and SNR. All
hierarchical blocks are using the new style blocks.
Here are some facts about the receiver and transmitter:
-
preamble based timing synchronization
The modified Schmidl & Cox algorithm is used to position the sampling
window
at the first preamble. Only coarse timing synchronization is done. -
preamble based frequency offset synchronization
Before FFT, the frequency offset, divided into a fractional part and an
integer part, will be estimated based on the S&C preamble (also used for
timing sync) and a second preamble. Therefore both fine and coarse
frequency
offset estimation is performed. -
preamble based channel estimation
The second preamble, used for frequency offset estimation, will be
exploited
to give an estimate of the current channel state. The fine timing
synchronization is absorbed into the channel transfer function (as phase
rotation), i.e. compensated for at this place. -
pilot tone based sampling frequency offset estimation
We insert 8 pilot tones (or subcarriers) to ofdm data blocks. The
sampling
frequency offset (as phase rotation) and the residual carrier frequency
offset is estimated and compensated for. Without SFO compensation, we
observed a severe drop of SNIR using the USRPs, especially between two
different charges we bought. The current algorithm acquires and tracks
the
SFO and RCFO within an ofdm frame. -
flexible channel estimator
The estimator block can easily use several ofdm blocks to estimate the
channel transfer function. It will output both the inverse ctf to be fed
to
the equalizer and the ctf. It uses a simple zero-forcing criteria. The
known
blocks’ positions within the ofdm frame can be freely chosen. For
example,
we used a midamble in our experiments to mitigate some special problems. -
flexible mapper/demapper
We created a new ofdm mapper/demapper that allows to assign different
signal
constellations on different subcarriers. This can be either static or
dynamically changed.
Please let me know if you want to have more details.
If you accept our contribution, I will port the system to use your
packet
utils and to have it behave like your systems. Please note that the
system
has a modular design and uses simple gnuradio blocks if possible and
useful.
Additionally, I personally want to thank you for your great work at the
gnuradio project. It is definitely one of the best SDR environments.
Greetings,
Dominik A.
Chair of Theoretical Information Technology
RWTH Aachen University