gr::vocoder::cvsd_decode_bs
gr::sync_interpolator
gnuradio/vocoder/cvsd_decode_bs.h
std::shared_ptr< cvsd_decode_bs > typedef std::shared_ptr<cvsd_decode_bs> gr::vocoder::cvsd_decode_bs::sptr sptr gr::vocoder::cvsd_decode_bs::sptr
sptr static sptr gr::vocoder::cvsd_decode_bs::make (short min_step=10, short max_step=1280, double step_decay=0.9990234375, double accum_decay=0.96875, int K=32, int J=4, short pos_accum_max=32767, short neg_accum_max=-32767) make gr::vocoder::cvsd_decode_bs::make short min_step 10 short max_step 1280 double step_decay 0.9990234375 double accum_decay 0.96875 int K 32 int J 4 short pos_accum_max 32767 short neg_accum_max -32767

Constructor parameters to initialize the CVSD decoder. The default values are modeled after the Bluetooth standard and should not be changed, except by an advanced user.

min_step

Minimum step size used to update the internal reference. Default: "10"

max_step

Maximum step size used to update the internal reference. Default: "1280"

step_decay

Decay factor applied to step size when there is not a run of J output 1s or 0s. Default: "0.9990234375" (i.e. 1-1/1024)

accum_decay

Decay factor applied to the internal reference during every iteration of the codec. Default: "0.96875" (i.e. 1-1/32)

K

Size of shift register; the number of output bits remembered by codec (must be <= to 32). Default: "32"

J

Number of bits in the shift register that are equal; i.e. the size of a run of 1s, 0s. Default: "4"

pos_accum_max

Maximum integer value allowed for the internal reference. Default: "32767" (2^15 - 1 or MAXSHORT)

neg_accum_max

Minimum integer value allowed for the internal reference. Default: "-32767" (-2^15 + 1 or MINSHORT+1)

accum_decay
J
K
max_step
min_step
neg_accum_max
pos_accum_max
step_decay
short virtual short gr::vocoder::cvsd_decode_bs::min_step ()=0 min_step gr::vocoder::cvsd_decode_bs::min_step make
short virtual short gr::vocoder::cvsd_decode_bs::max_step ()=0 max_step gr::vocoder::cvsd_decode_bs::max_step make
double virtual double gr::vocoder::cvsd_decode_bs::step_decay ()=0 step_decay gr::vocoder::cvsd_decode_bs::step_decay make
double virtual double gr::vocoder::cvsd_decode_bs::accum_decay ()=0 accum_decay gr::vocoder::cvsd_decode_bs::accum_decay make
int virtual int gr::vocoder::cvsd_decode_bs::K ()=0 K gr::vocoder::cvsd_decode_bs::K make
int virtual int gr::vocoder::cvsd_decode_bs::J ()=0 J gr::vocoder::cvsd_decode_bs::J make
short virtual short gr::vocoder::cvsd_decode_bs::pos_accum_max ()=0 pos_accum_max gr::vocoder::cvsd_decode_bs::pos_accum_max make
short virtual short gr::vocoder::cvsd_decode_bs::neg_accum_max ()=0 neg_accum_max gr::vocoder::cvsd_decode_bs::neg_accum_max make

This block performs CVSD audio decoding. Its design and implementation is modeled after the CVSD encoder/decoder specifications defined in the Bluetooth standard.

CVSD is a method for encoding speech that seeks to reduce the bandwidth required for digital voice transmission. CVSD takes advantage of strong correlation between samples, quantizing the difference in amplitude between two consecutive samples. This difference requires fewer quantization levels as compared to other methods that quantize the actual amplitude level, reducing the bandwidth. CVSD employs a two level quantizer (one bit) and an adaptive algorithm that allows for continuous step size adjustment.

The coder can represent low amplitude signals with accuracy without sacrificing performance on large amplitude signals, a trade off that occurs in some non-adaptive modulations.

The CVSD decoder effectively provides 1-to-8 decompression. More specifically, for each incoming input bit, the decoder outputs one audio sample. If the input is a "1" bit, the internal reference is increased appropriately and then outputted as the next estimated audio sample. If the input is a "0" bit, the internal reference is decreased appropriately and then likewise outputted as the next estimated audio sample. Grouping 8 input bits together, the encoder essentially produces 8 output audio samples for everyone one input byte.

This decoder requires that output audio samples are 2-byte short signed integers. The result bandwidth conversion, therefore, is 1 byte of encoded audio data to 16 output bytes of raw audio data.

The CVSD decoder module must be post-fixed by a down-converter to under-sample the audio data after decoding. The Bluetooth standard specifically calls for a 8-to-1 decimating down-converter. This is required so that so that output sampling rate equals the original input sampling rate present before the encoder. In all cases, the output down-converter rate must be the inverse of the input up-converter rate before the CVSD encoder.

References:

1. Continuously Variable Slope Delta Modulation (CVSD) A Tutorial, Available: http://www.eetkorea.com/ARTICLES/2003AUG/A/2003AUG29_NTEK_RFD_AN02.PDF.

2. Specification of The Bluetooth System Available: http://grouper.ieee.org/groups/802/15/Bluetooth/core_10_b.pdf.

3. McGarrity, S., Bluetooth Full Duplex Voice and Data Transmission. 2002. Bluetooth Voice Simulink Model, Available: http://www.mathworks.com/company/newsletters/digest/nov01/bluetooth.html

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