Squashed commit of the following:
[opus.git] / src_FLP / SKP_Silk_LPC_analysis_filter_FLP.c
index 3bbe586..b340f55 100644 (file)
@@ -1,5 +1,5 @@
 /***********************************************************************\r
 /***********************************************************************\r
-Copyright (c) 2006-2010, Skype Limited. All rights reserved. \r
+Copyright (c) 2006-2011, Skype Limited. All rights reserved. \r
 Redistribution and use in source and binary forms, with or without \r
 modification, (subject to the limitations in the disclaimer below) \r
 are permitted provided that the following conditions are met:\r
 Redistribution and use in source and binary forms, with or without \r
 modification, (subject to the limitations in the disclaimer below) \r
 are permitted provided that the following conditions are met:\r
@@ -35,74 +35,74 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 /* first Order output samples are not set  */\r
 /*******************************************/\r
 \r
 /* first Order output samples are not set  */\r
 /*******************************************/\r
 \r
-void SKP_Silk_LPC_analysis_filter_FLP(\r
+/* 16th order LPC analysis filter, does not write first 16 samples */\r
+void SKP_Silk_LPC_analysis_filter16_FLP(\r
           SKP_float                 r_LPC[],            /* O    LPC residual signal                     */\r
     const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */\r
     const SKP_float                 s[],                /* I    Input signal                            */\r
           SKP_float                 r_LPC[],            /* O    LPC residual signal                     */\r
     const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */\r
     const SKP_float                 s[],                /* I    Input signal                            */\r
-    const SKP_int                   length,             /* I    Length of input signal                  */\r
-    const SKP_int                   Order               /* I    LPC order                               */\r
+    const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
 )\r
 {\r
-    SKP_assert( Order <= length );\r
-\r
-    switch( Order ) {\r
-        case 8:\r
-            SKP_Silk_LPC_analysis_filter8_FLP(  r_LPC, PredCoef, s, length );\r
-        break;\r
-\r
-        case 10:\r
-            SKP_Silk_LPC_analysis_filter10_FLP( r_LPC, PredCoef, s, length );\r
-        break;\r
+    SKP_int   ix;\r
+    SKP_float LPC_pred;\r
+    const SKP_float *s_ptr;\r
 \r
 \r
-        case 12:\r
-            SKP_Silk_LPC_analysis_filter12_FLP( r_LPC, PredCoef, s, length );\r
-        break;\r
+    for ( ix = 16; ix < length; ix++) {\r
+        s_ptr = &s[ix - 1];\r
 \r
 \r
-        case 16:\r
-            SKP_Silk_LPC_analysis_filter16_FLP( r_LPC, PredCoef, s, length );\r
-        break;\r
+        /* short-term prediction */\r
+        LPC_pred = s_ptr[  0 ]  * PredCoef[ 0 ]  + \r
+                   s_ptr[ -1 ]  * PredCoef[ 1 ]  +\r
+                   s_ptr[ -2 ]  * PredCoef[ 2 ]  +\r
+                   s_ptr[ -3 ]  * PredCoef[ 3 ]  +\r
+                   s_ptr[ -4 ]  * PredCoef[ 4 ]  +\r
+                   s_ptr[ -5 ]  * PredCoef[ 5 ]  +\r
+                   s_ptr[ -6 ]  * PredCoef[ 6 ]  +\r
+                   s_ptr[ -7 ]  * PredCoef[ 7 ]  +\r
+                   s_ptr[ -8 ]  * PredCoef[ 8 ]  +\r
+                   s_ptr[ -9 ]  * PredCoef[ 9 ]  +\r
+                   s_ptr[ -10 ] * PredCoef[ 10 ] +\r
+                   s_ptr[ -11 ] * PredCoef[ 11 ] +\r
+                   s_ptr[ -12 ] * PredCoef[ 12 ] +\r
+                   s_ptr[ -13 ] * PredCoef[ 13 ] +\r
+                   s_ptr[ -14 ] * PredCoef[ 14 ] +\r
+                   s_ptr[ -15 ] * PredCoef[ 15 ];\r
 \r
 \r
-        default:\r
-            SKP_assert( 0 );\r
-        break;\r
+        /* prediction error */\r
+        r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
     }\r
     }\r
-\r
-    /* Set first LPC Order samples to zero instead of undefined */\r
-    SKP_memset( r_LPC, 0, Order * sizeof( SKP_float ) );\r
 }\r
 \r
 }\r
 \r
-/* 16th order LPC analysis filter, does not write first 16 samples */\r
-void SKP_Silk_LPC_analysis_filter16_FLP(\r
+/* 14th order LPC analysis filter, does not write first 14 samples */\r
+void SKP_Silk_LPC_analysis_filter14_FLP(\r
           SKP_float                 r_LPC[],            /* O    LPC residual signal                     */\r
     const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */\r
     const SKP_float                 s[],                /* I    Input signal                            */\r
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
           SKP_float                 r_LPC[],            /* O    LPC residual signal                     */\r
     const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */\r
     const SKP_float                 s[],                /* I    Input signal                            */\r
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
-    SKP_int   ix = 16;\r
+    SKP_int   ix;\r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
-    for ( ; ix < length; ix++) {\r
+    for ( ix = 14; ix < length; ix++) {\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
-        LPC_pred = s_ptr[ 0 ]   * PredCoef[ 0 ]  + \r
-                   s_ptr[-1]  * PredCoef[ 1 ]  +\r
-                   s_ptr[-2]  * PredCoef[ 2 ]  +\r
-                   s_ptr[-3]  * PredCoef[ 3 ]  +\r
-                   s_ptr[-4]  * PredCoef[ 4 ]  +\r
-                   s_ptr[-5]  * PredCoef[ 5 ]  +\r
-                   s_ptr[-6]  * PredCoef[ 6 ]  +\r
-                   s_ptr[-7]  * PredCoef[ 7 ]  +\r
-                   s_ptr[-8]  * PredCoef[ 8 ]  +\r
-                   s_ptr[-9]  * PredCoef[ 9 ]  +\r
-                   s_ptr[-10] * PredCoef[ 10 ] +\r
-                   s_ptr[-11] * PredCoef[ 11 ] +\r
-                   s_ptr[-12] * PredCoef[ 12 ] +\r
-                   s_ptr[-13] * PredCoef[ 13 ] +\r
-                   s_ptr[-14] * PredCoef[ 14 ] +\r
-                   s_ptr[-15] * PredCoef[ 15 ];\r
+        LPC_pred = s_ptr[  0 ]  * PredCoef[ 0 ]  + \r
+                   s_ptr[ -1 ]  * PredCoef[ 1 ]  +\r
+                   s_ptr[ -2 ]  * PredCoef[ 2 ]  +\r
+                   s_ptr[ -3 ]  * PredCoef[ 3 ]  +\r
+                   s_ptr[ -4 ]  * PredCoef[ 4 ]  +\r
+                   s_ptr[ -5 ]  * PredCoef[ 5 ]  +\r
+                   s_ptr[ -6 ]  * PredCoef[ 6 ]  +\r
+                   s_ptr[ -7 ]  * PredCoef[ 7 ]  +\r
+                   s_ptr[ -8 ]  * PredCoef[ 8 ]  +\r
+                   s_ptr[ -9 ]  * PredCoef[ 9 ]  +\r
+                   s_ptr[ -10 ] * PredCoef[ 10 ] +\r
+                   s_ptr[ -11 ] * PredCoef[ 11 ] +\r
+                   s_ptr[ -12 ] * PredCoef[ 12 ] +\r
+                   s_ptr[ -13 ] * PredCoef[ 13 ];\r
 \r
         /* prediction error */\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
 \r
         /* prediction error */\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
@@ -117,26 +117,26 @@ void SKP_Silk_LPC_analysis_filter12_FLP(
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
-    SKP_int   ix = 12;\r
+    SKP_int   ix;\r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
-    for ( ; ix < length; ix++) {\r
+    for ( ix = 12; ix < length; ix++) {\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
-        LPC_pred = s_ptr[ 0 ]   * PredCoef[ 0 ]  + \r
-                   s_ptr[-1]  * PredCoef[ 1 ]  +\r
-                   s_ptr[-2]  * PredCoef[ 2 ]  +\r
-                   s_ptr[-3]  * PredCoef[ 3 ]  +\r
-                   s_ptr[-4]  * PredCoef[ 4 ]  +\r
-                   s_ptr[-5]  * PredCoef[ 5 ]  +\r
-                   s_ptr[-6]  * PredCoef[ 6 ]  +\r
-                   s_ptr[-7]  * PredCoef[ 7 ]  +\r
-                   s_ptr[-8]  * PredCoef[ 8 ]  +\r
-                   s_ptr[-9]  * PredCoef[ 9 ]  +\r
-                   s_ptr[-10] * PredCoef[ 10 ] +\r
-                   s_ptr[-11] * PredCoef[ 11 ];\r
+        LPC_pred = s_ptr[  0 ]  * PredCoef[ 0 ]  + \r
+                   s_ptr[ -1 ]  * PredCoef[ 1 ]  +\r
+                   s_ptr[ -2 ]  * PredCoef[ 2 ]  +\r
+                   s_ptr[ -3 ]  * PredCoef[ 3 ]  +\r
+                   s_ptr[ -4 ]  * PredCoef[ 4 ]  +\r
+                   s_ptr[ -5 ]  * PredCoef[ 5 ]  +\r
+                   s_ptr[ -6 ]  * PredCoef[ 6 ]  +\r
+                   s_ptr[ -7 ]  * PredCoef[ 7 ]  +\r
+                   s_ptr[ -8 ]  * PredCoef[ 8 ]  +\r
+                   s_ptr[ -9 ]  * PredCoef[ 9 ]  +\r
+                   s_ptr[ -10 ] * PredCoef[ 10 ] +\r
+                   s_ptr[ -11 ] * PredCoef[ 11 ];\r
 \r
         /* prediction error */\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
 \r
         /* prediction error */\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
@@ -151,24 +151,24 @@ void SKP_Silk_LPC_analysis_filter10_FLP(
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
-    SKP_int   ix = 10;\r
+    SKP_int   ix;\r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
-    for ( ; ix < length; ix++) {\r
+    for ( ix = 10; ix < length; ix++) {\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
-        LPC_pred = s_ptr[ 0 ]   * PredCoef[ 0 ]  + \r
-                   s_ptr[-1]  * PredCoef[ 1 ]  +\r
-                   s_ptr[-2]  * PredCoef[ 2 ]  +\r
-                   s_ptr[-3]  * PredCoef[ 3 ]  +\r
-                   s_ptr[-4]  * PredCoef[ 4 ]  +\r
-                   s_ptr[-5]  * PredCoef[ 5 ]  +\r
-                   s_ptr[-6]  * PredCoef[ 6 ]  +\r
-                   s_ptr[-7]  * PredCoef[ 7 ]  +\r
-                   s_ptr[-8]  * PredCoef[ 8 ]  +\r
-                   s_ptr[-9]  * PredCoef[ 9 ];\r
+        LPC_pred = s_ptr[  0 ] * PredCoef[ 0 ]  + \r
+                   s_ptr[ -1 ] * PredCoef[ 1 ]  +\r
+                   s_ptr[ -2 ] * PredCoef[ 2 ]  +\r
+                   s_ptr[ -3 ] * PredCoef[ 3 ]  +\r
+                   s_ptr[ -4 ] * PredCoef[ 4 ]  +\r
+                   s_ptr[ -5 ] * PredCoef[ 5 ]  +\r
+                   s_ptr[ -6 ] * PredCoef[ 6 ]  +\r
+                   s_ptr[ -7 ] * PredCoef[ 7 ]  +\r
+                   s_ptr[ -8 ] * PredCoef[ 8 ]  +\r
+                   s_ptr[ -9 ] * PredCoef[ 9 ];\r
 \r
         /* prediction error */\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
 \r
         /* prediction error */\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
@@ -183,11 +183,11 @@ void SKP_Silk_LPC_analysis_filter8_FLP(
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
     const SKP_int                   length              /* I    Length of input signal                  */\r
 )\r
 {\r
-    SKP_int   ix = 8;\r
+    SKP_int   ix;\r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
     SKP_float LPC_pred;\r
     const SKP_float *s_ptr;\r
 \r
-    for ( ; ix < length; ix++) {\r
+    for ( ix = 8; ix < length; ix++) {\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
         s_ptr = &s[ix - 1];\r
 \r
         /* short-term prediction */\r
@@ -204,3 +204,76 @@ void SKP_Silk_LPC_analysis_filter8_FLP(
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
     }\r
 }\r
         r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
     }\r
 }\r
+\r
+/* 6th order LPC analysis filter, does not write first 6 samples */\r
+void SKP_Silk_LPC_analysis_filter6_FLP(\r
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */\r
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */\r
+    const SKP_float                 s[],                /* I    Input signal                            */\r
+    const SKP_int                   length              /* I    Length of input signal                  */\r
+)\r
+{\r
+    SKP_int   ix;\r
+    SKP_float LPC_pred;\r
+    const SKP_float *s_ptr;\r
+\r
+    for ( ix = 6; ix < length; ix++) {\r
+        s_ptr = &s[ix - 1];\r
+\r
+        /* short-term prediction */\r
+        LPC_pred = s_ptr[  0 ] * PredCoef[ 0 ]  + \r
+                   s_ptr[ -1 ] * PredCoef[ 1 ]  +\r
+                   s_ptr[ -2 ] * PredCoef[ 2 ]  +\r
+                   s_ptr[ -3 ] * PredCoef[ 3 ]  +\r
+                   s_ptr[ -4 ] * PredCoef[ 4 ]  +\r
+                   s_ptr[ -5 ] * PredCoef[ 5 ];\r
+\r
+        /* prediction error */\r
+        r_LPC[ix] = s_ptr[ 1 ] - LPC_pred;\r
+    }\r
+}\r
+\r
+void SKP_Silk_LPC_analysis_filter_FLP(\r
+          SKP_float                 r_LPC[],            /* O    LPC residual signal                     */\r
+    const SKP_float                 PredCoef[],         /* I    LPC coefficients                        */\r
+    const SKP_float                 s[],                /* I    Input signal                            */\r
+    const SKP_int                   length,             /* I    Length of input signal                  */\r
+    const SKP_int                   Order               /* I    LPC order                               */\r
+)\r
+{\r
+    SKP_assert( Order <= length );\r
+\r
+    switch( Order ) {\r
+        case 6:\r
+            SKP_Silk_LPC_analysis_filter6_FLP(  r_LPC, PredCoef, s, length );\r
+        break;\r
+\r
+        case 8:\r
+            SKP_Silk_LPC_analysis_filter8_FLP(  r_LPC, PredCoef, s, length );\r
+        break;\r
+\r
+        case 10:\r
+            SKP_Silk_LPC_analysis_filter10_FLP( r_LPC, PredCoef, s, length );\r
+        break;\r
+\r
+        case 12:\r
+            SKP_Silk_LPC_analysis_filter12_FLP( r_LPC, PredCoef, s, length );\r
+        break;\r
+\r
+        case 14:\r
+            SKP_Silk_LPC_analysis_filter14_FLP( r_LPC, PredCoef, s, length );\r
+        break;\r
+\r
+        case 16:\r
+            SKP_Silk_LPC_analysis_filter16_FLP( r_LPC, PredCoef, s, length );\r
+        break;\r
+\r
+        default:\r
+            SKP_assert( 0 );\r
+        break;\r
+    }\r
+\r
+    /* Set first LPC Order samples to zero instead of undefined */\r
+    SKP_memset( r_LPC, 0, Order * sizeof( SKP_float ) );\r
+}\r
+\r