GNU Radio Manual and C++ API Reference  3.10.9.1
The Free & Open Software Radio Ecosystem
pfb_arb_resampler_ccc.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2014 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 
12 #ifndef INCLUDED_PFB_ARB_RESAMPLER_CCC_H
13 #define INCLUDED_PFB_ARB_RESAMPLER_CCC_H
14 
15 #include <gnuradio/block.h>
16 #include <gnuradio/filter/api.h>
17 
18 namespace gr {
19 namespace filter {
20 
21 /*!
22  * \brief Polyphase filterbank arbitrary resampler with
23  * gr_complex input, gr_complex output and gr_complex taps
24  * \ingroup resamplers_blk
25  *
26  * \details
27 
28  * This block takes in a signal stream and calls
29  * gr::filter::kernel::pfb_arb_resampler_ccc to perform
30  * arbitrary resampling on the stream.
31  *
32  * Output sampling rate is \p rate * input rate.
33  */
34 class FILTER_API pfb_arb_resampler_ccc : virtual public block
35 {
36 public:
37  // gr::filter::pfb_arb_resampler_ccc::sptr
38  typedef std::shared_ptr<pfb_arb_resampler_ccc> sptr;
39 
40  /*!
41  * Build the polyphase filterbank arbitrary resampler.
42  * \param rate (float) Specifies the resampling rate to use
43  * \param taps (vector/list of complex) The prototype filter to populate the
44  * filterbank. The taps should be generated at the filter_size sampling rate. \param
45  * filter_size (unsigned int) The number of filters in the filter bank. This is
46  * directly related to quantization noise introduced during the resampling. Defaults
47  * to 32 filters.
48  */
49  static sptr
50  make(float rate, const std::vector<gr_complex>& taps, unsigned int filter_size = 32);
51 
52  /*!
53  * Resets the filterbank's filter taps with the new prototype filter
54  * \param taps (vector/list of complex) The prototype filter to populate the
55  * filterbank.
56  */
57  virtual void set_taps(const std::vector<gr_complex>& taps) = 0;
58 
59  /*!
60  * Return a vector<vector<>> of the filterbank taps
61  */
62  virtual std::vector<std::vector<gr_complex>> taps() const = 0;
63 
64  /*!
65  * Print all of the filterbank taps to screen.
66  */
67  virtual void print_taps() = 0;
68 
69  /*!
70  * Sets the resampling rate of the block.
71  */
72  virtual void set_rate(float rate) = 0;
73 
74  /*!
75  * Sets the current phase offset in radians (0 to 2pi).
76  */
77  virtual void set_phase(float ph) = 0;
78 
79  /*!
80  * Gets the current phase of the resampler in radians (2 to 2pi).
81  */
82  virtual float phase() const = 0;
83 
84  /*!
85  * Gets the number of taps per filter.
86  */
87  virtual unsigned int taps_per_filter() const = 0;
88 
89  /*!
90  * Gets the interpolation rate of the filter.
91  */
92  virtual unsigned int interpolation_rate() const = 0;
93 
94  /*!
95  * Gets the decimation rate of the filter.
96  */
97  virtual unsigned int decimation_rate() const = 0;
98 
99  /*!
100  * Gets the fractional rate of the filter.
101  */
102  virtual float fractional_rate() const = 0;
103 
104  /*!
105  * Get the group delay of the filter.
106  */
107  virtual int group_delay() const = 0;
108 
109  /*!
110  * Calculates the phase offset expected by a sine wave of
111  * frequency \p freq and sampling rate \p fs (assuming input
112  * sine wave has 0 degree phase).
113  */
114  virtual float phase_offset(float freq, float fs) = 0;
115 };
116 
117 } /* namespace filter */
118 } /* namespace gr */
119 
120 #endif /* INCLUDED_PFB_ARB_RESAMPLER_CCC_H */
The abstract base class for all 'terminal' processing blocks.
Definition: gnuradio-runtime/include/gnuradio/block.h:63
Polyphase filterbank arbitrary resampler with gr_complex input, gr_complex output and gr_complex taps...
Definition: pfb_arb_resampler_ccc.h:35
virtual std::vector< std::vector< gr_complex > > taps() const =0
virtual unsigned int taps_per_filter() const =0
virtual float phase() const =0
virtual float phase_offset(float freq, float fs)=0
virtual void set_taps(const std::vector< gr_complex > &taps)=0
virtual void set_rate(float rate)=0
virtual float fractional_rate() const =0
virtual unsigned int interpolation_rate() const =0
virtual void set_phase(float ph)=0
virtual int group_delay() const =0
static sptr make(float rate, const std::vector< gr_complex > &taps, unsigned int filter_size=32)
std::shared_ptr< pfb_arb_resampler_ccc > sptr
Definition: pfb_arb_resampler_ccc.h:38
virtual unsigned int decimation_rate() const =0
#define FILTER_API
Definition: gr-filter/include/gnuradio/filter/api.h:18
static constexpr float taps[NSTEPS+1][NTAPS]
Definition: interpolator_taps.h:9
GNU Radio logging wrapper.
Definition: basic_block.h:29