libavcodec/lsp.c File Reference

#include <inttypes.h>
#include "avcodec.h"
#include "mathops.h"
#include "lsp.h"
#include "celp_math.h"

Go to the source code of this file.

Defines

#define FRAC_BITS   14

Functions

void ff_acelp_reorder_lsf (int16_t *lsfq, int lsfq_min_distance, int lsfq_min, int lsfq_max, int lp_order)
 (I.F) means fixed-point value with F fractional and I integer bits
void ff_set_min_dist_lsf (float *lsf, double min_spacing, int size)
 Adjust the quantized LSFs so they are increasing and not too close.
void ff_acelp_lsf2lsp (int16_t *lsp, const int16_t *lsf, int lp_order)
 Convert LSF to LSP.
void ff_acelp_lsf2lspd (double *lsp, const float *lsf, int lp_order)
 Floating point version of ff_acelp_lsf2lsp().
static void lsp2poly (int *f, const int16_t *lsp, int lp_half_order)
 decodes polynomial coefficients from LSP
void ff_acelp_lsp2lpc (int16_t *lp, const int16_t *lsp, int lp_half_order)
 LSP to LP conversion (3.2.6 of G.729).
void ff_amrwb_lsp2lpc (const double *lsp, float *lp, int lp_order)
 LSP to LP conversion (5.2.4 of AMR-WB).
void ff_acelp_lp_decode (int16_t *lp_1st, int16_t *lp_2nd, const int16_t *lsp_2nd, const int16_t *lsp_prev, int lp_order)
 Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3.2.5 and 3.2.6 of G.729).
void ff_lsp2polyf (const double *lsp, double *f, int lp_half_order)
 Compute the Pa / (1 + z(-1)) or Qa / (1 - z(-1)) coefficients needed for LSP to LPC conversion.
void ff_acelp_lspd2lpc (const double *lsp, float *lpc, int lp_half_order)
 Reconstruct LPC coefficients from the line spectral pair frequencies.
void ff_sort_nearly_sorted_floats (float *vals, int len)
 Sort values in ascending order.


Define Documentation

#define FRAC_BITS   14


Function Documentation

void ff_acelp_lp_decode ( int16_t *  lp_1st,
int16_t *  lp_2nd,
const int16_t *  lsp_2nd,
const int16_t *  lsp_prev,
int  lp_order 
)

Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3.2.5 and 3.2.6 of G.729).

Parameters:
[out] lp_1st decoded LP coefficients for first subframe (-0x8000 <= (3.12) < 0x8000)
[out] lp_2nd decoded LP coefficients for second subframe (-0x8000 <= (3.12) < 0x8000)
lsp_2nd LSP coefficients of the second subframe (-0x8000 <= (0.15) < 0x8000)
lsp_prev LSP coefficients from the second subframe of the previous frame (-0x8000 <= (0.15) < 0x8000)
lp_order LP filter order

Definition at line 146 of file lsp.c.

Referenced by decode_frame().

void ff_acelp_lsf2lsp ( int16_t *  lsp,
const int16_t *  lsf,
int  lp_order 
)

Convert LSF to LSP.

Parameters:
[out] lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
lsf normalized LSF coefficients (0 <= (2.13) < 0x2000 * PI)
lp_order LP filter order
Remarks:
It is safe to pass the same array into the lsf and lsp parameters.

Definition at line 58 of file lsp.c.

Referenced by decode_frame().

void ff_acelp_lsf2lspd ( double *  lsp,
const float *  lsf,
int  lp_order 
)

Floating point version of ff_acelp_lsf2lsp().

Definition at line 68 of file lsp.c.

Referenced by amrwb_decode_frame(), hb_synthesis(), lsf2lsp_3(), and lsf2lsp_for_mode12k2().

void ff_acelp_lsp2lpc ( int16_t *  lp,
const int16_t *  lsp,
int  lp_half_order 
)

LSP to LP conversion (3.2.6 of G.729).

Parameters:
[out] lp decoded LP coefficients (-0x8000 <= (3.12) < 0x8000)
lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
lp_half_order LP filter order, divided by 2

Definition at line 98 of file lsp.c.

Referenced by ff_acelp_lp_decode().

void ff_acelp_lspd2lpc ( const double *  lsp,
float *  lpc,
int  lp_half_order 
)

Reconstruct LPC coefficients from the line spectral pair frequencies.

Parameters:
lsp line spectral pairs in cosine domain
lpc linear predictive coding coefficients
lp_half_order half the number of the amount of LPCs to be reconstructed, need to be smaller or equal to MAX_LP_HALF_ORDER
Note:
buffers should have a minimux size of 2*lp_half_order elements.
TIA/EIA/IS-733 2.4.3.3.5

Definition at line 182 of file lsp.c.

Referenced by acelp_lp_decodef(), amrnb_decode_frame(), lspf2lpc(), synth_block(), and synth_frame().

void ff_acelp_reorder_lsf ( int16_t *  lsfq,
int  lsfq_min_distance,
int  lsfq_min,
int  lsfq_max,
int  lp_order 
)

(I.F) means fixed-point value with F fractional and I integer bits

ensure a minimum distance between LSFs

Parameters:
[in,out] lsfq LSF to check and adjust
lsfq_min_distance minimum distance between LSFs
lsfq_min minimum allowed LSF value
lsfq_max maximum allowed LSF value
lp_order LP filter order

Definition at line 32 of file lsp.c.

Referenced by lsf_decode().

void ff_amrwb_lsp2lpc ( const double *  lsp,
float *  lp,
int  lp_order 
)

LSP to LP conversion (5.2.4 of AMR-WB).

Definition at line 120 of file lsp.c.

Referenced by amrwb_decode_frame(), hb_synthesis(), and sipr_decode_lp().

void ff_lsp2polyf ( const double *  lsp,
double *  f,
int  lp_half_order 
)

Compute the Pa / (1 + z(-1)) or Qa / (1 - z(-1)) coefficients needed for LSP to LPC conversion.

We only need to calculate the 6 first elements of the polynomial.

Parameters:
lsp line spectral pairs in cosine domain
[out] f polynomial input/output as a vector
TIA/EIA/IS-733 2.4.3.3.5-1/2

Definition at line 165 of file lsp.c.

Referenced by ff_acelp_lspd2lpc(), and ff_amrwb_lsp2lpc().

void ff_set_min_dist_lsf ( float *  lsf,
double  min_spacing,
int  size 
)

Adjust the quantized LSFs so they are increasing and not too close.

This step is not mentioned in the AMR spec but is in the reference C decoder. Omitting this step creates audible distortion on the sinusoidal sweep test vectors in 3GPP TS 26.074.

Parameters:
[in,out] lsf LSFs in Hertz
min_spacing minimum distance between two consecutive lsf values
size size of the lsf vector

Definition at line 50 of file lsp.c.

Referenced by amrwb_decode_frame(), ff_sipr_decode_frame_16k(), lsf2lsp_3(), lsf2lsp_for_mode12k2(), and lsf_decode_fp().

void ff_sort_nearly_sorted_floats ( float *  vals,
int  len 
)

Sort values in ascending order.

Note:
O(n) if data already sorted, O(n^2) - otherwise

Definition at line 201 of file lsp.c.

Referenced by decode_lsp(), and lsf_decode_fp().

static void lsp2poly ( int *  f,
const int16_t *  lsp,
int  lp_half_order 
) [static]

decodes polynomial coefficients from LSP

Parameters:
f [out] decoded polynomial coefficients (-0x20000000 <= (3.22) <= 0x1fffffff)
lsp LSP coefficients (-0x8000 <= (0.15) <= 0x7fff)

Definition at line 81 of file lsp.c.

Referenced by ff_acelp_lsp2lpc().


Generated on Fri Oct 26 02:38:17 2012 for FFmpeg by  doxygen 1.5.8