LCOV - code coverage report
Current view: top level - lib_lc3plus/fft - fft_240_480.h (source / functions) Hit Total Coverage
Test: Coverage on main -- short test vectors @ 6c9ddc4024a9c0e1ecb8f643f114a84a0e26ec6b Lines: 0 62 0.0 %
Date: 2025-05-23 08:37:30 Functions: 0 2 0.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             : *                        ETSI TS 103 634 V1.5.1                               *
       3             : *              Low Complexity Communication Codec Plus (LC3plus)              *
       4             : *                                                                             *
       5             : * Copyright licence is solely granted through ETSI Intellectual Property      *
       6             : * Rights Policy, 3rd April 2019. No patent licence is granted by implication, *
       7             : * estoppel or otherwise.                                                      *
       8             : ******************************************************************************/
       9             : 
      10             : /* guard against unindended includes */
      11             : #ifndef INCLUDED_FROM_IISFFT_C
      12             : #error "this file must not be included"
      13             : #endif
      14             : 
      15           0 : static void fft240(LC3_FLOAT* in)
      16             : {
      17           0 :     const LC3_INT table1[240] = {
      18             :         0,   16,  32,  48,  64,  80,  96,  112, 128, 144, 160, 176, 192, 208, 224, 225, 1,   17,  33,  49,  65,  81,
      19             :         97,  113, 129, 145, 161, 177, 193, 209, 210, 226, 2,   18,  34,  50,  66,  82,  98,  114, 130, 146, 162, 178,
      20             :         194, 195, 211, 227, 3,   19,  35,  51,  67,  83,  99,  115, 131, 147, 163, 179, 180, 196, 212, 228, 4,   20,
      21             :         36,  52,  68,  84,  100, 116, 132, 148, 164, 165, 181, 197, 213, 229, 5,   21,  37,  53,  69,  85,  101, 117,
      22             :         133, 149, 150, 166, 182, 198, 214, 230, 6,   22,  38,  54,  70,  86,  102, 118, 134, 135, 151, 167, 183, 199,
      23             :         215, 231, 7,   23,  39,  55,  71,  87,  103, 119, 120, 136, 152, 168, 184, 200, 216, 232, 8,   24,  40,  56,
      24             :         72,  88,  104, 105, 121, 137, 153, 169, 185, 201, 217, 233, 9,   25,  41,  57,  73,  89,  90,  106, 122, 138,
      25             :         154, 170, 186, 202, 218, 234, 10,  26,  42,  58,  74,  75,  91,  107, 123, 139, 155, 171, 187, 203, 219, 235,
      26             :         11,  27,  43,  59,  60,  76,  92,  108, 124, 140, 156, 172, 188, 204, 220, 236, 12,  28,  44,  45,  61,  77,
      27             :         93,  109, 125, 141, 157, 173, 189, 205, 221, 237, 13,  29,  30,  46,  62,  78,  94,  110, 126, 142, 158, 174,
      28             :         190, 206, 222, 238, 14,  15,  31,  47,  63,  79,  95,  111, 127, 143, 159, 175, 191, 207, 223, 239};
      29           0 :     const LC3_INT table2[240] = {
      30             :         0,   16,  32,  48,  64,  80,  96,  112, 128, 144, 160, 176, 192, 208, 224, 15,  31,  47,  63,  79,  95,  111,
      31             :         127, 143, 159, 175, 191, 207, 223, 239, 30,  46,  62,  78,  94,  110, 126, 142, 158, 174, 190, 206, 222, 238,
      32             :         14,  45,  61,  77,  93,  109, 125, 141, 157, 173, 189, 205, 221, 237, 13,  29,  60,  76,  92,  108, 124, 140,
      33             :         156, 172, 188, 204, 220, 236, 12,  28,  44,  75,  91,  107, 123, 139, 155, 171, 187, 203, 219, 235, 11,  27,
      34             :         43,  59,  90,  106, 122, 138, 154, 170, 186, 202, 218, 234, 10,  26,  42,  58,  74,  105, 121, 137, 153, 169,
      35             :         185, 201, 217, 233, 9,   25,  41,  57,  73,  89,  120, 136, 152, 168, 184, 200, 216, 232, 8,   24,  40,  56,
      36             :         72,  88,  104, 135, 151, 167, 183, 199, 215, 231, 7,   23,  39,  55,  71,  87,  103, 119, 150, 166, 182, 198,
      37             :         214, 230, 6,   22,  38,  54,  70,  86,  102, 118, 134, 165, 181, 197, 213, 229, 5,   21,  37,  53,  69,  85,
      38             :         101, 117, 133, 149, 180, 196, 212, 228, 4,   20,  36,  52,  68,  84,  100, 116, 132, 148, 164, 195, 211, 227,
      39             :         3,   19,  35,  51,  67,  83,  99,  115, 131, 147, 163, 179, 210, 226, 2,   18,  34,  50,  66,  82,  98,  114,
      40             :         130, 146, 162, 178, 194, 225, 1,   17,  33,  49,  65,  81,  97,  113, 129, 145, 161, 177, 193, 209};
      41             : 
      42           0 :     const LC3_INT  L    = 240;
      43           0 :     const LC3_INT  A    = 15;
      44           0 :     const LC3_INT  B    = 16;
      45           0 :     const LC3_INT* idx1 = table1;
      46           0 :     const LC3_INT* idx2 = table2;
      47             : 
      48             :     LC3_INT   k, l;
      49             :     LC3_FLOAT temp[32], out[480];
      50             : 
      51           0 :     for (k = 0; k < A; k++) {
      52           0 :         for (l = 0; l < B; l++) {
      53           0 :             temp[2 * l]     = in[2 * *idx1];
      54           0 :             temp[2 * l + 1] = in[2 * *idx1 + 1];
      55           0 :             idx1 += A;
      56             :         }
      57             : 
      58           0 :         fft16(temp); /* 16-point FFT */
      59           0 :         idx1 -= L;
      60             : 
      61           0 :         for (l = 0; l < B; l++) {
      62           0 :             in[2 * *idx1]     = temp[2 * l];
      63           0 :             in[2 * *idx1 + 1] = temp[2 * l + 1];
      64           0 :             idx1 += A;
      65             :         }
      66             : 
      67           0 :         idx1 -= L - 1;
      68             :     }
      69             : 
      70           0 :     idx1 -= A;
      71             : 
      72           0 :     for (k = 0; k < B; k++) {
      73           0 :         for (l = 0; l < A; l++) {
      74           0 :             temp[2 * l]     = in[2 * *idx1];
      75           0 :             temp[2 * l + 1] = in[2 * *idx1++ + 1];
      76             :         }
      77             : 
      78           0 :         fft15(temp); /* 15-point FFT */
      79             : 
      80           0 :         for (l = 0; l < A; l++) {
      81           0 :             out[2 * *idx2]       = temp[2 * l];
      82           0 :             out[2 * *idx2++ + 1] = temp[2 * l + 1];
      83             :         }
      84             :     }
      85             : 
      86           0 :     memmove(in, out, 2 * L * sizeof(LC3_FLOAT));
      87           0 : }
      88             : 
      89             : /* description in iis_fft.h */
      90           0 : static void fft480(LC3_FLOAT* in)
      91             : {
      92           0 :     const LC3_INT table1[480] = {
      93             :         0,   256, 32,  288, 64,  320, 96,  352, 128, 384, 160, 416, 192, 448, 224, 225, 1,   257, 33,  289, 65,  321,
      94             :         97,  353, 129, 385, 161, 417, 193, 449, 450, 226, 2,   258, 34,  290, 66,  322, 98,  354, 130, 386, 162, 418,
      95             :         194, 195, 451, 227, 3,   259, 35,  291, 67,  323, 99,  355, 131, 387, 163, 419, 420, 196, 452, 228, 4,   260,
      96             :         36,  292, 68,  324, 100, 356, 132, 388, 164, 165, 421, 197, 453, 229, 5,   261, 37,  293, 69,  325, 101, 357,
      97             :         133, 389, 390, 166, 422, 198, 454, 230, 6,   262, 38,  294, 70,  326, 102, 358, 134, 135, 391, 167, 423, 199,
      98             :         455, 231, 7,   263, 39,  295, 71,  327, 103, 359, 360, 136, 392, 168, 424, 200, 456, 232, 8,   264, 40,  296,
      99             :         72,  328, 104, 105, 361, 137, 393, 169, 425, 201, 457, 233, 9,   265, 41,  297, 73,  329, 330, 106, 362, 138,
     100             :         394, 170, 426, 202, 458, 234, 10,  266, 42,  298, 74,  75,  331, 107, 363, 139, 395, 171, 427, 203, 459, 235,
     101             :         11,  267, 43,  299, 300, 76,  332, 108, 364, 140, 396, 172, 428, 204, 460, 236, 12,  268, 44,  45,  301, 77,
     102             :         333, 109, 365, 141, 397, 173, 429, 205, 461, 237, 13,  269, 270, 46,  302, 78,  334, 110, 366, 142, 398, 174,
     103             :         430, 206, 462, 238, 14,  15,  271, 47,  303, 79,  335, 111, 367, 143, 399, 175, 431, 207, 463, 239, 240, 16,
     104             :         272, 48,  304, 80,  336, 112, 368, 144, 400, 176, 432, 208, 464, 465, 241, 17,  273, 49,  305, 81,  337, 113,
     105             :         369, 145, 401, 177, 433, 209, 210, 466, 242, 18,  274, 50,  306, 82,  338, 114, 370, 146, 402, 178, 434, 435,
     106             :         211, 467, 243, 19,  275, 51,  307, 83,  339, 115, 371, 147, 403, 179, 180, 436, 212, 468, 244, 20,  276, 52,
     107             :         308, 84,  340, 116, 372, 148, 404, 405, 181, 437, 213, 469, 245, 21,  277, 53,  309, 85,  341, 117, 373, 149,
     108             :         150, 406, 182, 438, 214, 470, 246, 22,  278, 54,  310, 86,  342, 118, 374, 375, 151, 407, 183, 439, 215, 471,
     109             :         247, 23,  279, 55,  311, 87,  343, 119, 120, 376, 152, 408, 184, 440, 216, 472, 248, 24,  280, 56,  312, 88,
     110             :         344, 345, 121, 377, 153, 409, 185, 441, 217, 473, 249, 25,  281, 57,  313, 89,  90,  346, 122, 378, 154, 410,
     111             :         186, 442, 218, 474, 250, 26,  282, 58,  314, 315, 91,  347, 123, 379, 155, 411, 187, 443, 219, 475, 251, 27,
     112             :         283, 59,  60,  316, 92,  348, 124, 380, 156, 412, 188, 444, 220, 476, 252, 28,  284, 285, 61,  317, 93,  349,
     113             :         125, 381, 157, 413, 189, 445, 221, 477, 253, 29,  30,  286, 62,  318, 94,  350, 126, 382, 158, 414, 190, 446,
     114             :         222, 478, 254, 255, 31,  287, 63,  319, 95,  351, 127, 383, 159, 415, 191, 447, 223, 479};
     115           0 :     const LC3_INT table2[480] = {
     116             :         0,   32,  64,  96,  128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 15,  47,  79,  111, 143, 175, 207,
     117             :         239, 271, 303, 335, 367, 399, 431, 463, 30,  62,  94,  126, 158, 190, 222, 254, 286, 318, 350, 382, 414, 446,
     118             :         478, 45,  77,  109, 141, 173, 205, 237, 269, 301, 333, 365, 397, 429, 461, 13,  60,  92,  124, 156, 188, 220,
     119             :         252, 284, 316, 348, 380, 412, 444, 476, 28,  75,  107, 139, 171, 203, 235, 267, 299, 331, 363, 395, 427, 459,
     120             :         11,  43,  90,  122, 154, 186, 218, 250, 282, 314, 346, 378, 410, 442, 474, 26,  58,  105, 137, 169, 201, 233,
     121             :         265, 297, 329, 361, 393, 425, 457, 9,   41,  73,  120, 152, 184, 216, 248, 280, 312, 344, 376, 408, 440, 472,
     122             :         24,  56,  88,  135, 167, 199, 231, 263, 295, 327, 359, 391, 423, 455, 7,   39,  71,  103, 150, 182, 214, 246,
     123             :         278, 310, 342, 374, 406, 438, 470, 22,  54,  86,  118, 165, 197, 229, 261, 293, 325, 357, 389, 421, 453, 5,
     124             :         37,  69,  101, 133, 180, 212, 244, 276, 308, 340, 372, 404, 436, 468, 20,  52,  84,  116, 148, 195, 227, 259,
     125             :         291, 323, 355, 387, 419, 451, 3,   35,  67,  99,  131, 163, 210, 242, 274, 306, 338, 370, 402, 434, 466, 18,
     126             :         50,  82,  114, 146, 178, 225, 257, 289, 321, 353, 385, 417, 449, 1,   33,  65,  97,  129, 161, 193, 240, 272,
     127             :         304, 336, 368, 400, 432, 464, 16,  48,  80,  112, 144, 176, 208, 255, 287, 319, 351, 383, 415, 447, 479, 31,
     128             :         63,  95,  127, 159, 191, 223, 270, 302, 334, 366, 398, 430, 462, 14,  46,  78,  110, 142, 174, 206, 238, 285,
     129             :         317, 349, 381, 413, 445, 477, 29,  61,  93,  125, 157, 189, 221, 253, 300, 332, 364, 396, 428, 460, 12,  44,
     130             :         76,  108, 140, 172, 204, 236, 268, 315, 347, 379, 411, 443, 475, 27,  59,  91,  123, 155, 187, 219, 251, 283,
     131             :         330, 362, 394, 426, 458, 10,  42,  74,  106, 138, 170, 202, 234, 266, 298, 345, 377, 409, 441, 473, 25,  57,
     132             :         89,  121, 153, 185, 217, 249, 281, 313, 360, 392, 424, 456, 8,   40,  72,  104, 136, 168, 200, 232, 264, 296,
     133             :         328, 375, 407, 439, 471, 23,  55,  87,  119, 151, 183, 215, 247, 279, 311, 343, 390, 422, 454, 6,   38,  70,
     134             :         102, 134, 166, 198, 230, 262, 294, 326, 358, 405, 437, 469, 21,  53,  85,  117, 149, 181, 213, 245, 277, 309,
     135             :         341, 373, 420, 452, 4,   36,  68,  100, 132, 164, 196, 228, 260, 292, 324, 356, 388, 435, 467, 19,  51,  83,
     136             :         115, 147, 179, 211, 243, 275, 307, 339, 371, 403, 450, 2,   34,  66,  98,  130, 162, 194, 226, 258, 290, 322,
     137             :         354, 386, 418, 465, 17,  49,  81,  113, 145, 177, 209, 241, 273, 305, 337, 369, 401, 433};
     138             : 
     139           0 :     const LC3_INT  L    = 480;
     140           0 :     const LC3_INT  A    = 15;
     141           0 :     const LC3_INT  B    = 32;
     142           0 :     const LC3_INT* idx1 = table1;
     143           0 :     const LC3_INT* idx2 = table2;
     144             : 
     145             :     LC3_INT   k, l;
     146             :     LC3_FLOAT temp[64], out[960];
     147             : 
     148           0 :     for (k = 0; k < A; k++) {
     149           0 :         for (l = 0; l < B; l++) {
     150           0 :             temp[2 * l]     = in[2 * *idx1];
     151           0 :             temp[2 * l + 1] = in[2 * *idx1 + 1];
     152           0 :             idx1 += A;
     153             :         }
     154             : 
     155           0 :         fft32(temp); /* 32-point FFT */
     156           0 :         idx1 -= L;
     157             : 
     158           0 :         for (l = 0; l < B; l++) {
     159           0 :             in[2 * *idx1]     = temp[2 * l];
     160           0 :             in[2 * *idx1 + 1] = temp[2 * l + 1];
     161           0 :             idx1 += A;
     162             :         }
     163             : 
     164           0 :         idx1 -= L - 1;
     165             :     }
     166             : 
     167           0 :     idx1 -= A;
     168             : 
     169           0 :     for (k = 0; k < B; k++) {
     170           0 :         for (l = 0; l < A; l++) {
     171           0 :             temp[2 * l]     = in[2 * *idx1];
     172           0 :             temp[2 * l + 1] = in[2 * *idx1++ + 1];
     173             :         }
     174             : 
     175           0 :         fft15(temp); /* 15-point FFT */
     176             : 
     177           0 :         for (l = 0; l < A; l++) {
     178           0 :             out[2 * *idx2]       = temp[2 * l];
     179           0 :             out[2 * *idx2++ + 1] = temp[2 * l + 1];
     180             :         }
     181             :     }
     182             : 
     183           0 :     memmove(in, out, 2 * L * sizeof(LC3_FLOAT));
     184           0 : }

Generated by: LCOV version 1.14