/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ /****************************************************************** iLBC Speech Coder ANSI-C Source Code WebRtcIlbcfix_Lsp2Lsf.c ******************************************************************/ #include "modules/audio_coding/codecs/ilbc/lsp_to_lsf.h" #include "modules/audio_coding/codecs/ilbc/constants.h" #include "modules/audio_coding/codecs/ilbc/defines.h" /*----------------------------------------------------------------* * conversion from LSP coefficients to LSF coefficients *---------------------------------------------------------------*/ void WebRtcIlbcfix_Lsp2Lsf( int16_t *lsp, /* (i) lsp vector -1...+1 in Q15 */ int16_t *lsf, /* (o) Lsf vector 0...Pi in Q13 (ordered, so that lsf[i]=0; i--) { /* locate value in the table, which is just above lsp[i], basically an approximation to acos(x) */ while( (((int32_t)(*cosTblPtr)-(*lspPtr)) < 0)&&(k>0) ) { k-=1; cosTblPtr--; } /* Calculate diff, which is used in the linear approximation of acos(x) */ diff = (*lspPtr)-(*cosTblPtr); /* The linear approximation of acos(lsp[i]) : acos(lsp[i])= k*512 + (WebRtcIlbcfix_kAcosDerivative[ind]*offset >> 11) */ /* tmp (linear offset) in Q16 */ tmp = (int16_t)((WebRtcIlbcfix_kAcosDerivative[k] * diff) >> 11); /* freq in Q16 */ freq = (k << 9) + tmp; /* lsf = freq*2*pi */ (*lsfPtr) = (int16_t)(((int32_t)freq*25736)>>15); lsfPtr--; lspPtr--; } return; }