FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
lsp.h File Reference
#include <stdint.h>

Go to the source code of this file.

Macros

#define MAX_LP_HALF_ORDER   10
 
#define MAX_LP_ORDER   (2*MAX_LP_HALF_ORDER)
 

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 More...
 
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. More...
 
void ff_acelp_lsf2lsp (int16_t *lsp, const int16_t *lsf, int lp_order)
 Convert LSF to LSP. More...
 
void ff_acelp_lsf2lspd (double *lsp, const float *lsf, int lp_order)
 Floating point version of ff_acelp_lsf2lsp() More...
 
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) More...
 
void ff_amrwb_lsp2lpc (const double *lsp, float *lp, int lp_order)
 LSP to LP conversion (5.2.4 of AMR-WB) More...
 
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) More...
 
void ff_acelp_lspd2lpc (const double *lsp, float *lpc, int lp_half_order)
 Reconstruct LPC coefficients from the line spectral pair frequencies. More...
 
void ff_sort_nearly_sorted_floats (float *vals, int len)
 Sort values in ascending order. More...
 
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. More...
 

Macro Definition Documentation

#define MAX_LP_HALF_ORDER   10

Definition at line 94 of file lsp.h.

Referenced by ff_acelp_lsp2lpc(), ff_acelp_lspd2lpc(), and ff_amrwb_lsp2lpc().

#define MAX_LP_ORDER   (2*MAX_LP_HALF_ORDER)

Definition at line 95 of file lsp.h.

Referenced by ff_acelp_lp_decode().

Function Documentation

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]lsfqLSF to check and adjust
lsfq_min_distanceminimum distance between LSFs
lsfq_minminimum allowed LSF value
lsfq_maxmaximum allowed LSF value
lp_orderLP filter order

Definition at line 33 of file lsp.c.

Referenced by lsf_decode().

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]lsfLSFs in Hertz
min_spacingminimum distance between two consecutive lsf values
sizesize of the lsf vector

Definition at line 51 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_acelp_lsf2lsp ( int16_t *  lsp,
const int16_t *  lsf,
int  lp_order 
)

Convert LSF to LSP.

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

Definition at line 83 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 93 of file lsp.c.

Referenced by amrwb_decode_frame(), decode_predictor_coeffs(), 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]lpdecoded LP coefficients (-0x8000 <= (3.12) < 0x8000)
lspLSP coefficients (-0x8000 <= (0.15) < 0x8000)
lp_half_orderLP filter order, divided by 2

Definition at line 123 of file lsp.c.

Referenced by ff_acelp_lp_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 145 of file lsp.c.

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

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_1stdecoded LP coefficients for first subframe (-0x8000 <= (3.12) < 0x8000)
[out]lp_2nddecoded LP coefficients for second subframe (-0x8000 <= (3.12) < 0x8000)
lsp_2ndLSP coefficients of the second subframe (-0x8000 <= (0.15) < 0x8000)
lsp_prevLSP coefficients from the second subframe of the previous frame (-0x8000 <= (0.15) < 0x8000)
lp_orderLP filter order

Definition at line 171 of file lsp.c.

Referenced by decode_frame().

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

Reconstruct LPC coefficients from the line spectral pair frequencies.

Parameters
lspline spectral pairs in cosine domain
lpclinear predictive coding coefficients
lp_half_orderhalf 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 minimum size of 2*lp_half_order elements.

TIA/EIA/IS-733 2.4.3.3.5

Definition at line 209 of file lsp.c.

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

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 228 of file lsp.c.

Referenced by decode_lsp(), and lsf_decode_fp().

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
lspline spectral pairs in cosine domain
[out]fpolynomial input/output as a vector

TIA/EIA/IS-733 2.4.3.3.5-1/2

Definition at line 191 of file lsp.c.

Referenced by ff_acelp_lspd2lpc(), and ff_amrwb_lsp2lpc().