resampler_private_AR2.c revision 2bd8b54017b5320bc0c1df9bf86f4cdc9f8db242
1d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright/*********************************************************************** 2d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightCopyright (c) 2006-2011, Skype Limited. All rights reserved. 3d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightRedistribution and use in source and binary forms, with or without 4d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightmodification, are permitted provided that the following conditions 5d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightare met: 6d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright- Redistributions of source code must retain the above copyright notice, 7d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightthis list of conditions and the following disclaimer. 8d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright- Redistributions in binary form must reproduce the above copyright 9d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightnotice, this list of conditions and the following disclaimer in the 10d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightdocumentation and/or other materials provided with the distribution. 11d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright- Neither the name of Internet Society, IETF or IETF Trust, nor the 12d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightnames of specific contributors, may be used to endorse or promote 13d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightproducts derived from this software without specific prior written 14d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightpermission. 15d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael WrightPOSSIBILITY OF SUCH DAMAGE. 26d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright***********************************************************************/ 27d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright 28d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#ifdef HAVE_CONFIG_H 29d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include "config.h" 30d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#endif 31d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright 32d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include "SigProc_FIX.h" 33d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright#include "resampler_private.h" 34d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright 35d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright/* Second order AR filter with single delay elements */ 36d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wrightvoid silk_resampler_private_AR2( 37d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright opus_int32 S[], /* I/O State vector [ 2 ] */ 38d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright opus_int32 out_Q8[], /* O Output signal */ 39d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright const opus_int16 in[], /* I Input signal */ 40d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright const opus_int16 A_Q14[], /* I AR coefficients, Q14 */ 41d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright opus_int32 len /* I Signal length */ 42d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright) 43d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright{ 44d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright opus_int32 k; 45d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright opus_int32 out32; 46d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright 47d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright for( k = 0; k < len; k++ ) { 48d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright out32 = silk_ADD_LSHIFT32( S[ 0 ], (opus_int32)in[ k ], 8 ); 49d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright out_Q8[ k ] = out32; 50d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright out32 = silk_LSHIFT( out32, 2 ); 51d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright S[ 0 ] = silk_SMLAWB( S[ 1 ], out32, A_Q14[ 0 ] ); 52d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright S[ 1 ] = silk_SMULWB( out32, A_Q14[ 1 ] ); 53d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright } 54d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright} 55d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright 56d02c5b6aace05d9fd938e2d03705ac4f60f8da19Michael Wright