| /* |
| ** 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; |
| } |
| |
| |
| |