A Costas loop carrier recovery module. More...
#include <gnuradio/digital/costas_loop_cc.h>
| Public Types | |
| typedef std::shared_ptr< costas_loop_cc > | sptr | 
| Public Types inherited from gr::block | |
| enum | work_return_t { WORK_CALLED_PRODUCE = -2 , WORK_DONE = -1 } | 
| Magic return values from general_work.  More... | |
| enum | tag_propagation_policy_t { TPP_DONT = 0 , TPP_ALL_TO_ALL = 1 , TPP_ONE_TO_ONE = 2 , TPP_CUSTOM = 3 } | 
| enum to represent different tag propagation policies.  More... | |
| Public Member Functions | |
| virtual float | error () const =0 | 
| Public Member Functions inherited from gr::sync_block | |
| virtual int | work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)=0 | 
| just like gr::block::general_work, only this arranges to call consume_each for you | |
| void | forecast (int noutput_items, gr_vector_int &ninput_items_required) override | 
| Estimate input requirements given output request. | |
| int | general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) override | 
| compute output items from input items | |
| int | fixed_rate_ninput_to_noutput (int ninput) override | 
| Given ninput samples, return number of output samples that will be produced. N.B. this is only defined if fixed_rate returns true. Generally speaking, you don't need to override this. | |
| int | fixed_rate_noutput_to_ninput (int noutput) override | 
| Given noutput samples, return number of input samples required to produce noutput. N.B. this is only defined if fixed_rate returns true. Generally speaking, you don't need to override this. | |
| Public Member Functions inherited from gr::block | |
| ~block () override | |
| unsigned | history () const | 
| void | set_history (unsigned history) | 
| void | declare_sample_delay (int which, unsigned delay) | 
| void | declare_sample_delay (unsigned delay) | 
| unsigned | sample_delay (int which) const | 
| bool | fixed_rate () const | 
| Return true if this block has a fixed input to output rate. | |
| virtual bool | start () | 
| Called to enable drivers, etc for i/o devices. | |
| virtual bool | stop () | 
| Called to disable drivers, etc for i/o devices. | |
| void | set_output_multiple (int multiple) | 
| Constrain the noutput_items argument passed to forecast and general_work. | |
| int | output_multiple () const | 
| bool | output_multiple_set () const | 
| void | set_alignment (int multiple) | 
| Constrains buffers to work on a set item alignment (for SIMD) | |
| int | alignment () const | 
| void | set_unaligned (int na) | 
| int | unaligned () const | 
| void | set_is_unaligned (bool u) | 
| bool | is_unaligned () const | 
| void | consume (int which_input, int how_many_items) | 
| Tell the scheduler how_many_itemsof input streamwhich_inputwere consumed. | |
| void | consume_each (int how_many_items) | 
| Tell the scheduler how_many_itemswere consumed on each input stream. | |
| void | produce (int which_output, int how_many_items) | 
| Tell the scheduler how_many_itemswere produced on output streamwhich_output. | |
| void | set_relative_rate (double relative_rate) | 
| Set the approximate output rate / input rate. | |
| void | set_inverse_relative_rate (double inverse_relative_rate) | 
| Set the approximate output rate / input rate using its reciprocal. | |
| void | set_relative_rate (uint64_t interpolation, uint64_t decimation) | 
| Set the approximate output rate / input rate as an integer ratio. | |
| double | relative_rate () const | 
| return the approximate output rate / input rate | |
| uint64_t | relative_rate_i () const | 
| return the numerator, or interpolation rate, of the approximate output rate / input rate | |
| uint64_t | relative_rate_d () const | 
| return the denominator, or decimation rate, of the approximate output rate / input rate | |
| mpq_class & | mp_relative_rate () | 
| return a reference to the multiple precision rational representation of the approximate output rate / input rate | |
| uint64_t | nitems_read (unsigned int which_input) | 
| Return the number of items read on input stream which_input. | |
| uint64_t | nitems_written (unsigned int which_output) | 
| Return the number of items written on output stream which_output. | |
| tag_propagation_policy_t | tag_propagation_policy () | 
| Asks for the policy used by the scheduler to moved tags downstream. | |
| void | set_tag_propagation_policy (tag_propagation_policy_t p) | 
| Set the policy by the scheduler to determine how tags are moved downstream. | |
| int | min_noutput_items () const | 
| Return the minimum number of output items this block can produce during a call to work. | |
| void | set_min_noutput_items (int m) | 
| Set the minimum number of output items this block can produce during a call to work. | |
| int | max_noutput_items () | 
| Return the maximum number of output items this block will handle during a call to work. | |
| void | set_max_noutput_items (int m) | 
| Set the maximum number of output items this block will handle during a call to work. | |
| void | unset_max_noutput_items () | 
| Clear the switch for using the max_noutput_items value of this block. | |
| bool | is_set_max_noutput_items () | 
| Ask the block if the flag is or is not set to use the internal value of max_noutput_items during a call to work. | |
| void | expand_minmax_buffer (int port) | 
| long | max_output_buffer (size_t i) | 
| Returns max buffer size on output port i. | |
| void | set_max_output_buffer (long max_output_buffer) | 
| Request limit on max buffer size on all output ports. | |
| void | set_max_output_buffer (int port, long max_output_buffer) | 
| Request limit on max buffer size on output port port. | |
| long | min_output_buffer (size_t i) | 
| Returns min buffer size on output port i. | |
| void | set_min_output_buffer (long min_output_buffer) | 
| Request limit on the minimum buffer size on all output ports. | |
| void | set_min_output_buffer (int port, long min_output_buffer) | 
| Request limit on min buffer size on output port port. | |
| void | set_blkd_input_timer_value (unsigned int timer_value_ms) | 
| DEPRECATED Configure the timer set when input is blocked port. | |
| unsigned int | blkd_input_timer_value () | 
| DEPRECATED Returns timer value set when input is blocked. | |
| void | allocate_detail (int ninputs, int noutputs, const std::vector< int > &downstream_max_nitems_vec, const std::vector< uint64_t > &downstream_lcm_nitems_vec, const std::vector< uint32_t > &downstream_max_out_mult_vec) | 
| Allocate the block_detail and necessary output buffers for this block. | |
| buffer_sptr | replace_buffer (size_t src_port, size_t dst_port, block_sptr block_owner) | 
| Replace the block's buffer with a new one owned by the block_owner parameter. | |
| float | pc_noutput_items () | 
| Gets instantaneous noutput_items performance counter. | |
| float | pc_noutput_items_avg () | 
| Gets average noutput_items performance counter. | |
| float | pc_noutput_items_var () | 
| Gets variance of noutput_items performance counter. | |
| float | pc_nproduced () | 
| Gets instantaneous num items produced performance counter. | |
| float | pc_nproduced_avg () | 
| Gets average num items produced performance counter. | |
| float | pc_nproduced_var () | 
| Gets variance of num items produced performance counter. | |
| float | pc_input_buffers_full (int which) | 
| Gets instantaneous fullness of whichinput buffer. | |
| float | pc_input_buffers_full_avg (int which) | 
| Gets average fullness of whichinput buffer. | |
| float | pc_input_buffers_full_var (int which) | 
| Gets variance of fullness of whichinput buffer. | |
| std::vector< float > | pc_input_buffers_full () | 
| Gets instantaneous fullness of all input buffers. | |
| std::vector< float > | pc_input_buffers_full_avg () | 
| Gets average fullness of all input buffers. | |
| std::vector< float > | pc_input_buffers_full_var () | 
| Gets variance of fullness of all input buffers. | |
| float | pc_output_buffers_full (int which) | 
| Gets instantaneous fullness of whichoutput buffer. | |
| float | pc_output_buffers_full_avg (int which) | 
| Gets average fullness of whichoutput buffer. | |
| float | pc_output_buffers_full_var (int which) | 
| Gets variance of fullness of whichoutput buffer. | |
| std::vector< float > | pc_output_buffers_full () | 
| Gets instantaneous fullness of all output buffers. | |
| std::vector< float > | pc_output_buffers_full_avg () | 
| Gets average fullness of all output buffers. | |
| std::vector< float > | pc_output_buffers_full_var () | 
| Gets variance of fullness of all output buffers. | |
| float | pc_work_time () | 
| Gets instantaneous clock cycles spent in work. | |
| float | pc_work_time_avg () | 
| Gets average clock cycles spent in work. | |
| float | pc_work_time_var () | 
| Gets average clock cycles spent in work. | |
| float | pc_work_time_total () | 
| Gets total clock cycles spent in work. | |
| float | pc_throughput_avg () | 
| Gets average throughput. | |
| void | reset_perf_counters () | 
| Resets the performance counters. | |
| void | setup_pc_rpc () | 
| Sets up export of perf. counters to ControlPort. Only called by the scheduler. | |
| bool | is_pc_rpc_set () const | 
| Checks if this block is already exporting perf. counters to ControlPort. | |
| void | no_pc_rpc () | 
| If the block calls this in its constructor, it's perf. counters will not be exported. | |
| void | set_processor_affinity (const std::vector< int > &mask) override | 
| Set the thread's affinity to processor core n. | |
| void | unset_processor_affinity () override | 
| Remove processor affinity to a specific core. | |
| std::vector< int > | processor_affinity () override | 
| Get the current processor affinity. | |
| int | active_thread_priority () | 
| Get the current thread priority in use. | |
| int | thread_priority () | 
| Get the current thread priority stored. | |
| int | set_thread_priority (int priority) | 
| Set the current thread priority. | |
| bool | update_rate () const | 
| void | system_handler (pmt::pmt_t msg) | 
| the system message handler | |
| void | set_log_level (const std::string &level) override | 
| Set the logger's output level. | |
| std::string | log_level () override | 
| Get the logger's output level. | |
| bool | finished () | 
| returns true when execution has completed due to a message connection | |
| block_detail_sptr | detail () const | 
| void | set_detail (block_detail_sptr detail) | 
| void | notify_msg_neighbors () | 
| Tell msg neighbors we are finished. | |
| void | clear_finished () | 
| Make sure we don't think we are finished. | |
| std::string | identifier () const | 
| Public Member Functions inherited from gr::basic_block | |
| pmt::pmt_t | message_subscribers (pmt::pmt_t port) | 
| ~basic_block () override | |
| long | unique_id () const | 
| long | symbolic_id () const | 
| std::string | name () const | 
| std::string | symbol_name () const | 
| std::string | identifier () const | 
| gr::io_signature::sptr | input_signature () const | 
| gr::io_signature::sptr | output_signature () const | 
| basic_block_sptr | to_basic_block () | 
| bool | alias_set () const | 
| std::string | alias () const | 
| pmt::pmt_t | alias_pmt () const | 
| void | set_block_alias (std::string name) | 
| void | message_port_register_in (pmt::pmt_t port_id) | 
| void | message_port_register_out (pmt::pmt_t port_id) | 
| void | message_port_pub (pmt::pmt_t port_id, pmt::pmt_t msg) | 
| void | message_port_sub (pmt::pmt_t port_id, pmt::pmt_t target) | 
| void | message_port_unsub (pmt::pmt_t port_id, pmt::pmt_t target) | 
| virtual bool | message_port_is_hier (pmt::pmt_t port_id) | 
| virtual bool | message_port_is_hier_in (pmt::pmt_t port_id) | 
| virtual bool | message_port_is_hier_out (pmt::pmt_t port_id) | 
| pmt::pmt_t | message_ports_in () | 
| Get input message port names. | |
| pmt::pmt_t | message_ports_out () | 
| Get output message port names. | |
| void | _post (pmt::pmt_t which_port, pmt::pmt_t msg) | 
| bool | empty_p (pmt::pmt_t which_port) | 
| is the queue empty? | |
| bool | empty_p () | 
| bool | empty_handled_p (pmt::pmt_t which_port) | 
| are all msg ports with handlers empty? | |
| bool | empty_handled_p () | 
| size_t | nmsgs (pmt::pmt_t which_port) | 
| How many messages in the queue? | |
| void | insert_tail (pmt::pmt_t which_port, pmt::pmt_t msg) | 
| pmt::pmt_t | delete_head_nowait (pmt::pmt_t which_port) | 
| msg_queue_t::iterator | get_iterator (pmt::pmt_t which_port) | 
| void | erase_msg (pmt::pmt_t which_port, msg_queue_t::iterator it) | 
| virtual bool | has_msg_port (pmt::pmt_t which_port) | 
| const msg_queue_map_t & | get_msg_map (void) const | 
| void | add_rpc_variable (rpcbasic_sptr s) | 
| Add an RPC variable (get or set). | |
| virtual void | setup_rpc () | 
| Set up the RPC registered variables. | |
| bool | is_rpc_set () | 
| Ask if this block has been registered to the RPC. | |
| void | rpc_set () | 
| When the block is registered with the RPC, set this. | |
| virtual bool | check_topology (int ninputs, int noutputs) | 
| Confirm that ninputs and noutputs is an acceptable combination. | |
| template<typename T> | |
| void | set_msg_handler (pmt::pmt_t which_port, T msg_handler) | 
| Set the callback that is fired when messages are available. | |
| Public Member Functions inherited from gr::msg_accepter | |
| msg_accepter () | |
| ~msg_accepter () override | |
| void | post (pmt::pmt_t which_port, pmt::pmt_t msg) override | 
| send msgtomsg_accepteron portwhich_port | |
| Public Member Functions inherited from gr::blocks::control_loop | |
| control_loop (void) | |
| control_loop (float loop_bw, float max_freq, float min_freq) | |
| virtual | ~control_loop () | 
| void | update_gains () | 
| Update the system gains from the loop bandwidth and damping factor. | |
| void | advance_loop (float error) | 
| Advance the control loop based on the current gain settings and the inputted error signal. | |
| void | phase_wrap () | 
| Keep the phase between -2pi and 2pi. | |
| void | frequency_limit () | 
| Keep the frequency between d_min_freq and d_max_freq. | |
| virtual void | set_loop_bandwidth (float bw) | 
| Set the loop bandwidth. | |
| void | set_damping_factor (float df) | 
| Set the loop damping factor. | |
| void | set_alpha (float alpha) | 
| Set the loop gain alpha. | |
| void | set_beta (float beta) | 
| Set the loop gain beta. | |
| void | set_frequency (float freq) | 
| Set the control loop's frequency. | |
| void | set_phase (float phase) | 
| Set the control loop's phase. | |
| void | set_max_freq (float freq) | 
| Set the control loop's maximum frequency. | |
| void | set_min_freq (float freq) | 
| Set the control loop's minimum frequency. | |
| float | get_loop_bandwidth () const | 
| Returns the loop bandwidth. | |
| float | get_damping_factor () const | 
| Returns the loop damping factor. | |
| float | get_alpha () const | 
| Returns the loop gain alpha. | |
| float | get_beta () const | 
| Returns the loop gain beta. | |
| float | get_frequency () const | 
| Get the control loop's frequency estimate. | |
| float | get_phase () const | 
| Get the control loop's phase estimate. | |
| float | get_max_freq () const | 
| Get the control loop's maximum frequency. | |
| float | get_min_freq () const | 
| Get the control loop's minimum frequency. | |
| Static Public Member Functions | |
| static sptr | make (float loop_bw, unsigned int order, bool use_snr=false) | 
| Additional Inherited Members | |
| Protected Types inherited from gr::basic_block | |
| enum | vcolor { WHITE , GREY , BLACK } | 
| Protected Member Functions inherited from gr::sync_block | |
| sync_block (void) | |
| sync_block (const std::string &name, gr::io_signature::sptr input_signature, gr::io_signature::sptr output_signature) | |
| Protected Member Functions inherited from gr::block | |
| block (void) | |
| block (const std::string &name, gr::io_signature::sptr input_signature, gr::io_signature::sptr output_signature) | |
| void | set_fixed_rate (bool fixed_rate) | 
| void | add_item_tag (unsigned int which_output, uint64_t abs_offset, const pmt::pmt_t &key, const pmt::pmt_t &value, const pmt::pmt_t &srcid=pmt::PMT_F) | 
| Adds a new tag onto the given output buffer. | |
| void | add_item_tag (unsigned int which_output, const tag_t &tag) | 
| Adds a new tag onto the given output buffer. | |
| void | remove_item_tag (unsigned int which_input, uint64_t abs_offset, const pmt::pmt_t &key, const pmt::pmt_t &value, const pmt::pmt_t &srcid=pmt::PMT_F) | 
| DEPRECATED. Will be removed in 3.8. | |
| void | remove_item_tag (unsigned int which_input, const tag_t &tag) | 
| DEPRECATED. Will be removed in 3.8. | |
| void | get_tags_in_range (std::vector< tag_t > &v, unsigned int which_input, uint64_t abs_start, uint64_t abs_end) | 
| Given a [start,end), returns a vector of all tags in the range. | |
| void | get_tags_in_range (std::vector< tag_t > &v, unsigned int which_input, uint64_t abs_start, uint64_t abs_end, const pmt::pmt_t &key) | 
| Given a [start,end), returns a vector of all tags in the range with a given key. | |
| void | get_tags_in_window (std::vector< tag_t > &v, unsigned int which_input, uint64_t rel_start, uint64_t rel_end) | 
| Gets all tags within the relative window of the current call to work. | |
| void | get_tags_in_window (std::vector< tag_t > &v, unsigned int which_input, uint64_t rel_start, uint64_t rel_end, const pmt::pmt_t &key) | 
| Operates like gr::block::get_tags_in_window with the ability to only return tags with the specified key. | |
| void | enable_update_rate (bool en) | 
| buffer_sptr | allocate_buffer (size_t port, int downstream_max_nitems, uint64_t downstream_lcm_nitems, uint32_t downstream_max_out_mult) | 
| Allocate a buffer for the given output port of this block. Note that the downstream max number of items must be passed in to this function for consideration. | |
| Protected Member Functions inherited from gr::basic_block | |
| basic_block (void) | |
| basic_block (const std::string &name, gr::io_signature::sptr input_signature, gr::io_signature::sptr output_signature) | |
| Protected constructor prevents instantiation by non-derived classes. | |
| void | set_input_signature (gr::io_signature::sptr iosig) | 
| may only be called during constructor | |
| void | set_output_signature (gr::io_signature::sptr iosig) | 
| may only be called during constructor | |
| void | set_color (vcolor color) | 
| Allow the flowgraph to set for sorting and partitioning. | |
| vcolor | color () const | 
| virtual bool | has_msg_handler (pmt::pmt_t which_port) | 
| Tests if there is a handler attached to port which_port. | |
| virtual void | dispatch_msg (pmt::pmt_t which_port, pmt::pmt_t msg) | 
| template<typename Derived> | |
| std::shared_ptr< Derived > | shared_from_base () | 
| This is meant to be called by derived classes (e.g. block) to get a shared pointer internally. This is needed because std::enable_shared_from_this doesn't seem to work with derived classes in an inheritance hierarchy. | |
| Protected Attributes inherited from gr::block | |
| std::vector< long > | d_max_output_buffer | 
| std::vector< long > | d_min_output_buffer | 
| unsigned int | d_blkd_input_timer_value = 250 | 
| gr::thread::mutex | d_setlock | 
| const pmt::pmt_t | d_pmt_done | 
| const pmt::pmt_t | d_system_port | 
| Protected Attributes inherited from gr::basic_block | |
| std::string | d_name | 
| gr::io_signature::sptr | d_input_signature | 
| gr::io_signature::sptr | d_output_signature | 
| long | d_unique_id | 
| long | d_symbolic_id | 
| std::string | d_symbol_name | 
| std::string | d_symbol_alias | 
| vcolor | d_color | 
| bool | d_rpc_set | 
| gr::logger_ptr | d_logger | 
| gr::logger_ptr | d_debug_logger | 
| Default logger. | |
| msg_queue_map_t | msg_queue | 
| Verbose logger. | |
| std::vector< rpcbasic_sptr > | d_rpc_vars | 
| pmt::pmt_t | d_message_subscribers | 
| Protected Attributes inherited from gr::blocks::control_loop | |
| float | d_phase | 
| float | d_freq | 
| float | d_max_freq | 
| float | d_min_freq | 
| float | d_damping | 
| float | d_loop_bw | 
| float | d_alpha | 
| float | d_beta | 
A Costas loop carrier recovery module.
The Costas loop locks to the center frequency of a signal and downconverts it to baseband.
More details can be found online:
J. Feigin, "Practical Costas loop design: Designing a simple and inexpensive BPSK Costas loop carrier recovery circuit," RF signal processing, pp. 20-36, 2002.
http://rfdesign.com/images/archive/0102Feigin20.pdf
The Costas loop can have two output streams:
There is a single optional message input:
| typedef std::shared_ptr<costas_loop_cc> gr::digital::costas_loop_cc::sptr | 
| 
 | pure virtual | 
Returns the current value of the loop error.
| 
 | static | 
Make a Costas loop carrier recovery block.
| loop_bw | internal 2nd order loop bandwidth (~ 2pi/100) | 
| order | the loop order, either 2, 4, or 8 | 
| use_snr | Use or ignore SNR estimates (from noise message port) in measurements; also uses tanh instead of slicing. |