gr::analog::quadrature_demod_cf
gr::sync_block
gnuradio/analog/quadrature_demod_cf.h
std::shared_ptr< quadrature_demod_cf > typedef std::shared_ptr<quadrature_demod_cf> gr::analog::quadrature_demod_cf::sptr sptr gr::analog::quadrature_demod_cf::sptr
sptr static sptr gr::analog::quadrature_demod_cf::make (float gain) make gr::analog::quadrature_demod_cf::make float gain gain
void virtual void gr::analog::quadrature_demod_cf::set_gain (float gain)=0 set_gain gr::analog::quadrature_demod_cf::set_gain float gain gain
float virtual float gr::analog::quadrature_demod_cf::gain () const =0 gain gr::analog::quadrature_demod_cf::gain make set_gain

quadrature demodulator: complex in, float out

This can be used to demod FM, FSK, GMSK, etc. The input is complex baseband, output is the signal frequency in relation to the sample rate, multiplied with the gain.

Mathematically, this block calculates the product of the one-sample delayed input and the conjugate undelayed signal, and then calculates the argument of the resulting complex number:

$y[n] = \mathrm{arg}\left(x[n] \, \bar x [n-1]\right)$.

Let $x$ be a complex sinusoid with amplitude $A>0$, (absolute) frequency $f\in\mathbb R$ and phase $\phi_0\in[0;2\pi]$ sampled at $f_s>0$ so, without loss of generality,

$x[n]= A e^{j2\pi( \frac f{f_s} n + \phi_0)}$

then

\begin{align*} y[n] &= \mathrm{arg}\left(A e^{j2\pi\left( \frac f{f_s} n + \phi_0\right)} \overline{A e^{j2\pi( \frac f{f_s} (n-1) + \phi_0)}}\right)\\ & = \mathrm{arg}\left(A^2 e^{j2\pi\left( \frac f{f_s} n + \phi_0\right)} e^{-j2\pi( \frac f{f_s} (n-1) + \phi_0)}\right)\\ & = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} n + \phi_0 - \frac f{f_s} (n-1) - \phi_0\right)}\right)\\ & = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} n - \frac f{f_s} (n-1)\right)}\right)\\ & = \mathrm{arg}\left( A^2 e^{j2\pi\left( \frac f{f_s} \left(n-(n-1)\right)\right)}\right)\\ & = \mathrm{arg}\left( A^2 e^{j2\pi \frac f{f_s}}\right) \intertext{$A$ is real, so is $A^2$ and hence only \textit{scales}, therefore $\mathrm{arg}(\cdot)$ is invariant:} &= \mathrm{arg}\left(e^{j2\pi \frac f{f_s}}\right)\\ &= \frac f{f_s}\\ &&\blacksquare \end{align*}

gr::analog::quadrature_demod_cf
gr::basic_block
gr::block
gr::messages::msg_accepter
gr::msg_accepter
gr::sync_block
std::enable_shared_from_this< basic_block >
gr::analog::quadrature_demod_cf
gr::basic_block
d_name
d_symbol_alias
d_symbol_name
d_input_signature
d_output_signature
d_debug_logger
d_logger
msg_queue
d_rpc_vars
d_message_subscribers
gr::block
d_max_output_buffer
d_min_output_buffer
d_pmt_done
d_system_port
gr::messages::msg_accepter
gr::msg_accepter
gr::sync_block
std::basic_string< Char >
std::enable_shared_from_this< basic_block >
std::map< pmt::pmt_t, msg_queue_t, msg_queue_comparator >
std::shared_ptr< io_signature >
std::shared_ptr< logger >
std::shared_ptr< pmt_base >
std::shared_ptr< rpcbasic_base >
std::string
std::vector< long >
std::vector< rpcbasic_sptr >
elements
p
- gr::analog::quadrature_demod_cf
  _post
- gr::analog::quadrature_demod_cf
  active_thread_priority
- gr::analog::quadrature_demod_cf
  add_item_tag
- gr::analog::quadrature_demod_cf
  add_item_tag
- gr::analog::quadrature_demod_cf
  alias
- gr::analog::quadrature_demod_cf
  alias_pmt
- gr::analog::quadrature_demod_cf
  alias_set
- gr::analog::quadrature_demod_cf
  alignment
- gr::analog::quadrature_demod_cf
  allocate_buffer
- gr::analog::quadrature_demod_cf
  allocate_detail
- gr::analog::quadrature_demod_cf
  basic_block
- gr::analog::quadrature_demod_cf
  basic_block
- gr::analog::quadrature_demod_cf
  BLACK
- gr::analog::quadrature_demod_cf
  blkd_input_timer_value
- gr::analog::quadrature_demod_cf
  block
- gr::analog::quadrature_demod_cf
  block
- gr::analog::quadrature_demod_cf
  check_topology
- gr::analog::quadrature_demod_cf
  clear_finished
- gr::analog::quadrature_demod_cf
  color
- gr::analog::quadrature_demod_cf
  consume
- gr::analog::quadrature_demod_cf
  consume_each
- gr::analog::quadrature_demod_cf
  d_blkd_input_timer_value
- gr::analog::quadrature_demod_cf
  d_color
- gr::analog::quadrature_demod_cf
  d_debug_logger
- gr::analog::quadrature_demod_cf
  d_input_signature
- gr::analog::quadrature_demod_cf
  d_logger
- gr::analog::quadrature_demod_cf
  d_max_output_buffer
- gr::analog::quadrature_demod_cf
  d_message_subscribers
- gr::analog::quadrature_demod_cf
  d_min_output_buffer
- gr::analog::quadrature_demod_cf
  d_name
- gr::analog::quadrature_demod_cf
  d_output_signature
- gr::analog::quadrature_demod_cf
  d_pmt_done
- gr::analog::quadrature_demod_cf
  d_rpc_set
- gr::analog::quadrature_demod_cf
  d_rpc_vars
- gr::analog::quadrature_demod_cf
  d_setlock
- gr::analog::quadrature_demod_cf
  d_symbol_alias
- gr::analog::quadrature_demod_cf
  d_symbol_name
- gr::analog::quadrature_demod_cf
  d_symbolic_id
- gr::analog::quadrature_demod_cf
  d_system_port
- gr::analog::quadrature_demod_cf
  d_unique_id
- gr::analog::quadrature_demod_cf
  declare_sample_delay
- gr::analog::quadrature_demod_cf
  declare_sample_delay
- gr::analog::quadrature_demod_cf
  delete_head_nowait
- gr::analog::quadrature_demod_cf
  detail
- gr::analog::quadrature_demod_cf
  dispatch_msg
- gr::analog::quadrature_demod_cf
  empty_handled_p
- gr::analog::quadrature_demod_cf
  empty_handled_p
- gr::analog::quadrature_demod_cf
  empty_p
- gr::analog::quadrature_demod_cf
  empty_p
- gr::analog::quadrature_demod_cf
  enable_update_rate
- gr::analog::quadrature_demod_cf
  erase_msg
- gr::analog::quadrature_demod_cf
  expand_minmax_buffer
- gr::analog::quadrature_demod_cf
  finished
- gr::analog::quadrature_demod_cf
  fixed_rate
- gr::analog::quadrature_demod_cf
  fixed_rate_ninput_to_noutput
- gr::analog::quadrature_demod_cf
  fixed_rate_noutput_to_ninput
- gr::analog::quadrature_demod_cf
  forecast
- gr::analog::quadrature_demod_cf
  gain
- gr::analog::quadrature_demod_cf
  general_work
- gr::analog::quadrature_demod_cf
  get_iterator
- gr::analog::quadrature_demod_cf
  get_msg_map
- gr::analog::quadrature_demod_cf
  get_tags_in_range
- gr::analog::quadrature_demod_cf
  get_tags_in_range
- gr::analog::quadrature_demod_cf
  get_tags_in_window
- gr::analog::quadrature_demod_cf
  get_tags_in_window
- gr::analog::quadrature_demod_cf
  GREY
- gr::analog::quadrature_demod_cf
  has_msg_handler
- gr::analog::quadrature_demod_cf
  has_msg_port
- gr::analog::quadrature_demod_cf
  history
- gr::analog::quadrature_demod_cf
  identifier
- gr::analog::quadrature_demod_cf
  input_signature
- gr::analog::quadrature_demod_cf
  insert_tail
- gr::analog::quadrature_demod_cf
  is_pc_rpc_set
- gr::analog::quadrature_demod_cf
  is_rpc_set
- gr::analog::quadrature_demod_cf
  is_set_max_noutput_items
- gr::analog::quadrature_demod_cf
  is_unaligned
- gr::analog::quadrature_demod_cf
  log_level
- gr::analog::quadrature_demod_cf
  make
- gr::analog::quadrature_demod_cf
  max_noutput_items
- gr::analog::quadrature_demod_cf
  max_output_buffer
- gr::analog::quadrature_demod_cf
  message_port_is_hier
- gr::analog::quadrature_demod_cf
  message_port_is_hier_in
- gr::analog::quadrature_demod_cf
  message_port_is_hier_out
- gr::analog::quadrature_demod_cf
  message_port_pub
- gr::analog::quadrature_demod_cf
  message_port_register_in
- gr::analog::quadrature_demod_cf
  message_port_register_out
- gr::analog::quadrature_demod_cf
  message_port_sub
- gr::analog::quadrature_demod_cf
  message_port_unsub
- gr::analog::quadrature_demod_cf
  message_ports_in
- gr::analog::quadrature_demod_cf
  message_ports_out
- gr::analog::quadrature_demod_cf
  message_subscribers
- gr::analog::quadrature_demod_cf
  min_noutput_items
- gr::analog::quadrature_demod_cf
  min_output_buffer
- gr::analog::quadrature_demod_cf
  mp_relative_rate
- gr::analog::quadrature_demod_cf
  msg_accepter
- gr::analog::quadrature_demod_cf
  msg_queue
- gr::analog::quadrature_demod_cf
  name
- gr::analog::quadrature_demod_cf
  nitems_read
- gr::analog::quadrature_demod_cf
  nitems_written
- gr::analog::quadrature_demod_cf
  nmsgs
- gr::analog::quadrature_demod_cf
  no_pc_rpc
- gr::analog::quadrature_demod_cf
  notify_msg_neighbors
- gr::analog::quadrature_demod_cf
  output_multiple
- gr::analog::quadrature_demod_cf
  output_multiple_set
- gr::analog::quadrature_demod_cf
  output_signature
- gr::analog::quadrature_demod_cf
  pc_input_buffers_full
- gr::analog::quadrature_demod_cf
  pc_input_buffers_full
- gr::analog::quadrature_demod_cf
  pc_input_buffers_full_avg
- gr::analog::quadrature_demod_cf
  pc_input_buffers_full_avg
- gr::analog::quadrature_demod_cf
  pc_input_buffers_full_var
- gr::analog::quadrature_demod_cf
  pc_input_buffers_full_var
- gr::analog::quadrature_demod_cf
  pc_noutput_items
- gr::analog::quadrature_demod_cf
  pc_noutput_items_avg
- gr::analog::quadrature_demod_cf
  pc_noutput_items_var
- gr::analog::quadrature_demod_cf
  pc_nproduced
- gr::analog::quadrature_demod_cf
  pc_nproduced_avg
- gr::analog::quadrature_demod_cf
  pc_nproduced_var
- gr::analog::quadrature_demod_cf
  pc_output_buffers_full
- gr::analog::quadrature_demod_cf
  pc_output_buffers_full
- gr::analog::quadrature_demod_cf
  pc_output_buffers_full_avg
- gr::analog::quadrature_demod_cf
  pc_output_buffers_full_avg
- gr::analog::quadrature_demod_cf
  pc_output_buffers_full_var
- gr::analog::quadrature_demod_cf
  pc_output_buffers_full_var
- gr::analog::quadrature_demod_cf
  pc_throughput_avg
- gr::analog::quadrature_demod_cf
  pc_work_time
- gr::analog::quadrature_demod_cf
  pc_work_time_avg
- gr::analog::quadrature_demod_cf
  pc_work_time_total
- gr::analog::quadrature_demod_cf
  pc_work_time_var
- gr::analog::quadrature_demod_cf
  post
- gr::analog::quadrature_demod_cf
  processor_affinity
- gr::analog::quadrature_demod_cf
  produce
- gr::analog::quadrature_demod_cf
  relative_rate
- gr::analog::quadrature_demod_cf
  relative_rate_d
- gr::analog::quadrature_demod_cf
  relative_rate_i
- gr::analog::quadrature_demod_cf
  remove_item_tag
- gr::analog::quadrature_demod_cf
  remove_item_tag
- gr::analog::quadrature_demod_cf
  replace_buffer
- gr::analog::quadrature_demod_cf
  reset_perf_counters
- gr::analog::quadrature_demod_cf
  rpc_set
- gr::analog::quadrature_demod_cf
  sample_delay
- gr::analog::quadrature_demod_cf
  set_alignment
- gr::analog::quadrature_demod_cf
  set_blkd_input_timer_value
- gr::analog::quadrature_demod_cf
  set_block_alias
- gr::analog::quadrature_demod_cf
  set_color
- gr::analog::quadrature_demod_cf
  set_detail
- gr::analog::quadrature_demod_cf
  set_fixed_rate
- gr::analog::quadrature_demod_cf
  set_gain
- gr::analog::quadrature_demod_cf
  set_history
- gr::analog::quadrature_demod_cf
  set_input_signature
- gr::analog::quadrature_demod_cf
  set_inverse_relative_rate
- gr::analog::quadrature_demod_cf
  set_is_unaligned
- gr::analog::quadrature_demod_cf
  set_log_level
- gr::analog::quadrature_demod_cf
  set_max_noutput_items
- gr::analog::quadrature_demod_cf
  set_max_output_buffer
- gr::analog::quadrature_demod_cf
  set_max_output_buffer
- gr::analog::quadrature_demod_cf
  set_min_noutput_items
- gr::analog::quadrature_demod_cf
  set_min_output_buffer
- gr::analog::quadrature_demod_cf
  set_min_output_buffer
- gr::analog::quadrature_demod_cf
  set_msg_handler
- gr::analog::quadrature_demod_cf
  set_output_multiple
- gr::analog::quadrature_demod_cf
  set_output_signature
- gr::analog::quadrature_demod_cf
  set_processor_affinity
- gr::analog::quadrature_demod_cf
  set_relative_rate
- gr::analog::quadrature_demod_cf
  set_relative_rate
- gr::analog::quadrature_demod_cf
  set_tag_propagation_policy
- gr::analog::quadrature_demod_cf
  set_thread_priority
- gr::analog::quadrature_demod_cf
  set_unaligned
- gr::analog::quadrature_demod_cf
  setup_pc_rpc
- gr::analog::quadrature_demod_cf
  setup_rpc
- gr::analog::quadrature_demod_cf
  shared_from_base
- gr::analog::quadrature_demod_cf
  sptr
- gr::analog::quadrature_demod_cf
  start
- gr::analog::quadrature_demod_cf
  stop
- gr::analog::quadrature_demod_cf
  symbol_name
- gr::analog::quadrature_demod_cf
  symbolic_id
- gr::analog::quadrature_demod_cf
  sync_block
- gr::analog::quadrature_demod_cf
  sync_block
- gr::analog::quadrature_demod_cf
  system_handler
- gr::analog::quadrature_demod_cf
  tag_propagation_policy
- gr::analog::quadrature_demod_cf
  tag_propagation_policy_t
- gr::analog::quadrature_demod_cf
  thread_priority
- gr::analog::quadrature_demod_cf
  to_basic_block
- gr::analog::quadrature_demod_cf
  TPP_ALL_TO_ALL
- gr::analog::quadrature_demod_cf
  TPP_CUSTOM
- gr::analog::quadrature_demod_cf
  TPP_DONT
- gr::analog::quadrature_demod_cf
  TPP_ONE_TO_ONE
- gr::analog::quadrature_demod_cf
  unaligned
- gr::analog::quadrature_demod_cf
  unique_id
- gr::analog::quadrature_demod_cf
  unset_max_noutput_items
- gr::analog::quadrature_demod_cf
  unset_processor_affinity
- gr::analog::quadrature_demod_cf
  update_rate
- gr::analog::quadrature_demod_cf
  vcolor
- gr::analog::quadrature_demod_cf
  WHITE
- gr::analog::quadrature_demod_cf
  work
- gr::analog::quadrature_demod_cf
  WORK_CALLED_PRODUCE
- gr::analog::quadrature_demod_cf
  WORK_DONE
- gr::analog::quadrature_demod_cf
  work_return_t
- gr::analog::quadrature_demod_cf
  ~basic_block
- gr::analog::quadrature_demod_cf
  ~block
- gr::analog::quadrature_demod_cf
  ~msg_accepter