GNU Radio Manual and C++ API Reference  3.10.9.1
The Free & Open Software Radio Ecosystem
cpmmod_bc.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2010,2012 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * SPDX-License-Identifier: GPL-3.0-or-later
8  *
9  */
10 
11 #ifndef INCLUDED_DIGITAL_CPMMOD_BC_H
12 #define INCLUDED_DIGITAL_CPMMOD_BC_H
13 
14 #include <gnuradio/analog/cpm.h>
15 #include <gnuradio/digital/api.h>
16 #include <gnuradio/hier_block2.h>
17 
18 namespace gr {
19 namespace digital {
20 
21 /*!
22  * \brief Generic CPM modulator
23  * \ingroup modulators_blk
24  *
25  * \details
26  * Examples:
27  * - Setting h = 0.5, L = 1, type = LREC yields MSK.
28  * - Setting h = 0.5, type = GAUSSIAN and beta = 0.3 yields GMSK
29  * as used in GSM.
30  *
31  * The input of this block are symbols from an M-ary alphabet
32  * +/-1, +/-3, ..., +/-(M-1). Usually, M = 2 and therefore, the
33  * valid inputs are +/-1.
34  * The modulator will silently accept any other inputs, though.
35  * The output is the phase-modulated signal.
36  */
37 class DIGITAL_API cpmmod_bc : virtual public hier_block2
38 {
39 public:
40  // gr::digital::cpmmod_bc::sptr
41  typedef std::shared_ptr<cpmmod_bc> sptr;
42 
43  /*!
44  * Make CPM modulator block.
45  *
46  * \param type The modulation type. Can be one of LREC, LRC, LSRC, TFM
47  * or GAUSSIAN. See gr_cpm::phase_response() for a
48  * detailed description.
49  * \param h The modulation index. \f$ h \cdot \pi\f$ is the maximum
50  * phase change that can occur between two symbols, i.e., if
51  * you only send ones, the phase will increase by \f$ h \cdot
52  * \pi\f$ every \p samples_per_sym samples. Set this to 0.5
53  * for Minimum Shift Keying variants.
54  * \param samples_per_sym Samples per symbol.
55  * \param L The length of the phase duration in symbols. For L=1, this
56  * yields full- response CPM symbols, for L > 1,
57  * partial-response.
58  * \param beta For LSRC, this is the rolloff factor. For Gaussian
59  * pulses, this is the 3 dB time-bandwidth product.
60  */
62  float h,
63  int samples_per_sym,
64  int L,
65  double beta = 0.3);
66 
67  /*!
68  * Make GMSK modulator block.
69  *
70  * The type is GAUSSIAN and the modulation index for GMSK is
71  * 0.5. This are populated automatically by this factory
72  * function.
73  *
74  * \param samples_per_sym Samples per symbol.
75  * \param L The length of the phase duration in symbols. For L=1, this
76  * yields full- response CPM symbols, for L > 1,
77  * partial-response.
78  * \param beta For LSRC, this is the rolloff factor. For Gaussian
79  * pulses, this is the 3 dB time-bandwidth product.
80  */
81  static sptr make_gmskmod_bc(int samples_per_sym = 2, int L = 4, double beta = 0.3);
82 
83  //! Return the phase response FIR taps
84  virtual std::vector<float> taps() const = 0;
85 
86  //! Return the type of CPM modulator
87  virtual int type() const = 0;
88 
89  //! Return the modulation index of the modulator.
90  virtual float index() const = 0;
91 
92  //! Return the number of samples per symbol
93  virtual int samples_per_sym() const = 0;
94 
95  //! Return the length of the phase duration (in symbols)
96  virtual int length() const = 0;
97 
98  //! Return the value of beta for the modulator
99  virtual double beta() const = 0;
100 };
101 
102 } /* namespace digital */
103 } /* namespace gr */
104 
105 #endif /* INCLUDED_DIGITAL_CPMMOD_BC_H */
cpm_type
Definition: cpm.h:25
Generic CPM modulator.
Definition: cpmmod_bc.h:38
virtual double beta() const =0
Return the value of beta for the modulator.
virtual int type() const =0
Return the type of CPM modulator.
static sptr make_gmskmod_bc(int samples_per_sym=2, int L=4, double beta=0.3)
virtual int length() const =0
Return the length of the phase duration (in symbols)
static sptr make(analog::cpm::cpm_type type, float h, int samples_per_sym, int L, double beta=0.3)
virtual int samples_per_sym() const =0
Return the number of samples per symbol.
virtual float index() const =0
Return the modulation index of the modulator.
virtual std::vector< float > taps() const =0
Return the phase response FIR taps.
std::shared_ptr< cpmmod_bc > sptr
Definition: cpmmod_bc.h:41
Hierarchical container class for gr::block's and gr::hier_block2's.
Definition: hier_block2.h:34
#define DIGITAL_API
Definition: gr-digital/include/gnuradio/digital/api.h:18
GNU Radio logging wrapper.
Definition: basic_block.h:29