GNU Radio 3.7.2git-79-g931a7b07 C++ API
ofdm_chanest_vcvc.h
Go to the documentation of this file.
1
/* -*- c++ -*- */
2
/*
3
* Copyright 2013 Free Software Foundation, Inc.
4
*
5
* This file is part of GNU Radio
6
*
7
* GNU Radio is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 3, or (at your option)
10
* any later version.
11
*
12
* GNU Radio is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with GNU Radio; see the file COPYING. If not, write to
19
* the Free Software Foundation, Inc., 51 Franklin Street,
20
* Boston, MA 02110-1301, USA.
21
*/
22
23
#ifndef INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
24
#define INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H
25
26
#include <
gnuradio/digital/api.h
>
27
#include <
gnuradio/block.h
>
28
29
namespace
gr {
30
namespace
digital {
31
32
/*!
33
* \brief Estimate channel and coarse frequency offset for OFDM from preambles
34
* \ingroup ofdm_blk
35
* \ingroup syncronizers_blk
36
*
37
* Input: OFDM symbols (in frequency domain). The first one (or two) symbols are expected
38
* to be synchronisation symbols, which are used to estimate the coarse freq offset
39
* and the initial equalizer taps (these symbols are removed from the stream).
40
* The following \p n_data_symbols are passed through unmodified (the actual equalisation
41
* must be done elsewhere).
42
* Output: The data symbols, without the synchronisation symbols.
43
* The first data symbol passed through has two tags:
44
* 'ofdm_sync_carr_offset' (integer), the coarse frequency offset as number of carriers,
45
* and 'ofdm_sync_eq_taps' (complex vector).
46
* Any tags attached to the synchronisation symbols are attached to the first data
47
* symbol. All other tags are propagated as expected.
48
*
49
* Note: The vector on ofdm_sync_eq_taps is already frequency-corrected, whereas the rest is not.
50
*
51
* This block assumes the frequency offset is even (i.e. an integer multiple of 2).
52
*
53
* [1] Schmidl, T.M. and Cox, D.C., "Robust frequency and timing synchronization for OFDM",
54
* Communications, IEEE Transactions on, 1997.
55
* [2] K.D. Kammeyer, "Nachrichtenuebertragung," Chapter. 16.3.2.
56
*/
57
class
DIGITAL_API
ofdm_chanest_vcvc
:
virtual
public
block
58
{
59
public
:
60
typedef
boost::shared_ptr<ofdm_chanest_vcvc>
sptr
;
61
62
/*!
63
* \param sync_symbol1 First synchronisation symbol in the frequency domain. Its length must be
64
* the FFT length. For Schmidl & Cox synchronisation, every second sub-carrier
65
* has to be zero.
66
* \param sync_symbol2 Second synchronisation symbol in the frequency domain. Must be equal to
67
* the FFT length, or zero length if only one synchronisation symbol is used.
68
* Using this symbol is how synchronisation is described in [1]. Leaving this
69
* empty forces us to interpolate the equalizer taps.
70
* If you are using an unusual sub-carrier configuration (e.g. because of OFDMA),
71
* this sync symbol is used to identify the active sub-carriers. If you only
72
* have one synchronisation symbol, set the active sub-carriers to a non-zero
73
* value in here, and also set \p force_one_sync_symbol parameter to true.
74
* \param n_data_symbols The number of data symbols following each set of synchronisation symbols.
75
* Must be at least 1.
76
* \param eq_noise_red_len If non-zero, noise reduction for the equalizer taps is done according
77
* to [2]. In this case, it is the channel influence time in number of
78
* samples. A good value is usually the length of the cyclic prefix.
79
* \param max_carr_offset Limit the number of sub-carriers the frequency offset can maximally be.
80
* Leave this zero to try all possibilities.
81
* \param force_one_sync_symbol See \p sync_symbol2.
82
*/
83
static
sptr
make(
84
const
std::vector<gr_complex> &sync_symbol1,
85
const
std::vector<gr_complex> &sync_symbol2,
86
int
n_data_symbols,
87
int
eq_noise_red_len=0,
88
int
max_carr_offset=-1,
89
bool
force_one_sync_symbol=
false
90
);
91
};
92
93
}
// namespace digital
94
}
// namespace gr
95
96
#endif
/* INCLUDED_DIGITAL_OFDM_CHANEST_VCVC_H */
97
gnuradio
gr-digital
include
gnuradio
digital
ofdm_chanest_vcvc.h
Generated by
1.8.1.1