Difference between revisions of "OFDM Channel Estimation"

From GNU Radio
Jump to: navigation, search
(Created page with "Category:Block Docs Category:Stub Docs This is the template for the "Page-per-block Docs". This first section should describe what the block...")
 
Line 1: Line 1:
 
[[Category:Block Docs]]
 
[[Category:Block Docs]]
[[Category:Stub Docs]]
+
Estimate channel and coarse frequency offset for OFDM from preambles
This is the template for the [[:Category:Block_Docs|"Page-per-block Docs"]].  This first section should describe what the block does and how to use it, using however many paragraphs necessary.  Note that the title of the wiki page should match the block's name in GRC, i.e. the one defined in the block's .grc file.  Look at the [[FFT]] Block for a good example.
 
  
As this is a basic template, it's also in the [[:Category:Stub_Docs|"Stub Docs category"]]. Please improve it.
+
; Input: OFDM symbols (in frequency domain). The first one (or two) symbols are expected to be synchronisation symbols, which are used to estimate the coarse freq offset and the initial equalizer taps (these symbols are removed from the stream). The following n_data_symbols are passed through unmodified (the actual equalisation must be done elsewhere).
 +
 
 +
; Output: The data symbols, without the synchronisation symbols. The first data symbol passed through has two tags: 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of carriers, and 'ofdm_sync_eq_taps' (complex vector). Any tags attached to the synchronisation symbols are attached to the first data symbol. All other tags are propagated as expected.
 +
 
 +
Note: The vector on ofdm_sync_eq_taps is already frequency-corrected, whereas the rest is not.
 +
 
 +
This block assumes the frequency offset is even (i.e. an integer multiple of 2).
 +
 
 +
[1] Schmidl, T.M. and Cox, D.C., "Robust frequency and timing synchronization for OFDM", Communications, IEEE Transactions on, 1997. [2] K.D. Kammeyer, "Nachrichtenuebertragung," Chapter. 16.3.2.
  
 
== Parameters ==
 
== Parameters ==
(''R''): <span class="plainlinks">[https://wiki.gnuradio.org/index.php/GNURadioCompanion#Variable_Controls ''Run-time adjustable'']</span>
 
  
; Param 1 (''R'')
+
; Synch. symbol 1
: Description of parameter, provide any tips or recommended values. Note that the name of the parameter above should match the param's label that shows up in grc (e.g. Sample Rate).
+
: First synchronisation symbol in the frequency domain. Its length must be the FFT length. For Schmidl & Cox synchronisation, every second sub-carrier has to be zero.
 +
 
 +
; Synch. symbol 2
 +
: Second synchronisation symbol in the frequency domain. Must be equal to the FFT length, or zero length if only one synchronisation symbol is used. Using this symbol is how synchronisation is described in [1]. Leaving this empty forces us to interpolate the equalizer taps. If you are using an unusual sub-carrier configuration (e.g. because of OFDMA), this sync symbol is used to identify the active sub-carriers. If you only have one synchronisation symbol, set the active sub-carriers to a non-zero value in here, and also set Force One Synchronisation Symbol parameter to true.
 +
 
 +
; Number of data symbols
 +
: The number of data symbols following each set of synchronisation symbols. Must be at least 1.
 +
 
 +
; Channel taps noise reduction length
 +
: If non-zero, noise reduction for the equalizer taps is done according to [2]. In this case, it is the channel influence time in number of samples. A good value is usually the length of the cyclic prefix.
 +
 
 +
; Maximum carrier offset
 +
: Limit the number of sub-carriers the frequency offset can maximally be. Leave this zero to try all possibilities.
  
; Param 2
+
; Force One Synchronisation Symbol
: blah blah blah
+
: See Synch. symbol 2
  
 
== Example Flowgraph ==
 
== Example Flowgraph ==
Line 21: Line 39:
  
 
; C++ files
 
; C++ files
: [https://github.com/gnuradio/gnuradio TODO]
+
: [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/lib/ofdm_chanest_vcvc_impl.cc]
  
 
; Header files
 
; Header files
: [https://github.com/gnuradio/gnuradio TODO]
+
: [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/lib/ofdm_chanest_vcvc_impl.h]
  
 
; Public header files
 
; Public header files
: [https://github.com/gnuradio/gnuradio TODO]
+
: [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/include/gnuradio/digital/ofdm_chanest_vcvc.h]
  
 
; Block definition
 
; Block definition
: [https://github.com/gnuradio/gnuradio TODO]
+
: [https://github.com/gnuradio/gnuradio/blob/master/gr-digital/grc/digital_ofdm_chanest_vcvc.block.yml]

Revision as of 15:09, 9 September 2019

Estimate channel and coarse frequency offset for OFDM from preambles

Input
OFDM symbols (in frequency domain). The first one (or two) symbols are expected to be synchronisation symbols, which are used to estimate the coarse freq offset and the initial equalizer taps (these symbols are removed from the stream). The following n_data_symbols are passed through unmodified (the actual equalisation must be done elsewhere).
Output
The data symbols, without the synchronisation symbols. The first data symbol passed through has two tags: 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of carriers, and 'ofdm_sync_eq_taps' (complex vector). Any tags attached to the synchronisation symbols are attached to the first data symbol. All other tags are propagated as expected.

Note: The vector on ofdm_sync_eq_taps is already frequency-corrected, whereas the rest is not.

This block assumes the frequency offset is even (i.e. an integer multiple of 2).

[1] Schmidl, T.M. and Cox, D.C., "Robust frequency and timing synchronization for OFDM", Communications, IEEE Transactions on, 1997. [2] K.D. Kammeyer, "Nachrichtenuebertragung," Chapter. 16.3.2.

Parameters

Synch. symbol 1
First synchronisation symbol in the frequency domain. Its length must be the FFT length. For Schmidl & Cox synchronisation, every second sub-carrier has to be zero.
Synch. symbol 2
Second synchronisation symbol in the frequency domain. Must be equal to the FFT length, or zero length if only one synchronisation symbol is used. Using this symbol is how synchronisation is described in [1]. Leaving this empty forces us to interpolate the equalizer taps. If you are using an unusual sub-carrier configuration (e.g. because of OFDMA), this sync symbol is used to identify the active sub-carriers. If you only have one synchronisation symbol, set the active sub-carriers to a non-zero value in here, and also set Force One Synchronisation Symbol parameter to true.
Number of data symbols
The number of data symbols following each set of synchronisation symbols. Must be at least 1.
Channel taps noise reduction length
If non-zero, noise reduction for the equalizer taps is done according to [2]. In this case, it is the channel influence time in number of samples. A good value is usually the length of the cyclic prefix.
Maximum carrier offset
Limit the number of sub-carriers the frequency offset can maximally be. Leave this zero to try all possibilities.
Force One Synchronisation Symbol
See Synch. symbol 2

Example Flowgraph

Insert description of flowgraph here, then show a screenshot of the flowgraph and the output if there is an interesting GUI. Currently we have no standard method of uploading the actual flowgraph to the wiki or git repo, unfortunately. The plan is to have an example flowgraph showing how the block might be used, for every block, and the flowgraphs will live in the git repo.

Source Files

C++ files
[1]
Header files
[2]
Public header files
[3]
Block definition
[4]