gr::digital::fll_band_edge_cc
gr::sync_block
gr::blocks::control_loop
gnuradio/digital/fll_band_edge_cc.h
std::shared_ptr< fll_band_edge_cc > typedef std::shared_ptr<fll_band_edge_cc> gr::digital::fll_band_edge_cc::sptr sptr gr::digital::fll_band_edge_cc::sptr
sptr static sptr gr::digital::fll_band_edge_cc::make (float samps_per_sym, float rolloff, int filter_size, float bandwidth) make gr::digital::fll_band_edge_cc::make float samps_per_sym float rolloff int filter_size float bandwidth

Make an FLL block.

samps_per_sym

(float) number of samples per symbol

rolloff

(float) Rolloff (excess bandwidth) of signal filter

filter_size

(int) number of filter taps to generate

bandwidth

(float) Loop bandwidth

filter_size
rolloff
void virtual void gr::digital::fll_band_edge_cc::set_samples_per_symbol (float sps)=0 set_samples_per_symbol gr::digital::fll_band_edge_cc::set_samples_per_symbol float sps

Set the number of samples per symbol.

Set's the number of samples per symbol the system should use. This value is used to calculate the filter taps and will force a recalculation.

sps

(float) new samples per symbol

void virtual void gr::digital::fll_band_edge_cc::set_rolloff (float rolloff)=0 set_rolloff gr::digital::fll_band_edge_cc::set_rolloff float rolloff

Set the rolloff factor of the shaping filter.

This sets the rolloff factor that is used in the pulse shaping filter and is used to calculate the filter taps. Changing this will force a recalculation of the filter taps.

This should be the same value that is used in the transmitter's pulse shaping filter. It must be between 0 and 1 and is usually between 0.2 and 0.5 (where 0.22 and 0.35 are commonly used values).

rolloff

(float) new shaping filter rolloff factor [0,1]

rolloff
void virtual void gr::digital::fll_band_edge_cc::set_filter_size (int filter_size)=0 set_filter_size gr::digital::fll_band_edge_cc::set_filter_size int filter_size

Set the number of taps in the filter.

This sets the number of taps in the band-edge filters. Setting this will force a recalculation of the filter taps.

This should be about the same number of taps used in the transmitter's shaping filter and also not very large. A large number of taps will result in a large delay between input and frequency estimation, and so will not be as accurate. Between 30 and 70 taps is usual.

filter_size

(float) number of taps in the filters

filter_size
float virtual float gr::digital::fll_band_edge_cc::samples_per_symbol () const =0 samples_per_symbol gr::digital::fll_band_edge_cc::samples_per_symbol

Returns the number of sampler per symbol used for the filter.

float virtual float gr::digital::fll_band_edge_cc::rolloff () const =0 rolloff gr::digital::fll_band_edge_cc::rolloff

Returns the rolloff factor used for the filter.

make
set_rolloff
int virtual int gr::digital::fll_band_edge_cc::filter_size () const =0 filter_size gr::digital::fll_band_edge_cc::filter_size

Returns the number of taps of the filter.

make
set_filter_size
void virtual void gr::digital::fll_band_edge_cc::print_taps ()=0 print_taps gr::digital::fll_band_edge_cc::print_taps

Print the taps to screen.

Frequency Lock Loop using band-edge filters.

The frequency lock loop derives a band-edge filter that covers the upper and lower bandwidths of a digitally-modulated signal. The bandwidth range is determined by the excess bandwidth (e.g., rolloff factor) of the modulated signal. The placement in frequency of the band-edges is determined by the oversampling ratio (number of samples per symbol) and the excess bandwidth. The size of the filters should be fairly large so as to average over a number of symbols.

The FLL works by filtering the upper and lower band edges into x_u(t) and x_l(t), respectively. These are combined to form cc(t) = x_u(t) + x_l(t) and ss(t) = x_u(t) - x_l(t). Combining these to form the signal e(t) = Re{cc(t) \times ss(t)^*} (where ^* is the complex conjugate) provides an error signal at the DC term that is directly proportional to the carrier frequency. We then make a second-order loop using the error signal that is the running average of e(t).

In practice, the above equation can be simplified by just comparing the absolute value squared of the output of both filters: abs(x_l(t))^2 - abs(x_u(t))^2 = norm(x_l(t)) - norm(x_u(t)).

In theory, the band-edge filter is the derivative of the matched filter in frequency, (H_be(f) = frac{H(f)}{df}). In practice, this comes down to a quarter sine wave at the point of the matched filter's rolloff (if it's a raised-cosine, the derivative of a cosine is a sine). Extend this sine by another quarter wave to make a half wave around the band-edges is equivalent in time to the sum of two sinc functions. The baseband filter for the band edges is therefore derived from this sum of sincs. The band edge filters are then just the baseband signal modulated to the correct place in frequency. All of these calculations are done in the 'design_filter' function.

Note: We use FIR filters here because the filters have to have a flat phase response over the entire frequency range to allow their comparisons to be valid.

It is very important that the band edge filters be the derivatives of the pulse shaping filter, and that they be linear phase. Otherwise, the variance of the error will be very large.

gr::basic_block
gr::block
gr::blocks::control_loop
gr::digital::fll_band_edge_cc
gr::messages::msg_accepter
gr::msg_accepter
gr::sync_block
std::enable_shared_from_this< basic_block >
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::blocks::control_loop
gr::digital::fll_band_edge_cc
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::digital::fll_band_edge_cc
  _post
- gr::digital::fll_band_edge_cc
  active_thread_priority
- gr::digital::fll_band_edge_cc
  add_item_tag
- gr::digital::fll_band_edge_cc
  add_item_tag
- gr::digital::fll_band_edge_cc
  advance_loop
- gr::digital::fll_band_edge_cc
  alias
- gr::digital::fll_band_edge_cc
  alias_pmt
- gr::digital::fll_band_edge_cc
  alias_set
- gr::digital::fll_band_edge_cc
  alignment
- gr::digital::fll_band_edge_cc
  allocate_buffer
- gr::digital::fll_band_edge_cc
  allocate_detail
- gr::digital::fll_band_edge_cc
  basic_block
- gr::digital::fll_band_edge_cc
  basic_block
- gr::digital::fll_band_edge_cc
  BLACK
- gr::digital::fll_band_edge_cc
  blkd_input_timer_value
- gr::digital::fll_band_edge_cc
  block
- gr::digital::fll_band_edge_cc
  block
- gr::digital::fll_band_edge_cc
  check_topology
- gr::digital::fll_band_edge_cc
  clear_finished
- gr::digital::fll_band_edge_cc
  color
- gr::digital::fll_band_edge_cc
  consume
- gr::digital::fll_band_edge_cc
  consume_each
- gr::digital::fll_band_edge_cc
  control_loop
- gr::digital::fll_band_edge_cc
  control_loop
- gr::digital::fll_band_edge_cc
  d_alpha
- gr::digital::fll_band_edge_cc
  d_beta
- gr::digital::fll_band_edge_cc
  d_blkd_input_timer_value
- gr::digital::fll_band_edge_cc
  d_color
- gr::digital::fll_band_edge_cc
  d_damping
- gr::digital::fll_band_edge_cc
  d_debug_logger
- gr::digital::fll_band_edge_cc
  d_freq
- gr::digital::fll_band_edge_cc
  d_input_signature
- gr::digital::fll_band_edge_cc
  d_logger
- gr::digital::fll_band_edge_cc
  d_loop_bw
- gr::digital::fll_band_edge_cc
  d_max_freq
- gr::digital::fll_band_edge_cc
  d_max_output_buffer
- gr::digital::fll_band_edge_cc
  d_message_subscribers
- gr::digital::fll_band_edge_cc
  d_min_freq
- gr::digital::fll_band_edge_cc
  d_min_output_buffer
- gr::digital::fll_band_edge_cc
  d_name
- gr::digital::fll_band_edge_cc
  d_output_signature
- gr::digital::fll_band_edge_cc
  d_phase
- gr::digital::fll_band_edge_cc
  d_pmt_done
- gr::digital::fll_band_edge_cc
  d_rpc_set
- gr::digital::fll_band_edge_cc
  d_rpc_vars
- gr::digital::fll_band_edge_cc
  d_setlock
- gr::digital::fll_band_edge_cc
  d_symbol_alias
- gr::digital::fll_band_edge_cc
  d_symbol_name
- gr::digital::fll_band_edge_cc
  d_symbolic_id
- gr::digital::fll_band_edge_cc
  d_system_port
- gr::digital::fll_band_edge_cc
  d_unique_id
- gr::digital::fll_band_edge_cc
  declare_sample_delay
- gr::digital::fll_band_edge_cc
  declare_sample_delay
- gr::digital::fll_band_edge_cc
  delete_head_nowait
- gr::digital::fll_band_edge_cc
  detail
- gr::digital::fll_band_edge_cc
  dispatch_msg
- gr::digital::fll_band_edge_cc
  empty_handled_p
- gr::digital::fll_band_edge_cc
  empty_handled_p
- gr::digital::fll_band_edge_cc
  empty_p
- gr::digital::fll_band_edge_cc
  empty_p
- gr::digital::fll_band_edge_cc
  enable_update_rate
- gr::digital::fll_band_edge_cc
  erase_msg
- gr::digital::fll_band_edge_cc
  expand_minmax_buffer
- gr::digital::fll_band_edge_cc
  filter_size
- gr::digital::fll_band_edge_cc
  finished
- gr::digital::fll_band_edge_cc
  fixed_rate
- gr::digital::fll_band_edge_cc
  fixed_rate_ninput_to_noutput
- gr::digital::fll_band_edge_cc
  fixed_rate_noutput_to_ninput
- gr::digital::fll_band_edge_cc
  forecast
- gr::digital::fll_band_edge_cc
  frequency_limit
- gr::digital::fll_band_edge_cc
  general_work
- gr::digital::fll_band_edge_cc
  get_alpha
- gr::digital::fll_band_edge_cc
  get_beta
- gr::digital::fll_band_edge_cc
  get_damping_factor
- gr::digital::fll_band_edge_cc
  get_frequency
- gr::digital::fll_band_edge_cc
  get_iterator
- gr::digital::fll_band_edge_cc
  get_loop_bandwidth
- gr::digital::fll_band_edge_cc
  get_max_freq
- gr::digital::fll_band_edge_cc
  get_min_freq
- gr::digital::fll_band_edge_cc
  get_msg_map
- gr::digital::fll_band_edge_cc
  get_phase
- gr::digital::fll_band_edge_cc
  get_tags_in_range
- gr::digital::fll_band_edge_cc
  get_tags_in_range
- gr::digital::fll_band_edge_cc
  get_tags_in_window
- gr::digital::fll_band_edge_cc
  get_tags_in_window
- gr::digital::fll_band_edge_cc
  GREY
- gr::digital::fll_band_edge_cc
  has_msg_handler
- gr::digital::fll_band_edge_cc
  has_msg_port
- gr::digital::fll_band_edge_cc
  history
- gr::digital::fll_band_edge_cc
  identifier
- gr::digital::fll_band_edge_cc
  input_signature
- gr::digital::fll_band_edge_cc
  insert_tail
- gr::digital::fll_band_edge_cc
  is_pc_rpc_set
- gr::digital::fll_band_edge_cc
  is_rpc_set
- gr::digital::fll_band_edge_cc
  is_set_max_noutput_items
- gr::digital::fll_band_edge_cc
  is_unaligned
- gr::digital::fll_band_edge_cc
  log_level
- gr::digital::fll_band_edge_cc
  make
- gr::digital::fll_band_edge_cc
  max_noutput_items
- gr::digital::fll_band_edge_cc
  max_output_buffer
- gr::digital::fll_band_edge_cc
  message_port_is_hier
- gr::digital::fll_band_edge_cc
  message_port_is_hier_in
- gr::digital::fll_band_edge_cc
  message_port_is_hier_out
- gr::digital::fll_band_edge_cc
  message_port_pub
- gr::digital::fll_band_edge_cc
  message_port_register_in
- gr::digital::fll_band_edge_cc
  message_port_register_out
- gr::digital::fll_band_edge_cc
  message_port_sub
- gr::digital::fll_band_edge_cc
  message_port_unsub
- gr::digital::fll_band_edge_cc
  message_ports_in
- gr::digital::fll_band_edge_cc
  message_ports_out
- gr::digital::fll_band_edge_cc
  message_subscribers
- gr::digital::fll_band_edge_cc
  min_noutput_items
- gr::digital::fll_band_edge_cc
  min_output_buffer
- gr::digital::fll_band_edge_cc
  mp_relative_rate
- gr::digital::fll_band_edge_cc
  msg_accepter
- gr::digital::fll_band_edge_cc
  msg_queue
- gr::digital::fll_band_edge_cc
  name
- gr::digital::fll_band_edge_cc
  nitems_read
- gr::digital::fll_band_edge_cc
  nitems_written
- gr::digital::fll_band_edge_cc
  nmsgs
- gr::digital::fll_band_edge_cc
  no_pc_rpc
- gr::digital::fll_band_edge_cc
  notify_msg_neighbors
- gr::digital::fll_band_edge_cc
  output_multiple
- gr::digital::fll_band_edge_cc
  output_multiple_set
- gr::digital::fll_band_edge_cc
  output_signature
- gr::digital::fll_band_edge_cc
  pc_input_buffers_full
- gr::digital::fll_band_edge_cc
  pc_input_buffers_full
- gr::digital::fll_band_edge_cc
  pc_input_buffers_full_avg
- gr::digital::fll_band_edge_cc
  pc_input_buffers_full_avg
- gr::digital::fll_band_edge_cc
  pc_input_buffers_full_var
- gr::digital::fll_band_edge_cc
  pc_input_buffers_full_var
- gr::digital::fll_band_edge_cc
  pc_noutput_items
- gr::digital::fll_band_edge_cc
  pc_noutput_items_avg
- gr::digital::fll_band_edge_cc
  pc_noutput_items_var
- gr::digital::fll_band_edge_cc
  pc_nproduced
- gr::digital::fll_band_edge_cc
  pc_nproduced_avg
- gr::digital::fll_band_edge_cc
  pc_nproduced_var
- gr::digital::fll_band_edge_cc
  pc_output_buffers_full
- gr::digital::fll_band_edge_cc
  pc_output_buffers_full
- gr::digital::fll_band_edge_cc
  pc_output_buffers_full_avg
- gr::digital::fll_band_edge_cc
  pc_output_buffers_full_avg
- gr::digital::fll_band_edge_cc
  pc_output_buffers_full_var
- gr::digital::fll_band_edge_cc
  pc_output_buffers_full_var
- gr::digital::fll_band_edge_cc
  pc_throughput_avg
- gr::digital::fll_band_edge_cc
  pc_work_time
- gr::digital::fll_band_edge_cc
  pc_work_time_avg
- gr::digital::fll_band_edge_cc
  pc_work_time_total
- gr::digital::fll_band_edge_cc
  pc_work_time_var
- gr::digital::fll_band_edge_cc
  phase_wrap
- gr::digital::fll_band_edge_cc
  post
- gr::digital::fll_band_edge_cc
  print_taps
- gr::digital::fll_band_edge_cc
  processor_affinity
- gr::digital::fll_band_edge_cc
  produce
- gr::digital::fll_band_edge_cc
  relative_rate
- gr::digital::fll_band_edge_cc
  relative_rate_d
- gr::digital::fll_band_edge_cc
  relative_rate_i
- gr::digital::fll_band_edge_cc
  remove_item_tag
- gr::digital::fll_band_edge_cc
  remove_item_tag
- gr::digital::fll_band_edge_cc
  replace_buffer
- gr::digital::fll_band_edge_cc
  reset_perf_counters
- gr::digital::fll_band_edge_cc
  rolloff
- gr::digital::fll_band_edge_cc
  rpc_set
- gr::digital::fll_band_edge_cc
  sample_delay
- gr::digital::fll_band_edge_cc
  samples_per_symbol
- gr::digital::fll_band_edge_cc
  set_alignment
- gr::digital::fll_band_edge_cc
  set_alpha
- gr::digital::fll_band_edge_cc
  set_beta
- gr::digital::fll_band_edge_cc
  set_blkd_input_timer_value
- gr::digital::fll_band_edge_cc
  set_block_alias
- gr::digital::fll_band_edge_cc
  set_color
- gr::digital::fll_band_edge_cc
  set_damping_factor
- gr::digital::fll_band_edge_cc
  set_detail
- gr::digital::fll_band_edge_cc
  set_filter_size
- gr::digital::fll_band_edge_cc
  set_fixed_rate
- gr::digital::fll_band_edge_cc
  set_frequency
- gr::digital::fll_band_edge_cc
  set_history
- gr::digital::fll_band_edge_cc
  set_input_signature
- gr::digital::fll_band_edge_cc
  set_inverse_relative_rate
- gr::digital::fll_band_edge_cc
  set_is_unaligned
- gr::digital::fll_band_edge_cc
  set_log_level
- gr::digital::fll_band_edge_cc
  set_loop_bandwidth
- gr::digital::fll_band_edge_cc
  set_max_freq
- gr::digital::fll_band_edge_cc
  set_max_noutput_items
- gr::digital::fll_band_edge_cc
  set_max_output_buffer
- gr::digital::fll_band_edge_cc
  set_max_output_buffer
- gr::digital::fll_band_edge_cc
  set_min_freq
- gr::digital::fll_band_edge_cc
  set_min_noutput_items
- gr::digital::fll_band_edge_cc
  set_min_output_buffer
- gr::digital::fll_band_edge_cc
  set_min_output_buffer
- gr::digital::fll_band_edge_cc
  set_msg_handler
- gr::digital::fll_band_edge_cc
  set_output_multiple
- gr::digital::fll_band_edge_cc
  set_output_signature
- gr::digital::fll_band_edge_cc
  set_phase
- gr::digital::fll_band_edge_cc
  set_processor_affinity
- gr::digital::fll_band_edge_cc
  set_relative_rate
- gr::digital::fll_band_edge_cc
  set_relative_rate
- gr::digital::fll_band_edge_cc
  set_rolloff
- gr::digital::fll_band_edge_cc
  set_samples_per_symbol
- gr::digital::fll_band_edge_cc
  set_tag_propagation_policy
- gr::digital::fll_band_edge_cc
  set_thread_priority
- gr::digital::fll_band_edge_cc
  set_unaligned
- gr::digital::fll_band_edge_cc
  setup_pc_rpc
- gr::digital::fll_band_edge_cc
  setup_rpc
- gr::digital::fll_band_edge_cc
  shared_from_base
- gr::digital::fll_band_edge_cc
  sptr
- gr::digital::fll_band_edge_cc
  start
- gr::digital::fll_band_edge_cc
  stop
- gr::digital::fll_band_edge_cc
  symbol_name
- gr::digital::fll_band_edge_cc
  symbolic_id
- gr::digital::fll_band_edge_cc
  sync_block
- gr::digital::fll_band_edge_cc
  sync_block
- gr::digital::fll_band_edge_cc
  system_handler
- gr::digital::fll_band_edge_cc
  tag_propagation_policy
- gr::digital::fll_band_edge_cc
  tag_propagation_policy_t
- gr::digital::fll_band_edge_cc
  thread_priority
- gr::digital::fll_band_edge_cc
  to_basic_block
- gr::digital::fll_band_edge_cc
  TPP_ALL_TO_ALL
- gr::digital::fll_band_edge_cc
  TPP_CUSTOM
- gr::digital::fll_band_edge_cc
  TPP_DONT
- gr::digital::fll_band_edge_cc
  TPP_ONE_TO_ONE
- gr::digital::fll_band_edge_cc
  unaligned
- gr::digital::fll_band_edge_cc
  unique_id
- gr::digital::fll_band_edge_cc
  unset_max_noutput_items
- gr::digital::fll_band_edge_cc
  unset_processor_affinity
- gr::digital::fll_band_edge_cc
  update_gains
- gr::digital::fll_band_edge_cc
  update_rate
- gr::digital::fll_band_edge_cc
  vcolor
- gr::digital::fll_band_edge_cc
  WHITE
- gr::digital::fll_band_edge_cc
  work
- gr::digital::fll_band_edge_cc
  WORK_CALLED_PRODUCE
- gr::digital::fll_band_edge_cc
  WORK_DONE
- gr::digital::fll_band_edge_cc
  work_return_t
- gr::digital::fll_band_edge_cc
  ~basic_block
- gr::digital::fll_band_edge_cc
  ~block
- gr::digital::fll_band_edge_cc
  ~control_loop
- gr::digital::fll_band_edge_cc
  ~msg_accepter