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