GNU Radio 3.6.4.1 C++ API
vocoder_cvsd_encode_sb Class Reference

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

#include <vocoder_cvsd_encode_sb.h>

Inheritance diagram for vocoder_cvsd_encode_sb:
gr_sync_decimator gr_sync_block gr_block gr_basic_block gr_msg_accepter gruel::msg_accepter

List of all members.

Public Member Functions

 ~vocoder_cvsd_encode_sb ()
short min_step ()
short max_step ()
double step_decay ()
double accum_decay ()
int K ()
int J ()
short pos_accum_max ()
short neg_accum_max ()
int work (int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items)
 just like gr_block::general_work, only this arranges to call consume_each for you
- Public Member Functions inherited from gr_sync_decimator
unsigned decimation () const
void set_decimation (unsigned decimation)
void forecast (int noutput_items, gr_vector_int &ninput_items_required)
 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)
 compute output items from input items
int fixed_rate_ninput_to_noutput (int ninput)
 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)
 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.

Friends

VOCODER_API
vocoder_cvsd_encode_sb_sptr 
vocoder_make_cvsd_encode_sb (short min_step, short max_step, double step_decay, double accum_decay, int K, int J, short pos_accum_max, short neg_accum_max)
 Constructor parameters to initialize the CVSD encoder. The default values are modeled after the Bluetooth standard and should not be changed except by an advanced user.

Additional Inherited Members

- Protected Member Functions inherited from gr_sync_decimator
 gr_sync_decimator (void)
 gr_sync_decimator (const std::string &name, gr_io_signature_sptr input_signature, gr_io_signature_sptr output_signature, unsigned decimation)
- Protected Member Functions inherited from gr_sync_block
 gr_sync_block (void)
 gr_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
 gr_block (void)
 gr_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 gr_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)
 Removes a tag from the given input buffer.
void remove_item_tag (unsigned int which_input, const gr_tag_t &tag)
 Removes a tag from the given input buffer.
void get_tags_in_range (std::vector< gr_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< gr_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.
- Protected Member Functions inherited from gr_basic_block
 gr_basic_block (void)
 gr_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
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)

Detailed Description

This block performs CVSD audio encoding. 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 encoder effectively provides 8-to-1 compression. More specifically, each incoming audio sample is compared to an internal reference value. If the input is greater or equal to the reference, the encoder outputs a "1" bit. If the input is less than the reference, the encoder outputs a "0" bit. The reference value is then updated accordingly based on the frequency of outputted "1" or "0" bits. By grouping 8 outputs bits together, the encoder essentially produce one output byte for every 8 input audio samples.

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

The CVSD encoder module must be prefixed by an up-converter to over-sample the audio data prior to encoding. The Bluetooth standard specifically calls for a 1-to-8 interpolating up-converter. While this reduces the overall compression of the codec, this is required so that the encoder can accurately compute the slope between adjacent audio samples and correctly update its internal reference value.

References:

  1. Continuously Variable Slope Delta Modulation (CVSD) A Tutorial, Available: http://www.eetkorea.com/ARTICLES/2003AUG/A/2003AUG29_NTEK_RFD_AN02.PDF.
  1. Specification of The Bluetooth System Available: http://grouper.ieee.org/groups/802/15/Bluetooth/core_10_b.pdf.
  1. 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

Constructor & Destructor Documentation

vocoder_cvsd_encode_sb::~vocoder_cvsd_encode_sb ( )

Member Function Documentation

double vocoder_cvsd_encode_sb::accum_decay ( )
inline
int vocoder_cvsd_encode_sb::J ( )
inline
int vocoder_cvsd_encode_sb::K ( )
inline
short vocoder_cvsd_encode_sb::max_step ( )
inline
short vocoder_cvsd_encode_sb::min_step ( )
inline
short vocoder_cvsd_encode_sb::neg_accum_max ( )
inline
short vocoder_cvsd_encode_sb::pos_accum_max ( )
inline
double vocoder_cvsd_encode_sb::step_decay ( )
inline
int vocoder_cvsd_encode_sb::work ( int  noutput_items,
gr_vector_const_void_star input_items,
gr_vector_void_star output_items 
)
virtual

just like gr_block::general_work, only this arranges to call consume_each for you

The user must override work to define the signal processing code

Implements gr_sync_block.


Friends And Related Function Documentation

VOCODER_API vocoder_cvsd_encode_sb_sptr vocoder_make_cvsd_encode_sb ( short  min_step,
short  max_step,
double  step_decay,
double  accum_decay,
int  K,
int  J,
short  pos_accum_max,
short  neg_accum_max 
)
friend

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

Parameters:
min_stepMinimum step size used to update the internal reference. Default: "10"
max_stepMaximum step size used to update the internal reference. Default: "1280"
step_decayDecay 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_decayDecay factor applied to the internal reference during every interation 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 less or equal 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_maxMaximum integer value allowed for the internal reference. Default: "32767" (2^15 - 1 or MAXSHORT)
neg_accum_maxMinimum integer value allowed for the internal reference. Default: "-32767" (-2^15 + 1 or MINSHORT+1)

The documentation for this class was generated from the following file: