annotate src/opus-1.3/silk/float/corrMatrix_FLP.c @ 79:91c729825bca pa_catalina

Update build for AUDIO_COMPONENT_FIX
author Chris Cannam
date Wed, 30 Oct 2019 12:40:34 +0000
parents 7aeed7906520
children
rev   line source
Chris@69 1 /***********************************************************************
Chris@69 2 Copyright (c) 2006-2011, Skype Limited. All rights reserved.
Chris@69 3 Redistribution and use in source and binary forms, with or without
Chris@69 4 modification, are permitted provided that the following conditions
Chris@69 5 are met:
Chris@69 6 - Redistributions of source code must retain the above copyright notice,
Chris@69 7 this list of conditions and the following disclaimer.
Chris@69 8 - Redistributions in binary form must reproduce the above copyright
Chris@69 9 notice, this list of conditions and the following disclaimer in the
Chris@69 10 documentation and/or other materials provided with the distribution.
Chris@69 11 - Neither the name of Internet Society, IETF or IETF Trust, nor the
Chris@69 12 names of specific contributors, may be used to endorse or promote
Chris@69 13 products derived from this software without specific prior written
Chris@69 14 permission.
Chris@69 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Chris@69 16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Chris@69 17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Chris@69 18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
Chris@69 19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
Chris@69 20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
Chris@69 21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
Chris@69 22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
Chris@69 23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
Chris@69 24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Chris@69 25 POSSIBILITY OF SUCH DAMAGE.
Chris@69 26 ***********************************************************************/
Chris@69 27
Chris@69 28 #ifdef HAVE_CONFIG_H
Chris@69 29 #include "config.h"
Chris@69 30 #endif
Chris@69 31
Chris@69 32 /**********************************************************************
Chris@69 33 * Correlation matrix computations for LS estimate.
Chris@69 34 **********************************************************************/
Chris@69 35
Chris@69 36 #include "main_FLP.h"
Chris@69 37
Chris@69 38 /* Calculates correlation vector X'*t */
Chris@69 39 void silk_corrVector_FLP(
Chris@69 40 const silk_float *x, /* I x vector [L+order-1] used to create X */
Chris@69 41 const silk_float *t, /* I Target vector [L] */
Chris@69 42 const opus_int L, /* I Length of vecors */
Chris@69 43 const opus_int Order, /* I Max lag for correlation */
Chris@69 44 silk_float *Xt /* O X'*t correlation vector [order] */
Chris@69 45 )
Chris@69 46 {
Chris@69 47 opus_int lag;
Chris@69 48 const silk_float *ptr1;
Chris@69 49
Chris@69 50 ptr1 = &x[ Order - 1 ]; /* Points to first sample of column 0 of X: X[:,0] */
Chris@69 51 for( lag = 0; lag < Order; lag++ ) {
Chris@69 52 /* Calculate X[:,lag]'*t */
Chris@69 53 Xt[ lag ] = (silk_float)silk_inner_product_FLP( ptr1, t, L );
Chris@69 54 ptr1--; /* Next column of X */
Chris@69 55 }
Chris@69 56 }
Chris@69 57
Chris@69 58 /* Calculates correlation matrix X'*X */
Chris@69 59 void silk_corrMatrix_FLP(
Chris@69 60 const silk_float *x, /* I x vector [ L+order-1 ] used to create X */
Chris@69 61 const opus_int L, /* I Length of vectors */
Chris@69 62 const opus_int Order, /* I Max lag for correlation */
Chris@69 63 silk_float *XX /* O X'*X correlation matrix [order x order] */
Chris@69 64 )
Chris@69 65 {
Chris@69 66 opus_int j, lag;
Chris@69 67 double energy;
Chris@69 68 const silk_float *ptr1, *ptr2;
Chris@69 69
Chris@69 70 ptr1 = &x[ Order - 1 ]; /* First sample of column 0 of X */
Chris@69 71 energy = silk_energy_FLP( ptr1, L ); /* X[:,0]'*X[:,0] */
Chris@69 72 matrix_ptr( XX, 0, 0, Order ) = ( silk_float )energy;
Chris@69 73 for( j = 1; j < Order; j++ ) {
Chris@69 74 /* Calculate X[:,j]'*X[:,j] */
Chris@69 75 energy += ptr1[ -j ] * ptr1[ -j ] - ptr1[ L - j ] * ptr1[ L - j ];
Chris@69 76 matrix_ptr( XX, j, j, Order ) = ( silk_float )energy;
Chris@69 77 }
Chris@69 78
Chris@69 79 ptr2 = &x[ Order - 2 ]; /* First sample of column 1 of X */
Chris@69 80 for( lag = 1; lag < Order; lag++ ) {
Chris@69 81 /* Calculate X[:,0]'*X[:,lag] */
Chris@69 82 energy = silk_inner_product_FLP( ptr1, ptr2, L );
Chris@69 83 matrix_ptr( XX, lag, 0, Order ) = ( silk_float )energy;
Chris@69 84 matrix_ptr( XX, 0, lag, Order ) = ( silk_float )energy;
Chris@69 85 /* Calculate X[:,j]'*X[:,j + lag] */
Chris@69 86 for( j = 1; j < ( Order - lag ); j++ ) {
Chris@69 87 energy += ptr1[ -j ] * ptr2[ -j ] - ptr1[ L - j ] * ptr2[ L - j ];
Chris@69 88 matrix_ptr( XX, lag + j, j, Order ) = ( silk_float )energy;
Chris@69 89 matrix_ptr( XX, j, lag + j, Order ) = ( silk_float )energy;
Chris@69 90 }
Chris@69 91 ptr2--; /* Next column of X */
Chris@69 92 }
Chris@69 93 }