GNU Radio Manual and C++ API Reference 3.8.5.0
The Free & Open Software Radio Ecosystem
 
Loading...
Searching...
No Matches
clock_recovery_mm_ff.h
Go to the documentation of this file.
1/* -*- c++ -*- */
2/*
3 * Copyright 2004,2011,2012 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_CLOCK_RECOVERY_MM_FF_H
24#define INCLUDED_DIGITAL_CLOCK_RECOVERY_MM_FF_H
25
26#include <gnuradio/block.h>
28
29namespace gr {
30namespace digital {
31
32/*!
33 * \brief Mueller and Müller (M&M) based clock recovery block with float input, float
34 * output. \ingroup synchronizers_blk
35 *
36 * \details
37 * This implements the Mueller and Müller (M&M) discrete-time
38 * error-tracking synchronizer.
39 *
40 * The peak to peak input signal amplitude must be symmetrical
41 * about zero, as the M&M timing error detector (TED) is a
42 * decision directed TED, and this block uses a symbol decision
43 * slicer referenced at zero.
44 *
45 * The input signal peak amplitude should be controlled to a
46 * consistent level (e.g. +/- 1.0) before this block to achieve
47 * consistent results for given gain settings; as the TED's output
48 * error signal is directly affected by the input amplitude.
49 *
50 * The input signal must have peaks in order for the TED to output
51 * a correct error signal. If the input signal pulses do not have
52 * peaks (e.g. rectangular pulses) the input signal should be
53 * conditioned with a matched pulse filter or other appropriate
54 * filter to peak the input pulses. For a rectangular base pulse
55 * that is N samples wide, the matched filter taps would be
56 * [1.0/float(N)]*N, or in other words a moving average over N
57 * samples.
58 *
59 * This block will output samples at a rate of one sample per
60 * recovered symbol, and is thus not outputting at a constant rate.
61 *
62 * Output symbols are not a subset of input, but may be interpolated.
63 *
64 * See "Digital Communication Receivers: Synchronization, Channel
65 * Estimation and Signal Processing" by Heinrich Meyr, Marc
66 * Moeneclaey, & Stefan Fechtel. ISBN 0-471-50275-8.
67 */
69{
70public:
71 // gr::digital::clock_recovery_mm_ff::sptr
72 typedef boost::shared_ptr<clock_recovery_mm_ff> sptr;
73
74 /*!
75 * Make a M&M clock recovery block.
76 *
77 * \param omega Initial estimate of samples per symbol
78 * \param gain_omega Gain setting for omega update loop
79 * \param mu Initial estimate of phase of sample
80 * \param gain_mu Gain setting for mu update loop
81 * \param omega_relative_limit maximum relative deviation from omega
82 */
83 static sptr make(float omega,
84 float gain_omega,
85 float mu,
86 float gain_mu,
87 float omega_relative_limit);
88
89 virtual float mu() const = 0;
90 virtual float omega() const = 0;
91 virtual float gain_mu() const = 0;
92 virtual float gain_omega() const = 0;
93
94 virtual void set_verbose(bool verbose) = 0;
95 virtual void set_gain_mu(float gain_mu) = 0;
96 virtual void set_gain_omega(float gain_omega) = 0;
97 virtual void set_mu(float mu) = 0;
98 virtual void set_omega(float omega) = 0;
99};
100
101} /* namespace digital */
102} /* namespace gr */
103
104#endif /* INCLUDED_DIGITAL_CLOCK_RECOVERY_MM_FF_H */
The abstract base class for all 'terminal' processing blocks.
Definition block.h:72
Mueller and Müller (M&M) based clock recovery block with float input, float output.
Definition clock_recovery_mm_ff.h:69
virtual float gain_mu() const =0
virtual void set_verbose(bool verbose)=0
virtual void set_gain_mu(float gain_mu)=0
virtual float omega() const =0
boost::shared_ptr< clock_recovery_mm_ff > sptr
Definition clock_recovery_mm_ff.h:72
virtual float gain_omega() const =0
virtual float mu() const =0
virtual void set_mu(float mu)=0
static sptr make(float omega, float gain_omega, float mu, float gain_mu, float omega_relative_limit)
virtual void set_omega(float omega)=0
virtual void set_gain_omega(float gain_omega)=0
#define DIGITAL_API
Definition gr-digital/include/gnuradio/digital/api.h:30
GNU Radio logging wrapper for log4cpp library (C++ port of log4j)
Definition basic_block.h:46