package org.mobicents.media.server.impl.codec.g729; public class LspDec { /* static memory */ float freq_prev[][] = new float[LD8KConstants.MA_NP][LD8KConstants.M]; /* previous LSP vector */ float freq_prev_reset[] = new float[]{ /* previous LSP vector(init) */ (float)0.285599, (float)0.571199, (float)0.856798, (float)1.142397, (float)1.427997, (float)1.713596, (float)1.999195, (float)2.284795, (float)2.570394, (float)2.855993 }; /* PI*(float)(j+1)/(float)(M+1) */ /* static memory for frame erase operation */ static int prev_ma; /* previous MA prediction coef.*/ static float prev_lsp[] = new float[LD8KConstants.M]; /* previous LSP vector */ /*---------------------------------------------------------------------------- * Lsp_decw_reset - set the previous LSP vectors *---------------------------------------------------------------------------- */ void lsp_decw_reset() { int i; for(i=0; i<LD8KConstants.MA_NP; i++) Util.copy (freq_prev_reset, freq_prev[i], LD8KConstants.M ); prev_ma = 0; Util.copy (freq_prev_reset, prev_lsp, LD8KConstants.M ); return; } /*---------------------------------------------------------------------------- * lsp_iqua_cs - LSP main quantization routine *---------------------------------------------------------------------------- */ public void lsp_iqua_cs( int prm[], int prms, /* input : codes of the selected LSP */ float lsp_q[], /* output: Quantized LSP parameters */ int erase /* input : frame erase information */ ) { int mode_index; int code0; int code1; int code2; float buf[] = new float[LD8KConstants.M]; if(erase==0) /* Not frame erasure */ { mode_index = (prm[prms+0] >> LD8KConstants.NC0_B) & 1; code0 = prm[prms+0] & (short)(LD8KConstants.NC0 - 1); code1 = (prm[prms+1] >> LD8KConstants.NC1_B) & (short)(LD8KConstants.NC1 - 1); code2 = prm[prms+1] & (short)(LD8KConstants.NC1 - 1); LspGetq.lsp_get_quant(TabLD8k.lspcb1, TabLD8k.lspcb2, code0, code1, code2, TabLD8k.fg[mode_index], freq_prev, lsp_q, TabLD8k.fg_sum[mode_index]); Util.copy(lsp_q, prev_lsp, LD8KConstants.M ); prev_ma = mode_index; } else /* Frame erased */ { Util.copy(prev_lsp, lsp_q, LD8KConstants.M ); /* update freq_prev */ LspGetq.lsp_prev_extract(prev_lsp, buf, TabLD8k.fg[prev_ma], freq_prev, TabLD8k.fg_sum_inv[prev_ma]); LspGetq.lsp_prev_update(buf, freq_prev); } return; } /*---------------------------------------------------------------------------- * d_lsp - decode lsp parameters *---------------------------------------------------------------------------- */ public void d_lsp( int index[], int is, /* input : indexes */ float lsp_q[], /* output: decoded lsp */ int bfi /* input : frame erase information */ ) { int i; lsp_iqua_cs(index, is, lsp_q,bfi); /* decode quantized information */ /* Convert LSFs to LSPs */ for (i=0; i<LD8KConstants.M; i++ ) lsp_q[i] = (float)Math.cos(lsp_q[i]); return; } }