diff --git "a/src/fftw.c" "b/src/fftw.c" deleted file mode 100644--- "a/src/fftw.c" +++ /dev/null @@ -1,3601 +0,0 @@ -// -// Copyright © 2025 Agora -// This file is part of TEN Framework, an open source project. -// Licensed under the Apache License, Version 2.0, with certain conditions. -// Refer to the "LICENSE" file in the root directory for more information. -// -#include -#include -#include -#include - -#include "fftw.h" - -static const int AUP_FFTW_g_ip256[] = {64, 64, 0, 16, 0, 64, 32, 96}; -static const float AUP_FFTW_g_w256[] = { - 1.000000e+00f, 7.071068e-01f, 5.006030e-01f, 5.054710e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 1.000000e+00f, 7.071068e-01f, 5.024193e-01f, 5.224986e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 1.000000e+00f, 7.071068e-01f, 5.097956e-01f, 6.013449e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 1.000000e+00f, 7.071068e-01f, 9.238795e-01f, 3.826834e-01f, - 1.000000e+00f, 7.071068e-01f, 0.000000e+00f, 0.000000e+00f, - 7.071068e-01f, 4.998494e-01f, 4.993977e-01f, 4.986452e-01f, - 4.975924e-01f, 4.962398e-01f, 4.945883e-01f, 4.926388e-01f, - 4.903926e-01f, 4.878511e-01f, 4.850156e-01f, 4.818880e-01f, - 4.784702e-01f, 4.747641e-01f, 4.707720e-01f, 4.664964e-01f, - 4.619398e-01f, 4.571049e-01f, 4.519946e-01f, 4.466122e-01f, - 4.409606e-01f, 4.350435e-01f, 4.288643e-01f, 4.224268e-01f, - 4.157348e-01f, 4.087924e-01f, 4.016038e-01f, 3.941732e-01f, - 3.865052e-01f, 3.786044e-01f, 3.704756e-01f, 3.621235e-01f, - 3.535534e-01f, 3.447703e-01f, 3.357795e-01f, 3.265864e-01f, - 3.171966e-01f, 3.076158e-01f, 2.978497e-01f, 2.879041e-01f, - 2.777851e-01f, 2.674988e-01f, 2.570514e-01f, 2.464491e-01f, - 2.356984e-01f, 2.248057e-01f, 2.137775e-01f, 2.026207e-01f, - 1.913417e-01f, 1.799475e-01f, 1.684449e-01f, 1.568409e-01f, - 1.451423e-01f, 1.333564e-01f, 1.214901e-01f, 1.095506e-01f, - 9.754516e-02f, 8.548094e-02f, 7.336524e-02f, 6.120534e-02f, - 4.900857e-02f, 3.678228e-02f, 2.453384e-02f, 1.227061e-02f}; -static const int AUP_FFTW_g_ip512[] = {128, 128, 0, 16, 0, 64, 32, 96}; -static const float AUP_FFTW_g_w512[] = { - 1.000000e+00f, 7.071068e-01f, 5.001506e-01f, 5.013585e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 1.000000e+00f, 7.071068e-01f, 5.006030e-01f, 5.054710e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 1.000000e+00f, 7.071068e-01f, 5.024193e-01f, 5.224986e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 1.000000e+00f, 7.071068e-01f, 5.097956e-01f, 6.013449e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 1.000000e+00f, 7.071068e-01f, 9.238795e-01f, 3.826834e-01f, - 1.000000e+00f, 7.071068e-01f, 0.000000e+00f, 0.000000e+00f, - 7.071068e-01f, 4.999624e-01f, 4.998494e-01f, 4.996612e-01f, - 4.993977e-01f, 4.990591e-01f, 4.986452e-01f, 4.981563e-01f, - 4.975924e-01f, 4.969535e-01f, 4.962398e-01f, 4.954513e-01f, - 4.945883e-01f, 4.936507e-01f, 4.926388e-01f, 4.915527e-01f, - 4.903926e-01f, 4.891587e-01f, 4.878511e-01f, 4.864700e-01f, - 4.850156e-01f, 4.834882e-01f, 4.818880e-01f, 4.802153e-01f, - 4.784702e-01f, 4.766530e-01f, 4.747641e-01f, 4.728037e-01f, - 4.707720e-01f, 4.686695e-01f, 4.664964e-01f, 4.642530e-01f, - 4.619398e-01f, 4.595569e-01f, 4.571049e-01f, 4.545840e-01f, - 4.519946e-01f, 4.493372e-01f, 4.466122e-01f, 4.438198e-01f, - 4.409606e-01f, 4.380350e-01f, 4.350435e-01f, 4.319864e-01f, - 4.288643e-01f, 4.256776e-01f, 4.224268e-01f, 4.191124e-01f, - 4.157348e-01f, 4.122947e-01f, 4.087924e-01f, 4.052286e-01f, - 4.016038e-01f, 3.979185e-01f, 3.941732e-01f, 3.903686e-01f, - 3.865052e-01f, 3.825836e-01f, 3.786044e-01f, 3.745682e-01f, - 3.704756e-01f, 3.663271e-01f, 3.621235e-01f, 3.578654e-01f, - 3.535534e-01f, 3.491881e-01f, 3.447703e-01f, 3.403005e-01f, - 3.357795e-01f, 3.312079e-01f, 3.265864e-01f, 3.219158e-01f, - 3.171966e-01f, 3.124297e-01f, 3.076158e-01f, 3.027555e-01f, - 2.978497e-01f, 2.928989e-01f, 2.879041e-01f, 2.828659e-01f, - 2.777851e-01f, 2.726625e-01f, 2.674988e-01f, 2.622948e-01f, - 2.570514e-01f, 2.517692e-01f, 2.464491e-01f, 2.410919e-01f, - 2.356984e-01f, 2.302694e-01f, 2.248057e-01f, 2.193081e-01f, - 2.137775e-01f, 2.082148e-01f, 2.026207e-01f, 1.969960e-01f, - 1.913417e-01f, 1.856586e-01f, 1.799475e-01f, 1.742093e-01f, - 1.684449e-01f, 1.626551e-01f, 1.568409e-01f, 1.510030e-01f, - 1.451423e-01f, 1.392598e-01f, 1.333564e-01f, 1.274328e-01f, - 1.214901e-01f, 1.155291e-01f, 1.095506e-01f, 1.035557e-01f, - 9.754516e-02f, 9.151994e-02f, 8.548094e-02f, 7.942907e-02f, - 7.336524e-02f, 6.729035e-02f, 6.120534e-02f, 5.511110e-02f, - 4.900857e-02f, 4.289866e-02f, 3.678228e-02f, 3.066037e-02f, - 2.453384e-02f, 1.840361e-02f, 1.227061e-02f, 6.135769e-03f}; -static const int AUP_FFTW_g_ip1024[] = {256, 256, 0, 16, 0, 64, 32, 96, - 0, 256, 128, 384, 64, 320, 192, 448}; -static const float AUP_FFTW_g_w1024[] = { - 1.000000e+00f, 7.071068e-01f, 5.000377e-01f, 5.003390e-01f, - 9.996988e-01f, 2.454123e-02f, 9.972905e-01f, -7.356456e-02f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.972905e-01f, 7.356456e-02f, 9.757021e-01f, -2.191012e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.924795e-01f, 1.224107e-01f, 9.329928e-01f, -3.598950e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.852776e-01f, 1.709619e-01f, 8.700870e-01f, -4.928982e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.757021e-01f, 2.191012e-01f, 7.883464e-01f, -6.152316e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.637761e-01f, 2.667128e-01f, 6.895405e-01f, -7.242471e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.495282e-01f, 3.136817e-01f, 5.758082e-01f, -8.175848e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.329928e-01f, 3.598950e-01f, 4.496113e-01f, -8.932243e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.142098e-01f, 4.052413e-01f, 3.136817e-01f, -9.495282e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.932243e-01f, 4.496113e-01f, 1.709619e-01f, -9.852776e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.700870e-01f, 4.928982e-01f, 2.454123e-02f, -9.996988e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.448536e-01f, 5.349976e-01f, -1.224107e-01f, -9.924795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.175848e-01f, 5.758082e-01f, -2.667128e-01f, -9.637761e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.883464e-01f, 6.152316e-01f, -4.052413e-01f, -9.142098e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.572088e-01f, 6.531728e-01f, -5.349976e-01f, -8.448536e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 7.242471e-01f, 6.895405e-01f, -6.531728e-01f, -7.572088e-01f, - 1.000000e+00f, 7.071068e-01f, 5.001506e-01f, 5.013585e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 1.000000e+00f, 7.071068e-01f, 5.006030e-01f, 5.054710e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 1.000000e+00f, 7.071068e-01f, 5.024193e-01f, 5.224986e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 1.000000e+00f, 7.071068e-01f, 5.097956e-01f, 6.013449e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 1.000000e+00f, 7.071068e-01f, 9.238795e-01f, 3.826834e-01f, - 1.000000e+00f, 7.071068e-01f, 0.000000e+00f, 0.000000e+00f, - 7.071068e-01f, 4.999906e-01f, 4.999624e-01f, 4.999153e-01f, - 4.998494e-01f, 4.997647e-01f, 4.996612e-01f, 4.995389e-01f, - 4.993977e-01f, 4.992378e-01f, 4.990591e-01f, 4.988615e-01f, - 4.986452e-01f, 4.984101e-01f, 4.981563e-01f, 4.978837e-01f, - 4.975924e-01f, 4.972823e-01f, 4.969535e-01f, 4.966060e-01f, - 4.962398e-01f, 4.958549e-01f, 4.954513e-01f, 4.950291e-01f, - 4.945883e-01f, 4.941288e-01f, 4.936507e-01f, 4.931540e-01f, - 4.926388e-01f, 4.921050e-01f, 4.915527e-01f, 4.909819e-01f, - 4.903926e-01f, 4.897849e-01f, 4.891587e-01f, 4.885141e-01f, - 4.878511e-01f, 4.871697e-01f, 4.864700e-01f, 4.857519e-01f, - 4.850156e-01f, 4.842610e-01f, 4.834882e-01f, 4.826972e-01f, - 4.818880e-01f, 4.810607e-01f, 4.802153e-01f, 4.793517e-01f, - 4.784702e-01f, 4.775706e-01f, 4.766530e-01f, 4.757175e-01f, - 4.747641e-01f, 4.737928e-01f, 4.728037e-01f, 4.717967e-01f, - 4.707720e-01f, 4.697296e-01f, 4.686695e-01f, 4.675918e-01f, - 4.664964e-01f, 4.653835e-01f, 4.642530e-01f, 4.631051e-01f, - 4.619398e-01f, 4.607570e-01f, 4.595569e-01f, 4.583395e-01f, - 4.571049e-01f, 4.558530e-01f, 4.545840e-01f, 4.532979e-01f, - 4.519946e-01f, 4.506744e-01f, 4.493372e-01f, 4.479831e-01f, - 4.466122e-01f, 4.452244e-01f, 4.438198e-01f, 4.423985e-01f, - 4.409606e-01f, 4.395061e-01f, 4.380350e-01f, 4.365475e-01f, - 4.350435e-01f, 4.335231e-01f, 4.319864e-01f, 4.304335e-01f, - 4.288643e-01f, 4.272790e-01f, 4.256776e-01f, 4.240602e-01f, - 4.224268e-01f, 4.207775e-01f, 4.191124e-01f, 4.174314e-01f, - 4.157348e-01f, 4.140225e-01f, 4.122947e-01f, 4.105513e-01f, - 4.087924e-01f, 4.070182e-01f, 4.052286e-01f, 4.034238e-01f, - 4.016038e-01f, 3.997686e-01f, 3.979185e-01f, 3.960533e-01f, - 3.941732e-01f, 3.922783e-01f, 3.903686e-01f, 3.884442e-01f, - 3.865052e-01f, 3.845517e-01f, 3.825836e-01f, 3.806012e-01f, - 3.786044e-01f, 3.765934e-01f, 3.745682e-01f, 3.725289e-01f, - 3.704756e-01f, 3.684083e-01f, 3.663271e-01f, 3.642322e-01f, - 3.621235e-01f, 3.600013e-01f, 3.578654e-01f, 3.557161e-01f, - 3.535534e-01f, 3.513774e-01f, 3.491881e-01f, 3.469857e-01f, - 3.447703e-01f, 3.425418e-01f, 3.403005e-01f, 3.380464e-01f, - 3.357795e-01f, 3.335000e-01f, 3.312079e-01f, 3.289033e-01f, - 3.265864e-01f, 3.242572e-01f, 3.219158e-01f, 3.195622e-01f, - 3.171966e-01f, 3.148191e-01f, 3.124297e-01f, 3.100286e-01f, - 3.076158e-01f, 3.051914e-01f, 3.027555e-01f, 3.003082e-01f, - 2.978497e-01f, 2.953799e-01f, 2.928989e-01f, 2.904070e-01f, - 2.879041e-01f, 2.853904e-01f, 2.828659e-01f, 2.803308e-01f, - 2.777851e-01f, 2.752290e-01f, 2.726625e-01f, 2.700857e-01f, - 2.674988e-01f, 2.649018e-01f, 2.622948e-01f, 2.596780e-01f, - 2.570514e-01f, 2.544151e-01f, 2.517692e-01f, 2.491138e-01f, - 2.464491e-01f, 2.437751e-01f, 2.410919e-01f, 2.383996e-01f, - 2.356984e-01f, 2.329882e-01f, 2.302694e-01f, 2.275418e-01f, - 2.248057e-01f, 2.220611e-01f, 2.193081e-01f, 2.165469e-01f, - 2.137775e-01f, 2.110001e-01f, 2.082148e-01f, 2.054216e-01f, - 2.026207e-01f, 1.998121e-01f, 1.969960e-01f, 1.941725e-01f, - 1.913417e-01f, 1.885037e-01f, 1.856586e-01f, 1.828065e-01f, - 1.799475e-01f, 1.770818e-01f, 1.742093e-01f, 1.713304e-01f, - 1.684449e-01f, 1.655532e-01f, 1.626551e-01f, 1.597510e-01f, - 1.568409e-01f, 1.539248e-01f, 1.510030e-01f, 1.480754e-01f, - 1.451423e-01f, 1.422038e-01f, 1.392598e-01f, 1.363107e-01f, - 1.333564e-01f, 1.303971e-01f, 1.274328e-01f, 1.244638e-01f, - 1.214901e-01f, 1.185118e-01f, 1.155291e-01f, 1.125420e-01f, - 1.095506e-01f, 1.065552e-01f, 1.035557e-01f, 1.005523e-01f, - 9.754516e-02f, 9.453433e-02f, 9.151994e-02f, 8.850211e-02f, - 8.548094e-02f, 8.245656e-02f, 7.942907e-02f, 7.639859e-02f, - 7.336524e-02f, 7.032912e-02f, 6.729035e-02f, 6.424906e-02f, - 6.120534e-02f, 5.815932e-02f, 5.511110e-02f, 5.206082e-02f, - 4.900857e-02f, 4.595448e-02f, 4.289866e-02f, 3.984122e-02f, - 3.678228e-02f, 3.372196e-02f, 3.066037e-02f, 2.759762e-02f, - 2.453384e-02f, 2.146913e-02f, 1.840361e-02f, 1.533740e-02f, - 1.227061e-02f, 9.203365e-03f, 6.135769e-03f, 3.067942e-03f}; -static const int AUP_FFTW_g_ip2048[] = {512, 512, 0, 16, 0, 64, 32, 96, - 0, 256, 128, 384, 64, 320, 192, 448}; -static const float AUP_FFTW_g_w2048[] = { - 1.000000e+00f, 7.071068e-01f, 5.000094e-01f, 5.000847e-01f, - 9.999247e-01f, 1.227154e-02f, 9.993224e-01f, -3.680722e-02f, - 9.996988e-01f, 2.454123e-02f, 9.972905e-01f, -7.356456e-02f, - 9.993224e-01f, 3.680722e-02f, 9.939070e-01f, -1.102222e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.981181e-01f, 6.132074e-02f, 9.831055e-01f, -1.830399e-01f, - 9.972905e-01f, 7.356456e-02f, 9.757021e-01f, -2.191012e-01f, - 9.963126e-01f, 8.579731e-02f, 9.669765e-01f, -2.548657e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.939070e-01f, 1.102222e-01f, 9.456073e-01f, -3.253103e-01f, - 9.924795e-01f, 1.224107e-01f, 9.329928e-01f, -3.598950e-01f, - 9.909026e-01f, 1.345807e-01f, 9.191139e-01f, -3.939920e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.873014e-01f, 1.588581e-01f, 8.876396e-01f, -4.605387e-01f, - 9.852776e-01f, 1.709619e-01f, 8.700870e-01f, -4.928982e-01f, - 9.831055e-01f, 1.830399e-01f, 8.513552e-01f, -5.245897e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.783174e-01f, 2.071114e-01f, 8.104572e-01f, -5.857979e-01f, - 9.757021e-01f, 2.191012e-01f, 7.883464e-01f, -6.152316e-01f, - 9.729400e-01f, 2.310581e-01f, 7.651673e-01f, -6.438315e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.669765e-01f, 2.548657e-01f, 7.157308e-01f, -6.983762e-01f, - 9.637761e-01f, 2.667128e-01f, 6.895405e-01f, -7.242471e-01f, - 9.604305e-01f, 2.785197e-01f, 6.624158e-01f, -7.491364e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.533060e-01f, 3.020059e-01f, 6.055110e-01f, -7.958369e-01f, - 9.495282e-01f, 3.136817e-01f, 5.758082e-01f, -8.175848e-01f, - 9.456073e-01f, 3.253103e-01f, 5.453250e-01f, -8.382247e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.373390e-01f, 3.484187e-01f, 4.821838e-01f, -8.760701e-01f, - 9.329928e-01f, 3.598950e-01f, 4.496113e-01f, -8.932243e-01f, - 9.285061e-01f, 3.713172e-01f, 4.164296e-01f, -9.091680e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.191139e-01f, 3.939920e-01f, 3.484187e-01f, -9.373390e-01f, - 9.142098e-01f, 4.052413e-01f, 3.136817e-01f, -9.495282e-01f, - 9.091680e-01f, 4.164296e-01f, 2.785197e-01f, -9.604305e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.986745e-01f, 4.386162e-01f, 2.071114e-01f, -9.783174e-01f, - 8.932243e-01f, 4.496113e-01f, 1.709619e-01f, -9.852776e-01f, - 8.876396e-01f, 4.605387e-01f, 1.345807e-01f, -9.909026e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.760701e-01f, 4.821838e-01f, 6.132074e-02f, -9.981181e-01f, - 8.700870e-01f, 4.928982e-01f, 2.454123e-02f, -9.996988e-01f, - 8.639729e-01f, 5.035384e-01f, -1.227154e-02f, -9.999247e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.513552e-01f, 5.245897e-01f, -8.579731e-02f, -9.963126e-01f, - 8.448536e-01f, 5.349976e-01f, -1.224107e-01f, -9.924795e-01f, - 8.382247e-01f, 5.453250e-01f, -1.588581e-01f, -9.873014e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.245893e-01f, 5.657318e-01f, -2.310581e-01f, -9.729400e-01f, - 8.175848e-01f, 5.758082e-01f, -2.667128e-01f, -9.637761e-01f, - 8.104572e-01f, 5.857979e-01f, -3.020059e-01f, -9.533060e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.958369e-01f, 6.055110e-01f, -3.713172e-01f, -9.285061e-01f, - 7.883464e-01f, 6.152316e-01f, -4.052413e-01f, -9.142098e-01f, - 7.807372e-01f, 6.248595e-01f, -4.386162e-01f, -8.986745e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.651673e-01f, 6.438315e-01f, -5.035384e-01f, -8.639729e-01f, - 7.572088e-01f, 6.531728e-01f, -5.349976e-01f, -8.448536e-01f, - 7.491364e-01f, 6.624158e-01f, -5.657318e-01f, -8.245893e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 7.326543e-01f, 6.806010e-01f, -6.248595e-01f, -7.807372e-01f, - 7.242471e-01f, 6.895405e-01f, -6.531728e-01f, -7.572088e-01f, - 7.157308e-01f, 6.983762e-01f, -6.806010e-01f, -7.326543e-01f, - 1.000000e+00f, 7.071068e-01f, 5.000377e-01f, 5.003390e-01f, - 9.996988e-01f, 2.454123e-02f, 9.972905e-01f, -7.356456e-02f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.972905e-01f, 7.356456e-02f, 9.757021e-01f, -2.191012e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.924795e-01f, 1.224107e-01f, 9.329928e-01f, -3.598950e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.852776e-01f, 1.709619e-01f, 8.700870e-01f, -4.928982e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.757021e-01f, 2.191012e-01f, 7.883464e-01f, -6.152316e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.637761e-01f, 2.667128e-01f, 6.895405e-01f, -7.242471e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.495282e-01f, 3.136817e-01f, 5.758082e-01f, -8.175848e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.329928e-01f, 3.598950e-01f, 4.496113e-01f, -8.932243e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.142098e-01f, 4.052413e-01f, 3.136817e-01f, -9.495282e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.932243e-01f, 4.496113e-01f, 1.709619e-01f, -9.852776e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.700870e-01f, 4.928982e-01f, 2.454123e-02f, -9.996988e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.448536e-01f, 5.349976e-01f, -1.224107e-01f, -9.924795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.175848e-01f, 5.758082e-01f, -2.667128e-01f, -9.637761e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.883464e-01f, 6.152316e-01f, -4.052413e-01f, -9.142098e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.572088e-01f, 6.531728e-01f, -5.349976e-01f, -8.448536e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 7.242471e-01f, 6.895405e-01f, -6.531728e-01f, -7.572088e-01f, - 1.000000e+00f, 7.071068e-01f, 5.001506e-01f, 5.013585e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 1.000000e+00f, 7.071068e-01f, 5.006030e-01f, 5.054710e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 1.000000e+00f, 7.071068e-01f, 5.024193e-01f, 5.224986e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 1.000000e+00f, 7.071068e-01f, 5.097956e-01f, 6.013449e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 1.000000e+00f, 7.071068e-01f, 9.238795e-01f, 3.826834e-01f, - 1.000000e+00f, 7.071068e-01f, 0.000000e+00f, 0.000000e+00f, - 7.071068e-01f, 4.999976e-01f, 4.999906e-01f, 4.999788e-01f, - 4.999624e-01f, 4.999412e-01f, 4.999153e-01f, 4.998847e-01f, - 4.998494e-01f, 4.998094e-01f, 4.997647e-01f, 4.997153e-01f, - 4.996612e-01f, 4.996024e-01f, 4.995389e-01f, 4.994706e-01f, - 4.993977e-01f, 4.993201e-01f, 4.992378e-01f, 4.991508e-01f, - 4.990591e-01f, 4.989626e-01f, 4.988615e-01f, 4.987557e-01f, - 4.986452e-01f, 4.985300e-01f, 4.984101e-01f, 4.982856e-01f, - 4.981563e-01f, 4.980224e-01f, 4.978837e-01f, 4.977404e-01f, - 4.975924e-01f, 4.974397e-01f, 4.972823e-01f, 4.971202e-01f, - 4.969535e-01f, 4.967821e-01f, 4.966060e-01f, 4.964252e-01f, - 4.962398e-01f, 4.960497e-01f, 4.958549e-01f, 4.956554e-01f, - 4.954513e-01f, 4.952425e-01f, 4.950291e-01f, 4.948110e-01f, - 4.945883e-01f, 4.943608e-01f, 4.941288e-01f, 4.938921e-01f, - 4.936507e-01f, 4.934047e-01f, 4.931540e-01f, 4.928988e-01f, - 4.926388e-01f, 4.923743e-01f, 4.921050e-01f, 4.918312e-01f, - 4.915527e-01f, 4.912697e-01f, 4.909819e-01f, 4.906896e-01f, - 4.903926e-01f, 4.900911e-01f, 4.897849e-01f, 4.894741e-01f, - 4.891587e-01f, 4.888387e-01f, 4.885141e-01f, 4.881849e-01f, - 4.878511e-01f, 4.875127e-01f, 4.871697e-01f, 4.868221e-01f, - 4.864700e-01f, 4.861132e-01f, 4.857519e-01f, 4.853861e-01f, - 4.850156e-01f, 4.846406e-01f, 4.842610e-01f, 4.838769e-01f, - 4.834882e-01f, 4.830950e-01f, 4.826972e-01f, 4.822949e-01f, - 4.818880e-01f, 4.814766e-01f, 4.810607e-01f, 4.806402e-01f, - 4.802153e-01f, 4.797858e-01f, 4.793517e-01f, 4.789132e-01f, - 4.784702e-01f, 4.780226e-01f, 4.775706e-01f, 4.771140e-01f, - 4.766530e-01f, 4.761875e-01f, 4.757175e-01f, 4.752430e-01f, - 4.747641e-01f, 4.742807e-01f, 4.737928e-01f, 4.733005e-01f, - 4.728037e-01f, 4.723024e-01f, 4.717967e-01f, 4.712866e-01f, - 4.707720e-01f, 4.702530e-01f, 4.697296e-01f, 4.692018e-01f, - 4.686695e-01f, 4.681328e-01f, 4.675918e-01f, 4.670463e-01f, - 4.664964e-01f, 4.659421e-01f, 4.653835e-01f, 4.648204e-01f, - 4.642530e-01f, 4.636813e-01f, 4.631051e-01f, 4.625246e-01f, - 4.619398e-01f, 4.613506e-01f, 4.607570e-01f, 4.601591e-01f, - 4.595569e-01f, 4.589504e-01f, 4.583395e-01f, 4.577244e-01f, - 4.571049e-01f, 4.564811e-01f, 4.558530e-01f, 4.552206e-01f, - 4.545840e-01f, 4.539431e-01f, 4.532979e-01f, 4.526484e-01f, - 4.519946e-01f, 4.513367e-01f, 4.506744e-01f, 4.500079e-01f, - 4.493372e-01f, 4.486623e-01f, 4.479831e-01f, 4.472997e-01f, - 4.466122e-01f, 4.459204e-01f, 4.452244e-01f, 4.445242e-01f, - 4.438198e-01f, 4.431113e-01f, 4.423985e-01f, 4.416817e-01f, - 4.409606e-01f, 4.402354e-01f, 4.395061e-01f, 4.387726e-01f, - 4.380350e-01f, 4.372933e-01f, 4.365475e-01f, 4.357975e-01f, - 4.350435e-01f, 4.342854e-01f, 4.335231e-01f, 4.327568e-01f, - 4.319864e-01f, 4.312120e-01f, 4.304335e-01f, 4.296509e-01f, - 4.288643e-01f, 4.280737e-01f, 4.272790e-01f, 4.264803e-01f, - 4.256776e-01f, 4.248709e-01f, 4.240602e-01f, 4.232455e-01f, - 4.224268e-01f, 4.216041e-01f, 4.207775e-01f, 4.199469e-01f, - 4.191124e-01f, 4.182739e-01f, 4.174314e-01f, 4.165851e-01f, - 4.157348e-01f, 4.148806e-01f, 4.140225e-01f, 4.131605e-01f, - 4.122947e-01f, 4.114249e-01f, 4.105513e-01f, 4.096738e-01f, - 4.087924e-01f, 4.079072e-01f, 4.070182e-01f, 4.061253e-01f, - 4.052286e-01f, 4.043281e-01f, 4.034238e-01f, 4.025157e-01f, - 4.016038e-01f, 4.006881e-01f, 3.997686e-01f, 3.988454e-01f, - 3.979185e-01f, 3.969877e-01f, 3.960533e-01f, 3.951151e-01f, - 3.941732e-01f, 3.932276e-01f, 3.922783e-01f, 3.913253e-01f, - 3.903686e-01f, 3.894083e-01f, 3.884442e-01f, 3.874766e-01f, - 3.865052e-01f, 3.855303e-01f, 3.845517e-01f, 3.835695e-01f, - 3.825836e-01f, 3.815942e-01f, 3.806012e-01f, 3.796046e-01f, - 3.786044e-01f, 3.776007e-01f, 3.765934e-01f, 3.755826e-01f, - 3.745682e-01f, 3.735503e-01f, 3.725289e-01f, 3.715040e-01f, - 3.704756e-01f, 3.694437e-01f, 3.684083e-01f, 3.673694e-01f, - 3.663271e-01f, 3.652814e-01f, 3.642322e-01f, 3.631796e-01f, - 3.621235e-01f, 3.610641e-01f, 3.600013e-01f, 3.589350e-01f, - 3.578654e-01f, 3.567924e-01f, 3.557161e-01f, 3.546364e-01f, - 3.535534e-01f, 3.524670e-01f, 3.513774e-01f, 3.502844e-01f, - 3.491881e-01f, 3.480886e-01f, 3.469857e-01f, 3.458796e-01f, - 3.447703e-01f, 3.436577e-01f, 3.425418e-01f, 3.414228e-01f, - 3.403005e-01f, 3.391750e-01f, 3.380464e-01f, 3.369145e-01f, - 3.357795e-01f, 3.346413e-01f, 3.335000e-01f, 3.323555e-01f, - 3.312079e-01f, 3.300572e-01f, 3.289033e-01f, 3.277464e-01f, - 3.265864e-01f, 3.254233e-01f, 3.242572e-01f, 3.230880e-01f, - 3.219158e-01f, 3.207405e-01f, 3.195622e-01f, 3.183809e-01f, - 3.171966e-01f, 3.160094e-01f, 3.148191e-01f, 3.136259e-01f, - 3.124297e-01f, 3.112306e-01f, 3.100286e-01f, 3.088237e-01f, - 3.076158e-01f, 3.064050e-01f, 3.051914e-01f, 3.039749e-01f, - 3.027555e-01f, 3.015333e-01f, 3.003082e-01f, 2.990804e-01f, - 2.978497e-01f, 2.966161e-01f, 2.953799e-01f, 2.941408e-01f, - 2.928989e-01f, 2.916543e-01f, 2.904070e-01f, 2.891569e-01f, - 2.879041e-01f, 2.866486e-01f, 2.853904e-01f, 2.841295e-01f, - 2.828659e-01f, 2.815997e-01f, 2.803308e-01f, 2.790593e-01f, - 2.777851e-01f, 2.765084e-01f, 2.752290e-01f, 2.739470e-01f, - 2.726625e-01f, 2.713754e-01f, 2.700857e-01f, 2.687935e-01f, - 2.674988e-01f, 2.662016e-01f, 2.649018e-01f, 2.635996e-01f, - 2.622948e-01f, 2.609876e-01f, 2.596780e-01f, 2.583659e-01f, - 2.570514e-01f, 2.557344e-01f, 2.544151e-01f, 2.530933e-01f, - 2.517692e-01f, 2.504427e-01f, 2.491138e-01f, 2.477826e-01f, - 2.464491e-01f, 2.451132e-01f, 2.437751e-01f, 2.424346e-01f, - 2.410919e-01f, 2.397469e-01f, 2.383996e-01f, 2.370501e-01f, - 2.356984e-01f, 2.343444e-01f, 2.329882e-01f, 2.316299e-01f, - 2.302694e-01f, 2.289067e-01f, 2.275418e-01f, 2.261748e-01f, - 2.248057e-01f, 2.234344e-01f, 2.220611e-01f, 2.206856e-01f, - 2.193081e-01f, 2.179285e-01f, 2.165469e-01f, 2.151632e-01f, - 2.137775e-01f, 2.123898e-01f, 2.110001e-01f, 2.096084e-01f, - 2.082148e-01f, 2.068192e-01f, 2.054216e-01f, 2.040221e-01f, - 2.026207e-01f, 2.012173e-01f, 1.998121e-01f, 1.984050e-01f, - 1.969960e-01f, 1.955852e-01f, 1.941725e-01f, 1.927580e-01f, - 1.913417e-01f, 1.899236e-01f, 1.885037e-01f, 1.870820e-01f, - 1.856586e-01f, 1.842334e-01f, 1.828065e-01f, 1.813779e-01f, - 1.799475e-01f, 1.785155e-01f, 1.770818e-01f, 1.756464e-01f, - 1.742093e-01f, 1.727707e-01f, 1.713304e-01f, 1.698884e-01f, - 1.684449e-01f, 1.669998e-01f, 1.655532e-01f, 1.641049e-01f, - 1.626551e-01f, 1.612038e-01f, 1.597510e-01f, 1.582967e-01f, - 1.568409e-01f, 1.553836e-01f, 1.539248e-01f, 1.524646e-01f, - 1.510030e-01f, 1.495399e-01f, 1.480754e-01f, 1.466096e-01f, - 1.451423e-01f, 1.436737e-01f, 1.422038e-01f, 1.407325e-01f, - 1.392598e-01f, 1.377859e-01f, 1.363107e-01f, 1.348342e-01f, - 1.333564e-01f, 1.318773e-01f, 1.303971e-01f, 1.289156e-01f, - 1.274328e-01f, 1.259489e-01f, 1.244638e-01f, 1.229775e-01f, - 1.214901e-01f, 1.200015e-01f, 1.185118e-01f, 1.170210e-01f, - 1.155291e-01f, 1.140360e-01f, 1.125420e-01f, 1.110468e-01f, - 1.095506e-01f, 1.080534e-01f, 1.065552e-01f, 1.050559e-01f, - 1.035557e-01f, 1.020545e-01f, 1.005523e-01f, 9.904921e-02f, - 9.754516e-02f, 9.604020e-02f, 9.453433e-02f, 9.302758e-02f, - 9.151994e-02f, 9.001145e-02f, 8.850211e-02f, 8.699194e-02f, - 8.548094e-02f, 8.396915e-02f, 8.245656e-02f, 8.094320e-02f, - 7.942907e-02f, 7.791420e-02f, 7.639859e-02f, 7.488227e-02f, - 7.336524e-02f, 7.184752e-02f, 7.032912e-02f, 6.881006e-02f, - 6.729035e-02f, 6.577001e-02f, 6.424906e-02f, 6.272749e-02f, - 6.120534e-02f, 5.968261e-02f, 5.815932e-02f, 5.663548e-02f, - 5.511110e-02f, 5.358621e-02f, 5.206082e-02f, 5.053493e-02f, - 4.900857e-02f, 4.748175e-02f, 4.595448e-02f, 4.442678e-02f, - 4.289866e-02f, 4.137013e-02f, 3.984122e-02f, 3.831193e-02f, - 3.678228e-02f, 3.525229e-02f, 3.372196e-02f, 3.219132e-02f, - 3.066037e-02f, 2.912913e-02f, 2.759762e-02f, 2.606585e-02f, - 2.453384e-02f, 2.300159e-02f, 2.146913e-02f, 1.993646e-02f, - 1.840361e-02f, 1.687059e-02f, 1.533740e-02f, 1.380407e-02f, - 1.227061e-02f, 1.073704e-02f, 9.203365e-03f, 7.669603e-03f, - 6.135769e-03f, 4.601877e-03f, 3.067942e-03f, 1.533978e-03f}; -static const int AUP_FFTW_g_ip4096[] = { - 1024, 1024, 0, 16, 0, 64, 32, 96, 0, 256, 128, - 384, 64, 320, 192, 448, 0, 1024, 512, 1536, 256, 1280, - 768, 1792, 128, 1152, 640, 1664, 384, 1408, 896, 1920}; -static const float AUP_FFTW_g_w4096[] = { - 1.000000e+00f, 7.071068e-01f, 5.000024e-01f, 5.000212e-01f, - 9.999812e-01f, 6.135885e-03f, 9.998306e-01f, -1.840673e-02f, - 9.999247e-01f, 1.227154e-02f, 9.993224e-01f, -3.680722e-02f, - 9.998306e-01f, 1.840673e-02f, 9.984756e-01f, -5.519524e-02f, - 9.996988e-01f, 2.454123e-02f, 9.972905e-01f, -7.356456e-02f, - 9.995294e-01f, 3.067480e-02f, 9.957674e-01f, -9.190896e-02f, - 9.993224e-01f, 3.680722e-02f, 9.939070e-01f, -1.102222e-01f, - 9.990777e-01f, 4.293826e-02f, 9.917098e-01f, -1.284981e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.984756e-01f, 5.519524e-02f, 9.863081e-01f, -1.649131e-01f, - 9.981181e-01f, 6.132074e-02f, 9.831055e-01f, -1.830399e-01f, - 9.977231e-01f, 6.744392e-02f, 9.795698e-01f, -2.011046e-01f, - 9.972905e-01f, 7.356456e-02f, 9.757021e-01f, -2.191012e-01f, - 9.968203e-01f, 7.968244e-02f, 9.715039e-01f, -2.370236e-01f, - 9.963126e-01f, 8.579731e-02f, 9.669765e-01f, -2.548657e-01f, - 9.957674e-01f, 9.190896e-02f, 9.621214e-01f, -2.726214e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.945646e-01f, 1.041216e-01f, 9.514350e-01f, -3.078496e-01f, - 9.939070e-01f, 1.102222e-01f, 9.456073e-01f, -3.253103e-01f, - 9.932119e-01f, 1.163186e-01f, 9.394592e-01f, -3.426607e-01f, - 9.924795e-01f, 1.224107e-01f, 9.329928e-01f, -3.598950e-01f, - 9.917098e-01f, 1.284981e-01f, 9.262102e-01f, -3.770074e-01f, - 9.909026e-01f, 1.345807e-01f, 9.191139e-01f, -3.939920e-01f, - 9.900582e-01f, 1.406582e-01f, 9.117060e-01f, -4.108432e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.882576e-01f, 1.527972e-01f, 8.959662e-01f, -4.441221e-01f, - 9.873014e-01f, 1.588581e-01f, 8.876396e-01f, -4.605387e-01f, - 9.863081e-01f, 1.649131e-01f, 8.790122e-01f, -4.767992e-01f, - 9.852776e-01f, 1.709619e-01f, 8.700870e-01f, -4.928982e-01f, - 9.842101e-01f, 1.770042e-01f, 8.608669e-01f, -5.088301e-01f, - 9.831055e-01f, 1.830399e-01f, 8.513552e-01f, -5.245897e-01f, - 9.819639e-01f, 1.890687e-01f, 8.415550e-01f, -5.401715e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.795698e-01f, 2.011046e-01f, 8.211025e-01f, -5.707807e-01f, - 9.783174e-01f, 2.071114e-01f, 8.104572e-01f, -5.857979e-01f, - 9.770281e-01f, 2.131103e-01f, 7.995373e-01f, -6.006165e-01f, - 9.757021e-01f, 2.191012e-01f, 7.883464e-01f, -6.152316e-01f, - 9.743394e-01f, 2.250839e-01f, 7.768885e-01f, -6.296382e-01f, - 9.729400e-01f, 2.310581e-01f, 7.651673e-01f, -6.438315e-01f, - 9.715039e-01f, 2.370236e-01f, 7.531868e-01f, -6.578067e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.685221e-01f, 2.489276e-01f, 7.284644e-01f, -6.850837e-01f, - 9.669765e-01f, 2.548657e-01f, 7.157308e-01f, -6.983762e-01f, - 9.653944e-01f, 2.607941e-01f, 7.027547e-01f, -7.114322e-01f, - 9.637761e-01f, 2.667128e-01f, 6.895405e-01f, -7.242471e-01f, - 9.621214e-01f, 2.726214e-01f, 6.760927e-01f, -7.368166e-01f, - 9.604305e-01f, 2.785197e-01f, 6.624158e-01f, -7.491364e-01f, - 9.587035e-01f, 2.844075e-01f, 6.485144e-01f, -7.612024e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.551412e-01f, 2.961509e-01f, 6.200572e-01f, -7.845566e-01f, - 9.533060e-01f, 3.020059e-01f, 6.055110e-01f, -7.958369e-01f, - 9.514350e-01f, 3.078496e-01f, 5.907597e-01f, -8.068476e-01f, - 9.495282e-01f, 3.136817e-01f, 5.758082e-01f, -8.175848e-01f, - 9.475856e-01f, 3.195020e-01f, 5.606616e-01f, -8.280450e-01f, - 9.456073e-01f, 3.253103e-01f, 5.453250e-01f, -8.382247e-01f, - 9.435935e-01f, 3.311063e-01f, 5.298036e-01f, -8.481203e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.394592e-01f, 3.426607e-01f, 4.982277e-01f, -8.670462e-01f, - 9.373390e-01f, 3.484187e-01f, 4.821838e-01f, -8.760701e-01f, - 9.351835e-01f, 3.541635e-01f, 4.659765e-01f, -8.847971e-01f, - 9.329928e-01f, 3.598950e-01f, 4.496113e-01f, -8.932243e-01f, - 9.307670e-01f, 3.656130e-01f, 4.330938e-01f, -9.013488e-01f, - 9.285061e-01f, 3.713172e-01f, 4.164296e-01f, -9.091680e-01f, - 9.262102e-01f, 3.770074e-01f, 3.996242e-01f, -9.166791e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.215140e-01f, 3.883450e-01f, 3.656130e-01f, -9.307670e-01f, - 9.191139e-01f, 3.939920e-01f, 3.484187e-01f, -9.373390e-01f, - 9.166791e-01f, 3.996242e-01f, 3.311063e-01f, -9.435935e-01f, - 9.142098e-01f, 4.052413e-01f, 3.136817e-01f, -9.495282e-01f, - 9.117060e-01f, 4.108432e-01f, 2.961509e-01f, -9.551412e-01f, - 9.091680e-01f, 4.164296e-01f, 2.785197e-01f, -9.604305e-01f, - 9.065957e-01f, 4.220003e-01f, 2.607941e-01f, -9.653944e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 9.013488e-01f, 4.330938e-01f, 2.250839e-01f, -9.743394e-01f, - 8.986745e-01f, 4.386162e-01f, 2.071114e-01f, -9.783174e-01f, - 8.959662e-01f, 4.441221e-01f, 1.890687e-01f, -9.819639e-01f, - 8.932243e-01f, 4.496113e-01f, 1.709619e-01f, -9.852776e-01f, - 8.904487e-01f, 4.550836e-01f, 1.527972e-01f, -9.882576e-01f, - 8.876396e-01f, 4.605387e-01f, 1.345807e-01f, -9.909026e-01f, - 8.847971e-01f, 4.659765e-01f, 1.163186e-01f, -9.932119e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.790122e-01f, 4.767992e-01f, 7.968244e-02f, -9.968203e-01f, - 8.760701e-01f, 4.821838e-01f, 6.132074e-02f, -9.981181e-01f, - 8.730950e-01f, 4.875502e-01f, 4.293826e-02f, -9.990777e-01f, - 8.700870e-01f, 4.928982e-01f, 2.454123e-02f, -9.996988e-01f, - 8.670462e-01f, 4.982277e-01f, 6.135885e-03f, -9.999812e-01f, - 8.639729e-01f, 5.035384e-01f, -1.227154e-02f, -9.999247e-01f, - 8.608669e-01f, 5.088301e-01f, -3.067480e-02f, -9.995294e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.545580e-01f, 5.193560e-01f, -6.744392e-02f, -9.977231e-01f, - 8.513552e-01f, 5.245897e-01f, -8.579731e-02f, -9.963126e-01f, - 8.481203e-01f, 5.298036e-01f, -1.041216e-01f, -9.945646e-01f, - 8.448536e-01f, 5.349976e-01f, -1.224107e-01f, -9.924795e-01f, - 8.415550e-01f, 5.401715e-01f, -1.406582e-01f, -9.900582e-01f, - 8.382247e-01f, 5.453250e-01f, -1.588581e-01f, -9.873014e-01f, - 8.348629e-01f, 5.504580e-01f, -1.770042e-01f, -9.842101e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.280450e-01f, 5.606616e-01f, -2.131103e-01f, -9.770281e-01f, - 8.245893e-01f, 5.657318e-01f, -2.310581e-01f, -9.729400e-01f, - 8.211025e-01f, 5.707807e-01f, -2.489276e-01f, -9.685221e-01f, - 8.175848e-01f, 5.758082e-01f, -2.667128e-01f, -9.637761e-01f, - 8.140363e-01f, 5.808140e-01f, -2.844075e-01f, -9.587035e-01f, - 8.104572e-01f, 5.857979e-01f, -3.020059e-01f, -9.533060e-01f, - 8.068476e-01f, 5.907597e-01f, -3.195020e-01f, -9.475856e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.995373e-01f, 6.006165e-01f, -3.541635e-01f, -9.351835e-01f, - 7.958369e-01f, 6.055110e-01f, -3.713172e-01f, -9.285061e-01f, - 7.921066e-01f, 6.103828e-01f, -3.883450e-01f, -9.215140e-01f, - 7.883464e-01f, 6.152316e-01f, -4.052413e-01f, -9.142098e-01f, - 7.845566e-01f, 6.200572e-01f, -4.220003e-01f, -9.065957e-01f, - 7.807372e-01f, 6.248595e-01f, -4.386162e-01f, -8.986745e-01f, - 7.768885e-01f, 6.296382e-01f, -4.550836e-01f, -8.904487e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.691033e-01f, 6.391244e-01f, -4.875502e-01f, -8.730950e-01f, - 7.651673e-01f, 6.438315e-01f, -5.035384e-01f, -8.639729e-01f, - 7.612024e-01f, 6.485144e-01f, -5.193560e-01f, -8.545580e-01f, - 7.572088e-01f, 6.531728e-01f, -5.349976e-01f, -8.448536e-01f, - 7.531868e-01f, 6.578067e-01f, -5.504580e-01f, -8.348629e-01f, - 7.491364e-01f, 6.624158e-01f, -5.657318e-01f, -8.245893e-01f, - 7.450578e-01f, 6.669999e-01f, -5.808140e-01f, -8.140363e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 7.368166e-01f, 6.760927e-01f, -6.103828e-01f, -7.921066e-01f, - 7.326543e-01f, 6.806010e-01f, -6.248595e-01f, -7.807372e-01f, - 7.284644e-01f, 6.850837e-01f, -6.391244e-01f, -7.691033e-01f, - 7.242471e-01f, 6.895405e-01f, -6.531728e-01f, -7.572088e-01f, - 7.200025e-01f, 6.939715e-01f, -6.669999e-01f, -7.450578e-01f, - 7.157308e-01f, 6.983762e-01f, -6.806010e-01f, -7.326543e-01f, - 7.114322e-01f, 7.027547e-01f, -6.939715e-01f, -7.200025e-01f, - 1.000000e+00f, 7.071068e-01f, 5.000094e-01f, 5.000847e-01f, - 9.999247e-01f, 1.227154e-02f, 9.993224e-01f, -3.680722e-02f, - 9.996988e-01f, 2.454123e-02f, 9.972905e-01f, -7.356456e-02f, - 9.993224e-01f, 3.680722e-02f, 9.939070e-01f, -1.102222e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.981181e-01f, 6.132074e-02f, 9.831055e-01f, -1.830399e-01f, - 9.972905e-01f, 7.356456e-02f, 9.757021e-01f, -2.191012e-01f, - 9.963126e-01f, 8.579731e-02f, 9.669765e-01f, -2.548657e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.939070e-01f, 1.102222e-01f, 9.456073e-01f, -3.253103e-01f, - 9.924795e-01f, 1.224107e-01f, 9.329928e-01f, -3.598950e-01f, - 9.909026e-01f, 1.345807e-01f, 9.191139e-01f, -3.939920e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.873014e-01f, 1.588581e-01f, 8.876396e-01f, -4.605387e-01f, - 9.852776e-01f, 1.709619e-01f, 8.700870e-01f, -4.928982e-01f, - 9.831055e-01f, 1.830399e-01f, 8.513552e-01f, -5.245897e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.783174e-01f, 2.071114e-01f, 8.104572e-01f, -5.857979e-01f, - 9.757021e-01f, 2.191012e-01f, 7.883464e-01f, -6.152316e-01f, - 9.729400e-01f, 2.310581e-01f, 7.651673e-01f, -6.438315e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.669765e-01f, 2.548657e-01f, 7.157308e-01f, -6.983762e-01f, - 9.637761e-01f, 2.667128e-01f, 6.895405e-01f, -7.242471e-01f, - 9.604305e-01f, 2.785197e-01f, 6.624158e-01f, -7.491364e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.533060e-01f, 3.020059e-01f, 6.055110e-01f, -7.958369e-01f, - 9.495282e-01f, 3.136817e-01f, 5.758082e-01f, -8.175848e-01f, - 9.456073e-01f, 3.253103e-01f, 5.453250e-01f, -8.382247e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.373390e-01f, 3.484187e-01f, 4.821838e-01f, -8.760701e-01f, - 9.329928e-01f, 3.598950e-01f, 4.496113e-01f, -8.932243e-01f, - 9.285061e-01f, 3.713172e-01f, 4.164296e-01f, -9.091680e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.191139e-01f, 3.939920e-01f, 3.484187e-01f, -9.373390e-01f, - 9.142098e-01f, 4.052413e-01f, 3.136817e-01f, -9.495282e-01f, - 9.091680e-01f, 4.164296e-01f, 2.785197e-01f, -9.604305e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.986745e-01f, 4.386162e-01f, 2.071114e-01f, -9.783174e-01f, - 8.932243e-01f, 4.496113e-01f, 1.709619e-01f, -9.852776e-01f, - 8.876396e-01f, 4.605387e-01f, 1.345807e-01f, -9.909026e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.760701e-01f, 4.821838e-01f, 6.132074e-02f, -9.981181e-01f, - 8.700870e-01f, 4.928982e-01f, 2.454123e-02f, -9.996988e-01f, - 8.639729e-01f, 5.035384e-01f, -1.227154e-02f, -9.999247e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.513552e-01f, 5.245897e-01f, -8.579731e-02f, -9.963126e-01f, - 8.448536e-01f, 5.349976e-01f, -1.224107e-01f, -9.924795e-01f, - 8.382247e-01f, 5.453250e-01f, -1.588581e-01f, -9.873014e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.245893e-01f, 5.657318e-01f, -2.310581e-01f, -9.729400e-01f, - 8.175848e-01f, 5.758082e-01f, -2.667128e-01f, -9.637761e-01f, - 8.104572e-01f, 5.857979e-01f, -3.020059e-01f, -9.533060e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.958369e-01f, 6.055110e-01f, -3.713172e-01f, -9.285061e-01f, - 7.883464e-01f, 6.152316e-01f, -4.052413e-01f, -9.142098e-01f, - 7.807372e-01f, 6.248595e-01f, -4.386162e-01f, -8.986745e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.651673e-01f, 6.438315e-01f, -5.035384e-01f, -8.639729e-01f, - 7.572088e-01f, 6.531728e-01f, -5.349976e-01f, -8.448536e-01f, - 7.491364e-01f, 6.624158e-01f, -5.657318e-01f, -8.245893e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 7.326543e-01f, 6.806010e-01f, -6.248595e-01f, -7.807372e-01f, - 7.242471e-01f, 6.895405e-01f, -6.531728e-01f, -7.572088e-01f, - 7.157308e-01f, 6.983762e-01f, -6.806010e-01f, -7.326543e-01f, - 1.000000e+00f, 7.071068e-01f, 5.000377e-01f, 5.003390e-01f, - 9.996988e-01f, 2.454123e-02f, 9.972905e-01f, -7.356456e-02f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.972905e-01f, 7.356456e-02f, 9.757021e-01f, -2.191012e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.924795e-01f, 1.224107e-01f, 9.329928e-01f, -3.598950e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.852776e-01f, 1.709619e-01f, 8.700870e-01f, -4.928982e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.757021e-01f, 2.191012e-01f, 7.883464e-01f, -6.152316e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.637761e-01f, 2.667128e-01f, 6.895405e-01f, -7.242471e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.495282e-01f, 3.136817e-01f, 5.758082e-01f, -8.175848e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.329928e-01f, 3.598950e-01f, 4.496113e-01f, -8.932243e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.142098e-01f, 4.052413e-01f, 3.136817e-01f, -9.495282e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.932243e-01f, 4.496113e-01f, 1.709619e-01f, -9.852776e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.700870e-01f, 4.928982e-01f, 2.454123e-02f, -9.996988e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.448536e-01f, 5.349976e-01f, -1.224107e-01f, -9.924795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.175848e-01f, 5.758082e-01f, -2.667128e-01f, -9.637761e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.883464e-01f, 6.152316e-01f, -4.052413e-01f, -9.142098e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.572088e-01f, 6.531728e-01f, -5.349976e-01f, -8.448536e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 7.242471e-01f, 6.895405e-01f, -6.531728e-01f, -7.572088e-01f, - 1.000000e+00f, 7.071068e-01f, 5.001506e-01f, 5.013585e-01f, - 9.987955e-01f, 4.906767e-02f, 9.891765e-01f, -1.467305e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.891765e-01f, 1.467305e-01f, 9.039893e-01f, -4.275551e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.700313e-01f, 2.429802e-01f, 7.409511e-01f, -6.715590e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.415441e-01f, 3.368899e-01f, 5.141027e-01f, -8.577286e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 9.039893e-01f, 4.275551e-01f, 2.429802e-01f, -9.700313e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.577286e-01f, 5.141027e-01f, -4.906767e-02f, -9.987955e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 8.032075e-01f, 5.956993e-01f, -3.368899e-01f, -9.415441e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 7.409511e-01f, 6.715590e-01f, -5.956993e-01f, -8.032075e-01f, - 1.000000e+00f, 7.071068e-01f, 5.006030e-01f, 5.054710e-01f, - 9.951847e-01f, 9.801714e-02f, 9.569403e-01f, -2.902847e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.569403e-01f, 2.902847e-01f, 6.343933e-01f, -7.730105e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.819213e-01f, 4.713967e-01f, 9.801714e-02f, -9.951847e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 7.730105e-01f, 6.343933e-01f, -4.713967e-01f, -8.819213e-01f, - 1.000000e+00f, 7.071068e-01f, 5.024193e-01f, 5.224986e-01f, - 9.807853e-01f, 1.950903e-01f, 8.314696e-01f, -5.555702e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 8.314696e-01f, 5.555702e-01f, -1.950903e-01f, -9.807853e-01f, - 1.000000e+00f, 7.071068e-01f, 5.097956e-01f, 6.013449e-01f, - 9.238795e-01f, 3.826834e-01f, 3.826834e-01f, -9.238795e-01f, - 1.000000e+00f, 7.071068e-01f, 9.238795e-01f, 3.826834e-01f, - 1.000000e+00f, 7.071068e-01f, 0.000000e+00f, 0.000000e+00f, - 7.071068e-01f, 4.999994e-01f, 4.999976e-01f, 4.999947e-01f, - 4.999906e-01f, 4.999853e-01f, 4.999788e-01f, 4.999712e-01f, - 4.999624e-01f, 4.999524e-01f, 4.999412e-01f, 4.999288e-01f, - 4.999153e-01f, 4.999006e-01f, 4.998847e-01f, 4.998676e-01f, - 4.998494e-01f, 4.998300e-01f, 4.998094e-01f, 4.997876e-01f, - 4.997647e-01f, 4.997406e-01f, 4.997153e-01f, 4.996888e-01f, - 4.996612e-01f, 4.996324e-01f, 4.996024e-01f, 4.995712e-01f, - 4.995389e-01f, 4.995053e-01f, 4.994706e-01f, 4.994348e-01f, - 4.993977e-01f, 4.993595e-01f, 4.993201e-01f, 4.992795e-01f, - 4.992378e-01f, 4.991949e-01f, 4.991508e-01f, 4.991055e-01f, - 4.990591e-01f, 4.990114e-01f, 4.989626e-01f, 4.989127e-01f, - 4.988615e-01f, 4.988092e-01f, 4.987557e-01f, 4.987011e-01f, - 4.986452e-01f, 4.985882e-01f, 4.985300e-01f, 4.984707e-01f, - 4.984101e-01f, 4.983484e-01f, 4.982856e-01f, 4.982215e-01f, - 4.981563e-01f, 4.980899e-01f, 4.980224e-01f, 4.979536e-01f, - 4.978837e-01f, 4.978126e-01f, 4.977404e-01f, 4.976670e-01f, - 4.975924e-01f, 4.975166e-01f, 4.974397e-01f, 4.973616e-01f, - 4.972823e-01f, 4.972018e-01f, 4.971202e-01f, 4.970374e-01f, - 4.969535e-01f, 4.968684e-01f, 4.967821e-01f, 4.966946e-01f, - 4.966060e-01f, 4.965162e-01f, 4.964252e-01f, 4.963331e-01f, - 4.962398e-01f, 4.961453e-01f, 4.960497e-01f, 4.959529e-01f, - 4.958549e-01f, 4.957557e-01f, 4.956554e-01f, 4.955540e-01f, - 4.954513e-01f, 4.953475e-01f, 4.952425e-01f, 4.951364e-01f, - 4.950291e-01f, 4.949206e-01f, 4.948110e-01f, 4.947002e-01f, - 4.945883e-01f, 4.944751e-01f, 4.943608e-01f, 4.942454e-01f, - 4.941288e-01f, 4.940110e-01f, 4.938921e-01f, 4.937720e-01f, - 4.936507e-01f, 4.935283e-01f, 4.934047e-01f, 4.932800e-01f, - 4.931540e-01f, 4.930270e-01f, 4.928988e-01f, 4.927694e-01f, - 4.926388e-01f, 4.925071e-01f, 4.923743e-01f, 4.922402e-01f, - 4.921050e-01f, 4.919687e-01f, 4.918312e-01f, 4.916926e-01f, - 4.915527e-01f, 4.914118e-01f, 4.912697e-01f, 4.911264e-01f, - 4.909819e-01f, 4.908363e-01f, 4.906896e-01f, 4.905417e-01f, - 4.903926e-01f, 4.902424e-01f, 4.900911e-01f, 4.899386e-01f, - 4.897849e-01f, 4.896301e-01f, 4.894741e-01f, 4.893170e-01f, - 4.891587e-01f, 4.889993e-01f, 4.888387e-01f, 4.886770e-01f, - 4.885141e-01f, 4.883500e-01f, 4.881849e-01f, 4.880185e-01f, - 4.878511e-01f, 4.876824e-01f, 4.875127e-01f, 4.873418e-01f, - 4.871697e-01f, 4.869965e-01f, 4.868221e-01f, 4.866466e-01f, - 4.864700e-01f, 4.862922e-01f, 4.861132e-01f, 4.859332e-01f, - 4.857519e-01f, 4.855696e-01f, 4.853861e-01f, 4.852014e-01f, - 4.850156e-01f, 4.848287e-01f, 4.846406e-01f, 4.844514e-01f, - 4.842610e-01f, 4.840696e-01f, 4.838769e-01f, 4.836831e-01f, - 4.834882e-01f, 4.832922e-01f, 4.830950e-01f, 4.828967e-01f, - 4.826972e-01f, 4.824966e-01f, 4.822949e-01f, 4.820920e-01f, - 4.818880e-01f, 4.816829e-01f, 4.814766e-01f, 4.812692e-01f, - 4.810607e-01f, 4.808510e-01f, 4.806402e-01f, 4.804283e-01f, - 4.802153e-01f, 4.800011e-01f, 4.797858e-01f, 4.795693e-01f, - 4.793517e-01f, 4.791330e-01f, 4.789132e-01f, 4.786923e-01f, - 4.784702e-01f, 4.782470e-01f, 4.780226e-01f, 4.777972e-01f, - 4.775706e-01f, 4.773429e-01f, 4.771140e-01f, 4.768841e-01f, - 4.766530e-01f, 4.764208e-01f, 4.761875e-01f, 4.759531e-01f, - 4.757175e-01f, 4.754808e-01f, 4.752430e-01f, 4.750041e-01f, - 4.747641e-01f, 4.745229e-01f, 4.742807e-01f, 4.740373e-01f, - 4.737928e-01f, 4.735472e-01f, 4.733005e-01f, 4.730526e-01f, - 4.728037e-01f, 4.725536e-01f, 4.723024e-01f, 4.720501e-01f, - 4.717967e-01f, 4.715422e-01f, 4.712866e-01f, 4.710299e-01f, - 4.707720e-01f, 4.705131e-01f, 4.702530e-01f, 4.699919e-01f, - 4.697296e-01f, 4.694662e-01f, 4.692018e-01f, 4.689362e-01f, - 4.686695e-01f, 4.684017e-01f, 4.681328e-01f, 4.678628e-01f, - 4.675918e-01f, 4.673196e-01f, 4.670463e-01f, 4.667719e-01f, - 4.664964e-01f, 4.662198e-01f, 4.659421e-01f, 4.656634e-01f, - 4.653835e-01f, 4.651025e-01f, 4.648204e-01f, 4.645373e-01f, - 4.642530e-01f, 4.639677e-01f, 4.636813e-01f, 4.633937e-01f, - 4.631051e-01f, 4.628154e-01f, 4.625246e-01f, 4.622327e-01f, - 4.619398e-01f, 4.616457e-01f, 4.613506e-01f, 4.610543e-01f, - 4.607570e-01f, 4.604586e-01f, 4.601591e-01f, 4.598586e-01f, - 4.595569e-01f, 4.592542e-01f, 4.589504e-01f, 4.586455e-01f, - 4.583395e-01f, 4.580325e-01f, 4.577244e-01f, 4.574152e-01f, - 4.571049e-01f, 4.567935e-01f, 4.564811e-01f, 4.561676e-01f, - 4.558530e-01f, 4.555374e-01f, 4.552206e-01f, 4.549029e-01f, - 4.545840e-01f, 4.542641e-01f, 4.539431e-01f, 4.536210e-01f, - 4.532979e-01f, 4.529736e-01f, 4.526484e-01f, 4.523220e-01f, - 4.519946e-01f, 4.516662e-01f, 4.513367e-01f, 4.510061e-01f, - 4.506744e-01f, 4.503417e-01f, 4.500079e-01f, 4.496731e-01f, - 4.493372e-01f, 4.490003e-01f, 4.486623e-01f, 4.483232e-01f, - 4.479831e-01f, 4.476420e-01f, 4.472997e-01f, 4.469565e-01f, - 4.466122e-01f, 4.462668e-01f, 4.459204e-01f, 4.455729e-01f, - 4.452244e-01f, 4.448748e-01f, 4.445242e-01f, 4.441725e-01f, - 4.438198e-01f, 4.434661e-01f, 4.431113e-01f, 4.427554e-01f, - 4.423985e-01f, 4.420406e-01f, 4.416817e-01f, 4.413217e-01f, - 4.409606e-01f, 4.405986e-01f, 4.402354e-01f, 4.398713e-01f, - 4.395061e-01f, 4.391399e-01f, 4.387726e-01f, 4.384044e-01f, - 4.380350e-01f, 4.376647e-01f, 4.372933e-01f, 4.369209e-01f, - 4.365475e-01f, 4.361730e-01f, 4.357975e-01f, 4.354210e-01f, - 4.350435e-01f, 4.346649e-01f, 4.342854e-01f, 4.339047e-01f, - 4.335231e-01f, 4.331405e-01f, 4.327568e-01f, 4.323721e-01f, - 4.319864e-01f, 4.315997e-01f, 4.312120e-01f, 4.308232e-01f, - 4.304335e-01f, 4.300427e-01f, 4.296509e-01f, 4.292581e-01f, - 4.288643e-01f, 4.284695e-01f, 4.280737e-01f, 4.276768e-01f, - 4.272790e-01f, 4.268802e-01f, 4.264803e-01f, 4.260795e-01f, - 4.256776e-01f, 4.252747e-01f, 4.248709e-01f, 4.244660e-01f, - 4.240602e-01f, 4.236533e-01f, 4.232455e-01f, 4.228366e-01f, - 4.224268e-01f, 4.220159e-01f, 4.216041e-01f, 4.211913e-01f, - 4.207775e-01f, 4.203627e-01f, 4.199469e-01f, 4.195301e-01f, - 4.191124e-01f, 4.186936e-01f, 4.182739e-01f, 4.178531e-01f, - 4.174314e-01f, 4.170088e-01f, 4.165851e-01f, 4.161604e-01f, - 4.157348e-01f, 4.153082e-01f, 4.148806e-01f, 4.144521e-01f, - 4.140225e-01f, 4.135920e-01f, 4.131605e-01f, 4.127281e-01f, - 4.122947e-01f, 4.118603e-01f, 4.114249e-01f, 4.109886e-01f, - 4.105513e-01f, 4.101130e-01f, 4.096738e-01f, 4.092336e-01f, - 4.087924e-01f, 4.083503e-01f, 4.079072e-01f, 4.074632e-01f, - 4.070182e-01f, 4.065722e-01f, 4.061253e-01f, 4.056774e-01f, - 4.052286e-01f, 4.047788e-01f, 4.043281e-01f, 4.038764e-01f, - 4.034238e-01f, 4.029702e-01f, 4.025157e-01f, 4.020602e-01f, - 4.016038e-01f, 4.011464e-01f, 4.006881e-01f, 4.002288e-01f, - 3.997686e-01f, 3.993075e-01f, 3.988454e-01f, 3.983824e-01f, - 3.979185e-01f, 3.974536e-01f, 3.969877e-01f, 3.965210e-01f, - 3.960533e-01f, 3.955847e-01f, 3.951151e-01f, 3.946446e-01f, - 3.941732e-01f, 3.937009e-01f, 3.932276e-01f, 3.927534e-01f, - 3.922783e-01f, 3.918023e-01f, 3.913253e-01f, 3.908474e-01f, - 3.903686e-01f, 3.898889e-01f, 3.894083e-01f, 3.889267e-01f, - 3.884442e-01f, 3.879608e-01f, 3.874766e-01f, 3.869913e-01f, - 3.865052e-01f, 3.860182e-01f, 3.855303e-01f, 3.850414e-01f, - 3.845517e-01f, 3.840610e-01f, 3.835695e-01f, 3.830770e-01f, - 3.825836e-01f, 3.820894e-01f, 3.815942e-01f, 3.810981e-01f, - 3.806012e-01f, 3.801033e-01f, 3.796046e-01f, 3.791050e-01f, - 3.786044e-01f, 3.781030e-01f, 3.776007e-01f, 3.770975e-01f, - 3.765934e-01f, 3.760884e-01f, 3.755826e-01f, 3.750758e-01f, - 3.745682e-01f, 3.740597e-01f, 3.735503e-01f, 3.730400e-01f, - 3.725289e-01f, 3.720169e-01f, 3.715040e-01f, 3.709902e-01f, - 3.704756e-01f, 3.699600e-01f, 3.694437e-01f, 3.689264e-01f, - 3.684083e-01f, 3.678893e-01f, 3.673694e-01f, 3.668487e-01f, - 3.663271e-01f, 3.658047e-01f, 3.652814e-01f, 3.647572e-01f, - 3.642322e-01f, 3.637063e-01f, 3.631796e-01f, 3.626520e-01f, - 3.621235e-01f, 3.615942e-01f, 3.610641e-01f, 3.605331e-01f, - 3.600013e-01f, 3.594686e-01f, 3.589350e-01f, 3.584006e-01f, - 3.578654e-01f, 3.573293e-01f, 3.567924e-01f, 3.562547e-01f, - 3.557161e-01f, 3.551767e-01f, 3.546364e-01f, 3.540953e-01f, - 3.535534e-01f, 3.530106e-01f, 3.524670e-01f, 3.519226e-01f, - 3.513774e-01f, 3.508313e-01f, 3.502844e-01f, 3.497367e-01f, - 3.491881e-01f, 3.486388e-01f, 3.480886e-01f, 3.475376e-01f, - 3.469857e-01f, 3.464331e-01f, 3.458796e-01f, 3.453254e-01f, - 3.447703e-01f, 3.442144e-01f, 3.436577e-01f, 3.431002e-01f, - 3.425418e-01f, 3.419827e-01f, 3.414228e-01f, 3.408620e-01f, - 3.403005e-01f, 3.397382e-01f, 3.391750e-01f, 3.386111e-01f, - 3.380464e-01f, 3.374808e-01f, 3.369145e-01f, 3.363474e-01f, - 3.357795e-01f, 3.352108e-01f, 3.346413e-01f, 3.340710e-01f, - 3.335000e-01f, 3.329281e-01f, 3.323555e-01f, 3.317821e-01f, - 3.312079e-01f, 3.306329e-01f, 3.300572e-01f, 3.294806e-01f, - 3.289033e-01f, 3.283253e-01f, 3.277464e-01f, 3.271668e-01f, - 3.265864e-01f, 3.260053e-01f, 3.254233e-01f, 3.248407e-01f, - 3.242572e-01f, 3.236730e-01f, 3.230880e-01f, 3.225023e-01f, - 3.219158e-01f, 3.213285e-01f, 3.207405e-01f, 3.201517e-01f, - 3.195622e-01f, 3.189720e-01f, 3.183809e-01f, 3.177892e-01f, - 3.171966e-01f, 3.166034e-01f, 3.160094e-01f, 3.154146e-01f, - 3.148191e-01f, 3.142229e-01f, 3.136259e-01f, 3.130282e-01f, - 3.124297e-01f, 3.118306e-01f, 3.112306e-01f, 3.106300e-01f, - 3.100286e-01f, 3.094265e-01f, 3.088237e-01f, 3.082201e-01f, - 3.076158e-01f, 3.070108e-01f, 3.064050e-01f, 3.057986e-01f, - 3.051914e-01f, 3.045835e-01f, 3.039749e-01f, 3.033656e-01f, - 3.027555e-01f, 3.021448e-01f, 3.015333e-01f, 3.009211e-01f, - 3.003082e-01f, 2.996946e-01f, 2.990804e-01f, 2.984654e-01f, - 2.978497e-01f, 2.972332e-01f, 2.966161e-01f, 2.959983e-01f, - 2.953799e-01f, 2.947607e-01f, 2.941408e-01f, 2.935202e-01f, - 2.928989e-01f, 2.922770e-01f, 2.916543e-01f, 2.910310e-01f, - 2.904070e-01f, 2.897823e-01f, 2.891569e-01f, 2.885308e-01f, - 2.879041e-01f, 2.872767e-01f, 2.866486e-01f, 2.860198e-01f, - 2.853904e-01f, 2.847603e-01f, 2.841295e-01f, 2.834980e-01f, - 2.828659e-01f, 2.822331e-01f, 2.815997e-01f, 2.809656e-01f, - 2.803308e-01f, 2.796954e-01f, 2.790593e-01f, 2.784225e-01f, - 2.777851e-01f, 2.771471e-01f, 2.765084e-01f, 2.758690e-01f, - 2.752290e-01f, 2.745883e-01f, 2.739470e-01f, 2.733051e-01f, - 2.726625e-01f, 2.720193e-01f, 2.713754e-01f, 2.707309e-01f, - 2.700857e-01f, 2.694400e-01f, 2.687935e-01f, 2.681465e-01f, - 2.674988e-01f, 2.668505e-01f, 2.662016e-01f, 2.655520e-01f, - 2.649018e-01f, 2.642510e-01f, 2.635996e-01f, 2.629475e-01f, - 2.622948e-01f, 2.616416e-01f, 2.609876e-01f, 2.603331e-01f, - 2.596780e-01f, 2.590223e-01f, 2.583659e-01f, 2.577089e-01f, - 2.570514e-01f, 2.563932e-01f, 2.557344e-01f, 2.550750e-01f, - 2.544151e-01f, 2.537545e-01f, 2.530933e-01f, 2.524316e-01f, - 2.517692e-01f, 2.511062e-01f, 2.504427e-01f, 2.497786e-01f, - 2.491138e-01f, 2.484485e-01f, 2.477826e-01f, 2.471162e-01f, - 2.464491e-01f, 2.457815e-01f, 2.451132e-01f, 2.444444e-01f, - 2.437751e-01f, 2.431051e-01f, 2.424346e-01f, 2.417635e-01f, - 2.410919e-01f, 2.404197e-01f, 2.397469e-01f, 2.390735e-01f, - 2.383996e-01f, 2.377251e-01f, 2.370501e-01f, 2.363745e-01f, - 2.356984e-01f, 2.350217e-01f, 2.343444e-01f, 2.336666e-01f, - 2.329882e-01f, 2.323093e-01f, 2.316299e-01f, 2.309499e-01f, - 2.302694e-01f, 2.295883e-01f, 2.289067e-01f, 2.282245e-01f, - 2.275418e-01f, 2.268586e-01f, 2.261748e-01f, 2.254905e-01f, - 2.248057e-01f, 2.241203e-01f, 2.234344e-01f, 2.227480e-01f, - 2.220611e-01f, 2.213736e-01f, 2.206856e-01f, 2.199971e-01f, - 2.193081e-01f, 2.186186e-01f, 2.179285e-01f, 2.172380e-01f, - 2.165469e-01f, 2.158553e-01f, 2.151632e-01f, 2.144706e-01f, - 2.137775e-01f, 2.130839e-01f, 2.123898e-01f, 2.116952e-01f, - 2.110001e-01f, 2.103045e-01f, 2.096084e-01f, 2.089119e-01f, - 2.082148e-01f, 2.075172e-01f, 2.068192e-01f, 2.061206e-01f, - 2.054216e-01f, 2.047221e-01f, 2.040221e-01f, 2.033216e-01f, - 2.026207e-01f, 2.019192e-01f, 2.012173e-01f, 2.005149e-01f, - 1.998121e-01f, 1.991088e-01f, 1.984050e-01f, 1.977007e-01f, - 1.969960e-01f, 1.962908e-01f, 1.955852e-01f, 1.948791e-01f, - 1.941725e-01f, 1.934655e-01f, 1.927580e-01f, 1.920501e-01f, - 1.913417e-01f, 1.906329e-01f, 1.899236e-01f, 1.892139e-01f, - 1.885037e-01f, 1.877931e-01f, 1.870820e-01f, 1.863705e-01f, - 1.856586e-01f, 1.849462e-01f, 1.842334e-01f, 1.835202e-01f, - 1.828065e-01f, 1.820924e-01f, 1.813779e-01f, 1.806629e-01f, - 1.799475e-01f, 1.792317e-01f, 1.785155e-01f, 1.777988e-01f, - 1.770818e-01f, 1.763643e-01f, 1.756464e-01f, 1.749281e-01f, - 1.742093e-01f, 1.734902e-01f, 1.727707e-01f, 1.720507e-01f, - 1.713304e-01f, 1.706096e-01f, 1.698884e-01f, 1.691669e-01f, - 1.684449e-01f, 1.677226e-01f, 1.669998e-01f, 1.662767e-01f, - 1.655532e-01f, 1.648292e-01f, 1.641049e-01f, 1.633802e-01f, - 1.626551e-01f, 1.619297e-01f, 1.612038e-01f, 1.604776e-01f, - 1.597510e-01f, 1.590240e-01f, 1.582967e-01f, 1.575690e-01f, - 1.568409e-01f, 1.561124e-01f, 1.553836e-01f, 1.546544e-01f, - 1.539248e-01f, 1.531949e-01f, 1.524646e-01f, 1.517340e-01f, - 1.510030e-01f, 1.502716e-01f, 1.495399e-01f, 1.488079e-01f, - 1.480754e-01f, 1.473427e-01f, 1.466096e-01f, 1.458761e-01f, - 1.451423e-01f, 1.444082e-01f, 1.436737e-01f, 1.429389e-01f, - 1.422038e-01f, 1.414683e-01f, 1.407325e-01f, 1.399963e-01f, - 1.392598e-01f, 1.385230e-01f, 1.377859e-01f, 1.370485e-01f, - 1.363107e-01f, 1.355726e-01f, 1.348342e-01f, 1.340954e-01f, - 1.333564e-01f, 1.326170e-01f, 1.318773e-01f, 1.311374e-01f, - 1.303971e-01f, 1.296565e-01f, 1.289156e-01f, 1.281743e-01f, - 1.274328e-01f, 1.266910e-01f, 1.259489e-01f, 1.252065e-01f, - 1.244638e-01f, 1.237208e-01f, 1.229775e-01f, 1.222340e-01f, - 1.214901e-01f, 1.207459e-01f, 1.200015e-01f, 1.192568e-01f, - 1.185118e-01f, 1.177665e-01f, 1.170210e-01f, 1.162752e-01f, - 1.155291e-01f, 1.147827e-01f, 1.140360e-01f, 1.132891e-01f, - 1.125420e-01f, 1.117945e-01f, 1.110468e-01f, 1.102988e-01f, - 1.095506e-01f, 1.088021e-01f, 1.080534e-01f, 1.073044e-01f, - 1.065552e-01f, 1.058057e-01f, 1.050559e-01f, 1.043059e-01f, - 1.035557e-01f, 1.028052e-01f, 1.020545e-01f, 1.013035e-01f, - 1.005523e-01f, 9.980088e-02f, 9.904921e-02f, 9.829730e-02f, - 9.754516e-02f, 9.679279e-02f, 9.604020e-02f, 9.528738e-02f, - 9.453433e-02f, 9.378106e-02f, 9.302758e-02f, 9.227387e-02f, - 9.151994e-02f, 9.076580e-02f, 9.001145e-02f, 8.925689e-02f, - 8.850211e-02f, 8.774713e-02f, 8.699194e-02f, 8.623654e-02f, - 8.548094e-02f, 8.472515e-02f, 8.396915e-02f, 8.321295e-02f, - 8.245656e-02f, 8.169997e-02f, 8.094320e-02f, 8.018623e-02f, - 7.942907e-02f, 7.867173e-02f, 7.791420e-02f, 7.715649e-02f, - 7.639859e-02f, 7.564052e-02f, 7.488227e-02f, 7.412384e-02f, - 7.336524e-02f, 7.260646e-02f, 7.184752e-02f, 7.108840e-02f, - 7.032912e-02f, 6.956967e-02f, 6.881006e-02f, 6.805029e-02f, - 6.729035e-02f, 6.653026e-02f, 6.577001e-02f, 6.500961e-02f, - 6.424906e-02f, 6.348835e-02f, 6.272749e-02f, 6.196649e-02f, - 6.120534e-02f, 6.044404e-02f, 5.968261e-02f, 5.892103e-02f, - 5.815932e-02f, 5.739746e-02f, 5.663548e-02f, 5.587336e-02f, - 5.511110e-02f, 5.434872e-02f, 5.358621e-02f, 5.282358e-02f, - 5.206082e-02f, 5.129793e-02f, 5.053493e-02f, 4.977181e-02f, - 4.900857e-02f, 4.824522e-02f, 4.748175e-02f, 4.671817e-02f, - 4.595448e-02f, 4.519068e-02f, 4.442678e-02f, 4.366277e-02f, - 4.289866e-02f, 4.213444e-02f, 4.137013e-02f, 4.060572e-02f, - 3.984122e-02f, 3.907662e-02f, 3.831193e-02f, 3.754715e-02f, - 3.678228e-02f, 3.601733e-02f, 3.525229e-02f, 3.448716e-02f, - 3.372196e-02f, 3.295668e-02f, 3.219132e-02f, 3.142588e-02f, - 3.066037e-02f, 2.989479e-02f, 2.912913e-02f, 2.836341e-02f, - 2.759762e-02f, 2.683177e-02f, 2.606585e-02f, 2.529987e-02f, - 2.453384e-02f, 2.376774e-02f, 2.300159e-02f, 2.223539e-02f, - 2.146913e-02f, 2.070282e-02f, 1.993646e-02f, 1.917006e-02f, - 1.840361e-02f, 1.763712e-02f, 1.687059e-02f, 1.610401e-02f, - 1.533740e-02f, 1.457075e-02f, 1.380407e-02f, 1.303736e-02f, - 1.227061e-02f, 1.150384e-02f, 1.073704e-02f, 9.970214e-03f, - 9.203365e-03f, 8.436494e-03f, 7.669603e-03f, 6.902694e-03f, - 6.135769e-03f, 5.368830e-03f, 4.601877e-03f, 3.834914e-03f, - 3.067942e-03f, 2.300963e-03f, 1.533978e-03f, 7.669901e-04f}; - -// ========================================================================================== -// internal tools -// ========================================================================================== -static void AUP_FFTW_cftleaf(int n, int isplt, float* a, int nw, float* w); -static void AUP_FFTW_cftf1st(int n, float* a, float* w); -static void AUP_FFTW_cftrec4(int n, float* a, int nw, float* w); -static void AUP_FFTW_cftfsub(int n, float* a, int* ip, int nw, float* w); -static void AUP_FFTW_cftbsub(int n, float* a, int* ip, int nw, float* w); -static void AUP_FFTW_bitrv2(int n, int* ip, float* a); -static void AUP_FFTW_bitrv2conj(int n, int* ip, float* a); -static void AUP_FFTW_bitrv216(float* a); -static void AUP_FFTW_bitrv216neg(float* a); -static void AUP_FFTW_bitrv208(float* a); -static void AUP_FFTW_bitrv208neg(float* a); -static void AUP_FFTW_cftb1st(int n, float* a, float* w); -static int AUP_FFTW_cfttree(int n, int j, int k, float* a, int nw, float* w); -static void AUP_FFTW_cftmdl1(int n, float* a, float* w); -static void AUP_FFTW_cftmdl2(int n, float* a, float* w); -static void AUP_FFTW_cftfx41(int n, float* a, int nw, float* w); -static void AUP_FFTW_cftf161(float* a, float* w); -static void AUP_FFTW_cftf162(float* a, float* w); -static void AUP_FFTW_cftf081(float* a, float* w); -static void AUP_FFTW_cftf082(float* a, float* w); -static void AUP_FFTW_cftf040(float* a); -static void AUP_FFTW_cftb040(float* a); -static void AUP_FFTW_cftx020(float* a); -static void AUP_FFTW_rftfsub(int n, float* a, int nc, float* c); -static void AUP_FFTW_rftbsub(int n, float* a, int nc, float* c); -static void AUP_FFTW_dctsub(int n, float* a, int nc, float* c); -static void AUP_FFTW_dstsub(int n, float* a, int nc, float* c); -static void AUP_FFTW_rdft(int n, int isgn, float* a, int* ip, float* w); - -static void AUP_FFTW_cftleaf(int n, int isplt, float* a, int nw, float* w) { - if (n == 512) { - AUP_FFTW_cftmdl1(128, a, &w[nw - 64]); - AUP_FFTW_cftf161(a, &w[nw - 8]); - AUP_FFTW_cftf162(&a[32], &w[nw - 32]); - AUP_FFTW_cftf161(&a[64], &w[nw - 8]); - AUP_FFTW_cftf161(&a[96], &w[nw - 8]); - AUP_FFTW_cftmdl2(128, &a[128], &w[nw - 128]); - AUP_FFTW_cftf161(&a[128], &w[nw - 8]); - AUP_FFTW_cftf162(&a[160], &w[nw - 32]); - AUP_FFTW_cftf161(&a[192], &w[nw - 8]); - AUP_FFTW_cftf162(&a[224], &w[nw - 32]); - AUP_FFTW_cftmdl1(128, &a[256], &w[nw - 64]); - AUP_FFTW_cftf161(&a[256], &w[nw - 8]); - AUP_FFTW_cftf162(&a[288], &w[nw - 32]); - AUP_FFTW_cftf161(&a[320], &w[nw - 8]); - AUP_FFTW_cftf161(&a[352], &w[nw - 8]); - if (isplt != 0) { - AUP_FFTW_cftmdl1(128, &a[384], &w[nw - 64]); - AUP_FFTW_cftf161(&a[480], &w[nw - 8]); - } else { - AUP_FFTW_cftmdl2(128, &a[384], &w[nw - 128]); - AUP_FFTW_cftf162(&a[480], &w[nw - 32]); - } - AUP_FFTW_cftf161(&a[384], &w[nw - 8]); - AUP_FFTW_cftf162(&a[416], &w[nw - 32]); - AUP_FFTW_cftf161(&a[448], &w[nw - 8]); - } else { - AUP_FFTW_cftmdl1(64, a, &w[nw - 32]); - AUP_FFTW_cftf081(a, &w[nw - 8]); - AUP_FFTW_cftf082(&a[16], &w[nw - 8]); - AUP_FFTW_cftf081(&a[32], &w[nw - 8]); - AUP_FFTW_cftf081(&a[48], &w[nw - 8]); - AUP_FFTW_cftmdl2(64, &a[64], &w[nw - 64]); - AUP_FFTW_cftf081(&a[64], &w[nw - 8]); - AUP_FFTW_cftf082(&a[80], &w[nw - 8]); - AUP_FFTW_cftf081(&a[96], &w[nw - 8]); - AUP_FFTW_cftf082(&a[112], &w[nw - 8]); - AUP_FFTW_cftmdl1(64, &a[128], &w[nw - 32]); - AUP_FFTW_cftf081(&a[128], &w[nw - 8]); - AUP_FFTW_cftf082(&a[144], &w[nw - 8]); - AUP_FFTW_cftf081(&a[160], &w[nw - 8]); - AUP_FFTW_cftf081(&a[176], &w[nw - 8]); - if (isplt != 0) { - AUP_FFTW_cftmdl1(64, &a[192], &w[nw - 32]); - AUP_FFTW_cftf081(&a[240], &w[nw - 8]); - } else { - AUP_FFTW_cftmdl2(64, &a[192], &w[nw - 64]); - AUP_FFTW_cftf082(&a[240], &w[nw - 8]); - } - AUP_FFTW_cftf081(&a[192], &w[nw - 8]); - AUP_FFTW_cftf082(&a[208], &w[nw - 8]); - AUP_FFTW_cftf081(&a[224], &w[nw - 8]); - } -} - -static void AUP_FFTW_cftf1st(int n, float* a, float* w) { - int j, j0, j1, j2, j3, k, m, mh; - float wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i; - float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, y1i, y2r, y2i, - y3r, y3i; - - mh = n >> 3; - m = 2 * mh; - j1 = m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[0] + a[j2]; - x0i = a[1] + a[j2 + 1]; - x1r = a[0] - a[j2]; - x1i = a[1] - a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[0] = x0r + x2r; - a[1] = x0i + x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - a[j2] = x1r - x3i; - a[j2 + 1] = x1i + x3r; - a[j3] = x1r + x3i; - a[j3 + 1] = x1i - x3r; - wn4r = w[1]; - csc1 = w[2]; - csc3 = w[3]; - wd1r = 1; - wd1i = 0; - wd3r = 1; - wd3i = 0; - k = 0; - for (j = 2; j < mh - 2; j += 4) { - k += 4; - wk1r = csc1 * (wd1r + w[k]); - wk1i = csc1 * (wd1i + w[k + 1]); - wk3r = csc3 * (wd3r + w[k + 2]); - wk3i = csc3 * (wd3i + w[k + 3]); - wd1r = w[k]; - wd1i = w[k + 1]; - wd3r = w[k + 2]; - wd3i = w[k + 3]; - j1 = j + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j] + a[j2]; - x0i = a[j + 1] + a[j2 + 1]; - x1r = a[j] - a[j2]; - x1i = a[j + 1] - a[j2 + 1]; - y0r = a[j + 2] + a[j2 + 2]; - y0i = a[j + 3] + a[j2 + 3]; - y1r = a[j + 2] - a[j2 + 2]; - y1i = a[j + 3] - a[j2 + 3]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - y2r = a[j1 + 2] + a[j3 + 2]; - y2i = a[j1 + 3] + a[j3 + 3]; - y3r = a[j1 + 2] - a[j3 + 2]; - y3i = a[j1 + 3] - a[j3 + 3]; - a[j] = x0r + x2r; - a[j + 1] = x0i + x2i; - a[j + 2] = y0r + y2r; - a[j + 3] = y0i + y2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - a[j1 + 2] = y0r - y2r; - a[j1 + 3] = y0i - y2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2] = wk1r * x0r - wk1i * x0i; - a[j2 + 1] = wk1r * x0i + wk1i * x0r; - x0r = y1r - y3i; - x0i = y1i + y3r; - a[j2 + 2] = wd1r * x0r - wd1i * x0i; - a[j2 + 3] = wd1r * x0i + wd1i * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3] = wk3r * x0r + wk3i * x0i; - a[j3 + 1] = wk3r * x0i - wk3i * x0r; - x0r = y1r + y3i; - x0i = y1i - y3r; - a[j3 + 2] = wd3r * x0r + wd3i * x0i; - a[j3 + 3] = wd3r * x0i - wd3i * x0r; - j0 = m - j; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0] + a[j2]; - x0i = a[j0 + 1] + a[j2 + 1]; - x1r = a[j0] - a[j2]; - x1i = a[j0 + 1] - a[j2 + 1]; - y0r = a[j0 - 2] + a[j2 - 2]; - y0i = a[j0 - 1] + a[j2 - 1]; - y1r = a[j0 - 2] - a[j2 - 2]; - y1i = a[j0 - 1] - a[j2 - 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - y2r = a[j1 - 2] + a[j3 - 2]; - y2i = a[j1 - 1] + a[j3 - 1]; - y3r = a[j1 - 2] - a[j3 - 2]; - y3i = a[j1 - 1] - a[j3 - 1]; - a[j0] = x0r + x2r; - a[j0 + 1] = x0i + x2i; - a[j0 - 2] = y0r + y2r; - a[j0 - 1] = y0i + y2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - a[j1 - 2] = y0r - y2r; - a[j1 - 1] = y0i - y2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2] = wk1i * x0r - wk1r * x0i; - a[j2 + 1] = wk1i * x0i + wk1r * x0r; - x0r = y1r - y3i; - x0i = y1i + y3r; - a[j2 - 2] = wd1i * x0r - wd1r * x0i; - a[j2 - 1] = wd1i * x0i + wd1r * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3] = wk3i * x0r + wk3r * x0i; - a[j3 + 1] = wk3i * x0i - wk3r * x0r; - x0r = y1r + y3i; - x0i = y1i - y3r; - a[j3 - 2] = wd3i * x0r + wd3r * x0i; - a[j3 - 1] = wd3i * x0i - wd3r * x0r; - } - wk1r = csc1 * (wd1r + wn4r); - wk1i = csc1 * (wd1i + wn4r); - wk3r = csc3 * (wd3r - wn4r); - wk3i = csc3 * (wd3i - wn4r); - j0 = mh; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0 - 2] + a[j2 - 2]; - x0i = a[j0 - 1] + a[j2 - 1]; - x1r = a[j0 - 2] - a[j2 - 2]; - x1i = a[j0 - 1] - a[j2 - 1]; - x2r = a[j1 - 2] + a[j3 - 2]; - x2i = a[j1 - 1] + a[j3 - 1]; - x3r = a[j1 - 2] - a[j3 - 2]; - x3i = a[j1 - 1] - a[j3 - 1]; - a[j0 - 2] = x0r + x2r; - a[j0 - 1] = x0i + x2i; - a[j1 - 2] = x0r - x2r; - a[j1 - 1] = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2 - 2] = wk1r * x0r - wk1i * x0i; - a[j2 - 1] = wk1r * x0i + wk1i * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3 - 2] = wk3r * x0r + wk3i * x0i; - a[j3 - 1] = wk3r * x0i - wk3i * x0r; - x0r = a[j0] + a[j2]; - x0i = a[j0 + 1] + a[j2 + 1]; - x1r = a[j0] - a[j2]; - x1i = a[j0 + 1] - a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[j0] = x0r + x2r; - a[j0 + 1] = x0i + x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2] = wn4r * (x0r - x0i); - a[j2 + 1] = wn4r * (x0i + x0r); - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3] = -wn4r * (x0r + x0i); - a[j3 + 1] = -wn4r * (x0i - x0r); - x0r = a[j0 + 2] + a[j2 + 2]; - x0i = a[j0 + 3] + a[j2 + 3]; - x1r = a[j0 + 2] - a[j2 + 2]; - x1i = a[j0 + 3] - a[j2 + 3]; - x2r = a[j1 + 2] + a[j3 + 2]; - x2i = a[j1 + 3] + a[j3 + 3]; - x3r = a[j1 + 2] - a[j3 + 2]; - x3i = a[j1 + 3] - a[j3 + 3]; - a[j0 + 2] = x0r + x2r; - a[j0 + 3] = x0i + x2i; - a[j1 + 2] = x0r - x2r; - a[j1 + 3] = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2 + 2] = wk1i * x0r - wk1r * x0i; - a[j2 + 3] = wk1i * x0i + wk1r * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3 + 2] = wk3i * x0r + wk3r * x0i; - a[j3 + 3] = wk3i * x0i - wk3r * x0r; -} - -static void AUP_FFTW_cftrec4(int n, float* a, int nw, float* w) { - int isplt, j, k, m; - - m = n; - while (m > 512) { - m >>= 2; - AUP_FFTW_cftmdl1(m, &a[n - m], &w[nw - (m >> 1)]); - } - AUP_FFTW_cftleaf(m, 1, &a[n - m], nw, w); - k = 0; - for (j = n - m; j > 0; j -= m) { - k++; - isplt = AUP_FFTW_cfttree(m, j, k, a, nw, w); - AUP_FFTW_cftleaf(m, isplt, &a[j - m], nw, w); - } -} - -static void AUP_FFTW_cftfsub(int n, float* a, int* ip, int nw, float* w) { - if (n > 8) { - if (n > 32) { - AUP_FFTW_cftf1st(n, a, &w[nw - (n >> 2)]); - if (n > 512) { - AUP_FFTW_cftrec4(n, a, nw, w); - } else if (n > 128) { - AUP_FFTW_cftleaf(n, 1, a, nw, w); - } else { - AUP_FFTW_cftfx41(n, a, nw, w); - } - AUP_FFTW_bitrv2(n, ip, a); - } else if (n == 32) { - AUP_FFTW_cftf161(a, &w[nw - 8]); - AUP_FFTW_bitrv216(a); - } else { - AUP_FFTW_cftf081(a, w); - AUP_FFTW_bitrv208(a); - } - } else if (n == 8) { - AUP_FFTW_cftf040(a); - } else if (n == 4) { - AUP_FFTW_cftx020(a); - } -} - -static void AUP_FFTW_cftbsub(int n, float* a, int* ip, int nw, float* w) { - if (n > 8) { - if (n > 32) { - AUP_FFTW_cftb1st(n, a, &w[nw - (n >> 2)]); - if (n > 512) { - AUP_FFTW_cftrec4(n, a, nw, w); - } else if (n > 128) { - AUP_FFTW_cftleaf(n, 1, a, nw, w); - } else { - AUP_FFTW_cftfx41(n, a, nw, w); - } - AUP_FFTW_bitrv2conj(n, ip, a); - } else if (n == 32) { - AUP_FFTW_cftf161(a, &w[nw - 8]); - AUP_FFTW_bitrv216neg(a); - } else { - AUP_FFTW_cftf081(a, w); - AUP_FFTW_bitrv208neg(a); - } - } else if (n == 8) { - AUP_FFTW_cftb040(a); - } else if (n == 4) { - AUP_FFTW_cftx020(a); - } -} - -static void AUP_FFTW_bitrv2(int n, int* ip, float* a) { - int j, j1, k, k1, l, m, nh, nm; - float xr, xi, yr, yi; - - m = 1; - for (l = n >> 2; l > 8; l >>= 2) { - m <<= 1; - } - nh = n >> 1; - nm = 4 * m; - if (l == 8) { - for (k = 0; k < m; k++) { - for (j = 0; j < k; j++) { - j1 = 4 * j + 2 * ip[m + k]; - k1 = 4 * k + 2 * ip[m + j]; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 -= nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nh; - k1 += 2; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 += nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += 2; - k1 += nh; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 -= nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nh; - k1 -= 2; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 += nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - } - k1 = 4 * k + 2 * ip[m + k]; - j1 = k1 + 2; - k1 += nh; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 -= nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= 2; - k1 -= nh; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nh + 2; - k1 += nh + 2; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nh - nm; - k1 += 2 * nm - 2; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - } - } else { - for (k = 0; k < m; k++) { - for (j = 0; j < k; j++) { - j1 = 4 * j + ip[m + k]; - k1 = 4 * k + ip[m + j]; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nh; - k1 += 2; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += 2; - k1 += nh; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nh; - k1 -= 2; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - } - k1 = 4 * k + ip[m + k]; - j1 = k1 + 2; - k1 += nh; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += nm; - xr = a[j1]; - xi = a[j1 + 1]; - yr = a[k1]; - yi = a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - } - } -} - -static void AUP_FFTW_bitrv2conj(int n, int* ip, float* a) { - int j, j1, k, k1, l, m, nh, nm; - float xr, xi, yr, yi; - - m = 1; - for (l = n >> 2; l > 8; l >>= 2) { - m <<= 1; - } - nh = n >> 1; - nm = 4 * m; - if (l == 8) { - for (k = 0; k < m; k++) { - for (j = 0; j < k; j++) { - j1 = 4 * j + 2 * ip[m + k]; - k1 = 4 * k + 2 * ip[m + j]; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 -= nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nh; - k1 += 2; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 += nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += 2; - k1 += nh; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 -= nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nh; - k1 -= 2; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 += nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - } - k1 = 4 * k + 2 * ip[m + k]; - j1 = k1 + 2; - k1 += nh; - a[j1 - 1] = -a[j1 - 1]; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - a[k1 + 3] = -a[k1 + 3]; - j1 += nm; - k1 += 2 * nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 -= nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= 2; - k1 -= nh; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nh + 2; - k1 += nh + 2; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nh - nm; - k1 += 2 * nm - 2; - a[j1 - 1] = -a[j1 - 1]; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - a[k1 + 3] = -a[k1 + 3]; - } - } else { - for (k = 0; k < m; k++) { - for (j = 0; j < k; j++) { - j1 = 4 * j + ip[m + k]; - k1 = 4 * k + ip[m + j]; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nh; - k1 += 2; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += 2; - k1 += nh; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 += nm; - k1 += nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nh; - k1 -= 2; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - j1 -= nm; - k1 -= nm; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - } - k1 = 4 * k + ip[m + k]; - j1 = k1 + 2; - k1 += nh; - a[j1 - 1] = -a[j1 - 1]; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - a[k1 + 3] = -a[k1 + 3]; - j1 += nm; - k1 += nm; - a[j1 - 1] = -a[j1 - 1]; - xr = a[j1]; - xi = -a[j1 + 1]; - yr = a[k1]; - yi = -a[k1 + 1]; - a[j1] = yr; - a[j1 + 1] = yi; - a[k1] = xr; - a[k1 + 1] = xi; - a[k1 + 3] = -a[k1 + 3]; - } - } -} - -static void AUP_FFTW_bitrv216(float* a) { - float x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, x5r, x5i, x7r, x7i, x8r, x8i, - x10r, x10i, x11r, x11i, x12r, x12i, x13r, x13i, x14r, x14i; - - x1r = a[2]; - x1i = a[3]; - x2r = a[4]; - x2i = a[5]; - x3r = a[6]; - x3i = a[7]; - x4r = a[8]; - x4i = a[9]; - x5r = a[10]; - x5i = a[11]; - x7r = a[14]; - x7i = a[15]; - x8r = a[16]; - x8i = a[17]; - x10r = a[20]; - x10i = a[21]; - x11r = a[22]; - x11i = a[23]; - x12r = a[24]; - x12i = a[25]; - x13r = a[26]; - x13i = a[27]; - x14r = a[28]; - x14i = a[29]; - a[2] = x8r; - a[3] = x8i; - a[4] = x4r; - a[5] = x4i; - a[6] = x12r; - a[7] = x12i; - a[8] = x2r; - a[9] = x2i; - a[10] = x10r; - a[11] = x10i; - a[14] = x14r; - a[15] = x14i; - a[16] = x1r; - a[17] = x1i; - a[20] = x5r; - a[21] = x5i; - a[22] = x13r; - a[23] = x13i; - a[24] = x3r; - a[25] = x3i; - a[26] = x11r; - a[27] = x11i; - a[28] = x7r; - a[29] = x7i; -} - -static void AUP_FFTW_bitrv216neg(float* a) { - float x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, x5r, x5i, x6r, x6i, x7r, x7i, - x8r, x8i, x9r, x9i, x10r, x10i, x11r, x11i, x12r, x12i, x13r, x13i, x14r, - x14i, x15r, x15i; - - x1r = a[2]; - x1i = a[3]; - x2r = a[4]; - x2i = a[5]; - x3r = a[6]; - x3i = a[7]; - x4r = a[8]; - x4i = a[9]; - x5r = a[10]; - x5i = a[11]; - x6r = a[12]; - x6i = a[13]; - x7r = a[14]; - x7i = a[15]; - x8r = a[16]; - x8i = a[17]; - x9r = a[18]; - x9i = a[19]; - x10r = a[20]; - x10i = a[21]; - x11r = a[22]; - x11i = a[23]; - x12r = a[24]; - x12i = a[25]; - x13r = a[26]; - x13i = a[27]; - x14r = a[28]; - x14i = a[29]; - x15r = a[30]; - x15i = a[31]; - a[2] = x15r; - a[3] = x15i; - a[4] = x7r; - a[5] = x7i; - a[6] = x11r; - a[7] = x11i; - a[8] = x3r; - a[9] = x3i; - a[10] = x13r; - a[11] = x13i; - a[12] = x5r; - a[13] = x5i; - a[14] = x9r; - a[15] = x9i; - a[16] = x1r; - a[17] = x1i; - a[18] = x14r; - a[19] = x14i; - a[20] = x6r; - a[21] = x6i; - a[22] = x10r; - a[23] = x10i; - a[24] = x2r; - a[25] = x2i; - a[26] = x12r; - a[27] = x12i; - a[28] = x4r; - a[29] = x4i; - a[30] = x8r; - a[31] = x8i; -} - -static void AUP_FFTW_bitrv208(float* a) { - float x1r, x1i, x3r, x3i, x4r, x4i, x6r, x6i; - - x1r = a[2]; - x1i = a[3]; - x3r = a[6]; - x3i = a[7]; - x4r = a[8]; - x4i = a[9]; - x6r = a[12]; - x6i = a[13]; - a[2] = x4r; - a[3] = x4i; - a[6] = x6r; - a[7] = x6i; - a[8] = x1r; - a[9] = x1i; - a[12] = x3r; - a[13] = x3i; -} - -static void AUP_FFTW_bitrv208neg(float* a) { - float x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, x5r, x5i, x6r, x6i, x7r, x7i; - - x1r = a[2]; - x1i = a[3]; - x2r = a[4]; - x2i = a[5]; - x3r = a[6]; - x3i = a[7]; - x4r = a[8]; - x4i = a[9]; - x5r = a[10]; - x5i = a[11]; - x6r = a[12]; - x6i = a[13]; - x7r = a[14]; - x7i = a[15]; - a[2] = x7r; - a[3] = x7i; - a[4] = x3r; - a[5] = x3i; - a[6] = x5r; - a[7] = x5i; - a[8] = x1r; - a[9] = x1i; - a[10] = x6r; - a[11] = x6i; - a[12] = x2r; - a[13] = x2i; - a[14] = x4r; - a[15] = x4i; -} - -static void AUP_FFTW_cftb1st(int n, float* a, float* w) { - int j, j0, j1, j2, j3, k, m, mh; - float wn4r, csc1, csc3, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i; - float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, y1i, y2r, y2i, - y3r, y3i; - - mh = n >> 3; - m = 2 * mh; - j1 = m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[0] + a[j2]; - x0i = -a[1] - a[j2 + 1]; - x1r = a[0] - a[j2]; - x1i = -a[1] + a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[0] = x0r + x2r; - a[1] = x0i - x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i + x2i; - a[j2] = x1r + x3i; - a[j2 + 1] = x1i + x3r; - a[j3] = x1r - x3i; - a[j3 + 1] = x1i - x3r; - wn4r = w[1]; - csc1 = w[2]; - csc3 = w[3]; - wd1r = 1; - wd1i = 0; - wd3r = 1; - wd3i = 0; - k = 0; - for (j = 2; j < mh - 2; j += 4) { - k += 4; - wk1r = csc1 * (wd1r + w[k]); - wk1i = csc1 * (wd1i + w[k + 1]); - wk3r = csc3 * (wd3r + w[k + 2]); - wk3i = csc3 * (wd3i + w[k + 3]); - wd1r = w[k]; - wd1i = w[k + 1]; - wd3r = w[k + 2]; - wd3i = w[k + 3]; - j1 = j + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j] + a[j2]; - x0i = -a[j + 1] - a[j2 + 1]; - x1r = a[j] - a[j2]; - x1i = -a[j + 1] + a[j2 + 1]; - y0r = a[j + 2] + a[j2 + 2]; - y0i = -a[j + 3] - a[j2 + 3]; - y1r = a[j + 2] - a[j2 + 2]; - y1i = -a[j + 3] + a[j2 + 3]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - y2r = a[j1 + 2] + a[j3 + 2]; - y2i = a[j1 + 3] + a[j3 + 3]; - y3r = a[j1 + 2] - a[j3 + 2]; - y3i = a[j1 + 3] - a[j3 + 3]; - a[j] = x0r + x2r; - a[j + 1] = x0i - x2i; - a[j + 2] = y0r + y2r; - a[j + 3] = y0i - y2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i + x2i; - a[j1 + 2] = y0r - y2r; - a[j1 + 3] = y0i + y2i; - x0r = x1r + x3i; - x0i = x1i + x3r; - a[j2] = wk1r * x0r - wk1i * x0i; - a[j2 + 1] = wk1r * x0i + wk1i * x0r; - x0r = y1r + y3i; - x0i = y1i + y3r; - a[j2 + 2] = wd1r * x0r - wd1i * x0i; - a[j2 + 3] = wd1r * x0i + wd1i * x0r; - x0r = x1r - x3i; - x0i = x1i - x3r; - a[j3] = wk3r * x0r + wk3i * x0i; - a[j3 + 1] = wk3r * x0i - wk3i * x0r; - x0r = y1r - y3i; - x0i = y1i - y3r; - a[j3 + 2] = wd3r * x0r + wd3i * x0i; - a[j3 + 3] = wd3r * x0i - wd3i * x0r; - j0 = m - j; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0] + a[j2]; - x0i = -a[j0 + 1] - a[j2 + 1]; - x1r = a[j0] - a[j2]; - x1i = -a[j0 + 1] + a[j2 + 1]; - y0r = a[j0 - 2] + a[j2 - 2]; - y0i = -a[j0 - 1] - a[j2 - 1]; - y1r = a[j0 - 2] - a[j2 - 2]; - y1i = -a[j0 - 1] + a[j2 - 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - y2r = a[j1 - 2] + a[j3 - 2]; - y2i = a[j1 - 1] + a[j3 - 1]; - y3r = a[j1 - 2] - a[j3 - 2]; - y3i = a[j1 - 1] - a[j3 - 1]; - a[j0] = x0r + x2r; - a[j0 + 1] = x0i - x2i; - a[j0 - 2] = y0r + y2r; - a[j0 - 1] = y0i - y2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i + x2i; - a[j1 - 2] = y0r - y2r; - a[j1 - 1] = y0i + y2i; - x0r = x1r + x3i; - x0i = x1i + x3r; - a[j2] = wk1i * x0r - wk1r * x0i; - a[j2 + 1] = wk1i * x0i + wk1r * x0r; - x0r = y1r + y3i; - x0i = y1i + y3r; - a[j2 - 2] = wd1i * x0r - wd1r * x0i; - a[j2 - 1] = wd1i * x0i + wd1r * x0r; - x0r = x1r - x3i; - x0i = x1i - x3r; - a[j3] = wk3i * x0r + wk3r * x0i; - a[j3 + 1] = wk3i * x0i - wk3r * x0r; - x0r = y1r - y3i; - x0i = y1i - y3r; - a[j3 - 2] = wd3i * x0r + wd3r * x0i; - a[j3 - 1] = wd3i * x0i - wd3r * x0r; - } - wk1r = csc1 * (wd1r + wn4r); - wk1i = csc1 * (wd1i + wn4r); - wk3r = csc3 * (wd3r - wn4r); - wk3i = csc3 * (wd3i - wn4r); - j0 = mh; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0 - 2] + a[j2 - 2]; - x0i = -a[j0 - 1] - a[j2 - 1]; - x1r = a[j0 - 2] - a[j2 - 2]; - x1i = -a[j0 - 1] + a[j2 - 1]; - x2r = a[j1 - 2] + a[j3 - 2]; - x2i = a[j1 - 1] + a[j3 - 1]; - x3r = a[j1 - 2] - a[j3 - 2]; - x3i = a[j1 - 1] - a[j3 - 1]; - a[j0 - 2] = x0r + x2r; - a[j0 - 1] = x0i - x2i; - a[j1 - 2] = x0r - x2r; - a[j1 - 1] = x0i + x2i; - x0r = x1r + x3i; - x0i = x1i + x3r; - a[j2 - 2] = wk1r * x0r - wk1i * x0i; - a[j2 - 1] = wk1r * x0i + wk1i * x0r; - x0r = x1r - x3i; - x0i = x1i - x3r; - a[j3 - 2] = wk3r * x0r + wk3i * x0i; - a[j3 - 1] = wk3r * x0i - wk3i * x0r; - x0r = a[j0] + a[j2]; - x0i = -a[j0 + 1] - a[j2 + 1]; - x1r = a[j0] - a[j2]; - x1i = -a[j0 + 1] + a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[j0] = x0r + x2r; - a[j0 + 1] = x0i - x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i + x2i; - x0r = x1r + x3i; - x0i = x1i + x3r; - a[j2] = wn4r * (x0r - x0i); - a[j2 + 1] = wn4r * (x0i + x0r); - x0r = x1r - x3i; - x0i = x1i - x3r; - a[j3] = -wn4r * (x0r + x0i); - a[j3 + 1] = -wn4r * (x0i - x0r); - x0r = a[j0 + 2] + a[j2 + 2]; - x0i = -a[j0 + 3] - a[j2 + 3]; - x1r = a[j0 + 2] - a[j2 + 2]; - x1i = -a[j0 + 3] + a[j2 + 3]; - x2r = a[j1 + 2] + a[j3 + 2]; - x2i = a[j1 + 3] + a[j3 + 3]; - x3r = a[j1 + 2] - a[j3 + 2]; - x3i = a[j1 + 3] - a[j3 + 3]; - a[j0 + 2] = x0r + x2r; - a[j0 + 3] = x0i - x2i; - a[j1 + 2] = x0r - x2r; - a[j1 + 3] = x0i + x2i; - x0r = x1r + x3i; - x0i = x1i + x3r; - a[j2 + 2] = wk1i * x0r - wk1r * x0i; - a[j2 + 3] = wk1i * x0i + wk1r * x0r; - x0r = x1r - x3i; - x0i = x1i - x3r; - a[j3 + 2] = wk3i * x0r + wk3r * x0i; - a[j3 + 3] = wk3i * x0i - wk3r * x0r; -} - -static int AUP_FFTW_cfttree(int n, int j, int k, float* a, int nw, float* w) { - int i, isplt, m; - - if ((k & 3) != 0) { - isplt = k & 1; - if (isplt != 0) { - AUP_FFTW_cftmdl1(n, &a[j - n], &w[nw - (n >> 1)]); - } else { - AUP_FFTW_cftmdl2(n, &a[j - n], &w[nw - n]); - } - } else { - m = n; - for (i = k; (i & 3) == 0; i >>= 2) { - m <<= 2; - } - isplt = i & 1; - if (isplt != 0) { - while (m > 128) { - AUP_FFTW_cftmdl1(m, &a[j - m], &w[nw - (m >> 1)]); - m >>= 2; - } - } else { - while (m > 128) { - AUP_FFTW_cftmdl2(m, &a[j - m], &w[nw - m]); - m >>= 2; - } - } - } - return isplt; -} - -static void AUP_FFTW_cftmdl1(int n, float* a, float* w) { - int j, j0, j1, j2, j3, k, m, mh; - float wn4r, wk1r, wk1i, wk3r, wk3i; - float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; - - mh = n >> 3; - m = 2 * mh; - j1 = m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[0] + a[j2]; - x0i = a[1] + a[j2 + 1]; - x1r = a[0] - a[j2]; - x1i = a[1] - a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[0] = x0r + x2r; - a[1] = x0i + x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - a[j2] = x1r - x3i; - a[j2 + 1] = x1i + x3r; - a[j3] = x1r + x3i; - a[j3 + 1] = x1i - x3r; - wn4r = w[1]; - k = 0; - for (j = 2; j < mh; j += 2) { - k += 4; - wk1r = w[k]; - wk1i = w[k + 1]; - wk3r = w[k + 2]; - wk3i = w[k + 3]; - j1 = j + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j] + a[j2]; - x0i = a[j + 1] + a[j2 + 1]; - x1r = a[j] - a[j2]; - x1i = a[j + 1] - a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[j] = x0r + x2r; - a[j + 1] = x0i + x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2] = wk1r * x0r - wk1i * x0i; - a[j2 + 1] = wk1r * x0i + wk1i * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3] = wk3r * x0r + wk3i * x0i; - a[j3 + 1] = wk3r * x0i - wk3i * x0r; - j0 = m - j; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0] + a[j2]; - x0i = a[j0 + 1] + a[j2 + 1]; - x1r = a[j0] - a[j2]; - x1i = a[j0 + 1] - a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[j0] = x0r + x2r; - a[j0 + 1] = x0i + x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2] = wk1i * x0r - wk1r * x0i; - a[j2 + 1] = wk1i * x0i + wk1r * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3] = wk3i * x0r + wk3r * x0i; - a[j3 + 1] = wk3i * x0i - wk3r * x0r; - } - j0 = mh; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0] + a[j2]; - x0i = a[j0 + 1] + a[j2 + 1]; - x1r = a[j0] - a[j2]; - x1i = a[j0 + 1] - a[j2 + 1]; - x2r = a[j1] + a[j3]; - x2i = a[j1 + 1] + a[j3 + 1]; - x3r = a[j1] - a[j3]; - x3i = a[j1 + 1] - a[j3 + 1]; - a[j0] = x0r + x2r; - a[j0 + 1] = x0i + x2i; - a[j1] = x0r - x2r; - a[j1 + 1] = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - a[j2] = wn4r * (x0r - x0i); - a[j2 + 1] = wn4r * (x0i + x0r); - x0r = x1r + x3i; - x0i = x1i - x3r; - a[j3] = -wn4r * (x0r + x0i); - a[j3 + 1] = -wn4r * (x0i - x0r); -} - -static void AUP_FFTW_cftmdl2(int n, float* a, float* w) { - int j, j0, j1, j2, j3, k, kr, m, mh; - float wn4r, wk1r, wk1i, wk3r, wk3i, wd1r, wd1i, wd3r, wd3i; - float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y2r, y2i; - - mh = n >> 3; - m = 2 * mh; - wn4r = w[1]; - j1 = m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[0] - a[j2 + 1]; - x0i = a[1] + a[j2]; - x1r = a[0] + a[j2 + 1]; - x1i = a[1] - a[j2]; - x2r = a[j1] - a[j3 + 1]; - x2i = a[j1 + 1] + a[j3]; - x3r = a[j1] + a[j3 + 1]; - x3i = a[j1 + 1] - a[j3]; - y0r = wn4r * (x2r - x2i); - y0i = wn4r * (x2i + x2r); - a[0] = x0r + y0r; - a[1] = x0i + y0i; - a[j1] = x0r - y0r; - a[j1 + 1] = x0i - y0i; - y0r = wn4r * (x3r - x3i); - y0i = wn4r * (x3i + x3r); - a[j2] = x1r - y0i; - a[j2 + 1] = x1i + y0r; - a[j3] = x1r + y0i; - a[j3 + 1] = x1i - y0r; - k = 0; - kr = 2 * m; - for (j = 2; j < mh; j += 2) { - k += 4; - wk1r = w[k]; - wk1i = w[k + 1]; - wk3r = w[k + 2]; - wk3i = w[k + 3]; - kr -= 4; - wd1i = w[kr]; - wd1r = w[kr + 1]; - wd3i = w[kr + 2]; - wd3r = w[kr + 3]; - j1 = j + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j] - a[j2 + 1]; - x0i = a[j + 1] + a[j2]; - x1r = a[j] + a[j2 + 1]; - x1i = a[j + 1] - a[j2]; - x2r = a[j1] - a[j3 + 1]; - x2i = a[j1 + 1] + a[j3]; - x3r = a[j1] + a[j3 + 1]; - x3i = a[j1 + 1] - a[j3]; - y0r = wk1r * x0r - wk1i * x0i; - y0i = wk1r * x0i + wk1i * x0r; - y2r = wd1r * x2r - wd1i * x2i; - y2i = wd1r * x2i + wd1i * x2r; - a[j] = y0r + y2r; - a[j + 1] = y0i + y2i; - a[j1] = y0r - y2r; - a[j1 + 1] = y0i - y2i; - y0r = wk3r * x1r + wk3i * x1i; - y0i = wk3r * x1i - wk3i * x1r; - y2r = wd3r * x3r + wd3i * x3i; - y2i = wd3r * x3i - wd3i * x3r; - a[j2] = y0r + y2r; - a[j2 + 1] = y0i + y2i; - a[j3] = y0r - y2r; - a[j3 + 1] = y0i - y2i; - j0 = m - j; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0] - a[j2 + 1]; - x0i = a[j0 + 1] + a[j2]; - x1r = a[j0] + a[j2 + 1]; - x1i = a[j0 + 1] - a[j2]; - x2r = a[j1] - a[j3 + 1]; - x2i = a[j1 + 1] + a[j3]; - x3r = a[j1] + a[j3 + 1]; - x3i = a[j1 + 1] - a[j3]; - y0r = wd1i * x0r - wd1r * x0i; - y0i = wd1i * x0i + wd1r * x0r; - y2r = wk1i * x2r - wk1r * x2i; - y2i = wk1i * x2i + wk1r * x2r; - a[j0] = y0r + y2r; - a[j0 + 1] = y0i + y2i; - a[j1] = y0r - y2r; - a[j1 + 1] = y0i - y2i; - y0r = wd3i * x1r + wd3r * x1i; - y0i = wd3i * x1i - wd3r * x1r; - y2r = wk3i * x3r + wk3r * x3i; - y2i = wk3i * x3i - wk3r * x3r; - a[j2] = y0r + y2r; - a[j2 + 1] = y0i + y2i; - a[j3] = y0r - y2r; - a[j3 + 1] = y0i - y2i; - } - wk1r = w[m]; - wk1i = w[m + 1]; - j0 = mh; - j1 = j0 + m; - j2 = j1 + m; - j3 = j2 + m; - x0r = a[j0] - a[j2 + 1]; - x0i = a[j0 + 1] + a[j2]; - x1r = a[j0] + a[j2 + 1]; - x1i = a[j0 + 1] - a[j2]; - x2r = a[j1] - a[j3 + 1]; - x2i = a[j1 + 1] + a[j3]; - x3r = a[j1] + a[j3 + 1]; - x3i = a[j1 + 1] - a[j3]; - y0r = wk1r * x0r - wk1i * x0i; - y0i = wk1r * x0i + wk1i * x0r; - y2r = wk1i * x2r - wk1r * x2i; - y2i = wk1i * x2i + wk1r * x2r; - a[j0] = y0r + y2r; - a[j0 + 1] = y0i + y2i; - a[j1] = y0r - y2r; - a[j1 + 1] = y0i - y2i; - y0r = wk1i * x1r - wk1r * x1i; - y0i = wk1i * x1i + wk1r * x1r; - y2r = wk1r * x3r - wk1i * x3i; - y2i = wk1r * x3i + wk1i * x3r; - a[j2] = y0r - y2r; - a[j2 + 1] = y0i - y2i; - a[j3] = y0r + y2r; - a[j3 + 1] = y0i + y2i; -} - -static void AUP_FFTW_cftfx41(int n, float* a, int nw, float* w) { - if (n == 128) { - AUP_FFTW_cftf161(a, &w[nw - 8]); - AUP_FFTW_cftf162(&a[32], &w[nw - 32]); - AUP_FFTW_cftf161(&a[64], &w[nw - 8]); - AUP_FFTW_cftf161(&a[96], &w[nw - 8]); - } else { - AUP_FFTW_cftf081(a, &w[nw - 8]); - AUP_FFTW_cftf082(&a[16], &w[nw - 8]); - AUP_FFTW_cftf081(&a[32], &w[nw - 8]); - AUP_FFTW_cftf081(&a[48], &w[nw - 8]); - } -} - -static void AUP_FFTW_cftf161(float* a, float* w) { - float wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, - y1i, y2r, y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i, y8r, y8i, - y9r, y9i, y10r, y10i, y11r, y11i, y12r, y12i, y13r, y13i, y14r, y14i, - y15r, y15i; - - wn4r = w[1]; - wk1r = w[2]; - wk1i = w[3]; - x0r = a[0] + a[16]; - x0i = a[1] + a[17]; - x1r = a[0] - a[16]; - x1i = a[1] - a[17]; - x2r = a[8] + a[24]; - x2i = a[9] + a[25]; - x3r = a[8] - a[24]; - x3i = a[9] - a[25]; - y0r = x0r + x2r; - y0i = x0i + x2i; - y4r = x0r - x2r; - y4i = x0i - x2i; - y8r = x1r - x3i; - y8i = x1i + x3r; - y12r = x1r + x3i; - y12i = x1i - x3r; - x0r = a[2] + a[18]; - x0i = a[3] + a[19]; - x1r = a[2] - a[18]; - x1i = a[3] - a[19]; - x2r = a[10] + a[26]; - x2i = a[11] + a[27]; - x3r = a[10] - a[26]; - x3i = a[11] - a[27]; - y1r = x0r + x2r; - y1i = x0i + x2i; - y5r = x0r - x2r; - y5i = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - y9r = wk1r * x0r - wk1i * x0i; - y9i = wk1r * x0i + wk1i * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - y13r = wk1i * x0r - wk1r * x0i; - y13i = wk1i * x0i + wk1r * x0r; - x0r = a[4] + a[20]; - x0i = a[5] + a[21]; - x1r = a[4] - a[20]; - x1i = a[5] - a[21]; - x2r = a[12] + a[28]; - x2i = a[13] + a[29]; - x3r = a[12] - a[28]; - x3i = a[13] - a[29]; - y2r = x0r + x2r; - y2i = x0i + x2i; - y6r = x0r - x2r; - y6i = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - y10r = wn4r * (x0r - x0i); - y10i = wn4r * (x0i + x0r); - x0r = x1r + x3i; - x0i = x1i - x3r; - y14r = wn4r * (x0r + x0i); - y14i = wn4r * (x0i - x0r); - x0r = a[6] + a[22]; - x0i = a[7] + a[23]; - x1r = a[6] - a[22]; - x1i = a[7] - a[23]; - x2r = a[14] + a[30]; - x2i = a[15] + a[31]; - x3r = a[14] - a[30]; - x3i = a[15] - a[31]; - y3r = x0r + x2r; - y3i = x0i + x2i; - y7r = x0r - x2r; - y7i = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - y11r = wk1i * x0r - wk1r * x0i; - y11i = wk1i * x0i + wk1r * x0r; - x0r = x1r + x3i; - x0i = x1i - x3r; - y15r = wk1r * x0r - wk1i * x0i; - y15i = wk1r * x0i + wk1i * x0r; - x0r = y12r - y14r; - x0i = y12i - y14i; - x1r = y12r + y14r; - x1i = y12i + y14i; - x2r = y13r - y15r; - x2i = y13i - y15i; - x3r = y13r + y15r; - x3i = y13i + y15i; - a[24] = x0r + x2r; - a[25] = x0i + x2i; - a[26] = x0r - x2r; - a[27] = x0i - x2i; - a[28] = x1r - x3i; - a[29] = x1i + x3r; - a[30] = x1r + x3i; - a[31] = x1i - x3r; - x0r = y8r + y10r; - x0i = y8i + y10i; - x1r = y8r - y10r; - x1i = y8i - y10i; - x2r = y9r + y11r; - x2i = y9i + y11i; - x3r = y9r - y11r; - x3i = y9i - y11i; - a[16] = x0r + x2r; - a[17] = x0i + x2i; - a[18] = x0r - x2r; - a[19] = x0i - x2i; - a[20] = x1r - x3i; - a[21] = x1i + x3r; - a[22] = x1r + x3i; - a[23] = x1i - x3r; - x0r = y5r - y7i; - x0i = y5i + y7r; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - x0r = y5r + y7i; - x0i = y5i - y7r; - x3r = wn4r * (x0r - x0i); - x3i = wn4r * (x0i + x0r); - x0r = y4r - y6i; - x0i = y4i + y6r; - x1r = y4r + y6i; - x1i = y4i - y6r; - a[8] = x0r + x2r; - a[9] = x0i + x2i; - a[10] = x0r - x2r; - a[11] = x0i - x2i; - a[12] = x1r - x3i; - a[13] = x1i + x3r; - a[14] = x1r + x3i; - a[15] = x1i - x3r; - x0r = y0r + y2r; - x0i = y0i + y2i; - x1r = y0r - y2r; - x1i = y0i - y2i; - x2r = y1r + y3r; - x2i = y1i + y3i; - x3r = y1r - y3r; - x3i = y1i - y3i; - a[0] = x0r + x2r; - a[1] = x0i + x2i; - a[2] = x0r - x2r; - a[3] = x0i - x2i; - a[4] = x1r - x3i; - a[5] = x1i + x3r; - a[6] = x1r + x3i; - a[7] = x1i - x3r; -} - -static void AUP_FFTW_cftf162(float* a, float* w) { - float wn4r, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i, x0r, x0i, x1r, x1i, x2r, x2i, - y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, - y7i, y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i, y12r, y12i, y13r, y13i, - y14r, y14i, y15r, y15i; - - wn4r = w[1]; - wk1r = w[4]; - wk1i = w[5]; - wk3r = w[6]; - wk3i = -w[7]; - wk2r = w[8]; - wk2i = w[9]; - x1r = a[0] - a[17]; - x1i = a[1] + a[16]; - x0r = a[8] - a[25]; - x0i = a[9] + a[24]; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - y0r = x1r + x2r; - y0i = x1i + x2i; - y4r = x1r - x2r; - y4i = x1i - x2i; - x1r = a[0] + a[17]; - x1i = a[1] - a[16]; - x0r = a[8] + a[25]; - x0i = a[9] - a[24]; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - y8r = x1r - x2i; - y8i = x1i + x2r; - y12r = x1r + x2i; - y12i = x1i - x2r; - x0r = a[2] - a[19]; - x0i = a[3] + a[18]; - x1r = wk1r * x0r - wk1i * x0i; - x1i = wk1r * x0i + wk1i * x0r; - x0r = a[10] - a[27]; - x0i = a[11] + a[26]; - x2r = wk3i * x0r - wk3r * x0i; - x2i = wk3i * x0i + wk3r * x0r; - y1r = x1r + x2r; - y1i = x1i + x2i; - y5r = x1r - x2r; - y5i = x1i - x2i; - x0r = a[2] + a[19]; - x0i = a[3] - a[18]; - x1r = wk3r * x0r - wk3i * x0i; - x1i = wk3r * x0i + wk3i * x0r; - x0r = a[10] + a[27]; - x0i = a[11] - a[26]; - x2r = wk1r * x0r + wk1i * x0i; - x2i = wk1r * x0i - wk1i * x0r; - y9r = x1r - x2r; - y9i = x1i - x2i; - y13r = x1r + x2r; - y13i = x1i + x2i; - x0r = a[4] - a[21]; - x0i = a[5] + a[20]; - x1r = wk2r * x0r - wk2i * x0i; - x1i = wk2r * x0i + wk2i * x0r; - x0r = a[12] - a[29]; - x0i = a[13] + a[28]; - x2r = wk2i * x0r - wk2r * x0i; - x2i = wk2i * x0i + wk2r * x0r; - y2r = x1r + x2r; - y2i = x1i + x2i; - y6r = x1r - x2r; - y6i = x1i - x2i; - x0r = a[4] + a[21]; - x0i = a[5] - a[20]; - x1r = wk2i * x0r - wk2r * x0i; - x1i = wk2i * x0i + wk2r * x0r; - x0r = a[12] + a[29]; - x0i = a[13] - a[28]; - x2r = wk2r * x0r - wk2i * x0i; - x2i = wk2r * x0i + wk2i * x0r; - y10r = x1r - x2r; - y10i = x1i - x2i; - y14r = x1r + x2r; - y14i = x1i + x2i; - x0r = a[6] - a[23]; - x0i = a[7] + a[22]; - x1r = wk3r * x0r - wk3i * x0i; - x1i = wk3r * x0i + wk3i * x0r; - x0r = a[14] - a[31]; - x0i = a[15] + a[30]; - x2r = wk1i * x0r - wk1r * x0i; - x2i = wk1i * x0i + wk1r * x0r; - y3r = x1r + x2r; - y3i = x1i + x2i; - y7r = x1r - x2r; - y7i = x1i - x2i; - x0r = a[6] + a[23]; - x0i = a[7] - a[22]; - x1r = wk1i * x0r + wk1r * x0i; - x1i = wk1i * x0i - wk1r * x0r; - x0r = a[14] + a[31]; - x0i = a[15] - a[30]; - x2r = wk3i * x0r - wk3r * x0i; - x2i = wk3i * x0i + wk3r * x0r; - y11r = x1r + x2r; - y11i = x1i + x2i; - y15r = x1r - x2r; - y15i = x1i - x2i; - x1r = y0r + y2r; - x1i = y0i + y2i; - x2r = y1r + y3r; - x2i = y1i + y3i; - a[0] = x1r + x2r; - a[1] = x1i + x2i; - a[2] = x1r - x2r; - a[3] = x1i - x2i; - x1r = y0r - y2r; - x1i = y0i - y2i; - x2r = y1r - y3r; - x2i = y1i - y3i; - a[4] = x1r - x2i; - a[5] = x1i + x2r; - a[6] = x1r + x2i; - a[7] = x1i - x2r; - x1r = y4r - y6i; - x1i = y4i + y6r; - x0r = y5r - y7i; - x0i = y5i + y7r; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - a[8] = x1r + x2r; - a[9] = x1i + x2i; - a[10] = x1r - x2r; - a[11] = x1i - x2i; - x1r = y4r + y6i; - x1i = y4i - y6r; - x0r = y5r + y7i; - x0i = y5i - y7r; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - a[12] = x1r - x2i; - a[13] = x1i + x2r; - a[14] = x1r + x2i; - a[15] = x1i - x2r; - x1r = y8r + y10r; - x1i = y8i + y10i; - x2r = y9r - y11r; - x2i = y9i - y11i; - a[16] = x1r + x2r; - a[17] = x1i + x2i; - a[18] = x1r - x2r; - a[19] = x1i - x2i; - x1r = y8r - y10r; - x1i = y8i - y10i; - x2r = y9r + y11r; - x2i = y9i + y11i; - a[20] = x1r - x2i; - a[21] = x1i + x2r; - a[22] = x1r + x2i; - a[23] = x1i - x2r; - x1r = y12r - y14i; - x1i = y12i + y14r; - x0r = y13r + y15i; - x0i = y13i - y15r; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - a[24] = x1r + x2r; - a[25] = x1i + x2i; - a[26] = x1r - x2r; - a[27] = x1i - x2i; - x1r = y12r + y14i; - x1i = y12i - y14r; - x0r = y13r - y15i; - x0i = y13i + y15r; - x2r = wn4r * (x0r - x0i); - x2i = wn4r * (x0i + x0r); - a[28] = x1r - x2i; - a[29] = x1i + x2r; - a[30] = x1r + x2i; - a[31] = x1i - x2r; -} - -static void AUP_FFTW_cftf081(float* a, float* w) { - float wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, y1i, y2r, - y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; - - wn4r = w[1]; - x0r = a[0] + a[8]; - x0i = a[1] + a[9]; - x1r = a[0] - a[8]; - x1i = a[1] - a[9]; - x2r = a[4] + a[12]; - x2i = a[5] + a[13]; - x3r = a[4] - a[12]; - x3i = a[5] - a[13]; - y0r = x0r + x2r; - y0i = x0i + x2i; - y2r = x0r - x2r; - y2i = x0i - x2i; - y1r = x1r - x3i; - y1i = x1i + x3r; - y3r = x1r + x3i; - y3i = x1i - x3r; - x0r = a[2] + a[10]; - x0i = a[3] + a[11]; - x1r = a[2] - a[10]; - x1i = a[3] - a[11]; - x2r = a[6] + a[14]; - x2i = a[7] + a[15]; - x3r = a[6] - a[14]; - x3i = a[7] - a[15]; - y4r = x0r + x2r; - y4i = x0i + x2i; - y6r = x0r - x2r; - y6i = x0i - x2i; - x0r = x1r - x3i; - x0i = x1i + x3r; - x2r = x1r + x3i; - x2i = x1i - x3r; - y5r = wn4r * (x0r - x0i); - y5i = wn4r * (x0r + x0i); - y7r = wn4r * (x2r - x2i); - y7i = wn4r * (x2r + x2i); - a[8] = y1r + y5r; - a[9] = y1i + y5i; - a[10] = y1r - y5r; - a[11] = y1i - y5i; - a[12] = y3r - y7i; - a[13] = y3i + y7r; - a[14] = y3r + y7i; - a[15] = y3i - y7r; - a[0] = y0r + y4r; - a[1] = y0i + y4i; - a[2] = y0r - y4r; - a[3] = y0i - y4i; - a[4] = y2r - y6i; - a[5] = y2i + y6r; - a[6] = y2r + y6i; - a[7] = y2i - y6r; -} - -static void AUP_FFTW_cftf082(float* a, float* w) { - float wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i, y0r, y0i, y1r, y1i, y2r, y2i, y3r, - y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; - - wn4r = w[1]; - wk1r = w[2]; - wk1i = w[3]; - y0r = a[0] - a[9]; - y0i = a[1] + a[8]; - y1r = a[0] + a[9]; - y1i = a[1] - a[8]; - x0r = a[4] - a[13]; - x0i = a[5] + a[12]; - y2r = wn4r * (x0r - x0i); - y2i = wn4r * (x0i + x0r); - x0r = a[4] + a[13]; - x0i = a[5] - a[12]; - y3r = wn4r * (x0r - x0i); - y3i = wn4r * (x0i + x0r); - x0r = a[2] - a[11]; - x0i = a[3] + a[10]; - y4r = wk1r * x0r - wk1i * x0i; - y4i = wk1r * x0i + wk1i * x0r; - x0r = a[2] + a[11]; - x0i = a[3] - a[10]; - y5r = wk1i * x0r - wk1r * x0i; - y5i = wk1i * x0i + wk1r * x0r; - x0r = a[6] - a[15]; - x0i = a[7] + a[14]; - y6r = wk1i * x0r - wk1r * x0i; - y6i = wk1i * x0i + wk1r * x0r; - x0r = a[6] + a[15]; - x0i = a[7] - a[14]; - y7r = wk1r * x0r - wk1i * x0i; - y7i = wk1r * x0i + wk1i * x0r; - x0r = y0r + y2r; - x0i = y0i + y2i; - x1r = y4r + y6r; - x1i = y4i + y6i; - a[0] = x0r + x1r; - a[1] = x0i + x1i; - a[2] = x0r - x1r; - a[3] = x0i - x1i; - x0r = y0r - y2r; - x0i = y0i - y2i; - x1r = y4r - y6r; - x1i = y4i - y6i; - a[4] = x0r - x1i; - a[5] = x0i + x1r; - a[6] = x0r + x1i; - a[7] = x0i - x1r; - x0r = y1r - y3i; - x0i = y1i + y3r; - x1r = y5r - y7r; - x1i = y5i - y7i; - a[8] = x0r + x1r; - a[9] = x0i + x1i; - a[10] = x0r - x1r; - a[11] = x0i - x1i; - x0r = y1r + y3i; - x0i = y1i - y3r; - x1r = y5r + y7r; - x1i = y5i + y7i; - a[12] = x0r - x1i; - a[13] = x0i + x1r; - a[14] = x0r + x1i; - a[15] = x0i - x1r; -} - -static void AUP_FFTW_cftf040(float* a) { - float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; - - x0r = a[0] + a[4]; - x0i = a[1] + a[5]; - x1r = a[0] - a[4]; - x1i = a[1] - a[5]; - x2r = a[2] + a[6]; - x2i = a[3] + a[7]; - x3r = a[2] - a[6]; - x3i = a[3] - a[7]; - a[0] = x0r + x2r; - a[1] = x0i + x2i; - a[2] = x1r - x3i; - a[3] = x1i + x3r; - a[4] = x0r - x2r; - a[5] = x0i - x2i; - a[6] = x1r + x3i; - a[7] = x1i - x3r; -} - -static void AUP_FFTW_cftb040(float* a) { - float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; - - x0r = a[0] + a[4]; - x0i = a[1] + a[5]; - x1r = a[0] - a[4]; - x1i = a[1] - a[5]; - x2r = a[2] + a[6]; - x2i = a[3] + a[7]; - x3r = a[2] - a[6]; - x3i = a[3] - a[7]; - a[0] = x0r + x2r; - a[1] = x0i + x2i; - a[2] = x1r + x3i; - a[3] = x1i - x3r; - a[4] = x0r - x2r; - a[5] = x0i - x2i; - a[6] = x1r - x3i; - a[7] = x1i + x3r; -} - -static void AUP_FFTW_cftx020(float* a) { - float x0r, x0i; - - x0r = a[0] - a[2]; - x0i = a[1] - a[3]; - a[0] += a[2]; - a[1] += a[3]; - a[2] = x0r; - a[3] = x0i; -} - -static void AUP_FFTW_rftfsub(int n, float* a, int nc, float* c) { - int j, k, kk, ks, m; - float wkr, wki, xr, xi, yr, yi; - - m = n >> 1; - ks = 2 * nc / m; - kk = 0; - for (j = 2; j < m; j += 2) { - k = n - j; - kk += ks; - wkr = 0.5f - c[nc - kk]; - wki = c[kk]; - xr = a[j] - a[k]; - xi = a[j + 1] + a[k + 1]; - yr = wkr * xr - wki * xi; - yi = wkr * xi + wki * xr; - a[j] -= yr; - a[j + 1] -= yi; - a[k] += yr; - a[k + 1] -= yi; - } -} - -static void AUP_FFTW_rftbsub(int n, float* a, int nc, float* c) { - int j, k, kk, ks, m; - float wkr, wki, xr, xi, yr, yi; - - m = n >> 1; - ks = 2 * nc / m; - kk = 0; - for (j = 2; j < m; j += 2) { - k = n - j; - kk += ks; - wkr = 0.5f - c[nc - kk]; - wki = c[kk]; - xr = a[j] - a[k]; - xi = a[j + 1] + a[k + 1]; - yr = wkr * xr + wki * xi; - yi = wkr * xi - wki * xr; - a[j] -= yr; - a[j + 1] -= yi; - a[k] += yr; - a[k + 1] -= yi; - } -} - -static void AUP_FFTW_dctsub(int n, float* a, int nc, float* c) { - int j, k, kk, ks, m; - float wkr, wki, xr; - - m = n >> 1; - ks = nc / n; - kk = 0; - for (j = 1; j < m; j++) { - k = n - j; - kk += ks; - wkr = c[kk] - c[nc - kk]; - wki = c[kk] + c[nc - kk]; - xr = wki * a[j] - wkr * a[k]; - a[j] = wkr * a[j] + wki * a[k]; - a[k] = xr; - } - a[m] *= c[0]; -} - -static void AUP_FFTW_dstsub(int n, float* a, int nc, float* c) { - int j, k, kk, ks, m; - float wkr, wki, xr; - - m = n >> 1; - ks = nc / n; - kk = 0; - for (j = 1; j < m; j++) { - k = n - j; - kk += ks; - wkr = c[kk] - c[nc - kk]; - wki = c[kk] + c[nc - kk]; - xr = wki * a[k] - wkr * a[j]; - a[k] = wkr * a[k] + wki * a[j]; - a[j] = xr; - } - a[m] *= c[0]; -} - -static void AUP_FFTW_rdft(int n, int isgn, float* a, int* ip, float* w) { - float xi; - - int nw = ip[0]; - int nc = ip[1]; - - if (isgn >= 0) { - if (n > 4) { - AUP_FFTW_cftfsub(n, a, ip, nw, w); - AUP_FFTW_rftfsub(n, a, nc, w + nw); - } else if (n == 4) { - AUP_FFTW_cftfsub(n, a, ip, nw, w); - } - xi = a[0] - a[1]; - a[0] += a[1]; - a[1] = xi; - } else { - a[1] = 0.5f * (a[0] - a[1]); - a[0] -= a[1]; - if (n > 4) { - AUP_FFTW_rftbsub(n, a, nc, w + nw); - AUP_FFTW_cftbsub(n, a, ip, nw, w); - } else if (n == 4) { - AUP_FFTW_cftbsub(n, a, ip, nw, w); - } - } -} - -// ========================================================================================== -// public APIs -// ========================================================================================== - -void AUP_FFTW_r2c_256(float* in, float* out) { - int i; - - float tmp[258] = {0}; - - // scale - for (i = 0; i < 256; ++i) { - tmp[i] = in[i] * 0.00390625f; - } - - AUP_FFTW_rdft(256, 1, tmp, (int*)AUP_FFTW_g_ip256, (float*)AUP_FFTW_g_w256); - - out[0] = tmp[0]; - out[255] = tmp[1]; - for (i = 1; i < 255; i += 2) { - out[i] = tmp[i + 1]; - out[i + 1] = -tmp[i + 2]; - } -} - -void AUP_FFTW_c2r_256(float* in, float* out) { - int i; - - out[0] = in[0]; - out[1] = in[255]; - for (i = 2; i < 256; i += 2) { - out[i] = in[i - 1]; - out[i + 1] = -in[i]; - } - - AUP_FFTW_rdft(256, -1, out, (int*)AUP_FFTW_g_ip256, (float*)AUP_FFTW_g_w256); - /* 1/N */ - for (i = 0; i < 256; i++) { - out[i] *= 2; - } -} - -void AUP_FFTW_c2r_512(float* in, float* out) { - int i; - - out[0] = in[0]; - out[1] = in[511]; - for (i = 2; i < 512; i += 2) { - out[i] = in[i - 1]; - out[i + 1] = -in[i]; - } - AUP_FFTW_rdft(512, -1, out, (int*)AUP_FFTW_g_ip512, (float*)AUP_FFTW_g_w512); - /* 1/N */ - for (i = 0; i < 512; i++) { - out[i] *= 2; - } -} - -void AUP_FFTW_r2c_512(float* in, float* out) { - int i; - - float tmp[514] = {0}; - - // scale - for (i = 0; i < 512; ++i) { - tmp[i] = in[i] * 0.001953125f; - } - - AUP_FFTW_rdft(512, 1, tmp, (int*)AUP_FFTW_g_ip512, (float*)AUP_FFTW_g_w512); - - out[0] = tmp[0]; - out[511] = tmp[1]; - for (i = 1; i < 511; i += 2) { - out[i] = tmp[i + 1]; - out[i + 1] = -tmp[i + 2]; - } -} - -void AUP_FFTW_r2c_1024(float* in, float* out) { - int i; - - float tmp[1026] = {0}; - // scale - for (i = 0; i < 1024; ++i) { - tmp[i] = in[i] * 0.0009765625f; - } - - AUP_FFTW_rdft(1024, 1, tmp, (int*)AUP_FFTW_g_ip1024, - (float*)AUP_FFTW_g_w1024); - - out[0] = tmp[0]; - out[1023] = tmp[1]; - for (i = 1; i < 1023; i += 2) { - out[i] = tmp[i + 1]; - out[i + 1] = -tmp[i + 2]; - } -} - -void AUP_FFTW_c2r_1024(float* in, float* out) { - int i; - // memcpy(out,in,sizeof(float)*1024); - out[0] = in[0]; - out[1] = in[1023]; - for (i = 2; i < 1024; i += 2) { - out[i] = in[i - 1]; - out[i + 1] = -in[i]; - } - AUP_FFTW_rdft(1024, -1, out, (int*)AUP_FFTW_g_ip1024, - (float*)AUP_FFTW_g_w1024); - /* 1/N */ - for (i = 0; i < 1024; i++) { - out[i] *= 2; - } -} - -void AUP_FFTW_r2c_2048(float* in, float* out) { - int i; - - float tmp[2050] = {0}; - - // scale - for (i = 0; i < 2048; ++i) { - tmp[i] = in[i] * 0.00048828125f; - } - - AUP_FFTW_rdft(2048, 1, tmp, (int*)AUP_FFTW_g_ip2048, - (float*)AUP_FFTW_g_w2048); - - out[0] = tmp[0]; - out[2047] = tmp[1]; - for (i = 1; i < 2047; i += 2) { - out[i] = tmp[i + 1]; - out[i + 1] = -tmp[i + 2]; - } -} - -void AUP_FFTW_c2r_2048(float* in, float* out) { - int i; - - out[0] = in[0]; - out[1] = in[2047]; - for (i = 2; i < 2048; i += 2) { - out[i] = in[i - 1]; - out[i + 1] = -in[i]; - } - AUP_FFTW_rdft(2048, -1, out, (int*)AUP_FFTW_g_ip2048, - (float*)AUP_FFTW_g_w2048); - /* 1/N */ - for (i = 0; i < 2048; i++) { - out[i] *= 2; - } -} - -void AUP_FFTW_r2c_4096(float* in, float* out) { - int i; - - float tmp[4098] = {0}; - - // scale - for (i = 0; i < 4096; ++i) { - tmp[i] = in[i] * 0.000244140625f; - } - - AUP_FFTW_rdft(4096, 1, tmp, (int*)AUP_FFTW_g_ip4096, - (float*)AUP_FFTW_g_w4096); - - out[0] = tmp[0]; - out[4095] = tmp[1]; - for (i = 1; i < 4095; i += 2) { - out[i] = tmp[i + 1]; - out[i + 1] = -tmp[i + 2]; - } -} - -void AUP_FFTW_c2r_4096(float* in, float* out) { - int i; - - out[0] = in[0]; - out[1] = in[4095]; - for (i = 2; i < 4096; i += 2) { - out[i] = in[i - 1]; - out[i + 1] = -in[i]; - } - AUP_FFTW_rdft(4096, -1, out, (int*)AUP_FFTW_g_ip4096, - (float*)AUP_FFTW_g_w4096); - for (i = 0; i < 4096; i++) { - out[i] *= 2; - } -} - -// if direction == 0: format1->format2 -// if direction == 1: format2->format1 -void AUP_FFTW_InplaceTransf(int direction, int fftSz, float* inplaceTranfBuf) { - float nyqReal; - int idx; - - if (direction == 0) { - // [Real-0, Real-Nyq, Real-1, Imag-1, Real-2, Imag-2, ...] -> - // [Real-0, Real-1, (-1)*Imag-1, Real-2, (-1)*Imag-2, ..., Real-Nyq] - nyqReal = inplaceTranfBuf[1]; - for (idx = 1; idx < (fftSz - 1); idx += 2) { - inplaceTranfBuf[idx] = inplaceTranfBuf[idx + 1]; - inplaceTranfBuf[idx + 1] = -(inplaceTranfBuf[idx + 2]); - } - inplaceTranfBuf[fftSz - 1] = nyqReal; - } else { - // [Real-0, Real-1, (-1)*Imag-1, Real-2, (-1)*Imag-2, ..., Real-Nyq] -> - // [Real-0, Real-Nyq, Real-1, Imag-1, Real-2, Imag-2, ...] - nyqReal = inplaceTranfBuf[fftSz - 1]; - for (idx = fftSz - 1; idx > 2; idx -= 2) { - inplaceTranfBuf[idx] = -(inplaceTranfBuf[idx - 1]); - inplaceTranfBuf[idx - 1] = inplaceTranfBuf[idx - 2]; - } - inplaceTranfBuf[1] = nyqReal; - } - return; -} - -void AUP_FFTW_RescaleFFTOut(int fftSz, float* inplaceBuf) { - int idx; - for (idx = 0; idx < fftSz; idx++) { - inplaceBuf[idx] *= (float)fftSz; - } - return; -} - -void AUP_FFTW_RescaleIFFTOut(int fftSz, float* inplaceBuf) { - int idx; - for (idx = 0; idx < fftSz; idx++) { - inplaceBuf[idx] *= 0.5f; - } - return; -}