summaryrefslogtreecommitdiff
path: root/gr-digital/include/digital
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@kit.edu>2013-04-19 12:58:35 +0200
committerMartin Braun <martin.braun@kit.edu>2013-05-11 13:50:34 +0200
commit7be24afbf8857a5e827fb536a80d7a83e7b6aa31 (patch)
treec76cafea7b2d33b0f0de615242d2d48004bc4f79 /gr-digital/include/digital
parent728c6e2138d5eb4f0814dcd3d03c65e628746eab (diff)
digital: OFDM passes all tests
Diffstat (limited to 'gr-digital/include/digital')
-rw-r--r--gr-digital/include/digital/ofdm_frame_equalizer_vcvc.h18
-rw-r--r--gr-digital/include/digital/ofdm_serializer_vcc.h7
2 files changed, 22 insertions, 3 deletions
diff --git a/gr-digital/include/digital/ofdm_frame_equalizer_vcvc.h b/gr-digital/include/digital/ofdm_frame_equalizer_vcvc.h
index 262a9b4302..cd1b943f47 100644
--- a/gr-digital/include/digital/ofdm_frame_equalizer_vcvc.h
+++ b/gr-digital/include/digital/ofdm_frame_equalizer_vcvc.h
@@ -34,9 +34,19 @@ namespace gr {
* \brief OFDM frame equalizer
* \ingroup ofdm_blk
*
- * Performs equalization in one or two dimensions on a tagged OFDM frame.
+ * This does two things:
+ * First, it removes the coarse carrier offset. If a tag is found on the first
+ * item with the key 'ofdm_sync_carr_offset', this is interpreted as the coarse
+ * frequency offset in number of carriers.
+ * Next, it performs equalization in one or two dimensions on a tagged OFDM frame.
+ * The actual equalization is done by a ofdm_frame_equalizer object, outside of
+ * the block.
+ *
+ * Note that the tag with the coarse carrier offset is not removed. Blocks
+ * downstream from this block must not attempt to also correct this offset.
+ *
* Input: a tagged series of OFDM symbols.
- * Output: The same as the input, but equalized.
+ * Output: The same as the input, but equalized and frequency-corrected.
*/
class DIGITAL_API ofdm_frame_equalizer_vcvc : virtual public gr_tagged_stream_block
{
@@ -45,6 +55,7 @@ namespace gr {
/*!
* \param equalizer The equalizer object that will do the actual work
+ * \param cp_len Length of the cyclic prefix in samples (required to correct the frequency offset)
* \param len_tag_key Length tag key
* \param propagate_channel_state If true, the channel state after the last symbol
* will be added to the first symbol as a tag
@@ -53,7 +64,8 @@ namespace gr {
*/
static sptr make(
digital_ofdm_equalizer_base_sptr equalizer,
- const std::string &len_tag_key = "frame_len",
+ int cp_len,
+ const std::string &len_tag_key="frame_len",
bool propagate_channel_state=false,
int fixed_frame_len=0
);
diff --git a/gr-digital/include/digital/ofdm_serializer_vcc.h b/gr-digital/include/digital/ofdm_serializer_vcc.h
index 3893d6674e..fde2458b6b 100644
--- a/gr-digital/include/digital/ofdm_serializer_vcc.h
+++ b/gr-digital/include/digital/ofdm_serializer_vcc.h
@@ -45,6 +45,9 @@ namespace gr {
* output items, and the frame length specifies the exact number of
* consumed input items.
*
+ * It is possible to correct a carrier offset in this function by passing
+ * another tag with said offset.
+ *
* Input: Complex vectors of length \p fft_len
* Output: Complex scalars, in the same order as specified in occupied_carriers.
*/
@@ -59,6 +62,7 @@ namespace gr {
* \param len_tag_key The key of the tag identifying the length of the input frame in OFDM symbols.
* \param packet_len_tag_key The key of the tag identifying the number of complex symbols in this packet.
* \param symbols_skipped If the first symbol is not allocated as in \p occupied_carriers[0], set this
+ * \param carr_offset_key When this block should correct a carrier offset, specify the tag key of the offset here (not necessary if following an ofdm_frame_equalizer_vcvc)
* \param input_is_shifted If the input has the DC carrier on index 0 (i.e. it is not FFT shifted), set this to false
*/
static sptr make(
@@ -67,6 +71,7 @@ namespace gr {
const std::string &len_tag_key="frame_len",
const std::string &packet_len_tag_key="",
int symbols_skipped=0,
+ const std::string &carr_offset_key="",
bool input_is_shifted=true
);
@@ -74,12 +79,14 @@ namespace gr {
* \param allocator The carrier allocator block of which this shall be the inverse
* \param packet_len_tag_key The key of the tag identifying the number of complex symbols in this packet.
* \param symbols_skipped If the first symbol is not allocated as in \p occupied_carriers[0], set this
+ * \param carr_offset_key When this block should correct a carrier offset, specify the tag key of the offset here (not necessary if following an ofdm_frame_equalizer_vcvc)
* \param input_is_shifted If the input has the DC carrier on index 0 (i.e. it is not FFT shifted), set this to false
*/
static sptr make(
const digital_ofdm_carrier_allocator_cvc_sptr &allocator,
const std::string &packet_len_tag_key="",
int symbols_skipped=0,
+ const std::string &carr_offset_key="",
bool input_is_shifted=true
);
};