1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/*********************************************************************** 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* File: pred_lt4.c * 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* * 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* Description: Compute the result of long term prediction with * 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* fractional interpolation of resolution 1/4 * 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* on return exc[0..L_subr-1] contains the interpolated signal * 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* (adaptive codebook excitation) * 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard* * 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard************************************************************************/ 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "typedef.h" 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#include "basic_op.h" 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define UP_SAMP 4 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard#define L_INTERPOL2 16 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard/* 1/4 resolution interpolation filter (-3 dB at 0.856*fs/2) in Q14 */ 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 35e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardWord16 inter4_2[4][32] = 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard {0,-2,4,-2,-10,38,-88,165,-275,424,-619,871,-1207,1699,-2598,5531,14031,-2147,780,-249, 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard -16,153,-213,226,-209,175,-133,91,-55,28,-10,2}, 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard {1,-7,19,-33,47,-52,43,-9,-60,175,-355,626,-1044,1749,-3267,10359,10359,-3267,1749,-1044, 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 626,-355,175,-60,-9,43,-52,47,-33,19, -7, 1}, 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard {2,-10,28,-55,91,-133,175,-209,226,-213,153,-16,-249,780,-2147,14031,5531,-2598,1699,-1207, 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 871,-619,424,-275,165,-88,38,-10,-2,4,-2,0}, 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard {1,-7,22,-49,92,-153,231,-325,431,-544,656,-762,853,-923,968,15401,968,-923,853,-762, 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 656,-544,431,-325,231,-153,92,-49,22,-7, 1, 0} 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard}; 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardvoid Pred_lt4( 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 exc[], /* in/out: excitation buffer */ 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 T0, /* input : integer pitch lag */ 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 frac, /* input : fraction of lag */ 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 L_subfr /* input : subframe size */ 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ) 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard{ 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 j, k, *x; 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word32 L_sum; 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 *ptr, *ptr1; 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard Word16 *ptr2; 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 63b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard x = exc - T0; 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard frac = -frac; 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard if (frac < 0) 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard frac += UP_SAMP; 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard x--; 69b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard } 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard x -= 15; /* x = L_INTERPOL2 - 1 */ 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard k = 3 - frac; /* k = UP_SAMP - 1 - frac */ 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ptr2 = &(inter4_2[k][0]); 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard for (j = 0; j < L_subfr; j++) 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard { 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ptr = ptr2; 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ptr1 = x; 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum = vo_mult32((*ptr1++), (*ptr++)); 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum += vo_mult32((*ptr1++), (*ptr++)); 110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard L_sum = L_shl2(L_sum, 2); 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard exc[j] = extract_h(L_add(L_sum, 0x8000)); 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard x++; 114e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard } 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard return; 117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard} 118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 121