libavcodec/acelp_vectors.c File Reference

#include <inttypes.h>
#include "avcodec.h"
#include "acelp_vectors.h"
#include "celp_math.h"

Go to the source code of this file.

Functions

void ff_acelp_fc_pulse_per_track (int16_t *fc_v, const uint8_t *tab1, const uint8_t *tab2, int pulse_indexes, int pulse_signs, int pulse_count, int bits)
 Decode fixed-codebook vector (3.8 and D.5.8 of G.729, 5.7.1 of AMR).
void ff_decode_10_pulses_35bits (const int16_t *fixed_index, AMRFixed *fixed_sparse, const uint8_t *gray_decode, int half_pulse_count, int bits)
 Decode the algebraic codebook index to pulse positions and signs and construct the algebraic codebook vector for MODE_12k2.
void ff_acelp_weighted_vector_sum (int16_t *out, const int16_t *in_a, const int16_t *in_b, int16_t weight_coeff_a, int16_t weight_coeff_b, int16_t rounder, int shift, int length)
 weighted sum of two vectors with rounding.
void ff_weighted_vector_sumf (float *out, const float *in_a, const float *in_b, float weight_coeff_a, float weight_coeff_b, int length)
 float implementation of weighted sum of two vectors.
void ff_adaptive_gain_control (float *out, const float *in, float speech_energ, int size, float alpha, float *gain_mem)
 Adaptive gain control (as used in AMR postfiltering).
void ff_scale_vector_to_given_sum_of_squares (float *out, const float *in, float sum_of_squares, const int n)
 Set the sum of squares of a signal by scaling.
void ff_set_fixed_vector (float *out, const AMRFixed *in, float scale, int size)
 Add fixed vector to an array from a sparse representation.
void ff_clear_fixed_vector (float *out, const AMRFixed *in, int size)
 Clear array values set by set_fixed_vector.

Variables

const uint8_t ff_fc_2pulses_9bits_track1 [16]
 Track|Pulse| Positions ----------------------------------------- 1 | 0 | 1, 6, 11, 16, 21, 26, 31, 36 | | 3, 8, 13, 18, 23, 28, 33, 38 -----------------------------------------.
const uint8_t ff_fc_2pulses_9bits_track1_gray [16]
const uint8_t ff_fc_2pulses_9bits_track2_gray [32]
 Track|Pulse| Positions ----------------------------------------- 2 | 1 | 0, 7, 14, 20, 27, 34, 1, 21 | | 2, 9, 15, 22, 29, 35, 6, 26 | | 4,10, 17, 24, 30, 37, 11, 31 | | 5,12, 19, 25, 32, 39, 16, 36 -----------------------------------------.
const uint8_t ff_fc_4pulses_8bits_tracks_13 [16]
 Track|Pulse| Positions ------------------------------------------------------------------------- 1 | 0 | 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75 ------------------------------------------------------------------------- 2 | 1 | 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76 ------------------------------------------------------------------------- 3 | 2 | 2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67, 72, 77 -------------------------------------------------------------------------.
const uint8_t ff_fc_4pulses_8bits_track_4 [32]
 Track|Pulse| Positions ------------------------------------------------------------------------- 4 | 3 | 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78 | | 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74, 79 -------------------------------------------------------------------------.
const float ff_pow_0_7 [10]
 Table of pow(0.7,n).
const float ff_pow_0_75 [10]
 Table of pow(0.75,n).
const float ff_pow_0_55 [10]
 Table of pow(0.55,n).
const float ff_b60_sinc [61]
 b60 hamming windowed sinc function coefficients


Function Documentation

void ff_acelp_fc_pulse_per_track ( int16_t fc_v,
const uint8_t *  tab1,
const uint8_t *  tab2,
int  pulse_indexes,
int  pulse_signs,
int  pulse_count,
int  bits 
)

Decode fixed-codebook vector (3.8 and D.5.8 of G.729, 5.7.1 of AMR).

Parameters:
[out] fc_v decoded fixed codebook vector (2.13)
tab1 table used for first pulse_count pulses
tab2 table used for last pulse
pulse_indexes fixed codebook indexes
pulse_signs signs of the excitation pulses (0 bit value means negative sign)
bits number of bits per one pulse index
pulse_count number of pulses decoded using first table
bits length of one pulse index in bits
Used in G.729 @8k, G.729 @4.4k, G.729 @6.4k, AMR @7.95k, AMR @7.40k

Definition at line 125 of file acelp_vectors.c.

Referenced by decode_frame().

void ff_acelp_weighted_vector_sum ( int16_t out,
const int16_t in_a,
const int16_t in_b,
int16_t  weight_coeff_a,
int16_t  weight_coeff_b,
int16_t  rounder,
int  shift,
int  length 
)

weighted sum of two vectors with rounding.

Parameters:
[out] out result of addition
in_a first vector
in_b second vector
weight_coeff_a first vector weight coefficient
weight_coeff_a second vector weight coefficient
rounder this value will be added to the sum of the two vectors
shift result will be shifted to right by this value
length vectors length
Note:
It is safe to pass the same buffer for out and in_a or in_b.
out[i] = (in_a[i]*weight_a + in_b[i]*weight_b + rounder) >> shift

Definition at line 170 of file acelp_vectors.c.

Referenced by decode_frame(), g723_1_decode_frame(), long_term_filter(), and lsp_interpolate().

void ff_adaptive_gain_control ( float *  out,
const float *  in,
float  speech_energ,
int  size,
float  alpha,
float *  gain_mem 
)

Adaptive gain control (as used in AMR postfiltering).

Parameters:
out output buffer for filtered speech data
in the input speech buffer (may be the same as out)
speech_energ input energy
size the input buffer size
alpha exponential filter factor
gain_mem a pointer to the filter memory (single float of size)

Definition at line 200 of file acelp_vectors.c.

Referenced by decode_frame(), and postfilter().

void ff_clear_fixed_vector ( float *  out,
const AMRFixed in,
int  size 
)

Clear array values set by set_fixed_vector.

Parameters:
out fixed vector to be cleared
in sparse fixed vector
size the output vector size

Definition at line 249 of file acelp_vectors.c.

Referenced by amrnb_decode_frame().

void ff_decode_10_pulses_35bits ( const int16_t fixed_index,
AMRFixed fixed_sparse,
const uint8_t *  gray_decode,
int  half_pulse_count,
int  bits 
)

Decode the algebraic codebook index to pulse positions and signs and construct the algebraic codebook vector for MODE_12k2.

Note:
: The positions and signs are explicitly coded in MODE_12k2.
Parameters:
fixed_index positions of the ten pulses
fixed_sparse pointer to the algebraic codebook vector
gray_decode gray decoding table
half_pulse_count number of couples of pulses
bits length of one pulse index in bits

Definition at line 149 of file acelp_vectors.c.

Referenced by decode_fixed_sparse(), and ff_sipr_decode_frame_16k().

void ff_scale_vector_to_given_sum_of_squares ( float *  out,
const float *  in,
float  sum_of_squares,
const int  n 
)

Set the sum of squares of a signal by scaling.

Parameters:
out output samples
in input samples
sum_of_squares new sum of squares
n number of samples
Note:
If the input is zero (or its energy underflows), the output is zero. This is the behavior of AGC in the AMR reference decoder. The QCELP reference decoder seems to have undefined behavior.
TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6 3GPP TS 26.090 6.1 (6)

Definition at line 221 of file acelp_vectors.c.

Referenced by apply_gain_ctrl(), scaled_hb_excitation(), and synthesis().

void ff_set_fixed_vector ( float *  out,
const AMRFixed in,
float  scale,
int  size 
)

Add fixed vector to an array from a sparse representation.

Parameters:
out fixed vector with pitch sharpening
in sparse fixed vector
scale number to multiply the fixed vector by
size the output vector size

Definition at line 232 of file acelp_vectors.c.

Referenced by amrnb_decode_frame(), ff_sipr_decode_frame_16k(), and synth_block_fcb_acb().

void ff_weighted_vector_sumf ( float *  out,
const float *  in_a,
const float *  in_b,
float  weight_coeff_a,
float  weight_coeff_b,
int  length 
)

float implementation of weighted sum of two vectors.

Parameters:
[out] out result of addition
in_a first vector
in_b second vector
weight_coeff_a first vector weight coefficient
weight_coeff_a second vector weight coefficient
length vectors length
Note:
It is safe to pass the same buffer for out and in_a or in_b.

Definition at line 190 of file acelp_vectors.c.

Referenced by amrnb_decode_frame(), decode_frame(), decode_lspf(), ff_sipr_decode_frame_16k(), hb_synthesis(), interpolate_lpc(), interpolate_lsf(), synth_block_fcb_acb(), and synthesis().


Variable Documentation

const float ff_b60_sinc[61]

Initial value:

 {
 0.898529  ,  0.865051  ,  0.769257  ,  0.624054  ,  0.448639  ,  0.265289   ,
 0.0959167 , -0.0412598 , -0.134338  , -0.178986  , -0.178528  , -0.142609   ,
-0.0849304 , -0.0205078 ,  0.0369568 ,  0.0773926 ,  0.0955200 ,  0.0912781  ,
 0.0689392 ,  0.0357056 ,  0.        , -0.0305481 , -0.0504150 , -0.0570068  ,
-0.0508423 , -0.0350037 , -0.0141602 ,  0.00665283,  0.0230713 ,  0.0323486  ,
 0.0335388 ,  0.0275879 ,  0.0167847 ,  0.00411987, -0.00747681, -0.0156860  ,
-0.0193481 , -0.0183716 , -0.0137634 , -0.00704956,  0.        ,  0.00582886 ,
 0.00939941,  0.0103760 ,  0.00903320,  0.00604248,  0.00238037, -0.00109863 ,
-0.00366211, -0.00497437, -0.00503540, -0.00402832, -0.00241089, -0.000579834,
 0.00103760,  0.00222778,  0.00277710,  0.00271606,  0.00213623,  0.00115967 ,
 0.
}
b60 hamming windowed sinc function coefficients

Definition at line 111 of file acelp_vectors.c.

Referenced by decode_frame(), and decode_pitch_vector().

const uint8_t ff_fc_2pulses_9bits_track1[16]

Initial value:

{
    1,  3,
    6,  8,
    11, 13,
    16, 18,
    21, 23,
    26, 28,
    31, 33,
    36, 38
}
Track|Pulse| Positions ----------------------------------------- 1 | 0 | 1, 6, 11, 16, 21, 26, 31, 36 | | 3, 8, 13, 18, 23, 28, 33, 38 -----------------------------------------.

Remarks:
Track in the table should be read top-to-bottom, left-to-right.
Note:
(EE) Reference G.729D code also uses gray decoding for each pulse index before looking up the value in the table.
Used in G.729 @6.4k (with gray coding), AMR @5.9k (without gray coding)

Definition at line 28 of file acelp_vectors.c.

Initial value:

{
  1,  3,
  8,  6,
  18, 16,
  11, 13,
  38, 36,
  31, 33,
  21, 23,
  28, 26,
}

Definition at line 39 of file acelp_vectors.c.

Referenced by decode_frame().

Initial value:

{
  0,  2,
  5,  4,
  12, 10,
  7,  9,
  25, 24,
  20, 22,
  14, 15,
  19, 17,
  36, 31,
  21, 26,
  1,  6,
  16, 11,
  27, 29,
  32, 30,
  39, 37,
  34, 35,
}
Track|Pulse| Positions ----------------------------------------- 2 | 1 | 0, 7, 14, 20, 27, 34, 1, 21 | | 2, 9, 15, 22, 29, 35, 6, 26 | | 4,10, 17, 24, 30, 37, 11, 31 | | 5,12, 19, 25, 32, 39, 16, 36 -----------------------------------------.

Remarks:
Track in the table should be read top-to-bottom, left-to-right.
Note:
(EE.1) This table (from the reference code) does not comply with the specification. The specification contains the following table:
Track|Pulse| Positions ----------------------------------------- 2 | 1 | 0, 5, 10, 15, 20, 25, 30, 35 | | 1, 6, 11, 16, 21, 26, 31, 36 | | 2, 7, 12, 17, 22, 27, 32, 37 | | 4, 9, 14, 19, 24, 29, 34, 39

-----------------------------------------

Note:
(EE.2) Reference G.729D code also uses gray decoding for each pulse index before looking up the value in the table.
Used in G.729 @6.4k (with gray coding)

Definition at line 51 of file acelp_vectors.c.

Referenced by decode_frame().

const uint8_t ff_fc_4pulses_8bits_track_4[32]

Initial value:

{
    3,  4,
    8,  9,
    13, 14,
    18, 19,
    23, 24,
    28, 29,
    33, 34,
    38, 39,
    43, 44,
    48, 49,
    53, 54,
    58, 59,
    63, 64,
    68, 69,
    73, 74,
    78, 79,
}
Track|Pulse| Positions ------------------------------------------------------------------------- 4 | 3 | 3, 8, 13, 18, 23, 28, 33, 38, 43, 48, 53, 58, 63, 68, 73, 78 | | 4, 9, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64, 69, 74, 79 -------------------------------------------------------------------------.

Remarks:
Track in the table should be read top-to-bottom, left-to-right.
Used in G.729 @8k, G.729 @4.4k, AMR @7.95k, AMR @7.40k

Definition at line 76 of file acelp_vectors.c.

Referenced by decode_frame().

const uint8_t ff_fc_4pulses_8bits_tracks_13[16]

Initial value:

{
  0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75,
}
Track|Pulse| Positions ------------------------------------------------------------------------- 1 | 0 | 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75 ------------------------------------------------------------------------- 2 | 1 | 1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76 ------------------------------------------------------------------------- 3 | 2 | 2, 7, 12, 17, 22, 27, 32, 37, 42, 47, 52, 57, 62, 67, 72, 77 -------------------------------------------------------------------------.

Table contains only first the pulse indexes.

Used in G.729 @8k, G.729 @4.4k, AMR @7.95k, AMR @7.40k

Definition at line 71 of file acelp_vectors.c.

Referenced by decode_frame(), and ff_sipr_decode_frame_16k().

const float ff_pow_0_55[10]

Initial value:

 {
    0.550000, 0.302500, 0.166375, 0.091506, 0.050328,
    0.027681, 0.015224, 0.008373, 0.004605, 0.002533
}
Table of pow(0.55,n).

Definition at line 106 of file acelp_vectors.c.

Referenced by eval_ir(), and postfilter().

const float ff_pow_0_7[10]

Initial value:

 {
    0.700000, 0.490000, 0.343000, 0.240100, 0.168070,
    0.117649, 0.082354, 0.057648, 0.040354, 0.028248
}
Table of pow(0.7,n).

Definition at line 96 of file acelp_vectors.c.

Referenced by eval_ir(), and postfilter().

const float ff_pow_0_75[10]

Initial value:

 {
    0.750000, 0.562500, 0.421875, 0.316406, 0.237305,
    0.177979, 0.133484, 0.100113, 0.075085, 0.056314
}
Table of pow(0.75,n).

Definition at line 101 of file acelp_vectors.c.

Referenced by postfilter(), and postfilter_5k0().


Generated on Fri Oct 26 02:46:06 2012 for FFmpeg by  doxygen 1.5.8