1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This file contains the function WebRtcSpl_ReflCoefToLpc(). 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * The description header can be found in signal_processing_library.h 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18f24ac5923cbe5e806fac59a0d15e32567553ce8epbos@webrtc.org#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 2045a3434299d78b2084a2d765c51c76c165b410cepbos@webrtc.orgvoid WebRtcSpl_ReflCoefToLpc(const int16_t *k, int use_order, int16_t *a) 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 22c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org int16_t any[WEBRTC_SPL_MAX_LPC_ORDER + 1]; 23c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org int16_t *aptr, *aptr2, *anyptr; 2445a3434299d78b2084a2d765c51c76c165b410cepbos@webrtc.org const int16_t *kptr; 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int m, i; 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kptr = k; 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *a = 4096; // i.e., (Word16_MAX >> 3)+1. 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *any = *a; 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org a[1] = WEBRTC_SPL_RSHIFT_W16((*k), 3); 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (m = 1; m < use_order; m++) 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org kptr++; 35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr = a; 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr++; 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr2 = &a[m]; 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr = any; 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr++; 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org any[m + 1] = WEBRTC_SPL_RSHIFT_W16((*kptr), 3); 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (i = 0; i < m; i++) 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *anyptr = (*aptr) 45c49ec1327c1d956c6c889cf1f32a7f9920d76149pbos@webrtc.org + (int16_t)WEBRTC_SPL_MUL_16_16_RSFT((*aptr2), (*kptr), 15); 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr++; 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr++; 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr2--; 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr = a; 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr = any; 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org for (i = 0; i < (m + 2); i++) 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *aptr = *anyptr; 56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org aptr++; 57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org anyptr++; 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 61