/* | |
** Copyright 2003-2010, VisualOn, Inc. | |
** | |
** Licensed under the Apache License, Version 2.0 (the "License"); | |
** you may not use this file except in compliance with the License. | |
** You may obtain a copy of the License at | |
** | |
** http://www.apache.org/licenses/LICENSE-2.0 | |
** | |
** Unless required by applicable law or agreed to in writing, software | |
** distributed under the License is distributed on an "AS IS" BASIS, | |
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
** See the License for the specific language governing permissions and | |
** limitations under the License. | |
*/ | |
/*************************************************************************** | |
* File: qisf_ns.c * | |
* * | |
* Description: Coding/Decoding of ISF parameters for background noise.* | |
* The ISF vector is quantized using VQ with split-by-5 * | |
* * | |
****************************************************************************/ | |
#include "typedef.h" | |
#include "basic_op.h" | |
#include "acelp.h" | |
#include "qisf_ns.tab" /* Codebooks of ISFs */ | |
/*------------------------------------------------------------------* | |
* routine: Qisf_ns() * | |
* ~~~~~~~~~ * | |
*------------------------------------------------------------------*/ | |
void Qisf_ns( | |
Word16 * isf1, /* input : ISF in the frequency domain (0..0.5) */ | |
Word16 * isf_q, /* output: quantized ISF */ | |
Word16 * indice /* output: quantization indices */ | |
) | |
{ | |
Word16 i; | |
Word32 tmp; | |
for (i = 0; i < ORDER; i++) | |
{ | |
isf_q[i] = sub(isf1[i], mean_isf_noise[i]); | |
} | |
indice[0] = Sub_VQ(&isf_q[0], dico1_isf_noise, 2, SIZE_BK_NOISE1, &tmp); | |
indice[1] = Sub_VQ(&isf_q[2], dico2_isf_noise, 3, SIZE_BK_NOISE2, &tmp); | |
indice[2] = Sub_VQ(&isf_q[5], dico3_isf_noise, 3, SIZE_BK_NOISE3, &tmp); | |
indice[3] = Sub_VQ(&isf_q[8], dico4_isf_noise, 4, SIZE_BK_NOISE4, &tmp); | |
indice[4] = Sub_VQ(&isf_q[12], dico5_isf_noise, 4, SIZE_BK_NOISE5, &tmp); | |
/* decoding the ISFs */ | |
Disf_ns(indice, isf_q); | |
return; | |
} | |
/******************************************************************** | |
* Function: Disf_ns() * | |
* ~~~~~~~~~ * | |
* Decoding of ISF parameters * | |
*-------------------------------------------------------------------* | |
* Arguments: * | |
* indice[] : indices of the selected codebook entries * | |
* isf[] : quantized ISFs (in frequency domain) * | |
*********************************************************************/ | |
void Disf_ns( | |
Word16 * indice, /* input: quantization indices */ | |
Word16 * isf_q /* input : ISF in the frequency domain (0..0.5) */ | |
) | |
{ | |
Word16 i; | |
for (i = 0; i < 2; i++) | |
{ | |
isf_q[i] = dico1_isf_noise[indice[0] * 2 + i]; | |
} | |
for (i = 0; i < 3; i++) | |
{ | |
isf_q[i + 2] = dico2_isf_noise[indice[1] * 3 + i]; | |
} | |
for (i = 0; i < 3; i++) | |
{ | |
isf_q[i + 5] = dico3_isf_noise[indice[2] * 3 + i]; | |
} | |
for (i = 0; i < 4; i++) | |
{ | |
isf_q[i + 8] = dico4_isf_noise[indice[3] * 4 + i]; | |
} | |
for (i = 0; i < 4; i++) | |
{ | |
isf_q[i + 12] = dico5_isf_noise[indice[4] * 4 + i]; | |
} | |
for (i = 0; i < ORDER; i++) | |
{ | |
isf_q[i] = add(isf_q[i], mean_isf_noise[i]); | |
} | |
Reorder_isf(isf_q, ISF_GAP, ORDER); | |
return; | |
} | |