From 3060b1da8f1e64e951cd5d9f5918e79d293ad15b Mon Sep 17 00:00:00 2001 From: Christophe Favergeon Date: Wed, 8 Jan 2020 09:01:17 +0100 Subject: [PATCH] CMSIS-DSP: MVE version of arm_cfft_f32. --- Include/arm_math.h | 13 + Include/arm_mve_tables.h | 97 + Include/arm_vec_math.h | 1 + PrivateInclude/arm_vec_fft.h | 58 + PythonWrapper/cmsisdsp_pkg/src/fftinit.c | 73 - PythonWrapper/setup.py | 2 +- PythonWrapper/testdsp.py | 564 +-- Scripts/README.md | 4 + Scripts/genMVETwiddleCoefs.py | 266 ++ Source/CommonTables/CMakeLists.txt | 4 + Source/CommonTables/CommonTables.c | 2 +- Source/CommonTables/arm_const_structs.c | 23 + Source/CommonTables/arm_mve_tables.c | 3767 +++++++++++++++++ Source/TransformFunctions/CMakeLists.txt | 1 + .../TransformFunctions/TransformFunctions.c | 1 + Source/TransformFunctions/arm_cfft_f32.c | 597 ++- Source/TransformFunctions/arm_cfft_init_f32.c | 353 ++ .../arm_rfft_fast_init_f32.c | 100 +- Source/fft.cmake | 36 + Testing/Include/Tests/TransformCF32.h | 4 +- Testing/Source/Tests/TransformCF32.cpp | 117 +- Testing/desc.txt | 1 + 22 files changed, 5632 insertions(+), 452 deletions(-) create mode 100755 Include/arm_mve_tables.h create mode 100755 PrivateInclude/arm_vec_fft.h create mode 100755 Scripts/README.md create mode 100755 Scripts/genMVETwiddleCoefs.py create mode 100755 Source/CommonTables/arm_mve_tables.c create mode 100755 Source/TransformFunctions/arm_cfft_init_f32.c diff --git a/Include/arm_math.h b/Include/arm_math.h index 2cd6375a..3e62e07f 100644 --- a/Include/arm_math.h +++ b/Include/arm_math.h @@ -3147,8 +3147,21 @@ void arm_cfft_q31( const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ uint16_t bitRevLength; /**< bit reversal table length. */ +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ + const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ + const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ + const float32_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ + const float32_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ + const float32_t *rearranged_twiddle_stride3; +#endif } arm_cfft_instance_f32; + + arm_status arm_cfft_init_f32( + arm_cfft_instance_f32 * S, + uint16_t fftLen); + void arm_cfft_f32( const arm_cfft_instance_f32 * S, float32_t * p1, diff --git a/Include/arm_mve_tables.h b/Include/arm_mve_tables.h new file mode 100755 index 00000000..b91e8356 --- /dev/null +++ b/Include/arm_mve_tables.h @@ -0,0 +1,97 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mve_tables.h + * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc + * used for MVE implementation only + * + * $Date: 08. January 2020 + * $Revision: V1.7.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #ifndef _ARM_MVE_TABLES_H + #define _ARM_MVE_TABLES_H + + #include "arm_math.h" + + #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) + + + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) + +extern uint32_t rearranged_twiddle_tab_stride1_arr_16[2]; +extern uint32_t rearranged_twiddle_tab_stride2_arr_16[2]; +extern uint32_t rearranged_twiddle_tab_stride3_arr_16[2]; +extern float32_t rearranged_twiddle_stride1_16[8]; +extern float32_t rearranged_twiddle_stride2_16[8]; +extern float32_t rearranged_twiddle_stride3_16[8]; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) + +extern uint32_t rearranged_twiddle_tab_stride1_arr_64[3]; +extern uint32_t rearranged_twiddle_tab_stride2_arr_64[3]; +extern uint32_t rearranged_twiddle_tab_stride3_arr_64[3]; +extern float32_t rearranged_twiddle_stride1_64[40]; +extern float32_t rearranged_twiddle_stride2_64[40]; +extern float32_t rearranged_twiddle_stride3_64[40]; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) + +extern uint32_t rearranged_twiddle_tab_stride1_arr_256[4]; +extern uint32_t rearranged_twiddle_tab_stride2_arr_256[4]; +extern uint32_t rearranged_twiddle_tab_stride3_arr_256[4]; +extern float32_t rearranged_twiddle_stride1_256[168]; +extern float32_t rearranged_twiddle_stride2_256[168]; +extern float32_t rearranged_twiddle_stride3_256[168]; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) + +extern uint32_t rearranged_twiddle_tab_stride1_arr_1024[5]; +extern uint32_t rearranged_twiddle_tab_stride2_arr_1024[5]; +extern uint32_t rearranged_twiddle_tab_stride3_arr_1024[5]; +extern float32_t rearranged_twiddle_stride1_1024[680]; +extern float32_t rearranged_twiddle_stride2_1024[680]; +extern float32_t rearranged_twiddle_stride3_1024[680]; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) + +extern uint32_t rearranged_twiddle_tab_stride1_arr_4096[6]; +extern uint32_t rearranged_twiddle_tab_stride2_arr_4096[6]; +extern uint32_t rearranged_twiddle_tab_stride3_arr_4096[6]; +extern float32_t rearranged_twiddle_stride1_4096[2728]; +extern float32_t rearranged_twiddle_stride2_4096[2728]; +extern float32_t rearranged_twiddle_stride3_4096[2728]; +#endif + + +#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ + +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ + +#endif /*_ARM_MVE_TABLES_H*/ + diff --git a/Include/arm_vec_math.h b/Include/arm_vec_math.h index a4a4b0fc..0ce9464b 100755 --- a/Include/arm_vec_math.h +++ b/Include/arm_vec_math.h @@ -40,6 +40,7 @@ extern "C" static const float32_t __logf_rng_f32=0.693147180f; + /* fast inverse approximation (3x newton) */ __STATIC_INLINE f32x4_t vrecip_medprec_f32( f32x4_t x) diff --git a/PrivateInclude/arm_vec_fft.h b/PrivateInclude/arm_vec_fft.h new file mode 100755 index 00000000..d04ace75 --- /dev/null +++ b/PrivateInclude/arm_vec_fft.h @@ -0,0 +1,58 @@ +/****************************************************************************** + * @file arm_vec_fft.h + * @brief Private header file for CMSIS DSP Library + * @version V1.7.0 + * @date 07. January 2020 + ******************************************************************************/ +/* + * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _ARM_VEC_FFT_H_ +#define _ARM_VEC_FFT_H_ + +#include "arm_math.h" +#include "arm_helium_utils.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) + +#define MVE_CMPLX_ADD_A_ixB(A, B) vcaddq_rot90(A,B) +#define MVE_CMPLX_SUB_A_ixB(A,B) vcaddq_rot270(A,B) +#define MVE_CMPLX_MULT_FLT_AxB(A,B) vcmlaq_rot90(vcmulq(A, B), A, B) +#define MVE_CMPLX_MULT_FLT_Conj_AxB(A,B) vcmlaq_rot270(vcmulq(A, B), A, B) + +#define MVE_CMPLX_MULT_FX_AxB(A,B) vqdmladhxq(vqdmlsdhq((__typeof(A))vuninitializedq_s32(), A, B), A, B); +#define MVE_CMPLX_MULT_FX_AxConjB(A,B) vqdmladhq(vqdmlsdhxq((__typeof(A))vuninitializedq_s32(), A, B), A, B); + +#define MVE_CMPLX_ADD_FX_A_ixB(A, B) vhcaddq_rot90(A,B) +#define MVE_CMPLX_SUB_FX_A_ixB(A,B) vhcaddq_rot270(A,B) + + +#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE)*/ + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ARM_VEC_FFT_H_ */ \ No newline at end of file diff --git a/PythonWrapper/cmsisdsp_pkg/src/fftinit.c b/PythonWrapper/cmsisdsp_pkg/src/fftinit.c index 497cee55..537df22b 100644 --- a/PythonWrapper/cmsisdsp_pkg/src/fftinit.c +++ b/PythonWrapper/cmsisdsp_pkg/src/fftinit.c @@ -114,79 +114,6 @@ arm_status arm_cfft_init_f64( return (status); } -arm_status arm_cfft_init_f32( - arm_cfft_instance_f32 * S, - uint16_t fftLen) -{ - /* Initialise the default arm status */ - arm_status status = ARM_MATH_SUCCESS; - - /* Initialise the FFT length */ - S->fftLen = fftLen; - - /* Initialise the Twiddle coefficient pointer */ - S->pTwiddle = (float32_t *)twiddleCoef_4096; - - - /* Initializations of Instance structure depending on the FFT length */ - switch (S->fftLen) { - /* Initializations of structure parameters for 4096 point FFT */ - case 4096U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,4096); - break; - - /* Initializations of structure parameters for 2048 point FFT */ - case 2048U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,2048); - - break; - - /* Initializations of structure parameters for 1024 point FFT */ - case 1024U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,1024); - - break; - - /* Initializations of structure parameters for 512 point FFT */ - case 512U: - /* Initialise the bit reversal table modifier */ - FFTINIT(f32,512); - break; - - case 256U: - FFTINIT(f32,256); - break; - - case 128U: - FFTINIT(f32,128); - break; - - case 64U: - FFTINIT(f32,64); - break; - - case 32U: - FFTINIT(f32,32); - break; - - case 16U: - /* Initializations of structure parameters for 16 point FFT */ - FFTINIT(f32,16); - break; - - - default: - /* Reporting argument error if fftSize is not valid value */ - status = ARM_MATH_ARGUMENT_ERROR; - break; - } - - - return (status); -} arm_status arm_cfft_init_q31( arm_cfft_instance_q31 * S, diff --git a/PythonWrapper/setup.py b/PythonWrapper/setup.py index eacd2318..2af78dc9 100644 --- a/PythonWrapper/setup.py +++ b/PythonWrapper/setup.py @@ -6,7 +6,7 @@ import sys import os from config import ROOT -includes = [os.path.join(ROOT,"Include"),os.path.join("cmsisdsp_pkg","src")] +includes = [os.path.join(ROOT,"Include"),os.path.join(ROOT,"PrivateInclude"),os.path.join("cmsisdsp_pkg","src")] if sys.platform == 'win32': cflags = ["-DWIN",config.cflags,"-DUNALIGNED_SUPPORT_DISABLE"] diff --git a/PythonWrapper/testdsp.py b/PythonWrapper/testdsp.py index 77086c7c..7d51466f 100644 --- a/PythonWrapper/testdsp.py +++ b/PythonWrapper/testdsp.py @@ -1,76 +1,76 @@ import cmsisdsp as dsp import numpy as np from scipy import signal -#import matplotlib.pyplot as plt -#from scipy.fftpack import dct - -#r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7])) -#print(r) - -#r = dsp.arm_add_q31([1,2,3],[4,5,7]) -#print(r) -# -#r = dsp.arm_add_q15([1,2,3],[4,5,7]) -#print(r) -# -#r = dsp.arm_add_q7([-1,2,3],[4,127,7]) -#print(r) -# -#r = dsp.arm_scale_f32([1.,2,3],2) -#print(r) -# -#r = dsp.arm_scale_q31([0x7FFF,0x3FFF,0x1FFF],1 << 20,2) -#print(r) -# -#r = dsp.arm_scale_q15([0x7FFF,0x3FFF,0x1FFF],1 << 10,2) -#print(r) -# -#r = dsp.arm_scale_q7([0x7F,0x3F,0x1F],1 << 5,2) -#print(r) -# -# -#r = dsp.arm_negate_f32([1.,2,3]) -#print(r) -# -#r = dsp.arm_negate_q31([1,2,3]) -#print(r) -# -#r = dsp.arm_negate_q15([1,2,3]) -#print(r) -# -#r = dsp.arm_negate_q7(np.array([0x80,0x81,0x82])) -#print(r) - -#r = dsp.arm_cmplx_conj_f32([1.,2,3,4]) -#print(r) - -#r = dsp.arm_cmplx_conj_q31([1,2,3,4]) -#print(r) - -#r = dsp.arm_cmplx_conj_q15([1,2,3,4]) -#print(r) - -#r = dsp.arm_cmplx_dot_prod_f32([1.,2,3,4],[1.,2,3,4]) -#print(r) - -#r = dsp.arm_cmplx_dot_prod_q31([0x1FFF,0x3FFF,0x1FFF,0x3FFF],[0x1FFF,0x3FFF,0x1FFF,0x3FFF]) -#print(r) - -#r = dsp.arm_cmplx_mult_real_f32([1.0,2,3,4],[5.,5.,5.,5.]) -#print(r) - -#pidf32 = dsp.arm_pid_instance_f32(Kp=1.0,Ki=1.2,Kd=0.4) -#print(pidf32.Kp()) -#print(pidf32.Ki()) -#print(pidf32.Kd()) -#print(pidf32.A0()) -# -#dsp.arm_pid_init_f32(pidf32,0) -#print(pidf32.A0()) - -#print(dsp.arm_cos_f32(3.14/4.)) - -#print(dsp.arm_sqrt_q31(0x7FFF)) +import matplotlib.pyplot as plt +from scipy.fftpack import dct + +r = dsp.arm_add_f32(np.array([1.,2,3]),np.array([4.,5,7])) +print(r) + +r = dsp.arm_add_q31([1,2,3],[4,5,7]) +print(r) + +r = dsp.arm_add_q15([1,2,3],[4,5,7]) +print(r) + +r = dsp.arm_add_q7([-1,2,3],[4,127,7]) +print(r) + +r = dsp.arm_scale_f32([1.,2,3],2) +print(r) + +r = dsp.arm_scale_q31([0x7FFF,0x3FFF,0x1FFF],1 << 20,2) +print(r) + +r = dsp.arm_scale_q15([0x7FFF,0x3FFF,0x1FFF],1 << 10,2) +print(r) + +r = dsp.arm_scale_q7([0x7F,0x3F,0x1F],1 << 5,2) +print(r) + + +r = dsp.arm_negate_f32([1.,2,3]) +print(r) + +r = dsp.arm_negate_q31([1,2,3]) +print(r) + +r = dsp.arm_negate_q15([1,2,3]) +print(r) + +r = dsp.arm_negate_q7(np.array([0x80,0x81,0x82])) +print(r) + +r = dsp.arm_cmplx_conj_f32([1.,2,3,4]) +print(r) + +r = dsp.arm_cmplx_conj_q31([1,2,3,4]) +print(r) + +r = dsp.arm_cmplx_conj_q15([1,2,3,4]) +print(r) + +r = dsp.arm_cmplx_dot_prod_f32([1.,2,3,4],[1.,2,3,4]) +print(r) + +r = dsp.arm_cmplx_dot_prod_q31([0x1FFF,0x3FFF,0x1FFF,0x3FFF],[0x1FFF,0x3FFF,0x1FFF,0x3FFF]) +print(r) + +r = dsp.arm_cmplx_mult_real_f32([1.0,2,3,4],[5.,5.,5.,5.]) +print(r) + +pidf32 = dsp.arm_pid_instance_f32(Kp=1.0,Ki=1.2,Kd=0.4) +print(pidf32.Kp()) +print(pidf32.Ki()) +print(pidf32.Kd()) +print(pidf32.A0()) + +dsp.arm_pid_init_f32(pidf32,0) +print(pidf32.A0()) + +print(dsp.arm_cos_f32(3.14/4.)) + +print(dsp.arm_sqrt_q31(0x7FFF)) firf32 = dsp.arm_fir_instance_f32() dsp.arm_fir_init_f32(firf32,3,[1.,2,3],[0,0,0,0,0,0,0]) @@ -128,28 +128,28 @@ def Q15toF32(x): def Q7toF32(x): return(1.0*x / 2**7) -#firq31 = dsp.arm_fir_instance_q31() -#x=np.array([1,2,3,4,5])/10.0 -#taps=np.array([1,2,3])/10.0 -#xQ31=toQ31(x) -#tapsQ31=toQ31(taps) -#dsp.arm_fir_init_q31(firq31,3,tapsQ31,[0,0,0,0,0,0,0]) -#print(firq31.numTaps()) -#resultQ31=dsp.arm_fir_q31(firq31,xQ31) -#result=Q31toF32(resultQ31) -#print(result) - -#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) -#b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]]) -#print(a+b) -#v=dsp.arm_mat_add_f32(a,b) -#print(v) - -#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) -#b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]]) -#print(np.dot(a , b)) -#v=dsp.arm_mat_mult_f32(a,b) -#print(v) +firq31 = dsp.arm_fir_instance_q31() +x=np.array([1,2,3,4,5])/10.0 +taps=np.array([1,2,3])/10.0 +xQ31=toQ31(x) +tapsQ31=toQ31(taps) +dsp.arm_fir_init_q31(firq31,3,tapsQ31,[0,0,0,0,0,0,0]) +print(firq31.numTaps()) +resultQ31=dsp.arm_fir_q31(firq31,xQ31) +result=Q31toF32(resultQ31) +print(result) + +a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) +b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]]) +print(a+b) +v=dsp.arm_mat_add_f32(a,b) +print(v) + +a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) +b=np.array([[1.,2,3],[5.1,6,7],[9.1,10,11],[5,8,4]]) +print(np.dot(a , b)) +v=dsp.arm_mat_mult_f32(a,b) +print(v) def imToReal2D(a): ar=np.zeros(np.array(a.shape) * [1,2]) @@ -160,55 +160,55 @@ def imToReal2D(a): def realToIm2D(ar): return(ar[::,0::2] + 1j * ar[::,1::2]) -#a=np.array([[1. + 2j,3 + 4j],[5 + 6j,7 + 8j],[9 + 10j,11 + 12j]]) -#b=np.array([[1. + 2j, 3 + 5.1j ,6 + 7j],[9.1 + 10j,11 + 5j,8 +4j]]) -#print(np.dot(a , b)) -# +a=np.array([[1. + 2j,3 + 4j],[5 + 6j,7 + 8j],[9 + 10j,11 + 12j]]) +b=np.array([[1. + 2j, 3 + 5.1j ,6 + 7j],[9.1 + 10j,11 + 5j,8 +4j]]) +print(np.dot(a , b)) + # Convert complex array to real array for use in CMSIS DSP -#ar = imToReal2D(a) -#br = imToReal2D(b) -# -#v=dsp.arm_mat_cmplx_mult_f32(ar,br) -#print(v) - -#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) / 30.0 -#b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]]) / 30.0 -#print(a+b) -# -#aQ31=toQ31(a) -#bQ31=toQ31(b) -#v=dsp.arm_mat_add_q31(aQ31,bQ31) -#rQ31=v[1] -#r=Q31toF32(rQ31) -#print(r)# - -#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) -#print(np.transpose(a)) -#print(dsp.arm_mat_trans_f32(a)) - -#a = np.array([[1., 2.], [3., 4.]]) -#print(np.linalg.inv(a)) -#print(dsp.arm_mat_inverse_f32(a)) - -#a = np.array([[1., 2.], [3., 4.]]) -#print(np.linalg.inv(a)) -#print(dsp.arm_mat_inverse_f64(a)) - -#a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) -#print(2.5*a) -#print(dsp.arm_mat_scale_f32(a,2.5)) - -#a=np.array([1.,2,3,4,5,6,7,8,9,10,11,12]) -#print(np.max(a)) -#print(np.argmax(a)) -#print(dsp.arm_max_f32(a)) -# -#print(np.mean(a)) -#print(dsp.arm_mean_f32(a)) -# -#print(np.dot(a,a)) -#print(dsp.arm_power_f32(a)) -# +ar = imToReal2D(a) +br = imToReal2D(b) + +v=dsp.arm_mat_cmplx_mult_f32(ar,br) +print(v) + +a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) / 30.0 +b=np.array([[1.,2,3,4],[5.1,6,7,8],[9.1,10,11,12]]) / 30.0 +print(a+b) + +aQ31=toQ31(a) +bQ31=toQ31(b) +v=dsp.arm_mat_add_q31(aQ31,bQ31) +rQ31=v[1] +r=Q31toF32(rQ31) +print(r) + +a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) +print(np.transpose(a)) +print(dsp.arm_mat_trans_f32(a)) + +a = np.array([[1., 2.], [3., 4.]]) +print(np.linalg.inv(a)) +print(dsp.arm_mat_inverse_f32(a)) + +a = np.array([[1., 2.], [3., 4.]]) +print(np.linalg.inv(a)) +print(dsp.arm_mat_inverse_f64(a)) + +a=np.array([[1.,2,3,4],[5,6,7,8],[9,10,11,12]]) +print(2.5*a) +print(dsp.arm_mat_scale_f32(a,2.5)) + +a=np.array([1.,2,3,4,5,6,7,8,9,10,11,12]) +print(np.max(a)) +print(np.argmax(a)) +print(dsp.arm_max_f32(a)) + +print(np.mean(a)) +print(dsp.arm_mean_f32(a)) + +print(np.dot(a,a)) +print(dsp.arm_power_f32(a)) + def imToReal1D(a): ar=np.zeros(np.array(a.shape) * 2) @@ -219,145 +219,145 @@ def imToReal1D(a): def realToIm1D(ar): return(ar[0::2] + 1j * ar[1::2]) -#nb = 16 -#signal = np.cos(2 * np.pi * np.arange(nb) / nb) - -#result=np.fft.fft(signal) -#print(result) -#signalR = imToReal1D(signal) -#cfftf32=dsp.arm_cfft_instance_f32() -#status=dsp.arm_cfft_init_f32(cfftf32,nb) -#print(status) -#resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1) -#resultI = realToIm1D(resultR) -#print(resultI) - -#signal = signal / 10.0 -#result=np.fft.fft(signal) -#print(result) -# -#signalR = imToReal1D(signal) -#signalRQ31=toQ31(signalR) -#cfftq31=dsp.arm_cfft_instance_q31() -#status=dsp.arm_cfft_init_q31(cfftq31,nb) -#print(status) -#resultR = dsp.arm_cfft_q31(cfftq31,signalRQ31,0,1) -#resultI = realToIm1D(Q31toF32(resultR))*16 -#print(resultI) - -#signal = signal / 10.0 -#result=np.fft.fft(signal) -#print(result) -## -#signalR = imToReal1D(signal) -#signalRQ15=toQ15(signalR) -#cfftq15=dsp.arm_cfft_instance_q15() -#status=dsp.arm_cfft_init_q15(cfftq15,nb) -#print(status) -#resultR = dsp.arm_cfft_q15(cfftq15,signalRQ15,0,1) -#resultR=Q15toF32(resultR) -#resultI = realToIm1D(resultR)*16 -#print(resultI) - -#nb = 128 -#signal = np.cos(2 * np.pi * np.arange(nb) / nb) -# -#result=np.fft.fft(signal) -##print(result) -#cfftradix4f32=dsp.arm_cfft_radix4_instance_f32() -#rfftf32=dsp.arm_rfft_instance_f32() -#status=dsp.arm_rfft_init_f32(rfftf32,cfftradix4f32,nb,0,1) -#print(status) -#resultI = dsp.arm_rfft_f32(rfftf32,signal) -#print(result) - -#nb = 128 -#signal = np.cos(2 * np.pi * np.arange(nb) / nb) -#signalRQ31=toQ31(signal) -# -#result=np.fft.fft(signal) -##print(result) -#rfftq31=dsp.arm_rfft_instance_q31() -#status=dsp.arm_rfft_init_q31(rfftq31,nb,0,1) -#print(status) -#resultI = dsp.arm_rfft_q31(rfftq31,signalRQ31) -#resultI=Q31toF32(resultI)*(1 << 7) -##print(result) - -#nb = 128 -#signal = np.cos(2 * np.pi * np.arange(nb) / nb) -#signalRQ15=toQ15(signal) -# -#result=np.fft.fft(signal) -##print(result) -#rfftq15=dsp.arm_rfft_instance_q15() -#status=dsp.arm_rfft_init_q15(rfftq15,nb,0,1) -#print(status) -#resultI = dsp.arm_rfft_q15(rfftq15,signalRQ15) -#resultI=Q15toF32(resultI)*(1 << 7) -#print(result) - - -#nb = 128 -#nb2=64 -#signal = np.cos(2 * np.pi * np.arange(nb) / nb) -#result=dct(signal,4,norm='ortho') -##print(result) - -#cfftradix4f32=dsp.arm_cfft_radix4_instance_f32() -#rfftf32=dsp.arm_rfft_instance_f32() -#dct4f32=dsp.arm_dct4_instance_f32() -#status=dsp.arm_dct4_init_f32(dct4f32,rfftf32,cfftradix4f32,nb,nb2,0.125) -#print(status) -#state=np.zeros(2*nb) -#resultI = dsp.arm_dct4_f32(dct4f32,state,signal) -##print(resultI) - - -#signal = signal / 10.0 -#result=dct(signal,4,norm='ortho') -#signalQ31=toQ31(signal) -#cfftradix4q31=dsp.arm_cfft_radix4_instance_q31() -#rfftq31=dsp.arm_rfft_instance_q31() -#dct4q31=dsp.arm_dct4_instance_q31() -#status=dsp.arm_dct4_init_q31(dct4q31,rfftq31,cfftradix4q31,nb,nb2,0x10000000) -#print(status) -#state=np.zeros(2*nb) -#resultI = dsp.arm_dct4_q31(dct4q31,state,signalQ31) -#resultI=Q31toF32(resultI)*(1 << 7) - -#nb = 128 -#nb2=64 -#signal = np.cos(2 * np.pi * np.arange(nb) / nb) -#signal = signal / 10.0 -#result=dct(signal,4,norm='ortho') -#signalQ15=toQ15(signal) -#cfftradix4q15=dsp.arm_cfft_radix4_instance_q15() -#rfftq15=dsp.arm_rfft_instance_q15() -#dct4q15=dsp.arm_dct4_instance_q15() -#status=dsp.arm_dct4_init_q15(dct4q15,rfftq15,cfftradix4q15,nb,nb2,0x1000) -#print(status) -#state=np.zeros(2*nb) -#resultI = dsp.arm_dct4_q15(dct4q15,state,signalQ15) -#resultI=Q15toF32(resultI)*(1 << 7) -# -# -#from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show -#figure(1) -#plot(np.absolute(signal)) -#t = np.arange(nb) -#freq = np.fft.fftfreq(t.shape[-1]) -#resultmag=np.absolute(result) -#figure(2) -#plot(resultmag) -#figure(3) -#cmsigmag=np.absolute(resultI) -#plot(cmsigmag) -#show()## - -#biquadf32 = dsp.arm_biquad_casd_df1_inst_f32() -#numStages=1 -#state=np.zeros(numStages*4) -#coefs=[1.,2,3,4,5] -#dsp.arm_biquad_cascade_df1_init_f32(biquadf32,1,coefs,state) -#print(dsp.arm_biquad_cascade_df1_f32(biquadf32,[1,2,3,4,5]))# \ No newline at end of file +nb = 16 +signal = np.cos(2 * np.pi * np.arange(nb) / nb) + +result=np.fft.fft(signal) +print(result) +signalR = imToReal1D(signal) +cfftf32=dsp.arm_cfft_instance_f32() +status=dsp.arm_cfft_init_f32(cfftf32,nb) +print(status) +resultR = dsp.arm_cfft_f32(cfftf32,signalR,0,1) +resultI = realToIm1D(resultR) +print(resultI) + +signal = signal / 10.0 +result=np.fft.fft(signal) +print(result) + +signalR = imToReal1D(signal) +signalRQ31=toQ31(signalR) +cfftq31=dsp.arm_cfft_instance_q31() +status=dsp.arm_cfft_init_q31(cfftq31,nb) +print(status) +resultR = dsp.arm_cfft_q31(cfftq31,signalRQ31,0,1) +resultI = realToIm1D(Q31toF32(resultR))*16 +print(resultI) + +signal = signal / 10.0 +result=np.fft.fft(signal) +print(result) + +signalR = imToReal1D(signal) +signalRQ15=toQ15(signalR) +cfftq15=dsp.arm_cfft_instance_q15() +status=dsp.arm_cfft_init_q15(cfftq15,nb) +print(status) +resultR = dsp.arm_cfft_q15(cfftq15,signalRQ15,0,1) +resultR=Q15toF32(resultR) +resultI = realToIm1D(resultR)*16 +print(resultI) + +nb = 128 +signal = np.cos(2 * np.pi * np.arange(nb) / nb) + +result=np.fft.fft(signal) +print(result) +cfftradix4f32=dsp.arm_cfft_radix4_instance_f32() +rfftf32=dsp.arm_rfft_instance_f32() +status=dsp.arm_rfft_init_f32(rfftf32,cfftradix4f32,nb,0,1) +print(status) +resultI = dsp.arm_rfft_f32(rfftf32,signal) +print(result) + +nb = 128 +signal = np.cos(2 * np.pi * np.arange(nb) / nb) +signalRQ31=toQ31(signal) + +result=np.fft.fft(signal) +print(result) +rfftq31=dsp.arm_rfft_instance_q31() +status=dsp.arm_rfft_init_q31(rfftq31,nb,0,1) +print(status) +resultI = dsp.arm_rfft_q31(rfftq31,signalRQ31) +resultI=Q31toF32(resultI)*(1 << 7) +print(result) + +nb = 128 +signal = np.cos(2 * np.pi * np.arange(nb) / nb) +signalRQ15=toQ15(signal) + +result=np.fft.fft(signal) +print(result) +rfftq15=dsp.arm_rfft_instance_q15() +status=dsp.arm_rfft_init_q15(rfftq15,nb,0,1) +print(status) +resultI = dsp.arm_rfft_q15(rfftq15,signalRQ15) +resultI=Q15toF32(resultI)*(1 << 7) +print(result) + + +nb = 128 +nb2=64 +signal = np.cos(2 * np.pi * np.arange(nb) / nb) +result=dct(signal,4,norm='ortho') +print(result) + +cfftradix4f32=dsp.arm_cfft_radix4_instance_f32() +rfftf32=dsp.arm_rfft_instance_f32() +dct4f32=dsp.arm_dct4_instance_f32() +status=dsp.arm_dct4_init_f32(dct4f32,rfftf32,cfftradix4f32,nb,nb2,0.125) +print(status) +state=np.zeros(2*nb) +resultI = dsp.arm_dct4_f32(dct4f32,state,signal) +print(resultI) + + +signal = signal / 10.0 +result=dct(signal,4,norm='ortho') +signalQ31=toQ31(signal) +cfftradix4q31=dsp.arm_cfft_radix4_instance_q31() +rfftq31=dsp.arm_rfft_instance_q31() +dct4q31=dsp.arm_dct4_instance_q31() +status=dsp.arm_dct4_init_q31(dct4q31,rfftq31,cfftradix4q31,nb,nb2,0x10000000) +print(status) +state=np.zeros(2*nb) +resultI = dsp.arm_dct4_q31(dct4q31,state,signalQ31) +resultI=Q31toF32(resultI)*(1 << 7) + +nb = 128 +nb2=64 +signal = np.cos(2 * np.pi * np.arange(nb) / nb) +signal = signal / 10.0 +result=dct(signal,4,norm='ortho') +signalQ15=toQ15(signal) +cfftradix4q15=dsp.arm_cfft_radix4_instance_q15() +rfftq15=dsp.arm_rfft_instance_q15() +dct4q15=dsp.arm_dct4_instance_q15() +status=dsp.arm_dct4_init_q15(dct4q15,rfftq15,cfftradix4q15,nb,nb2,0x1000) +print(status) +state=np.zeros(2*nb) +resultI = dsp.arm_dct4_q15(dct4q15,state,signalQ15) +resultI=Q15toF32(resultI)*(1 << 7) + + +from pylab import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show +figure(1) +plot(np.absolute(signal)) +t = np.arange(nb) +freq = np.fft.fftfreq(t.shape[-1]) +resultmag=np.absolute(result) +figure(2) +plot(resultmag) +figure(3) +cmsigmag=np.absolute(resultI) +plot(cmsigmag) +show() + +biquadf32 = dsp.arm_biquad_casd_df1_inst_f32() +numStages=1 +state=np.zeros(numStages*4) +coefs=[1.,2,3,4,5] +dsp.arm_biquad_cascade_df1_init_f32(biquadf32,1,coefs,state) +print(dsp.arm_biquad_cascade_df1_f32(biquadf32,[1,2,3,4,5])) \ No newline at end of file diff --git a/Scripts/README.md b/Scripts/README.md new file mode 100755 index 00000000..a065bf7f --- /dev/null +++ b/Scripts/README.md @@ -0,0 +1,4 @@ +README +====== + +Python scripts to generate C arrays used in implementation of some algorithms. diff --git a/Scripts/genMVETwiddleCoefs.py b/Scripts/genMVETwiddleCoefs.py new file mode 100755 index 00000000..24669455 --- /dev/null +++ b/Scripts/genMVETwiddleCoefs.py @@ -0,0 +1,266 @@ +import numpy as np +import math +import argparse + +parser = argparse.ArgumentParser(description='Generate C arrays') +parser.add_argument('-f', nargs='?',type = str, default="../Source/CommonTables/arm_mve_tables.c", help="C File path") +parser.add_argument('-he', nargs='?',type = str, default="../Include/arm_mve_tables.h", help="H File path") + +args = parser.parse_args() + +COLLIM = 80 + +condition="""#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_%d) || defined(ARM_TABLE_TWIDDLECOEF_F32_%d) +""" + +def printCUInt32Array(f,name,arr): + nb = 0 + print("uint32_t %s[%d]={" % (name,len(arr)),file=f) + + for d in arr: + val = "%d," % d + nb = nb + len(val) + if nb > COLLIM: + print("",file=f) + nb = len(val) + print(val,end="",file=f) + + print("};\n",file=f) + +def printCFloat32Array(f,name,arr): + nb = 0 + print("float32_t %s[%d]={" % (name,len(arr)),file=f) + + for d in arr: + val = "%.20ff," % d + nb = nb + len(val) + if nb > COLLIM: + print("",file=f) + nb = len(val) + print(val,end="",file=f) + + print("};\n",file=f) + +def printHUInt32Array(f,name,arr): + print("extern uint32_t %s[%d];" % (name,len(arr)),file=f) + +def printHFloat32Array(f,name,arr): + print("extern float32_t %s[%d];" % (name,len(arr)),file=f) + +def twiddle(n): + a=2.0*math.pi*np.linspace(0,n,num=n,endpoint=False)/n + c=np.cos(a) + s=np.sin(a) + + r = np.empty((c.size + s.size,), dtype=c.dtype) + r[0::2] = c + r[1::2] = s + return(r) + +def reorderTwiddle(f,h,n): + numStages = 6 + coefs= twiddle(n) + + + if n == 4096: + numStages = 6 + arraySize = 1364 + + if n == 1024: + numStages = 5 + arraySize = 340 + + if n == 256: + numStages = 4 + arraySize = 84 + + if n == 64: + numStages = 3 + arraySize = 20 + + if n == 16: + numStages = 2 + arraySize = 4 + + incr = 1 + nbOfElt = n + + maxNb = 0 + + tab1 = np.zeros(2*arraySize) + tab2 = np.zeros(2*arraySize) + tab3 = np.zeros(2*arraySize) + + tab1Index=0 + tab2Index=0 + tab3Index=0 + + tab1Offset = np.zeros(numStages) + tab2Offset = np.zeros(numStages) + tab3Offset = np.zeros(numStages) + + + + for stage in range(0,numStages-1): + nbOfElt = nbOfElt >> 2 + pVectCoef1 = 0 + pVectCoef2 = 0 + pVectCoef3 = 0 + + tab1Offset[stage] = tab1Index + tab2Offset[stage] = tab2Index + tab3Offset[stage] = tab3Index + + for i in range(0,nbOfElt): + tab1[tab1Index] = coefs[pVectCoef1] + tab1[tab1Index + 1] = coefs[pVectCoef1 + 1]; + tab1Index = tab1Index + 2 + pVectCoef1 = pVectCoef1 + (incr * 1 * 2) + + tab2[tab2Index] = coefs[pVectCoef2] + tab2[tab2Index + 1] = coefs[pVectCoef2 + 1]; + tab2Index = tab2Index + 2 + pVectCoef2 = pVectCoef2 + (incr * 2 * 2) + + tab3[tab3Index] = coefs[pVectCoef3] + tab3[tab3Index + 1] = coefs[pVectCoef3 + 1]; + tab3Index = tab3Index + 2 + pVectCoef3 = pVectCoef3 + (incr * 3 * 2) + + maxNb = maxNb + 1 + + incr = 4 * incr + + print(condition % (n, n << 1),file=f) + print(condition % (n, n << 1),file=h) + printCUInt32Array(f,"rearranged_twiddle_tab_stride1_arr_%d" % n,list(tab1Offset)) + printHUInt32Array(h,"rearranged_twiddle_tab_stride1_arr_%d" % n,list(tab1Offset)) + + printCUInt32Array(f,"rearranged_twiddle_tab_stride2_arr_%d" % n,list(tab2Offset)) + printHUInt32Array(h,"rearranged_twiddle_tab_stride2_arr_%d" % n,list(tab2Offset)) + + printCUInt32Array(f,"rearranged_twiddle_tab_stride3_arr_%d" % n,list(tab3Offset)) + printHUInt32Array(h,"rearranged_twiddle_tab_stride3_arr_%d" % n,list(tab3Offset)) + + printCFloat32Array(f,"rearranged_twiddle_stride1_%d" % n,list(tab1)) + printHFloat32Array(h,"rearranged_twiddle_stride1_%d" % n,list(tab1)) + + printCFloat32Array(f,"rearranged_twiddle_stride2_%d" % n,list(tab2)) + printHFloat32Array(h,"rearranged_twiddle_stride2_%d" % n,list(tab2)) + + printCFloat32Array(f,"rearranged_twiddle_stride3_%d" % n,list(tab3)) + printHFloat32Array(h,"rearranged_twiddle_stride3_%d" % n,list(tab3)) + print("#endif\n",file=f) + print("#endif\n",file=h) + + + +#test = twiddle(16) +#printCFloat32Array("Test",list(test)) + +cheader="""/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mve_tables.c + * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc + * used for MVE implementation only + * + * $Date: 08. January 2020 + * $Revision: V1.7.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #include "arm_math.h" + + #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) + + + """ + +cfooter=""" + +#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ +""" + +hheader="""/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mve_tables.h + * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc + * used for MVE implementation only + * + * $Date: 08. January 2020 + * $Revision: V1.7.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #ifndef _ARM_MVE_TABLES_H + #define _ARM_MVE_TABLES_H + + #include "arm_math.h" + + #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) + + + """ + +hfooter=""" +#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ + +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ + +#endif /*_ARM_MVE_TABLES_H*/ +""" + +with open(args.f,'w') as f: + with open(args.he,'w') as h: + print(cheader,file=f) + print(hheader,file=h) + + reorderTwiddle(f,h,16) + reorderTwiddle(f,h,64) + reorderTwiddle(f,h,256) + reorderTwiddle(f,h,1024) + reorderTwiddle(f,h,4096) + + print(cfooter,file=f) + print(hfooter,file=h) diff --git a/Source/CommonTables/CMakeLists.txt b/Source/CommonTables/CMakeLists.txt index 30bb5fe9..e7dd65f5 100644 --- a/Source/CommonTables/CMakeLists.txt +++ b/Source/CommonTables/CMakeLists.txt @@ -34,4 +34,8 @@ if (NEON OR NEONEXPERIMENTAL) target_sources(CMSISDSPCommon PRIVATE "${DSP}/ComputeLibrary/Source/arm_cl_tables.c") endif() +if (HELIUM OR MVEF) + target_sources(CMSISDSPCommon PRIVATE "${DSP}/Source/CommonTables/arm_mve_tables.c") +endif() + diff --git a/Source/CommonTables/CommonTables.c b/Source/CommonTables/CommonTables.c index acda9f88..4f80edec 100644 --- a/Source/CommonTables/CommonTables.c +++ b/Source/CommonTables/CommonTables.c @@ -28,4 +28,4 @@ #include "arm_common_tables.c" #include "arm_const_structs.c" - +#include "arm_mve_tables.c" diff --git a/Source/CommonTables/arm_const_structs.c b/Source/CommonTables/arm_const_structs.c index 75a57dce..aab3d967 100644 --- a/Source/CommonTables/arm_const_structs.c +++ b/Source/CommonTables/arm_const_structs.c @@ -29,6 +29,10 @@ #include "arm_const_structs.h" +/* +ALLOW TABLE is true when config table is enabled and the Tramsform folder is included +for compilation. +*/ #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) /* Floating-point structs */ @@ -87,12 +91,25 @@ const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096 = { #endif /* Floating-point structs */ +#if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) + +/* + +Those structures cannot be used to initialize the MVE version of the FFT F32 instances. +So they are not compiled when MVE is defined. + +For the MVE version, the new arm_cfft_init_f32 must be used. + + +*/ + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) const arm_cfft_instance_f32 arm_cfft_sR_f32_len16 = { 16, twiddleCoef_16, armBitRevIndexTable16, ARMBITREVINDEXTABLE_16_TABLE_LENGTH }; #endif + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) const arm_cfft_instance_f32 arm_cfft_sR_f32_len32 = { 32, twiddleCoef_32, armBitRevIndexTable32, ARMBITREVINDEXTABLE_32_TABLE_LENGTH @@ -141,6 +158,8 @@ const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096 = { }; #endif +#endif /* !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) */ + /* Fixed-point structs */ #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_Q31_16) && defined(ARM_TABLE_BITREVIDX_FXT_16)) @@ -320,6 +339,8 @@ const arm_rfft_fast_instance_f64 arm_rfft_fast_sR_f64_len4096 = { /* Floating-point structs */ +#if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32) && defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32)) const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len32 = { { 16, twiddleCoef_32, armBitRevIndexTable32, ARMBITREVINDEXTABLE_16_TABLE_LENGTH }, @@ -384,6 +405,8 @@ const arm_rfft_fast_instance_f32 arm_rfft_fast_sR_f32_len4096 = { }; #endif +#endif /* #if !defined(ARM_MATH_MVEF) || defined(ARM_MATH_AUTOVECTORIZE) */ + /* Fixed-point structs */ /* q31_t */ diff --git a/Source/CommonTables/arm_mve_tables.c b/Source/CommonTables/arm_mve_tables.c new file mode 100755 index 00000000..9e581ea5 --- /dev/null +++ b/Source/CommonTables/arm_mve_tables.c @@ -0,0 +1,3767 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mve_tables.c + * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc + * used for MVE implementation only + * + * $Date: 08. January 2020 + * $Revision: V1.7.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #include "arm_math.h" + + #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) + + + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) + +uint32_t rearranged_twiddle_tab_stride1_arr_16[2]={ +0,0,}; + +uint32_t rearranged_twiddle_tab_stride2_arr_16[2]={ +0,0,}; + +uint32_t rearranged_twiddle_tab_stride3_arr_16[2]={ +0,0,}; + +float32_t rearranged_twiddle_stride1_16[8]={ +1.00000000000000000000f,0.00000000000000000000f,0.92387953251128673848f, +0.38268343236508978178f,0.70710678118654757274f,0.70710678118654757274f, +0.38268343236508983729f,0.92387953251128673848f,}; + +float32_t rearranged_twiddle_stride2_16[8]={ +1.00000000000000000000f,0.00000000000000000000f,0.70710678118654757274f, +0.70710678118654757274f,0.00000000000000006123f,1.00000000000000000000f, +-0.70710678118654746172f,0.70710678118654757274f,}; + +float32_t rearranged_twiddle_stride3_16[8]={ +1.00000000000000000000f,0.00000000000000000000f,0.38268343236508983729f, +0.92387953251128673848f,-0.70710678118654746172f,0.70710678118654757274f, +-0.92387953251128684951f,-0.38268343236508967076f,}; + +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) + +uint32_t rearranged_twiddle_tab_stride1_arr_64[3]={ +0,32,0,}; + +uint32_t rearranged_twiddle_tab_stride2_arr_64[3]={ +0,32,0,}; + +uint32_t rearranged_twiddle_tab_stride3_arr_64[3]={ +0,32,0,}; + +float32_t rearranged_twiddle_stride1_64[40]={ +1.00000000000000000000f,0.00000000000000000000f,0.99518472667219692873f, +0.09801714032956060363f,0.98078528040323043058f,0.19509032201612824808f, +0.95694033573220882438f,0.29028467725446233105f,0.92387953251128673848f, +0.38268343236508978178f,0.88192126434835504956f,0.47139673682599764204f, +0.83146961230254523567f,0.55557023301960217765f,0.77301045336273699338f, +0.63439328416364548779f,0.70710678118654757274f,0.70710678118654757274f, +0.63439328416364548779f,0.77301045336273688235f,0.55557023301960228867f, +0.83146961230254523567f,0.47139673682599780857f,0.88192126434835493853f, +0.38268343236508983729f,0.92387953251128673848f,0.29028467725446233105f, +0.95694033573220893540f,0.19509032201612833135f,0.98078528040323043058f, +0.09801714032956077016f,0.99518472667219681771f,1.00000000000000000000f, +0.00000000000000000000f,0.92387953251128673848f,0.38268343236508978178f, +0.70710678118654757274f,0.70710678118654757274f,0.38268343236508983729f, +0.92387953251128673848f,}; + +float32_t rearranged_twiddle_stride2_64[40]={ +1.00000000000000000000f,0.00000000000000000000f,0.98078528040323043058f, +0.19509032201612824808f,0.92387953251128673848f,0.38268343236508978178f, +0.83146961230254523567f,0.55557023301960217765f,0.70710678118654757274f, +0.70710678118654757274f,0.55557023301960228867f,0.83146961230254523567f, +0.38268343236508983729f,0.92387953251128673848f,0.19509032201612833135f, +0.98078528040323043058f,0.00000000000000006123f,1.00000000000000000000f, +-0.19509032201612819257f,0.98078528040323043058f,-0.38268343236508972627f, +0.92387953251128673848f,-0.55557023301960195560f,0.83146961230254534669f, +-0.70710678118654746172f,0.70710678118654757274f,-0.83146961230254534669f, +0.55557023301960217765f,-0.92387953251128673848f,0.38268343236508989280f, +-0.98078528040323043058f,0.19509032201612860891f,1.00000000000000000000f, +0.00000000000000000000f,0.70710678118654757274f,0.70710678118654757274f, +0.00000000000000006123f,1.00000000000000000000f,-0.70710678118654746172f, +0.70710678118654757274f,}; + +float32_t rearranged_twiddle_stride3_64[40]={ +1.00000000000000000000f,0.00000000000000000000f,0.95694033573220882438f, +0.29028467725446233105f,0.83146961230254523567f,0.55557023301960217765f, +0.63439328416364548779f,0.77301045336273688235f,0.38268343236508983729f, +0.92387953251128673848f,0.09801714032956077016f,0.99518472667219681771f, +-0.19509032201612819257f,0.98078528040323043058f,-0.47139673682599769755f, +0.88192126434835504956f,-0.70710678118654746172f,0.70710678118654757274f, +-0.88192126434835493853f,0.47139673682599780857f,-0.98078528040323043058f, +0.19509032201612860891f,-0.99518472667219692873f,-0.09801714032956058975f, +-0.92387953251128684951f,-0.38268343236508967076f,-0.77301045336273710440f, +-0.63439328416364526575f,-0.55557023301960217765f,-0.83146961230254523567f, +-0.29028467725446244208f,-0.95694033573220882438f,1.00000000000000000000f, +0.00000000000000000000f,0.38268343236508983729f,0.92387953251128673848f, +-0.70710678118654746172f,0.70710678118654757274f,-0.92387953251128684951f, +-0.38268343236508967076f,}; + +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) + +uint32_t rearranged_twiddle_tab_stride1_arr_256[4]={ +0,128,160,0,}; + +uint32_t rearranged_twiddle_tab_stride2_arr_256[4]={ +0,128,160,0,}; + +uint32_t rearranged_twiddle_tab_stride3_arr_256[4]={ +0,128,160,0,}; + +float32_t rearranged_twiddle_stride1_256[168]={ +1.00000000000000000000f,0.00000000000000000000f,0.99969881869620424997f, +0.02454122852291228812f,0.99879545620517240501f,0.04906767432741801493f, +0.99729045667869020697f,0.07356456359966742631f,0.99518472667219692873f, +0.09801714032956060363f,0.99247953459870996706f,0.12241067519921619566f, +0.98917650996478101444f,0.14673047445536174793f,0.98527764238894122162f, +0.17096188876030121717f,0.98078528040323043058f,0.19509032201612824808f, +0.97570213003852857003f,0.21910124015686979759f,0.97003125319454397424f, +0.24298017990326387094f,0.96377606579543984022f,0.26671275747489836538f, +0.95694033573220882438f,0.29028467725446233105f,0.94952818059303667475f, +0.31368174039889151761f,0.94154406518302080631f,0.33688985339222005111f, +0.93299279883473895669f,0.35989503653498811087f,0.92387953251128673848f, +0.38268343236508978178f,0.91420975570353069095f,0.40524131400498986100f, +0.90398929312344333820f,0.42755509343028208491f,0.89322430119551532446f, +0.44961132965460653965f,0.88192126434835504956f,0.47139673682599764204f, +0.87008699110871146054f,0.49289819222978403790f,0.85772861000027211809f, +0.51410274419322166128f,0.84485356524970711689f,0.53499761988709715332f, +0.83146961230254523567f,0.55557023301960217765f,0.81758481315158371139f, +0.57580819141784533866f,0.80320753148064494287f,0.59569930449243335691f, +0.78834642762660622761f,0.61523159058062681925f,0.77301045336273699338f, +0.63439328416364548779f,0.75720884650648456748f,0.65317284295377675551f, +0.74095112535495921691f,0.67155895484701833009f,0.72424708295146700276f, +0.68954054473706682948f,0.70710678118654757274f,0.70710678118654757274f, +0.68954054473706694051f,0.72424708295146689174f,0.67155895484701833009f, +0.74095112535495910588f,0.65317284295377686654f,0.75720884650648456748f, +0.63439328416364548779f,0.77301045336273688235f,0.61523159058062681925f, +0.78834642762660622761f,0.59569930449243346793f,0.80320753148064483184f, +0.57580819141784533866f,0.81758481315158371139f,0.55557023301960228867f, +0.83146961230254523567f,0.53499761988709726435f,0.84485356524970700587f, +0.51410274419322166128f,0.85772861000027211809f,0.49289819222978409341f, +0.87008699110871134952f,0.47139673682599780857f,0.88192126434835493853f, +0.44961132965460659516f,0.89322430119551532446f,0.42755509343028219593f, +0.90398929312344333820f,0.40524131400498986100f,0.91420975570353069095f, +0.38268343236508983729f,0.92387953251128673848f,0.35989503653498827740f, +0.93299279883473884567f,0.33688985339222005111f,0.94154406518302080631f, +0.31368174039889157312f,0.94952818059303667475f,0.29028467725446233105f, +0.95694033573220893540f,0.26671275747489842090f,0.96377606579543984022f, +0.24298017990326398197f,0.97003125319454397424f,0.21910124015686976984f, +0.97570213003852857003f,0.19509032201612833135f,0.98078528040323043058f, +0.17096188876030135595f,0.98527764238894122162f,0.14673047445536174793f, +0.98917650996478101444f,0.12241067519921627893f,0.99247953459870996706f, +0.09801714032956077016f,0.99518472667219681771f,0.07356456359966745406f, +0.99729045667869020697f,0.04906767432741812596f,0.99879545620517240501f, +0.02454122852291226384f,0.99969881869620424997f,1.00000000000000000000f, +0.00000000000000000000f,0.99518472667219692873f,0.09801714032956060363f, +0.98078528040323043058f,0.19509032201612824808f,0.95694033573220882438f, +0.29028467725446233105f,0.92387953251128673848f,0.38268343236508978178f, +0.88192126434835504956f,0.47139673682599764204f,0.83146961230254523567f, +0.55557023301960217765f,0.77301045336273699338f,0.63439328416364548779f, +0.70710678118654757274f,0.70710678118654757274f,0.63439328416364548779f, +0.77301045336273688235f,0.55557023301960228867f,0.83146961230254523567f, +0.47139673682599780857f,0.88192126434835493853f,0.38268343236508983729f, +0.92387953251128673848f,0.29028467725446233105f,0.95694033573220893540f, +0.19509032201612833135f,0.98078528040323043058f,0.09801714032956077016f, +0.99518472667219681771f,1.00000000000000000000f,0.00000000000000000000f, +0.92387953251128673848f,0.38268343236508978178f,0.70710678118654757274f, +0.70710678118654757274f,0.38268343236508983729f,0.92387953251128673848f,}; + +float32_t rearranged_twiddle_stride2_256[168]={ +1.00000000000000000000f,0.00000000000000000000f,0.99879545620517240501f, +0.04906767432741801493f,0.99518472667219692873f,0.09801714032956060363f, +0.98917650996478101444f,0.14673047445536174793f,0.98078528040323043058f, +0.19509032201612824808f,0.97003125319454397424f,0.24298017990326387094f, +0.95694033573220882438f,0.29028467725446233105f,0.94154406518302080631f, +0.33688985339222005111f,0.92387953251128673848f,0.38268343236508978178f, +0.90398929312344333820f,0.42755509343028208491f,0.88192126434835504956f, +0.47139673682599764204f,0.85772861000027211809f,0.51410274419322166128f, +0.83146961230254523567f,0.55557023301960217765f,0.80320753148064494287f, +0.59569930449243335691f,0.77301045336273699338f,0.63439328416364548779f, +0.74095112535495921691f,0.67155895484701833009f,0.70710678118654757274f, +0.70710678118654757274f,0.67155895484701833009f,0.74095112535495910588f, +0.63439328416364548779f,0.77301045336273688235f,0.59569930449243346793f, +0.80320753148064483184f,0.55557023301960228867f,0.83146961230254523567f, +0.51410274419322166128f,0.85772861000027211809f,0.47139673682599780857f, +0.88192126434835493853f,0.42755509343028219593f,0.90398929312344333820f, +0.38268343236508983729f,0.92387953251128673848f,0.33688985339222005111f, +0.94154406518302080631f,0.29028467725446233105f,0.95694033573220893540f, +0.24298017990326398197f,0.97003125319454397424f,0.19509032201612833135f, +0.98078528040323043058f,0.14673047445536174793f,0.98917650996478101444f, +0.09801714032956077016f,0.99518472667219681771f,0.04906767432741812596f, +0.99879545620517240501f,0.00000000000000006123f,1.00000000000000000000f, +-0.04906767432741800800f,0.99879545620517240501f,-0.09801714032956064526f, +0.99518472667219692873f,-0.14673047445536163691f,0.98917650996478101444f, +-0.19509032201612819257f,0.98078528040323043058f,-0.24298017990326387094f, +0.97003125319454397424f,-0.29028467725446216452f,0.95694033573220893540f, +-0.33688985339221994009f,0.94154406518302080631f,-0.38268343236508972627f, +0.92387953251128673848f,-0.42755509343028186287f,0.90398929312344344922f, +-0.47139673682599769755f,0.88192126434835504956f,-0.51410274419322155026f, +0.85772861000027211809f,-0.55557023301960195560f,0.83146961230254534669f, +-0.59569930449243335691f,0.80320753148064494287f,-0.63439328416364537677f, +0.77301045336273710440f,-0.67155895484701844111f,0.74095112535495899486f, +-0.70710678118654746172f,0.70710678118654757274f,-0.74095112535495888384f, +0.67155895484701855214f,-0.77301045336273699338f,0.63439328416364548779f, +-0.80320753148064483184f,0.59569930449243346793f,-0.83146961230254534669f, +0.55557023301960217765f,-0.85772861000027200706f,0.51410274419322177231f, +-0.88192126434835493853f,0.47139673682599780857f,-0.90398929312344333820f, +0.42755509343028202940f,-0.92387953251128673848f,0.38268343236508989280f, +-0.94154406518302069529f,0.33688985339222032867f,-0.95694033573220882438f, +0.29028467725446238656f,-0.97003125319454397424f,0.24298017990326406523f, +-0.98078528040323043058f,0.19509032201612860891f,-0.98917650996478101444f, +0.14673047445536180344f,-0.99518472667219681771f,0.09801714032956082567f, +-0.99879545620517240501f,0.04906767432741796636f,1.00000000000000000000f, +0.00000000000000000000f,0.98078528040323043058f,0.19509032201612824808f, +0.92387953251128673848f,0.38268343236508978178f,0.83146961230254523567f, +0.55557023301960217765f,0.70710678118654757274f,0.70710678118654757274f, +0.55557023301960228867f,0.83146961230254523567f,0.38268343236508983729f, +0.92387953251128673848f,0.19509032201612833135f,0.98078528040323043058f, +0.00000000000000006123f,1.00000000000000000000f,-0.19509032201612819257f, +0.98078528040323043058f,-0.38268343236508972627f,0.92387953251128673848f, +-0.55557023301960195560f,0.83146961230254534669f,-0.70710678118654746172f, +0.70710678118654757274f,-0.83146961230254534669f,0.55557023301960217765f, +-0.92387953251128673848f,0.38268343236508989280f,-0.98078528040323043058f, +0.19509032201612860891f,1.00000000000000000000f,0.00000000000000000000f, +0.70710678118654757274f,0.70710678118654757274f,0.00000000000000006123f, +1.00000000000000000000f,-0.70710678118654746172f,0.70710678118654757274f,}; + +float32_t rearranged_twiddle_stride3_256[168]={ +1.00000000000000000000f,0.00000000000000000000f,0.99729045667869020697f, +0.07356456359966742631f,0.98917650996478101444f,0.14673047445536174793f, +0.97570213003852857003f,0.21910124015686979759f,0.95694033573220882438f, +0.29028467725446233105f,0.93299279883473895669f,0.35989503653498811087f, +0.90398929312344333820f,0.42755509343028208491f,0.87008699110871146054f, +0.49289819222978403790f,0.83146961230254523567f,0.55557023301960217765f, +0.78834642762660622761f,0.61523159058062681925f,0.74095112535495921691f, +0.67155895484701833009f,0.68954054473706694051f,0.72424708295146689174f, +0.63439328416364548779f,0.77301045336273688235f,0.57580819141784533866f, +0.81758481315158371139f,0.51410274419322166128f,0.85772861000027211809f, +0.44961132965460659516f,0.89322430119551532446f,0.38268343236508983729f, +0.92387953251128673848f,0.31368174039889157312f,0.94952818059303667475f, +0.24298017990326398197f,0.97003125319454397424f,0.17096188876030135595f, +0.98527764238894122162f,0.09801714032956077016f,0.99518472667219681771f, +0.02454122852291226384f,0.99969881869620424997f,-0.04906767432741800800f, +0.99879545620517240501f,-0.12241067519921615403f,0.99247953459870996706f, +-0.19509032201612819257f,0.98078528040323043058f,-0.26671275747489830987f, +0.96377606579543984022f,-0.33688985339221994009f,0.94154406518302080631f, +-0.40524131400498974998f,0.91420975570353069095f,-0.47139673682599769755f, +0.88192126434835504956f,-0.53499761988709704230f,0.84485356524970722791f, +-0.59569930449243335691f,0.80320753148064494287f,-0.65317284295377653347f, +0.75720884650648467851f,-0.70710678118654746172f,0.70710678118654757274f, +-0.75720884650648467851f,0.65317284295377664449f,-0.80320753148064483184f, +0.59569930449243346793f,-0.84485356524970711689f,0.53499761988709715332f, +-0.88192126434835493853f,0.47139673682599780857f,-0.91420975570353069095f, +0.40524131400498991651f,-0.94154406518302069529f,0.33688985339222032867f, +-0.96377606579543984022f,0.26671275747489847641f,-0.98078528040323043058f, +0.19509032201612860891f,-0.99247953459870996706f,0.12241067519921634832f, +-0.99879545620517240501f,0.04906767432741796636f,-0.99969881869620424997f, +-0.02454122852291207996f,-0.99518472667219692873f,-0.09801714032956058975f, +-0.98527764238894133264f,-0.17096188876030096737f,-0.97003125319454397424f, +-0.24298017990326381543f,-0.94952818059303678577f,-0.31368174039889118454f, +-0.92387953251128684951f,-0.38268343236508967076f,-0.89322430119551532446f, +-0.44961132965460665067f,-0.85772861000027211809f,-0.51410274419322155026f, +-0.81758481315158371139f,-0.57580819141784533866f,-0.77301045336273710440f, +-0.63439328416364526575f,-0.72424708295146700276f,-0.68954054473706682948f, +-0.67155895484701866316f,-0.74095112535495888384f,-0.61523159058062726334f, +-0.78834642762660589455f,-0.55557023301960217765f,-0.83146961230254523567f, +-0.49289819222978420443f,-0.87008699110871134952f,-0.42755509343028247349f, +-0.90398929312344311615f,-0.35989503653498794433f,-0.93299279883473895669f, +-0.29028467725446244208f,-0.95694033573220882438f,-0.21910124015687010290f, +-0.97570213003852845901f,-0.14673047445536230304f,-0.98917650996478090342f, +-0.07356456359966735692f,-0.99729045667869020697f,1.00000000000000000000f, +0.00000000000000000000f,0.95694033573220882438f,0.29028467725446233105f, +0.83146961230254523567f,0.55557023301960217765f,0.63439328416364548779f, +0.77301045336273688235f,0.38268343236508983729f,0.92387953251128673848f, +0.09801714032956077016f,0.99518472667219681771f,-0.19509032201612819257f, +0.98078528040323043058f,-0.47139673682599769755f,0.88192126434835504956f, +-0.70710678118654746172f,0.70710678118654757274f,-0.88192126434835493853f, +0.47139673682599780857f,-0.98078528040323043058f,0.19509032201612860891f, +-0.99518472667219692873f,-0.09801714032956058975f,-0.92387953251128684951f, +-0.38268343236508967076f,-0.77301045336273710440f,-0.63439328416364526575f, +-0.55557023301960217765f,-0.83146961230254523567f,-0.29028467725446244208f, +-0.95694033573220882438f,1.00000000000000000000f,0.00000000000000000000f, +0.38268343236508983729f,0.92387953251128673848f,-0.70710678118654746172f, +0.70710678118654757274f,-0.92387953251128684951f,-0.38268343236508967076f,}; + +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) + +uint32_t rearranged_twiddle_tab_stride1_arr_1024[5]={ +0,512,640,672,0,}; + +uint32_t rearranged_twiddle_tab_stride2_arr_1024[5]={ +0,512,640,672,0,}; + +uint32_t rearranged_twiddle_tab_stride3_arr_1024[5]={ +0,512,640,672,0,}; + +float32_t rearranged_twiddle_stride1_1024[680]={ +1.00000000000000000000f,0.00000000000000000000f,0.99998117528260110909f, +0.00613588464915447527f,0.99992470183914450299f,0.01227153828571992539f, +0.99983058179582340319f,0.01840672990580482019f,0.99969881869620424997f, +0.02454122852291228812f,0.99952941750109314256f,0.03067480317663662595f, +0.99932238458834954375f,0.03680722294135883171f,0.99907772775264536147f, +0.04293825693494082024f,0.99879545620517240501f,0.04906767432741801493f, +0.99847558057329477421f,0.05519524434968993420f,0.99811811290014917919f, +0.06132073630220857829f,0.99772306664419163624f,0.06744391956366405094f, +0.99729045667869020697f,0.07356456359966742631f,0.99682029929116566791f, +0.07968243797143012563f,0.99631261218277800129f,0.08579731234443989385f, +0.99576741446765981713f,0.09190895649713272386f,0.99518472667219692873f, +0.09801714032956060363f,0.99456457073425541537f,0.10412163387205458642f, +0.99390697000235606051f,0.11022220729388305938f,0.99321194923479450001f, +0.11631863091190475235f,0.99247953459870996706f,0.12241067519921619566f, +0.99170975366909952520f,0.12849811079379316880f,0.99090263542778000971f, +0.13458070850712616773f,0.99005821026229712256f,0.14065823933284921088f, +0.98917650996478101444f,0.14673047445536174793f,0.98825756773074946437f, +0.15279718525844343535f,0.98730141815785843473f,0.15885814333386144570f, +0.98630809724459866938f,0.16491312048996989437f,0.98527764238894122162f, +0.17096188876030121717f,0.98421009238692902521f,0.17700422041214874946f, +0.98310548743121628501f,0.18303988795514095078f,0.98196386910955524296f, +0.18906866414980619262f,0.98078528040323043058f,0.19509032201612824808f, +0.97956976568544051887f,0.20110463484209190055f,0.97831737071962765473f, +0.20711137619221856032f,0.97702814265775439484f,0.21311031991609136194f, +0.97570213003852857003f,0.21910124015686979759f,0.97433938278557585821f, +0.22508391135979283204f,0.97293995220556017678f,0.23105810828067110951f, +0.97150389098625178352f,0.23702360599436719801f,0.97003125319454397424f, +0.24298017990326387094f,0.96852209427441737777f,0.24892760574572014853f, +0.96697647104485207059f,0.25486565960451457169f,0.96539444169768939830f, +0.26079411791527551401f,0.96377606579543984022f,0.26671275747489836538f, +0.96212140426904158019f,0.27262135544994897662f,0.96043051941556578655f, +0.27851968938505305973f,0.95870347489587159906f,0.28440753721127187692f, +0.95694033573220882438f,0.29028467725446233105f,0.95514116830577078243f, +0.29615088824362378883f,0.95330604035419386211f,0.30200594931922808417f, +0.95143502096900833820f,0.30784964004153486661f,0.94952818059303667475f, +0.31368174039889151761f,0.94758559101774109124f,0.31950203081601569188f, +0.94560732538052127971f,0.32531029216226292622f,0.94359345816196038559f, +0.33110630575987642921f,0.94154406518302080631f,0.33688985339222005111f, +0.93945922360218991898f,0.34266071731199437833f,0.93733901191257495977f, +0.34841868024943456472f,0.93518350993894761025f,0.35416352542049034380f, +0.93299279883473895669f,0.35989503653498811087f,0.93076696107898371224f, +0.36561299780477385379f,0.92850608047321558924f,0.37131719395183754306f, +0.92621024213831137928f,0.37700741021641825945f,0.92387953251128673848f, +0.38268343236508978178f,0.92151403934204190183f,0.38834504669882624617f, +0.91911385169005777040f,0.39399204006104809883f,0.91667905992104270485f, +0.39962419984564678810f,0.91420975570353069095f,0.40524131400498986100f, +0.91170603200542987832f,0.41084317105790391089f,0.90916798309052238025f, +0.41642956009763715253f,0.90659570451491533483f,0.42200027079979968159f, +0.90398929312344333820f,0.42755509343028208491f,0.90134884704602202810f, +0.43309381885315195726f,0.89867446569395381673f,0.43861623853852765853f, +0.89596624975618521791f,0.44412214457042920035f,0.89322430119551532446f, +0.44961132965460653965f,0.89044872324475787817f,0.45508358712634383592f, +0.88763962040285393496f,0.46053871095824000514f,0.88479709843093778954f, +0.46597649576796618121f,0.88192126434835504956f,0.47139673682599764204f, +0.87901222642863352519f,0.47679923006332208812f,0.87607009419540660122f, +0.48218377207912271887f,0.87309497841829009079f,0.48755016014843599592f, +0.87008699110871146054f,0.49289819222978403790f,0.86704624551569264845f, +0.49822766697278181303f,0.86397285612158669643f,0.50353838372571757542f, +0.86086693863776730939f,0.50883014254310698909f,0.85772861000027211809f, +0.51410274419322166128f,0.85455798836540053376f,0.51935599016558964269f, +0.85135519310526519554f,0.52458968267846894928f,0.84812034480329723252f, +0.52980362468629460526f,0.84485356524970711689f,0.53499761988709715332f, +0.84155497743689844370f,0.54017147272989285423f,0.83822470555483807875f, +0.54532498842204646383f,0.83486287498638001026f,0.55045797293660481131f, +0.83146961230254523567f,0.55557023301960217765f,0.82804504525775579626f, +0.56066157619733603124f,0.82458930278502529099f,0.56573181078361312046f, +0.82110251499110464835f,0.57078074588696725566f,0.81758481315158371139f, +0.57580819141784533866f,0.81403632970594841378f,0.58081395809576452649f, +0.81045719825259476821f,0.58579785745643886408f,0.80684755354379933401f, +0.59075970185887416442f,0.80320753148064494287f,0.59569930449243335691f, +0.79953726910790501314f,0.60061647938386897305f,0.79583690460888356633f, +0.60551104140432554512f,0.79210657730021238887f,0.61038280627630947528f, +0.78834642762660622761f,0.61523159058062681925f,0.78455659715557524159f, +0.62005721176328909561f,0.78073722857209448822f,0.62485948814238634341f, +0.77688846567323244230f,0.62963823891492698426f,0.77301045336273699338f, +0.63439328416364548779f,0.76910333764557969882f,0.63912444486377573138f, +0.76516726562245895860f,0.64383154288979138613f,0.76120238548426177871f, +0.64851440102211244110f,0.75720884650648456748f,0.65317284295377675551f, +0.75318679904361252042f,0.65780669329707863735f,0.74913639452345937020f, +0.66241577759017178373f,0.74505778544146594733f,0.66699992230363747137f, +0.74095112535495921691f,0.67155895484701833009f,0.73681656887736979300f, +0.67609270357531592310f,0.73265427167241281570f,0.68060099779545302212f, +0.72846439044822519637f,0.68508366777270035541f,0.72424708295146700276f, +0.68954054473706682948f,0.72000250796138165477f,0.69397146088965389055f, +0.71573082528381870571f,0.69837624940897280457f,0.71143219574521643356f, +0.70275474445722529993f,0.70710678118654757274f,0.70710678118654757274f, +0.70275474445722529993f,0.71143219574521643356f,0.69837624940897291559f, +0.71573082528381859468f,0.69397146088965400157f,0.72000250796138165477f, +0.68954054473706694051f,0.72424708295146689174f,0.68508366777270035541f, +0.72846439044822519637f,0.68060099779545302212f,0.73265427167241281570f, +0.67609270357531603413f,0.73681656887736979300f,0.67155895484701833009f, +0.74095112535495910588f,0.66699992230363747137f,0.74505778544146594733f, +0.66241577759017178373f,0.74913639452345925918f,0.65780669329707874837f, +0.75318679904361252042f,0.65317284295377686654f,0.75720884650648456748f, +0.64851440102211255212f,0.76120238548426177871f,0.64383154288979149715f, +0.76516726562245895860f,0.63912444486377573138f,0.76910333764557958780f, +0.63439328416364548779f,0.77301045336273688235f,0.62963823891492709528f, +0.77688846567323244230f,0.62485948814238645443f,0.78073722857209448822f, +0.62005721176328920663f,0.78455659715557524159f,0.61523159058062681925f, +0.78834642762660622761f,0.61038280627630947528f,0.79210657730021227785f, +0.60551104140432554512f,0.79583690460888345530f,0.60061647938386897305f, +0.79953726910790501314f,0.59569930449243346793f,0.80320753148064483184f, +0.59075970185887427544f,0.80684755354379922299f,0.58579785745643886408f, +0.81045719825259476821f,0.58081395809576452649f,0.81403632970594830276f, +0.57580819141784533866f,0.81758481315158371139f,0.57078074588696736669f, +0.82110251499110464835f,0.56573181078361323149f,0.82458930278502529099f, +0.56066157619733603124f,0.82804504525775579626f,0.55557023301960228867f, +0.83146961230254523567f,0.55045797293660481131f,0.83486287498638001026f, +0.54532498842204646383f,0.83822470555483796772f,0.54017147272989296525f, +0.84155497743689833268f,0.53499761988709726435f,0.84485356524970700587f, +0.52980362468629482731f,0.84812034480329712149f,0.52458968267846883826f, +0.85135519310526519554f,0.51935599016558953167f,0.85455798836540053376f, +0.51410274419322166128f,0.85772861000027211809f,0.50883014254310698909f, +0.86086693863776730939f,0.50353838372571757542f,0.86397285612158669643f, +0.49822766697278186854f,0.86704624551569264845f,0.49289819222978409341f, +0.87008699110871134952f,0.48755016014843605143f,0.87309497841829009079f, +0.48218377207912282989f,0.87607009419540660122f,0.47679923006332225466f, +0.87901222642863341417f,0.47139673682599780857f,0.88192126434835493853f, +0.46597649576796612569f,0.88479709843093778954f,0.46053871095824000514f, +0.88763962040285393496f,0.45508358712634383592f,0.89044872324475787817f, +0.44961132965460659516f,0.89322430119551532446f,0.44412214457042925586f, +0.89596624975618510689f,0.43861623853852771404f,0.89867446569395381673f, +0.43309381885315201277f,0.90134884704602202810f,0.42755509343028219593f, +0.90398929312344333820f,0.42200027079979979261f,0.90659570451491533483f, +0.41642956009763731906f,0.90916798309052226923f,0.41084317105790391089f, +0.91170603200542987832f,0.40524131400498986100f,0.91420975570353069095f, +0.39962419984564678810f,0.91667905992104270485f,0.39399204006104809883f, +0.91911385169005777040f,0.38834504669882630168f,0.92151403934204190183f, +0.38268343236508983729f,0.92387953251128673848f,0.37700741021641831496f, +0.92621024213831126826f,0.37131719395183759858f,0.92850608047321558924f, +0.36561299780477396482f,0.93076696107898371224f,0.35989503653498827740f, +0.93299279883473884567f,0.35416352542049051033f,0.93518350993894749923f, +0.34841868024943450921f,0.93733901191257495977f,0.34266071731199437833f, +0.93945922360218991898f,0.33688985339222005111f,0.94154406518302080631f, +0.33110630575987642921f,0.94359345816196038559f,0.32531029216226298173f, +0.94560732538052127971f,0.31950203081601574739f,0.94758559101774109124f, +0.31368174039889157312f,0.94952818059303667475f,0.30784964004153497763f, +0.95143502096900833820f,0.30200594931922819519f,0.95330604035419375109f, +0.29615088824362395536f,0.95514116830577067141f,0.29028467725446233105f, +0.95694033573220893540f,0.28440753721127182141f,0.95870347489587159906f, +0.27851968938505305973f,0.96043051941556578655f,0.27262135544994897662f, +0.96212140426904158019f,0.26671275747489842090f,0.96377606579543984022f, +0.26079411791527556952f,0.96539444169768939830f,0.25486565960451462720f, +0.96697647104485207059f,0.24892760574572025956f,0.96852209427441726675f, +0.24298017990326398197f,0.97003125319454397424f,0.23702360599436733679f, +0.97150389098625178352f,0.23105810828067127605f,0.97293995220556006576f, +0.22508391135979277653f,0.97433938278557585821f,0.21910124015686976984f, +0.97570213003852857003f,0.21311031991609136194f,0.97702814265775439484f, +0.20711137619221856032f,0.97831737071962765473f,0.20110463484209195606f, +0.97956976568544051887f,0.19509032201612833135f,0.98078528040323043058f, +0.18906866414980627589f,0.98196386910955524296f,0.18303988795514106180f, +0.98310548743121628501f,0.17700422041214886049f,0.98421009238692902521f, +0.17096188876030135595f,0.98527764238894122162f,0.16491312048997008866f, +0.98630809724459866938f,0.15885814333386139019f,0.98730141815785843473f, +0.15279718525844340760f,0.98825756773074946437f,0.14673047445536174793f, +0.98917650996478101444f,0.14065823933284923863f,0.99005821026229712256f, +0.13458070850712622324f,0.99090263542778000971f,0.12849811079379322432f, +0.99170975366909952520f,0.12241067519921627893f,0.99247953459870996706f, +0.11631863091190487725f,0.99321194923479450001f,0.11022220729388318428f, +0.99390697000235606051f,0.10412163387205472520f,0.99456457073425541537f, +0.09801714032956077016f,0.99518472667219681771f,0.09190895649713269611f, +0.99576741446765981713f,0.08579731234443987997f,0.99631261218277800129f, +0.07968243797143012563f,0.99682029929116566791f,0.07356456359966745406f, +0.99729045667869020697f,0.06744391956366410645f,0.99772306664419163624f, +0.06132073630220864768f,0.99811811290014917919f,0.05519524434969003135f, +0.99847558057329477421f,0.04906767432741812596f,0.99879545620517240501f, +0.04293825693494095902f,0.99907772775264536147f,0.03680722294135899131f, +0.99932238458834954375f,0.03067480317663658085f,0.99952941750109314256f, +0.02454122852291226384f,0.99969881869620424997f,0.01840672990580482019f, +0.99983058179582340319f,0.01227153828571994447f,0.99992470183914450299f, +0.00613588464915451517f,0.99998117528260110909f,1.00000000000000000000f, +0.00000000000000000000f,0.99969881869620424997f,0.02454122852291228812f, +0.99879545620517240501f,0.04906767432741801493f,0.99729045667869020697f, +0.07356456359966742631f,0.99518472667219692873f,0.09801714032956060363f, +0.99247953459870996706f,0.12241067519921619566f,0.98917650996478101444f, +0.14673047445536174793f,0.98527764238894122162f,0.17096188876030121717f, +0.98078528040323043058f,0.19509032201612824808f,0.97570213003852857003f, +0.21910124015686979759f,0.97003125319454397424f,0.24298017990326387094f, +0.96377606579543984022f,0.26671275747489836538f,0.95694033573220882438f, +0.29028467725446233105f,0.94952818059303667475f,0.31368174039889151761f, +0.94154406518302080631f,0.33688985339222005111f,0.93299279883473895669f, +0.35989503653498811087f,0.92387953251128673848f,0.38268343236508978178f, +0.91420975570353069095f,0.40524131400498986100f,0.90398929312344333820f, +0.42755509343028208491f,0.89322430119551532446f,0.44961132965460653965f, +0.88192126434835504956f,0.47139673682599764204f,0.87008699110871146054f, +0.49289819222978403790f,0.85772861000027211809f,0.51410274419322166128f, +0.84485356524970711689f,0.53499761988709715332f,0.83146961230254523567f, +0.55557023301960217765f,0.81758481315158371139f,0.57580819141784533866f, +0.80320753148064494287f,0.59569930449243335691f,0.78834642762660622761f, +0.61523159058062681925f,0.77301045336273699338f,0.63439328416364548779f, +0.75720884650648456748f,0.65317284295377675551f,0.74095112535495921691f, +0.67155895484701833009f,0.72424708295146700276f,0.68954054473706682948f, +0.70710678118654757274f,0.70710678118654757274f,0.68954054473706694051f, +0.72424708295146689174f,0.67155895484701833009f,0.74095112535495910588f, +0.65317284295377686654f,0.75720884650648456748f,0.63439328416364548779f, +0.77301045336273688235f,0.61523159058062681925f,0.78834642762660622761f, +0.59569930449243346793f,0.80320753148064483184f,0.57580819141784533866f, +0.81758481315158371139f,0.55557023301960228867f,0.83146961230254523567f, +0.53499761988709726435f,0.84485356524970700587f,0.51410274419322166128f, +0.85772861000027211809f,0.49289819222978409341f,0.87008699110871134952f, +0.47139673682599780857f,0.88192126434835493853f,0.44961132965460659516f, +0.89322430119551532446f,0.42755509343028219593f,0.90398929312344333820f, +0.40524131400498986100f,0.91420975570353069095f,0.38268343236508983729f, +0.92387953251128673848f,0.35989503653498827740f,0.93299279883473884567f, +0.33688985339222005111f,0.94154406518302080631f,0.31368174039889157312f, +0.94952818059303667475f,0.29028467725446233105f,0.95694033573220893540f, +0.26671275747489842090f,0.96377606579543984022f,0.24298017990326398197f, +0.97003125319454397424f,0.21910124015686976984f,0.97570213003852857003f, +0.19509032201612833135f,0.98078528040323043058f,0.17096188876030135595f, +0.98527764238894122162f,0.14673047445536174793f,0.98917650996478101444f, +0.12241067519921627893f,0.99247953459870996706f,0.09801714032956077016f, +0.99518472667219681771f,0.07356456359966745406f,0.99729045667869020697f, +0.04906767432741812596f,0.99879545620517240501f,0.02454122852291226384f, +0.99969881869620424997f,1.00000000000000000000f,0.00000000000000000000f, +0.99518472667219692873f,0.09801714032956060363f,0.98078528040323043058f, +0.19509032201612824808f,0.95694033573220882438f,0.29028467725446233105f, +0.92387953251128673848f,0.38268343236508978178f,0.88192126434835504956f, +0.47139673682599764204f,0.83146961230254523567f,0.55557023301960217765f, +0.77301045336273699338f,0.63439328416364548779f,0.70710678118654757274f, +0.70710678118654757274f,0.63439328416364548779f,0.77301045336273688235f, +0.55557023301960228867f,0.83146961230254523567f,0.47139673682599780857f, +0.88192126434835493853f,0.38268343236508983729f,0.92387953251128673848f, +0.29028467725446233105f,0.95694033573220893540f,0.19509032201612833135f, +0.98078528040323043058f,0.09801714032956077016f,0.99518472667219681771f, +1.00000000000000000000f,0.00000000000000000000f,0.92387953251128673848f, +0.38268343236508978178f,0.70710678118654757274f,0.70710678118654757274f, +0.38268343236508983729f,0.92387953251128673848f,}; + +float32_t rearranged_twiddle_stride2_1024[680]={ +1.00000000000000000000f,0.00000000000000000000f,0.99992470183914450299f, +0.01227153828571992539f,0.99969881869620424997f,0.02454122852291228812f, +0.99932238458834954375f,0.03680722294135883171f,0.99879545620517240501f, +0.04906767432741801493f,0.99811811290014917919f,0.06132073630220857829f, +0.99729045667869020697f,0.07356456359966742631f,0.99631261218277800129f, +0.08579731234443989385f,0.99518472667219692873f,0.09801714032956060363f, +0.99390697000235606051f,0.11022220729388305938f,0.99247953459870996706f, +0.12241067519921619566f,0.99090263542778000971f,0.13458070850712616773f, +0.98917650996478101444f,0.14673047445536174793f,0.98730141815785843473f, +0.15885814333386144570f,0.98527764238894122162f,0.17096188876030121717f, +0.98310548743121628501f,0.18303988795514095078f,0.98078528040323043058f, +0.19509032201612824808f,0.97831737071962765473f,0.20711137619221856032f, +0.97570213003852857003f,0.21910124015686979759f,0.97293995220556017678f, +0.23105810828067110951f,0.97003125319454397424f,0.24298017990326387094f, +0.96697647104485207059f,0.25486565960451457169f,0.96377606579543984022f, +0.26671275747489836538f,0.96043051941556578655f,0.27851968938505305973f, +0.95694033573220882438f,0.29028467725446233105f,0.95330604035419386211f, +0.30200594931922808417f,0.94952818059303667475f,0.31368174039889151761f, +0.94560732538052127971f,0.32531029216226292622f,0.94154406518302080631f, +0.33688985339222005111f,0.93733901191257495977f,0.34841868024943456472f, +0.93299279883473895669f,0.35989503653498811087f,0.92850608047321558924f, +0.37131719395183754306f,0.92387953251128673848f,0.38268343236508978178f, +0.91911385169005777040f,0.39399204006104809883f,0.91420975570353069095f, +0.40524131400498986100f,0.90916798309052238025f,0.41642956009763715253f, +0.90398929312344333820f,0.42755509343028208491f,0.89867446569395381673f, +0.43861623853852765853f,0.89322430119551532446f,0.44961132965460653965f, +0.88763962040285393496f,0.46053871095824000514f,0.88192126434835504956f, +0.47139673682599764204f,0.87607009419540660122f,0.48218377207912271887f, +0.87008699110871146054f,0.49289819222978403790f,0.86397285612158669643f, +0.50353838372571757542f,0.85772861000027211809f,0.51410274419322166128f, +0.85135519310526519554f,0.52458968267846894928f,0.84485356524970711689f, +0.53499761988709715332f,0.83822470555483807875f,0.54532498842204646383f, +0.83146961230254523567f,0.55557023301960217765f,0.82458930278502529099f, +0.56573181078361312046f,0.81758481315158371139f,0.57580819141784533866f, +0.81045719825259476821f,0.58579785745643886408f,0.80320753148064494287f, +0.59569930449243335691f,0.79583690460888356633f,0.60551104140432554512f, +0.78834642762660622761f,0.61523159058062681925f,0.78073722857209448822f, +0.62485948814238634341f,0.77301045336273699338f,0.63439328416364548779f, +0.76516726562245895860f,0.64383154288979138613f,0.75720884650648456748f, +0.65317284295377675551f,0.74913639452345937020f,0.66241577759017178373f, +0.74095112535495921691f,0.67155895484701833009f,0.73265427167241281570f, +0.68060099779545302212f,0.72424708295146700276f,0.68954054473706682948f, +0.71573082528381870571f,0.69837624940897280457f,0.70710678118654757274f, +0.70710678118654757274f,0.69837624940897291559f,0.71573082528381859468f, +0.68954054473706694051f,0.72424708295146689174f,0.68060099779545302212f, +0.73265427167241281570f,0.67155895484701833009f,0.74095112535495910588f, +0.66241577759017178373f,0.74913639452345925918f,0.65317284295377686654f, +0.75720884650648456748f,0.64383154288979149715f,0.76516726562245895860f, +0.63439328416364548779f,0.77301045336273688235f,0.62485948814238645443f, +0.78073722857209448822f,0.61523159058062681925f,0.78834642762660622761f, +0.60551104140432554512f,0.79583690460888345530f,0.59569930449243346793f, +0.80320753148064483184f,0.58579785745643886408f,0.81045719825259476821f, +0.57580819141784533866f,0.81758481315158371139f,0.56573181078361323149f, +0.82458930278502529099f,0.55557023301960228867f,0.83146961230254523567f, +0.54532498842204646383f,0.83822470555483796772f,0.53499761988709726435f, +0.84485356524970700587f,0.52458968267846883826f,0.85135519310526519554f, +0.51410274419322166128f,0.85772861000027211809f,0.50353838372571757542f, +0.86397285612158669643f,0.49289819222978409341f,0.87008699110871134952f, +0.48218377207912282989f,0.87607009419540660122f,0.47139673682599780857f, +0.88192126434835493853f,0.46053871095824000514f,0.88763962040285393496f, +0.44961132965460659516f,0.89322430119551532446f,0.43861623853852771404f, +0.89867446569395381673f,0.42755509343028219593f,0.90398929312344333820f, +0.41642956009763731906f,0.90916798309052226923f,0.40524131400498986100f, +0.91420975570353069095f,0.39399204006104809883f,0.91911385169005777040f, +0.38268343236508983729f,0.92387953251128673848f,0.37131719395183759858f, +0.92850608047321558924f,0.35989503653498827740f,0.93299279883473884567f, +0.34841868024943450921f,0.93733901191257495977f,0.33688985339222005111f, +0.94154406518302080631f,0.32531029216226298173f,0.94560732538052127971f, +0.31368174039889157312f,0.94952818059303667475f,0.30200594931922819519f, +0.95330604035419375109f,0.29028467725446233105f,0.95694033573220893540f, +0.27851968938505305973f,0.96043051941556578655f,0.26671275747489842090f, +0.96377606579543984022f,0.25486565960451462720f,0.96697647104485207059f, +0.24298017990326398197f,0.97003125319454397424f,0.23105810828067127605f, +0.97293995220556006576f,0.21910124015686976984f,0.97570213003852857003f, +0.20711137619221856032f,0.97831737071962765473f,0.19509032201612833135f, +0.98078528040323043058f,0.18303988795514106180f,0.98310548743121628501f, +0.17096188876030135595f,0.98527764238894122162f,0.15885814333386139019f, +0.98730141815785843473f,0.14673047445536174793f,0.98917650996478101444f, +0.13458070850712622324f,0.99090263542778000971f,0.12241067519921627893f, +0.99247953459870996706f,0.11022220729388318428f,0.99390697000235606051f, +0.09801714032956077016f,0.99518472667219681771f,0.08579731234443987997f, +0.99631261218277800129f,0.07356456359966745406f,0.99729045667869020697f, +0.06132073630220864768f,0.99811811290014917919f,0.04906767432741812596f, +0.99879545620517240501f,0.03680722294135899131f,0.99932238458834954375f, +0.02454122852291226384f,0.99969881869620424997f,0.01227153828571994447f, +0.99992470183914450299f,0.00000000000000006123f,1.00000000000000000000f, +-0.01227153828571982304f,0.99992470183914450299f,-0.02454122852291214241f, +0.99969881869620424997f,-0.03680722294135886641f,0.99932238458834954375f, +-0.04906767432741800800f,0.99879545620517240501f,-0.06132073630220852972f, +0.99811811290014917919f,-0.07356456359966732916f,0.99729045667869020697f, +-0.08579731234443975507f,0.99631261218277800129f,-0.09801714032956064526f, +0.99518472667219692873f,-0.11022220729388305938f,0.99390697000235606051f, +-0.12241067519921615403f,0.99247953459870996706f,-0.13458070850712611222f, +0.99090263542778000971f,-0.14673047445536163691f,0.98917650996478101444f, +-0.15885814333386127917f,0.98730141815785843473f,-0.17096188876030124493f, +0.98527764238894122162f,-0.18303988795514092303f,0.98310548743121628501f, +-0.19509032201612819257f,0.98078528040323043058f,-0.20711137619221844930f, +0.97831737071962765473f,-0.21910124015686965881f,0.97570213003852857003f, +-0.23105810828067113727f,0.97293995220556017678f,-0.24298017990326387094f, +0.97003125319454397424f,-0.25486565960451451618f,0.96697647104485207059f, +-0.26671275747489830987f,0.96377606579543984022f,-0.27851968938505294870f, +0.96043051941556589757f,-0.29028467725446216452f,0.95694033573220893540f, +-0.30200594931922808417f,0.95330604035419386211f,-0.31368174039889140658f, +0.94952818059303667475f,-0.32531029216226287071f,0.94560732538052139073f, +-0.33688985339221994009f,0.94154406518302080631f,-0.34841868024943439819f, +0.93733901191257495977f,-0.35989503653498816638f,0.93299279883473884567f, +-0.37131719395183748755f,0.92850608047321558924f,-0.38268343236508972627f, +0.92387953251128673848f,-0.39399204006104798781f,0.91911385169005777040f, +-0.40524131400498974998f,0.91420975570353069095f,-0.41642956009763698599f, +0.90916798309052249127f,-0.42755509343028186287f,0.90398929312344344922f, +-0.43861623853852738097f,0.89867446569395392775f,-0.44961132965460670619f, +0.89322430119551521344f,-0.46053871095824006066f,0.88763962040285393496f, +-0.47139673682599769755f,0.88192126434835504956f,-0.48218377207912271887f, +0.87607009419540660122f,-0.49289819222978398239f,0.87008699110871146054f, +-0.50353838372571746440f,0.86397285612158680745f,-0.51410274419322155026f, +0.85772861000027211809f,-0.52458968267846872724f,0.85135519310526519554f, +-0.53499761988709704230f,0.84485356524970722791f,-0.54532498842204624179f, +0.83822470555483818977f,-0.55557023301960195560f,0.83146961230254534669f, +-0.56573181078361323149f,0.82458930278502517996f,-0.57580819141784533866f, +0.81758481315158371139f,-0.58579785745643886408f,0.81045719825259476821f, +-0.59569930449243335691f,0.80320753148064494287f,-0.60551104140432543410f, +0.79583690460888356633f,-0.61523159058062670823f,0.78834642762660633863f, +-0.62485948814238623239f,0.78073722857209459924f,-0.63439328416364537677f, +0.77301045336273710440f,-0.64383154288979127511f,0.76516726562245906962f, +-0.65317284295377653347f,0.75720884650648467851f,-0.66241577759017189475f, +0.74913639452345925918f,-0.67155895484701844111f,0.74095112535495899486f, +-0.68060099779545302212f,0.73265427167241281570f,-0.68954054473706694051f, +0.72424708295146689174f,-0.69837624940897280457f,0.71573082528381870571f, +-0.70710678118654746172f,0.70710678118654757274f,-0.71573082528381859468f, +0.69837624940897291559f,-0.72424708295146678072f,0.68954054473706705153f, +-0.73265427167241270467f,0.68060099779545324417f,-0.74095112535495888384f, +0.67155895484701855214f,-0.74913639452345914815f,0.66241577759017200577f, +-0.75720884650648467851f,0.65317284295377664449f,-0.76516726562245895860f, +0.64383154288979138613f,-0.77301045336273699338f,0.63439328416364548779f, +-0.78073722857209448822f,0.62485948814238634341f,-0.78834642762660622761f, +0.61523159058062693028f,-0.79583690460888345530f,0.60551104140432565615f, +-0.80320753148064483184f,0.59569930449243346793f,-0.81045719825259465718f, +0.58579785745643897510f,-0.81758481315158360037f,0.57580819141784544968f, +-0.82458930278502506894f,0.56573181078361345353f,-0.83146961230254534669f, +0.55557023301960217765f,-0.83822470555483807875f,0.54532498842204635281f, +-0.84485356524970711689f,0.53499761988709715332f,-0.85135519310526519554f, +0.52458968267846894928f,-0.85772861000027200706f,0.51410274419322177231f, +-0.86397285612158669643f,0.50353838372571757542f,-0.87008699110871134952f, +0.49289819222978414892f,-0.87607009419540649020f,0.48218377207912288540f, +-0.88192126434835493853f,0.47139673682599780857f,-0.88763962040285382393f, +0.46053871095824022719f,-0.89322430119551521344f,0.44961132965460687272f, +-0.89867446569395392775f,0.43861623853852754751f,-0.90398929312344333820f, +0.42755509343028202940f,-0.90916798309052238025f,0.41642956009763715253f, +-0.91420975570353069095f,0.40524131400498991651f,-0.91911385169005777040f, +0.39399204006104815434f,-0.92387953251128673848f,0.38268343236508989280f, +-0.92850608047321547822f,0.37131719395183770960f,-0.93299279883473884567f, +0.35989503653498833291f,-0.93733901191257484875f,0.34841868024943478677f, +-0.94154406518302069529f,0.33688985339222032867f,-0.94560732538052116869f, +0.32531029216226325929f,-0.94952818059303667475f,0.31368174039889140658f, +-0.95330604035419386211f,0.30200594931922802866f,-0.95694033573220882438f, +0.29028467725446238656f,-0.96043051941556578655f,0.27851968938505317075f, +-0.96377606579543984022f,0.26671275747489847641f,-0.96697647104485207059f, +0.25486565960451468271f,-0.97003125319454397424f,0.24298017990326406523f, +-0.97293995220556006576f,0.23105810828067133156f,-0.97570213003852845901f, +0.21910124015687004739f,-0.97831737071962754371f,0.20711137619221883788f, +-0.98078528040323043058f,0.19509032201612860891f,-0.98310548743121628501f, +0.18303988795514089527f,-0.98527764238894122162f,0.17096188876030121717f, +-0.98730141815785843473f,0.15885814333386147346f,-0.98917650996478101444f, +0.14673047445536180344f,-0.99090263542778000971f,0.13458070850712627875f, +-0.99247953459870996706f,0.12241067519921634832f,-0.99390697000235606051f, +0.11022220729388323979f,-0.99518472667219681771f,0.09801714032956082567f, +-0.99631261218277800129f,0.08579731234444015753f,-0.99729045667869020697f, +0.07356456359966773162f,-0.99811811290014917919f,0.06132073630220848809f, +-0.99879545620517240501f,0.04906767432741796636f,-0.99932238458834954375f, +0.03680722294135883171f,-0.99969881869620424997f,0.02454122852291232629f, +-0.99992470183914450299f,0.01227153828572000692f,1.00000000000000000000f, +0.00000000000000000000f,0.99879545620517240501f,0.04906767432741801493f, +0.99518472667219692873f,0.09801714032956060363f,0.98917650996478101444f, +0.14673047445536174793f,0.98078528040323043058f,0.19509032201612824808f, +0.97003125319454397424f,0.24298017990326387094f,0.95694033573220882438f, +0.29028467725446233105f,0.94154406518302080631f,0.33688985339222005111f, +0.92387953251128673848f,0.38268343236508978178f,0.90398929312344333820f, +0.42755509343028208491f,0.88192126434835504956f,0.47139673682599764204f, +0.85772861000027211809f,0.51410274419322166128f,0.83146961230254523567f, +0.55557023301960217765f,0.80320753148064494287f,0.59569930449243335691f, +0.77301045336273699338f,0.63439328416364548779f,0.74095112535495921691f, +0.67155895484701833009f,0.70710678118654757274f,0.70710678118654757274f, +0.67155895484701833009f,0.74095112535495910588f,0.63439328416364548779f, +0.77301045336273688235f,0.59569930449243346793f,0.80320753148064483184f, +0.55557023301960228867f,0.83146961230254523567f,0.51410274419322166128f, +0.85772861000027211809f,0.47139673682599780857f,0.88192126434835493853f, +0.42755509343028219593f,0.90398929312344333820f,0.38268343236508983729f, +0.92387953251128673848f,0.33688985339222005111f,0.94154406518302080631f, +0.29028467725446233105f,0.95694033573220893540f,0.24298017990326398197f, +0.97003125319454397424f,0.19509032201612833135f,0.98078528040323043058f, +0.14673047445536174793f,0.98917650996478101444f,0.09801714032956077016f, +0.99518472667219681771f,0.04906767432741812596f,0.99879545620517240501f, +0.00000000000000006123f,1.00000000000000000000f,-0.04906767432741800800f, +0.99879545620517240501f,-0.09801714032956064526f,0.99518472667219692873f, +-0.14673047445536163691f,0.98917650996478101444f,-0.19509032201612819257f, +0.98078528040323043058f,-0.24298017990326387094f,0.97003125319454397424f, +-0.29028467725446216452f,0.95694033573220893540f,-0.33688985339221994009f, +0.94154406518302080631f,-0.38268343236508972627f,0.92387953251128673848f, +-0.42755509343028186287f,0.90398929312344344922f,-0.47139673682599769755f, +0.88192126434835504956f,-0.51410274419322155026f,0.85772861000027211809f, +-0.55557023301960195560f,0.83146961230254534669f,-0.59569930449243335691f, +0.80320753148064494287f,-0.63439328416364537677f,0.77301045336273710440f, +-0.67155895484701844111f,0.74095112535495899486f,-0.70710678118654746172f, +0.70710678118654757274f,-0.74095112535495888384f,0.67155895484701855214f, +-0.77301045336273699338f,0.63439328416364548779f,-0.80320753148064483184f, +0.59569930449243346793f,-0.83146961230254534669f,0.55557023301960217765f, +-0.85772861000027200706f,0.51410274419322177231f,-0.88192126434835493853f, +0.47139673682599780857f,-0.90398929312344333820f,0.42755509343028202940f, +-0.92387953251128673848f,0.38268343236508989280f,-0.94154406518302069529f, +0.33688985339222032867f,-0.95694033573220882438f,0.29028467725446238656f, +-0.97003125319454397424f,0.24298017990326406523f,-0.98078528040323043058f, +0.19509032201612860891f,-0.98917650996478101444f,0.14673047445536180344f, +-0.99518472667219681771f,0.09801714032956082567f,-0.99879545620517240501f, +0.04906767432741796636f,1.00000000000000000000f,0.00000000000000000000f, +0.98078528040323043058f,0.19509032201612824808f,0.92387953251128673848f, +0.38268343236508978178f,0.83146961230254523567f,0.55557023301960217765f, +0.70710678118654757274f,0.70710678118654757274f,0.55557023301960228867f, +0.83146961230254523567f,0.38268343236508983729f,0.92387953251128673848f, +0.19509032201612833135f,0.98078528040323043058f,0.00000000000000006123f, +1.00000000000000000000f,-0.19509032201612819257f,0.98078528040323043058f, +-0.38268343236508972627f,0.92387953251128673848f,-0.55557023301960195560f, +0.83146961230254534669f,-0.70710678118654746172f,0.70710678118654757274f, +-0.83146961230254534669f,0.55557023301960217765f,-0.92387953251128673848f, +0.38268343236508989280f,-0.98078528040323043058f,0.19509032201612860891f, +1.00000000000000000000f,0.00000000000000000000f,0.70710678118654757274f, +0.70710678118654757274f,0.00000000000000006123f,1.00000000000000000000f, +-0.70710678118654746172f,0.70710678118654757274f,}; + +float32_t rearranged_twiddle_stride3_1024[680]={ +1.00000000000000000000f,0.00000000000000000000f,0.99983058179582340319f, +0.01840672990580482019f,0.99932238458834954375f,0.03680722294135883171f, +0.99847558057329477421f,0.05519524434968993420f,0.99729045667869020697f, +0.07356456359966742631f,0.99576741446765981713f,0.09190895649713272386f, +0.99390697000235606051f,0.11022220729388305938f,0.99170975366909952520f, +0.12849811079379316880f,0.98917650996478101444f,0.14673047445536174793f, +0.98630809724459866938f,0.16491312048996989437f,0.98310548743121628501f, +0.18303988795514095078f,0.97956976568544051887f,0.20110463484209190055f, +0.97570213003852857003f,0.21910124015686979759f,0.97150389098625178352f, +0.23702360599436719801f,0.96697647104485207059f,0.25486565960451457169f, +0.96212140426904158019f,0.27262135544994897662f,0.95694033573220882438f, +0.29028467725446233105f,0.95143502096900833820f,0.30784964004153486661f, +0.94560732538052127971f,0.32531029216226292622f,0.93945922360218991898f, +0.34266071731199437833f,0.93299279883473895669f,0.35989503653498811087f, +0.92621024213831137928f,0.37700741021641825945f,0.91911385169005777040f, +0.39399204006104809883f,0.91170603200542987832f,0.41084317105790391089f, +0.90398929312344333820f,0.42755509343028208491f,0.89596624975618521791f, +0.44412214457042920035f,0.88763962040285393496f,0.46053871095824000514f, +0.87901222642863352519f,0.47679923006332208812f,0.87008699110871146054f, +0.49289819222978403790f,0.86086693863776730939f,0.50883014254310698909f, +0.85135519310526519554f,0.52458968267846894928f,0.84155497743689844370f, +0.54017147272989285423f,0.83146961230254523567f,0.55557023301960217765f, +0.82110251499110464835f,0.57078074588696725566f,0.81045719825259476821f, +0.58579785745643886408f,0.79953726910790501314f,0.60061647938386897305f, +0.78834642762660622761f,0.61523159058062681925f,0.77688846567323244230f, +0.62963823891492698426f,0.76516726562245895860f,0.64383154288979138613f, +0.75318679904361252042f,0.65780669329707863735f,0.74095112535495921691f, +0.67155895484701833009f,0.72846439044822519637f,0.68508366777270035541f, +0.71573082528381870571f,0.69837624940897280457f,0.70275474445722529993f, +0.71143219574521643356f,0.68954054473706694051f,0.72424708295146689174f, +0.67609270357531603413f,0.73681656887736979300f,0.66241577759017178373f, +0.74913639452345925918f,0.64851440102211255212f,0.76120238548426177871f, +0.63439328416364548779f,0.77301045336273688235f,0.62005721176328920663f, +0.78455659715557524159f,0.60551104140432554512f,0.79583690460888345530f, +0.59075970185887427544f,0.80684755354379922299f,0.57580819141784533866f, +0.81758481315158371139f,0.56066157619733603124f,0.82804504525775579626f, +0.54532498842204646383f,0.83822470555483796772f,0.52980362468629482731f, +0.84812034480329712149f,0.51410274419322166128f,0.85772861000027211809f, +0.49822766697278186854f,0.86704624551569264845f,0.48218377207912282989f, +0.87607009419540660122f,0.46597649576796612569f,0.88479709843093778954f, +0.44961132965460659516f,0.89322430119551532446f,0.43309381885315201277f, +0.90134884704602202810f,0.41642956009763731906f,0.90916798309052226923f, +0.39962419984564678810f,0.91667905992104270485f,0.38268343236508983729f, +0.92387953251128673848f,0.36561299780477396482f,0.93076696107898371224f, +0.34841868024943450921f,0.93733901191257495977f,0.33110630575987642921f, +0.94359345816196038559f,0.31368174039889157312f,0.94952818059303667475f, +0.29615088824362395536f,0.95514116830577067141f,0.27851968938505305973f, +0.96043051941556578655f,0.26079411791527556952f,0.96539444169768939830f, +0.24298017990326398197f,0.97003125319454397424f,0.22508391135979277653f, +0.97433938278557585821f,0.20711137619221856032f,0.97831737071962765473f, +0.18906866414980627589f,0.98196386910955524296f,0.17096188876030135595f, +0.98527764238894122162f,0.15279718525844340760f,0.98825756773074946437f, +0.13458070850712622324f,0.99090263542778000971f,0.11631863091190487725f, +0.99321194923479450001f,0.09801714032956077016f,0.99518472667219681771f, +0.07968243797143012563f,0.99682029929116566791f,0.06132073630220864768f, +0.99811811290014917919f,0.04293825693494095902f,0.99907772775264536147f, +0.02454122852291226384f,0.99969881869620424997f,0.00613588464915451517f, +0.99998117528260110909f,-0.01227153828571982304f,0.99992470183914450299f, +-0.03067480317663645942f,0.99952941750109314256f,-0.04906767432741800800f, +0.99879545620517240501f,-0.06744391956366398155f,0.99772306664419163624f, +-0.08579731234443975507f,0.99631261218277800129f,-0.10412163387205460030f, +0.99456457073425541537f,-0.12241067519921615403f,0.99247953459870996706f, +-0.14065823933284912761f,0.99005821026229712256f,-0.15885814333386127917f, +0.98730141815785843473f,-0.17700422041214874946f,0.98421009238692902521f, +-0.19509032201612819257f,0.98078528040323043058f,-0.21311031991609125091f, +0.97702814265775439484f,-0.23105810828067113727f,0.97293995220556017678f, +-0.24892760574572012078f,0.96852209427441737777f,-0.26671275747489830987f, +0.96377606579543984022f,-0.28440753721127171039f,0.95870347489587159906f, +-0.30200594931922808417f,0.95330604035419386211f,-0.31950203081601563637f, +0.94758559101774120226f,-0.33688985339221994009f,0.94154406518302080631f, +-0.35416352542049039931f,0.93518350993894761025f,-0.37131719395183748755f, +0.92850608047321558924f,-0.38834504669882619066f,0.92151403934204201285f, +-0.40524131400498974998f,0.91420975570353069095f,-0.42200027079979968159f, +0.90659570451491533483f,-0.43861623853852738097f,0.89867446569395392775f, +-0.45508358712634372489f,0.89044872324475798919f,-0.47139673682599769755f, +0.88192126434835504956f,-0.48755016014843571837f,0.87309497841829020182f, +-0.50353838372571746440f,0.86397285612158680745f,-0.51935599016558964269f, +0.85455798836540053376f,-0.53499761988709704230f,0.84485356524970722791f, +-0.55045797293660470029f,0.83486287498638012128f,-0.56573181078361323149f, +0.82458930278502517996f,-0.58081395809576441547f,0.81403632970594852480f, +-0.59569930449243335691f,0.80320753148064494287f,-0.61038280627630958630f, +0.79210657730021227785f,-0.62485948814238623239f,0.78073722857209459924f, +-0.63912444486377573138f,0.76910333764557958780f,-0.65317284295377653347f, +0.75720884650648467851f,-0.66699992230363736034f,0.74505778544146605835f, +-0.68060099779545302212f,0.73265427167241281570f,-0.69397146088965377952f, +0.72000250796138176579f,-0.70710678118654746172f,0.70710678118654757274f, +-0.72000250796138165477f,0.69397146088965389055f,-0.73265427167241270467f, +0.68060099779545324417f,-0.74505778544146594733f,0.66699992230363758239f, +-0.75720884650648467851f,0.65317284295377664449f,-0.76910333764557947678f, +0.63912444486377584241f,-0.78073722857209448822f,0.62485948814238634341f, +-0.79210657730021216683f,0.61038280627630969732f,-0.80320753148064483184f, +0.59569930449243346793f,-0.81403632970594841378f,0.58081395809576452649f, +-0.82458930278502506894f,0.56573181078361345353f,-0.83486287498638001026f, +0.55045797293660492233f,-0.84485356524970711689f,0.53499761988709715332f, +-0.85455798836540042274f,0.51935599016558975372f,-0.86397285612158669643f, +0.50353838372571757542f,-0.87309497841829009079f,0.48755016014843588490f, +-0.88192126434835493853f,0.47139673682599780857f,-0.89044872324475787817f, +0.45508358712634389143f,-0.89867446569395392775f,0.43861623853852754751f, +-0.90659570451491533483f,0.42200027079979984812f,-0.91420975570353069095f, +0.40524131400498991651f,-0.92151403934204179080f,0.38834504669882657923f, +-0.92850608047321547822f,0.37131719395183770960f,-0.93518350993894761025f, +0.35416352542049039931f,-0.94154406518302069529f,0.33688985339222032867f, +-0.94758559101774109124f,0.31950203081601580291f,-0.95330604035419386211f, +0.30200594931922802866f,-0.95870347489587148804f,0.28440753721127209896f, +-0.96377606579543984022f,0.26671275747489847641f,-0.96852209427441737777f, +0.24892760574572009302f,-0.97293995220556006576f,0.23105810828067133156f, +-0.97702814265775439484f,0.21311031991609141745f,-0.98078528040323043058f, +0.19509032201612860891f,-0.98421009238692902521f,0.17700422041214894375f, +-0.98730141815785843473f,0.15885814333386147346f,-0.99005821026229701154f, +0.14065823933284954395f,-0.99247953459870996706f,0.12241067519921634832f, +-0.99456457073425541537f,0.10412163387205457254f,-0.99631261218277800129f, +0.08579731234444015753f,-0.99772306664419163624f,0.06744391956366417584f, +-0.99879545620517240501f,0.04906767432741796636f,-0.99952941750109314256f, +0.03067480317663686534f,-0.99992470183914450299f,0.01227153828572000692f, +-0.99998117528260110909f,-0.00613588464915455420f,-0.99969881869620424997f, +-0.02454122852291207996f,-0.99907772775264536147f,-0.04293825693494077861f, +-0.99811811290014917919f,-0.06132073630220824523f,-0.99682029929116577893f, +-0.07968243797142994522f,-0.99518472667219692873f,-0.09801714032956058975f, +-0.99321194923479461103f,-0.11631863091190447479f,-0.99090263542778000971f, +-0.13458070850712605671f,-0.98825756773074946437f,-0.15279718525844343535f, +-0.98527764238894133264f,-0.17096188876030096737f,-0.98196386910955524296f, +-0.18906866414980610935f,-0.97831737071962765473f,-0.20711137619221858808f, +-0.97433938278557585821f,-0.22508391135979261000f,-0.97003125319454397424f, +-0.24298017990326381543f,-0.96539444169768939830f,-0.26079411791527562503f, +-0.96043051941556589757f,-0.27851968938505289319f,-0.95514116830577078243f, +-0.29615088824362378883f,-0.94952818059303678577f,-0.31368174039889118454f, +-0.94359345816196038559f,-0.33110630575987626267f,-0.93733901191257495977f, +-0.34841868024943456472f,-0.93076696107898382326f,-0.36561299780477357624f, +-0.92387953251128684951f,-0.38268343236508967076f,-0.91667905992104270485f, +-0.39962419984564684361f,-0.90916798309052249127f,-0.41642956009763693048f, +-0.90134884704602202810f,-0.43309381885315184624f,-0.89322430119551532446f, +-0.44961132965460665067f,-0.88479709843093790056f,-0.46597649576796595916f, +-0.87607009419540660122f,-0.48218377207912266336f,-0.86704624551569287050f, +-0.49822766697278153547f,-0.85772861000027211809f,-0.51410274419322155026f, +-0.84812034480329723252f,-0.52980362468629460526f,-0.83822470555483818977f, +-0.54532498842204613076f,-0.82804504525775590729f,-0.56066157619733592021f, +-0.81758481315158371139f,-0.57580819141784533866f,-0.80684755354379944503f, +-0.59075970185887394237f,-0.79583690460888356633f,-0.60551104140432543410f, +-0.78455659715557524159f,-0.62005721176328920663f,-0.77301045336273710440f, +-0.63439328416364526575f,-0.76120238548426188974f,-0.64851440102211233008f, +-0.74913639452345925918f,-0.66241577759017178373f,-0.73681656887737001504f, +-0.67609270357531581208f,-0.72424708295146700276f,-0.68954054473706682948f, +-0.71143219574521665560f,-0.70275474445722507788f,-0.69837624940897302661f, +-0.71573082528381848366f,-0.68508366777270035541f,-0.72846439044822519637f, +-0.67155895484701866316f,-0.74095112535495888384f,-0.65780669329707874837f, +-0.75318679904361240940f,-0.64383154288979149715f,-0.76516726562245895860f, +-0.62963823891492687324f,-0.77688846567323255332f,-0.61523159058062726334f, +-0.78834642762660589455f,-0.60061647938386930612f,-0.79953726910790479110f, +-0.58579785745643908612f,-0.81045719825259465718f,-0.57078074588696736669f, +-0.82110251499110464835f,-0.55557023301960217765f,-0.83146961230254523567f, +-0.54017147272989274320f,-0.84155497743689855472f,-0.52458968267846928235f, +-0.85135519310526486247f,-0.50883014254310732216f,-0.86086693863776708735f, +-0.49289819222978420443f,-0.87008699110871134952f,-0.47679923006332214364f, +-0.87901222642863341417f,-0.46053871095823989412f,-0.88763962040285404598f, +-0.44412214457042975546f,-0.89596624975618488484f,-0.42755509343028247349f, +-0.90398929312344311615f,-0.41084317105790418845f,-0.91170603200542976730f, +-0.39399204006104820985f,-0.91911385169005765938f,-0.37700741021641820394f, +-0.92621024213831137928f,-0.35989503653498794433f,-0.93299279883473895669f, +-0.34266071731199487793f,-0.93945922360218969693f,-0.32531029216226331480f, +-0.94560732538052116869f,-0.30784964004153508865f,-0.95143502096900833820f, +-0.29028467725446244208f,-0.95694033573220882438f,-0.27262135544994886560f, +-0.96212140426904158019f,-0.25486565960451434965f,-0.96697647104485218161f, +-0.23702360599436766986f,-0.97150389098625167250f,-0.21910124015687010290f, +-0.97570213003852845901f,-0.20110463484209206708f,-0.97956976568544051887f, +-0.18303988795514095078f,-0.98310548743121628501f,-0.16491312048996975559f, +-0.98630809724459866938f,-0.14673047445536230304f,-0.98917650996478090342f, +-0.12849811079379358514f,-0.99170975366909952520f,-0.11022220729388330918f, +-0.99390697000235606051f,-0.09190895649713282101f,-0.99576741446765981713f, +-0.07356456359966735692f,-0.99729045667869020697f,-0.05519524434968971216f, +-0.99847558057329477421f,-0.03680722294135933131f,-0.99932238458834943273f, +-0.01840672990580516366f,-0.99983058179582340319f,1.00000000000000000000f, +0.00000000000000000000f,0.99729045667869020697f,0.07356456359966742631f, +0.98917650996478101444f,0.14673047445536174793f,0.97570213003852857003f, +0.21910124015686979759f,0.95694033573220882438f,0.29028467725446233105f, +0.93299279883473895669f,0.35989503653498811087f,0.90398929312344333820f, +0.42755509343028208491f,0.87008699110871146054f,0.49289819222978403790f, +0.83146961230254523567f,0.55557023301960217765f,0.78834642762660622761f, +0.61523159058062681925f,0.74095112535495921691f,0.67155895484701833009f, +0.68954054473706694051f,0.72424708295146689174f,0.63439328416364548779f, +0.77301045336273688235f,0.57580819141784533866f,0.81758481315158371139f, +0.51410274419322166128f,0.85772861000027211809f,0.44961132965460659516f, +0.89322430119551532446f,0.38268343236508983729f,0.92387953251128673848f, +0.31368174039889157312f,0.94952818059303667475f,0.24298017990326398197f, +0.97003125319454397424f,0.17096188876030135595f,0.98527764238894122162f, +0.09801714032956077016f,0.99518472667219681771f,0.02454122852291226384f, +0.99969881869620424997f,-0.04906767432741800800f,0.99879545620517240501f, +-0.12241067519921615403f,0.99247953459870996706f,-0.19509032201612819257f, +0.98078528040323043058f,-0.26671275747489830987f,0.96377606579543984022f, +-0.33688985339221994009f,0.94154406518302080631f,-0.40524131400498974998f, +0.91420975570353069095f,-0.47139673682599769755f,0.88192126434835504956f, +-0.53499761988709704230f,0.84485356524970722791f,-0.59569930449243335691f, +0.80320753148064494287f,-0.65317284295377653347f,0.75720884650648467851f, +-0.70710678118654746172f,0.70710678118654757274f,-0.75720884650648467851f, +0.65317284295377664449f,-0.80320753148064483184f,0.59569930449243346793f, +-0.84485356524970711689f,0.53499761988709715332f,-0.88192126434835493853f, +0.47139673682599780857f,-0.91420975570353069095f,0.40524131400498991651f, +-0.94154406518302069529f,0.33688985339222032867f,-0.96377606579543984022f, +0.26671275747489847641f,-0.98078528040323043058f,0.19509032201612860891f, +-0.99247953459870996706f,0.12241067519921634832f,-0.99879545620517240501f, +0.04906767432741796636f,-0.99969881869620424997f,-0.02454122852291207996f, +-0.99518472667219692873f,-0.09801714032956058975f,-0.98527764238894133264f, +-0.17096188876030096737f,-0.97003125319454397424f,-0.24298017990326381543f, +-0.94952818059303678577f,-0.31368174039889118454f,-0.92387953251128684951f, +-0.38268343236508967076f,-0.89322430119551532446f,-0.44961132965460665067f, +-0.85772861000027211809f,-0.51410274419322155026f,-0.81758481315158371139f, +-0.57580819141784533866f,-0.77301045336273710440f,-0.63439328416364526575f, +-0.72424708295146700276f,-0.68954054473706682948f,-0.67155895484701866316f, +-0.74095112535495888384f,-0.61523159058062726334f,-0.78834642762660589455f, +-0.55557023301960217765f,-0.83146961230254523567f,-0.49289819222978420443f, +-0.87008699110871134952f,-0.42755509343028247349f,-0.90398929312344311615f, +-0.35989503653498794433f,-0.93299279883473895669f,-0.29028467725446244208f, +-0.95694033573220882438f,-0.21910124015687010290f,-0.97570213003852845901f, +-0.14673047445536230304f,-0.98917650996478090342f,-0.07356456359966735692f, +-0.99729045667869020697f,1.00000000000000000000f,0.00000000000000000000f, +0.95694033573220882438f,0.29028467725446233105f,0.83146961230254523567f, +0.55557023301960217765f,0.63439328416364548779f,0.77301045336273688235f, +0.38268343236508983729f,0.92387953251128673848f,0.09801714032956077016f, +0.99518472667219681771f,-0.19509032201612819257f,0.98078528040323043058f, +-0.47139673682599769755f,0.88192126434835504956f,-0.70710678118654746172f, +0.70710678118654757274f,-0.88192126434835493853f,0.47139673682599780857f, +-0.98078528040323043058f,0.19509032201612860891f,-0.99518472667219692873f, +-0.09801714032956058975f,-0.92387953251128684951f,-0.38268343236508967076f, +-0.77301045336273710440f,-0.63439328416364526575f,-0.55557023301960217765f, +-0.83146961230254523567f,-0.29028467725446244208f,-0.95694033573220882438f, +1.00000000000000000000f,0.00000000000000000000f,0.38268343236508983729f, +0.92387953251128673848f,-0.70710678118654746172f,0.70710678118654757274f, +-0.92387953251128684951f,-0.38268343236508967076f,}; + +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) + +uint32_t rearranged_twiddle_tab_stride1_arr_4096[6]={ +0,2048,2560,2688,2720,0,}; + +uint32_t rearranged_twiddle_tab_stride2_arr_4096[6]={ +0,2048,2560,2688,2720,0,}; + +uint32_t rearranged_twiddle_tab_stride3_arr_4096[6]={ +0,2048,2560,2688,2720,0,}; + +float32_t rearranged_twiddle_stride1_4096[2728]={ +1.00000000000000000000f,0.00000000000000000000f,0.99999882345170187925f, +0.00153398018628476550f,0.99999529380957619118f,0.00306795676296597614f, +0.99998941108192840321f,0.00460192612044857050f,0.99998117528260110909f, +0.00613588464915447527f,0.99997058643097413988f,0.00766982873953109701f, +0.99995764455196389786f,0.00920375478205981944f,0.99994234967602391162f, +0.01073765916726449055f,0.99992470183914450299f,0.01227153828571992539f, +0.99990470108285289808f,0.01380538852806039059f,0.99988234745421256111f, +0.01533920628498810015f,0.99985764100582386060f,0.01687298794728171042f, +0.99983058179582340319f,0.01840672990580482019f,0.99980116988788425569f, +0.01994042855151444138f,0.99976940535121527898f,0.02147408027546950787f, +0.99973528826056168306f,0.02300768146883936868f,0.99969881869620424997f, +0.02454122852291228812f,0.99965999674395922270f,0.02607471782910390085f, +0.99961882249517863830f,0.02760814577896573974f,0.99957529604674921764f, +0.02914150876419372219f,0.99952941750109314256f,0.03067480317663662595f, +0.99948118696616694567f,0.03220802540830458582f,0.99943060455546173237f, +0.03374117185137757990f,0.99937767038800284780f,0.03527423889821394709f, +0.99932238458834954375f,0.03680722294135883171f,0.99926474728659442359f, +0.03834012037355269409f,0.99920475861836388631f,0.03987292758773981066f, +0.99914241872481690532f,0.04140564097707673946f,0.99907772775264536147f, +0.04293825693494082024f,0.99901068585407337697f,0.04447077185493866769f, +0.99894129318685687124f,0.04600318213091462299f,0.99886954991428356099f, +0.04753548415695930257f,0.99879545620517240501f,0.04906767432741801493f, +0.99871901223387293811f,0.05059974903689928166f,0.99864021818026527111f, +0.05213170468028332366f,0.99855907422975931365f,0.05366353765273051968f, +0.99847558057329477421f,0.05519524434968993420f,0.99838973740734016094f, +0.05672682116690774823f,0.99830154493389289261f,0.05825826450043575244f, +0.99821100336047818846f,0.05978957074663986820f,0.99811811290014917919f, +0.06132073630220857829f,0.99802287377148624081f,0.06285175756416140624f, +0.99792528619859599548f,0.06438263092985746505f,0.99782535041111164453f, +0.06591335279700380467f,0.99772306664419163624f,0.06744391956366405094f, +0.99761843513851955478f,0.06897432762826674613f,0.99751145614030345410f, +0.07050457338961385600f,0.99740212990127530279f,0.07203465324688933247f, +0.99729045667869020697f,0.07356456359966742631f,0.99717643673532618820f, +0.07509430084792130533f,0.99706007033948296225f,0.07662386139203149205f, +0.99694135776498216117f,0.07815324163279423197f,0.99682029929116566791f, +0.07968243797143012563f,0.99669689520289606044f,0.08121144680959244133f, +0.99657114579055483539f,0.08274026454937569164f,0.99644305135004263008f, +0.08426888759332407108f,0.99631261218277800129f,0.08579731234443989385f, +0.99617982859569698117f,0.08732553520619205922f,0.99604470090125196702f, +0.08885355258252460031f,0.99590722941741172125f,0.09038136087786498296f, +0.99576741446765981713f,0.09190895649713272386f,0.99562525638099430569f, +0.09343633584574778661f,0.99548075549192693856f,0.09496349532963899165f, +0.99533391214048227980f,0.09649043135525259274f,0.99518472667219692873f, +0.09801714032956060363f,0.99503319943811863180f,0.09954361866006931903f, +0.99487933079480561638f,0.10106986275482782167f,0.99472312110432570265f, +0.10259586902243628126f,0.99456457073425541537f,0.10412163387205458642f, +0.99440368005767909576f,0.10564715371341061589f,0.99424044945318790223f, +0.10717242495680884273f,0.99407487930487936634f,0.10869744401313871651f, +0.99390697000235606051f,0.11022220729388305938f,0.99373672194072459884f, +0.11174671121112658700f,0.99356413552059530403f,0.11327095217756434631f, +0.99338921114808065305f,0.11479492660651008373f,0.99321194923479450001f, +0.11631863091190475235f,0.99303235019785141002f,0.11784206150832497728f, +0.99285041445986510489f,0.11936521481099135467f,0.99266614244894801899f, +0.12088808723577708359f,0.99247953459870996706f,0.12241067519921619566f, +0.99229059134825736699f,0.12393297511851215920f,0.99209931314219179654f, +0.12545498341154623367f,0.99190570043060932726f,0.12697669649688586579f, +0.99170975366909952520f,0.12849811079379316880f,0.99151147331874389668f, +0.13001922272223334631f,0.99131085984611544415f,0.13154002870288311611f, +0.99110791372327688986f,0.13306052515713906459f,0.99090263542778000971f, +0.13458070850712616773f,0.99069502544266463406f,0.13610057517570620100f, +0.99048508425645709341f,0.13762012158648603832f,0.99027281236316910817f, +0.13913934416382620074f,0.99005821026229712256f,0.14065823933284921088f, +0.98984127845882052821f,0.14217680351944803063f,0.98962201746320088702f, +0.14369503315029447110f,0.98940042779138037687f,0.14521292465284746376f, +0.98917650996478101444f,0.14673047445536174793f,0.98895026451030298986f, +0.14824767898689603096f,0.98872169196032377858f,0.14976453467732150915f, +0.98849079285269658701f,0.15128103795733022219f,0.98825756773074946437f, +0.15279718525844343535f,0.98802201714328352633f,0.15431297301302010494f, +0.98778414164457217783f,0.15582839765426523271f,0.98754394179435922574f, +0.15734345561623824805f,0.98730141815785843473f,0.15885814333386144570f, +0.98705657130575097380f,0.16037245724292828464f,0.98680940181418552726f, +0.16188639378011182579f,0.98655991026477540817f,0.16339994938297322524f, +0.98630809724459866938f,0.16491312048996989437f,0.98605396334619543897f, +0.16642590354046410406f,0.98579750916756747614f,0.16793829497473117263f, +0.98553873531217606185f,0.16945029123396795900f,0.98527764238894122162f, +0.17096188876030121717f,0.98501423101223983814f,0.17247308399679595059f, +0.98474850180190420801f,0.17398387338746382214f,0.98448045538322093151f, +0.17549425337727142526f,0.98421009238692902521f,0.17700422041214874946f, +0.98393741344921892278f,0.17851377093899750692f,0.98366241921173025453f, +0.18002290140569951471f,0.98338511032155118130f,0.18153160826112496595f, +0.98310548743121628501f,0.18303988795514095078f,0.98282355119870523641f, +0.18454773693861961648f,0.98253930228744124076f,0.18605515166344663291f, +0.98225274136628937249f,0.18756212858252960252f,0.98196386910955524296f, +0.18906866414980619262f,0.98167268619698311305f,0.19057475482025273972f, +0.98137919331375456089f,0.19208039704989243734f,0.98108339115048670553f, +0.19358558729580360724f,0.98078528040323043058f,0.19509032201612824808f, +0.98048486177346938497f,0.19659459767008022335f,0.98018213596811742949f, +0.19809841071795356027f,0.97987710369951763756f,0.19960175762113097075f, +0.97956976568544051887f,0.20110463484209190055f,0.97926012264908202098f, +0.20260703884442113343f,0.97894817531906219710f,0.20410896609281686809f, +0.97863392442942320759f,0.20561041305309923910f,0.97831737071962765473f, +0.20711137619221856032f,0.97799851493455713936f,0.20861185197826348503f, +0.97767735782450992943f,0.21011183688046961016f,0.97735390014519996082f, +0.21161132736922755315f,0.97702814265775439484f,0.21311031991609136194f, +0.97670008612871184184f,0.21460881099378675829f,0.97636973133002114000f, +0.21610679707621952006f,0.97603707903903902388f,0.21760427463848364127f, +0.97570213003852857003f,0.21910124015686979759f,0.97536488511665697665f, +0.22059769010887350649f,0.97502534506699412020f,0.22209362097320350937f, +0.97468351068851066810f,0.22358902922978998729f,0.97433938278557585821f, +0.22508391135979283204f,0.97399296216795583359f,0.22657826384561000066f, +0.97364424965081197705f,0.22807208317088573102f,0.97329324605469824672f, +0.22956536582051886852f,0.97293995220556017678f,0.23105810828067110951f, +0.97258436893473221296f,0.23255030703877524467f,0.97222649707893626925f, +0.23404195858354343018f,0.97186633748027939639f,0.23553305940497548665f, +0.97150389098625178352f,0.23702360599436719801f,0.97113915844972509284f, +0.23851359484431841618f,0.97077214072895035013f,0.24000302244874149871f, +0.97040283868755550234f,0.24149188530286933019f,0.97003125319454397424f, +0.24298017990326387094f,0.96965738512429244800f,0.24446790274782415064f, +0.96928123535654853171f,0.24595505033579459497f,0.96890280477642887202f, +0.24744161916777326904f,0.96852209427441737777f,0.24892760574572014853f, +0.96813910474636244441f,0.25041300657296522436f,0.96775383709347551076f, +0.25189781815421696809f,0.96736629222232850545f,0.25338203699557015902f, +0.96697647104485207059f,0.25486565960451457169f,0.96658437447833311928f, +0.25634868248994291395f,0.96619000344541250413f,0.25783110216215898713f, +0.96579335887408368500f,0.25931291513288623474f,0.96539444169768939830f, +0.26079411791527551401f,0.96499325285492032478f,0.26227470702391358914f, +0.96458979328981275803f,0.26375467897483134694f,0.96418406395174582890f, +0.26523403028551179039f,0.96377606579543984022f,0.26671275747489836538f, +0.96336579978095404631f,0.26819085706340317632f,0.96295326687368387741f, +0.26966832557291509076f,0.96253846804435916340f,0.27114515952680801059f, +0.96212140426904158019f,0.27262135544994897662f,0.96170207652912254037f, +0.27409690986870638429f,0.96128048581132063966f,0.27557181931095814376f, +0.96085663310767965850f,0.27704608030609989555f,0.96043051941556578655f, +0.27851968938505305973f,0.96000214573766595727f,0.27999264308027321801f, +0.95957151308198451733f,0.28146493792575794091f,0.95913862246184189431f, +0.28293657045705539188f,0.95870347489587159906f,0.28440753721127187692f, +0.95826607140801767226f,0.28587783472708061527f,0.95782641302753290802f, +0.28734745954472951102f,0.95738450078897585627f,0.28881640820604947972f, +0.95694033573220882438f,0.29028467725446233105f,0.95649391890239510161f, +0.29175226323498926195f,0.95604525134999640557f,0.29321916269425862822f, +0.95559433413077110586f,0.29468537218051432669f,0.95514116830577078243f, +0.29615088824362378883f,0.95468575494133833814f,0.29761570743508619641f, +0.95422809510910566733f,0.29907982630804047508f,0.95376818988599032512f, +0.30054324141727345454f,0.95330604035419386211f,0.30200594931922808417f, +0.95284164760119871573f,0.30346794657201131562f,0.95237501271976587880f, +0.30492922973540237397f,0.95190613680793234597f,0.30638979537086091787f, +0.95143502096900833820f,0.30784964004153486661f,0.95096166631157508231f, +0.30930876031226872680f,0.95048607394948170235f,0.31076715274961147495f, +0.95000824500184299914f,0.31222481392182488413f,0.94952818059303667475f, +0.31368174039889151761f,0.94904588185270055689f,0.31513792875252244485f, +0.94856134991573026749f,0.31659337555616584581f,0.94807458592227622507f, +0.31804807738501494896f,0.94758559101774109124f,0.31950203081601569188f, +0.94709436635277721717f,0.32095523242787521445f,0.94660091308328353499f, +0.32240767880106985244f,0.94610523237040344835f,0.32385936651785285356f, +0.94560732538052127971f,0.32531029216226292622f,0.94510719328526060501f, +0.32676045232013173347f,0.94460483726148025685f,0.32820984357909249729f, +0.94410025849127265918f,0.32965846252858749255f,0.94359345816196038559f, +0.33110630575987642921f,0.94308443746609349478f,0.33255336986604422389f, +0.94257319760144686605f,0.33399965144200938205f,0.94205973977101731265f, +0.33544514708453160301f,0.94154406518302080631f,0.33688985339222005111f, +0.94102617505088925753f,0.33833376696554112728f,0.94050607059326829518f, +0.33977688440682685123f,0.93998375303401404679f,0.34121920232028235542f, +0.93945922360218991898f,0.34266071731199437833f,0.93893248353206459900f, +0.34410142598993881391f,0.93840353406310805795f,0.34554132496398909380f, +0.93787237643998988545f,0.34698041084592368133f,0.93733901191257495977f, +0.34841868024943456472f,0.93680344173592156043f,0.34985612979013491763f, +0.93626566717027825959f,0.35129275608556709276f,0.93572568948108036935f, +0.35272855575521072646f,0.93518350993894761025f,0.35416352542049034380f, +0.93463912981968078064f,0.35559766170478385172f,0.93409255040425887007f, +0.35703096123342997759f,0.93354377297883617270f,0.35846342063373654030f, +0.93299279883473895669f,0.35989503653498811087f,0.93243962926846235550f, +0.36132580556845428355f,0.93188426558166814750f,0.36275572436739722537f, +0.93132670908118042608f,0.36418478956707989180f,0.93076696107898371224f, +0.36561299780477385379f,0.93020502289221906889f,0.36704034571976718038f, +0.92964089584318121418f,0.36846682995337232125f,0.92907458125931585702f, +0.36989244714893410038f,0.92850608047321558924f,0.37131719395183754306f, +0.92793539482261788720f,0.37274106700951575855f,0.92736252565040111495f, +0.37416406297145793358f,0.92678747430458174872f,0.37558617848921721505f, +0.92621024213831137928f,0.37700741021641825945f,0.92563083050987271516f, +0.37842775480876555960f,0.92504924078267758425f,0.37984720892405116066f, +0.92446547432526260391f,0.38126576922216237620f,0.92387953251128673848f, +0.38268343236508978178f,0.92329141671952763559f,0.38410019501693504207f, +0.92270112833387862850f,0.38551605384391884890f,0.92210866874334518339f, +0.38693100551438858181f,0.92151403934204190183f,0.38834504669882624617f, +0.92091724152918941204f,0.38975817406985641123f,0.92031827670911059425f, +0.39117038430225387069f,0.91971714629122736095f,0.39258167407295146978f, +0.91911385169005777040f,0.39399204006104809883f,0.91850839432521225181f, +0.39540147894781635385f,0.91790077562139049672f,0.39680998741671030805f, +0.91729099700837790632f,0.39821756215337356100f,0.91667905992104270485f, +0.39962419984564678810f,0.91606496579933172075f,0.40102989718357562321f, +0.91544871608826783316f,0.40243465085941843018f,0.91483031223794619713f, +0.40383845756765407442f,0.91420975570353069095f,0.40524131400498986100f, +0.91358704794525080750f,0.40664321687036902864f,0.91296219042839821256f, +0.40804416286497868782f,0.91233518462332274801f,0.40944414869225759235f, +0.91170603200542987832f,0.41084317105790391089f,0.91107473405517636067f, +0.41224122666988288755f,0.91044129225806724737f,0.41363831223843450235f, +0.90980570810465222209f,0.41503442447608163146f,0.90916798309052238025f, +0.41642956009763715253f,0.90852811871630612117f,0.41782371582021227141f, +0.90788611648766626150f,0.41921688836322390515f,0.90724197791529581636f, +0.42060907444840250902f,0.90659570451491533483f,0.42200027079979968159f, +0.90594729780726845902f,0.42339047414379604728f,0.90529675931811881551f, +0.42477968120910880589f,0.90464409057824624050f,0.42616788872679961520f, +0.90398929312344333820f,0.42755509343028208491f,0.90333236849451181705f, +0.42894129205532949278f,0.90267331823725882600f,0.43032648134008261165f, +0.90201214390249317976f,0.43171065802505725895f,0.90134884704602202810f, +0.43309381885315195726f,0.90068342922864685907f,0.43447596056965565037f, +0.90001589201616016833f,0.43585707992225547480f,0.89934623697934157338f, +0.43723717366104408732f,0.89867446569395381673f,0.43861623853852765853f, +0.89800057974073987932f,0.43999427130963325583f,0.89732458070541831763f, +0.44137126873171667052f,0.89664647017868015499f,0.44274722756457002282f, +0.89596624975618521791f,0.44412214457042920035f,0.89528392103855758410f, +0.44549601651398174074f,0.89459948563138269595f,0.44686884016237415906f, +0.89391294514520325265f,0.44824061228521988598f,0.89322430119551532446f, +0.44961132965460653965f,0.89253355540276457791f,0.45098098904510386387f, +0.89184070939234272313f,0.45234958723377088896f,0.89114576479458318392f, +0.45371712100016386993f,0.89044872324475787817f,0.45508358712634383592f, +0.88974958638307277692f,0.45644898239688391772f,0.88904835585466457371f, +0.45781330359887717485f,0.88834503330959635470f,0.45917654752194408951f, +0.88763962040285393496f,0.46053871095824000514f,0.88693211879434219469f, +0.46189979070246273141f,0.88622253014888063838f,0.46325978355186014923f, +0.88551085613619995307f,0.46461868630623781584f,0.88479709843093778954f, +0.46597649576796618121f,0.88408125871263498752f,0.46733320874198841510f, +0.88336333866573157891f,0.46868882203582790114f,0.88264333997956279099f, +0.47004333245959561971f,0.88192126434835504956f,0.47139673682599764204f, +0.88119711347122209322f,0.47274903195034279069f,0.88047088905216075450f, +0.47410021465054996703f,0.87974259280004740713f,0.47545028174715586733f, +0.87901222642863352519f,0.47679923006332208812f,0.87827979165654157523f, +0.47814705642484300885f,0.87754529020726135258f,0.47949375766015295275f, +0.87680872380914565145f,0.48083933060033395845f,0.87607009419540660122f, +0.48218377207912271887f,0.87532940310411089246f,0.48352707893291868579f, +0.87458665227817611321f,0.48486924800079106435f,0.87384184346536686316f, +0.48621027612448641797f,0.87309497841829009079f,0.48755016014843599592f, +0.87234605889439154058f,0.48888889691976317176f,0.87159508665595097909f, +0.49022648328829115938f,0.87084206347007897531f,0.49156291610654989643f, +0.87008699110871146054f,0.49289819222978403790f,0.86932987134860684186f, +0.49423230851595967295f,0.86857070597134089507f,0.49556526182577254058f, +0.86780949676330332299f,0.49689704902265446895f,0.86704624551569264845f, +0.49822766697278181303f,0.86628095402451299467f,0.49955711254508183838f, +0.86551362409056908920f,0.50088538261124071482f,0.86474425751946237817f, +0.50221247404571078832f,0.86397285612158669643f,0.50353838372571757542f, +0.86319942171212415971f,0.50486310853126759035f,0.86242395611104050168f, +0.50618664534515522835f,0.86164646114308129921f,0.50750899105297087033f, +0.86086693863776730939f,0.50883014254310698909f,0.86008539042939013974f, +0.51015009670676680908f,0.85930181835700847337f,0.51146885043797030157f, +0.85851622426444273994f,0.51278640063356295542f,0.85772861000027211809f, +0.51410274419322166128f,0.85693897741782876221f,0.51541787801946292724f, +0.85614732837519447184f,0.51673179901764987321f,0.85535366473519602870f, +0.51804450409599933636f,0.85455798836540053376f,0.51935599016558964269f, +0.85376030113811141042f,0.52066625414036715735f,0.85296060493036363059f, +0.52197529293715438925f,0.85215890162391982887f,0.52328310347565643035f, +0.85135519310526519554f,0.52458968267846894928f,0.85054948126560347976f, +0.52589502747108463065f,0.84974176800085254868f,0.52719913478190127964f, +0.84893205521163961347f,0.52850200154222848337f,0.84812034480329723252f, +0.52980362468629460526f,0.84730663868585831544f,0.53110400115125500076f, +0.84649093877405212627f,0.53240312787719790144f,0.84567324698729906540f, +0.53370100180715296379f,0.84485356524970711689f,0.53499761988709715332f, +0.84403189549006640835f,0.53629297906596318235f,0.84320823964184543620f, +0.53758707629564539410f,0.84238259964318584760f,0.53887990853100842248f, +0.84155497743689844370f,0.54017147272989285423f,0.84072537497045807253f, +0.54146176585312344454f,0.83989379419599952126f,0.54275078486451588944f, +0.83906023707031274217f,0.54403852673088382019f,0.83822470555483807875f, +0.54532498842204646383f,0.83738720161566193578f,0.54661016691083486041f, +0.83654772722351200542f,0.54789405917310018967f,0.83570628435375260423f, +0.54917666218771965525f,0.83486287498638001026f,0.55045797293660481131f, +0.83401750110601813315f,0.55173798840470733573f,0.83317016470191318511f, +0.55301670558002746780f,0.83232086776792968408f,0.55429412145362000341f, +0.83146961230254523567f,0.55557023301960217765f,0.83061640030884631436f, +0.55684503727516010407f,0.82976123379452304540f,0.55811853122055610221f, +0.82890411477186487499f,0.55939071185913613604f,0.82804504525775579626f, +0.56066157619733603124f,0.82718402727366913130f,0.56193112124468935775f, +0.82632106284566353427f,0.56319934401383409117f,0.82545615400437755138f, +0.56446624152051938506f,0.82458930278502529099f,0.56573181078361312046f, +0.82372051122739142759f,0.56699604882510867832f,0.82284978137582642788f, +0.56825895267013148970f,0.82197711527924155472f,0.56952051934694714053f, +0.82110251499110464835f,0.57078074588696725566f,0.82022598256943468620f, +0.57203962932475704850f,0.81934752007679700903f,0.57329716669804220430f, +0.81846712958029865792f,0.57455335504771576360f,0.81758481315158371139f, +0.57580819141784533866f,0.81670057286682784525f,0.57706167285567944170f, +0.81581441080673378075f,0.57831379641165558958f,0.81492632905652662156f, +0.57956455913940563285f,0.81403632970594841378f,0.58081395809576452649f, +0.81314441484925359394f,0.58206199034077543697f,0.81225058658520399302f, +0.58330865293769829094f,0.81135484701706372945f,0.58455394295301532637f, +0.81045719825259476821f,0.58579785745643886408f,0.80955764240405125864f, +0.58704039352091796911f,0.80865618158817498262f,0.58828154822264522306f, +0.80775281792619035848f,0.58952131864106394055f,0.80684755354379933401f, +0.59075970185887416442f,0.80594039057117627944f,0.59199669496204099239f, +0.80503133114296365758f,0.59323229503979979516f,0.80412037739826569549f, +0.59446649918466443197f,0.80320753148064494287f,0.59569930449243335691f, +0.80229279553811572168f,0.59693070806219639124f,0.80137617172314024039f, +0.59816070699634238395f,0.80045766219262282082f,0.59938929840056454079f, +0.79953726910790501314f,0.60061647938386897305f,0.79861499463476093297f, +0.60184224705858002658f,0.79769084094339115509f,0.60306659854034816437f, +0.79676481020841882774f,0.60428953094815596181f,0.79583690460888356633f, +0.60551104140432554512f,0.79490712632823701256f,0.60673112703452447558f, +0.79397547755433717231f,0.60794978496777363208f,0.79304196047944364167f, +0.60916701233645320634f,0.79210657730021238887f,0.61038280627630947528f, +0.79116933021769020318f,0.61159716392646190641f,0.79023022143731003197f, +0.61281008242940970820f,0.78928925316888565167f,0.61402155893103849138f, +0.78834642762660622761f,0.61523159058062681925f,0.78740174702903142911f, +0.61644017453085364622f,0.78645521359908576731f,0.61764730793780386886f, +0.78550682956405393220f,0.61885298796097631957f,0.78455659715557524159f, +0.62005721176328909561f,0.78360451860963820092f,0.62125997651108755271f, +0.78265059616657572938f,0.62246127937414996723f,0.78169483207105938671f, +0.62366111752569453053f,0.78073722857209448822f,0.62485948814238634341f, +0.77977778792301455368f,0.62605638840434352232f,0.77881651238147597827f, +0.62725181549514408275f,0.77785340420945314754f,0.62844576660183271155f, +0.77688846567323244230f,0.62963823891492698426f,0.77592169904340768660f, +0.63082922962842447046f,0.77495310659487393057f,0.63201873593980906207f, +0.77398269060682289844f,0.63320675505005719064f,0.77301045336273699338f, +0.63439328416364548779f,0.77203639715038452351f,0.63557832048855611440f, +0.77106052426181381776f,0.63676186123628419899f,0.77008283699334789674f, +0.63794390362184405507f,0.76910333764557969882f,0.63912444486377573138f, +0.76812202852336541881f,0.64030348218415167327f,0.76713891193582040007f, +0.64148101280858305095f,0.76615399019631291733f,0.64265703396622686494f, +0.76516726562245895860f,0.64383154288979138613f,0.76417874053611667406f, +0.64500453681554392737f,0.76318841726338138010f,0.64617601298331628357f, +0.76219629813457900891f,0.64734596863651205911f,0.76120238548426177871f, +0.64851440102211244110f,0.76020668165120242055f,0.64968130739068319368f, +0.75920918897838796102f,0.65084668499638087535f,0.75820990981301528144f, +0.65201053109695950027f,0.75720884650648456748f,0.65317284295377675551f, +0.75620600141439453523f,0.65433361783180044036f,0.75520137689653654700f, +0.65549285299961534967f,0.75419497531688917125f,0.65665054572942893607f, +0.75318679904361252042f,0.65780669329707863735f,0.75217685044904269986f, +0.65896129298203731661f,0.75116513190968636771f,0.66011434206742047870f, +0.75015164580621507273f,0.66126583783999226540f,0.74913639452345937020f, +0.66241577759017178373f,0.74811938045040360379f,0.66356415861203976725f, +0.74710060598018013245f,0.66471097820334479334f,0.74608007351006377927f, +0.66585623366550972246f,0.74505778544146594733f,0.66699992230363747137f, +0.74403374417992929057f,0.66814204142651845153f,0.74300795213512171866f, +0.66928258834663600929f,0.74198041172083106787f,0.67042156038017308717f, +0.74095112535495921691f,0.67155895484701833009f,0.73992009545951620275f, +0.67269476907077285777f,0.73888732446061511361f,0.67382900037875603783f, +0.73785281478846598269f,0.67496164610201192513f,0.73681656887736979300f, +0.67609270357531592310f,0.73577858916571359238f,0.67722217013718033485f, +0.73473887809596349907f,0.67835004312986146857f,0.73369743811466026084f, +0.67947631989936496666f,0.73265427167241281570f,0.68060099779545302212f, +0.73160938122389262972f,0.68172407417164970767f,0.73056276922782759087f, +0.68284554638524808112f,0.72951443814699701296f,0.68396541179731540350f, +0.72846439044822519637f,0.68508366777270035541f,0.72741262860237576593f, +0.68620031168003858824f,0.72635915508434600873f,0.68731534089175905233f, +0.72530397237306076796f,0.68842875278409043638f,0.72424708295146700276f, +0.68954054473706682948f,0.72318848930652745999f,0.69065071413453460458f, +0.72212819392921534511f,0.69175925836415774750f,0.72106619931450810501f, +0.69286617481742462932f,0.72000250796138165477f,0.69397146088965389055f, +0.71893712237280449351f,0.69507511398000088043f,0.71787004505573170920f, +0.69617713149146298601f,0.71680127852109953857f,0.69727751083088651551f, +0.71573082528381870571f,0.69837624940897280457f,0.71465868786276909308f, +0.69947334464028376733f,0.71358486878079352422f,0.70056879394324833576f, +0.71250937056469243469f,0.70166259474016845488f,0.71143219574521643356f, +0.70275474445722529993f,0.71035334685706241764f,0.70384524052448493858f, +0.70927282643886568891f,0.70493408037590488124f,0.70819063703319540259f, +0.70602126144933974317f,0.70710678118654757274f,0.70710678118654757274f, +0.70602126144933974317f,0.70819063703319540259f,0.70493408037590499227f, +0.70927282643886568891f,0.70384524052448493858f,0.71035334685706241764f, +0.70275474445722529993f,0.71143219574521643356f,0.70166259474016845488f, +0.71250937056469232367f,0.70056879394324844679f,0.71358486878079352422f, +0.69947334464028376733f,0.71465868786276909308f,0.69837624940897291559f, +0.71573082528381859468f,0.69727751083088662654f,0.71680127852109942754f, +0.69617713149146298601f,0.71787004505573170920f,0.69507511398000088043f, +0.71893712237280438249f,0.69397146088965400157f,0.72000250796138165477f, +0.69286617481742474034f,0.72106619931450810501f,0.69175925836415774750f, +0.72212819392921534511f,0.69065071413453460458f,0.72318848930652734897f, +0.68954054473706694051f,0.72424708295146689174f,0.68842875278409043638f, +0.72530397237306076796f,0.68731534089175905233f,0.72635915508434600873f, +0.68620031168003858824f,0.72741262860237576593f,0.68508366777270035541f, +0.72846439044822519637f,0.68396541179731551452f,0.72951443814699690193f, +0.68284554638524808112f,0.73056276922782759087f,0.68172407417164981869f, +0.73160938122389262972f,0.68060099779545302212f,0.73265427167241281570f, +0.67947631989936496666f,0.73369743811466026084f,0.67835004312986146857f, +0.73473887809596349907f,0.67722217013718044587f,0.73577858916571348136f, +0.67609270357531603413f,0.73681656887736979300f,0.67496164610201203615f, +0.73785281478846598269f,0.67382900037875614885f,0.73888732446061511361f, +0.67269476907077296879f,0.73992009545951609173f,0.67155895484701833009f, +0.74095112535495910588f,0.67042156038017308717f,0.74198041172083095685f, +0.66928258834663600929f,0.74300795213512171866f,0.66814204142651856255f, +0.74403374417992929057f,0.66699992230363747137f,0.74505778544146594733f, +0.66585623366550972246f,0.74608007351006366825f,0.66471097820334490436f, +0.74710060598018013245f,0.66356415861203987827f,0.74811938045040349277f, +0.66241577759017178373f,0.74913639452345925918f,0.66126583783999226540f, +0.75015164580621496171f,0.66011434206742047870f,0.75116513190968636771f, +0.65896129298203731661f,0.75217685044904269986f,0.65780669329707874837f, +0.75318679904361252042f,0.65665054572942904709f,0.75419497531688917125f, +0.65549285299961546070f,0.75520137689653654700f,0.65433361783180055138f, +0.75620600141439453523f,0.65317284295377686654f,0.75720884650648456748f, +0.65201053109695950027f,0.75820990981301528144f,0.65084668499638098638f, +0.75920918897838796102f,0.64968130739068319368f,0.76020668165120242055f, +0.64851440102211255212f,0.76120238548426177871f,0.64734596863651205911f, +0.76219629813457889789f,0.64617601298331639459f,0.76318841726338126907f, +0.64500453681554403840f,0.76417874053611667406f,0.64383154288979149715f, +0.76516726562245895860f,0.64265703396622686494f,0.76615399019631280630f, +0.64148101280858316198f,0.76713891193582040007f,0.64030348218415167327f, +0.76812202852336530778f,0.63912444486377573138f,0.76910333764557958780f, +0.63794390362184416610f,0.77008283699334789674f,0.63676186123628419899f, +0.77106052426181381776f,0.63557832048855622542f,0.77203639715038441249f, +0.63439328416364548779f,0.77301045336273688235f,0.63320675505005719064f, +0.77398269060682278742f,0.63201873593980906207f,0.77495310659487381955f, +0.63082922962842458148f,0.77592169904340757558f,0.62963823891492709528f, +0.77688846567323244230f,0.62844576660183271155f,0.77785340420945303652f, +0.62725181549514419377f,0.77881651238147586724f,0.62605638840434352232f, +0.77977778792301444266f,0.62485948814238645443f,0.78073722857209448822f, +0.62366111752569464155f,0.78169483207105938671f,0.62246127937415007825f, +0.78265059616657572938f,0.62125997651108766373f,0.78360451860963820092f, +0.62005721176328920663f,0.78455659715557524159f,0.61885298796097631957f, +0.78550682956405393220f,0.61764730793780397988f,0.78645521359908576731f, +0.61644017453085364622f,0.78740174702903131809f,0.61523159058062681925f, +0.78834642762660622761f,0.61402155893103849138f,0.78928925316888565167f, +0.61281008242940970820f,0.79023022143731003197f,0.61159716392646201744f, +0.79116933021769009216f,0.61038280627630947528f,0.79210657730021227785f, +0.60916701233645320634f,0.79304196047944364167f,0.60794978496777374311f, +0.79397547755433717231f,0.60673112703452447558f,0.79490712632823701256f, +0.60551104140432554512f,0.79583690460888345530f,0.60428953094815607283f, +0.79676481020841871672f,0.60306659854034827539f,0.79769084094339104407f, +0.60184224705858002658f,0.79861499463476082195f,0.60061647938386897305f, +0.79953726910790501314f,0.59938929840056454079f,0.80045766219262270980f, +0.59816070699634238395f,0.80137617172314012937f,0.59693070806219650226f, +0.80229279553811572168f,0.59569930449243346793f,0.80320753148064483184f, +0.59446649918466454299f,0.80412037739826569549f,0.59323229503979979516f, +0.80503133114296365758f,0.59199669496204099239f,0.80594039057117627944f, +0.59075970185887427544f,0.80684755354379922299f,0.58952131864106394055f, +0.80775281792619024746f,0.58828154822264533408f,0.80865618158817498262f, +0.58704039352091808013f,0.80955764240405125864f,0.58579785745643886408f, +0.81045719825259476821f,0.58455394295301532637f,0.81135484701706372945f, +0.58330865293769829094f,0.81225058658520388200f,0.58206199034077554799f, +0.81314441484925359394f,0.58081395809576452649f,0.81403632970594830276f, +0.57956455913940574387f,0.81492632905652662156f,0.57831379641165558958f, +0.81581441080673378075f,0.57706167285567955272f,0.81670057286682784525f, +0.57580819141784533866f,0.81758481315158371139f,0.57455335504771576360f, +0.81846712958029865792f,0.57329716669804231532f,0.81934752007679689800f, +0.57203962932475704850f,0.82022598256943468620f,0.57078074588696736669f, +0.82110251499110464835f,0.56952051934694725155f,0.82197711527924155472f, +0.56825895267013148970f,0.82284978137582631685f,0.56699604882510867832f, +0.82372051122739131657f,0.56573181078361323149f,0.82458930278502529099f, +0.56446624152051949608f,0.82545615400437744036f,0.56319934401383409117f, +0.82632106284566353427f,0.56193112124468946877f,0.82718402727366913130f, +0.56066157619733603124f,0.82804504525775579626f,0.55939071185913613604f, +0.82890411477186487499f,0.55811853122055610221f,0.82976123379452304540f, +0.55684503727516010407f,0.83061640030884620334f,0.55557023301960228867f, +0.83146961230254523567f,0.55429412145362011444f,0.83232086776792968408f, +0.55301670558002757883f,0.83317016470191318511f,0.55173798840470744675f, +0.83401750110601813315f,0.55045797293660481131f,0.83486287498638001026f, +0.54917666218771976627f,0.83570628435375260423f,0.54789405917310018967f, +0.83654772722351189440f,0.54661016691083486041f,0.83738720161566193578f, +0.54532498842204646383f,0.83822470555483796772f,0.54403852673088393122f, +0.83906023707031263115f,0.54275078486451600046f,0.83989379419599941023f, +0.54146176585312355556f,0.84072537497045796151f,0.54017147272989296525f, +0.84155497743689833268f,0.53887990853100842248f,0.84238259964318584760f, +0.53758707629564550512f,0.84320823964184543620f,0.53629297906596318235f, +0.84403189549006640835f,0.53499761988709726435f,0.84485356524970700587f, +0.53370100180715296379f,0.84567324698729906540f,0.53240312787719801246f, +0.84649093877405212627f,0.53110400115125500076f,0.84730663868585831544f, +0.52980362468629482731f,0.84812034480329712149f,0.52850200154222848337f, +0.84893205521163961347f,0.52719913478190139067f,0.84974176800085243766f, +0.52589502747108474168f,0.85054948126560336874f,0.52458968267846883826f, +0.85135519310526519554f,0.52328310347565643035f,0.85215890162391982887f, +0.52197529293715438925f,0.85296060493036363059f,0.52066625414036726838f, +0.85376030113811129940f,0.51935599016558953167f,0.85455798836540053376f, +0.51804450409599933636f,0.85535366473519602870f,0.51673179901764998423f, +0.85614732837519447184f,0.51541787801946314929f,0.85693897741782865118f, +0.51410274419322166128f,0.85772861000027211809f,0.51278640063356306644f, +0.85851622426444273994f,0.51146885043797052361f,0.85930181835700836235f, +0.51015009670676669806f,0.86008539042939025077f,0.50883014254310698909f, +0.86086693863776730939f,0.50750899105297087033f,0.86164646114308129921f, +0.50618664534515533937f,0.86242395611104050168f,0.50486310853126747933f, +0.86319942171212415971f,0.50353838372571757542f,0.86397285612158669643f, +0.50221247404571089934f,0.86474425751946237817f,0.50088538261124093687f, +0.86551362409056897818f,0.49955711254508183838f,0.86628095402451299467f, +0.49822766697278186854f,0.86704624551569264845f,0.49689704902265463549f, +0.86780949676330321196f,0.49556526182577248507f,0.86857070597134089507f, +0.49423230851595972846f,0.86932987134860673084f,0.49289819222978409341f, +0.87008699110871134952f,0.49156291610655006297f,0.87084206347007886428f, +0.49022648328829110387f,0.87159508665595109012f,0.48888889691976322727f, +0.87234605889439142956f,0.48755016014843605143f,0.87309497841829009079f, +0.48621027612448652899f,0.87384184346536675214f,0.48486924800079111986f, +0.87458665227817611321f,0.48352707893291874131f,0.87532940310411078144f, +0.48218377207912282989f,0.87607009419540660122f,0.48083933060033390294f, +0.87680872380914576247f,0.47949375766015300826f,0.87754529020726124156f, +0.47814705642484311987f,0.87827979165654146421f,0.47679923006332225466f, +0.87901222642863341417f,0.47545028174715586733f,0.87974259280004740713f, +0.47410021465055002254f,0.88047088905216075450f,0.47274903195034290171f, +0.88119711347122198219f,0.47139673682599780857f,0.88192126434835493853f, +0.47004333245959561971f,0.88264333997956279099f,0.46868882203582795665f, +0.88336333866573157891f,0.46733320874198852612f,0.88408125871263498752f, +0.46597649576796612569f,0.88479709843093778954f,0.46461868630623781584f, +0.88551085613619995307f,0.46325978355186026025f,0.88622253014888063838f, +0.46189979070246284243f,0.88693211879434208367f,0.46053871095824000514f, +0.88763962040285393496f,0.45917654752194414502f,0.88834503330959635470f, +0.45781330359887728587f,0.88904835585466457371f,0.45644898239688386221f, +0.88974958638307288794f,0.45508358712634383592f,0.89044872324475787817f, +0.45371712100016392544f,0.89114576479458318392f,0.45234958723377099998f, +0.89184070939234272313f,0.45098098904510380835f,0.89253355540276468894f, +0.44961132965460659516f,0.89322430119551532446f,0.44824061228521999700f, +0.89391294514520325265f,0.44686884016237432560f,0.89459948563138258493f, +0.44549601651398174074f,0.89528392103855758410f,0.44412214457042925586f, +0.89596624975618510689f,0.44274722756457013384f,0.89664647017868015499f, +0.44137126873171661501f,0.89732458070541831763f,0.43999427130963325583f, +0.89800057974073987932f,0.43861623853852771404f,0.89867446569395381673f, +0.43723717366104419835f,0.89934623697934146236f,0.43585707992225547480f, +0.90001589201616027935f,0.43447596056965570588f,0.90068342922864685907f, +0.43309381885315201277f,0.90134884704602202810f,0.43171065802505736997f, +0.90201214390249306874f,0.43032648134008261165f,0.90267331823725882600f, +0.42894129205532954829f,0.90333236849451181705f,0.42755509343028219593f, +0.90398929312344333820f,0.42616788872679961520f,0.90464409057824624050f, +0.42477968120910880589f,0.90529675931811881551f,0.42339047414379610279f, +0.90594729780726845902f,0.42200027079979979261f,0.90659570451491533483f, +0.42060907444840250902f,0.90724197791529592738f,0.41921688836322396066f, +0.90788611648766626150f,0.41782371582021238243f,0.90852811871630612117f, +0.41642956009763731906f,0.90916798309052226923f,0.41503442447608163146f, +0.90980570810465222209f,0.41363831223843455787f,0.91044129225806713634f, +0.41224122666988299857f,0.91107473405517624965f,0.41084317105790391089f, +0.91170603200542987832f,0.40944414869225764786f,0.91233518462332274801f, +0.40804416286497874333f,0.91296219042839810154f,0.40664321687036913966f, +0.91358704794525080750f,0.40524131400498986100f,0.91420975570353069095f, +0.40383845756765412993f,0.91483031223794608611f,0.40243465085941854120f, +0.91544871608826783316f,0.40102989718357578974f,0.91606496579933160973f, +0.39962419984564678810f,0.91667905992104270485f,0.39821756215337361651f, +0.91729099700837790632f,0.39680998741671041907f,0.91790077562139038569f, +0.39540147894781629834f,0.91850839432521225181f,0.39399204006104809883f, +0.91911385169005777040f,0.39258167407295152529f,0.91971714629122736095f, +0.39117038430225398171f,0.92031827670911048322f,0.38975817406985641123f, +0.92091724152918941204f,0.38834504669882630168f,0.92151403934204190183f, +0.38693100551438869283f,0.92210866874334507237f,0.38551605384391901543f, +0.92270112833387851747f,0.38410019501693504207f,0.92329141671952763559f, +0.38268343236508983729f,0.92387953251128673848f,0.38126576922216248722f, +0.92446547432526260391f,0.37984720892405110515f,0.92504924078267758425f, +0.37842775480876561511f,0.92563083050987271516f,0.37700741021641831496f, +0.92621024213831126826f,0.37558617848921732607f,0.92678747430458174872f, +0.37416406297145798909f,0.92736252565040111495f,0.37274106700951581406f, +0.92793539482261788720f,0.37131719395183759858f,0.92850608047321558924f, +0.36989244714893426691f,0.92907458125931574600f,0.36846682995337232125f, +0.92964089584318121418f,0.36704034571976723589f,0.93020502289221906889f, +0.36561299780477396482f,0.93076696107898371224f,0.36418478956707983629f, +0.93132670908118042608f,0.36275572436739722537f,0.93188426558166814750f, +0.36132580556845433906f,0.93243962926846235550f,0.35989503653498827740f, +0.93299279883473884567f,0.35846342063373654030f,0.93354377297883617270f, +0.35703096123343003310f,0.93409255040425887007f,0.35559766170478396274f, +0.93463912981968078064f,0.35416352542049051033f,0.93518350993894749923f, +0.35272855575521072646f,0.93572568948108036935f,0.35129275608556714827f, +0.93626566717027825959f,0.34985612979013502866f,0.93680344173592156043f, +0.34841868024943450921f,0.93733901191257495977f,0.34698041084592368133f, +0.93787237643998988545f,0.34554132496398914931f,0.93840353406310805795f, +0.34410142598993898044f,0.93893248353206448797f,0.34266071731199437833f, +0.93945922360218991898f,0.34121920232028241093f,0.93998375303401393577f, +0.33977688440682696225f,0.94050607059326829518f,0.33833376696554129381f, +0.94102617505088925753f,0.33688985339222005111f,0.94154406518302080631f, +0.33544514708453165852f,0.94205973977101731265f,0.33399965144200949307f, +0.94257319760144686605f,0.33255336986604422389f,0.94308443746609349478f, +0.33110630575987642921f,0.94359345816196038559f,0.32965846252858754806f, +0.94410025849127265918f,0.32820984357909266382f,0.94460483726148025685f, +0.32676045232013178898f,0.94510719328526060501f,0.32531029216226298173f, +0.94560732538052127971f,0.32385936651785296458f,0.94610523237040333733f, +0.32240767880107001897f,0.94660091308328353499f,0.32095523242787521445f, +0.94709436635277721717f,0.31950203081601574739f,0.94758559101774109124f, +0.31804807738501505998f,0.94807458592227622507f,0.31659337555616584581f, +0.94856134991573026749f,0.31513792875252244485f,0.94904588185270055689f, +0.31368174039889157312f,0.94952818059303667475f,0.31222481392182505067f, +0.95000824500184299914f,0.31076715274961147495f,0.95048607394948170235f, +0.30930876031226878231f,0.95096166631157508231f,0.30784964004153497763f, +0.95143502096900833820f,0.30638979537086108440f,0.95190613680793223494f, +0.30492922973540242948f,0.95237501271976587880f,0.30346794657201137113f, +0.95284164760119871573f,0.30200594931922819519f,0.95330604035419375109f, +0.30054324141727339903f,0.95376818988599032512f,0.29907982630804047508f, +0.95422809510910566733f,0.29761570743508630743f,0.95468575494133833814f, +0.29615088824362395536f,0.95514116830577067141f,0.29468537218051432669f, +0.95559433413077110586f,0.29321916269425868373f,0.95604525134999640557f, +0.29175226323498937298f,0.95649391890239499059f,0.29028467725446233105f, +0.95694033573220893540f,0.28881640820604947972f,0.95738450078897585627f, +0.28734745954472956653f,0.95782641302753290802f,0.28587783472708072630f, +0.95826607140801767226f,0.28440753721127182141f,0.95870347489587159906f, +0.28293657045705539188f,0.95913862246184189431f,0.28146493792575805193f, +0.95957151308198451733f,0.27999264308027338455f,0.96000214573766584625f, +0.27851968938505305973f,0.96043051941556578655f,0.27704608030609995106f, +0.96085663310767965850f,0.27557181931095825478f,0.96128048581132063966f, +0.27409690986870632878f,0.96170207652912254037f,0.27262135544994897662f, +0.96212140426904158019f,0.27114515952680806610f,0.96253846804435916340f, +0.26966832557291520178f,0.96295326687368387741f,0.26819085706340317632f, +0.96336579978095404631f,0.26671275747489842090f,0.96377606579543984022f, +0.26523403028551190141f,0.96418406395174571788f,0.26375467897483151347f, +0.96458979328981264700f,0.26227470702391358914f,0.96499325285492032478f, +0.26079411791527556952f,0.96539444169768939830f,0.25931291513288634576f, +0.96579335887408357397f,0.25783110216215893162f,0.96619000344541261516f, +0.25634868248994291395f,0.96658437447833311928f,0.25486565960451462720f, +0.96697647104485207059f,0.25338203699557027004f,0.96736629222232850545f, +0.25189781815421691258f,0.96775383709347551076f,0.25041300657296527987f, +0.96813910474636244441f,0.24892760574572025956f,0.96852209427441726675f, +0.24744161916777343557f,0.96890280477642887202f,0.24595505033579459497f, +0.96928123535654853171f,0.24446790274782420616f,0.96965738512429244800f, +0.24298017990326398197f,0.97003125319454397424f,0.24149188530286930243f, +0.97040283868755550234f,0.24000302244874149871f,0.97077214072895035013f, +0.23851359484431849944f,0.97113915844972509284f,0.23702360599436733679f, +0.97150389098625178352f,0.23553305940497545889f,0.97186633748027939639f, +0.23404195858354345794f,0.97222649707893626925f,0.23255030703877532794f, +0.97258436893473221296f,0.23105810828067127605f,0.97293995220556006576f, +0.22956536582051886852f,0.97329324605469824672f,0.22807208317088578653f, +0.97364424965081186603f,0.22657826384561011168f,0.97399296216795583359f, +0.22508391135979277653f,0.97433938278557585821f,0.22358902922979001504f, +0.97468351068851066810f,0.22209362097320359264f,0.97502534506699412020f, +0.22059769010887364526f,0.97536488511665686563f,0.21910124015686976984f, +0.97570213003852857003f,0.21760427463848366902f,0.97603707903903902388f, +0.21610679707621960333f,0.97636973133002114000f,0.21460881099378692483f, +0.97670008612871184184f,0.21311031991609136194f,0.97702814265775439484f, +0.21161132736922760866f,0.97735390014519996082f,0.21011183688046972118f, +0.97767735782450992943f,0.20861185197826345727f,0.97799851493455713936f, +0.20711137619221856032f,0.97831737071962765473f,0.20561041305309932237f, +0.97863392442942309657f,0.20410896609281700687f,0.97894817531906219710f, +0.20260703884442110567f,0.97926012264908202098f,0.20110463484209195606f, +0.97956976568544051887f,0.19960175762113105402f,0.97987710369951763756f, +0.19809841071795372680f,0.98018213596811731847f,0.19659459767008022335f, +0.98048486177346938497f,0.19509032201612833135f,0.98078528040323043058f, +0.19358558729580374602f,0.98108339115048659451f,0.19208039704989238183f, +0.98137919331375456089f,0.19057475482025279523f,0.98167268619698311305f, +0.18906866414980627589f,0.98196386910955524296f,0.18756212858252974129f, +0.98225274136628937249f,0.18605515166344663291f,0.98253930228744124076f, +0.18454773693861964423f,0.98282355119870523641f,0.18303988795514106180f, +0.98310548743121628501f,0.18153160826112513249f,0.98338511032155118130f, +0.18002290140569951471f,0.98366241921173025453f,0.17851377093899759019f, +0.98393741344921892278f,0.17700422041214886049f,0.98421009238692902521f, +0.17549425337727139751f,0.98448045538322093151f,0.17398387338746384989f, +0.98474850180190420801f,0.17247308399679603386f,0.98501423101223983814f, +0.17096188876030135595f,0.98527764238894122162f,0.16945029123396793125f, +0.98553873531217606185f,0.16793829497473122814f,0.98579750916756736512f, +0.16642590354046421508f,0.98605396334619543897f,0.16491312048997008866f, +0.98630809724459866938f,0.16339994938297322524f,0.98655991026477540817f, +0.16188639378011188130f,0.98680940181418541624f,0.16037245724292839566f, +0.98705657130575097380f,0.15885814333386139019f,0.98730141815785843473f, +0.15734345561623827581f,0.98754394179435922574f,0.15582839765426531597f, +0.98778414164457217783f,0.15431297301302024372f,0.98802201714328352633f, +0.15279718525844340760f,0.98825756773074946437f,0.15128103795733024994f, +0.98849079285269658701f,0.14976453467732162017f,0.98872169196032377858f, +0.14824767898689619749f,0.98895026451030298986f,0.14673047445536174793f, +0.98917650996478101444f,0.14521292465284751927f,0.98940042779138037687f, +0.14369503315029458212f,0.98962201746320077600f,0.14217680351944800288f, +0.98984127845882052821f,0.14065823933284923863f,0.99005821026229712256f, +0.13913934416382628401f,0.99027281236316910817f,0.13762012158648617710f, +0.99048508425645698239f,0.13610057517570620100f,0.99069502544266463406f, +0.13458070850712622324f,0.99090263542778000971f,0.13306052515713917561f, +0.99110791372327677884f,0.13154002870288328264f,0.99131085984611544415f, +0.13001922272223334631f,0.99151147331874389668f,0.12849811079379322432f, +0.99170975366909952520f,0.12697669649688597682f,0.99190570043060932726f, +0.12545498341154620592f,0.99209931314219179654f,0.12393297511851220083f, +0.99229059134825736699f,0.12241067519921627893f,0.99247953459870996706f, +0.12088808723577722237f,0.99266614244894801899f,0.11936521481099135467f, +0.99285041445986510489f,0.11784206150832501891f,0.99303235019785141002f, +0.11631863091190487725f,0.99321194923479450001f,0.11479492660651025027f, +0.99338921114808065305f,0.11327095217756436019f,0.99356413552059530403f, +0.11174671121112665639f,0.99373672194072459884f,0.11022220729388318428f, +0.99390697000235606051f,0.10869744401313867488f,0.99407487930487936634f, +0.10717242495680887049f,0.99424044945318790223f,0.10564715371341069916f, +0.99440368005767909576f,0.10412163387205472520f,0.99456457073425541537f, +0.10259586902243628126f,0.99472312110432570265f,0.10106986275482787718f, +0.99487933079480561638f,0.09954361866006944393f,0.99503319943811863180f, +0.09801714032956077016f,0.99518472667219681771f,0.09649043135525260662f, +0.99533391214048227980f,0.09496349532963906104f,0.99548075549192693856f, +0.09343633584574791151f,0.99562525638099430569f,0.09190895649713269611f, +0.99576741446765981713f,0.09038136087786501072f,0.99590722941741172125f, +0.08885355258252468358f,0.99604470090125196702f,0.08732553520619222576f, +0.99617982859569687015f,0.08579731234443987997f,0.99631261218277800129f, +0.08426888759332412659f,0.99644305135004263008f,0.08274026454937580266f, +0.99657114579055483539f,0.08121144680959238582f,0.99669689520289606044f, +0.07968243797143012563f,0.99682029929116566791f,0.07815324163279431524f, +0.99694135776498216117f,0.07662386139203161695f,0.99706007033948296225f, +0.07509430084792129145f,0.99717643673532618820f,0.07356456359966745406f, +0.99729045667869020697f,0.07203465324688941573f,0.99740212990127530279f, +0.07050457338961400866f,0.99751145614030345410f,0.06897432762826673225f, +0.99761843513851955478f,0.06744391956366410645f,0.99772306664419163624f, +0.06591335279700392957f,0.99782535041111164453f,0.06438263092985740954f, +0.99792528619859599548f,0.06285175756416142012f,0.99802287377148624081f, +0.06132073630220864768f,0.99811811290014917919f,0.05978957074664000698f, +0.99821100336047818846f,0.05825826450043573163f,0.99830154493389289261f, +0.05672682116690778292f,0.99838973740734016094f,0.05519524434969003135f, +0.99847558057329477421f,0.05366353765273067927f,0.99855907422975931365f, +0.05213170468028331672f,0.99864021818026527111f,0.05059974903689933717f, +0.99871901223387293811f,0.04906767432741812596f,0.99879545620517240501f, +0.04753548415695926094f,0.99886954991428356099f,0.04600318213091464381f, +0.99894129318685687124f,0.04447077185493874402f,0.99901068585407337697f, +0.04293825693494095902f,0.99907772775264536147f,0.04140564097707671171f, +0.99914241872481690532f,0.03987292758773984536f,0.99920475861836388631f, +0.03834012037355279123f,0.99926474728659442359f,0.03680722294135899131f, +0.99932238458834954375f,0.03527423889821394709f,0.99937767038800284780f, +0.03374117185137764235f,0.99943060455546173237f,0.03220802540830470378f, +0.99948118696616694567f,0.03067480317663658085f,0.99952941750109314256f, +0.02914150876419373953f,0.99957529604674921764f,0.02760814577896581953f, +0.99961882249517863830f,0.02607471782910403962f,0.99965999674395922270f, +0.02454122852291226384f,0.99969881869620424997f,0.02300768146883941032f, +0.99973528826056168306f,0.02147408027546960502f,0.99976940535121527898f, +0.01994042855151459750f,0.99980116988788425569f,0.01840672990580482019f, +0.99983058179582340319f,0.01687298794728177287f,0.99985764100582386060f, +0.01533920628498821985f,0.99988234745421256111f,0.01380538852806034895f, +0.99990470108285289808f,0.01227153828571994447f,0.99992470183914450299f, +0.01073765916726457208f,0.99994234967602391162f,0.00920375478205995995f, +0.99995764455196389786f,0.00766982873953107706f,0.99997058643097413988f, +0.00613588464915451517f,0.99998117528260110909f,0.00460192612044867198f, +0.99998941108192840321f,0.00306795676296613791f,0.99999529380957619118f, +0.00153398018628476615f,0.99999882345170187925f,1.00000000000000000000f, +0.00000000000000000000f,0.99998117528260110909f,0.00613588464915447527f, +0.99992470183914450299f,0.01227153828571992539f,0.99983058179582340319f, +0.01840672990580482019f,0.99969881869620424997f,0.02454122852291228812f, +0.99952941750109314256f,0.03067480317663662595f,0.99932238458834954375f, +0.03680722294135883171f,0.99907772775264536147f,0.04293825693494082024f, +0.99879545620517240501f,0.04906767432741801493f,0.99847558057329477421f, +0.05519524434968993420f,0.99811811290014917919f,0.06132073630220857829f, +0.99772306664419163624f,0.06744391956366405094f,0.99729045667869020697f, +0.07356456359966742631f,0.99682029929116566791f,0.07968243797143012563f, +0.99631261218277800129f,0.08579731234443989385f,0.99576741446765981713f, +0.09190895649713272386f,0.99518472667219692873f,0.09801714032956060363f, +0.99456457073425541537f,0.10412163387205458642f,0.99390697000235606051f, +0.11022220729388305938f,0.99321194923479450001f,0.11631863091190475235f, +0.99247953459870996706f,0.12241067519921619566f,0.99170975366909952520f, +0.12849811079379316880f,0.99090263542778000971f,0.13458070850712616773f, +0.99005821026229712256f,0.14065823933284921088f,0.98917650996478101444f, +0.14673047445536174793f,0.98825756773074946437f,0.15279718525844343535f, +0.98730141815785843473f,0.15885814333386144570f,0.98630809724459866938f, +0.16491312048996989437f,0.98527764238894122162f,0.17096188876030121717f, +0.98421009238692902521f,0.17700422041214874946f,0.98310548743121628501f, +0.18303988795514095078f,0.98196386910955524296f,0.18906866414980619262f, +0.98078528040323043058f,0.19509032201612824808f,0.97956976568544051887f, +0.20110463484209190055f,0.97831737071962765473f,0.20711137619221856032f, +0.97702814265775439484f,0.21311031991609136194f,0.97570213003852857003f, +0.21910124015686979759f,0.97433938278557585821f,0.22508391135979283204f, +0.97293995220556017678f,0.23105810828067110951f,0.97150389098625178352f, +0.23702360599436719801f,0.97003125319454397424f,0.24298017990326387094f, +0.96852209427441737777f,0.24892760574572014853f,0.96697647104485207059f, +0.25486565960451457169f,0.96539444169768939830f,0.26079411791527551401f, +0.96377606579543984022f,0.26671275747489836538f,0.96212140426904158019f, +0.27262135544994897662f,0.96043051941556578655f,0.27851968938505305973f, +0.95870347489587159906f,0.28440753721127187692f,0.95694033573220882438f, +0.29028467725446233105f,0.95514116830577078243f,0.29615088824362378883f, +0.95330604035419386211f,0.30200594931922808417f,0.95143502096900833820f, +0.30784964004153486661f,0.94952818059303667475f,0.31368174039889151761f, +0.94758559101774109124f,0.31950203081601569188f,0.94560732538052127971f, +0.32531029216226292622f,0.94359345816196038559f,0.33110630575987642921f, +0.94154406518302080631f,0.33688985339222005111f,0.93945922360218991898f, +0.34266071731199437833f,0.93733901191257495977f,0.34841868024943456472f, +0.93518350993894761025f,0.35416352542049034380f,0.93299279883473895669f, +0.35989503653498811087f,0.93076696107898371224f,0.36561299780477385379f, +0.92850608047321558924f,0.37131719395183754306f,0.92621024213831137928f, +0.37700741021641825945f,0.92387953251128673848f,0.38268343236508978178f, +0.92151403934204190183f,0.38834504669882624617f,0.91911385169005777040f, +0.39399204006104809883f,0.91667905992104270485f,0.39962419984564678810f, +0.91420975570353069095f,0.40524131400498986100f,0.91170603200542987832f, +0.41084317105790391089f,0.90916798309052238025f,0.41642956009763715253f, +0.90659570451491533483f,0.42200027079979968159f,0.90398929312344333820f, +0.42755509343028208491f,0.90134884704602202810f,0.43309381885315195726f, +0.89867446569395381673f,0.43861623853852765853f,0.89596624975618521791f, +0.44412214457042920035f,0.89322430119551532446f,0.44961132965460653965f, +0.89044872324475787817f,0.45508358712634383592f,0.88763962040285393496f, +0.46053871095824000514f,0.88479709843093778954f,0.46597649576796618121f, +0.88192126434835504956f,0.47139673682599764204f,0.87901222642863352519f, +0.47679923006332208812f,0.87607009419540660122f,0.48218377207912271887f, +0.87309497841829009079f,0.48755016014843599592f,0.87008699110871146054f, +0.49289819222978403790f,0.86704624551569264845f,0.49822766697278181303f, +0.86397285612158669643f,0.50353838372571757542f,0.86086693863776730939f, +0.50883014254310698909f,0.85772861000027211809f,0.51410274419322166128f, +0.85455798836540053376f,0.51935599016558964269f,0.85135519310526519554f, +0.52458968267846894928f,0.84812034480329723252f,0.52980362468629460526f, +0.84485356524970711689f,0.53499761988709715332f,0.84155497743689844370f, +0.54017147272989285423f,0.83822470555483807875f,0.54532498842204646383f, +0.83486287498638001026f,0.55045797293660481131f,0.83146961230254523567f, +0.55557023301960217765f,0.82804504525775579626f,0.56066157619733603124f, +0.82458930278502529099f,0.56573181078361312046f,0.82110251499110464835f, +0.57078074588696725566f,0.81758481315158371139f,0.57580819141784533866f, +0.81403632970594841378f,0.58081395809576452649f,0.81045719825259476821f, +0.58579785745643886408f,0.80684755354379933401f,0.59075970185887416442f, +0.80320753148064494287f,0.59569930449243335691f,0.79953726910790501314f, +0.60061647938386897305f,0.79583690460888356633f,0.60551104140432554512f, +0.79210657730021238887f,0.61038280627630947528f,0.78834642762660622761f, +0.61523159058062681925f,0.78455659715557524159f,0.62005721176328909561f, +0.78073722857209448822f,0.62485948814238634341f,0.77688846567323244230f, +0.62963823891492698426f,0.77301045336273699338f,0.63439328416364548779f, +0.76910333764557969882f,0.63912444486377573138f,0.76516726562245895860f, +0.64383154288979138613f,0.76120238548426177871f,0.64851440102211244110f, +0.75720884650648456748f,0.65317284295377675551f,0.75318679904361252042f, +0.65780669329707863735f,0.74913639452345937020f,0.66241577759017178373f, +0.74505778544146594733f,0.66699992230363747137f,0.74095112535495921691f, +0.67155895484701833009f,0.73681656887736979300f,0.67609270357531592310f, +0.73265427167241281570f,0.68060099779545302212f,0.72846439044822519637f, +0.68508366777270035541f,0.72424708295146700276f,0.68954054473706682948f, +0.72000250796138165477f,0.69397146088965389055f,0.71573082528381870571f, +0.69837624940897280457f,0.71143219574521643356f,0.70275474445722529993f, +0.70710678118654757274f,0.70710678118654757274f,0.70275474445722529993f, +0.71143219574521643356f,0.69837624940897291559f,0.71573082528381859468f, +0.69397146088965400157f,0.72000250796138165477f,0.68954054473706694051f, +0.72424708295146689174f,0.68508366777270035541f,0.72846439044822519637f, +0.68060099779545302212f,0.73265427167241281570f,0.67609270357531603413f, +0.73681656887736979300f,0.67155895484701833009f,0.74095112535495910588f, +0.66699992230363747137f,0.74505778544146594733f,0.66241577759017178373f, +0.74913639452345925918f,0.65780669329707874837f,0.75318679904361252042f, +0.65317284295377686654f,0.75720884650648456748f,0.64851440102211255212f, +0.76120238548426177871f,0.64383154288979149715f,0.76516726562245895860f, +0.63912444486377573138f,0.76910333764557958780f,0.63439328416364548779f, +0.77301045336273688235f,0.62963823891492709528f,0.77688846567323244230f, +0.62485948814238645443f,0.78073722857209448822f,0.62005721176328920663f, +0.78455659715557524159f,0.61523159058062681925f,0.78834642762660622761f, +0.61038280627630947528f,0.79210657730021227785f,0.60551104140432554512f, +0.79583690460888345530f,0.60061647938386897305f,0.79953726910790501314f, +0.59569930449243346793f,0.80320753148064483184f,0.59075970185887427544f, +0.80684755354379922299f,0.58579785745643886408f,0.81045719825259476821f, +0.58081395809576452649f,0.81403632970594830276f,0.57580819141784533866f, +0.81758481315158371139f,0.57078074588696736669f,0.82110251499110464835f, +0.56573181078361323149f,0.82458930278502529099f,0.56066157619733603124f, +0.82804504525775579626f,0.55557023301960228867f,0.83146961230254523567f, +0.55045797293660481131f,0.83486287498638001026f,0.54532498842204646383f, +0.83822470555483796772f,0.54017147272989296525f,0.84155497743689833268f, +0.53499761988709726435f,0.84485356524970700587f,0.52980362468629482731f, +0.84812034480329712149f,0.52458968267846883826f,0.85135519310526519554f, +0.51935599016558953167f,0.85455798836540053376f,0.51410274419322166128f, +0.85772861000027211809f,0.50883014254310698909f,0.86086693863776730939f, +0.50353838372571757542f,0.86397285612158669643f,0.49822766697278186854f, +0.86704624551569264845f,0.49289819222978409341f,0.87008699110871134952f, +0.48755016014843605143f,0.87309497841829009079f,0.48218377207912282989f, +0.87607009419540660122f,0.47679923006332225466f,0.87901222642863341417f, +0.47139673682599780857f,0.88192126434835493853f,0.46597649576796612569f, +0.88479709843093778954f,0.46053871095824000514f,0.88763962040285393496f, +0.45508358712634383592f,0.89044872324475787817f,0.44961132965460659516f, +0.89322430119551532446f,0.44412214457042925586f,0.89596624975618510689f, +0.43861623853852771404f,0.89867446569395381673f,0.43309381885315201277f, +0.90134884704602202810f,0.42755509343028219593f,0.90398929312344333820f, +0.42200027079979979261f,0.90659570451491533483f,0.41642956009763731906f, +0.90916798309052226923f,0.41084317105790391089f,0.91170603200542987832f, +0.40524131400498986100f,0.91420975570353069095f,0.39962419984564678810f, +0.91667905992104270485f,0.39399204006104809883f,0.91911385169005777040f, +0.38834504669882630168f,0.92151403934204190183f,0.38268343236508983729f, +0.92387953251128673848f,0.37700741021641831496f,0.92621024213831126826f, +0.37131719395183759858f,0.92850608047321558924f,0.36561299780477396482f, +0.93076696107898371224f,0.35989503653498827740f,0.93299279883473884567f, +0.35416352542049051033f,0.93518350993894749923f,0.34841868024943450921f, +0.93733901191257495977f,0.34266071731199437833f,0.93945922360218991898f, +0.33688985339222005111f,0.94154406518302080631f,0.33110630575987642921f, +0.94359345816196038559f,0.32531029216226298173f,0.94560732538052127971f, +0.31950203081601574739f,0.94758559101774109124f,0.31368174039889157312f, +0.94952818059303667475f,0.30784964004153497763f,0.95143502096900833820f, +0.30200594931922819519f,0.95330604035419375109f,0.29615088824362395536f, +0.95514116830577067141f,0.29028467725446233105f,0.95694033573220893540f, +0.28440753721127182141f,0.95870347489587159906f,0.27851968938505305973f, +0.96043051941556578655f,0.27262135544994897662f,0.96212140426904158019f, +0.26671275747489842090f,0.96377606579543984022f,0.26079411791527556952f, +0.96539444169768939830f,0.25486565960451462720f,0.96697647104485207059f, +0.24892760574572025956f,0.96852209427441726675f,0.24298017990326398197f, +0.97003125319454397424f,0.23702360599436733679f,0.97150389098625178352f, +0.23105810828067127605f,0.97293995220556006576f,0.22508391135979277653f, +0.97433938278557585821f,0.21910124015686976984f,0.97570213003852857003f, +0.21311031991609136194f,0.97702814265775439484f,0.20711137619221856032f, +0.97831737071962765473f,0.20110463484209195606f,0.97956976568544051887f, +0.19509032201612833135f,0.98078528040323043058f,0.18906866414980627589f, +0.98196386910955524296f,0.18303988795514106180f,0.98310548743121628501f, +0.17700422041214886049f,0.98421009238692902521f,0.17096188876030135595f, +0.98527764238894122162f,0.16491312048997008866f,0.98630809724459866938f, +0.15885814333386139019f,0.98730141815785843473f,0.15279718525844340760f, +0.98825756773074946437f,0.14673047445536174793f,0.98917650996478101444f, +0.14065823933284923863f,0.99005821026229712256f,0.13458070850712622324f, +0.99090263542778000971f,0.12849811079379322432f,0.99170975366909952520f, +0.12241067519921627893f,0.99247953459870996706f,0.11631863091190487725f, +0.99321194923479450001f,0.11022220729388318428f,0.99390697000235606051f, +0.10412163387205472520f,0.99456457073425541537f,0.09801714032956077016f, +0.99518472667219681771f,0.09190895649713269611f,0.99576741446765981713f, +0.08579731234443987997f,0.99631261218277800129f,0.07968243797143012563f, +0.99682029929116566791f,0.07356456359966745406f,0.99729045667869020697f, +0.06744391956366410645f,0.99772306664419163624f,0.06132073630220864768f, +0.99811811290014917919f,0.05519524434969003135f,0.99847558057329477421f, +0.04906767432741812596f,0.99879545620517240501f,0.04293825693494095902f, +0.99907772775264536147f,0.03680722294135899131f,0.99932238458834954375f, +0.03067480317663658085f,0.99952941750109314256f,0.02454122852291226384f, +0.99969881869620424997f,0.01840672990580482019f,0.99983058179582340319f, +0.01227153828571994447f,0.99992470183914450299f,0.00613588464915451517f, +0.99998117528260110909f,1.00000000000000000000f,0.00000000000000000000f, +0.99969881869620424997f,0.02454122852291228812f,0.99879545620517240501f, +0.04906767432741801493f,0.99729045667869020697f,0.07356456359966742631f, +0.99518472667219692873f,0.09801714032956060363f,0.99247953459870996706f, +0.12241067519921619566f,0.98917650996478101444f,0.14673047445536174793f, +0.98527764238894122162f,0.17096188876030121717f,0.98078528040323043058f, +0.19509032201612824808f,0.97570213003852857003f,0.21910124015686979759f, +0.97003125319454397424f,0.24298017990326387094f,0.96377606579543984022f, +0.26671275747489836538f,0.95694033573220882438f,0.29028467725446233105f, +0.94952818059303667475f,0.31368174039889151761f,0.94154406518302080631f, +0.33688985339222005111f,0.93299279883473895669f,0.35989503653498811087f, +0.92387953251128673848f,0.38268343236508978178f,0.91420975570353069095f, +0.40524131400498986100f,0.90398929312344333820f,0.42755509343028208491f, +0.89322430119551532446f,0.44961132965460653965f,0.88192126434835504956f, +0.47139673682599764204f,0.87008699110871146054f,0.49289819222978403790f, +0.85772861000027211809f,0.51410274419322166128f,0.84485356524970711689f, +0.53499761988709715332f,0.83146961230254523567f,0.55557023301960217765f, +0.81758481315158371139f,0.57580819141784533866f,0.80320753148064494287f, +0.59569930449243335691f,0.78834642762660622761f,0.61523159058062681925f, +0.77301045336273699338f,0.63439328416364548779f,0.75720884650648456748f, +0.65317284295377675551f,0.74095112535495921691f,0.67155895484701833009f, +0.72424708295146700276f,0.68954054473706682948f,0.70710678118654757274f, +0.70710678118654757274f,0.68954054473706694051f,0.72424708295146689174f, +0.67155895484701833009f,0.74095112535495910588f,0.65317284295377686654f, +0.75720884650648456748f,0.63439328416364548779f,0.77301045336273688235f, +0.61523159058062681925f,0.78834642762660622761f,0.59569930449243346793f, +0.80320753148064483184f,0.57580819141784533866f,0.81758481315158371139f, +0.55557023301960228867f,0.83146961230254523567f,0.53499761988709726435f, +0.84485356524970700587f,0.51410274419322166128f,0.85772861000027211809f, +0.49289819222978409341f,0.87008699110871134952f,0.47139673682599780857f, +0.88192126434835493853f,0.44961132965460659516f,0.89322430119551532446f, +0.42755509343028219593f,0.90398929312344333820f,0.40524131400498986100f, +0.91420975570353069095f,0.38268343236508983729f,0.92387953251128673848f, +0.35989503653498827740f,0.93299279883473884567f,0.33688985339222005111f, +0.94154406518302080631f,0.31368174039889157312f,0.94952818059303667475f, +0.29028467725446233105f,0.95694033573220893540f,0.26671275747489842090f, +0.96377606579543984022f,0.24298017990326398197f,0.97003125319454397424f, +0.21910124015686976984f,0.97570213003852857003f,0.19509032201612833135f, +0.98078528040323043058f,0.17096188876030135595f,0.98527764238894122162f, +0.14673047445536174793f,0.98917650996478101444f,0.12241067519921627893f, +0.99247953459870996706f,0.09801714032956077016f,0.99518472667219681771f, +0.07356456359966745406f,0.99729045667869020697f,0.04906767432741812596f, +0.99879545620517240501f,0.02454122852291226384f,0.99969881869620424997f, +1.00000000000000000000f,0.00000000000000000000f,0.99518472667219692873f, +0.09801714032956060363f,0.98078528040323043058f,0.19509032201612824808f, +0.95694033573220882438f,0.29028467725446233105f,0.92387953251128673848f, +0.38268343236508978178f,0.88192126434835504956f,0.47139673682599764204f, +0.83146961230254523567f,0.55557023301960217765f,0.77301045336273699338f, +0.63439328416364548779f,0.70710678118654757274f,0.70710678118654757274f, +0.63439328416364548779f,0.77301045336273688235f,0.55557023301960228867f, +0.83146961230254523567f,0.47139673682599780857f,0.88192126434835493853f, +0.38268343236508983729f,0.92387953251128673848f,0.29028467725446233105f, +0.95694033573220893540f,0.19509032201612833135f,0.98078528040323043058f, +0.09801714032956077016f,0.99518472667219681771f,1.00000000000000000000f, +0.00000000000000000000f,0.92387953251128673848f,0.38268343236508978178f, +0.70710678118654757274f,0.70710678118654757274f,0.38268343236508983729f, +0.92387953251128673848f,}; + +float32_t rearranged_twiddle_stride2_4096[2728]={ +1.00000000000000000000f,0.00000000000000000000f,0.99999529380957619118f, +0.00306795676296597614f,0.99998117528260110909f,0.00613588464915447527f, +0.99995764455196389786f,0.00920375478205981944f,0.99992470183914450299f, +0.01227153828571992539f,0.99988234745421256111f,0.01533920628498810015f, +0.99983058179582340319f,0.01840672990580482019f,0.99976940535121527898f, +0.02147408027546950787f,0.99969881869620424997f,0.02454122852291228812f, +0.99961882249517863830f,0.02760814577896573974f,0.99952941750109314256f, +0.03067480317663662595f,0.99943060455546173237f,0.03374117185137757990f, +0.99932238458834954375f,0.03680722294135883171f,0.99920475861836388631f, +0.03987292758773981066f,0.99907772775264536147f,0.04293825693494082024f, +0.99894129318685687124f,0.04600318213091462299f,0.99879545620517240501f, +0.04906767432741801493f,0.99864021818026527111f,0.05213170468028332366f, +0.99847558057329477421f,0.05519524434968993420f,0.99830154493389289261f, +0.05825826450043575244f,0.99811811290014917919f,0.06132073630220857829f, +0.99792528619859599548f,0.06438263092985746505f,0.99772306664419163624f, +0.06744391956366405094f,0.99751145614030345410f,0.07050457338961385600f, +0.99729045667869020697f,0.07356456359966742631f,0.99706007033948296225f, +0.07662386139203149205f,0.99682029929116566791f,0.07968243797143012563f, +0.99657114579055483539f,0.08274026454937569164f,0.99631261218277800129f, +0.08579731234443989385f,0.99604470090125196702f,0.08885355258252460031f, +0.99576741446765981713f,0.09190895649713272386f,0.99548075549192693856f, +0.09496349532963899165f,0.99518472667219692873f,0.09801714032956060363f, +0.99487933079480561638f,0.10106986275482782167f,0.99456457073425541537f, +0.10412163387205458642f,0.99424044945318790223f,0.10717242495680884273f, +0.99390697000235606051f,0.11022220729388305938f,0.99356413552059530403f, +0.11327095217756434631f,0.99321194923479450001f,0.11631863091190475235f, +0.99285041445986510489f,0.11936521481099135467f,0.99247953459870996706f, +0.12241067519921619566f,0.99209931314219179654f,0.12545498341154623367f, +0.99170975366909952520f,0.12849811079379316880f,0.99131085984611544415f, +0.13154002870288311611f,0.99090263542778000971f,0.13458070850712616773f, +0.99048508425645709341f,0.13762012158648603832f,0.99005821026229712256f, +0.14065823933284921088f,0.98962201746320088702f,0.14369503315029447110f, +0.98917650996478101444f,0.14673047445536174793f,0.98872169196032377858f, +0.14976453467732150915f,0.98825756773074946437f,0.15279718525844343535f, +0.98778414164457217783f,0.15582839765426523271f,0.98730141815785843473f, +0.15885814333386144570f,0.98680940181418552726f,0.16188639378011182579f, +0.98630809724459866938f,0.16491312048996989437f,0.98579750916756747614f, +0.16793829497473117263f,0.98527764238894122162f,0.17096188876030121717f, +0.98474850180190420801f,0.17398387338746382214f,0.98421009238692902521f, +0.17700422041214874946f,0.98366241921173025453f,0.18002290140569951471f, +0.98310548743121628501f,0.18303988795514095078f,0.98253930228744124076f, +0.18605515166344663291f,0.98196386910955524296f,0.18906866414980619262f, +0.98137919331375456089f,0.19208039704989243734f,0.98078528040323043058f, +0.19509032201612824808f,0.98018213596811742949f,0.19809841071795356027f, +0.97956976568544051887f,0.20110463484209190055f,0.97894817531906219710f, +0.20410896609281686809f,0.97831737071962765473f,0.20711137619221856032f, +0.97767735782450992943f,0.21011183688046961016f,0.97702814265775439484f, +0.21311031991609136194f,0.97636973133002114000f,0.21610679707621952006f, +0.97570213003852857003f,0.21910124015686979759f,0.97502534506699412020f, +0.22209362097320350937f,0.97433938278557585821f,0.22508391135979283204f, +0.97364424965081197705f,0.22807208317088573102f,0.97293995220556017678f, +0.23105810828067110951f,0.97222649707893626925f,0.23404195858354343018f, +0.97150389098625178352f,0.23702360599436719801f,0.97077214072895035013f, +0.24000302244874149871f,0.97003125319454397424f,0.24298017990326387094f, +0.96928123535654853171f,0.24595505033579459497f,0.96852209427441737777f, +0.24892760574572014853f,0.96775383709347551076f,0.25189781815421696809f, +0.96697647104485207059f,0.25486565960451457169f,0.96619000344541250413f, +0.25783110216215898713f,0.96539444169768939830f,0.26079411791527551401f, +0.96458979328981275803f,0.26375467897483134694f,0.96377606579543984022f, +0.26671275747489836538f,0.96295326687368387741f,0.26966832557291509076f, +0.96212140426904158019f,0.27262135544994897662f,0.96128048581132063966f, +0.27557181931095814376f,0.96043051941556578655f,0.27851968938505305973f, +0.95957151308198451733f,0.28146493792575794091f,0.95870347489587159906f, +0.28440753721127187692f,0.95782641302753290802f,0.28734745954472951102f, +0.95694033573220882438f,0.29028467725446233105f,0.95604525134999640557f, +0.29321916269425862822f,0.95514116830577078243f,0.29615088824362378883f, +0.95422809510910566733f,0.29907982630804047508f,0.95330604035419386211f, +0.30200594931922808417f,0.95237501271976587880f,0.30492922973540237397f, +0.95143502096900833820f,0.30784964004153486661f,0.95048607394948170235f, +0.31076715274961147495f,0.94952818059303667475f,0.31368174039889151761f, +0.94856134991573026749f,0.31659337555616584581f,0.94758559101774109124f, +0.31950203081601569188f,0.94660091308328353499f,0.32240767880106985244f, +0.94560732538052127971f,0.32531029216226292622f,0.94460483726148025685f, +0.32820984357909249729f,0.94359345816196038559f,0.33110630575987642921f, +0.94257319760144686605f,0.33399965144200938205f,0.94154406518302080631f, +0.33688985339222005111f,0.94050607059326829518f,0.33977688440682685123f, +0.93945922360218991898f,0.34266071731199437833f,0.93840353406310805795f, +0.34554132496398909380f,0.93733901191257495977f,0.34841868024943456472f, +0.93626566717027825959f,0.35129275608556709276f,0.93518350993894761025f, +0.35416352542049034380f,0.93409255040425887007f,0.35703096123342997759f, +0.93299279883473895669f,0.35989503653498811087f,0.93188426558166814750f, +0.36275572436739722537f,0.93076696107898371224f,0.36561299780477385379f, +0.92964089584318121418f,0.36846682995337232125f,0.92850608047321558924f, +0.37131719395183754306f,0.92736252565040111495f,0.37416406297145793358f, +0.92621024213831137928f,0.37700741021641825945f,0.92504924078267758425f, +0.37984720892405116066f,0.92387953251128673848f,0.38268343236508978178f, +0.92270112833387862850f,0.38551605384391884890f,0.92151403934204190183f, +0.38834504669882624617f,0.92031827670911059425f,0.39117038430225387069f, +0.91911385169005777040f,0.39399204006104809883f,0.91790077562139049672f, +0.39680998741671030805f,0.91667905992104270485f,0.39962419984564678810f, +0.91544871608826783316f,0.40243465085941843018f,0.91420975570353069095f, +0.40524131400498986100f,0.91296219042839821256f,0.40804416286497868782f, +0.91170603200542987832f,0.41084317105790391089f,0.91044129225806724737f, +0.41363831223843450235f,0.90916798309052238025f,0.41642956009763715253f, +0.90788611648766626150f,0.41921688836322390515f,0.90659570451491533483f, +0.42200027079979968159f,0.90529675931811881551f,0.42477968120910880589f, +0.90398929312344333820f,0.42755509343028208491f,0.90267331823725882600f, +0.43032648134008261165f,0.90134884704602202810f,0.43309381885315195726f, +0.90001589201616016833f,0.43585707992225547480f,0.89867446569395381673f, +0.43861623853852765853f,0.89732458070541831763f,0.44137126873171667052f, +0.89596624975618521791f,0.44412214457042920035f,0.89459948563138269595f, +0.44686884016237415906f,0.89322430119551532446f,0.44961132965460653965f, +0.89184070939234272313f,0.45234958723377088896f,0.89044872324475787817f, +0.45508358712634383592f,0.88904835585466457371f,0.45781330359887717485f, +0.88763962040285393496f,0.46053871095824000514f,0.88622253014888063838f, +0.46325978355186014923f,0.88479709843093778954f,0.46597649576796618121f, +0.88336333866573157891f,0.46868882203582790114f,0.88192126434835504956f, +0.47139673682599764204f,0.88047088905216075450f,0.47410021465054996703f, +0.87901222642863352519f,0.47679923006332208812f,0.87754529020726135258f, +0.47949375766015295275f,0.87607009419540660122f,0.48218377207912271887f, +0.87458665227817611321f,0.48486924800079106435f,0.87309497841829009079f, +0.48755016014843599592f,0.87159508665595097909f,0.49022648328829115938f, +0.87008699110871146054f,0.49289819222978403790f,0.86857070597134089507f, +0.49556526182577254058f,0.86704624551569264845f,0.49822766697278181303f, +0.86551362409056908920f,0.50088538261124071482f,0.86397285612158669643f, +0.50353838372571757542f,0.86242395611104050168f,0.50618664534515522835f, +0.86086693863776730939f,0.50883014254310698909f,0.85930181835700847337f, +0.51146885043797030157f,0.85772861000027211809f,0.51410274419322166128f, +0.85614732837519447184f,0.51673179901764987321f,0.85455798836540053376f, +0.51935599016558964269f,0.85296060493036363059f,0.52197529293715438925f, +0.85135519310526519554f,0.52458968267846894928f,0.84974176800085254868f, +0.52719913478190127964f,0.84812034480329723252f,0.52980362468629460526f, +0.84649093877405212627f,0.53240312787719790144f,0.84485356524970711689f, +0.53499761988709715332f,0.84320823964184543620f,0.53758707629564539410f, +0.84155497743689844370f,0.54017147272989285423f,0.83989379419599952126f, +0.54275078486451588944f,0.83822470555483807875f,0.54532498842204646383f, +0.83654772722351200542f,0.54789405917310018967f,0.83486287498638001026f, +0.55045797293660481131f,0.83317016470191318511f,0.55301670558002746780f, +0.83146961230254523567f,0.55557023301960217765f,0.82976123379452304540f, +0.55811853122055610221f,0.82804504525775579626f,0.56066157619733603124f, +0.82632106284566353427f,0.56319934401383409117f,0.82458930278502529099f, +0.56573181078361312046f,0.82284978137582642788f,0.56825895267013148970f, +0.82110251499110464835f,0.57078074588696725566f,0.81934752007679700903f, +0.57329716669804220430f,0.81758481315158371139f,0.57580819141784533866f, +0.81581441080673378075f,0.57831379641165558958f,0.81403632970594841378f, +0.58081395809576452649f,0.81225058658520399302f,0.58330865293769829094f, +0.81045719825259476821f,0.58579785745643886408f,0.80865618158817498262f, +0.58828154822264522306f,0.80684755354379933401f,0.59075970185887416442f, +0.80503133114296365758f,0.59323229503979979516f,0.80320753148064494287f, +0.59569930449243335691f,0.80137617172314024039f,0.59816070699634238395f, +0.79953726910790501314f,0.60061647938386897305f,0.79769084094339115509f, +0.60306659854034816437f,0.79583690460888356633f,0.60551104140432554512f, +0.79397547755433717231f,0.60794978496777363208f,0.79210657730021238887f, +0.61038280627630947528f,0.79023022143731003197f,0.61281008242940970820f, +0.78834642762660622761f,0.61523159058062681925f,0.78645521359908576731f, +0.61764730793780386886f,0.78455659715557524159f,0.62005721176328909561f, +0.78265059616657572938f,0.62246127937414996723f,0.78073722857209448822f, +0.62485948814238634341f,0.77881651238147597827f,0.62725181549514408275f, +0.77688846567323244230f,0.62963823891492698426f,0.77495310659487393057f, +0.63201873593980906207f,0.77301045336273699338f,0.63439328416364548779f, +0.77106052426181381776f,0.63676186123628419899f,0.76910333764557969882f, +0.63912444486377573138f,0.76713891193582040007f,0.64148101280858305095f, +0.76516726562245895860f,0.64383154288979138613f,0.76318841726338138010f, +0.64617601298331628357f,0.76120238548426177871f,0.64851440102211244110f, +0.75920918897838796102f,0.65084668499638087535f,0.75720884650648456748f, +0.65317284295377675551f,0.75520137689653654700f,0.65549285299961534967f, +0.75318679904361252042f,0.65780669329707863735f,0.75116513190968636771f, +0.66011434206742047870f,0.74913639452345937020f,0.66241577759017178373f, +0.74710060598018013245f,0.66471097820334479334f,0.74505778544146594733f, +0.66699992230363747137f,0.74300795213512171866f,0.66928258834663600929f, +0.74095112535495921691f,0.67155895484701833009f,0.73888732446061511361f, +0.67382900037875603783f,0.73681656887736979300f,0.67609270357531592310f, +0.73473887809596349907f,0.67835004312986146857f,0.73265427167241281570f, +0.68060099779545302212f,0.73056276922782759087f,0.68284554638524808112f, +0.72846439044822519637f,0.68508366777270035541f,0.72635915508434600873f, +0.68731534089175905233f,0.72424708295146700276f,0.68954054473706682948f, +0.72212819392921534511f,0.69175925836415774750f,0.72000250796138165477f, +0.69397146088965389055f,0.71787004505573170920f,0.69617713149146298601f, +0.71573082528381870571f,0.69837624940897280457f,0.71358486878079352422f, +0.70056879394324833576f,0.71143219574521643356f,0.70275474445722529993f, +0.70927282643886568891f,0.70493408037590488124f,0.70710678118654757274f, +0.70710678118654757274f,0.70493408037590499227f,0.70927282643886568891f, +0.70275474445722529993f,0.71143219574521643356f,0.70056879394324844679f, +0.71358486878079352422f,0.69837624940897291559f,0.71573082528381859468f, +0.69617713149146298601f,0.71787004505573170920f,0.69397146088965400157f, +0.72000250796138165477f,0.69175925836415774750f,0.72212819392921534511f, +0.68954054473706694051f,0.72424708295146689174f,0.68731534089175905233f, +0.72635915508434600873f,0.68508366777270035541f,0.72846439044822519637f, +0.68284554638524808112f,0.73056276922782759087f,0.68060099779545302212f, +0.73265427167241281570f,0.67835004312986146857f,0.73473887809596349907f, +0.67609270357531603413f,0.73681656887736979300f,0.67382900037875614885f, +0.73888732446061511361f,0.67155895484701833009f,0.74095112535495910588f, +0.66928258834663600929f,0.74300795213512171866f,0.66699992230363747137f, +0.74505778544146594733f,0.66471097820334490436f,0.74710060598018013245f, +0.66241577759017178373f,0.74913639452345925918f,0.66011434206742047870f, +0.75116513190968636771f,0.65780669329707874837f,0.75318679904361252042f, +0.65549285299961546070f,0.75520137689653654700f,0.65317284295377686654f, +0.75720884650648456748f,0.65084668499638098638f,0.75920918897838796102f, +0.64851440102211255212f,0.76120238548426177871f,0.64617601298331639459f, +0.76318841726338126907f,0.64383154288979149715f,0.76516726562245895860f, +0.64148101280858316198f,0.76713891193582040007f,0.63912444486377573138f, +0.76910333764557958780f,0.63676186123628419899f,0.77106052426181381776f, +0.63439328416364548779f,0.77301045336273688235f,0.63201873593980906207f, +0.77495310659487381955f,0.62963823891492709528f,0.77688846567323244230f, +0.62725181549514419377f,0.77881651238147586724f,0.62485948814238645443f, +0.78073722857209448822f,0.62246127937415007825f,0.78265059616657572938f, +0.62005721176328920663f,0.78455659715557524159f,0.61764730793780397988f, +0.78645521359908576731f,0.61523159058062681925f,0.78834642762660622761f, +0.61281008242940970820f,0.79023022143731003197f,0.61038280627630947528f, +0.79210657730021227785f,0.60794978496777374311f,0.79397547755433717231f, +0.60551104140432554512f,0.79583690460888345530f,0.60306659854034827539f, +0.79769084094339104407f,0.60061647938386897305f,0.79953726910790501314f, +0.59816070699634238395f,0.80137617172314012937f,0.59569930449243346793f, +0.80320753148064483184f,0.59323229503979979516f,0.80503133114296365758f, +0.59075970185887427544f,0.80684755354379922299f,0.58828154822264533408f, +0.80865618158817498262f,0.58579785745643886408f,0.81045719825259476821f, +0.58330865293769829094f,0.81225058658520388200f,0.58081395809576452649f, +0.81403632970594830276f,0.57831379641165558958f,0.81581441080673378075f, +0.57580819141784533866f,0.81758481315158371139f,0.57329716669804231532f, +0.81934752007679689800f,0.57078074588696736669f,0.82110251499110464835f, +0.56825895267013148970f,0.82284978137582631685f,0.56573181078361323149f, +0.82458930278502529099f,0.56319934401383409117f,0.82632106284566353427f, +0.56066157619733603124f,0.82804504525775579626f,0.55811853122055610221f, +0.82976123379452304540f,0.55557023301960228867f,0.83146961230254523567f, +0.55301670558002757883f,0.83317016470191318511f,0.55045797293660481131f, +0.83486287498638001026f,0.54789405917310018967f,0.83654772722351189440f, +0.54532498842204646383f,0.83822470555483796772f,0.54275078486451600046f, +0.83989379419599941023f,0.54017147272989296525f,0.84155497743689833268f, +0.53758707629564550512f,0.84320823964184543620f,0.53499761988709726435f, +0.84485356524970700587f,0.53240312787719801246f,0.84649093877405212627f, +0.52980362468629482731f,0.84812034480329712149f,0.52719913478190139067f, +0.84974176800085243766f,0.52458968267846883826f,0.85135519310526519554f, +0.52197529293715438925f,0.85296060493036363059f,0.51935599016558953167f, +0.85455798836540053376f,0.51673179901764998423f,0.85614732837519447184f, +0.51410274419322166128f,0.85772861000027211809f,0.51146885043797052361f, +0.85930181835700836235f,0.50883014254310698909f,0.86086693863776730939f, +0.50618664534515533937f,0.86242395611104050168f,0.50353838372571757542f, +0.86397285612158669643f,0.50088538261124093687f,0.86551362409056897818f, +0.49822766697278186854f,0.86704624551569264845f,0.49556526182577248507f, +0.86857070597134089507f,0.49289819222978409341f,0.87008699110871134952f, +0.49022648328829110387f,0.87159508665595109012f,0.48755016014843605143f, +0.87309497841829009079f,0.48486924800079111986f,0.87458665227817611321f, +0.48218377207912282989f,0.87607009419540660122f,0.47949375766015300826f, +0.87754529020726124156f,0.47679923006332225466f,0.87901222642863341417f, +0.47410021465055002254f,0.88047088905216075450f,0.47139673682599780857f, +0.88192126434835493853f,0.46868882203582795665f,0.88336333866573157891f, +0.46597649576796612569f,0.88479709843093778954f,0.46325978355186026025f, +0.88622253014888063838f,0.46053871095824000514f,0.88763962040285393496f, +0.45781330359887728587f,0.88904835585466457371f,0.45508358712634383592f, +0.89044872324475787817f,0.45234958723377099998f,0.89184070939234272313f, +0.44961132965460659516f,0.89322430119551532446f,0.44686884016237432560f, +0.89459948563138258493f,0.44412214457042925586f,0.89596624975618510689f, +0.44137126873171661501f,0.89732458070541831763f,0.43861623853852771404f, +0.89867446569395381673f,0.43585707992225547480f,0.90001589201616027935f, +0.43309381885315201277f,0.90134884704602202810f,0.43032648134008261165f, +0.90267331823725882600f,0.42755509343028219593f,0.90398929312344333820f, +0.42477968120910880589f,0.90529675931811881551f,0.42200027079979979261f, +0.90659570451491533483f,0.41921688836322396066f,0.90788611648766626150f, +0.41642956009763731906f,0.90916798309052226923f,0.41363831223843455787f, +0.91044129225806713634f,0.41084317105790391089f,0.91170603200542987832f, +0.40804416286497874333f,0.91296219042839810154f,0.40524131400498986100f, +0.91420975570353069095f,0.40243465085941854120f,0.91544871608826783316f, +0.39962419984564678810f,0.91667905992104270485f,0.39680998741671041907f, +0.91790077562139038569f,0.39399204006104809883f,0.91911385169005777040f, +0.39117038430225398171f,0.92031827670911048322f,0.38834504669882630168f, +0.92151403934204190183f,0.38551605384391901543f,0.92270112833387851747f, +0.38268343236508983729f,0.92387953251128673848f,0.37984720892405110515f, +0.92504924078267758425f,0.37700741021641831496f,0.92621024213831126826f, +0.37416406297145798909f,0.92736252565040111495f,0.37131719395183759858f, +0.92850608047321558924f,0.36846682995337232125f,0.92964089584318121418f, +0.36561299780477396482f,0.93076696107898371224f,0.36275572436739722537f, +0.93188426558166814750f,0.35989503653498827740f,0.93299279883473884567f, +0.35703096123343003310f,0.93409255040425887007f,0.35416352542049051033f, +0.93518350993894749923f,0.35129275608556714827f,0.93626566717027825959f, +0.34841868024943450921f,0.93733901191257495977f,0.34554132496398914931f, +0.93840353406310805795f,0.34266071731199437833f,0.93945922360218991898f, +0.33977688440682696225f,0.94050607059326829518f,0.33688985339222005111f, +0.94154406518302080631f,0.33399965144200949307f,0.94257319760144686605f, +0.33110630575987642921f,0.94359345816196038559f,0.32820984357909266382f, +0.94460483726148025685f,0.32531029216226298173f,0.94560732538052127971f, +0.32240767880107001897f,0.94660091308328353499f,0.31950203081601574739f, +0.94758559101774109124f,0.31659337555616584581f,0.94856134991573026749f, +0.31368174039889157312f,0.94952818059303667475f,0.31076715274961147495f, +0.95048607394948170235f,0.30784964004153497763f,0.95143502096900833820f, +0.30492922973540242948f,0.95237501271976587880f,0.30200594931922819519f, +0.95330604035419375109f,0.29907982630804047508f,0.95422809510910566733f, +0.29615088824362395536f,0.95514116830577067141f,0.29321916269425868373f, +0.95604525134999640557f,0.29028467725446233105f,0.95694033573220893540f, +0.28734745954472956653f,0.95782641302753290802f,0.28440753721127182141f, +0.95870347489587159906f,0.28146493792575805193f,0.95957151308198451733f, +0.27851968938505305973f,0.96043051941556578655f,0.27557181931095825478f, +0.96128048581132063966f,0.27262135544994897662f,0.96212140426904158019f, +0.26966832557291520178f,0.96295326687368387741f,0.26671275747489842090f, +0.96377606579543984022f,0.26375467897483151347f,0.96458979328981264700f, +0.26079411791527556952f,0.96539444169768939830f,0.25783110216215893162f, +0.96619000344541261516f,0.25486565960451462720f,0.96697647104485207059f, +0.25189781815421691258f,0.96775383709347551076f,0.24892760574572025956f, +0.96852209427441726675f,0.24595505033579459497f,0.96928123535654853171f, +0.24298017990326398197f,0.97003125319454397424f,0.24000302244874149871f, +0.97077214072895035013f,0.23702360599436733679f,0.97150389098625178352f, +0.23404195858354345794f,0.97222649707893626925f,0.23105810828067127605f, +0.97293995220556006576f,0.22807208317088578653f,0.97364424965081186603f, +0.22508391135979277653f,0.97433938278557585821f,0.22209362097320359264f, +0.97502534506699412020f,0.21910124015686976984f,0.97570213003852857003f, +0.21610679707621960333f,0.97636973133002114000f,0.21311031991609136194f, +0.97702814265775439484f,0.21011183688046972118f,0.97767735782450992943f, +0.20711137619221856032f,0.97831737071962765473f,0.20410896609281700687f, +0.97894817531906219710f,0.20110463484209195606f,0.97956976568544051887f, +0.19809841071795372680f,0.98018213596811731847f,0.19509032201612833135f, +0.98078528040323043058f,0.19208039704989238183f,0.98137919331375456089f, +0.18906866414980627589f,0.98196386910955524296f,0.18605515166344663291f, +0.98253930228744124076f,0.18303988795514106180f,0.98310548743121628501f, +0.18002290140569951471f,0.98366241921173025453f,0.17700422041214886049f, +0.98421009238692902521f,0.17398387338746384989f,0.98474850180190420801f, +0.17096188876030135595f,0.98527764238894122162f,0.16793829497473122814f, +0.98579750916756736512f,0.16491312048997008866f,0.98630809724459866938f, +0.16188639378011188130f,0.98680940181418541624f,0.15885814333386139019f, +0.98730141815785843473f,0.15582839765426531597f,0.98778414164457217783f, +0.15279718525844340760f,0.98825756773074946437f,0.14976453467732162017f, +0.98872169196032377858f,0.14673047445536174793f,0.98917650996478101444f, +0.14369503315029458212f,0.98962201746320077600f,0.14065823933284923863f, +0.99005821026229712256f,0.13762012158648617710f,0.99048508425645698239f, +0.13458070850712622324f,0.99090263542778000971f,0.13154002870288328264f, +0.99131085984611544415f,0.12849811079379322432f,0.99170975366909952520f, +0.12545498341154620592f,0.99209931314219179654f,0.12241067519921627893f, +0.99247953459870996706f,0.11936521481099135467f,0.99285041445986510489f, +0.11631863091190487725f,0.99321194923479450001f,0.11327095217756436019f, +0.99356413552059530403f,0.11022220729388318428f,0.99390697000235606051f, +0.10717242495680887049f,0.99424044945318790223f,0.10412163387205472520f, +0.99456457073425541537f,0.10106986275482787718f,0.99487933079480561638f, +0.09801714032956077016f,0.99518472667219681771f,0.09496349532963906104f, +0.99548075549192693856f,0.09190895649713269611f,0.99576741446765981713f, +0.08885355258252468358f,0.99604470090125196702f,0.08579731234443987997f, +0.99631261218277800129f,0.08274026454937580266f,0.99657114579055483539f, +0.07968243797143012563f,0.99682029929116566791f,0.07662386139203161695f, +0.99706007033948296225f,0.07356456359966745406f,0.99729045667869020697f, +0.07050457338961400866f,0.99751145614030345410f,0.06744391956366410645f, +0.99772306664419163624f,0.06438263092985740954f,0.99792528619859599548f, +0.06132073630220864768f,0.99811811290014917919f,0.05825826450043573163f, +0.99830154493389289261f,0.05519524434969003135f,0.99847558057329477421f, +0.05213170468028331672f,0.99864021818026527111f,0.04906767432741812596f, +0.99879545620517240501f,0.04600318213091464381f,0.99894129318685687124f, +0.04293825693494095902f,0.99907772775264536147f,0.03987292758773984536f, +0.99920475861836388631f,0.03680722294135899131f,0.99932238458834954375f, +0.03374117185137764235f,0.99943060455546173237f,0.03067480317663658085f, +0.99952941750109314256f,0.02760814577896581953f,0.99961882249517863830f, +0.02454122852291226384f,0.99969881869620424997f,0.02147408027546960502f, +0.99976940535121527898f,0.01840672990580482019f,0.99983058179582340319f, +0.01533920628498821985f,0.99988234745421256111f,0.01227153828571994447f, +0.99992470183914450299f,0.00920375478205995995f,0.99995764455196389786f, +0.00613588464915451517f,0.99998117528260110909f,0.00306795676296613791f, +0.99999529380957619118f,0.00000000000000006123f,1.00000000000000000000f, +-0.00306795676296601561f,0.99999529380957619118f,-0.00613588464915439287f, +0.99998117528260110909f,-0.00920375478205983678f,0.99995764455196389786f, +-0.01227153828571982304f,0.99992470183914450299f,-0.01533920628498809842f, +0.99988234745421256111f,-0.01840672990580469529f,0.99983058179582340319f, +-0.02147408027546948359f,0.99976940535121527898f,-0.02454122852291214241f, +0.99969881869620424997f,-0.02760814577896569810f,0.99961882249517863830f, +-0.03067480317663645942f,0.99952941750109314256f,-0.03374117185137751745f, +0.99943060455546173237f,-0.03680722294135886641f,0.99932238458834954375f, +-0.03987292758773972740f,0.99920475861836388631f,-0.04293825693494083412f, +0.99907772775264536147f,-0.04600318213091451891f,0.99894129318685687124f, +-0.04906767432741800800f,0.99879545620517240501f,-0.05213170468028319182f, +0.99864021818026527111f,-0.05519524434968991339f,0.99847558057329477421f, +-0.05825826450043560673f,0.99830154493389289261f,-0.06132073630220852972f, +0.99811811290014917919f,-0.06438263092985728464f,0.99792528619859599548f, +-0.06744391956366398155f,0.99772306664419163624f,-0.07050457338961389764f, +0.99751145614030345410f,-0.07356456359966732916f,0.99729045667869020697f, +-0.07662386139203150592f,0.99706007033948296225f,-0.07968243797143001461f, +0.99682029929116577893f,-0.08274026454937567776f,0.99657114579055483539f, +-0.08579731234443975507f,0.99631261218277800129f,-0.08885355258252455868f, +0.99604470090125196702f,-0.09190895649713257121f,0.99576741446765981713f, +-0.09496349532963895002f,0.99548075549192693856f,-0.09801714032956064526f, +0.99518472667219692873f,-0.10106986275482775228f,0.99487933079480561638f, +-0.10412163387205460030f,0.99456457073425541537f,-0.10717242495680875947f, +0.99424044945318790223f,-0.11022220729388305938f,0.99390697000235606051f, +-0.11327095217756423529f,0.99356413552059530403f,-0.11631863091190475235f, +0.99321194923479450001f,-0.11936521481099122977f,0.99285041445986510489f, +-0.12241067519921615403f,0.99247953459870996706f,-0.12545498341154606714f, +0.99209931314219179654f,-0.12849811079379311329f,0.99170975366909952520f, +-0.13154002870288314386f,0.99131085984611544415f,-0.13458070850712611222f, +0.99090263542778000971f,-0.13762012158648606608f,0.99048508425645698239f, +-0.14065823933284912761f,0.99005821026229712256f,-0.14369503315029444335f, +0.98962201746320088702f,-0.14673047445536163691f,0.98917650996478101444f, +-0.14976453467732150915f,0.98872169196032377858f,-0.15279718525844329657f, +0.98825756773074946437f,-0.15582839765426520495f,0.98778414164457217783f, +-0.15885814333386127917f,0.98730141815785843473f,-0.16188639378011177028f, +0.98680940181418552726f,-0.16491312048996994988f,0.98630809724459866938f, +-0.16793829497473108936f,0.98579750916756747614f,-0.17096188876030124493f, +0.98527764238894122162f,-0.17398387338746371111f,0.98474850180190420801f, +-0.17700422041214874946f,0.98421009238692902521f,-0.18002290140569940369f, +0.98366241921173025453f,-0.18303988795514092303f,0.98310548743121628501f, +-0.18605515166344649414f,0.98253930228744124076f,-0.18906866414980616486f, +0.98196386910955524296f,-0.19208039704989227081f,0.98137919331375456089f, +-0.19509032201612819257f,0.98078528040323043058f,-0.19809841071795361578f, +0.98018213596811742949f,-0.20110463484209181728f,0.97956976568544051887f, +-0.20410896609281689584f,0.97894817531906219710f,-0.20711137619221844930f, +0.97831737071962765473f,-0.21011183688046961016f,0.97767735782450992943f, +-0.21311031991609125091f,0.97702814265775439484f,-0.21610679707621949230f, +0.97636973133002114000f,-0.21910124015686965881f,0.97570213003852857003f, +-0.22209362097320348162f,0.97502534506699412020f,-0.22508391135979266551f, +0.97433938278557585821f,-0.22807208317088567551f,0.97364424965081197705f, +-0.23105810828067113727f,0.97293995220556017678f,-0.23404195858354331916f, +0.97222649707893638027f,-0.23702360599436722577f,0.97150389098625178352f, +-0.24000302244874138768f,0.97077214072895035013f,-0.24298017990326387094f, +0.97003125319454397424f,-0.24595505033579448395f,0.96928123535654853171f, +-0.24892760574572012078f,0.96852209427441737777f,-0.25189781815421680156f, +0.96775383709347551076f,-0.25486565960451451618f,0.96697647104485207059f, +-0.25783110216215882060f,0.96619000344541261516f,-0.26079411791527545850f, +0.96539444169768939830f,-0.26375467897483140245f,0.96458979328981275803f, +-0.26671275747489830987f,0.96377606579543984022f,-0.26966832557291509076f, +0.96295326687368387741f,-0.27262135544994886560f,0.96212140426904158019f, +-0.27557181931095814376f,0.96128048581132063966f,-0.27851968938505294870f, +0.96043051941556589757f,-0.28146493792575794091f,0.95957151308198451733f, +-0.28440753721127171039f,0.95870347489587159906f,-0.28734745954472945551f, +0.95782641302753290802f,-0.29028467725446216452f,0.95694033573220893540f, +-0.29321916269425857271f,0.95604525134999651659f,-0.29615088824362384434f, +0.95514116830577067141f,-0.29907982630804036406f,0.95422809510910566733f, +-0.30200594931922808417f,0.95330604035419386211f,-0.30492922973540226295f, +0.95237501271976587880f,-0.30784964004153486661f,0.95143502096900833820f, +-0.31076715274961136393f,0.95048607394948181337f,-0.31368174039889140658f, +0.94952818059303667475f,-0.31659337555616573479f,0.94856134991573037851f, +-0.31950203081601563637f,0.94758559101774120226f,-0.32240767880106985244f, +0.94660091308328353499f,-0.32531029216226287071f,0.94560732538052139073f, +-0.32820984357909255280f,0.94460483726148025685f,-0.33110630575987631818f, +0.94359345816196038559f,-0.33399965144200938205f,0.94257319760144686605f, +-0.33688985339221994009f,0.94154406518302080631f,-0.33977688440682685123f, +0.94050607059326829518f,-0.34266071731199426731f,0.93945922360218991898f, +-0.34554132496398903829f,0.93840353406310816897f,-0.34841868024943439819f, +0.93733901191257495977f,-0.35129275608556703725f,0.93626566717027825959f, +-0.35416352542049039931f,0.93518350993894761025f,-0.35703096123342992207f, +0.93409255040425898109f,-0.35989503653498816638f,0.93299279883473884567f, +-0.36275572436739711435f,0.93188426558166814750f,-0.36561299780477385379f, +0.93076696107898371224f,-0.36846682995337221023f,0.92964089584318132520f, +-0.37131719395183748755f,0.92850608047321558924f,-0.37416406297145787807f, +0.92736252565040111495f,-0.37700741021641820394f,0.92621024213831137928f, +-0.37984720892405099413f,0.92504924078267769527f,-0.38268343236508972627f, +0.92387953251128673848f,-0.38551605384391890441f,0.92270112833387851747f, +-0.38834504669882619066f,0.92151403934204201285f,-0.39117038430225387069f, +0.92031827670911059425f,-0.39399204006104798781f,0.91911385169005777040f, +-0.39680998741671030805f,0.91790077562139049672f,-0.39962419984564667708f, +0.91667905992104270485f,-0.40243465085941843018f,0.91544871608826783316f, +-0.40524131400498974998f,0.91420975570353069095f,-0.40804416286497863231f, +0.91296219042839821256f,-0.41084317105790379987f,0.91170603200542987832f, +-0.41363831223843450235f,0.91044129225806724737f,-0.41642956009763698599f, +0.90916798309052249127f,-0.41921688836322407168f,0.90788611648766615048f, +-0.42200027079979968159f,0.90659570451491533483f,-0.42477968120910869487f, +0.90529675931811881551f,-0.42755509343028186287f,0.90398929312344344922f, +-0.43032648134008272267f,0.90267331823725871498f,-0.43309381885315190175f, +0.90134884704602202810f,-0.43585707992225536378f,0.90001589201616027935f, +-0.43861623853852738097f,0.89867446569395392775f,-0.44137126873171672603f, +0.89732458070541831763f,-0.44412214457042914484f,0.89596624975618521791f, +-0.44686884016237399253f,0.89459948563138280697f,-0.44961132965460670619f, +0.89322430119551521344f,-0.45234958723377088896f,0.89184070939234272313f, +-0.45508358712634372489f,0.89044872324475798919f,-0.45781330359887700832f, +0.88904835585466468473f,-0.46053871095824006066f,0.88763962040285393496f, +-0.46325978355186014923f,0.88622253014888063838f,-0.46597649576796601467f, +0.88479709843093790056f,-0.46868882203582767909f,0.88336333866573168994f, +-0.47139673682599769755f,0.88192126434835504956f,-0.47410021465054991152f, +0.88047088905216086552f,-0.47679923006332192159f,0.87901222642863352519f, +-0.47949375766015311928f,0.87754529020726124156f,-0.48218377207912271887f, +0.87607009419540660122f,-0.48486924800079100883f,0.87458665227817622423f, +-0.48755016014843571837f,0.87309497841829020182f,-0.49022648328829121489f, +0.87159508665595097909f,-0.49289819222978398239f,0.87008699110871146054f, +-0.49556526182577237405f,0.86857070597134100609f,-0.49822766697278159098f, +0.86704624551569275948f,-0.50088538261124082585f,0.86551362409056908920f, +-0.50353838372571746440f,0.86397285612158680745f,-0.50618664534515511733f, +0.86242395611104061270f,-0.50883014254310710012f,0.86086693863776719837f, +-0.51146885043797041259f,0.85930181835700847337f,-0.51410274419322155026f, +0.85772861000027211809f,-0.51673179901764965116f,0.85614732837519458286f, +-0.51935599016558964269f,0.85455798836540053376f,-0.52197529293715427823f, +0.85296060493036374162f,-0.52458968267846872724f,0.85135519310526519554f, +-0.52719913478190105760f,0.84974176800085265970f,-0.52980362468629471628f, +0.84812034480329723252f,-0.53240312787719790144f,0.84649093877405212627f, +-0.53499761988709704230f,0.84485356524970722791f,-0.53758707629564561614f, +0.84320823964184532517f,-0.54017147272989285423f,0.84155497743689844370f, +-0.54275078486451577842f,0.83989379419599952126f,-0.54532498842204624179f, +0.83822470555483818977f,-0.54789405917310018967f,0.83654772722351200542f, +-0.55045797293660470029f,0.83486287498638012128f,-0.55301670558002735678f, +0.83317016470191329613f,-0.55557023301960195560f,0.83146961230254534669f, +-0.55811853122055610221f,0.82976123379452304540f,-0.56066157619733592021f, +0.82804504525775579626f,-0.56319934401383386913f,0.82632106284566364529f, +-0.56573181078361323149f,0.82458930278502517996f,-0.56825895267013148970f, +0.82284978137582631685f,-0.57078074588696714464f,0.82110251499110475937f, +-0.57329716669804198226f,0.81934752007679712005f,-0.57580819141784533866f, +0.81758481315158371139f,-0.57831379641165547856f,0.81581441080673378075f, +-0.58081395809576441547f,0.81403632970594852480f,-0.58330865293769840196f, +0.81225058658520388200f,-0.58579785745643886408f,0.81045719825259476821f, +-0.58828154822264522306f,0.80865618158817509364f,-0.59075970185887405339f, +0.80684755354379944503f,-0.59323229503979990618f,0.80503133114296354655f, +-0.59569930449243335691f,0.80320753148064494287f,-0.59816070699634216190f, +0.80137617172314024039f,-0.60061647938386875101f,0.79953726910790523519f, +-0.60306659854034827539f,0.79769084094339104407f,-0.60551104140432543410f, +0.79583690460888356633f,-0.60794978496777352106f,0.79397547755433728334f, +-0.61038280627630958630f,0.79210657730021227785f,-0.61281008242940970820f, +0.79023022143731003197f,-0.61523159058062670823f,0.78834642762660633863f, +-0.61764730793780375784f,0.78645521359908587833f,-0.62005721176328920663f, +0.78455659715557513056f,-0.62246127937414996723f,0.78265059616657572938f, +-0.62485948814238623239f,0.78073722857209459924f,-0.62725181549514386070f, +0.77881651238147608929f,-0.62963823891492709528f,0.77688846567323244230f, +-0.63201873593980895105f,0.77495310659487393057f,-0.63439328416364537677f, +0.77301045336273710440f,-0.63676186123628431002f,0.77106052426181370674f, +-0.63912444486377573138f,0.76910333764557958780f,-0.64148101280858305095f, +0.76713891193582040007f,-0.64383154288979127511f,0.76516726562245906962f, +-0.64617601298331639459f,0.76318841726338115805f,-0.64851440102211244110f, +0.76120238548426188974f,-0.65084668499638076433f,0.75920918897838807204f, +-0.65317284295377653347f,0.75720884650648467851f,-0.65549285299961546070f, +0.75520137689653643598f,-0.65780669329707852633f,0.75318679904361252042f, +-0.66011434206742036768f,0.75116513190968658975f,-0.66241577759017189475f, +0.74913639452345925918f,-0.66471097820334490436f,0.74710060598018013245f, +-0.66699992230363736034f,0.74505778544146605835f,-0.66928258834663589827f, +0.74300795213512182968f,-0.67155895484701844111f,0.74095112535495899486f, +-0.67382900037875603783f,0.73888732446061522463f,-0.67609270357531581208f, +0.73681656887737001504f,-0.67835004312986124653f,0.73473887809596372112f, +-0.68060099779545302212f,0.73265427167241281570f,-0.68284554638524797010f, +0.73056276922782759087f,-0.68508366777270024439f,0.72846439044822530740f, +-0.68731534089175916336f,0.72635915508434589771f,-0.68954054473706694051f, +0.72424708295146689174f,-0.69175925836415763648f,0.72212819392921545614f, +-0.69397146088965377952f,0.72000250796138176579f,-0.69617713149146298601f, +0.71787004505573170920f,-0.69837624940897280457f,0.71573082528381870571f, +-0.70056879394324822474f,0.71358486878079363525f,-0.70275474445722507788f, +0.71143219574521665560f,-0.70493408037590488124f,0.70927282643886557789f, +-0.70710678118654746172f,0.70710678118654757274f,-0.70927282643886546687f, +0.70493408037590510329f,-0.71143219574521654458f,0.70275474445722518890f, +-0.71358486878079352422f,0.70056879394324833576f,-0.71573082528381859468f, +0.69837624940897291559f,-0.71787004505573159818f,0.69617713149146309703f, +-0.72000250796138165477f,0.69397146088965389055f,-0.72212819392921523409f, +0.69175925836415785852f,-0.72424708295146678072f,0.68954054473706705153f, +-0.72635915508434578669f,0.68731534089175927438f,-0.72846439044822519637f, +0.68508366777270035541f,-0.73056276922782747985f,0.68284554638524808112f, +-0.73265427167241270467f,0.68060099779545324417f,-0.73473887809596349907f, +0.67835004312986135755f,-0.73681656887736979300f,0.67609270357531592310f, +-0.73888732446061511361f,0.67382900037875614885f,-0.74095112535495888384f, +0.67155895484701855214f,-0.74300795213512171866f,0.66928258834663600929f, +-0.74505778544146594733f,0.66699992230363758239f,-0.74710060598018002143f, +0.66471097820334501538f,-0.74913639452345914815f,0.66241577759017200577f, +-0.75116513190968636771f,0.66011434206742047870f,-0.75318679904361240940f, +0.65780669329707874837f,-0.75520137689653643598f,0.65549285299961557172f, +-0.75720884650648467851f,0.65317284295377664449f,-0.75920918897838796102f, +0.65084668499638098638f,-0.76120238548426166769f,0.64851440102211255212f, +-0.76318841726338115805f,0.64617601298331661663f,-0.76516726562245895860f, +0.64383154288979138613f,-0.76713891193582040007f,0.64148101280858316198f, +-0.76910333764557947678f,0.63912444486377584241f,-0.77106052426181359571f, +0.63676186123628442104f,-0.77301045336273699338f,0.63439328416364548779f, +-0.77495310659487381955f,0.63201873593980906207f,-0.77688846567323233128f, +0.62963823891492720630f,-0.77881651238147597827f,0.62725181549514408275f, +-0.78073722857209448822f,0.62485948814238634341f,-0.78265059616657561836f, +0.62246127937415007825f,-0.78455659715557501954f,0.62005721176328942867f, +-0.78645521359908576731f,0.61764730793780386886f,-0.78834642762660622761f, +0.61523159058062693028f,-0.79023022143730992095f,0.61281008242940981923f, +-0.79210657730021216683f,0.61038280627630969732f,-0.79397547755433717231f, +0.60794978496777363208f,-0.79583690460888345530f,0.60551104140432565615f, +-0.79769084094339093305f,0.60306659854034838641f,-0.79953726910790512417f, +0.60061647938386886203f,-0.80137617172314024039f,0.59816070699634238395f, +-0.80320753148064483184f,0.59569930449243346793f,-0.80503133114296343553f, +0.59323229503980001720f,-0.80684755354379933401f,0.59075970185887416442f, +-0.80865618158817498262f,0.58828154822264533408f,-0.81045719825259465718f, +0.58579785745643897510f,-0.81225058658520377097f,0.58330865293769851299f, +-0.81403632970594841378f,0.58081395809576452649f,-0.81581441080673378075f, +0.57831379641165570060f,-0.81758481315158360037f,0.57580819141784544968f, +-0.81934752007679700903f,0.57329716669804209328f,-0.82110251499110464835f, +0.57078074588696725566f,-0.82284978137582620583f,0.56825895267013171175f, +-0.82458930278502506894f,0.56573181078361345353f,-0.82632106284566353427f, +0.56319934401383409117f,-0.82804504525775568524f,0.56066157619733614226f, +-0.82976123379452293438f,0.55811853122055632426f,-0.83146961230254534669f, +0.55557023301960217765f,-0.83317016470191318511f,0.55301670558002746780f, +-0.83486287498638001026f,0.55045797293660492233f,-0.83654772722351189440f, +0.54789405917310041172f,-0.83822470555483807875f,0.54532498842204635281f, +-0.83989379419599952126f,0.54275078486451588944f,-0.84155497743689833268f, +0.54017147272989296525f,-0.84320823964184532517f,0.53758707629564572716f, +-0.84485356524970711689f,0.53499761988709715332f,-0.84649093877405201525f, +0.53240312787719801246f,-0.84812034480329712149f,0.52980362468629482731f, +-0.84974176800085254868f,0.52719913478190127964f,-0.85135519310526519554f, +0.52458968267846894928f,-0.85296060493036363059f,0.52197529293715438925f, +-0.85455798836540042274f,0.51935599016558975372f,-0.85614732837519447184f, +0.51673179901764976218f,-0.85772861000027200706f,0.51410274419322177231f, +-0.85930181835700836235f,0.51146885043797052361f,-0.86086693863776719837f, +0.50883014254310732216f,-0.86242395611104050168f,0.50618664534515522835f, +-0.86397285612158669643f,0.50353838372571757542f,-0.86551362409056897818f, +0.50088538261124093687f,-0.86704624551569264845f,0.49822766697278175752f, +-0.86857070597134089507f,0.49556526182577254058f,-0.87008699110871134952f, +0.49289819222978414892f,-0.87159508665595086807f,0.49022648328829138142f, +-0.87309497841829009079f,0.48755016014843588490f,-0.87458665227817611321f, +0.48486924800079111986f,-0.87607009419540649020f,0.48218377207912288540f, +-0.87754529020726113053f,0.47949375766015328582f,-0.87901222642863352519f, +0.47679923006332208812f,-0.88047088905216075450f,0.47410021465055007805f, +-0.88192126434835493853f,0.47139673682599780857f,-0.88336333866573168994f, +0.46868882203582784562f,-0.88479709843093778954f,0.46597649576796618121f, +-0.88622253014888052736f,0.46325978355186031576f,-0.88763962040285382393f, +0.46053871095824022719f,-0.88904835585466457371f,0.45781330359887717485f, +-0.89044872324475787817f,0.45508358712634389143f,-0.89184070939234261211f, +0.45234958723377105549f,-0.89322430119551521344f,0.44961132965460687272f, +-0.89459948563138269595f,0.44686884016237415906f,-0.89596624975618510689f, +0.44412214457042931137f,-0.89732458070541820661f,0.44137126873171689256f, +-0.89867446569395392775f,0.43861623853852754751f,-0.90001589201616016833f, +0.43585707992225553031f,-0.90134884704602191707f,0.43309381885315206828f, +-0.90267331823725871498f,0.43032648134008288920f,-0.90398929312344333820f, +0.42755509343028202940f,-0.90529675931811870448f,0.42477968120910886141f, +-0.90659570451491533483f,0.42200027079979984812f,-0.90788611648766603945f, +0.41921688836322423821f,-0.90916798309052238025f,0.41642956009763715253f, +-0.91044129225806713634f,0.41363831223843466889f,-0.91170603200542976730f, +0.41084317105790413294f,-0.91296219042839821256f,0.40804416286497857680f, +-0.91420975570353069095f,0.40524131400498991651f,-0.91544871608826772214f, +0.40243465085941859671f,-0.91667905992104259383f,0.39962419984564706565f, +-0.91790077562139049672f,0.39680998741671025254f,-0.91911385169005777040f, +0.39399204006104815434f,-0.92031827670911048322f,0.39117038430225403722f, +-0.92151403934204179080f,0.38834504669882657923f,-0.92270112833387862850f, +0.38551605384391884890f,-0.92387953251128673848f,0.38268343236508989280f, +-0.92504924078267747323f,0.37984720892405138271f,-0.92621024213831137928f, +0.37700741021641814843f,-0.92736252565040111495f,0.37416406297145804460f, +-0.92850608047321547822f,0.37131719395183770960f,-0.92964089584318121418f, +0.36846682995337259880f,-0.93076696107898371224f,0.36561299780477379828f, +-0.93188426558166803648f,0.36275572436739728088f,-0.93299279883473884567f, +0.35989503653498833291f,-0.93409255040425875904f,0.35703096123343031065f, +-0.93518350993894761025f,0.35416352542049039931f,-0.93626566717027825959f, +0.35129275608556720378f,-0.93733901191257484875f,0.34841868024943478677f, +-0.93840353406310816897f,0.34554132496398898278f,-0.93945922360218991898f, +0.34266071731199443384f,-0.94050607059326829518f,0.33977688440682701776f, +-0.94154406518302069529f,0.33688985339222032867f,-0.94257319760144686605f, +0.33399965144200938205f,-0.94359345816196038559f,0.33110630575987648472f, +-0.94460483726148014583f,0.32820984357909271933f,-0.94560732538052116869f, +0.32531029216226325929f,-0.94660091308328353499f,0.32240767880106985244f, +-0.94758559101774109124f,0.31950203081601580291f,-0.94856134991573026749f, +0.31659337555616606785f,-0.94952818059303667475f,0.31368174039889140658f, +-0.95048607394948170235f,0.31076715274961153046f,-0.95143502096900833820f, +0.30784964004153503314f,-0.95237501271976576778f,0.30492922973540265152f, +-0.95330604035419386211f,0.30200594931922802866f,-0.95422809510910555630f, +0.29907982630804053059f,-0.95514116830577067141f,0.29615088824362401088f, +-0.95604525134999629454f,0.29321916269425896129f,-0.95694033573220882438f, +0.29028467725446238656f,-0.95782641302753290802f,0.28734745954472962204f, +-0.95870347489587148804f,0.28440753721127209896f,-0.95957151308198451733f, +0.28146493792575788540f,-0.96043051941556578655f,0.27851968938505317075f, +-0.96128048581132063966f,0.27557181931095831029f,-0.96212140426904146917f, +0.27262135544994925418f,-0.96295326687368387741f,0.26966832557291509076f, +-0.96377606579543984022f,0.26671275747489847641f,-0.96458979328981264700f, +0.26375467897483156898f,-0.96539444169768928727f,0.26079411791527584707f, +-0.96619000344541250413f,0.25783110216215898713f,-0.96697647104485207059f, +0.25486565960451468271f,-0.96775383709347539973f,0.25189781815421719013f, +-0.96852209427441737777f,0.24892760574572009302f,-0.96928123535654842069f, +0.24595505033579465048f,-0.97003125319454397424f,0.24298017990326406523f, +-0.97077214072895023911f,0.24000302244874177626f,-0.97150389098625178352f, +0.23702360599436717026f,-0.97222649707893626925f,0.23404195858354351345f, +-0.97293995220556006576f,0.23105810828067133156f,-0.97364424965081186603f, +0.22807208317088606409f,-0.97433938278557585821f,0.22508391135979283204f, +-0.97502534506699412020f,0.22209362097320364815f,-0.97570213003852845901f, +0.21910124015687004739f,-0.97636973133002114000f,0.21610679707621943679f, +-0.97702814265775439484f,0.21311031991609141745f,-0.97767735782450992943f, +0.21011183688046980444f,-0.97831737071962754371f,0.20711137619221883788f, +-0.97894817531906219710f,0.20410896609281684033f,-0.97956976568544051887f, +0.20110463484209201157f,-0.98018213596811731847f,0.19809841071795381007f, +-0.98078528040323043058f,0.19509032201612860891f,-0.98137919331375456089f, +0.19208039704989246510f,-0.98196386910955524296f,0.18906866414980635915f, +-0.98253930228744124076f,0.18605515166344691047f,-0.98310548743121628501f, +0.18303988795514089527f,-0.98366241921173025453f,0.18002290140569957022f, +-0.98421009238692902521f,0.17700422041214894375f,-0.98474850180190420801f, +0.17398387338746412745f,-0.98527764238894122162f,0.17096188876030121717f, +-0.98579750916756736512f,0.16793829497473128365f,-0.98630809724459855836f, +0.16491312048997014417f,-0.98680940181418552726f,0.16188639378011174252f, +-0.98730141815785843473f,0.15885814333386147346f,-0.98778414164457217783f, +0.15582839765426537149f,-0.98825756773074946437f,0.15279718525844368515f, +-0.98872169196032377858f,0.14976453467732145364f,-0.98917650996478101444f, +0.14673047445536180344f,-0.98962201746320077600f,0.14369503315029463764f, +-0.99005821026229701154f,0.14065823933284954395f,-0.99048508425645709341f, +0.13762012158648603832f,-0.99090263542778000971f,0.13458070850712627875f, +-0.99131085984611544415f,0.13154002870288333815f,-0.99170975366909952520f, +0.12849811079379308554f,-0.99209931314219179654f,0.12545498341154626143f, +-0.99247953459870996706f,0.12241067519921634832f,-0.99285041445986510489f, +0.11936521481099163222f,-0.99321194923479450001f,0.11631863091190471071f, +-0.99356413552059530403f,0.11327095217756441570f,-0.99390697000235606051f, +0.11022220729388323979f,-0.99424044945318790223f,0.10717242495680916192f, +-0.99456457073425541537f,0.10412163387205457254f,-0.99487933079480561638f, +0.10106986275482793269f,-0.99518472667219681771f,0.09801714032956082567f, +-0.99548075549192693856f,0.09496349532963890838f,-0.99576741446765981713f, +0.09190895649713275162f,-0.99604470090125196702f,0.08885355258252475297f, +-0.99631261218277800129f,0.08579731234444015753f,-0.99657114579055483539f, +0.08274026454937563613f,-0.99682029929116566791f,0.07968243797143019502f, +-0.99706007033948296225f,0.07662386139203168633f,-0.99729045667869020697f, +0.07356456359966773162f,-0.99751145614030345410f,0.07050457338961385600f, +-0.99772306664419163624f,0.06744391956366417584f,-0.99792528619859599548f, +0.06438263092985770097f,-0.99811811290014917919f,0.06132073630220848809f, +-0.99830154493389289261f,0.05825826450043579408f,-0.99847558057329477421f, +0.05519524434969009380f,-0.99864021818026516009f,0.05213170468028359428f, +-0.99879545620517240501f,0.04906767432741796636f,-0.99894129318685687124f, +0.04600318213091470626f,-0.99907772775264536147f,0.04293825693494102147f, +-0.99920475861836388631f,0.03987292758774012985f,-0.99932238458834954375f, +0.03680722294135883171f,-0.99943060455546173237f,0.03374117185137770480f, +-0.99952941750109314256f,0.03067480317663686534f,-0.99961882249517863830f, +0.02760814577896565994f,-0.99969881869620424997f,0.02454122852291232629f, +-0.99976940535121527898f,0.02147408027546966747f,-0.99983058179582340319f, +0.01840672990580510121f,-0.99988234745421256111f,0.01533920628498806026f, +-0.99992470183914450299f,0.01227153828572000692f,-0.99995764455196389786f, +0.00920375478206002066f,-0.99998117528260110909f,0.00613588464915479880f, +-0.99999529380957619118f,0.00306795676296597701f,1.00000000000000000000f, +0.00000000000000000000f,0.99992470183914450299f,0.01227153828571992539f, +0.99969881869620424997f,0.02454122852291228812f,0.99932238458834954375f, +0.03680722294135883171f,0.99879545620517240501f,0.04906767432741801493f, +0.99811811290014917919f,0.06132073630220857829f,0.99729045667869020697f, +0.07356456359966742631f,0.99631261218277800129f,0.08579731234443989385f, +0.99518472667219692873f,0.09801714032956060363f,0.99390697000235606051f, +0.11022220729388305938f,0.99247953459870996706f,0.12241067519921619566f, +0.99090263542778000971f,0.13458070850712616773f,0.98917650996478101444f, +0.14673047445536174793f,0.98730141815785843473f,0.15885814333386144570f, +0.98527764238894122162f,0.17096188876030121717f,0.98310548743121628501f, +0.18303988795514095078f,0.98078528040323043058f,0.19509032201612824808f, +0.97831737071962765473f,0.20711137619221856032f,0.97570213003852857003f, +0.21910124015686979759f,0.97293995220556017678f,0.23105810828067110951f, +0.97003125319454397424f,0.24298017990326387094f,0.96697647104485207059f, +0.25486565960451457169f,0.96377606579543984022f,0.26671275747489836538f, +0.96043051941556578655f,0.27851968938505305973f,0.95694033573220882438f, +0.29028467725446233105f,0.95330604035419386211f,0.30200594931922808417f, +0.94952818059303667475f,0.31368174039889151761f,0.94560732538052127971f, +0.32531029216226292622f,0.94154406518302080631f,0.33688985339222005111f, +0.93733901191257495977f,0.34841868024943456472f,0.93299279883473895669f, +0.35989503653498811087f,0.92850608047321558924f,0.37131719395183754306f, +0.92387953251128673848f,0.38268343236508978178f,0.91911385169005777040f, +0.39399204006104809883f,0.91420975570353069095f,0.40524131400498986100f, +0.90916798309052238025f,0.41642956009763715253f,0.90398929312344333820f, +0.42755509343028208491f,0.89867446569395381673f,0.43861623853852765853f, +0.89322430119551532446f,0.44961132965460653965f,0.88763962040285393496f, +0.46053871095824000514f,0.88192126434835504956f,0.47139673682599764204f, +0.87607009419540660122f,0.48218377207912271887f,0.87008699110871146054f, +0.49289819222978403790f,0.86397285612158669643f,0.50353838372571757542f, +0.85772861000027211809f,0.51410274419322166128f,0.85135519310526519554f, +0.52458968267846894928f,0.84485356524970711689f,0.53499761988709715332f, +0.83822470555483807875f,0.54532498842204646383f,0.83146961230254523567f, +0.55557023301960217765f,0.82458930278502529099f,0.56573181078361312046f, +0.81758481315158371139f,0.57580819141784533866f,0.81045719825259476821f, +0.58579785745643886408f,0.80320753148064494287f,0.59569930449243335691f, +0.79583690460888356633f,0.60551104140432554512f,0.78834642762660622761f, +0.61523159058062681925f,0.78073722857209448822f,0.62485948814238634341f, +0.77301045336273699338f,0.63439328416364548779f,0.76516726562245895860f, +0.64383154288979138613f,0.75720884650648456748f,0.65317284295377675551f, +0.74913639452345937020f,0.66241577759017178373f,0.74095112535495921691f, +0.67155895484701833009f,0.73265427167241281570f,0.68060099779545302212f, +0.72424708295146700276f,0.68954054473706682948f,0.71573082528381870571f, +0.69837624940897280457f,0.70710678118654757274f,0.70710678118654757274f, +0.69837624940897291559f,0.71573082528381859468f,0.68954054473706694051f, +0.72424708295146689174f,0.68060099779545302212f,0.73265427167241281570f, +0.67155895484701833009f,0.74095112535495910588f,0.66241577759017178373f, +0.74913639452345925918f,0.65317284295377686654f,0.75720884650648456748f, +0.64383154288979149715f,0.76516726562245895860f,0.63439328416364548779f, +0.77301045336273688235f,0.62485948814238645443f,0.78073722857209448822f, +0.61523159058062681925f,0.78834642762660622761f,0.60551104140432554512f, +0.79583690460888345530f,0.59569930449243346793f,0.80320753148064483184f, +0.58579785745643886408f,0.81045719825259476821f,0.57580819141784533866f, +0.81758481315158371139f,0.56573181078361323149f,0.82458930278502529099f, +0.55557023301960228867f,0.83146961230254523567f,0.54532498842204646383f, +0.83822470555483796772f,0.53499761988709726435f,0.84485356524970700587f, +0.52458968267846883826f,0.85135519310526519554f,0.51410274419322166128f, +0.85772861000027211809f,0.50353838372571757542f,0.86397285612158669643f, +0.49289819222978409341f,0.87008699110871134952f,0.48218377207912282989f, +0.87607009419540660122f,0.47139673682599780857f,0.88192126434835493853f, +0.46053871095824000514f,0.88763962040285393496f,0.44961132965460659516f, +0.89322430119551532446f,0.43861623853852771404f,0.89867446569395381673f, +0.42755509343028219593f,0.90398929312344333820f,0.41642956009763731906f, +0.90916798309052226923f,0.40524131400498986100f,0.91420975570353069095f, +0.39399204006104809883f,0.91911385169005777040f,0.38268343236508983729f, +0.92387953251128673848f,0.37131719395183759858f,0.92850608047321558924f, +0.35989503653498827740f,0.93299279883473884567f,0.34841868024943450921f, +0.93733901191257495977f,0.33688985339222005111f,0.94154406518302080631f, +0.32531029216226298173f,0.94560732538052127971f,0.31368174039889157312f, +0.94952818059303667475f,0.30200594931922819519f,0.95330604035419375109f, +0.29028467725446233105f,0.95694033573220893540f,0.27851968938505305973f, +0.96043051941556578655f,0.26671275747489842090f,0.96377606579543984022f, +0.25486565960451462720f,0.96697647104485207059f,0.24298017990326398197f, +0.97003125319454397424f,0.23105810828067127605f,0.97293995220556006576f, +0.21910124015686976984f,0.97570213003852857003f,0.20711137619221856032f, +0.97831737071962765473f,0.19509032201612833135f,0.98078528040323043058f, +0.18303988795514106180f,0.98310548743121628501f,0.17096188876030135595f, +0.98527764238894122162f,0.15885814333386139019f,0.98730141815785843473f, +0.14673047445536174793f,0.98917650996478101444f,0.13458070850712622324f, +0.99090263542778000971f,0.12241067519921627893f,0.99247953459870996706f, +0.11022220729388318428f,0.99390697000235606051f,0.09801714032956077016f, +0.99518472667219681771f,0.08579731234443987997f,0.99631261218277800129f, +0.07356456359966745406f,0.99729045667869020697f,0.06132073630220864768f, +0.99811811290014917919f,0.04906767432741812596f,0.99879545620517240501f, +0.03680722294135899131f,0.99932238458834954375f,0.02454122852291226384f, +0.99969881869620424997f,0.01227153828571994447f,0.99992470183914450299f, +0.00000000000000006123f,1.00000000000000000000f,-0.01227153828571982304f, +0.99992470183914450299f,-0.02454122852291214241f,0.99969881869620424997f, +-0.03680722294135886641f,0.99932238458834954375f,-0.04906767432741800800f, +0.99879545620517240501f,-0.06132073630220852972f,0.99811811290014917919f, +-0.07356456359966732916f,0.99729045667869020697f,-0.08579731234443975507f, +0.99631261218277800129f,-0.09801714032956064526f,0.99518472667219692873f, +-0.11022220729388305938f,0.99390697000235606051f,-0.12241067519921615403f, +0.99247953459870996706f,-0.13458070850712611222f,0.99090263542778000971f, +-0.14673047445536163691f,0.98917650996478101444f,-0.15885814333386127917f, +0.98730141815785843473f,-0.17096188876030124493f,0.98527764238894122162f, +-0.18303988795514092303f,0.98310548743121628501f,-0.19509032201612819257f, +0.98078528040323043058f,-0.20711137619221844930f,0.97831737071962765473f, +-0.21910124015686965881f,0.97570213003852857003f,-0.23105810828067113727f, +0.97293995220556017678f,-0.24298017990326387094f,0.97003125319454397424f, +-0.25486565960451451618f,0.96697647104485207059f,-0.26671275747489830987f, +0.96377606579543984022f,-0.27851968938505294870f,0.96043051941556589757f, +-0.29028467725446216452f,0.95694033573220893540f,-0.30200594931922808417f, +0.95330604035419386211f,-0.31368174039889140658f,0.94952818059303667475f, +-0.32531029216226287071f,0.94560732538052139073f,-0.33688985339221994009f, +0.94154406518302080631f,-0.34841868024943439819f,0.93733901191257495977f, +-0.35989503653498816638f,0.93299279883473884567f,-0.37131719395183748755f, +0.92850608047321558924f,-0.38268343236508972627f,0.92387953251128673848f, +-0.39399204006104798781f,0.91911385169005777040f,-0.40524131400498974998f, +0.91420975570353069095f,-0.41642956009763698599f,0.90916798309052249127f, +-0.42755509343028186287f,0.90398929312344344922f,-0.43861623853852738097f, +0.89867446569395392775f,-0.44961132965460670619f,0.89322430119551521344f, +-0.46053871095824006066f,0.88763962040285393496f,-0.47139673682599769755f, +0.88192126434835504956f,-0.48218377207912271887f,0.87607009419540660122f, +-0.49289819222978398239f,0.87008699110871146054f,-0.50353838372571746440f, +0.86397285612158680745f,-0.51410274419322155026f,0.85772861000027211809f, +-0.52458968267846872724f,0.85135519310526519554f,-0.53499761988709704230f, +0.84485356524970722791f,-0.54532498842204624179f,0.83822470555483818977f, +-0.55557023301960195560f,0.83146961230254534669f,-0.56573181078361323149f, +0.82458930278502517996f,-0.57580819141784533866f,0.81758481315158371139f, +-0.58579785745643886408f,0.81045719825259476821f,-0.59569930449243335691f, +0.80320753148064494287f,-0.60551104140432543410f,0.79583690460888356633f, +-0.61523159058062670823f,0.78834642762660633863f,-0.62485948814238623239f, +0.78073722857209459924f,-0.63439328416364537677f,0.77301045336273710440f, +-0.64383154288979127511f,0.76516726562245906962f,-0.65317284295377653347f, +0.75720884650648467851f,-0.66241577759017189475f,0.74913639452345925918f, +-0.67155895484701844111f,0.74095112535495899486f,-0.68060099779545302212f, +0.73265427167241281570f,-0.68954054473706694051f,0.72424708295146689174f, +-0.69837624940897280457f,0.71573082528381870571f,-0.70710678118654746172f, +0.70710678118654757274f,-0.71573082528381859468f,0.69837624940897291559f, +-0.72424708295146678072f,0.68954054473706705153f,-0.73265427167241270467f, +0.68060099779545324417f,-0.74095112535495888384f,0.67155895484701855214f, +-0.74913639452345914815f,0.66241577759017200577f,-0.75720884650648467851f, +0.65317284295377664449f,-0.76516726562245895860f,0.64383154288979138613f, +-0.77301045336273699338f,0.63439328416364548779f,-0.78073722857209448822f, +0.62485948814238634341f,-0.78834642762660622761f,0.61523159058062693028f, +-0.79583690460888345530f,0.60551104140432565615f,-0.80320753148064483184f, +0.59569930449243346793f,-0.81045719825259465718f,0.58579785745643897510f, +-0.81758481315158360037f,0.57580819141784544968f,-0.82458930278502506894f, +0.56573181078361345353f,-0.83146961230254534669f,0.55557023301960217765f, +-0.83822470555483807875f,0.54532498842204635281f,-0.84485356524970711689f, +0.53499761988709715332f,-0.85135519310526519554f,0.52458968267846894928f, +-0.85772861000027200706f,0.51410274419322177231f,-0.86397285612158669643f, +0.50353838372571757542f,-0.87008699110871134952f,0.49289819222978414892f, +-0.87607009419540649020f,0.48218377207912288540f,-0.88192126434835493853f, +0.47139673682599780857f,-0.88763962040285382393f,0.46053871095824022719f, +-0.89322430119551521344f,0.44961132965460687272f,-0.89867446569395392775f, +0.43861623853852754751f,-0.90398929312344333820f,0.42755509343028202940f, +-0.90916798309052238025f,0.41642956009763715253f,-0.91420975570353069095f, +0.40524131400498991651f,-0.91911385169005777040f,0.39399204006104815434f, +-0.92387953251128673848f,0.38268343236508989280f,-0.92850608047321547822f, +0.37131719395183770960f,-0.93299279883473884567f,0.35989503653498833291f, +-0.93733901191257484875f,0.34841868024943478677f,-0.94154406518302069529f, +0.33688985339222032867f,-0.94560732538052116869f,0.32531029216226325929f, +-0.94952818059303667475f,0.31368174039889140658f,-0.95330604035419386211f, +0.30200594931922802866f,-0.95694033573220882438f,0.29028467725446238656f, +-0.96043051941556578655f,0.27851968938505317075f,-0.96377606579543984022f, +0.26671275747489847641f,-0.96697647104485207059f,0.25486565960451468271f, +-0.97003125319454397424f,0.24298017990326406523f,-0.97293995220556006576f, +0.23105810828067133156f,-0.97570213003852845901f,0.21910124015687004739f, +-0.97831737071962754371f,0.20711137619221883788f,-0.98078528040323043058f, +0.19509032201612860891f,-0.98310548743121628501f,0.18303988795514089527f, +-0.98527764238894122162f,0.17096188876030121717f,-0.98730141815785843473f, +0.15885814333386147346f,-0.98917650996478101444f,0.14673047445536180344f, +-0.99090263542778000971f,0.13458070850712627875f,-0.99247953459870996706f, +0.12241067519921634832f,-0.99390697000235606051f,0.11022220729388323979f, +-0.99518472667219681771f,0.09801714032956082567f,-0.99631261218277800129f, +0.08579731234444015753f,-0.99729045667869020697f,0.07356456359966773162f, +-0.99811811290014917919f,0.06132073630220848809f,-0.99879545620517240501f, +0.04906767432741796636f,-0.99932238458834954375f,0.03680722294135883171f, +-0.99969881869620424997f,0.02454122852291232629f,-0.99992470183914450299f, +0.01227153828572000692f,1.00000000000000000000f,0.00000000000000000000f, +0.99879545620517240501f,0.04906767432741801493f,0.99518472667219692873f, +0.09801714032956060363f,0.98917650996478101444f,0.14673047445536174793f, +0.98078528040323043058f,0.19509032201612824808f,0.97003125319454397424f, +0.24298017990326387094f,0.95694033573220882438f,0.29028467725446233105f, +0.94154406518302080631f,0.33688985339222005111f,0.92387953251128673848f, +0.38268343236508978178f,0.90398929312344333820f,0.42755509343028208491f, +0.88192126434835504956f,0.47139673682599764204f,0.85772861000027211809f, +0.51410274419322166128f,0.83146961230254523567f,0.55557023301960217765f, +0.80320753148064494287f,0.59569930449243335691f,0.77301045336273699338f, +0.63439328416364548779f,0.74095112535495921691f,0.67155895484701833009f, +0.70710678118654757274f,0.70710678118654757274f,0.67155895484701833009f, +0.74095112535495910588f,0.63439328416364548779f,0.77301045336273688235f, +0.59569930449243346793f,0.80320753148064483184f,0.55557023301960228867f, +0.83146961230254523567f,0.51410274419322166128f,0.85772861000027211809f, +0.47139673682599780857f,0.88192126434835493853f,0.42755509343028219593f, +0.90398929312344333820f,0.38268343236508983729f,0.92387953251128673848f, +0.33688985339222005111f,0.94154406518302080631f,0.29028467725446233105f, +0.95694033573220893540f,0.24298017990326398197f,0.97003125319454397424f, +0.19509032201612833135f,0.98078528040323043058f,0.14673047445536174793f, +0.98917650996478101444f,0.09801714032956077016f,0.99518472667219681771f, +0.04906767432741812596f,0.99879545620517240501f,0.00000000000000006123f, +1.00000000000000000000f,-0.04906767432741800800f,0.99879545620517240501f, +-0.09801714032956064526f,0.99518472667219692873f,-0.14673047445536163691f, +0.98917650996478101444f,-0.19509032201612819257f,0.98078528040323043058f, +-0.24298017990326387094f,0.97003125319454397424f,-0.29028467725446216452f, +0.95694033573220893540f,-0.33688985339221994009f,0.94154406518302080631f, +-0.38268343236508972627f,0.92387953251128673848f,-0.42755509343028186287f, +0.90398929312344344922f,-0.47139673682599769755f,0.88192126434835504956f, +-0.51410274419322155026f,0.85772861000027211809f,-0.55557023301960195560f, +0.83146961230254534669f,-0.59569930449243335691f,0.80320753148064494287f, +-0.63439328416364537677f,0.77301045336273710440f,-0.67155895484701844111f, +0.74095112535495899486f,-0.70710678118654746172f,0.70710678118654757274f, +-0.74095112535495888384f,0.67155895484701855214f,-0.77301045336273699338f, +0.63439328416364548779f,-0.80320753148064483184f,0.59569930449243346793f, +-0.83146961230254534669f,0.55557023301960217765f,-0.85772861000027200706f, +0.51410274419322177231f,-0.88192126434835493853f,0.47139673682599780857f, +-0.90398929312344333820f,0.42755509343028202940f,-0.92387953251128673848f, +0.38268343236508989280f,-0.94154406518302069529f,0.33688985339222032867f, +-0.95694033573220882438f,0.29028467725446238656f,-0.97003125319454397424f, +0.24298017990326406523f,-0.98078528040323043058f,0.19509032201612860891f, +-0.98917650996478101444f,0.14673047445536180344f,-0.99518472667219681771f, +0.09801714032956082567f,-0.99879545620517240501f,0.04906767432741796636f, +1.00000000000000000000f,0.00000000000000000000f,0.98078528040323043058f, +0.19509032201612824808f,0.92387953251128673848f,0.38268343236508978178f, +0.83146961230254523567f,0.55557023301960217765f,0.70710678118654757274f, +0.70710678118654757274f,0.55557023301960228867f,0.83146961230254523567f, +0.38268343236508983729f,0.92387953251128673848f,0.19509032201612833135f, +0.98078528040323043058f,0.00000000000000006123f,1.00000000000000000000f, +-0.19509032201612819257f,0.98078528040323043058f,-0.38268343236508972627f, +0.92387953251128673848f,-0.55557023301960195560f,0.83146961230254534669f, +-0.70710678118654746172f,0.70710678118654757274f,-0.83146961230254534669f, +0.55557023301960217765f,-0.92387953251128673848f,0.38268343236508989280f, +-0.98078528040323043058f,0.19509032201612860891f,1.00000000000000000000f, +0.00000000000000000000f,0.70710678118654757274f,0.70710678118654757274f, +0.00000000000000006123f,1.00000000000000000000f,-0.70710678118654746172f, +0.70710678118654757274f,}; + +float32_t rearranged_twiddle_stride3_4096[2728]={ +1.00000000000000000000f,0.00000000000000000000f,0.99998941108192840321f, +0.00460192612044857050f,0.99995764455196389786f,0.00920375478205981944f, +0.99990470108285289808f,0.01380538852806039059f,0.99983058179582340319f, +0.01840672990580482019f,0.99973528826056168306f,0.02300768146883936868f, +0.99961882249517863830f,0.02760814577896573974f,0.99948118696616694567f, +0.03220802540830458582f,0.99932238458834954375f,0.03680722294135883171f, +0.99914241872481690532f,0.04140564097707673946f,0.99894129318685687124f, +0.04600318213091462299f,0.99871901223387293811f,0.05059974903689928166f, +0.99847558057329477421f,0.05519524434968993420f,0.99821100336047818846f, +0.05978957074663986820f,0.99792528619859599548f,0.06438263092985746505f, +0.99761843513851955478f,0.06897432762826674613f,0.99729045667869020697f, +0.07356456359966742631f,0.99694135776498216117f,0.07815324163279423197f, +0.99657114579055483539f,0.08274026454937569164f,0.99617982859569698117f, +0.08732553520619205922f,0.99576741446765981713f,0.09190895649713272386f, +0.99533391214048227980f,0.09649043135525259274f,0.99487933079480561638f, +0.10106986275482782167f,0.99440368005767909576f,0.10564715371341061589f, +0.99390697000235606051f,0.11022220729388305938f,0.99338921114808065305f, +0.11479492660651008373f,0.99285041445986510489f,0.11936521481099135467f, +0.99229059134825736699f,0.12393297511851215920f,0.99170975366909952520f, +0.12849811079379316880f,0.99110791372327688986f,0.13306052515713906459f, +0.99048508425645709341f,0.13762012158648603832f,0.98984127845882052821f, +0.14217680351944803063f,0.98917650996478101444f,0.14673047445536174793f, +0.98849079285269658701f,0.15128103795733022219f,0.98778414164457217783f, +0.15582839765426523271f,0.98705657130575097380f,0.16037245724292828464f, +0.98630809724459866938f,0.16491312048996989437f,0.98553873531217606185f, +0.16945029123396795900f,0.98474850180190420801f,0.17398387338746382214f, +0.98393741344921892278f,0.17851377093899750692f,0.98310548743121628501f, +0.18303988795514095078f,0.98225274136628937249f,0.18756212858252960252f, +0.98137919331375456089f,0.19208039704989243734f,0.98048486177346938497f, +0.19659459767008022335f,0.97956976568544051887f,0.20110463484209190055f, +0.97863392442942320759f,0.20561041305309923910f,0.97767735782450992943f, +0.21011183688046961016f,0.97670008612871184184f,0.21460881099378675829f, +0.97570213003852857003f,0.21910124015686979759f,0.97468351068851066810f, +0.22358902922978998729f,0.97364424965081197705f,0.22807208317088573102f, +0.97258436893473221296f,0.23255030703877524467f,0.97150389098625178352f, +0.23702360599436719801f,0.97040283868755550234f,0.24149188530286933019f, +0.96928123535654853171f,0.24595505033579459497f,0.96813910474636244441f, +0.25041300657296522436f,0.96697647104485207059f,0.25486565960451457169f, +0.96579335887408368500f,0.25931291513288623474f,0.96458979328981275803f, +0.26375467897483134694f,0.96336579978095404631f,0.26819085706340317632f, +0.96212140426904158019f,0.27262135544994897662f,0.96085663310767965850f, +0.27704608030609989555f,0.95957151308198451733f,0.28146493792575794091f, +0.95826607140801767226f,0.28587783472708061527f,0.95694033573220882438f, +0.29028467725446233105f,0.95559433413077110586f,0.29468537218051432669f, +0.95422809510910566733f,0.29907982630804047508f,0.95284164760119871573f, +0.30346794657201131562f,0.95143502096900833820f,0.30784964004153486661f, +0.95000824500184299914f,0.31222481392182488413f,0.94856134991573026749f, +0.31659337555616584581f,0.94709436635277721717f,0.32095523242787521445f, +0.94560732538052127971f,0.32531029216226292622f,0.94410025849127265918f, +0.32965846252858749255f,0.94257319760144686605f,0.33399965144200938205f, +0.94102617505088925753f,0.33833376696554112728f,0.93945922360218991898f, +0.34266071731199437833f,0.93787237643998988545f,0.34698041084592368133f, +0.93626566717027825959f,0.35129275608556709276f,0.93463912981968078064f, +0.35559766170478385172f,0.93299279883473895669f,0.35989503653498811087f, +0.93132670908118042608f,0.36418478956707989180f,0.92964089584318121418f, +0.36846682995337232125f,0.92793539482261788720f,0.37274106700951575855f, +0.92621024213831137928f,0.37700741021641825945f,0.92446547432526260391f, +0.38126576922216237620f,0.92270112833387862850f,0.38551605384391884890f, +0.92091724152918941204f,0.38975817406985641123f,0.91911385169005777040f, +0.39399204006104809883f,0.91729099700837790632f,0.39821756215337356100f, +0.91544871608826783316f,0.40243465085941843018f,0.91358704794525080750f, +0.40664321687036902864f,0.91170603200542987832f,0.41084317105790391089f, +0.90980570810465222209f,0.41503442447608163146f,0.90788611648766626150f, +0.41921688836322390515f,0.90594729780726845902f,0.42339047414379604728f, +0.90398929312344333820f,0.42755509343028208491f,0.90201214390249317976f, +0.43171065802505725895f,0.90001589201616016833f,0.43585707992225547480f, +0.89800057974073987932f,0.43999427130963325583f,0.89596624975618521791f, +0.44412214457042920035f,0.89391294514520325265f,0.44824061228521988598f, +0.89184070939234272313f,0.45234958723377088896f,0.88974958638307277692f, +0.45644898239688391772f,0.88763962040285393496f,0.46053871095824000514f, +0.88551085613619995307f,0.46461868630623781584f,0.88336333866573157891f, +0.46868882203582790114f,0.88119711347122209322f,0.47274903195034279069f, +0.87901222642863352519f,0.47679923006332208812f,0.87680872380914565145f, +0.48083933060033395845f,0.87458665227817611321f,0.48486924800079106435f, +0.87234605889439154058f,0.48888889691976317176f,0.87008699110871146054f, +0.49289819222978403790f,0.86780949676330332299f,0.49689704902265446895f, +0.86551362409056908920f,0.50088538261124071482f,0.86319942171212415971f, +0.50486310853126759035f,0.86086693863776730939f,0.50883014254310698909f, +0.85851622426444273994f,0.51278640063356295542f,0.85614732837519447184f, +0.51673179901764987321f,0.85376030113811141042f,0.52066625414036715735f, +0.85135519310526519554f,0.52458968267846894928f,0.84893205521163961347f, +0.52850200154222848337f,0.84649093877405212627f,0.53240312787719790144f, +0.84403189549006640835f,0.53629297906596318235f,0.84155497743689844370f, +0.54017147272989285423f,0.83906023707031274217f,0.54403852673088382019f, +0.83654772722351200542f,0.54789405917310018967f,0.83401750110601813315f, +0.55173798840470733573f,0.83146961230254523567f,0.55557023301960217765f, +0.82890411477186487499f,0.55939071185913613604f,0.82632106284566353427f, +0.56319934401383409117f,0.82372051122739142759f,0.56699604882510867832f, +0.82110251499110464835f,0.57078074588696725566f,0.81846712958029865792f, +0.57455335504771576360f,0.81581441080673378075f,0.57831379641165558958f, +0.81314441484925359394f,0.58206199034077543697f,0.81045719825259476821f, +0.58579785745643886408f,0.80775281792619035848f,0.58952131864106394055f, +0.80503133114296365758f,0.59323229503979979516f,0.80229279553811572168f, +0.59693070806219639124f,0.79953726910790501314f,0.60061647938386897305f, +0.79676481020841882774f,0.60428953094815596181f,0.79397547755433717231f, +0.60794978496777363208f,0.79116933021769020318f,0.61159716392646190641f, +0.78834642762660622761f,0.61523159058062681925f,0.78550682956405393220f, +0.61885298796097631957f,0.78265059616657572938f,0.62246127937414996723f, +0.77977778792301455368f,0.62605638840434352232f,0.77688846567323244230f, +0.62963823891492698426f,0.77398269060682289844f,0.63320675505005719064f, +0.77106052426181381776f,0.63676186123628419899f,0.76812202852336541881f, +0.64030348218415167327f,0.76516726562245895860f,0.64383154288979138613f, +0.76219629813457900891f,0.64734596863651205911f,0.75920918897838796102f, +0.65084668499638087535f,0.75620600141439453523f,0.65433361783180044036f, +0.75318679904361252042f,0.65780669329707863735f,0.75015164580621507273f, +0.66126583783999226540f,0.74710060598018013245f,0.66471097820334479334f, +0.74403374417992929057f,0.66814204142651845153f,0.74095112535495921691f, +0.67155895484701833009f,0.73785281478846598269f,0.67496164610201192513f, +0.73473887809596349907f,0.67835004312986146857f,0.73160938122389262972f, +0.68172407417164970767f,0.72846439044822519637f,0.68508366777270035541f, +0.72530397237306076796f,0.68842875278409043638f,0.72212819392921534511f, +0.69175925836415774750f,0.71893712237280449351f,0.69507511398000088043f, +0.71573082528381870571f,0.69837624940897280457f,0.71250937056469243469f, +0.70166259474016845488f,0.70927282643886568891f,0.70493408037590488124f, +0.70602126144933974317f,0.70819063703319540259f,0.70275474445722529993f, +0.71143219574521643356f,0.69947334464028376733f,0.71465868786276909308f, +0.69617713149146298601f,0.71787004505573170920f,0.69286617481742474034f, +0.72106619931450810501f,0.68954054473706694051f,0.72424708295146689174f, +0.68620031168003858824f,0.72741262860237576593f,0.68284554638524808112f, +0.73056276922782759087f,0.67947631989936496666f,0.73369743811466026084f, +0.67609270357531603413f,0.73681656887736979300f,0.67269476907077296879f, +0.73992009545951609173f,0.66928258834663600929f,0.74300795213512171866f, +0.66585623366550972246f,0.74608007351006366825f,0.66241577759017178373f, +0.74913639452345925918f,0.65896129298203731661f,0.75217685044904269986f, +0.65549285299961546070f,0.75520137689653654700f,0.65201053109695950027f, +0.75820990981301528144f,0.64851440102211255212f,0.76120238548426177871f, +0.64500453681554403840f,0.76417874053611667406f,0.64148101280858316198f, +0.76713891193582040007f,0.63794390362184416610f,0.77008283699334789674f, +0.63439328416364548779f,0.77301045336273688235f,0.63082922962842458148f, +0.77592169904340757558f,0.62725181549514419377f,0.77881651238147586724f, +0.62366111752569464155f,0.78169483207105938671f,0.62005721176328920663f, +0.78455659715557524159f,0.61644017453085364622f,0.78740174702903131809f, +0.61281008242940970820f,0.79023022143731003197f,0.60916701233645320634f, +0.79304196047944364167f,0.60551104140432554512f,0.79583690460888345530f, +0.60184224705858002658f,0.79861499463476082195f,0.59816070699634238395f, +0.80137617172314012937f,0.59446649918466454299f,0.80412037739826569549f, +0.59075970185887427544f,0.80684755354379922299f,0.58704039352091808013f, +0.80955764240405125864f,0.58330865293769829094f,0.81225058658520388200f, +0.57956455913940574387f,0.81492632905652662156f,0.57580819141784533866f, +0.81758481315158371139f,0.57203962932475704850f,0.82022598256943468620f, +0.56825895267013148970f,0.82284978137582631685f,0.56446624152051949608f, +0.82545615400437744036f,0.56066157619733603124f,0.82804504525775579626f, +0.55684503727516010407f,0.83061640030884620334f,0.55301670558002757883f, +0.83317016470191318511f,0.54917666218771976627f,0.83570628435375260423f, +0.54532498842204646383f,0.83822470555483796772f,0.54146176585312355556f, +0.84072537497045796151f,0.53758707629564550512f,0.84320823964184543620f, +0.53370100180715296379f,0.84567324698729906540f,0.52980362468629482731f, +0.84812034480329712149f,0.52589502747108474168f,0.85054948126560336874f, +0.52197529293715438925f,0.85296060493036363059f,0.51804450409599933636f, +0.85535366473519602870f,0.51410274419322166128f,0.85772861000027211809f, +0.51015009670676669806f,0.86008539042939025077f,0.50618664534515533937f, +0.86242395611104050168f,0.50221247404571089934f,0.86474425751946237817f, +0.49822766697278186854f,0.86704624551569264845f,0.49423230851595972846f, +0.86932987134860673084f,0.49022648328829110387f,0.87159508665595109012f, +0.48621027612448652899f,0.87384184346536675214f,0.48218377207912282989f, +0.87607009419540660122f,0.47814705642484311987f,0.87827979165654146421f, +0.47410021465055002254f,0.88047088905216075450f,0.47004333245959561971f, +0.88264333997956279099f,0.46597649576796612569f,0.88479709843093778954f, +0.46189979070246284243f,0.88693211879434208367f,0.45781330359887728587f, +0.88904835585466457371f,0.45371712100016392544f,0.89114576479458318392f, +0.44961132965460659516f,0.89322430119551532446f,0.44549601651398174074f, +0.89528392103855758410f,0.44137126873171661501f,0.89732458070541831763f, +0.43723717366104419835f,0.89934623697934146236f,0.43309381885315201277f, +0.90134884704602202810f,0.42894129205532954829f,0.90333236849451181705f, +0.42477968120910880589f,0.90529675931811881551f,0.42060907444840250902f, +0.90724197791529592738f,0.41642956009763731906f,0.90916798309052226923f, +0.41224122666988299857f,0.91107473405517624965f,0.40804416286497874333f, +0.91296219042839810154f,0.40383845756765412993f,0.91483031223794608611f, +0.39962419984564678810f,0.91667905992104270485f,0.39540147894781629834f, +0.91850839432521225181f,0.39117038430225398171f,0.92031827670911048322f, +0.38693100551438869283f,0.92210866874334507237f,0.38268343236508983729f, +0.92387953251128673848f,0.37842775480876561511f,0.92563083050987271516f, +0.37416406297145798909f,0.92736252565040111495f,0.36989244714893426691f, +0.92907458125931574600f,0.36561299780477396482f,0.93076696107898371224f, +0.36132580556845433906f,0.93243962926846235550f,0.35703096123343003310f, +0.93409255040425887007f,0.35272855575521072646f,0.93572568948108036935f, +0.34841868024943450921f,0.93733901191257495977f,0.34410142598993898044f, +0.93893248353206448797f,0.33977688440682696225f,0.94050607059326829518f, +0.33544514708453165852f,0.94205973977101731265f,0.33110630575987642921f, +0.94359345816196038559f,0.32676045232013178898f,0.94510719328526060501f, +0.32240767880107001897f,0.94660091308328353499f,0.31804807738501505998f, +0.94807458592227622507f,0.31368174039889157312f,0.94952818059303667475f, +0.30930876031226878231f,0.95096166631157508231f,0.30492922973540242948f, +0.95237501271976587880f,0.30054324141727339903f,0.95376818988599032512f, +0.29615088824362395536f,0.95514116830577067141f,0.29175226323498937298f, +0.95649391890239499059f,0.28734745954472956653f,0.95782641302753290802f, +0.28293657045705539188f,0.95913862246184189431f,0.27851968938505305973f, +0.96043051941556578655f,0.27409690986870632878f,0.96170207652912254037f, +0.26966832557291520178f,0.96295326687368387741f,0.26523403028551190141f, +0.96418406395174571788f,0.26079411791527556952f,0.96539444169768939830f, +0.25634868248994291395f,0.96658437447833311928f,0.25189781815421691258f, +0.96775383709347551076f,0.24744161916777343557f,0.96890280477642887202f, +0.24298017990326398197f,0.97003125319454397424f,0.23851359484431849944f, +0.97113915844972509284f,0.23404195858354345794f,0.97222649707893626925f, +0.22956536582051886852f,0.97329324605469824672f,0.22508391135979277653f, +0.97433938278557585821f,0.22059769010887364526f,0.97536488511665686563f, +0.21610679707621960333f,0.97636973133002114000f,0.21161132736922760866f, +0.97735390014519996082f,0.20711137619221856032f,0.97831737071962765473f, +0.20260703884442110567f,0.97926012264908202098f,0.19809841071795372680f, +0.98018213596811731847f,0.19358558729580374602f,0.98108339115048659451f, +0.18906866414980627589f,0.98196386910955524296f,0.18454773693861964423f, +0.98282355119870523641f,0.18002290140569951471f,0.98366241921173025453f, +0.17549425337727139751f,0.98448045538322093151f,0.17096188876030135595f, +0.98527764238894122162f,0.16642590354046421508f,0.98605396334619543897f, +0.16188639378011188130f,0.98680940181418541624f,0.15734345561623827581f, +0.98754394179435922574f,0.15279718525844340760f,0.98825756773074946437f, +0.14824767898689619749f,0.98895026451030298986f,0.14369503315029458212f, +0.98962201746320077600f,0.13913934416382628401f,0.99027281236316910817f, +0.13458070850712622324f,0.99090263542778000971f,0.13001922272223334631f, +0.99151147331874389668f,0.12545498341154620592f,0.99209931314219179654f, +0.12088808723577722237f,0.99266614244894801899f,0.11631863091190487725f, +0.99321194923479450001f,0.11174671121112665639f,0.99373672194072459884f, +0.10717242495680887049f,0.99424044945318790223f,0.10259586902243628126f, +0.99472312110432570265f,0.09801714032956077016f,0.99518472667219681771f, +0.09343633584574791151f,0.99562525638099430569f,0.08885355258252468358f, +0.99604470090125196702f,0.08426888759332412659f,0.99644305135004263008f, +0.07968243797143012563f,0.99682029929116566791f,0.07509430084792129145f, +0.99717643673532618820f,0.07050457338961400866f,0.99751145614030345410f, +0.06591335279700392957f,0.99782535041111164453f,0.06132073630220864768f, +0.99811811290014917919f,0.05672682116690778292f,0.99838973740734016094f, +0.05213170468028331672f,0.99864021818026527111f,0.04753548415695926094f, +0.99886954991428356099f,0.04293825693494095902f,0.99907772775264536147f, +0.03834012037355279123f,0.99926474728659442359f,0.03374117185137764235f, +0.99943060455546173237f,0.02914150876419373953f,0.99957529604674921764f, +0.02454122852291226384f,0.99969881869620424997f,0.01994042855151459750f, +0.99980116988788425569f,0.01533920628498821985f,0.99988234745421256111f, +0.01073765916726457208f,0.99994234967602391162f,0.00613588464915451517f, +0.99998117528260110909f,0.00153398018628476615f,0.99999882345170187925f, +-0.00306795676296601561f,0.99999529380957619118f,-0.00766982873953095477f, +0.99997058643097413988f,-0.01227153828571982304f,0.99992470183914450299f, +-0.01687298794728165144f,0.99985764100582386060f,-0.02147408027546948359f, +0.99976940535121527898f,-0.02607471782910391472f,0.99965999674395922270f, +-0.03067480317663645942f,0.99952941750109314256f,-0.03527423889821382219f, +0.99937767038800284780f,-0.03987292758773972740f,0.99920475861836388631f, +-0.04447077185493861912f,0.99901068585407337697f,-0.04906767432741800800f, +0.99879545620517240501f,-0.05366353765273055437f,0.99855907422975931365f, +-0.05825826450043560673f,0.99830154493389289261f,-0.06285175756416130910f, +0.99802287377148624081f,-0.06744391956366398155f,0.99772306664419163624f, +-0.07203465324688929083f,0.99740212990127530279f,-0.07662386139203150592f, +0.99706007033948296225f,-0.08121144680959226092f,0.99669689520289606044f, +-0.08579731234443975507f,0.99631261218277800129f,-0.09038136087786488582f, +0.99590722941741172125f,-0.09496349532963895002f,0.99548075549192693856f, +-0.09954361866006931903f,0.99503319943811863180f,-0.10412163387205460030f, +0.99456457073425541537f,-0.10869744401313856386f,0.99407487930487947736f, +-0.11327095217756423529f,0.99356413552059530403f,-0.11784206150832489401f, +0.99303235019785141002f,-0.12241067519921615403f,0.99247953459870996706f, +-0.12697669649688586579f,0.99190570043060932726f,-0.13154002870288314386f, +0.99131085984611544415f,-0.13610057517570606223f,0.99069502544266463406f, +-0.14065823933284912761f,0.99005821026229712256f,-0.14521292465284740825f, +0.98940042779138037687f,-0.14976453467732150915f,0.98872169196032377858f, +-0.15431297301302013270f,0.98802201714328352633f,-0.15885814333386127917f, +0.98730141815785843473f,-0.16339994938297311422f,0.98655991026477551920f, +-0.16793829497473108936f,0.98579750916756747614f,-0.17247308399679592283f, +0.98501423101223983814f,-0.17700422041214874946f,0.98421009238692902521f, +-0.18153160826112502146f,0.98338511032155118130f,-0.18605515166344649414f, +0.98253930228744124076f,-0.19057475482025265645f,0.98167268619698311305f, +-0.19509032201612819257f,0.98078528040323043058f,-0.19960175762113094300f, +0.97987710369951763756f,-0.20410896609281689584f,0.97894817531906219710f, +-0.20861185197826331850f,0.97799851493455713936f,-0.21311031991609125091f, +0.97702814265775439484f,-0.21760427463848355800f,0.97603707903903913490f, +-0.22209362097320348162f,0.97502534506699412020f,-0.22657826384560997290f, +0.97399296216795583359f,-0.23105810828067113727f,0.97293995220556017678f, +-0.23553305940497534787f,0.97186633748027939639f,-0.24000302244874138768f, +0.97077214072895035013f,-0.24446790274782409513f,0.96965738512429244800f, +-0.24892760574572012078f,0.96852209427441737777f,-0.25338203699557015902f, +0.96736629222232850545f,-0.25783110216215882060f,0.96619000344541261516f, +-0.26227470702391347812f,0.96499325285492043580f,-0.26671275747489830987f, +0.96377606579543984022f,-0.27114515952680795507f,0.96253846804435916340f, +-0.27557181931095814376f,0.96128048581132063966f,-0.27999264308027327353f, +0.96000214573766584625f,-0.28440753721127171039f,0.95870347489587159906f, +-0.28881640820604936870f,0.95738450078897596729f,-0.29321916269425857271f, +0.95604525134999651659f,-0.29761570743508619641f,0.95468575494133833814f, +-0.30200594931922808417f,0.95330604035419386211f,-0.30638979537086097338f, +0.95190613680793234597f,-0.31076715274961136393f,0.95048607394948181337f, +-0.31513792875252233383f,0.94904588185270055689f,-0.31950203081601563637f, +0.94758559101774120226f,-0.32385936651785285356f,0.94610523237040344835f, +-0.32820984357909255280f,0.94460483726148025685f,-0.33255336986604405736f, +0.94308443746609349478f,-0.33688985339221994009f,0.94154406518302080631f, +-0.34121920232028229991f,0.93998375303401404679f,-0.34554132496398903829f, +0.93840353406310816897f,-0.34985612979013491763f,0.93680344173592156043f, +-0.35416352542049039931f,0.93518350993894761025f,-0.35846342063373642928f, +0.93354377297883628373f,-0.36275572436739711435f,0.93188426558166814750f, +-0.36704034571976712487f,0.93020502289221906889f,-0.37131719395183748755f, +0.92850608047321558924f,-0.37558617848921721505f,0.92678747430458174872f, +-0.37984720892405099413f,0.92504924078267769527f,-0.38410019501693493105f, +0.92329141671952774661f,-0.38834504669882619066f,0.92151403934204201285f, +-0.39258167407295141427f,0.91971714629122736095f,-0.39680998741671030805f, +0.91790077562139049672f,-0.40102989718357567872f,0.91606496579933172075f, +-0.40524131400498974998f,0.91420975570353069095f,-0.40944414869225753684f, +0.91233518462332285903f,-0.41363831223843450235f,0.91044129225806724737f, +-0.41782371582021227141f,0.90852811871630612117f,-0.42200027079979968159f, +0.90659570451491533483f,-0.42616788872679967071f,0.90464409057824612947f, +-0.43032648134008272267f,0.90267331823725871498f,-0.43447596056965581690f, +0.90068342922864685907f,-0.43861623853852738097f,0.89867446569395392775f, +-0.44274722756456980077f,0.89664647017868026602f,-0.44686884016237399253f, +0.89459948563138280697f,-0.45098098904510369733f,0.89253355540276468894f, +-0.45508358712634372489f,0.89044872324475798919f,-0.45917654752194403400f, +0.88834503330959635470f,-0.46325978355186014923f,0.88622253014888063838f, +-0.46733320874198841510f,0.88408125871263498752f,-0.47139673682599769755f, +0.88192126434835504956f,-0.47545028174715592284f,0.87974259280004740713f, +-0.47949375766015311928f,0.87754529020726124156f,-0.48352707893291846375f, +0.87532940310411100349f,-0.48755016014843571837f,0.87309497841829020182f, +-0.49156291610654972990f,0.87084206347007897531f,-0.49556526182577237405f, +0.86857070597134100609f,-0.49955711254508178287f,0.86628095402451310569f, +-0.50353838372571746440f,0.86397285612158680745f,-0.50750899105297075931f, +0.86164646114308141023f,-0.51146885043797041259f,0.85930181835700847337f, +-0.51541787801946303826f,0.85693897741782865118f,-0.51935599016558964269f, +0.85455798836540053376f,-0.52328310347565654137f,0.85215890162391971785f, +-0.52719913478190105760f,0.84974176800085265970f,-0.53110400115125477871f, +0.84730663868585853749f,-0.53499761988709704230f,0.84485356524970722791f, +-0.53887990853100831146f,0.84238259964318595863f,-0.54275078486451577842f, +0.83989379419599952126f,-0.54661016691083474939f,0.83738720161566193578f, +-0.55045797293660470029f,0.83486287498638012128f,-0.55429412145362011444f, +0.83232086776792968408f,-0.55811853122055610221f,0.82976123379452304540f, +-0.56193112124468946877f,0.82718402727366902027f,-0.56573181078361323149f, +0.82458930278502517996f,-0.56952051934694725155f,0.82197711527924144370f, +-0.57329716669804198226f,0.81934752007679712005f,-0.57706167285567933067f, +0.81670057286682795628f,-0.58081395809576441547f,0.81403632970594852480f, +-0.58455394295301521534f,0.81135484701706384048f,-0.58828154822264522306f, +0.80865618158817509364f,-0.59199669496204088137f,0.80594039057117639047f, +-0.59569930449243335691f,0.80320753148064494287f,-0.59938929840056454079f, +0.80045766219262282082f,-0.60306659854034827539f,0.79769084094339104407f, +-0.60673112703452458661f,0.79490712632823690154f,-0.61038280627630958630f, +0.79210657730021227785f,-0.61402155893103815831f,0.78928925316888587371f, +-0.61764730793780375784f,0.78645521359908587833f,-0.62125997651108744169f, +0.78360451860963831194f,-0.62485948814238623239f,0.78073722857209459924f, +-0.62844576660183260053f,0.77785340420945314754f,-0.63201873593980895105f, +0.77495310659487393057f,-0.63557832048855611440f,0.77203639715038452351f, +-0.63912444486377573138f,0.76910333764557958780f,-0.64265703396622686494f, +0.76615399019631280630f,-0.64617601298331639459f,0.76318841726338115805f, +-0.64968130739068330470f,0.76020668165120230952f,-0.65317284295377653347f, +0.75720884650648467851f,-0.65665054572942882505f,0.75419497531688928227f, +-0.66011434206742036768f,0.75116513190968658975f,-0.66356415861203965623f, +0.74811938045040371481f,-0.66699992230363736034f,0.74505778544146605835f, +-0.67042156038017308717f,0.74198041172083106787f,-0.67382900037875603783f, +0.73888732446061522463f,-0.67722217013718044587f,0.73577858916571359238f, +-0.68060099779545302212f,0.73265427167241281570f,-0.68396541179731551452f, +0.72951443814699701296f,-0.68731534089175916336f,0.72635915508434589771f, +-0.69065071413453438254f,0.72318848930652757101f,-0.69397146088965377952f, +0.72000250796138176579f,-0.69727751083088640449f,0.71680127852109964959f, +-0.70056879394324822474f,0.71358486878079363525f,-0.70384524052448482756f, +0.71035334685706241764f,-0.70710678118654746172f,0.70710678118654757274f, +-0.71035334685706230662f,0.70384524052448504960f,-0.71358486878079352422f, +0.70056879394324833576f,-0.71680127852109953857f,0.69727751083088651551f, +-0.72000250796138165477f,0.69397146088965389055f,-0.72318848930652745999f, +0.69065071413453460458f,-0.72635915508434578669f,0.68731534089175927438f, +-0.72951443814699679091f,0.68396541179731562554f,-0.73265427167241270467f, +0.68060099779545324417f,-0.73577858916571337033f,0.67722217013718055689f, +-0.73888732446061511361f,0.67382900037875614885f,-0.74198041172083095685f, +0.67042156038017319819f,-0.74505778544146594733f,0.66699992230363758239f, +-0.74811938045040360379f,0.66356415861203976725f,-0.75116513190968636771f, +0.66011434206742047870f,-0.75419497531688917125f,0.65665054572942904709f, +-0.75720884650648467851f,0.65317284295377664449f,-0.76020668165120219850f, +0.64968130739068341573f,-0.76318841726338115805f,0.64617601298331661663f, +-0.76615399019631280630f,0.64265703396622708699f,-0.76910333764557947678f, +0.63912444486377584241f,-0.77203639715038441249f,0.63557832048855622542f, +-0.77495310659487381955f,0.63201873593980906207f,-0.77785340420945303652f, +0.62844576660183271155f,-0.78073722857209448822f,0.62485948814238634341f, +-0.78360451860963820092f,0.62125997651108755271f,-0.78645521359908576731f, +0.61764730793780386886f,-0.78928925316888576269f,0.61402155893103838036f, +-0.79210657730021216683f,0.61038280627630969732f,-0.79490712632823679051f, +0.60673112703452469763f,-0.79769084094339093305f,0.60306659854034838641f, +-0.80045766219262259877f,0.59938929840056465181f,-0.80320753148064483184f, +0.59569930449243346793f,-0.80594039057117627944f,0.59199669496204099239f, +-0.80865618158817498262f,0.58828154822264533408f,-0.81135484701706372945f, +0.58455394295301532637f,-0.81403632970594841378f,0.58081395809576452649f, +-0.81670057286682784525f,0.57706167285567944170f,-0.81934752007679700903f, +0.57329716669804209328f,-0.82197711527924133268f,0.56952051934694747359f, +-0.82458930278502506894f,0.56573181078361345353f,-0.82718402727366902027f, +0.56193112124468957980f,-0.82976123379452293438f,0.55811853122055632426f, +-0.83232086776792957306f,0.55429412145362022546f,-0.83486287498638001026f, +0.55045797293660492233f,-0.83738720161566182476f,0.54661016691083497143f, +-0.83989379419599952126f,0.54275078486451588944f,-0.84238259964318584760f, +0.53887990853100842248f,-0.84485356524970711689f,0.53499761988709715332f, +-0.84730663868585842646f,0.53110400115125488973f,-0.84974176800085254868f, +0.52719913478190127964f,-0.85215890162391960683f,0.52328310347565665239f, +-0.85455798836540042274f,0.51935599016558975372f,-0.85693897741782865118f, +0.51541787801946314929f,-0.85930181835700836235f,0.51146885043797052361f, +-0.86164646114308129921f,0.50750899105297098135f,-0.86397285612158669643f, +0.50353838372571757542f,-0.86628095402451299467f,0.49955711254508189390f, +-0.86857070597134089507f,0.49556526182577254058f,-0.87084206347007886428f, +0.49156291610654989643f,-0.87309497841829009079f,0.48755016014843588490f, +-0.87532940310411089246f,0.48352707893291863028f,-0.87754529020726113053f, +0.47949375766015328582f,-0.87974259280004729611f,0.47545028174715608937f, +-0.88192126434835493853f,0.47139673682599780857f,-0.88408125871263487650f, +0.46733320874198858164f,-0.88622253014888052736f,0.46325978355186031576f, +-0.88834503330959624368f,0.45917654752194420054f,-0.89044872324475787817f, +0.45508358712634389143f,-0.89253355540276457791f,0.45098098904510386387f, +-0.89459948563138269595f,0.44686884016237415906f,-0.89664647017868026602f, +0.44274722756456996731f,-0.89867446569395392775f,0.43861623853852754751f, +-0.90068342922864674804f,0.43447596056965598343f,-0.90267331823725871498f, +0.43032648134008288920f,-0.90464409057824612947f,0.42616788872679983724f, +-0.90659570451491533483f,0.42200027079979984812f,-0.90852811871630612117f, +0.41782371582021243794f,-0.91044129225806713634f,0.41363831223843466889f, +-0.91233518462332274801f,0.40944414869225770337f,-0.91420975570353069095f, +0.40524131400498991651f,-0.91606496579933172075f,0.40102989718357562321f, +-0.91790077562139049672f,0.39680998741671025254f,-0.91971714629122736095f, +0.39258167407295141427f,-0.92151403934204179080f,0.38834504669882657923f, +-0.92329141671952752457f,0.38410019501693531963f,-0.92504924078267747323f, +0.37984720892405138271f,-0.92678747430458174872f,0.37558617848921738158f, +-0.92850608047321547822f,0.37131719395183770960f,-0.93020502289221906889f, +0.36704034571976729140f,-0.93188426558166803648f,0.36275572436739728088f, +-0.93354377297883617270f,0.35846342063373659581f,-0.93518350993894761025f, +0.35416352542049039931f,-0.93680344173592167145f,0.34985612979013486212f, +-0.93840353406310816897f,0.34554132496398898278f,-0.93998375303401382475f, +0.34121920232028268849f,-0.94154406518302069529f,0.33688985339222032867f, +-0.94308443746609338376f,0.33255336986604444593f,-0.94460483726148014583f, +0.32820984357909271933f,-0.94610523237040333733f,0.32385936651785302010f, +-0.94758559101774109124f,0.31950203081601580291f,-0.94904588185270055689f, +0.31513792875252250036f,-0.95048607394948170235f,0.31076715274961153046f, +-0.95190613680793234597f,0.30638979537086091787f,-0.95330604035419386211f, +0.30200594931922802866f,-0.95468575494133833814f,0.29761570743508614090f, +-0.95604525134999629454f,0.29321916269425896129f,-0.95738450078897585627f, +0.28881640820604975728f,-0.95870347489587148804f,0.28440753721127209896f, +-0.96000214573766584625f,0.27999264308027344006f,-0.96128048581132063966f, +0.27557181931095831029f,-0.96253846804435916340f,0.27114515952680812161f, +-0.96377606579543984022f,0.26671275747489847641f,-0.96499325285492032478f, +0.26227470702391370017f,-0.96619000344541250413f,0.25783110216215898713f, +-0.96736629222232850545f,0.25338203699557010351f,-0.96852209427441737777f, +0.24892760574572009302f,-0.96965738512429233698f,0.24446790274782448371f, +-0.97077214072895023911f,0.24000302244874177626f,-0.97186633748027928537f, +0.23553305940497573645f,-0.97293995220556006576f,0.23105810828067133156f, +-0.97399296216795583359f,0.22657826384561016719f,-0.97502534506699412020f, +0.22209362097320364815f,-0.97603707903903902388f,0.21760427463848372454f, +-0.97702814265775439484f,0.21311031991609141745f,-0.97799851493455713936f, +0.20861185197826351279f,-0.97894817531906219710f,0.20410896609281684033f, +-0.97987710369951763756f,0.19960175762113091524f,-0.98078528040323043058f, +0.19509032201612860891f,-0.98167268619698311305f,0.19057475482025307278f, +-0.98253930228744124076f,0.18605515166344691047f,-0.98338511032155118130f, +0.18153160826112521575f,-0.98421009238692902521f,0.17700422041214894375f, +-0.98501423101223983814f,0.17247308399679611712f,-0.98579750916756736512f, +0.16793829497473128365f,-0.98655991026477540817f,0.16339994938297328075f, +-0.98730141815785843473f,0.15885814333386147346f,-0.98802201714328352633f, +0.15431297301302007718f,-0.98872169196032377858f,0.14976453467732145364f, +-0.98940042779138037687f,0.14521292465284735274f,-0.99005821026229701154f, +0.14065823933284954395f,-0.99069502544266463406f,0.13610057517570647856f, +-0.99131085984611544415f,0.13154002870288333815f,-0.99190570043060932726f, +0.12697669649688606008f,-0.99247953459870996706f,0.12241067519921634832f, +-0.99303235019785141002f,0.11784206150832508830f,-0.99356413552059530403f, +0.11327095217756441570f,-0.99407487930487936634f,0.10869744401313874427f, +-0.99456457073425541537f,0.10412163387205457254f,-0.99503319943811863180f, +0.09954361866006927739f,-0.99548075549192693856f,0.09496349532963890838f, +-0.99590722941741172125f,0.09038136087786528827f,-0.99631261218277800129f, +0.08579731234444015753f,-0.99669689520289606044f,0.08121144680959266338f, +-0.99706007033948296225f,0.07662386139203168633f,-0.99740212990127530279f, +0.07203465324688947125f,-0.99772306664419163624f,0.06744391956366417584f, +-0.99802287377148624081f,0.06285175756416148951f,-0.99830154493389289261f, +0.05825826450043579408f,-0.99855907422975931365f,0.05366353765273051968f, +-0.99879545620517240501f,0.04906767432741796636f,-0.99901068585407337697f, +0.04447077185493858442f,-0.99920475861836388631f,0.03987292758774012985f, +-0.99937767038800284780f,0.03527423889821423159f,-0.99952941750109314256f, +0.03067480317663686534f,-0.99965999674395922270f,0.02607471782910409860f, +-0.99976940535121527898f,0.02147408027546966747f,-0.99985764100582386060f, +0.01687298794728183532f,-0.99992470183914450299f,0.01227153828572000692f, +-0.99997058643097413988f,0.00766982873953113778f,-0.99999529380957619118f, +0.00306795676296597701f,-0.99999882345170187925f,-0.00153398018628480431f, +-0.99998117528260110909f,-0.00613588464915455420f,-0.99994234967602391162f, +-0.01073765916726416615f,-0.99988234745421256111f,-0.01533920628498781566f, +-0.99980116988788425569f,-0.01994042855151419158f,-0.99969881869620424997f, +-0.02454122852291207996f,-0.99957529604674921764f,-0.02914150876419355565f, +-0.99943060455546173237f,-0.03374117185137745500f,-0.99926474728659442359f, +-0.03834012037355261082f,-0.99907772775264536147f,-0.04293825693494077861f, +-0.99886954991428356099f,-0.04753548415695929563f,-0.99864021818026527111f, +-0.05213170468028335142f,-0.99838973740734016094f,-0.05672682116690781762f, +-0.99811811290014917919f,-0.06132073630220824523f,-0.99782535041111164453f, +-0.06591335279700352712f,-0.99751145614030345410f,-0.07050457338961360620f, +-0.99717643673532618820f,-0.07509430084792109716f,-0.99682029929116577893f, +-0.07968243797142994522f,-0.99644305135004263008f,-0.08426888759332393231f, +-0.99604470090125196702f,-0.08885355258252450317f,-0.99562525638099430569f, +-0.09343633584574773110f,-0.99518472667219692873f,-0.09801714032956058975f, +-0.99472312110432570265f,-0.10259586902243630901f,-0.99424044945318790223f, +-0.10717242495680891212f,-0.99373672194072470987f,-0.11174671121112625394f, +-0.99321194923479461103f,-0.11631863091190447479f,-0.99266614244894801899f, +-0.12088808723577681992f,-0.99209931314219179654f,-0.12545498341154601163f, +-0.99151147331874400770f,-0.13001922272223317978f,-0.99090263542778000971f, +-0.13458070850712605671f,-0.99027281236316910817f,-0.13913934416382611747f, +-0.98962201746320088702f,-0.14369503315029438784f,-0.98895026451030298986f, +-0.14824767898689603096f,-0.98825756773074946437f,-0.15279718525844343535f, +-0.98754394179435922574f,-0.15734345561623830356f,-0.98680940181418552726f, +-0.16188639378011149272f,-0.98605396334619543897f,-0.16642590354046382650f, +-0.98527764238894133264f,-0.17096188876030096737f,-0.98448045538322093151f, +-0.17549425337727120322f,-0.98366241921173025453f,-0.18002290140569934818f, +-0.98282355119870534743f,-0.18454773693861947770f,-0.98196386910955524296f, +-0.18906866414980610935f,-0.98108339115048670553f,-0.19358558729580355173f, +-0.98018213596811742949f,-0.19809841071795356027f,-0.97926012264908202098f, +-0.20260703884442113343f,-0.97831737071962765473f,-0.20711137619221858808f, +-0.97735390014519996082f,-0.21161132736922766417f,-0.97636973133002125103f, +-0.21610679707621921475f,-0.97536488511665697665f,-0.22059769010887325669f, +-0.97433938278557585821f,-0.22508391135979261000f,-0.97329324605469824672f, +-0.22956536582051870199f,-0.97222649707893638027f,-0.23404195858354326365f, +-0.97113915844972520386f,-0.23851359484431830515f,-0.97003125319454397424f, +-0.24298017990326381543f,-0.96890280477642887202f,-0.24744161916777326904f, +-0.96775383709347551076f,-0.25189781815421696809f,-0.96658437447833311928f, +-0.25634868248994291395f,-0.96539444169768939830f,-0.26079411791527562503f, +-0.96418406395174582890f,-0.26523403028551151284f,-0.96295326687368398844f, +-0.26966832557291481320f,-0.96170207652912265139f,-0.27409690986870616225f, +-0.96043051941556589757f,-0.27851968938505289319f,-0.95913862246184200533f, +-0.28293657045705516984f,-0.95782641302753290802f,-0.28734745954472939999f, +-0.95649391890239510161f,-0.29175226323498920644f,-0.95514116830577078243f, +-0.29615088824362378883f,-0.95376818988599032512f,-0.30054324141727345454f, +-0.95237501271976587880f,-0.30492922973540242948f,-0.95096166631157508231f, +-0.30930876031226878231f,-0.94952818059303678577f,-0.31368174039889118454f, +-0.94807458592227633609f,-0.31804807738501467140f,-0.94660091308328364601f, +-0.32240767880106963039f,-0.94510719328526060501f,-0.32676045232013156694f, +-0.94359345816196038559f,-0.33110630575987626267f,-0.94205973977101742367f, +-0.33544514708453149199f,-0.94050607059326840620f,-0.33977688440682679571f, +-0.93893248353206459900f,-0.34410142598993881391f,-0.93733901191257495977f, +-0.34841868024943456472f,-0.93572568948108036935f,-0.35272855575521072646f, +-0.93409255040425887007f,-0.35703096123343008861f,-0.93243962926846246653f, +-0.36132580556845395048f,-0.93076696107898382326f,-0.36561299780477357624f, +-0.92907458125931585702f,-0.36989244714893387833f,-0.92736252565040111495f, +-0.37416406297145782256f,-0.92563083050987282618f,-0.37842775480876539307f, +-0.92387953251128684951f,-0.38268343236508967076f,-0.92210866874334518339f, +-0.38693100551438852630f,-0.92031827670911059425f,-0.39117038430225381518f, +-0.91850839432521225181f,-0.39540147894781629834f,-0.91667905992104270485f, +-0.39962419984564684361f,-0.91483031223794608611f,-0.40383845756765418544f, +-0.91296219042839832358f,-0.40804416286497835475f,-0.91107473405517647169f, +-0.41224122666988260999f,-0.90916798309052249127f,-0.41642956009763693048f, +-0.90724197791529592738f,-0.42060907444840234248f,-0.90529675931811881551f, +-0.42477968120910863936f,-0.90333236849451192807f,-0.42894129205532938176f, +-0.90134884704602202810f,-0.43309381885315184624f,-0.89934623697934157338f, +-0.43723717366104403181f,-0.89732458070541831763f,-0.44137126873171667052f, +-0.89528392103855747308f,-0.44549601651398174074f,-0.89322430119551532446f, +-0.44961132965460665067f,-0.89114576479458340597f,-0.45371712100016353686f, +-0.88904835585466468473f,-0.45781330359887695280f,-0.88693211879434230571f, +-0.46189979070246250936f,-0.88479709843093790056f,-0.46597649576796595916f, +-0.88264333997956290201f,-0.47004333245959545318f,-0.88047088905216086552f, +-0.47410021465054985601f,-0.87827979165654157523f,-0.47814705642484295334f, +-0.87607009419540660122f,-0.48218377207912266336f,-0.87384184346536686316f, +-0.48621027612448636246f,-0.87159508665595109012f,-0.49022648328829115938f, +-0.86932987134860673084f,-0.49423230851595978397f,-0.86704624551569287050f, +-0.49822766697278153547f,-0.86474425751946248919f,-0.50221247404571056627f, +-0.86242395611104072373f,-0.50618664534515500630f,-0.86008539042939025077f, +-0.51015009670676658704f,-0.85772861000027211809f,-0.51410274419322155026f, +-0.85535366473519613972f,-0.51804450409599922533f,-0.85296060493036374162f, +-0.52197529293715427823f,-0.85054948126560347976f,-0.52589502747108463065f, +-0.84812034480329723252f,-0.52980362468629460526f,-0.84567324698729906540f, +-0.53370100180715296379f,-0.84320823964184543620f,-0.53758707629564550512f, +-0.84072537497045818355f,-0.54146176585312322249f,-0.83822470555483818977f, +-0.54532498842204613076f,-0.83570628435375271525f,-0.54917666218771943321f, +-0.83317016470191329613f,-0.55301670558002735678f,-0.83061640030884642538f, +-0.55684503727515988203f,-0.82804504525775590729f,-0.56066157619733592021f, +-0.82545615400437755138f,-0.56446624152051938506f,-0.82284978137582642788f, +-0.56825895267013148970f,-0.82022598256943468620f,-0.57203962932475704850f, +-0.81758481315158371139f,-0.57580819141784533866f,-0.81492632905652662156f, +-0.57956455913940574387f,-0.81225058658520388200f,-0.58330865293769829094f, +-0.80955764240405148069f,-0.58704039352091774706f,-0.80684755354379944503f, +-0.59075970185887394237f,-0.80412037739826591753f,-0.59446649918466420992f, +-0.80137617172314035141f,-0.59816070699634216190f,-0.79861499463476093297f, +-0.60184224705857991555f,-0.79583690460888356633f,-0.60551104140432543410f, +-0.79304196047944375270f,-0.60916701233645309532f,-0.79023022143731003197f, +-0.61281008242940970820f,-0.78740174702903142911f,-0.61644017453085364622f, +-0.78455659715557524159f,-0.62005721176328920663f,-0.78169483207105938671f, +-0.62366111752569464155f,-0.77881651238147620031f,-0.62725181549514386070f, +-0.77592169904340779762f,-0.63082922962842424841f,-0.77301045336273710440f, +-0.63439328416364526575f,-0.77008283699334811878f,-0.63794390362184394405f, +-0.76713891193582051109f,-0.64148101280858305095f,-0.76417874053611678509f, +-0.64500453681554381635f,-0.76120238548426188974f,-0.64851440102211233008f, +-0.75820990981301539247f,-0.65201053109695950027f,-0.75520137689653654700f, +-0.65549285299961534967f,-0.75217685044904269986f,-0.65896129298203731661f, +-0.74913639452345925918f,-0.66241577759017178373f,-0.74608007351006400132f, +-0.66585623366550938940f,-0.74300795213512194071f,-0.66928258834663578725f, +-0.73992009545951631377f,-0.67269476907077274674f,-0.73681656887737001504f, +-0.67609270357531581208f,-0.73369743811466037187f,-0.67947631989936485564f, +-0.73056276922782770189f,-0.68284554638524797010f,-0.72741262860237587695f, +-0.68620031168003847721f,-0.72424708295146700276f,-0.68954054473706682948f, +-0.72106619931450810501f,-0.69286617481742462932f,-0.71787004505573170920f, +-0.69617713149146298601f,-0.71465868786276898206f,-0.69947334464028387835f, +-0.71143219574521665560f,-0.70275474445722507788f,-0.70819063703319551362f, +-0.70602126144933952112f,-0.70493408037590510329f,-0.70927282643886546687f, +-0.70166259474016867692f,-0.71250937056469221265f,-0.69837624940897302661f, +-0.71573082528381848366f,-0.69507511398000099145f,-0.71893712237280438249f, +-0.69175925836415785852f,-0.72212819392921523409f,-0.68842875278409054740f, +-0.72530397237306065694f,-0.68508366777270035541f,-0.72846439044822519637f, +-0.68172407417164981869f,-0.73160938122389251870f,-0.67835004312986146857f, +-0.73473887809596349907f,-0.67496164610201225820f,-0.73785281478846576064f, +-0.67155895484701866316f,-0.74095112535495888384f,-0.66814204142651867357f, +-0.74403374417992906853f,-0.66471097820334501538f,-0.74710060598017991040f, +-0.66126583783999237642f,-0.75015164580621496171f,-0.65780669329707874837f, +-0.75318679904361240940f,-0.65433361783180066240f,-0.75620600141439442421f, +-0.65084668499638098638f,-0.75920918897838796102f,-0.64734596863651250320f, +-0.76219629813457856482f,-0.64383154288979149715f,-0.76516726562245895860f, +-0.64030348218415200634f,-0.76812202852336519676f,-0.63676186123628419899f, +-0.77106052426181381776f,-0.63320675505005752370f,-0.77398269060682256537f, +-0.62963823891492687324f,-0.77688846567323255332f,-0.62605638840434374437f, +-0.77977778792301433164f,-0.62246127937414974518f,-0.78265059616657584041f, +-0.61885298796097643059f,-0.78550682956405382118f,-0.61523159058062726334f, +-0.78834642762660589455f,-0.61159716392646201744f,-0.79116933021769009216f, +-0.60794978496777407617f,-0.79397547755433683925f,-0.60428953094815607283f, +-0.79676481020841871672f,-0.60061647938386930612f,-0.79953726910790479110f, +-0.59693070806219639124f,-0.80229279553811572168f,-0.59323229503980012822f, +-0.80503133114296343553f,-0.58952131864106382952f,-0.80775281792619046950f, +-0.58579785745643908612f,-0.81045719825259465718f,-0.58206199034077532595f, +-0.81314441484925370496f,-0.57831379641165570060f,-0.81581441080673366972f, +-0.57455335504771631872f,-0.81846712958029832485f,-0.57078074588696736669f, +-0.82110251499110464835f,-0.56699604882510901138f,-0.82372051122739109452f, +-0.56319934401383409117f,-0.82632106284566342325f,-0.55939071185913646911f, +-0.82890411477186465294f,-0.55557023301960217765f,-0.83146961230254523567f, +-0.55173798840470766880f,-0.83401750110601791111f,-0.54789405917310007865f, +-0.83654772722351211645f,-0.54403852673088415326f,-0.83906023707031252012f, +-0.54017147272989274320f,-0.84155497743689855472f,-0.53629297906596329337f, +-0.84403189549006629733f,-0.53240312787719845655f,-0.84649093877405179320f, +-0.52850200154222859439f,-0.84893205521163961347f,-0.52458968267846928235f, +-0.85135519310526486247f,-0.52066625414036715735f,-0.85376030113811141042f, +-0.51673179901765020627f,-0.85614732837519424979f,-0.51278640063356295542f, +-0.85851622426444285097f,-0.50883014254310732216f,-0.86086693863776708735f, +-0.50486310853126736831f,-0.86319942171212427073f,-0.50088538261124104789f, +-0.86551362409056897818f,-0.49689704902265435793f,-0.86780949676330332299f, +-0.49289819222978420443f,-0.87008699110871134952f,-0.48888889691976367136f, +-0.87234605889439120752f,-0.48486924800079117537f,-0.87458665227817611321f, +-0.48083933060033440254f,-0.87680872380914542941f,-0.47679923006332214364f, +-0.87901222642863341417f,-0.47274903195034317926f,-0.88119711347122187117f, +-0.46868882203582790114f,-0.88336333866573157891f,-0.46461868630623814891f, +-0.88551085613619973103f,-0.46053871095823989412f,-0.88763962040285404598f, +-0.45644898239688419528f,-0.88974958638307266590f,-0.45234958723377066692f, +-0.89184070939234283415f,-0.44824061228522010802f,-0.89391294514520314163f, +-0.44412214457042975546f,-0.89596624975618488484f,-0.43999427130963336685f, +-0.89800057974073976830f,-0.43585707992225597440f,-0.90001589201615994629f, +-0.43171065802505731446f,-0.90201214390249317976f,-0.42755509343028247349f, +-0.90398929312344311615f,-0.42339047414379599177f,-0.90594729780726845902f, +-0.41921688836322429372f,-0.90788611648766603945f,-0.41503442447608152044f, +-0.90980570810465233311f,-0.41084317105790418845f,-0.91170603200542976730f, +-0.40664321687036886210f,-0.91358704794525091852f,-0.40243465085941865222f, +-0.91544871608826772214f,-0.39821756215337417162f,-0.91729099700837768427f, +-0.39399204006104820985f,-0.91911385169005765938f,-0.38975817406985696634f, +-0.92091724152918930102f,-0.38551605384391890441f,-0.92270112833387851747f, +-0.38126576922216276477f,-0.92446547432526249288f,-0.37700741021641820394f, +-0.92621024213831137928f,-0.37274106700951614712f,-0.92793539482261766516f, +-0.36846682995337221023f,-0.92964089584318132520f,-0.36418478956708016936f, +-0.93132670908118031505f,-0.35989503653498794433f,-0.93299279883473895669f, +-0.35559766170478407377f,-0.93463912981968066962f,-0.35129275608556687072f, +-0.93626566717027837061f,-0.34698041084592379235f,-0.93787237643998977443f, +-0.34266071731199487793f,-0.93945922360218969693f,-0.33833376696554123830f, +-0.94102617505088925753f,-0.33399965144200982614f,-0.94257319760144675502f, +-0.32965846252858749255f,-0.94410025849127265918f,-0.32531029216226331480f, +-0.94560732538052116869f,-0.32095523242787515894f,-0.94709436635277721717f, +-0.31659337555616617887f,-0.94856134991573015647f,-0.31222481392182477311f, +-0.95000824500184311017f,-0.30784964004153508865f,-0.95143502096900833820f, +-0.30346794657201103806f,-0.95284164760119871573f,-0.29907982630804058610f, +-0.95422809510910555630f,-0.29468537218051488180f,-0.95559433413077088382f, +-0.29028467725446244208f,-0.95694033573220882438f,-0.28587783472708105936f, +-0.95826607140801756124f,-0.28146493792575794091f,-0.95957151308198451733f, +-0.27704608030610028413f,-0.96085663310767954748f,-0.27262135544994886560f, +-0.96212140426904158019f,-0.26819085706340350939f,-0.96336579978095393528f, +-0.26375467897483123592f,-0.96458979328981275803f,-0.25931291513288645678f, +-0.96579335887408357397f,-0.25486565960451434965f,-0.96697647104485218161f, +-0.25041300657296539089f,-0.96813910474636233339f,-0.24595505033579515008f, +-0.96928123535654830967f,-0.24149188530286941345f,-0.97040283868755550234f, +-0.23702360599436766986f,-0.97150389098625167250f,-0.23255030703877521692f, +-0.97258436893473221296f,-0.22807208317088611960f,-0.97364424965081186603f, +-0.22358902922978990402f,-0.97468351068851066810f,-0.21910124015687010290f, +-0.97570213003852845901f,-0.21460881099378659176f,-0.97670008612871184184f, +-0.21011183688046985996f,-0.97767735782450992943f,-0.20561041305309901706f, +-0.97863392442942320759f,-0.20110463484209206708f,-0.97956976568544051887f, +-0.19659459767008077846f,-0.98048486177346927395f,-0.19208039704989252061f, +-0.98137919331375456089f,-0.18756212858253007436f,-0.98225274136628937249f, +-0.18303988795514095078f,-0.98310548743121628501f,-0.17851377093899792325f, +-0.98393741344921881176f,-0.17398387338746373887f,-0.98474850180190420801f, +-0.16945029123396829207f,-0.98553873531217606185f,-0.16491312048996975559f, +-0.98630809724459866938f,-0.16037245724292850668f,-0.98705657130575097380f, +-0.15582839765426498291f,-0.98778414164457217783f,-0.15128103795733036097f, +-0.98849079285269658701f,-0.14673047445536230304f,-0.98917650996478090342f, +-0.14217680351944814165f,-0.98984127845882052821f,-0.13762012158648653792f, +-0.99048508425645698239f,-0.13306052515713906459f,-0.99110791372327688986f, +-0.12849811079379358514f,-0.99170975366909952520f,-0.12393297511851208981f, +-0.99229059134825736699f,-0.11936521481099168773f,-0.99285041445986510489f, +-0.11479492660650993108f,-0.99338921114808065305f,-0.11022220729388330918f, +-0.99390697000235606051f,-0.10564715371341037997f,-0.99440368005767909576f, +-0.10106986275482798820f,-0.99487933079480561638f,-0.09649043135525316173f, +-0.99533391214048216877f,-0.09190895649713282101f,-0.99576741446765981713f, +-0.08732553520619255882f,-0.99617982859569687015f,-0.08274026454937570552f, +-0.99657114579055483539f,-0.07815324163279464831f,-0.99694135776498205015f, +-0.07356456359966735692f,-0.99729045667869020697f,-0.06897432762826707919f, +-0.99761843513851955478f,-0.06438263092985731240f,-0.99792528619859599548f, +-0.05978957074664013188f,-0.99821100336047818846f,-0.05519524434968971216f, +-0.99847558057329477421f,-0.05059974903689945513f,-0.99871901223387293811f, +-0.04600318213091520586f,-0.99894129318685687124f,-0.04140564097707683661f, +-0.99914241872481690532f,-0.03680722294135933131f,-0.99932238458834943273f, +-0.03220802540830459970f,-0.99948118696616694567f,-0.02760814577896616301f, +-0.99961882249517863830f,-0.02300768146883930970f,-0.99973528826056168306f, +-0.01840672990580516366f,-0.99983058179582340319f,-0.01380538852806025008f, +-0.99990470108285289808f,-0.00920375478206008311f,-0.99995764455196389786f, +-0.00460192612044835019f,-0.99998941108192840321f,1.00000000000000000000f, +0.00000000000000000000f,0.99983058179582340319f,0.01840672990580482019f, +0.99932238458834954375f,0.03680722294135883171f,0.99847558057329477421f, +0.05519524434968993420f,0.99729045667869020697f,0.07356456359966742631f, +0.99576741446765981713f,0.09190895649713272386f,0.99390697000235606051f, +0.11022220729388305938f,0.99170975366909952520f,0.12849811079379316880f, +0.98917650996478101444f,0.14673047445536174793f,0.98630809724459866938f, +0.16491312048996989437f,0.98310548743121628501f,0.18303988795514095078f, +0.97956976568544051887f,0.20110463484209190055f,0.97570213003852857003f, +0.21910124015686979759f,0.97150389098625178352f,0.23702360599436719801f, +0.96697647104485207059f,0.25486565960451457169f,0.96212140426904158019f, +0.27262135544994897662f,0.95694033573220882438f,0.29028467725446233105f, +0.95143502096900833820f,0.30784964004153486661f,0.94560732538052127971f, +0.32531029216226292622f,0.93945922360218991898f,0.34266071731199437833f, +0.93299279883473895669f,0.35989503653498811087f,0.92621024213831137928f, +0.37700741021641825945f,0.91911385169005777040f,0.39399204006104809883f, +0.91170603200542987832f,0.41084317105790391089f,0.90398929312344333820f, +0.42755509343028208491f,0.89596624975618521791f,0.44412214457042920035f, +0.88763962040285393496f,0.46053871095824000514f,0.87901222642863352519f, +0.47679923006332208812f,0.87008699110871146054f,0.49289819222978403790f, +0.86086693863776730939f,0.50883014254310698909f,0.85135519310526519554f, +0.52458968267846894928f,0.84155497743689844370f,0.54017147272989285423f, +0.83146961230254523567f,0.55557023301960217765f,0.82110251499110464835f, +0.57078074588696725566f,0.81045719825259476821f,0.58579785745643886408f, +0.79953726910790501314f,0.60061647938386897305f,0.78834642762660622761f, +0.61523159058062681925f,0.77688846567323244230f,0.62963823891492698426f, +0.76516726562245895860f,0.64383154288979138613f,0.75318679904361252042f, +0.65780669329707863735f,0.74095112535495921691f,0.67155895484701833009f, +0.72846439044822519637f,0.68508366777270035541f,0.71573082528381870571f, +0.69837624940897280457f,0.70275474445722529993f,0.71143219574521643356f, +0.68954054473706694051f,0.72424708295146689174f,0.67609270357531603413f, +0.73681656887736979300f,0.66241577759017178373f,0.74913639452345925918f, +0.64851440102211255212f,0.76120238548426177871f,0.63439328416364548779f, +0.77301045336273688235f,0.62005721176328920663f,0.78455659715557524159f, +0.60551104140432554512f,0.79583690460888345530f,0.59075970185887427544f, +0.80684755354379922299f,0.57580819141784533866f,0.81758481315158371139f, +0.56066157619733603124f,0.82804504525775579626f,0.54532498842204646383f, +0.83822470555483796772f,0.52980362468629482731f,0.84812034480329712149f, +0.51410274419322166128f,0.85772861000027211809f,0.49822766697278186854f, +0.86704624551569264845f,0.48218377207912282989f,0.87607009419540660122f, +0.46597649576796612569f,0.88479709843093778954f,0.44961132965460659516f, +0.89322430119551532446f,0.43309381885315201277f,0.90134884704602202810f, +0.41642956009763731906f,0.90916798309052226923f,0.39962419984564678810f, +0.91667905992104270485f,0.38268343236508983729f,0.92387953251128673848f, +0.36561299780477396482f,0.93076696107898371224f,0.34841868024943450921f, +0.93733901191257495977f,0.33110630575987642921f,0.94359345816196038559f, +0.31368174039889157312f,0.94952818059303667475f,0.29615088824362395536f, +0.95514116830577067141f,0.27851968938505305973f,0.96043051941556578655f, +0.26079411791527556952f,0.96539444169768939830f,0.24298017990326398197f, +0.97003125319454397424f,0.22508391135979277653f,0.97433938278557585821f, +0.20711137619221856032f,0.97831737071962765473f,0.18906866414980627589f, +0.98196386910955524296f,0.17096188876030135595f,0.98527764238894122162f, +0.15279718525844340760f,0.98825756773074946437f,0.13458070850712622324f, +0.99090263542778000971f,0.11631863091190487725f,0.99321194923479450001f, +0.09801714032956077016f,0.99518472667219681771f,0.07968243797143012563f, +0.99682029929116566791f,0.06132073630220864768f,0.99811811290014917919f, +0.04293825693494095902f,0.99907772775264536147f,0.02454122852291226384f, +0.99969881869620424997f,0.00613588464915451517f,0.99998117528260110909f, +-0.01227153828571982304f,0.99992470183914450299f,-0.03067480317663645942f, +0.99952941750109314256f,-0.04906767432741800800f,0.99879545620517240501f, +-0.06744391956366398155f,0.99772306664419163624f,-0.08579731234443975507f, +0.99631261218277800129f,-0.10412163387205460030f,0.99456457073425541537f, +-0.12241067519921615403f,0.99247953459870996706f,-0.14065823933284912761f, +0.99005821026229712256f,-0.15885814333386127917f,0.98730141815785843473f, +-0.17700422041214874946f,0.98421009238692902521f,-0.19509032201612819257f, +0.98078528040323043058f,-0.21311031991609125091f,0.97702814265775439484f, +-0.23105810828067113727f,0.97293995220556017678f,-0.24892760574572012078f, +0.96852209427441737777f,-0.26671275747489830987f,0.96377606579543984022f, +-0.28440753721127171039f,0.95870347489587159906f,-0.30200594931922808417f, +0.95330604035419386211f,-0.31950203081601563637f,0.94758559101774120226f, +-0.33688985339221994009f,0.94154406518302080631f,-0.35416352542049039931f, +0.93518350993894761025f,-0.37131719395183748755f,0.92850608047321558924f, +-0.38834504669882619066f,0.92151403934204201285f,-0.40524131400498974998f, +0.91420975570353069095f,-0.42200027079979968159f,0.90659570451491533483f, +-0.43861623853852738097f,0.89867446569395392775f,-0.45508358712634372489f, +0.89044872324475798919f,-0.47139673682599769755f,0.88192126434835504956f, +-0.48755016014843571837f,0.87309497841829020182f,-0.50353838372571746440f, +0.86397285612158680745f,-0.51935599016558964269f,0.85455798836540053376f, +-0.53499761988709704230f,0.84485356524970722791f,-0.55045797293660470029f, +0.83486287498638012128f,-0.56573181078361323149f,0.82458930278502517996f, +-0.58081395809576441547f,0.81403632970594852480f,-0.59569930449243335691f, +0.80320753148064494287f,-0.61038280627630958630f,0.79210657730021227785f, +-0.62485948814238623239f,0.78073722857209459924f,-0.63912444486377573138f, +0.76910333764557958780f,-0.65317284295377653347f,0.75720884650648467851f, +-0.66699992230363736034f,0.74505778544146605835f,-0.68060099779545302212f, +0.73265427167241281570f,-0.69397146088965377952f,0.72000250796138176579f, +-0.70710678118654746172f,0.70710678118654757274f,-0.72000250796138165477f, +0.69397146088965389055f,-0.73265427167241270467f,0.68060099779545324417f, +-0.74505778544146594733f,0.66699992230363758239f,-0.75720884650648467851f, +0.65317284295377664449f,-0.76910333764557947678f,0.63912444486377584241f, +-0.78073722857209448822f,0.62485948814238634341f,-0.79210657730021216683f, +0.61038280627630969732f,-0.80320753148064483184f,0.59569930449243346793f, +-0.81403632970594841378f,0.58081395809576452649f,-0.82458930278502506894f, +0.56573181078361345353f,-0.83486287498638001026f,0.55045797293660492233f, +-0.84485356524970711689f,0.53499761988709715332f,-0.85455798836540042274f, +0.51935599016558975372f,-0.86397285612158669643f,0.50353838372571757542f, +-0.87309497841829009079f,0.48755016014843588490f,-0.88192126434835493853f, +0.47139673682599780857f,-0.89044872324475787817f,0.45508358712634389143f, +-0.89867446569395392775f,0.43861623853852754751f,-0.90659570451491533483f, +0.42200027079979984812f,-0.91420975570353069095f,0.40524131400498991651f, +-0.92151403934204179080f,0.38834504669882657923f,-0.92850608047321547822f, +0.37131719395183770960f,-0.93518350993894761025f,0.35416352542049039931f, +-0.94154406518302069529f,0.33688985339222032867f,-0.94758559101774109124f, +0.31950203081601580291f,-0.95330604035419386211f,0.30200594931922802866f, +-0.95870347489587148804f,0.28440753721127209896f,-0.96377606579543984022f, +0.26671275747489847641f,-0.96852209427441737777f,0.24892760574572009302f, +-0.97293995220556006576f,0.23105810828067133156f,-0.97702814265775439484f, +0.21311031991609141745f,-0.98078528040323043058f,0.19509032201612860891f, +-0.98421009238692902521f,0.17700422041214894375f,-0.98730141815785843473f, +0.15885814333386147346f,-0.99005821026229701154f,0.14065823933284954395f, +-0.99247953459870996706f,0.12241067519921634832f,-0.99456457073425541537f, +0.10412163387205457254f,-0.99631261218277800129f,0.08579731234444015753f, +-0.99772306664419163624f,0.06744391956366417584f,-0.99879545620517240501f, +0.04906767432741796636f,-0.99952941750109314256f,0.03067480317663686534f, +-0.99992470183914450299f,0.01227153828572000692f,-0.99998117528260110909f, +-0.00613588464915455420f,-0.99969881869620424997f,-0.02454122852291207996f, +-0.99907772775264536147f,-0.04293825693494077861f,-0.99811811290014917919f, +-0.06132073630220824523f,-0.99682029929116577893f,-0.07968243797142994522f, +-0.99518472667219692873f,-0.09801714032956058975f,-0.99321194923479461103f, +-0.11631863091190447479f,-0.99090263542778000971f,-0.13458070850712605671f, +-0.98825756773074946437f,-0.15279718525844343535f,-0.98527764238894133264f, +-0.17096188876030096737f,-0.98196386910955524296f,-0.18906866414980610935f, +-0.97831737071962765473f,-0.20711137619221858808f,-0.97433938278557585821f, +-0.22508391135979261000f,-0.97003125319454397424f,-0.24298017990326381543f, +-0.96539444169768939830f,-0.26079411791527562503f,-0.96043051941556589757f, +-0.27851968938505289319f,-0.95514116830577078243f,-0.29615088824362378883f, +-0.94952818059303678577f,-0.31368174039889118454f,-0.94359345816196038559f, +-0.33110630575987626267f,-0.93733901191257495977f,-0.34841868024943456472f, +-0.93076696107898382326f,-0.36561299780477357624f,-0.92387953251128684951f, +-0.38268343236508967076f,-0.91667905992104270485f,-0.39962419984564684361f, +-0.90916798309052249127f,-0.41642956009763693048f,-0.90134884704602202810f, +-0.43309381885315184624f,-0.89322430119551532446f,-0.44961132965460665067f, +-0.88479709843093790056f,-0.46597649576796595916f,-0.87607009419540660122f, +-0.48218377207912266336f,-0.86704624551569287050f,-0.49822766697278153547f, +-0.85772861000027211809f,-0.51410274419322155026f,-0.84812034480329723252f, +-0.52980362468629460526f,-0.83822470555483818977f,-0.54532498842204613076f, +-0.82804504525775590729f,-0.56066157619733592021f,-0.81758481315158371139f, +-0.57580819141784533866f,-0.80684755354379944503f,-0.59075970185887394237f, +-0.79583690460888356633f,-0.60551104140432543410f,-0.78455659715557524159f, +-0.62005721176328920663f,-0.77301045336273710440f,-0.63439328416364526575f, +-0.76120238548426188974f,-0.64851440102211233008f,-0.74913639452345925918f, +-0.66241577759017178373f,-0.73681656887737001504f,-0.67609270357531581208f, +-0.72424708295146700276f,-0.68954054473706682948f,-0.71143219574521665560f, +-0.70275474445722507788f,-0.69837624940897302661f,-0.71573082528381848366f, +-0.68508366777270035541f,-0.72846439044822519637f,-0.67155895484701866316f, +-0.74095112535495888384f,-0.65780669329707874837f,-0.75318679904361240940f, +-0.64383154288979149715f,-0.76516726562245895860f,-0.62963823891492687324f, +-0.77688846567323255332f,-0.61523159058062726334f,-0.78834642762660589455f, +-0.60061647938386930612f,-0.79953726910790479110f,-0.58579785745643908612f, +-0.81045719825259465718f,-0.57078074588696736669f,-0.82110251499110464835f, +-0.55557023301960217765f,-0.83146961230254523567f,-0.54017147272989274320f, +-0.84155497743689855472f,-0.52458968267846928235f,-0.85135519310526486247f, +-0.50883014254310732216f,-0.86086693863776708735f,-0.49289819222978420443f, +-0.87008699110871134952f,-0.47679923006332214364f,-0.87901222642863341417f, +-0.46053871095823989412f,-0.88763962040285404598f,-0.44412214457042975546f, +-0.89596624975618488484f,-0.42755509343028247349f,-0.90398929312344311615f, +-0.41084317105790418845f,-0.91170603200542976730f,-0.39399204006104820985f, +-0.91911385169005765938f,-0.37700741021641820394f,-0.92621024213831137928f, +-0.35989503653498794433f,-0.93299279883473895669f,-0.34266071731199487793f, +-0.93945922360218969693f,-0.32531029216226331480f,-0.94560732538052116869f, +-0.30784964004153508865f,-0.95143502096900833820f,-0.29028467725446244208f, +-0.95694033573220882438f,-0.27262135544994886560f,-0.96212140426904158019f, +-0.25486565960451434965f,-0.96697647104485218161f,-0.23702360599436766986f, +-0.97150389098625167250f,-0.21910124015687010290f,-0.97570213003852845901f, +-0.20110463484209206708f,-0.97956976568544051887f,-0.18303988795514095078f, +-0.98310548743121628501f,-0.16491312048996975559f,-0.98630809724459866938f, +-0.14673047445536230304f,-0.98917650996478090342f,-0.12849811079379358514f, +-0.99170975366909952520f,-0.11022220729388330918f,-0.99390697000235606051f, +-0.09190895649713282101f,-0.99576741446765981713f,-0.07356456359966735692f, +-0.99729045667869020697f,-0.05519524434968971216f,-0.99847558057329477421f, +-0.03680722294135933131f,-0.99932238458834943273f,-0.01840672990580516366f, +-0.99983058179582340319f,1.00000000000000000000f,0.00000000000000000000f, +0.99729045667869020697f,0.07356456359966742631f,0.98917650996478101444f, +0.14673047445536174793f,0.97570213003852857003f,0.21910124015686979759f, +0.95694033573220882438f,0.29028467725446233105f,0.93299279883473895669f, +0.35989503653498811087f,0.90398929312344333820f,0.42755509343028208491f, +0.87008699110871146054f,0.49289819222978403790f,0.83146961230254523567f, +0.55557023301960217765f,0.78834642762660622761f,0.61523159058062681925f, +0.74095112535495921691f,0.67155895484701833009f,0.68954054473706694051f, +0.72424708295146689174f,0.63439328416364548779f,0.77301045336273688235f, +0.57580819141784533866f,0.81758481315158371139f,0.51410274419322166128f, +0.85772861000027211809f,0.44961132965460659516f,0.89322430119551532446f, +0.38268343236508983729f,0.92387953251128673848f,0.31368174039889157312f, +0.94952818059303667475f,0.24298017990326398197f,0.97003125319454397424f, +0.17096188876030135595f,0.98527764238894122162f,0.09801714032956077016f, +0.99518472667219681771f,0.02454122852291226384f,0.99969881869620424997f, +-0.04906767432741800800f,0.99879545620517240501f,-0.12241067519921615403f, +0.99247953459870996706f,-0.19509032201612819257f,0.98078528040323043058f, +-0.26671275747489830987f,0.96377606579543984022f,-0.33688985339221994009f, +0.94154406518302080631f,-0.40524131400498974998f,0.91420975570353069095f, +-0.47139673682599769755f,0.88192126434835504956f,-0.53499761988709704230f, +0.84485356524970722791f,-0.59569930449243335691f,0.80320753148064494287f, +-0.65317284295377653347f,0.75720884650648467851f,-0.70710678118654746172f, +0.70710678118654757274f,-0.75720884650648467851f,0.65317284295377664449f, +-0.80320753148064483184f,0.59569930449243346793f,-0.84485356524970711689f, +0.53499761988709715332f,-0.88192126434835493853f,0.47139673682599780857f, +-0.91420975570353069095f,0.40524131400498991651f,-0.94154406518302069529f, +0.33688985339222032867f,-0.96377606579543984022f,0.26671275747489847641f, +-0.98078528040323043058f,0.19509032201612860891f,-0.99247953459870996706f, +0.12241067519921634832f,-0.99879545620517240501f,0.04906767432741796636f, +-0.99969881869620424997f,-0.02454122852291207996f,-0.99518472667219692873f, +-0.09801714032956058975f,-0.98527764238894133264f,-0.17096188876030096737f, +-0.97003125319454397424f,-0.24298017990326381543f,-0.94952818059303678577f, +-0.31368174039889118454f,-0.92387953251128684951f,-0.38268343236508967076f, +-0.89322430119551532446f,-0.44961132965460665067f,-0.85772861000027211809f, +-0.51410274419322155026f,-0.81758481315158371139f,-0.57580819141784533866f, +-0.77301045336273710440f,-0.63439328416364526575f,-0.72424708295146700276f, +-0.68954054473706682948f,-0.67155895484701866316f,-0.74095112535495888384f, +-0.61523159058062726334f,-0.78834642762660589455f,-0.55557023301960217765f, +-0.83146961230254523567f,-0.49289819222978420443f,-0.87008699110871134952f, +-0.42755509343028247349f,-0.90398929312344311615f,-0.35989503653498794433f, +-0.93299279883473895669f,-0.29028467725446244208f,-0.95694033573220882438f, +-0.21910124015687010290f,-0.97570213003852845901f,-0.14673047445536230304f, +-0.98917650996478090342f,-0.07356456359966735692f,-0.99729045667869020697f, +1.00000000000000000000f,0.00000000000000000000f,0.95694033573220882438f, +0.29028467725446233105f,0.83146961230254523567f,0.55557023301960217765f, +0.63439328416364548779f,0.77301045336273688235f,0.38268343236508983729f, +0.92387953251128673848f,0.09801714032956077016f,0.99518472667219681771f, +-0.19509032201612819257f,0.98078528040323043058f,-0.47139673682599769755f, +0.88192126434835504956f,-0.70710678118654746172f,0.70710678118654757274f, +-0.88192126434835493853f,0.47139673682599780857f,-0.98078528040323043058f, +0.19509032201612860891f,-0.99518472667219692873f,-0.09801714032956058975f, +-0.92387953251128684951f,-0.38268343236508967076f,-0.77301045336273710440f, +-0.63439328416364526575f,-0.55557023301960217765f,-0.83146961230254523567f, +-0.29028467725446244208f,-0.95694033573220882438f,1.00000000000000000000f, +0.00000000000000000000f,0.38268343236508983729f,0.92387953251128673848f, +-0.70710678118654746172f,0.70710678118654757274f,-0.92387953251128684951f, +-0.38268343236508967076f,}; + +#endif + + + +#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ + diff --git a/Source/TransformFunctions/CMakeLists.txt b/Source/TransformFunctions/CMakeLists.txt index f29df7c9..0ea85062 100644 --- a/Source/TransformFunctions/CMakeLists.txt +++ b/Source/TransformFunctions/CMakeLists.txt @@ -25,6 +25,7 @@ target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix2_f32.c) target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix4_f32.c) target_sources(CMSISDSPTransform PRIVATE arm_cfft_radix8_f32.c) target_sources(CMSISDSPTransform PRIVATE arm_cfft_f32.c) +target_sources(CMSISDSPTransform PRIVATE arm_cfft_init_f32.c) endif() if (NOT CONFIGTABLE OR ALLFFT OR CFFT_F64_16 OR CFFT_F64_32 OR CFFT_F64_64 OR CFFT_F64_128 OR CFFT_F64_256 OR CFFT_F64_512 diff --git a/Source/TransformFunctions/TransformFunctions.c b/Source/TransformFunctions/TransformFunctions.c index d0f7ce46..c4732162 100644 --- a/Source/TransformFunctions/TransformFunctions.c +++ b/Source/TransformFunctions/TransformFunctions.c @@ -58,3 +58,4 @@ #include "arm_rfft_init_q31.c" #include "arm_rfft_q15.c" #include "arm_rfft_q31.c" +#include "arm_cfft_init_f32.c" diff --git a/Source/TransformFunctions/arm_cfft_f32.c b/Source/TransformFunctions/arm_cfft_f32.c index 2fff61ca..8bbb25c4 100644 --- a/Source/TransformFunctions/arm_cfft_f32.c +++ b/Source/TransformFunctions/arm_cfft_f32.c @@ -29,6 +29,591 @@ #include "arm_math.h" #include "arm_common_tables.h" +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + +#include "arm_helium_utils.h" +#include "arm_vec_fft.h" +#include "arm_mve_tables.h" + + +static float32_t arm_inverse_fft_length_f32(uint16_t fftLen) +{ + float32_t retValue=1.0; + + switch (fftLen) + { + + case 4096U: + retValue = 0.000244140625; + break; + + case 2048U: + retValue = 0.00048828125; + break; + + case 1024U: + retValue = 0.0009765625f; + break; + + case 512U: + retValue = 0.001953125; + break; + + case 256U: + retValue = 0.00390625f; + break; + + case 128U: + retValue = 0.0078125; + break; + + case 64U: + retValue = 0.015625f; + break; + + case 32U: + retValue = 0.03125; + break; + + case 16U: + retValue = 0.0625f; + break; + + + default: + break; + } + return(retValue); +} + + +static void arm_bitreversal_32_inpl_mve( + uint32_t *pSrc, + const uint16_t bitRevLen, + const uint16_t *pBitRevTab) + +{ + uint64_t *src = (uint64_t *) pSrc; + uint32_t blkCnt; /* loop counters */ + uint32x4_t bitRevTabOff; + uint32x4_t one = vdupq_n_u32(1); + + blkCnt = (bitRevLen / 2) / 2; + while (blkCnt > 0U) { + bitRevTabOff = vldrhq_u32(pBitRevTab); + pBitRevTab += 4; + + uint64x2_t bitRevOff1 = vmullbq_int_u32(bitRevTabOff, one); + uint64x2_t bitRevOff2 = vmulltq_int_u32(bitRevTabOff, one); + + uint64x2_t in1 = vldrdq_gather_offset_u64(src, bitRevOff1); + uint64x2_t in2 = vldrdq_gather_offset_u64(src, bitRevOff2); + + vstrdq_scatter_offset_u64(src, bitRevOff1, in2); + vstrdq_scatter_offset_u64(src, bitRevOff2, in1); + + /* + * Decrement the blockSize loop counter + */ + blkCnt--; + } +} + + +static void _arm_radix4_butterfly_f32_mve(const arm_cfft_instance_f32 * S,float32_t * pSrc, uint32_t fftLen) +{ + f32x4_t vecTmp0, vecTmp1; + f32x4_t vecSum0, vecDiff0, vecSum1, vecDiff1; + f32x4_t vecA, vecB, vecC, vecD; + uint32_t blkCnt; + uint32_t n1, n2; + uint32_t stage = 0; + int32_t iter = 1; + static const uint32_t strides[4] = { + (0 - 16) * sizeof(q31_t *), + (1 - 16) * sizeof(q31_t *), + (8 - 16) * sizeof(q31_t *), + (9 - 16) * sizeof(q31_t *) + }; + + n2 = fftLen; + n1 = n2; + n2 >>= 2u; + for (int k = fftLen / 4u; k > 1; k >>= 2) + { + for (int i = 0; i < iter; i++) + { + float32_t const *p_rearranged_twiddle_tab_stride1 = + &S->rearranged_twiddle_stride1[ + S->rearranged_twiddle_tab_stride1_arr[stage]]; + float32_t const *p_rearranged_twiddle_tab_stride2 = + &S->rearranged_twiddle_stride2[ + S->rearranged_twiddle_tab_stride2_arr[stage]]; + float32_t const *p_rearranged_twiddle_tab_stride3 = + &S->rearranged_twiddle_stride3[ + S->rearranged_twiddle_tab_stride3_arr[stage]]; + float32_t const *pW1, *pW2, *pW3; + float32_t *inA = pSrc + CMPLX_DIM * i * n1; + float32_t *inB = inA + n2 * CMPLX_DIM; + float32_t *inC = inB + n2 * CMPLX_DIM; + float32_t *inD = inC + n2 * CMPLX_DIM; + f32x4_t vecW; + + + pW1 = p_rearranged_twiddle_tab_stride1; + pW2 = p_rearranged_twiddle_tab_stride2; + pW3 = p_rearranged_twiddle_tab_stride3; + + blkCnt = n2 / 2; + /* + * load 2 f32 complex pair + */ + vecA = vldrwq_f32(inA); + vecC = vldrwq_f32(inC); + while (blkCnt > 0U) + { + vecB = vldrwq_f32(inB); + vecD = vldrwq_f32(inD); + + vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ + vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ + + vecSum1 = vecB + vecD; + vecDiff1 = vecB - vecD; + /* + * [ 1 1 1 1 ] * [ A B C D ]' .* 1 + */ + vecTmp0 = vecSum0 + vecSum1; + vst1q(inA, vecTmp0); + inA += 4; + + /* + * [ 1 -1 1 -1 ] * [ A B C D ]' + */ + vecTmp0 = vecSum0 - vecSum1; + /* + * [ 1 -1 1 -1 ] * [ A B C D ]'.* W2 + */ + vecW = vld1q(pW2); + pW2 += 4; + vecTmp1 = MVE_CMPLX_MULT_FLT_Conj_AxB(vecW, vecTmp0); + vst1q(inB, vecTmp1); + inB += 4; + + /* + * [ 1 -i -1 +i ] * [ A B C D ]' + */ + vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); + /* + * [ 1 -i -1 +i ] * [ A B C D ]'.* W1 + */ + vecW = vld1q(pW1); + pW1 +=4; + vecTmp1 = MVE_CMPLX_MULT_FLT_Conj_AxB(vecW, vecTmp0); + vst1q(inC, vecTmp1); + inC += 4; + + /* + * [ 1 +i -1 -i ] * [ A B C D ]' + */ + vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); + /* + * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 + */ + vecW = vld1q(pW3); + pW3 += 4; + vecTmp1 = MVE_CMPLX_MULT_FLT_Conj_AxB(vecW, vecTmp0); + vst1q(inD, vecTmp1); + inD += 4; + + vecA = vldrwq_f32(inA); + vecC = vldrwq_f32(inC); + + blkCnt--; + } + } + n1 = n2; + n2 >>= 2u; + iter = iter << 2; + stage++; + } + + /* + * start of Last stage process + */ + uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; + vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; + + /* load scheduling */ + vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); + vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); + + blkCnt = (fftLen >> 3); + while (blkCnt > 0U) + { + vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ + vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ + + vecB = vldrwq_gather_base_f32(vecScGathAddr, 8); + vecD = vldrwq_gather_base_f32(vecScGathAddr, 24); + + vecSum1 = vecB + vecD; + vecDiff1 = vecB - vecD; + + /* pre-load for next iteration */ + vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); + vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); + + vecTmp0 = vecSum0 + vecSum1; + vstrwq_scatter_base_f32(vecScGathAddr, -64, vecTmp0); + + vecTmp0 = vecSum0 - vecSum1; + vstrwq_scatter_base_f32(vecScGathAddr, -64 + 8, vecTmp0); + + vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); + vstrwq_scatter_base_f32(vecScGathAddr, -64 + 16, vecTmp0); + + vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); + vstrwq_scatter_base_f32(vecScGathAddr, -64 + 24, vecTmp0); + + blkCnt--; + } + + /* + * End of last stage process + */ +} + +static void arm_cfft_radix4by2_f32_mve(const arm_cfft_instance_f32 * S, float32_t *pSrc, uint32_t fftLen) +{ + float32_t const *pCoefVec; + float32_t const *pCoef = S->pTwiddle; + float32_t *pIn0, *pIn1; + uint32_t n2; + uint32_t blkCnt; + f32x4_t vecIn0, vecIn1, vecSum, vecDiff; + f32x4_t vecCmplxTmp, vecTw; + + + n2 = fftLen >> 1; + pIn0 = pSrc; + pIn1 = pSrc + fftLen; + pCoefVec = pCoef; + + blkCnt = n2 / 2; + while (blkCnt > 0U) + { + vecIn0 = *(f32x4_t *) pIn0; + vecIn1 = *(f32x4_t *) pIn1; + vecTw = vld1q(pCoefVec); + pCoefVec += 4; + + vecSum = vecIn0 + vecIn1; + vecDiff = vecIn0 - vecIn1; + + vecCmplxTmp = MVE_CMPLX_MULT_FLT_Conj_AxB(vecTw, vecDiff); + + vst1q(pIn0, vecSum); + pIn0 += 4; + vst1q(pIn1, vecCmplxTmp); + pIn1 += 4; + + blkCnt--; + } + + _arm_radix4_butterfly_f32_mve(S, pSrc, n2); + + _arm_radix4_butterfly_f32_mve(S, pSrc + fftLen, n2); + + pIn0 = pSrc; +} + +static void _arm_radix4_butterfly_inverse_f32_mve(const arm_cfft_instance_f32 * S,float32_t * pSrc, uint32_t fftLen, float32_t onebyfftLen) +{ + f32x4_t vecTmp0, vecTmp1; + f32x4_t vecSum0, vecDiff0, vecSum1, vecDiff1; + f32x4_t vecA, vecB, vecC, vecD; + f32x4_t vecW; + uint32_t blkCnt; + uint32_t n1, n2; + uint32_t stage = 0; + int32_t iter = 1; + static const uint32_t strides[4] = { + (0 - 16) * sizeof(q31_t *), + (1 - 16) * sizeof(q31_t *), + (8 - 16) * sizeof(q31_t *), + (9 - 16) * sizeof(q31_t *) + }; + + n2 = fftLen; + n1 = n2; + n2 >>= 2u; + for (int k = fftLen / 4; k > 1; k >>= 2) + { + for (int i = 0; i < iter; i++) + { + float32_t const *p_rearranged_twiddle_tab_stride1 = + &S->rearranged_twiddle_stride1[ + S->rearranged_twiddle_tab_stride1_arr[stage]]; + float32_t const *p_rearranged_twiddle_tab_stride2 = + &S->rearranged_twiddle_stride2[ + S->rearranged_twiddle_tab_stride2_arr[stage]]; + float32_t const *p_rearranged_twiddle_tab_stride3 = + &S->rearranged_twiddle_stride3[ + S->rearranged_twiddle_tab_stride3_arr[stage]]; + float32_t const *pW1, *pW2, *pW3; + float32_t *inA = pSrc + CMPLX_DIM * i * n1; + float32_t *inB = inA + n2 * CMPLX_DIM; + float32_t *inC = inB + n2 * CMPLX_DIM; + float32_t *inD = inC + n2 * CMPLX_DIM; + + pW1 = p_rearranged_twiddle_tab_stride1; + pW2 = p_rearranged_twiddle_tab_stride2; + pW3 = p_rearranged_twiddle_tab_stride3; + + blkCnt = n2 / 2; + /* + * load 2 f32 complex pair + */ + vecA = vldrwq_f32(inA); + vecC = vldrwq_f32(inC); + while (blkCnt > 0U) + { + vecB = vldrwq_f32(inB); + vecD = vldrwq_f32(inD); + + vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ + vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ + + vecSum1 = vecB + vecD; + vecDiff1 = vecB - vecD; + /* + * [ 1 1 1 1 ] * [ A B C D ]' .* 1 + */ + vecTmp0 = vecSum0 + vecSum1; + vst1q(inA, vecTmp0); + inA += 4; + /* + * [ 1 -1 1 -1 ] * [ A B C D ]' + */ + vecTmp0 = vecSum0 - vecSum1; + /* + * [ 1 -1 1 -1 ] * [ A B C D ]'.* W1 + */ + vecW = vld1q(pW2); + pW2 += 4; + vecTmp1 = MVE_CMPLX_MULT_FLT_AxB(vecW, vecTmp0); + vst1q(inB, vecTmp1); + inB += 4; + + /* + * [ 1 -i -1 +i ] * [ A B C D ]' + */ + vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); + /* + * [ 1 -i -1 +i ] * [ A B C D ]'.* W2 + */ + vecW = vld1q(pW1); + pW1 += 4; + vecTmp1 = MVE_CMPLX_MULT_FLT_AxB(vecW, vecTmp0); + vst1q(inC, vecTmp1); + inC += 4; + + /* + * [ 1 +i -1 -i ] * [ A B C D ]' + */ + vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); + /* + * [ 1 +i -1 -i ] * [ A B C D ]'.* W3 + */ + vecW = vld1q(pW3); + pW3 += 4; + vecTmp1 = MVE_CMPLX_MULT_FLT_AxB(vecW, vecTmp0); + vst1q(inD, vecTmp1); + inD += 4; + + vecA = vldrwq_f32(inA); + vecC = vldrwq_f32(inC); + + blkCnt--; + } + } + n1 = n2; + n2 >>= 2u; + iter = iter << 2; + stage++; + } + + /* + * start of Last stage process + */ + uint32x4_t vecScGathAddr = *(uint32x4_t *) strides; + vecScGathAddr = vecScGathAddr + (uint32_t) pSrc; + + /* + * load scheduling + */ + vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); + vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); + + blkCnt = (fftLen >> 3); + while (blkCnt > 0U) + { + vecSum0 = vecA + vecC; /* vecSum0 = vaddq(vecA, vecC) */ + vecDiff0 = vecA - vecC; /* vecSum0 = vsubq(vecA, vecC) */ + + vecB = vldrwq_gather_base_f32(vecScGathAddr, 8); + vecD = vldrwq_gather_base_f32(vecScGathAddr, 24); + + vecSum1 = vecB + vecD; + vecDiff1 = vecB - vecD; + + vecA = vldrwq_gather_base_wb_f32(&vecScGathAddr, 64); + vecC = vldrwq_gather_base_f32(vecScGathAddr, 16); + + vecTmp0 = vecSum0 + vecSum1; + vecTmp0 = vecTmp0 * onebyfftLen; + vstrwq_scatter_base_f32(vecScGathAddr, -64, vecTmp0); + + vecTmp0 = vecSum0 - vecSum1; + vecTmp0 = vecTmp0 * onebyfftLen; + vstrwq_scatter_base_f32(vecScGathAddr, -64 + 8, vecTmp0); + + vecTmp0 = MVE_CMPLX_ADD_A_ixB(vecDiff0, vecDiff1); + vecTmp0 = vecTmp0 * onebyfftLen; + vstrwq_scatter_base_f32(vecScGathAddr, -64 + 16, vecTmp0); + + vecTmp0 = MVE_CMPLX_SUB_A_ixB(vecDiff0, vecDiff1); + vecTmp0 = vecTmp0 * onebyfftLen; + vstrwq_scatter_base_f32(vecScGathAddr, -64 + 24, vecTmp0); + + blkCnt--; + } + + /* + * End of last stage process + */ +} + +static void arm_cfft_radix4by2_inverse_f32_mve(const arm_cfft_instance_f32 * S,float32_t *pSrc, uint32_t fftLen) +{ + float32_t const *pCoefVec; + float32_t const *pCoef = S->pTwiddle; + float32_t *pIn0, *pIn1; + uint32_t n2; + float32_t onebyfftLen = arm_inverse_fft_length_f32(fftLen); + uint32_t blkCnt; + f32x4_t vecIn0, vecIn1, vecSum, vecDiff; + f32x4_t vecCmplxTmp, vecTw; + + + n2 = fftLen >> 1; + pIn0 = pSrc; + pIn1 = pSrc + fftLen; + pCoefVec = pCoef; + + blkCnt = n2 / 2; + while (blkCnt > 0U) + { + vecIn0 = *(f32x4_t *) pIn0; + vecIn1 = *(f32x4_t *) pIn1; + vecTw = vld1q(pCoefVec); + pCoefVec += 4; + + vecSum = vecIn0 + vecIn1; + vecDiff = vecIn0 - vecIn1; + + vecCmplxTmp = MVE_CMPLX_MULT_FLT_AxB(vecTw, vecDiff); + + vst1q(pIn0, vecSum); + pIn0 += 4; + vst1q(pIn1, vecCmplxTmp); + pIn1 += 4; + + blkCnt--; + } + + _arm_radix4_butterfly_inverse_f32_mve(S, pSrc, n2, onebyfftLen); + + _arm_radix4_butterfly_inverse_f32_mve(S, pSrc + fftLen, n2, onebyfftLen); +} + + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Processing function for the floating-point complex FFT. + @param[in] S points to an instance of the floating-point CFFT structure + @param[in,out] p1 points to the complex data buffer of size 2*fftLen. Processing occurs in-place + @param[in] ifftFlag flag that selects transform direction + - value = 0: forward transform + - value = 1: inverse transform + @param[in] bitReverseFlag flag that enables / disables bit reversal of output + - value = 0: disables bit reversal of output + - value = 1: enables bit reversal of output + @return none + */ + + +void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * pSrc, + uint8_t ifftFlag, + uint8_t bitReverseFlag) +{ + uint32_t fftLen = S->fftLen; + + if (ifftFlag == 1U) { + + switch (fftLen) { + case 16: + case 64: + case 256: + case 1024: + case 4096: + _arm_radix4_butterfly_inverse_f32_mve(S, pSrc, fftLen, arm_inverse_fft_length_f32(S->fftLen)); + break; + + case 32: + case 128: + case 512: + case 2048: + arm_cfft_radix4by2_inverse_f32_mve(S, pSrc, fftLen); + break; + } + } else { + switch (fftLen) { + case 16: + case 64: + case 256: + case 1024: + case 4096: + _arm_radix4_butterfly_f32_mve(S, pSrc, fftLen); + break; + + case 32: + case 128: + case 512: + case 2048: + arm_cfft_radix4by2_f32_mve(S, pSrc, fftLen); + break; + } + } + + + if (bitReverseFlag) + { + + arm_bitreversal_32_inpl_mve((uint32_t*)pSrc, S->bitRevLength, S->pBitRevTable); + + } +} + + +#else extern void arm_radix8_butterfly_f32( float32_t * pSrc, uint16_t fftLen, @@ -76,8 +661,13 @@ extern void arm_bitreversal_32( inverse transform includes a scale of 1/fftLen as part of the calculation and this matches the textbook definition of the inverse FFT. @par - Pre-initialized data structures containing twiddle factors and bit reversal - tables are provided and defined in arm_const_structs.h. Include + For the MVE version, the new arm_cfft_init_f32 initialization function is + mandatory. Compilation flags are available to include only the required tables for the + needed FFTs. Other FFT versions can continue to be initialized as + explained below. + @par + For not MVE versions, pre-initialized data structures containing twiddle factors + and bit reversal tables are provided and defined in arm_const_structs.h. Include this header in your function and then pass one of the constant structures as an argument to arm_cfft_f32. For example: @par @@ -127,6 +717,8 @@ extern void arm_bitreversal_32( break; } @endcode + @par + The new arm_cfft_init_f32 can also be used. @par Q15 and Q31 The floating-point complex FFT uses a mixed-radix algorithm. Multiple radix-4 stages are performed along with a single radix-2 stage, as needed. @@ -623,6 +1215,7 @@ void arm_cfft_f32( } } } +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ /** @} end of ComplexFFT group diff --git a/Source/TransformFunctions/arm_cfft_init_f32.c b/Source/TransformFunctions/arm_cfft_init_f32.c new file mode 100755 index 00000000..7e5e75d3 --- /dev/null +++ b/Source/TransformFunctions/arm_cfft_init_f32.c @@ -0,0 +1,353 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_cfft_init_f32.c + * Description: Initialization function for cfft f32 instance + * + * $Date: 07. January 2020 + * $Revision: V1.7.0 + * + * Target Processor: Cortex-M cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2020 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define FFTINIT(EXT,SIZE) \ + S->bitRevLength = arm_cfft_sR_##EXT##_len##SIZE.bitRevLength; \ + S->pBitRevTable = arm_cfft_sR_##EXT##_len##SIZE.pBitRevTable; \ + S->pTwiddle = arm_cfft_sR_##EXT##_len##SIZE.pTwiddle; + +/** + @addtogroup ComplexFFT + @{ + */ + +/** + @brief Initialization function for the cfft f32 function + @param[in,out] S points to an instance of the floating-point CFFT structure + @param[in] fftLen fft length (number of complex samples) + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_ARGUMENT_ERROR : an error is detected + + @par Use of this function is mandatory only for the MVE version of the FFT. + Other versions can still initialize directly the data structure using + variables declared in arm_const_structs.h + */ + +#include "arm_math.h" +#include "arm_common_tables.h" +#include "arm_const_structs.h" + +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + +#include "arm_vec_fft.h" +#include "arm_mve_tables.h" + +arm_status arm_cfft_radix4by2_rearrange_twiddles_f32(arm_cfft_instance_f32 *S, int twidCoefModifier) +{ + + switch (S->fftLen >> (twidCoefModifier - 1)) { + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) + case 4096U: + S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_4096; + S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_4096; + + S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_4096; + S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_4096; + + S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_4096; + S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_4096; + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) || defined(ARM_TABLE_BITREVIDX_FXT_2048) + case 1024U: + S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_1024; + S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_1024; + + S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_1024; + S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_1024; + + S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_1024; + S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_1024; + break; + #endif + + #if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) || defined(ARM_TABLE_BITREVIDX_FXT_512) + case 256U: + S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_256; + S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_256; + + S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_256; + S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_256; + + S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_256; + S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_256; + + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) || defined(ARM_TABLE_BITREVIDX_FXT_128) + case 64U: + S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_64; + S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_64; + + S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_64; + S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_64; + + S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_64; + S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_64; + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) || defined(ARM_TABLE_BITREVIDX_FXT_32) + case 16U: + S->rearranged_twiddle_tab_stride1_arr = rearranged_twiddle_tab_stride1_arr_16; + S->rearranged_twiddle_stride1 = rearranged_twiddle_stride1_16; + + S->rearranged_twiddle_tab_stride2_arr = rearranged_twiddle_tab_stride2_arr_16; + S->rearranged_twiddle_stride2 = rearranged_twiddle_stride2_16; + + S->rearranged_twiddle_tab_stride3_arr = rearranged_twiddle_tab_stride3_arr_16; + S->rearranged_twiddle_stride3 = rearranged_twiddle_stride3_16; + break; +#endif + + default: + return(ARM_MATH_ARGUMENT_ERROR); + break; + /* invalid sizes already filtered */ + } + + return(ARM_MATH_SUCCESS); + +} + +arm_status arm_cfft_init_f32( + arm_cfft_instance_f32 * S, + uint16_t fftLen) +{ + + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = NULL; + + + /* Initializations of Instance structure depending on the FFT length */ + switch (S->fftLen) { + /* Initializations of structure parameters for 4096 point FFT */ +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_4096) + case 4096U: + /* Initialise the bit reversal table modifier */ + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_4096; + S->pTwiddle = (float32_t *)twiddleCoef_4096; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_2048) + /* Initializations of structure parameters for 2048 point FFT */ + case 2048U: + /* Initialise the bit reversal table modifier */ + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_2048; + S->pTwiddle = (float32_t *)twiddleCoef_2048; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_1024) + /* Initializations of structure parameters for 1024 point FFT */ + case 1024U: + /* Initialise the bit reversal table modifier */ + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_1024; + S->pTwiddle = (float32_t *)twiddleCoef_1024; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_512) + /* Initializations of structure parameters for 512 point FFT */ + case 512U: + /* Initialise the bit reversal table modifier */ + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_512; + S->pTwiddle = (float32_t *)twiddleCoef_512; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_256) + case 256U: + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_256; + S->pTwiddle = (float32_t *)twiddleCoef_256; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_128) + case 128U: + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_128; + S->pTwiddle = (float32_t *)twiddleCoef_128; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_64) + case 64U: + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_64; + S->pTwiddle = (float32_t *)twiddleCoef_64; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_32) + case 32U: + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_32; + S->pTwiddle = (float32_t *)twiddleCoef_32; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 2); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREVIDX_FXT_16) + case 16U: + /* Initializations of structure parameters for 16 point FFT */ + S->bitRevLength = ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH; + S->pBitRevTable = (uint16_t *)armBitRevIndexTable_fixed_16; + S->pTwiddle = (float32_t *)twiddleCoef_16; + status=arm_cfft_radix4by2_rearrange_twiddles_f32(S, 1); + break; +#endif + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + + return (status); +} +#else +arm_status arm_cfft_init_f32( + arm_cfft_instance_f32 * S, + uint16_t fftLen) +{ + /* Initialise the default arm status */ + arm_status status = ARM_MATH_SUCCESS; + + /* Initialise the FFT length */ + S->fftLen = fftLen; + + /* Initialise the Twiddle coefficient pointer */ + S->pTwiddle = NULL; + + + /* Initializations of Instance structure depending on the FFT length */ + switch (S->fftLen) { +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) + /* Initializations of structure parameters for 4096 point FFT */ + case 4096U: + /* Initialise the bit reversal table modifier */ + FFTINIT(f32,4096); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) + /* Initializations of structure parameters for 2048 point FFT */ + case 2048U: + /* Initialise the bit reversal table modifier */ + FFTINIT(f32,2048); + + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) + /* Initializations of structure parameters for 1024 point FFT */ + case 1024U: + /* Initialise the bit reversal table modifier */ + FFTINIT(f32,1024); + + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) + /* Initializations of structure parameters for 512 point FFT */ + case 512U: + /* Initialise the bit reversal table modifier */ + FFTINIT(f32,512); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) + case 256U: + FFTINIT(f32,256); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) + case 128U: + FFTINIT(f32,128); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) + case 64U: + FFTINIT(f32,64); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) + case 32U: + FFTINIT(f32,32); + break; +#endif + +#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || (defined(ARM_TABLE_TWIDDLECOEF_F32_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) + case 16U: + /* Initializations of structure parameters for 16 point FFT */ + FFTINIT(f32,16); + break; +#endif + + default: + /* Reporting argument error if fftSize is not valid value */ + status = ARM_MATH_ARGUMENT_ERROR; + break; + } + + + return (status); +} +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ + +/** + @} end of ComplexFFT group + */ diff --git a/Source/TransformFunctions/arm_rfft_fast_init_f32.c b/Source/TransformFunctions/arm_rfft_fast_init_f32.c index de373b1d..b657e19b 100644 --- a/Source/TransformFunctions/arm_rfft_fast_init_f32.c +++ b/Source/TransformFunctions/arm_rfft_fast_init_f32.c @@ -50,17 +50,17 @@ arm_status arm_rfft_32_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 16U; - S->fftLenRFFT = 32U; + status=arm_cfft_init_f32(&(S->Sint),16); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } - Sint->bitRevLength = ARMBITREVINDEXTABLE_16_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable16; - Sint->pTwiddle = (float32_t *) twiddleCoef_16; + S->fftLenRFFT = 32U; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_32; return ARM_MATH_SUCCESS; @@ -79,17 +79,17 @@ arm_status arm_rfft_32_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { arm_status arm_rfft_64_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 32U; + status=arm_cfft_init_f32(&(S->Sint),32); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } S->fftLenRFFT = 64U; - Sint->bitRevLength = ARMBITREVINDEXTABLE_32_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable32; - Sint->pTwiddle = (float32_t *) twiddleCoef_32; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_64; return ARM_MATH_SUCCESS; @@ -108,17 +108,17 @@ arm_status arm_rfft_64_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { arm_status arm_rfft_128_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 64U; - S->fftLenRFFT = 128U; + status=arm_cfft_init_f32(&(S->Sint),64); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } + S->fftLenRFFT = 128; - Sint->bitRevLength = ARMBITREVINDEXTABLE_64_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable64; - Sint->pTwiddle = (float32_t *) twiddleCoef_64; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_128; return ARM_MATH_SUCCESS; @@ -137,17 +137,17 @@ arm_status arm_rfft_128_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { arm_status arm_rfft_256_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 128U; + status=arm_cfft_init_f32(&(S->Sint),128); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } S->fftLenRFFT = 256U; - Sint->bitRevLength = ARMBITREVINDEXTABLE_128_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable128; - Sint->pTwiddle = (float32_t *) twiddleCoef_128; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_256; return ARM_MATH_SUCCESS; @@ -166,17 +166,17 @@ arm_status arm_rfft_256_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { arm_status arm_rfft_512_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 256U; + status=arm_cfft_init_f32(&(S->Sint),256); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } S->fftLenRFFT = 512U; - Sint->bitRevLength = ARMBITREVINDEXTABLE_256_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable256; - Sint->pTwiddle = (float32_t *) twiddleCoef_256; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_512; return ARM_MATH_SUCCESS; @@ -194,17 +194,17 @@ arm_status arm_rfft_512_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { arm_status arm_rfft_1024_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 512U; + status=arm_cfft_init_f32(&(S->Sint),512); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } S->fftLenRFFT = 1024U; - Sint->bitRevLength = ARMBITREVINDEXTABLE_512_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable512; - Sint->pTwiddle = (float32_t *) twiddleCoef_512; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_1024; return ARM_MATH_SUCCESS; @@ -221,17 +221,17 @@ arm_status arm_rfft_1024_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { */ arm_status arm_rfft_2048_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 1024U; + status=arm_cfft_init_f32(&(S->Sint),1024); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } S->fftLenRFFT = 2048U; - Sint->bitRevLength = ARMBITREVINDEXTABLE_1024_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable1024; - Sint->pTwiddle = (float32_t *) twiddleCoef_1024; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_2048; return ARM_MATH_SUCCESS; @@ -249,17 +249,17 @@ arm_status arm_rfft_2048_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { arm_status arm_rfft_4096_fast_init_f32( arm_rfft_fast_instance_f32 * S ) { - arm_cfft_instance_f32 * Sint; + arm_status status; if( !S ) return ARM_MATH_ARGUMENT_ERROR; - Sint = &(S->Sint); - Sint->fftLen = 2048U; + status=arm_cfft_init_f32(&(S->Sint),2048); + if (status != ARM_MATH_SUCCESS) + { + return(status); + } S->fftLenRFFT = 4096U; - Sint->bitRevLength = ARMBITREVINDEXTABLE_2048_TABLE_LENGTH; - Sint->pBitRevTable = (uint16_t *)armBitRevIndexTable2048; - Sint->pTwiddle = (float32_t *) twiddleCoef_2048; S->pTwiddleRFFT = (float32_t *) twiddleCoef_rfft_4096; return ARM_MATH_SUCCESS; diff --git a/Source/fft.cmake b/Source/fft.cmake index b4df288a..2356c2be 100644 --- a/Source/fft.cmake +++ b/Source/fft.cmake @@ -7,48 +7,84 @@ function(fft PROJECT) if (CONFIGTABLE AND CFFT_F32_16) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_16) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_16) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_16) endif() +endif() if (CONFIGTABLE AND CFFT_F32_32) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_32) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_32) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_32) endif() +endif() if (CONFIGTABLE AND CFFT_F32_64) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_64) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_64) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_64) endif() +endif() if (CONFIGTABLE AND CFFT_F32_128) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_128) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_128) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_128) endif() +endif() if (CONFIGTABLE AND CFFT_F32_256) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_256) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_256) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_256) endif() +endif() if (CONFIGTABLE AND CFFT_F32_512) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_512) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_512) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_512) endif() +endif() if (CONFIGTABLE AND CFFT_F32_1024) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_1024) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_1024) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_1024) endif() +endif() if (CONFIGTABLE AND CFFT_F32_2048) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_2048) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_2048) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_2048) endif() +endif() if (CONFIGTABLE AND CFFT_F32_4096) target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_TWIDDLECOEF_F32_4096) +if (HELIUM OR MVEF) + target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FXT_4096) +else() target_compile_definitions(${PROJECT} PUBLIC ARM_TABLE_BITREVIDX_FLT_4096) endif() +endif() ####################################### diff --git a/Testing/Include/Tests/TransformCF32.h b/Testing/Include/Tests/TransformCF32.h index 8d49505c..3738964d 100755 --- a/Testing/Include/Tests/TransformCF32.h +++ b/Testing/Include/Tests/TransformCF32.h @@ -14,8 +14,10 @@ class TransformCF32:public Client::Suite Client::RefPattern ref; - const arm_cfft_instance_f32 *instCfftF32; + arm_cfft_instance_f32 varInstCfftF32; int ifft; + + arm_status status; }; diff --git a/Testing/Source/Tests/TransformCF32.cpp b/Testing/Source/Tests/TransformCF32.cpp index 5c68d5cc..7321e46b 100755 --- a/Testing/Source/Tests/TransformCF32.cpp +++ b/Testing/Source/Tests/TransformCF32.cpp @@ -14,27 +14,28 @@ float32_t *outfftp = outputfft.ptr(); memcpy(outfftp,inp,sizeof(float32_t)*input.nbSamples()); + + ASSERT_TRUE(status == ARM_MATH_SUCCESS); arm_cfft_f32( - this->instCfftF32, + &(this->varInstCfftF32), outfftp, this->ifft, 1); + + ASSERT_SNR(outputfft,ref,(float32_t)SNR_THRESHOLD); ASSERT_EMPTY_TAIL(outputfft); - - } + + } - void TransformCF32::setUp(Testing::testID_t id,std::vector& paramsArgs,Client::PatternMgr *mgr) { - - switch(id) { case TransformCF32::TEST_CFFT_F32_1: @@ -42,7 +43,7 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_16_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_16_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len16; + status=arm_cfft_init_f32(&varInstCfftF32,16); this->ifft=0; @@ -53,7 +54,7 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_16_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_16_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len16; + status=arm_cfft_init_f32(&varInstCfftF32,16); this->ifft=1; @@ -64,7 +65,7 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_32_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_32_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len32; + status=arm_cfft_init_f32(&varInstCfftF32,32); this->ifft=0; @@ -75,7 +76,7 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_32_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_32_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len32; + status=arm_cfft_init_f32(&varInstCfftF32,32); this->ifft=1; @@ -86,7 +87,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_64_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_64_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len64; + status=arm_cfft_init_f32(&varInstCfftF32,64); + this->ifft=0; @@ -97,7 +99,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_64_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_64_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len64; + status=arm_cfft_init_f32(&varInstCfftF32,64); + this->ifft=1; @@ -108,7 +111,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_128_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_128_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len128; + status=arm_cfft_init_f32(&varInstCfftF32,128); + this->ifft=0; @@ -119,7 +123,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_128_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_128_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len128; + status=arm_cfft_init_f32(&varInstCfftF32,128); + this->ifft=1; @@ -130,7 +135,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_256_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_256_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len256; + status=arm_cfft_init_f32(&varInstCfftF32,256); + this->ifft=0; @@ -141,7 +147,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_256_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_256_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len256; + status=arm_cfft_init_f32(&varInstCfftF32,256); + this->ifft=1; @@ -152,7 +159,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_512_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_512_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len512; + status=arm_cfft_init_f32(&varInstCfftF32,512); + this->ifft=0; @@ -163,7 +171,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_512_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_512_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len512; + status=arm_cfft_init_f32(&varInstCfftF32,512); + this->ifft=1; @@ -174,7 +183,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_1024_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_1024_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len1024; + status=arm_cfft_init_f32(&varInstCfftF32,1024); + this->ifft=0; @@ -185,7 +195,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_1024_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_1024_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len1024; + status=arm_cfft_init_f32(&varInstCfftF32,1024); + this->ifft=1; @@ -196,7 +207,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_2048_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_2048_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len2048; + status=arm_cfft_init_f32(&varInstCfftF32,2048); + this->ifft=0; @@ -207,7 +219,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_2048_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_2048_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len2048; + status=arm_cfft_init_f32(&varInstCfftF32,2048); + this->ifft=1; @@ -218,7 +231,8 @@ input.reload(TransformCF32::INPUTS_CFFT_NOISY_4096_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_NOISY_4096_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len4096; + status=arm_cfft_init_f32(&varInstCfftF32,4096); + this->ifft=0; @@ -229,7 +243,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_NOISY_4096_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_NOISY_4096_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len4096; + status=arm_cfft_init_f32(&varInstCfftF32,4096); + this->ifft=1; @@ -242,7 +257,7 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_16_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_16_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len16; + status=arm_cfft_init_f32(&varInstCfftF32,16); this->ifft=0; @@ -253,7 +268,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_16_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_16_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len16; + status=arm_cfft_init_f32(&varInstCfftF32,16); + this->ifft=1; @@ -264,7 +280,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_32_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_32_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len32; + status=arm_cfft_init_f32(&varInstCfftF32,32); + this->ifft=0; @@ -275,7 +292,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_32_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_32_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len32; + status=arm_cfft_init_f32(&varInstCfftF32,32); + this->ifft=1; @@ -286,7 +304,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_64_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_64_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len64; + status=arm_cfft_init_f32(&varInstCfftF32,64); + this->ifft=0; @@ -297,7 +316,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_64_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_64_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len64; + status=arm_cfft_init_f32(&varInstCfftF32,64); + this->ifft=1; @@ -308,7 +328,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_128_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_128_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len128; + status=arm_cfft_init_f32(&varInstCfftF32,128); + this->ifft=0; @@ -319,7 +340,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_128_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_128_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len128; + status=arm_cfft_init_f32(&varInstCfftF32,128); + this->ifft=1; @@ -330,7 +352,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_256_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_256_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len256; + status=arm_cfft_init_f32(&varInstCfftF32,256); + this->ifft=0; @@ -341,7 +364,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_256_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_256_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len256; + status=arm_cfft_init_f32(&varInstCfftF32,256); + this->ifft=1; @@ -352,7 +376,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_512_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_512_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len512; + status=arm_cfft_init_f32(&varInstCfftF32,512); + this->ifft=0; @@ -363,7 +388,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_512_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_512_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len512; + status=arm_cfft_init_f32(&varInstCfftF32,512); + this->ifft=1; @@ -374,7 +400,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_1024_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_1024_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len1024; + status=arm_cfft_init_f32(&varInstCfftF32,1024); + this->ifft=0; @@ -385,7 +412,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_1024_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_1024_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len1024; + status=arm_cfft_init_f32(&varInstCfftF32,1024); + this->ifft=1; @@ -396,7 +424,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_2048_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_2048_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len2048; + status=arm_cfft_init_f32(&varInstCfftF32,2048); + this->ifft=0; @@ -407,7 +436,8 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_2048_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_2048_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len2048; + status=arm_cfft_init_f32(&varInstCfftF32,2048); + this->ifft=1; @@ -418,7 +448,8 @@ input.reload(TransformCF32::INPUTS_CFFT_STEP_4096_F32_ID,mgr); ref.reload( TransformCF32::REF_CFFT_STEP_4096_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len4096; + status=arm_cfft_init_f32(&varInstCfftF32,4096); + this->ifft=0; @@ -429,13 +460,15 @@ input.reload(TransformCF32::INPUTS_CIFFT_STEP_4096_F32_ID,mgr); ref.reload( TransformCF32::INPUTS_CFFT_STEP_4096_F32_ID,mgr); - instCfftF32 = &arm_cfft_sR_f32_len4096; + status=arm_cfft_init_f32(&varInstCfftF32,4096); + this->ifft=1; break; + } outputfft.create(ref.nbSamples(),TransformCF32::OUTPUT_CFFT_F32_ID,mgr); diff --git a/Testing/desc.txt b/Testing/desc.txt index fae0e388..3af7ce7d 100644 --- a/Testing/desc.txt +++ b/Testing/desc.txt @@ -2564,6 +2564,7 @@ group Root { cifft_step_1024_f32:test_cfft_f32 cifft_step_2048_f32:test_cfft_f32 cifft_step_4096_f32:test_cfft_f32 + } }