GNU Radio's DVBS2RX Package
symbol_sync_cc.h
Go to the documentation of this file.
1/* -*- c++ -*- */
2/*
3 * Copyright 2021 2019-2021 Igor Freire.
4 *
5 * SPDX-License-Identifier: GPL-3.0-or-later
6 */
7
8#ifndef INCLUDED_DVBS2RX_SYMBOL_SYNC_CC_H
9#define INCLUDED_DVBS2RX_SYMBOL_SYNC_CC_H
10
11#include <gnuradio/block.h>
13
14namespace gr {
15namespace dvbs2rx {
16
17/*!
18 * \brief Symbol Synchronizer Loop
19 * \ingroup dvbs2rx
20 * \details
21 *
22 * Implements symbol timing recovery using a feedback loop composed of a non-data-aided
23 * Gardner timing error detector (GTED), a proportional-plus-integral (PI) loop filter, a
24 * modulo-1 counter, and a configurable interpolator. The loop takes an oversampled sample
25 * stream on its input and outputs a sequence of interpolated symbols.
26 *
27 * By default, the loop uses a polyphase interpolator, namely a polyphase root
28 * raised-cosine (RRC) filter capable of joint matched filtering and symbol interpolation.
29 * Thus, there is no need to precede this block with a dedicated matched filter. Instead,
30 * the symbol synchronizer plays the role of both the matched filter and the synchronizer
31 * itself. In contrast, when using any other interpolation scheme (linear, quadratic, or
32 * cubic), this block must be preceded by a dedicated matched filter block.
33 *
34 * Note the current implementation only supports integer and even oversampling ratios
35 * greater than or equal to two. Odd or fractional oversampling ratio are for future work.
36 */
37class DVBS2RX_API symbol_sync_cc : virtual public gr::block
38{
39public:
40 typedef std::shared_ptr<symbol_sync_cc> sptr;
41
42 /*!
43 * \brief Return a shared_ptr to a new instance of dvbs2rx::symbol_sync_cc.
44 *
45 * \param sps (float) Oversampling ratio.
46 * \param loop_bw (float) Loop bandwidth.
47 * \param damping_factor (float) Damping factor.
48 * \param rolloff (float) Rolloff factor.
49 * \param rrc_delay (int) Target root raised cosine (RRC) filter delay in symbol
50 * periods when using a polyphase interpolator (with interp_method=0). Ignored if
51 * using another interpolation method.
52 * \param n_subfilt (int) Number of subfilters in the polyphase realization of the RRC
53 * filter used for joint matched filtering and polyphase interpolation when
54 * interp_method=0. Ignored if using another interpolation method.
55 * \param interp_method (int) Interpolation method: polyphase (0),
56 * linear (1), quadratic (2), or cubic (3).
57 *
58 * \note The number of subfilters `n_subfilt` used with the polyphase interpolator
59 * does not impact on the computational cost. A single subfilter is used per strobe,
60 * so only the subfilter length controlled by paramter `rrc_delay` matters for the CPU
61 * usage, not the number of subfilters. In fact, it is preferable to pick a
62 * sufficiently large value for n_subfilt (such as 128) for better resolution on the
63 * output interpolants. In contrast, to keep the computational cost at a minimum, it
64 * is generally preferable to use a relatively low RRC delay value.
65 *
66 * \note The polyphase interpolation method is generally more efficient because its
67 * interpolation is obtained by the same computations used for matched filtering. In
68 * contrast, the other interpolation schemes require both a dedicated matched filter
69 * block (preceding the symbol synchronizer) and the interpolation itself.
70 */
71 static sptr make(float sps,
72 float loop_bw,
73 float damping_factor,
74 float rolloff,
75 int rrc_delay = 5,
76 int n_subfilt = 128,
77 int interp_method = 0);
78};
79
80} // namespace dvbs2rx
81} // namespace gr
82
83#endif /* INCLUDED_DVBS2RX_SYMBOL_SYNC_CC_H */
Symbol Synchronizer Loop.
Definition symbol_sync_cc.h:38
std::shared_ptr< symbol_sync_cc > sptr
Definition symbol_sync_cc.h:40
static sptr make(float sps, float loop_bw, float damping_factor, float rolloff, int rrc_delay=5, int n_subfilt=128, int interp_method=0)
Return a shared_ptr to a new instance of dvbs2rx::symbol_sync_cc.
#define DVBS2RX_API
Definition include/gnuradio/dvbs2rx/api.h:19
Fixed-length double-ended queue with contiguous volk-aligned elements.
Definition gr_bch.h:22