| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351 |
- /******************************************************************************
- * @file csky_common_tables.h
- * @brief This file has extern declaration for common tables like
- * Bitreverse, reciprocal etc which are used across different functions.
- * @version V1.0
- * @date 20. Dec 2016
- ******************************************************************************/
- /* ---------------------------------------------------------------------------
- * Copyright (C) 2016 CSKY Limited. All rights reserved.
- *
- * Redistribution and use of this software in source and binary forms,
- * with or without modification, are permitted provided that the following
- * conditions are met:
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of CSKY Ltd. nor the names of CSKY's contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission of CSKY Ltd.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
- * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- * -------------------------------------------------------------------------- */
- #ifndef _CSKY_COMMON_TABLES_H
- #define _CSKY_COMMON_TABLES_H
- #include "csky_math.h"
- extern const uint16_t cskyBitRevTable[1024];
- extern const q15_t cskyRecipTableQ15[64];
- extern const q31_t cskyRecipTableQ31[64];
- extern const float32_t twiddleCoef_16[32];
- extern const float32_t twiddleCoef_32[64];
- extern const float32_t twiddleCoef_64[128];
- extern const float32_t twiddleCoef_128[256];
- extern const float32_t twiddleCoef_256[512];
- extern const float32_t twiddleCoef_512[1024];
- extern const float32_t twiddleCoef_1024[2048];
- extern const float32_t twiddleCoef_2048[4096];
- extern const float32_t twiddleCoef_4096[8192];
- extern const q31_t twiddleCoef_16_q31[24];
- extern const q31_t twiddleCoef_32_q31[48];
- extern const q31_t twiddleCoef_64_q31[96];
- extern const q31_t twiddleCoef_128_q31[192];
- extern const q31_t twiddleCoef_256_q31[384];
- extern const q31_t twiddleCoef_512_q31[768];
- extern const q31_t twiddleCoef_1024_q31[1536];
- extern const q31_t twiddleCoef_2048_q31[3072];
- extern const q31_t twiddleCoef_4096_q31[6144];
- extern const q15_t twiddleCoef_16_q15[24];
- extern const q15_t twiddleCoef_32_q15[48];
- extern const q15_t twiddleCoef_64_q15[96];
- extern const q15_t twiddleCoef_128_q15[192];
- extern const q15_t twiddleCoef_256_q15[384];
- extern const q15_t twiddleCoef_512_q15[768];
- extern const q15_t twiddleCoef_1024_q15[1536];
- extern const q15_t twiddleCoef_2048_q15[3072];
- extern const q15_t twiddleCoef_4096_q15[6144];
- extern const float32_t twiddleCoef_rfft_32[32];
- extern const float32_t twiddleCoef_rfft_64[64];
- extern const float32_t twiddleCoef_rfft_128[128];
- extern const float32_t twiddleCoef_rfft_256[256];
- extern const float32_t twiddleCoef_rfft_512[512];
- extern const float32_t twiddleCoef_rfft_1024[1024];
- extern const float32_t twiddleCoef_rfft_2048[2048];
- extern const float32_t twiddleCoef_rfft_4096[4096];
- extern const float32_t twiddleCoef_rfft_8192[8192];
- extern const q15_t realCoefAQ15_8192[8192];
- extern const q31_t realCoefAQ31_8192[8192];
- /*Tables for RFFT.*/
- extern const q15_t ALIGN4 realCoefAQ15_32[32];
- extern const q15_t ALIGN4 realCoefAQ15_64[64];
- extern const q15_t ALIGN4 realCoefAQ15_128[128];
- extern const q15_t ALIGN4 realCoefAQ15_256[256];
- extern const q15_t ALIGN4 realCoefAQ15_512[512];
- extern const q15_t ALIGN4 realCoefAQ15_1024[1024];
- extern const q15_t ALIGN4 realCoefAQ15_2048[2048];
- extern const q15_t ALIGN4 realCoefAQ15_4096[4096];
- extern const q31_t realCoefAQ31_32[32];
- extern const q31_t realCoefAQ31_64[64];
- extern const q31_t realCoefAQ31_128[128];
- extern const q31_t realCoefAQ31_256[256];
- extern const q31_t realCoefAQ31_512[512];
- extern const q31_t realCoefAQ31_1024[1024];
- extern const q31_t realCoefAQ31_2048[2048];
- extern const q31_t realCoefAQ31_4096[4096];
- extern const float32_t realCoefA[8192];
- extern const float32_t realCoefB[8192];
- /*Tables for DCT4*/
- extern const q15_t ALIGN4 WeightsQ15_128[128+2];
- extern const q15_t ALIGN4 WeightsQ15_512[512+2];
- extern const q15_t ALIGN4 WeightsQ15_2048[2048+2];
- extern const q15_t ALIGN4 WeightsQ15_8192[8192+2];
- extern const q15_t ALIGN4 cos_factorsQ15_128[128];
- extern const q15_t ALIGN4 cos_factorsQ15_512[512];
- extern const q15_t ALIGN4 cos_factorsQ15_2048[2048];
- extern const q15_t ALIGN4 cos_factorsQ15_8192[8192];
- extern const q31_t WeightsQ31_128[128+2];
- extern const q31_t WeightsQ31_512[512+2];
- extern const q31_t WeightsQ31_2048[2048+2];
- extern const q31_t WeightsQ31_8192[8192+2];
- extern const q31_t cos_factorsQ31_128[128];
- extern const q31_t cos_factorsQ31_512[512];
- extern const q31_t cos_factorsQ31_2048[2048];
- extern const q31_t cos_factorsQ31_8192[8192];
- extern const float32_t Weights_128[128+2];
- extern const float32_t Weights_512[512+2];
- extern const float32_t Weights_2048[2048+2];
- extern const float32_t Weights_8192[8192+2];
- extern const float32_t cos_factors_128[128];
- extern const float32_t cos_factors_512[512];
- extern const float32_t cos_factors_2048[2048];
- extern const float32_t cos_factors_8192[8192];
- /* floating-point bit reversal tables */
- #define CSKYBITREVINDEXTABLE__16_TABLE_LENGTH ((uint16_t)20 )
- #define CSKYBITREVINDEXTABLE__32_TABLE_LENGTH ((uint16_t)48 )
- #define CSKYBITREVINDEXTABLE__64_TABLE_LENGTH ((uint16_t)56 )
- #define CSKYBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208 )
- #define CSKYBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440 )
- #define CSKYBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448 )
- #define CSKYBITREVINDEXTABLE1024_TABLE_LENGTH ((uint16_t)1800)
- #define CSKYBITREVINDEXTABLE2048_TABLE_LENGTH ((uint16_t)3808)
- #define CSKYBITREVINDEXTABLE4096_TABLE_LENGTH ((uint16_t)4032)
- extern const uint16_t cskyBitRevIndexTable16[CSKYBITREVINDEXTABLE__16_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable32[CSKYBITREVINDEXTABLE__32_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable64[CSKYBITREVINDEXTABLE__64_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable128[CSKYBITREVINDEXTABLE_128_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable256[CSKYBITREVINDEXTABLE_256_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable512[CSKYBITREVINDEXTABLE_512_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable1024[CSKYBITREVINDEXTABLE1024_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable2048[CSKYBITREVINDEXTABLE2048_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable4096[CSKYBITREVINDEXTABLE4096_TABLE_LENGTH];
- /* fixed-point bit reversal tables */
- #define CSKYBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH ((uint16_t)12 )
- #define CSKYBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH ((uint16_t)24 )
- #define CSKYBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH ((uint16_t)56 )
- #define CSKYBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH ((uint16_t)112 )
- #define CSKYBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH ((uint16_t)240 )
- #define CSKYBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH ((uint16_t)480 )
- #define CSKYBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992 )
- #define CSKYBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984)
- #define CSKYBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032)
- extern const uint16_t cskyBitRevIndexTable_fixed_16[CSKYBITREVINDEXTABLE_FIXED___16_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_32[CSKYBITREVINDEXTABLE_FIXED___32_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_64[CSKYBITREVINDEXTABLE_FIXED___64_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_128[CSKYBITREVINDEXTABLE_FIXED__128_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_256[CSKYBITREVINDEXTABLE_FIXED__256_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_512[CSKYBITREVINDEXTABLE_FIXED__512_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_1024[CSKYBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_2048[CSKYBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH];
- extern const uint16_t cskyBitRevIndexTable_fixed_4096[CSKYBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH];
- /* Tables for Fast Math Sine and Cosine */
- extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1];
- extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1];
- extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1];
- /*Table for Fast math pow*/
- extern const log2_cof1 ui;
- extern const log2_cof2 vj;
- extern const exp_cof1 coar;
- extern const exp_cof2 fine;
- /*Table for Fast math pow2*/
- extern const float64_t exp2_accuratetable[512];
- extern const float32_t exp2_deltatable[512];
- /*Table for Fast math pow2*/
- extern const mynumber Iu[182];
- extern const mynumber Iv[362];
- extern const mynumber Lu[182][2];
- extern const mynumber Lv[362][2];
- /*constant for Fast math*/
- const static mynumber
- nZERO = {{0, 0x80000000}}, /* -0.0 */
- INF = {{0x00000000, 0x7ff00000}}, /* INF */
- nINF = {{0x00000000, 0xfff00000}}, /* -INF */
- sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
- ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
- ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
- bigu = {{0xfffffd2c, 0x4297ffff}}, /* 1.5*2**42 -724*2**-10 */
- bigv = {{0xfff8016a, 0x4207ffff}}, /* 1.5*2**33-1+362*2**-19 */
- t52 = {{0x00000000, 0x43300000}}, /* 2**52 */
- two52e = {{0x000003ff, 0x43300000}}, /* 2**52' */
- //nan = {{0x00000000, 0x7ff80000}}, /* NAN */
- t256 = {{0, 0x4ff00000}}, /* 2^256 */
- ln_two1 = {{0xFEFA3800, 0x3FE62E42}}, /* 0.69314718055989033 */
- ln_two2 = {{0x93C76730, 0x3D2EF357}}, /* 5.4979230187083712e-14*/
- log2e = {{0x652B82FE, 0x3FF71547}}, /* 1.4426950408889634 */
- ep2 = {{0x000004DC, 0x3FE00000}}, /* 0.50000000000013811 */
- ep3 = {{0x55555A0F, 0x3FC55555}}, /* 0.16666666666670024 */
- three33 = {{0, 0x42180000}}, /* 25769803776 */
- three51 = {{0, 0x43380000}}; /* 6755399441055744 */
- const static float64_t
- p2 = -0.5, p3 = 3.3333333333333333333e-1, p4 = -0.25,
- q2 = -0.5, q3 = 3.3333333333331404e-01, q4 = -2.4999999999996436e-01,
- q5 = 2.0000010500004459e-01, q6 = -1.6666678916688004e-01,
- r3 = 3.33333333333333333372884096563030E-01,
- r4 = -2.50000000000000000213574153875908E-01,
- r5 = 1.99999999999683593814072199830603E-01,
- r6 = -1.66666666666065494878165510225378E-01,
- r7 = 1.42857517857114380606360005067609E-01,
- r8 = -1.25000449999974370683775964001702E-01,
- s3 = 0.333251953125000000e0,
- ss3 = 8.138020833333333333e-05,
- s4 = -2.500000000000000000e-01,
- s5 = 1.999999999999960937e-01,
- s6 = -1.666666666666592447e-01,
- s7 = 1.428571845238194705e-01;
- // s8 = -1.250000500000149097e-01;
- const static float64_t huge = 1.0e300, tiny = 1.0e-300;
- const static float64_t err_0 = 1.000014, err_1 = 0.000016, zero = 0.0;
- const static q31_t bigint = 0x40862002,
- badint = 0x40876000, smallint = 0x3C8fffff;
- const static q31_t hugeint = 0x7fffffff, infint = 0x7ff00000;
- static const mynumber
- /* polynomial I */
- a2 = {{0x0001aa8f, 0xbfe00000} }, /* -0.500... */
- a3 = {{0x55588d2e, 0x3fd55555} }, /* 0.333... */
- /*polynomial II */
- b0 = {{0x55555555, 0x3fd55555} }, /* 0.333... */
- b1 = {{0xffffffbb, 0xbfcfffff} }, /* -0.249... */
- b2 = {{0x9999992f, 0x3fc99999} }, /* 0.199... */
- b3 = {{0x556503fd, 0xbfc55555} }, /* -0.166... */
- b4 = {{0x925b3d62, 0x3fc24924} }, /* 0.142... */
- b5 = {{0x160472fc, 0xbfbffffe} }, /* -0.124... */
- b6 = {{0x25db58ac, 0x3fbc71c5} }, /* 0.111... */
- b7 = {{0x11a2a61c, 0xbfb9a4ac} }, /* -0.100... */
- b8 = {{0x0df2b591, 0x3fb75077} }, /* 0.091... */
- /*polynomial III */
- c2 = {{0x00000000, 0xbfe00000} }, /* -1/2 */
- c3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */
- c4 = {{0x00000000, 0xbfd00000} }, /* -1/4 */
- c5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */
- /*polynomial IV */
- d2 = {{0x00000000, 0xbfe00000} }, /* -1/2 */
- dd2 = {{0x00000000, 0x00000000} }, /* -1/2-d2 */
- d3 = {{0x55555555, 0x3fd55555} }, /* 1/3 */
- dd3 = {{0x55555555, 0x3c755555} }, /* 1/3-d3 */
- d4 = {{0x00000000, 0xbfd00000} }, /* -1/4 */
- dd4 = {{0x00000000, 0x00000000} }, /* -1/4-d4 */
- d5 = {{0x9999999a, 0x3fc99999} }, /* 1/5 */
- dd5 = {{0x9999999a, 0xbc699999} }, /* 1/5-d5 */
- d6 = {{0x55555555, 0xbfc55555} }, /* -1/6 */
- dd6 = {{0x55555555, 0xbc655555} }, /* -1/6-d6 */
- d7 = {{0x92492492, 0x3fc24924} }, /* 1/7 */
- dd7 = {{0x92492492, 0x3c624924} }, /* 1/7-d7 */
- d8 = {{0x00000000, 0xbfc00000} }, /* -1/8 */
- dd8 = {{0x00000000, 0x00000000} }, /* -1/8-d8 */
- d9 = {{0x1c71c71c, 0x3fbc71c7} }, /* 1/9 */
- dd9 = {{0x1c71c71c, 0x3c5c71c7} }, /* 1/9-d9 */
- d10 = {{0x9999999a, 0xbfb99999} }, /* -1/10 */
- dd10 = {{0x9999999a, 0x3c599999} }, /* -1/10-d10 */
- d11 = {{0x745d1746, 0x3fb745d1} }, /* 1/11 */
- d12 = {{0x55555555, 0xbfb55555} }, /* -1/12 */
- d13 = {{0x13b13b14, 0x3fb3b13b} }, /* 1/13 */
- d14 = {{0x92492492, 0xbfb24924} }, /* -1/14 */
- d15 = {{0x11111111, 0x3fb11111} }, /* 1/15 */
- d16 = {{0x00000000, 0xbfb00000} }, /* -1/16 */
- d17 = {{0x1e1e1e1e, 0x3fae1e1e} }, /* 1/17 */
- d18 = {{0x1c71c71c, 0xbfac71c7} }, /* -1/18 */
- d19 = {{0xbca1af28, 0x3faaf286} }, /* 1/19 */
- d20 = {{0x9999999a, 0xbfa99999} }, /* -1/20 */
- /*constants */
- h1 = {{0x00000000, 0x3fd2e000} }, /* 151/2**9 */
- h2 = {{0x00000000, 0x3f669000} }, /* 361/2**17 */
- delu = {{0x00000000, 0x3f700000} }, /* 1/2**8 */
- delv = {{0x00000000, 0x3ef00000} }, /* 1/2**16 */
- e1 = {{0x00000000, 0x3bbcc868} }, /* 6.095e-21 */
- e2 = {{0x00000000, 0x3c1138ce} }, /* 2.334e-19 */
- e3 = {{0x00000000, 0x3aa1565d} }, /* 2.801e-26 */
- e4 = {{0x00000000, 0x39809d88} }, /* 1.024e-31 */
- e[4] = {{{0x00000000, 0x37da223a} },/* 1.2e-39 */
- {{0x00000000, 0x35c851c4} }, /* 1.3e-49 */
- {{0x00000000, 0x2ab85e51} }, /* 6.8e-103 */
- {{0x00000000, 0x17383827} }},/* 8.1e-197 */
- two54 = {{0x00000000, 0x43500000} }, /* 2**54 */
- u03 = {{0xeb851eb8, 0x3f9eb851} }; /* 0.03 */
- #define SQRT_2 sqrt_2.x
- #define DEL_U delu.x
- #define DEL_V delv.x
- #define LN2A ln2a.x
- #define LN2B ln2b.x
- #define E1 e1.x
- #define E2 e2.x
- #define E3 e3.x
- #define E4 e4.x
- #define U03 u03.x
- #define HALF 0x1.0p-1 /* 1/2 */
- #define MHALF -0x1.0p-1 /* -1/2 */
- /*coeffient for log2 funtion*/
- static const float64_t
- ln2 = 0.69314718055994530942,
- two54_d = 1.80143985094819840000e+16, /* 43500000 00000000 */
- Lg1 = 6.666666666666735130e-01, /* 3FE55555 55555593 */
- Lg2 = 3.999999999940941908e-01, /* 3FD99999 9997FA04 */
- Lg3 = 2.857142874366239149e-01, /* 3FD24924 94229359 */
- Lg4 = 2.222219843214978396e-01, /* 3FCC71C5 1D8E78AF */
- Lg5 = 1.818357216161805012e-01, /* 3FC74664 96CB03DE */
- Lg6 = 1.531383769920937332e-01, /* 3FC39A09 D078C69F */
- Lg7 = 1.479819860511658591e-01; /* 3FC2F112 DF3E5244 */
- /*coeffient for log10 function*/
- static const float64_t
- ivln10 = 4.34294481903251816668e-01, /* 0x3FDBCB7B, 0x1526E50E */
- log10_2hi = 3.01029995663611771306e-01, /* 0x3FD34413, 0x509F6000 */
- log10_2lo = 3.69423907715893078616e-13; /* 0x3D59FEF3, 0x11F12B36 */
- /*constant for log10 function*/
- static const float64_t
- TWO1023 = 8.988465674311579539e+307,
- TWOM1000 = 9.3326361850321887899e-302;
- #endif /* CSKY_COMMON_TABLES_H */
|