1b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* 2b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland 3b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 4b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Licensed under the Apache License, Version 2.0 (the "License"); 5b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * you may not use this file except in compliance with the License. 6b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * You may obtain a copy of the License at 7b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 8b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * http://www.apache.org/licenses/LICENSE-2.0 9b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 10b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Unless required by applicable law or agreed to in writing, software 11b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * distributed under the License is distributed on an "AS IS" BASIS, 12b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * See the License for the specific language governing permissions and 14b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * limitations under the License. 15b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 16b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 17b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @file picofftsg.c 18b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 19b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * FFT/DCT related data types, constants and functions in Pico 20b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 21b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Copyright (C) 2008-2009 SVOX AG, Baslerstr. 30, 8048 Zuerich, Switzerland 22b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * All rights reserved. 23b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 24b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * History: 25b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * - 2009-04-20 -- initial version 26b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * 27b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 28b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 29b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picoos.h" 30b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picofftsg.h" 31b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#include "picodbg.h" 32b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 33b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifdef __cplusplus 34b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenextern "C" { 35b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 36b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 37b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/** 38b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * @addtogroup picofft 39b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ---------------------------------------------------\n 40b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * <b> Fast Fourier/Cosine/Sine Transform </b>\n 41b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * Adapted from http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html (Copyright Takuya OOURA, 1996-2001)\n 42b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * ---------------------------------------------------\n 43b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 44b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Overall features 45b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dimension :one 46b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - data length :power of 2 47b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - decimation :frequency 48b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - radix :split-radix 49b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - data :inplace 50b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - table :not use 51b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 52b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen functions 53b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - cdft: Complex Discrete Fourier Transform 54b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - rdft: Real Discrete Fourier Transform 55b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddct: Discrete Cosine Transform 56b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddst: Discrete Sine Transform 57b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dfct: Cosine Transform of RDFT (Real Symmetric DFT) 58b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dfst: Sine Transform of RDFT (Real Anti-symmetric DFT) 59b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 60b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen function prototypes 61b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - void cdft(picoos_int32, picoos_int32, PICOFFTSG_FFTTYPE *); 62b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - void rdft(picoos_int32, picoos_int32, PICOFFTSG_FFTTYPE *); 63b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - void ddct(picoos_int32, picoos_int32, PICOFFTSG_FFTTYPE *); 64b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - void ddst(picoos_int32, picoos_int32, PICOFFTSG_FFTTYPE *); 65b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - void dfct(picoos_int32, PICOFFTSG_FFTTYPE *); 66b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - void dfst(picoos_int32, PICOFFTSG_FFTTYPE *); 67b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 68b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen <b>Complex DFT (Discrete Fourier Transform)</b> 69b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 70b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [definition] 71b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 72b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - X[k] = sum_j=0^n-1 x[j]*exp(2*pi*i*j*k/n), 0<=k<n 73b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 74b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - X[k] = sum_j=0^n-1 x[j]*exp(-2*pi*i*j*k/n), 0<=k<n 75b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - (notes: sum_j=0^n-1 is a summation from j=0 to n-1) 76b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 77b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [usage] 78b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 79b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - cdft(2*n, 1, a); 80b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 81b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - cdft(2*n, -1, a); 82b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 83b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [parameters] 84b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - 2*n :data length (picoos_int32) 85b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n >= 1, n = power of 2 86b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0...2*n-1] :input/output data (PICOFFTSG_FFTTYPE *) 87b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - input data 88b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*j] = Re(x[j]), 89b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*j+1] = Im(x[j]), 0<=j<n 90b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 91b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*k] = Re(X[k]), 92b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*k+1] = Im(X[k]), 0<=k<n 93b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 94b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [remark] 95b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Inverse of cdft(2*n, -1, a); is 96b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen -cdft(2*n, 1, a); 97b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - for (j = 0; j <= 2 * n - 1; j++) { 98b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] *= 1.0 / n; 99b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - } 100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen <b> Real DFT / Inverse of Real DFT </b> 103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [definition] 105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> RDFT 106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - R[k] = sum_j=0^n-1 a[j]*cos(2*pi*j*k/n), 0<=k<=n/2 107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - I[k] = sum_j=0^n-1 a[j]*sin(2*pi*j*k/n), 0<k<n/2 108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> IRDFT (excluding scale) 109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[k] = (R[0] + R[n/2]*cos(pi*k))/2 + 110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - sum_j=1^n/2-1 R[j]*cos(2*pi*j*k/n) + 111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - sum_j=1^n/2-1 I[j]*sin(2*pi*j*k/n), 0<=k<n 112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [usage] 114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - rdft(n, 1, a); 116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - rdft(n, -1, a); 118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [parameters] 120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n :data length (picoos_int32) 121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n >= 2, n = power of 2 122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0...n-1] :input/output data (PICOFFTSG_FFTTYPE *) 123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*k] = R[k], 0<=k<n/2 126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*k+1] = I[k], 0<k<n/2 127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[1] = R[n/2] 128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - input data 130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*j] = R[j], 0<=j<n/2 131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[2*j+1] = I[j], 0<j<n/2 132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[1] = R[n/2] 133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [remark] 135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Inverse of rdft(n, 1, a); is 136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - rdft(n, -1, a); 137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - for (j = 0; j <= n - 1; j++) { 138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] *= 2.0 / n; 139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen -} 140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen <b> DCT (Discrete Cosine Transform) / Inverse of DCT</b> 143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [definition] 145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> IDCT (excluding scale) 146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - C[k] = sum_j=0^n-1 a[j]*cos(pi*j*(k+1/2)/n), 0<=k<n 147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> DCT 148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - C[k] = sum_j=0^n-1 a[j]*cos(pi*(j+1/2)*k/n), 0<=k<n 149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [usage] 151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddct(n, 1, a); 153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddct(n, -1, a); 155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [parameters] 157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n :data length (picoos_int32) 158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n >= 2, n = power of 2 159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0...n-1] :input/output data (PICOFFTSG_FFTTYPE *) 160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[k] = C[k], 0<=k<n 162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [remark] 164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Inverse of ddct(n, -1, a); is 165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0] *= 0.5; 166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddct(n, 1, a); 167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - for (j = 0; j <= n - 1; j++) { 168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] *= 2.0 / n; 169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - } 170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen <b> DST (Discrete Sine Transform) / Inverse of DST</b> 172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [definition] 174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> IDST (excluding scale) 175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - S[k] = sum_j=1^n A[j]*sin(pi*j*(k+1/2)/n), 0<=k<n 176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> DST 177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - S[k] = sum_j=0^n-1 a[j]*sin(pi*(j+1/2)*k/n), 0<k<=n 178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [usage] 180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddst(n, 1, a); 182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddst(n, -1, a); 184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [parameters] 186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n :data length (picoos_int32) 187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n >= 2, n = power of 2 188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0...n-1] :input/output data (PICOFFTSG_FFTTYPE *) 189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case1> 190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - input data 191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] = A[j], 0<j<n 192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0] = A[n] 193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[k] = S[k], 0<=k<n 195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - <case2> 196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[k] = S[k], 0<k<n 198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0] = S[n] 199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [remark] 201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Inverse of ddst(n, -1, a); is 202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0] *= 0.5; 203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - ddst(n, 1, a); 204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - for (j = 0; j <= n - 1; j++) { 205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] *= 2.0 / n; 206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - } 207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen <b> Cosine Transform of RDFT (Real Symmetric DFT)</b> 209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [definition] 211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - C[k] = sum_j=0^n a[j]*cos(pi*j*k/n), 0<=k<=n 212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [usage] 214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dfct(n, a); 215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [parameters] 217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n :data length - 1 (picoos_int32) 218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n >= 2, n = power of 2 219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0...n] :input/output data (PICOFFTSG_FFTTYPE *) 220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[k] = C[k], 0<=k<=n 223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [remark] 225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Inverse of a[0] *= 0.5; a[n] *= 0.5; dfct(n, a); is 226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0] *= 0.5; 227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[n] *= 0.5; 228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dfct(n, a); 229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - for (j = 0; j <= n; j++) { 230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] *= 2.0 / n; 231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - } 232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen <b> Sine Transform of RDFT (Real Anti-symmetric DFT)</b> 234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [definition] 236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - S[k] = sum_j=1^n-1 a[j]*sin(pi*j*k/n), 0<k<n 237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [usage] 239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dfst(n, a); 240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [parameters] 242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n :data length + 1 (picoos_int32) 243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - n >= 2, n = power of 2 244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[0...n-1] :input/output data (PICOFFTSG_FFTTYPE *) 245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - output data 246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[k] = S[k], 0<k<n 247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - (a[0] is used for work area) 248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen [remark] 250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - Inverse of dfst(n, a); is 251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - dfst(n, a); 252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - for (j = 1; j <= n - 1; j++) { 253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - a[j] *= 2.0 / n; 254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen - } 255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen*/ 257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* fixed point multiplier for weights */ 259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICODSP_WGT_SHIFT (0x20000000) /* 2^29 */ 260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICOFFTSG_WGT_SHIFT2 (0x10000000) /* PICODSP_WGT_SHIFT/2 */ 261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define PICOFFTSG_WGT_N_SHIFT (29) /* 2^29 */ 262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* fixed point known constants */ 263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR5000 /* cos(M_PI_2*0.5000) */ 264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR5000 (PICOFFTSG_FFTTYPE)(0.707106781186547524400844362104849039284835937688*PICODSP_WGT_SHIFT) 265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR2500 /* cos(M_PI_2*0.2500) */ 266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR2500 (PICOFFTSG_FFTTYPE)(0.923879532511286756128183189396788286822416625863*PICODSP_WGT_SHIFT) 267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WI2500 /* sin(M_PI_2*0.2500) */ 269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WI2500 (PICOFFTSG_FFTTYPE)(0.382683432365089771728459984030398866761344562485*PICODSP_WGT_SHIFT) 270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR1250 /* cos(M_PI_2*0.1250) */ 272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR1250 (PICOFFTSG_FFTTYPE)(0.980785280403230449126182236134239036973933730893*PICODSP_WGT_SHIFT) 273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WI1250 /* sin(M_PI_2*0.1250) */ 275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WI1250 (PICOFFTSG_FFTTYPE)(0.195090322016128267848284868477022240927691617751*PICODSP_WGT_SHIFT) 276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR3750 /* cos(M_PI_2*0.3750) */ 278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR3750 (PICOFFTSG_FFTTYPE)(0.831469612302545237078788377617905756738560811987*PICODSP_WGT_SHIFT) 279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WI3750 /* sin(M_PI_2*0.3750) */ 281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WI3750 (PICOFFTSG_FFTTYPE)(0.555570233019602224742830813948532874374937190754*PICODSP_WGT_SHIFT) 282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#else 285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /*#ifndef M_PI_2 287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen #define M_PI_2 (PICOFFTSG_FFTTYPE)1.570796326794896619231321691639751442098584699687 288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen #endif*/ 289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR5000 /* cos(M_PI_2*0.5000) */ 290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR5000 (PICOFFTSG_FFTTYPE)0.707106781186547524400844362104849039284835937688 291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR2500 /* cos(M_PI_2*0.2500) */ 293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR2500 (PICOFFTSG_FFTTYPE)0.923879532511286756128183189396788286822416625863 294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WI2500 /* sin(M_PI_2*0.2500) */ 296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WI2500 (PICOFFTSG_FFTTYPE)0.382683432365089771728459984030398866761344562485 297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR1250 /* cos(M_PI_2*0.1250) */ 299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR1250 (PICOFFTSG_FFTTYPE)0.980785280403230449126182236134239036973933730893 300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WI1250 /* sin(M_PI_2*0.1250) */ 302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WI1250 (PICOFFTSG_FFTTYPE)0.195090322016128267848284868477022240927691617751 303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WR3750 /* cos(M_PI_2*0.3750) */ 305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WR3750 (PICOFFTSG_FFTTYPE)0.831469612302545237078788377617905756738560811987 306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef WI3750 /* sin(M_PI_2*0.3750) */ 308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define WI3750 (PICOFFTSG_FFTTYPE)0.555570233019602224742830813948532874374937190754 309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef CDFT_LOOP_DIV /* control of the CDFT's speed & tolerance */ 314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define CDFT_LOOP_DIV 32 315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define CDFT_LOOP_DIV_4 128 316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef RDFT_LOOP_DIV /* control of the RDFT's speed & tolerance */ 319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define RDFT_LOOP_DIV 64 320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define RDFT_LOOP_DIV4 256 321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define RDFT_LOOP_DIV_4 256 322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifndef DCST_LOOP_DIV /* control of the DCT,DST's speed & tolerance */ 325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define DCST_LOOP_DIV 64 326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define DCST_LOOP_DIV2 128 327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW1 (0x1) 331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW2 (0x2) 332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW3 (0x4) 333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW4 (0x8) 334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW5 (0x10) 335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW6 (0x20) 336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW7 (0x40) 337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW8 (0x80) 338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW9 (0x100) 339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW10 (0x200) 340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW11 (0x400) 341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW12 (0x800) 342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW13 (0x1000) 343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW14 (0x2000) 344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW15 (0x4000) 345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW16 (0x8000) 346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW17 (0x10000) 347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW18 (0x20000) 348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW19 (0x40000) 349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW20 (0x80000) 350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW21 (0x100000) 351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW22 (0x200000) 352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW23 (0x400000) 353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW24 (0x800000) 354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW25 (0x1000000) 355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW26 (0x2000000) 356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW27 (0x4000000) 357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW28 (0x8000000) 358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW29 (0x10000000) 359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW30 (0x20000000) 360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define POW31 (0x40000000) 361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/************** 362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen * useful macros 363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ************** */ 364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define picofftsg_highestBitPos(x) (x==0?0:(x>=POW17?(x>=POW25?(x>=POW29?(x>=POW31?31:(x>=POW30?30:29)):(x>=POW27?(x>=POW28?28:27):(x>=POW26?26:25))):(x>=POW21?(x>=POW23?(x>=POW24?24:23):(x>=POW22?22:21)):(x>=POW19?(x>=POW20?20:19):(x>=POW18?18:17)))):(x>=POW9?(x>=POW13?(x>=POW15?(x>=POW16?16:15):(x>=POW14?14:13)):(x>=POW11?(x>=POW12?12:11):(x>=POW10?10:9))):(x>=POW5?(x>=POW7?(x>=POW8?8:7):(x>=POW6?6:5)):(x>=POW3?(x>=POW4?4:3):(x>=POW2?2:1)))))) 365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define picofftsg_highestBit(x) (x==0?0:(x<0?(zz=-x,(zz>=POW17?(zz>=POW25?(zz>=POW29?(zz>=POW31?31:(zz>=POW30?30:29)):(zz>=POW27?(zz>=POW28?28:27):(zz>=POW26?26:25))):(zz>=POW21?(zz>=POW23?(zz>=POW24?24:23):(zz>=POW22?22:21)):(zz>=POW19?(zz>=POW20?20:19):(zz>=POW18?18:17)))):(zz>=POW9?(zz>=POW13?(zz>=POW15?(zz>=POW16?16:15):(zz>=POW14?14:13)):(zz>=POW11?(zz>=POW12?12:11):(zz>=POW10?10:9))):(zz>=POW5?(zz>=POW7?(zz>=POW8?8:7):(zz>=POW6?6:5)):(zz>=POW3?(zz>=POW4?4:3):(zz>=POW2?2:1)))))):(x>=POW17?(x>=POW25?(x>=POW29?(x>=POW31?31:(x>=POW30?30:29)):(x>=POW27?(x>=POW28?28:27):(x>=POW26?26:25))):(x>=POW21?(x>=POW23?(x>=POW24?24:23):(x>=POW22?22:21)):(x>=POW19?(x>=POW20?20:19):(x>=POW18?18:17)))):(x>=POW9?(x>=POW13?(x>=POW15?(x>=POW16?16:15):(x>=POW14?14:13)):(x>=POW11?(x>=POW12?12:11):(x>=POW10?10:9))):(x>=POW5?(x>=POW7?(x>=POW8?8:7):(x>=POW6?6:5)):(x>=POW3?(x>=POW4?4:3):(x>=POW2?2:1))))))) 366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#define Mult_W_W picofftsg_mult_w_w 367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ***********************************************************************************************/ 370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* forward declarations */ 371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ***********************************************************************************************/ 372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic PICOFFTSG_FFTTYPE picofftsg_mult_w_w(PICOFFTSG_FFTTYPE x1, PICOFFTSG_FFTTYPE y1); 373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic PICOFFTSG_FFTTYPE picofftsg_mult_w_a(PICOFFTSG_FFTTYPE x1, PICOFFTSG_FFTTYPE y1); 374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftfsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftbsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void rftfsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void rftbsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftfsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftbsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void rftfsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void rftbsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void dctsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void dctsub4(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void ddct(picoos_int32 n, picoos_int32 isgn, PICOFFTSG_FFTTYPE *a); 389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void bitrv1(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void bitrv2(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void bitrv216(PICOFFTSG_FFTTYPE *a); 393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void bitrv208(PICOFFTSG_FFTTYPE *a); 394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftmdl1(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftrec4(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftleaf(picoos_int32 n, picoos_int32 isplt, PICOFFTSG_FFTTYPE *a); 397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftfx41(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf161(PICOFFTSG_FFTTYPE *a); 399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf081(PICOFFTSG_FFTTYPE *a); 400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf040(PICOFFTSG_FFTTYPE *a); 401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftx020(PICOFFTSG_FFTTYPE *a); 402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv2conj(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv216neg(PICOFFTSG_FFTTYPE *a); 405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv208neg(PICOFFTSG_FFTTYPE *a); 406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftb1st(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftrec4(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftleaf(picoos_int32 n, picoos_int32 isplt, PICOFFTSG_FFTTYPE *a); 409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftfx41(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf161(PICOFFTSG_FFTTYPE *a); 411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf081(PICOFFTSG_FFTTYPE *a); 412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftb040(PICOFFTSG_FFTTYPE *a); 413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftx020(PICOFFTSG_FFTTYPE *a); 414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic picoos_int32 cfttree(picoos_int32 n, picoos_int32 j, picoos_int32 k, PICOFFTSG_FFTTYPE *a); 416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftleaf(picoos_int32 n, picoos_int32 isplt, PICOFFTSG_FFTTYPE *a); 417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftmdl1(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftmdl1(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftmdl2(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftmdl1(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftmdl2(picoos_int32 n, PICOFFTSG_FFTTYPE *a); 424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf161(PICOFFTSG_FFTTYPE *a); 425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf162(PICOFFTSG_FFTTYPE *a); 426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf081(PICOFFTSG_FFTTYPE *a); 427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf082(PICOFFTSG_FFTTYPE *a); 428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf161(PICOFFTSG_FFTTYPE *a); 430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf162(PICOFFTSG_FFTTYPE *a); 431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf081(PICOFFTSG_FFTTYPE *a); 432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftf082(PICOFFTSG_FFTTYPE *a); 433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ***********************************************************************************************/ 435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* Exported functions */ 436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ***********************************************************************************************/ 437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid rdft(picoos_int32 n, picoos_int32 isgn, PICOFFTSG_FFTTYPE *a) 438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE xi; 440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isgn >= 0) { 442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 4) { 443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftfsub(n, a); 444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen rftfsub(n, a); 445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 4) { 446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftfsub(n, a); 447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[0] - a[1]; 449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] += a[1]; 450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = xi; 451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = (a[0] - a[1]) / 2; 453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] -= a[1]; 454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 4) { 455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen rftbsub(n, a); 456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftbsub(n, a); 457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 4) { 458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftbsub(n, a); 459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_single norm_result(picoos_int32 m2, PICOFFTSG_FFTTYPE *tmpX, PICOFFTSG_FFTTYPE *norm_window) 466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int16 nI; 468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE a,b, E; 469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen E = (picoos_int32)0; 471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (nI=0; nI<m2; nI++) { 472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a = (norm_window[nI]>>18) * ((tmpX[nI]>0) ? tmpX[nI]>>11 : -((-tmpX[nI])>>11)); 473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen tmpX[nI] = a; 474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen b = (a>=0?a:-a) >> 18; 475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen E += (b*b); 476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (E>0) { 479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return (picoos_single)sqrt((double)E/16.0)/m2; 480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen else { 482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return 0.0; 483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid ddct(picoos_int32 n, picoos_int32 isgn, PICOFFTSG_FFTTYPE *a) 487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 j; 489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE xr; 490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isgn < 0) { 492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[n - 1]; 493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = n - 2; j >= 2; j -= 2) { 494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = a[j] - a[j - 1]; 495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] += a[j - 1]; 496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = a[0] - xr; 498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] += xr; 499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 4) { 500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen rftbsub(n, a); 501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftbsub(n, a); 502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 4) { 503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftbsub(n, a); 504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 4) { 507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen dctsub(n, a); 508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen dctsub4(n, a); 510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isgn >= 0) { 512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 4) { 513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftfsub(n, a); 514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen rftfsub(n, a); 515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 4) { 516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftfsub(n, a); 517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[0] - a[1]; 521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] += a[1]; 522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = 2; j < n; j += 2) { 523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j - 1] = a[j] - a[j + 1]; 524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] += a[j + 1]; 525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[n - 1] = xr; 527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid dfct_nmf(picoos_int32 n, picoos_int32 *a) 531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 j, k, m, mh; 533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE xr, xi, yr, yi, an; 534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE *aj, *ak, *amj, *amk; 535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = n >> 1; 537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = 0; j < m; j++) { 538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = n - j; 539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j] + a[k]; 540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] -= a[k]; 541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = xr; 542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen an = a[n]; 544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while (m >= 2) { 545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ddct(m, 1, a); 546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (m > 2) { 547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv1(m, a); 548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mh = m >> 1; 550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[m]; 551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[m] = a[0]; 552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = an - xi; 553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen an += xi; 554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = m-1; 555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen aj = a + 1; ak = a + k; amj = aj + m; amk = ak + m; 556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = 1; j < mh; j++, aj++, ak--, amj++, amk--) { 557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = *amk; 558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = *amj; 559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = *aj; 560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = *ak; 561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *amj = yr; 562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *amk = yi; 563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *aj = xr - xi; 564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *ak = xr + xi; 565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = *aj; 567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *aj = *amj; 568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen *amj = xr; 569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = mh; 571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[1]; 574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = a[0]; 575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = an + xi; 576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[n] = an - xi; 577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 2) { 578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv1(n, a); 579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ***********************************************************************************************/ 584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* internal routines */ 585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* ***********************************************************************************************/ 586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* 587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mult two numbers which are guaranteed to be in the range -1..1 588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen shift right as little as possible before mult, and the rest after the mult 589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen Also, shift bigger number more - lose less accuracy 590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen */ 591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic PICOFFTSG_FFTTYPE picofftsg_mult_w_w(PICOFFTSG_FFTTYPE x1, PICOFFTSG_FFTTYPE y1) 592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x, y; 594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = x1>=0 ? x1>>15 : -((-x1)>>15); 595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y = y1>=0 ? y1>>14 : -((-y1)>>14); 596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return x * y; 597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic PICOFFTSG_FFTTYPE picofftsg_mult_w_a(PICOFFTSG_FFTTYPE x1, PICOFFTSG_FFTTYPE y1) 600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x, y; 602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = x1>=0 ? x1>>15 : -((-x1)>>15); 605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y = y1>=0 ? y1>>14 : -((-y1)>>14); 606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return x * y; 607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenstatic void cftfsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 8) { 613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 32) { 614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(n, a); 615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 512) { 616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftrec4(n, a); 617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n > 128) { 618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftleaf(n, 1, a); 619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftfx41(n, a); 621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv2(n, a); 623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 32) { 624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(a); 625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv216(a); 626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(a); 628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv208(a); 629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 8) { 631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf040(a); 632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 4) { 633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftx020(a); 634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftbsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 8) { 641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 32) { 642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftb1st(n, a); 643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n > 512) { 644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftrec4(n, a); 645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n > 128) { 646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftleaf(n, 1, a); 647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftfx41(n, a); 649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv2conj(n, a); 651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 32) { 652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(a); 653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv216neg(a); 654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(a); 656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen bitrv208neg(a); 657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 8) { 659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftb040(a); 660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else if (n == 4) { 661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftx020(a); 662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* **************************************************************************************************/ 666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* **************************************************************************************************/ 668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv2(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 j0, k0, j1, k1, l, m, i, j, k, nh, m2; 671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE xr, xi, yr, yi; 672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = 4; 674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (l = n >> 2; l > 8; l >>= 2) { 675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m <<= 1; 676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m2 = m + m; 678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nh = n >> 1; 679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (l == 8) { 680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = 0; 681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (k0 = 0; k0 < m; k0 += 4) { 682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = k0; 683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = j0; j < j0 + k0; j += 4) { 684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j]; 685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j + 1]; 686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k]; 687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k + 1]; 688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = yr; 689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = yi; 690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = xr; 691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] = xi; 692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = k + m2; 694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh; 723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += 2; 724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += 2; 763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh; 803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= 2; 804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 805b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 807b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 809b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (k ^= i); i >>= 1) { 843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen }; 845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = j0 + k0; 847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = k1 + 2; 848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= 2; 878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= nh; 879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh + 2; 888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh + 2; 889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh - m; 898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2 - 2; 899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (j0 ^= i); i >>= 1) { 908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning */ 909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = 0; 913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (k0 = 0; k0 < m; k0 += 4) { 914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = k0; 915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = j0; j < j0 + k0; j += 4) { 916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j]; 917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j + 1]; 918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k]; 919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k + 1]; 920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = yr; 921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = yi; 922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = xr; 923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] = xi; 924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = k + m; 926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh; 935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += 2; 936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += 2; 955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh; 975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= 2; 976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (k ^= i); i >>= 1){ 995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning */ 996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = j0 + k0; 999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = k1 + 2; 1000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 1003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 1005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j1 + 1]; 1013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = a[k1 + 1]; 1015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (j0 ^= i); i >>= 1){ 1020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning */ 1021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1025b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1026b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1027b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv2conj(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 1028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 j0, k0, j1, k1, l, m, i, j, k, nh, m2; 1030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE xr, xi, yr, yi; 1031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = 4; 1034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (l = n >> 2; l > 8; l >>= 2) { 1035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m <<= 1; 1036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m2 = m + m; 1038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nh = n >> 1; 1039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (l == 8) { 1040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = 0; 1041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (k0 = 0; k0 < m; k0 += 4) { 1042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = k0; 1043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = j0; j < j0 + k0; j += 4) { 1044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j]; 1045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j + 1]; 1046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k]; 1047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k + 1]; 1048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = yr; 1049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = yi; 1050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = xr; 1051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] = xi; 1052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 1053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = k + m2; 1054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 1074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh; 1083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += 2; 1084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 1094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1098b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1099b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 1114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += 2; 1123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 1134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 1154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh; 1163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= 2; 1164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 1174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m2; 1194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (k ^= i); i >>= 1) { 1203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning */ 1204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = j0 + k0; 1207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = k1 + 2; 1208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = -a[j1 - 1]; 1210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 3] = -a[k1 + 3]; 1219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2; 1221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= 2; 1240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= nh; 1241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh + 2; 1250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh + 2; 1251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh - m; 1260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m2 - 2; 1261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = -a[j1 - 1]; 1262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 3] = -a[k1 + 3]; 1271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (j0 ^= i); i >>= 1) { /* Avoid warning*/ 1272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 1276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = 0; 1277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (k0 = 0; k0 < m; k0 += 4) { 1278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = k0; 1279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = j0; j < j0 + k0; j += 4) { 1280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j]; 1281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j + 1]; 1282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k]; 1283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k + 1]; 1284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = yr; 1285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = yi; 1286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = xr; 1287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] = xi; 1288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 1289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = k + m; 1290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh; 1299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += 2; 1300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += 2; 1319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh; 1339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= 2; 1340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (k ^= i); i >>= 1) { 1359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 1360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = j0 + k0; 1363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = k1 + 2; 1364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = -a[j1 - 1]; 1366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 3] = -a[k1 + 3]; 1375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = -a[j1 - 1]; 1378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j1]; 1379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = -a[j1 + 1]; 1380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = a[k1]; 1381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = -a[k1 + 1]; 1382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = yr; 1383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = yi; 1384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = xr; 1385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 1] = xi; 1386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1 + 3] = -a[k1 + 3]; 1387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (j0 ^= i); i >>= 1) { 1388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 1389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv216(PICOFFTSG_FFTTYPE *a) 1396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, 1398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5r, x5i, x7r, x7i, x8r, x8i, x10r, x10i, 1399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x11r, x11i, x12r, x12i, x13r, x13i, x14r, x14i; 1400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[2]; 1402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[3]; 1403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[4]; 1404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[5]; 1405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[6]; 1406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[7]; 1407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4r = a[8]; 1408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4i = a[9]; 1409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5r = a[10]; 1410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5i = a[11]; 1411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x7r = a[14]; 1412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x7i = a[15]; 1413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x8r = a[16]; 1414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x8i = a[17]; 1415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x10r = a[20]; 1416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x10i = a[21]; 1417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x11r = a[22]; 1418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x11i = a[23]; 1419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x12r = a[24]; 1420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x12i = a[25]; 1421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x13r = a[26]; 1422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x13i = a[27]; 1423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x14r = a[28]; 1424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x14i = a[29]; 1425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x8r; 1426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x8i; 1427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x4r; 1428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x4i; 1429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x12r; 1430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x12i; 1431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x2r; 1432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x2i; 1433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = x10r; 1434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = x10i; 1435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = x14r; 1436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = x14i; 1437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[16] = x1r; 1438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[17] = x1i; 1439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[20] = x5r; 1440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[21] = x5i; 1441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[22] = x13r; 1442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[23] = x13i; 1443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[24] = x3r; 1444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[25] = x3i; 1445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[26] = x11r; 1446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[27] = x11i; 1447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[28] = x7r; 1448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[29] = x7i; 1449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv216neg(PICOFFTSG_FFTTYPE *a) 1453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, 1455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5r, x5i, x6r, x6i, x7r, x7i, x8r, x8i, 1456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x9r, x9i, x10r, x10i, x11r, x11i, x12r, x12i, 1457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x13r, x13i, x14r, x14i, x15r, x15i; 1458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[2]; 1460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[3]; 1461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[4]; 1462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[5]; 1463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[6]; 1464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[7]; 1465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4r = a[8]; 1466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4i = a[9]; 1467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5r = a[10]; 1468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5i = a[11]; 1469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x6r = a[12]; 1470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x6i = a[13]; 1471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x7r = a[14]; 1472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x7i = a[15]; 1473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x8r = a[16]; 1474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x8i = a[17]; 1475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x9r = a[18]; 1476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x9i = a[19]; 1477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x10r = a[20]; 1478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x10i = a[21]; 1479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x11r = a[22]; 1480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x11i = a[23]; 1481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x12r = a[24]; 1482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x12i = a[25]; 1483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x13r = a[26]; 1484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x13i = a[27]; 1485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x14r = a[28]; 1486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x14i = a[29]; 1487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x15r = a[30]; 1488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x15i = a[31]; 1489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x15r; 1490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x15i; 1491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x7r; 1492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x7i; 1493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x11r; 1494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x11i; 1495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x3r; 1496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x3i; 1497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = x13r; 1498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = x13i; 1499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = x5r; 1500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = x5i; 1501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = x9r; 1502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = x9i; 1503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[16] = x1r; 1504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[17] = x1i; 1505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[18] = x14r; 1506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[19] = x14i; 1507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[20] = x6r; 1508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[21] = x6i; 1509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[22] = x10r; 1510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[23] = x10i; 1511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[24] = x2r; 1512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[25] = x2i; 1513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[26] = x12r; 1514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[27] = x12i; 1515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[28] = x4r; 1516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[29] = x4i; 1517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[30] = x8r; 1518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[31] = x8i; 1519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv208(PICOFFTSG_FFTTYPE *a) 1523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x1r, x1i, x3r, x3i, x4r, x4i, x6r, x6i; 1525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[2]; 1527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[3]; 1528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[6]; 1529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[7]; 1530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4r = a[8]; 1531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4i = a[9]; 1532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x6r = a[12]; 1533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x6i = a[13]; 1534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x4r; 1535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x4i; 1536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x6r; 1537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x6i; 1538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x1r; 1539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x1i; 1540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = x3r; 1541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = x3i; 1542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv208neg(PICOFFTSG_FFTTYPE *a) 1546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x1r, x1i, x2r, x2i, x3r, x3i, x4r, x4i, 1548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5r, x5i, x6r, x6i, x7r, x7i; 1549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[2]; 1551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[3]; 1552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[4]; 1553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[5]; 1554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[6]; 1555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[7]; 1556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4r = a[8]; 1557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x4i = a[9]; 1558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5r = a[10]; 1559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x5i = a[11]; 1560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x6r = a[12]; 1561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x6i = a[13]; 1562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x7r = a[14]; 1563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x7i = a[15]; 1564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x7r; 1565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x7i; 1566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x3r; 1567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x3i; 1568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x5r; 1569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x5i; 1570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x1r; 1571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x1i; 1572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = x6r; 1573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = x6i; 1574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = x2r; 1575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = x2i; 1576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = x4r; 1577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = x4i; 1578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid bitrv1(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 1582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 j0, k0, j1, k1, l, m, i, j, k, nh; 1584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x; 1585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen nh = n >> 1; 1586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[1]; 1587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = a[nh]; 1588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[nh] = x; 1589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = 2; 1590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (l = n >> 2; l > 2; l >>= 2) { 1591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m <<= 1; 1592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (l == 2) { 1594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = m + 1; 1595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = m + nh; 1596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = 0; 1600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (k0 = 2; k0 < m; k0 += 2) { 1601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (j0 ^= i); i >>= 1) { 1602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 1603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = k0; 1605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = j0; j < j0 + k0; j += 2) { 1606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j]; 1607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = a[k]; 1608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = x; 1609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 1610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = k + m; 1611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += nh; 1615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1++; 1616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1++; 1625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh; 1635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1--; 1636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= m; 1640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 -= m; 1641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (k ^= i); i >>= 1) { 1645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 1646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = j0 + k0; 1649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = k1 + 1; 1650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 += m; 1655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += m; 1656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 1661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = 0; 1662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (k0 = 2; k0 < m; k0 += 2) { 1663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (j0 ^= i); i >>= 1) { 1664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 1665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = k0; 1667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = j0; j < j0 + k0; j += 2) { 1668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j]; 1669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = a[k]; 1670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = x; 1671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + nh; 1672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = k + 1; 1673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1++; 1677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 -= nh; 1682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1--; 1683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = nh >> 1; i > (k ^= i); i >>= 1) { 1687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen /* Avoid warning*/ 1688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 = j0 + k0; 1691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = k1 + 1; 1692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k1 += nh; 1693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x = a[j1]; 1694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = a[k1]; 1695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k1] = x; 1696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* **************************************************************************************************/ 1702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen/* **************************************************************************************************/ 1704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftb1st(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 1706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, i0, j, j0, j1, j2, j3, m, mh; 1708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wk1r, wk1i, wk3r, wk3i, 1709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r, wd1i, wd3r, wd3i, ss1, ss3; 1710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 1711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mh = n >> 3; 1713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = 2 * mh; 1714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = m; 1715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 1716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 1717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] + a[j2]; 1718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[1] - a[j2 + 1]; 1719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[j2]; 1720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[1] + a[j2 + 1]; 1721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 1722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 1723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 1724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 1725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + x2r; 1726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i - x2i; 1727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 1728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i + x2i; 1729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = x1r + x3i; 1730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = x1i + x3r; 1731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = x1r - x3i; 1732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = x1i - x3r; 1733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r = PICODSP_WGT_SHIFT; 1734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1i = 0; 1735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3r = PICODSP_WGT_SHIFT; 1736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3i = 0; 1737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r = (PICOFFTSG_FFTTYPE) (0.998795449734 *PICODSP_WGT_SHIFT); 1739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i = (PICOFFTSG_FFTTYPE) (0.049067676067 *PICODSP_WGT_SHIFT); 1740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss1 = (PICOFFTSG_FFTTYPE) (0.098135352135 *PICODSP_WGT_SHIFT); 1741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i = (PICOFFTSG_FFTTYPE) (-0.146730467677 *PICODSP_WGT_SHIFT); 1742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r = (PICOFFTSG_FFTTYPE) (0.989176511765 *PICODSP_WGT_SHIFT); 1743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss3 = (PICOFFTSG_FFTTYPE) (-0.293460935354 *PICODSP_WGT_SHIFT); 1744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = 0; 1746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (;;) { 1747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = i + CDFT_LOOP_DIV_4; 1748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 > mh - 4) { 1749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = mh - 4; 1750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = i + 2; j < i0; j += 4) { 1752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r -= Mult_W_W(ss1, wk1i); 1754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1i += Mult_W_W(ss1, wk1r); 1755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3r -= Mult_W_W(ss3, wk3i); 1756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3i += Mult_W_W(ss3, wk3r); 1757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 1759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 1760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 1761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j] + a[j2]; 1762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j + 1] - a[j2 + 1]; 1763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j] - a[j2]; 1764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j + 1] + a[j2 + 1]; 1765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 1766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 1767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 1768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 1769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = x0r + x2r; 1770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = x0i - x2i; 1771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 1772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i + x2i; 1773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 1776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 1777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = Mult_W_W(wk3r, x0r) + Mult_W_W(wk3i, x0i); 1780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = Mult_W_W(wk3r, x0i) - Mult_W_W(wk3i, x0r); 1781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j + 2] + a[j2 + 2]; 1782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j + 3] - a[j2 + 3]; 1783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j + 2] - a[j2 + 2]; 1784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j + 3] + a[j2 + 3]; 1785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 + 2] + a[j3 + 2]; 1786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 3] + a[j3 + 3]; 1787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 + 2] - a[j3 + 2]; 1788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 3] - a[j3 + 3]; 1789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 2] = x0r + x2r; 1790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 3] = x0i - x2i; 1791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 2] = x0r - x2r; 1792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 3] = x0i + x2i; 1793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 2] = Mult_W_W(wd1r, x0r) - Mult_W_W(wd1i, x0i); 1796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 3] = Mult_W_W(wd1r, x0i) + Mult_W_W(wd1i, x0r); 1797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 2] = Mult_W_W(wd3r, x0r) + Mult_W_W(wd3i, x0i); 1800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 3] = Mult_W_W(wd3r, x0i) - Mult_W_W(wd3i, x0r); 1801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = m - j; 1802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j0 + m; 1803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 1804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 1805b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0] + a[j2]; 1806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j0 + 1] - a[j2 + 1]; 1807b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0] - a[j2]; 1808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j0 + 1] + a[j2 + 1]; 1809b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 1810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 1811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 1812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 1813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0] = x0r + x2r; 1814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 1] = x0i - x2i; 1815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 1816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i + x2i; 1817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 1820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 1821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = Mult_W_W(wk3i, x0r) + Mult_W_W(wk3r, x0i); 1824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = Mult_W_W(wk3i, x0i) - Mult_W_W(wk3r, x0r); 1825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 - 2] + a[j2 - 2]; 1826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j0 - 1] - a[j2 - 1]; 1827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 - 2] - a[j2 - 2]; 1828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j0 - 1] + a[j2 - 1]; 1829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 - 2] + a[j3 - 2]; 1830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 - 1] + a[j3 - 1]; 1831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 - 2] - a[j3 - 2]; 1832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 - 1] - a[j3 - 1]; 1833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 2] = x0r + x2r; 1834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 1] = x0i - x2i; 1835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 2] = x0r - x2r; 1836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = x0i + x2i; 1837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 2] = Mult_W_W(wd1i, x0r) - Mult_W_W(wd1r, x0i); 1840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 1] = Mult_W_W(wd1i, x0i) + Mult_W_W(wd1r, x0r); 1841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 2] = Mult_W_W(wd3i, x0r) + Mult_W_W(wd3r, x0i); 1844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 1] = Mult_W_W(wd3i, x0i) - Mult_W_W(wd3r, x0r); 1845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r -= Mult_W_W(ss1, wd1i); 1846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i += Mult_W_W(ss1, wd1r); 1847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r -= Mult_W_W(ss3, wd3i); 1848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i += Mult_W_W(ss3, wd3r); 1849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 == mh - 4) { 1851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 1852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r = WR5000; 1855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = mh; 1856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j0 + m; 1857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 1858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 1859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 - 2] + a[j2 - 2]; 1860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j0 - 1] - a[j2 - 1]; 1861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 - 2] - a[j2 - 2]; 1862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j0 - 1] + a[j2 - 1]; 1863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 - 2] + a[j3 - 2]; 1864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 - 1] + a[j3 - 1]; 1865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 - 2] - a[j3 - 2]; 1866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 - 1] - a[j3 - 1]; 1867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 2] = x0r + x2r; 1868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 1] = x0i - x2i; 1869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 2] = x0r - x2r; 1870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = x0i + x2i; 1871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 2] = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 1874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 1] = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 1875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 2] = Mult_W_W(wk3r, x0r) + Mult_W_W(wk3i, x0i); 1878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 1] = Mult_W_W(wk3r, x0i) - Mult_W_W(wk3i, x0r); 1879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0] + a[j2]; 1880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j0 + 1] - a[j2 + 1]; 1881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0] - a[j2]; 1882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j0 + 1] + a[j2 + 1]; 1883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 1884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 1885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 1886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 1887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0] = x0r + x2r; 1888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 1] = x0i - x2i; 1889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 1890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i + x2i; 1891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = picofftsg_mult_w_a(wd1r, (x0r - x0i)); 1894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = picofftsg_mult_w_a(wd1r, (x0i + x0r)); 1895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = -picofftsg_mult_w_a(wd1r, (x0r + x0i)); 1898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = -picofftsg_mult_w_a(wd1r, (x0i - x0r)); 1899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 + 2] + a[j2 + 2]; 1900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = -a[j0 + 3] - a[j2 + 3]; 1901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 + 2] - a[j2 + 2]; 1902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = -a[j0 + 3] + a[j2 + 3]; 1903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 + 2] + a[j3 + 2]; 1904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 3] + a[j3 + 3]; 1905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 + 2] - a[j3 + 2]; 1906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 3] - a[j3 + 3]; 1907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 2] = x0r + x2r; 1908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 3] = x0i - x2i; 1909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 2] = x0r - x2r; 1910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 3] = x0i + x2i; 1911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 1912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 1913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 2] = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 1914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 3] = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 1915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 1916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 1917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 2] = Mult_W_W(wk3i, x0r) + Mult_W_W(wk3r, x0i); 1918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 3] = Mult_W_W(wk3i, x0i) - Mult_W_W(wk3r, x0r); 1919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftrec4(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 1922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 isplt, j, k, m; 1924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = n; 1926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while (m > 512) { 1927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m >>= 2; 1928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(m, &a[n - m]); 1929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftleaf(m, 1, &a[n - m]); 1931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = 0; 1932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = n - m; j > 0; j -= m) { 1933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k++; 1934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen isplt = cfttree(m, j, k, a); 1935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftleaf(m, isplt, &a[j - m]); 1936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenpicoos_int32 cfttree(picoos_int32 n, picoos_int32 j, picoos_int32 k, PICOFFTSG_FFTTYPE *a) 1941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, isplt, m; 1943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if ((k & 3) != 0) { 1945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen isplt = k & 1; 1946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isplt != 0) { 1947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(n, &a[j - n]); 1948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 1949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl2(n, &a[j - n]); 1950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 1952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = n; 1953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (i = k; (i & 3) == 0; i >>= 2) { 1954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m <<= 2; 1955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen isplt = i & 1; 1957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isplt != 0) { 1958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while (m > 128) { 1959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(m, &a[j - m]); 1960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m >>= 2; 1961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 1963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen while (m > 128) { 1964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl2(m, &a[j - m]); 1965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m >>= 2; 1966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen return isplt; 1970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 1971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftleaf(picoos_int32 n, picoos_int32 isplt, PICOFFTSG_FFTTYPE *a) 1974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 1975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 1976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n == 512) { 1977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(128, a); 1978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(a); 1979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[32]); 1980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[64]); 1981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[96]); 1982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl2(128, &a[128]); 1983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[128]); 1984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[160]); 1985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[192]); 1986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[224]); 1987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(128, &a[256]); 1988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[256]); 1989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[288]); 1990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[320]); 1991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[352]); 1992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isplt != 0) { 1993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(128, &a[384]); 1994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[480]); 1995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 1996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl2(128, &a[384]); 1997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[480]); 1998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 1999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[384]); 2000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[416]); 2001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[448]); 2002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 2003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(64, a); 2004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(a); 2005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[16]); 2006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[32]); 2007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[48]); 2008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl2(64, &a[64]); 2009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[64]); 2010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[80]); 2011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[96]); 2012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[112]); 2013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(64, &a[128]); 2014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[128]); 2015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[144]); 2016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[160]); 2017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[176]); 2018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (isplt != 0) { 2019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl1(64, &a[192]); 2020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[240]); 2021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 2022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftmdl2(64, &a[192]); 2023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[240]); 2024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2025b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[192]); 2026b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[208]); 2027b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[224]); 2028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftmdl1(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 2033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, i0, j, j0, j1, j2, j3, m, mh; 2035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wk1r, wk1i, wk3r, wk3i, 2036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r, wd1i, wd3r, wd3i, ss1, ss3; 2037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 2038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mh = n >> 3; 2040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = 2 * mh; 2041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = m; 2042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] + a[j2]; 2045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] + a[j2 + 1]; 2046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[j2]; 2047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[j2 + 1]; 2048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 2049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 2050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 2051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 2052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + x2r; 2053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i + x2i; 2054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 2055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i - x2i; 2056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = x1r - x3i; 2057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = x1i + x3r; 2058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = x1r + x3i; 2059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = x1i - x3r; 2060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r = (PICOFFTSG_FFTTYPE)(PICODSP_WGT_SHIFT); 2061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1i = 0; 2062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3r = (PICOFFTSG_FFTTYPE)(PICODSP_WGT_SHIFT); 2063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3i = 0; 2064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r = (PICOFFTSG_FFTTYPE) (0.980785250664 *PICODSP_WGT_SHIFT); 2065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i = (PICOFFTSG_FFTTYPE) (0.195090323687 *PICODSP_WGT_SHIFT); 2066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss1 = (PICOFFTSG_FFTTYPE) (0.390180647373 *PICODSP_WGT_SHIFT); 2067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i = (PICOFFTSG_FFTTYPE) (-0.555570185184 *PICODSP_WGT_SHIFT); 2068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r = (PICOFFTSG_FFTTYPE) (0.831469595432 *PICODSP_WGT_SHIFT); 2069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss3 = (PICOFFTSG_FFTTYPE) (-1.111140370369 *PICODSP_WGT_SHIFT); 2070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = 0; 2072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (;;) { 2073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = i + CDFT_LOOP_DIV_4; 2074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 > mh - 4) { 2075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = mh - 4; 2076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = i + 2; j < i0; j += 4) { 2078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r -= Mult_W_W(ss1, wk1i); 2079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1i += Mult_W_W(ss1, wk1r); 2080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3r -= Mult_W_W(ss3, wk3i); 2081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3i += Mult_W_W(ss3, wk3r); 2082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 2083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j] + a[j2]; 2086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j + 1] + a[j2 + 1]; 2087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j] - a[j2]; 2088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j + 1] - a[j2 + 1]; 2089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 2090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 2091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 2092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 2093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = x0r + x2r; 2094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = x0i + x2i; 2095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 2096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i - x2i; 2097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2098b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2099b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = Mult_W_W(wk3r, x0r) + Mult_W_W(wk3i, x0i); 2104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = Mult_W_W(wk3r, x0i) - Mult_W_W(wk3i, x0r); 2105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j + 2] + a[j2 + 2]; 2106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j + 3] + a[j2 + 3]; 2107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j + 2] - a[j2 + 2]; 2108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j + 3] - a[j2 + 3]; 2109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 + 2] + a[j3 + 2]; 2110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 3] + a[j3 + 3]; 2111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 + 2] - a[j3 + 2]; 2112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 3] - a[j3 + 3]; 2113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 2] = x0r + x2r; 2114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 3] = x0i + x2i; 2115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 2] = x0r - x2r; 2116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 3] = x0i - x2i; 2117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 2] = Mult_W_W(wd1r, x0r) - Mult_W_W(wd1i, x0i); 2120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 3] = Mult_W_W(wd1r, x0i) + Mult_W_W(wd1i, x0r); 2121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 2] = Mult_W_W(wd3r, x0r) + Mult_W_W(wd3i, x0i); 2124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 3] = Mult_W_W(wd3r, x0i) - Mult_W_W(wd3i, x0r); 2125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = m - j; 2126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j0 + m; 2127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0] + a[j2]; 2130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 + 1] + a[j2 + 1]; 2131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0] - a[j2]; 2132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 + 1] - a[j2 + 1]; 2133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 2134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 2135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 2136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 2137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0] = x0r + x2r; 2138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 1] = x0i + x2i; 2139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 2140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i - x2i; 2141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = Mult_W_W(wk3i, x0r) + Mult_W_W(wk3r, x0i); 2148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = Mult_W_W(wk3i, x0i) - Mult_W_W(wk3r, x0r); 2149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 - 2] + a[j2 - 2]; 2150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 - 1] + a[j2 - 1]; 2151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 - 2] - a[j2 - 2]; 2152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 - 1] - a[j2 - 1]; 2153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 - 2] + a[j3 - 2]; 2154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 - 1] + a[j3 - 1]; 2155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 - 2] - a[j3 - 2]; 2156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 - 1] - a[j3 - 1]; 2157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 2] = x0r + x2r; 2158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 1] = x0i + x2i; 2159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 2] = x0r - x2r; 2160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = x0i - x2i; 2161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 2] = Mult_W_W(wd1i, x0r) - Mult_W_W(wd1r, x0i); 2164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 1] = Mult_W_W(wd1i, x0i) + Mult_W_W(wd1r, x0r); 2165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 2] = Mult_W_W(wd3i, x0r) + Mult_W_W(wd3r, x0i); 2168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 1] = Mult_W_W(wd3i, x0i) - Mult_W_W(wd3r, x0r); 2169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r -= Mult_W_W(ss1, wd1i); 2170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i += Mult_W_W(ss1, wd1r); 2171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r -= Mult_W_W(ss3, wd3i); 2172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i += Mult_W_W(ss3, wd3r); 2173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 == mh - 4) { 2175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 2176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r = WR5000; 2179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = mh; 2180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j0 + m; 2181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 - 2] + a[j2 - 2]; 2184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 - 1] + a[j2 - 1]; 2185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 - 2] - a[j2 - 2]; 2186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 - 1] - a[j2 - 1]; 2187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 - 2] + a[j3 - 2]; 2188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 - 1] + a[j3 - 1]; 2189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 - 2] - a[j3 - 2]; 2190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 - 1] - a[j3 - 1]; 2191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 2] = x0r + x2r; 2192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 1] = x0i + x2i; 2193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 2] = x0r - x2r; 2194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = x0i - x2i; 2195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 2] = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 1] = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 2] = Mult_W_W(wk3r, x0r) + Mult_W_W(wk3i, x0i); 2202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 1] = Mult_W_W(wk3r, x0i) - Mult_W_W(wk3i, x0r); 2203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0] + a[j2]; 2204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 + 1] + a[j2 + 1]; 2205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0] - a[j2]; 2206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 + 1] - a[j2 + 1]; 2207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] + a[j3]; 2208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3 + 1]; 2209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] - a[j3]; 2210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3 + 1]; 2211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0] = x0r + x2r; 2212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 1] = x0i + x2i; 2213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - x2r; 2214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i - x2i; 2215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = picofftsg_mult_w_a(wd1r, (x0r - x0i)); 2218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = picofftsg_mult_w_a(wd1r, (x0i + x0r)); 2219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = -picofftsg_mult_w_a(wd1r, (x0r + x0i)); 2222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = -picofftsg_mult_w_a(wd1r, (x0i - x0r)); 2223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 + 2] + a[j2 + 2]; 2224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 + 3] + a[j2 + 3]; 2225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 + 2] - a[j2 + 2]; 2226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 + 3] - a[j2 + 3]; 2227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 + 2] + a[j3 + 2]; 2228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 3] + a[j3 + 3]; 2229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 + 2] - a[j3 + 2]; 2230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 3] - a[j3 + 3]; 2231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 2] = x0r + x2r; 2232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 3] = x0i + x2i; 2233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 2] = x0r - x2r; 2234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 3] = x0i - x2i; 2235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 2] = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 3] = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 2] = Mult_W_W(wk3i, x0r) + Mult_W_W(wk3r, x0i); 2242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 3] = Mult_W_W(wk3i, x0i) - Mult_W_W(wk3r, x0r); 2243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftmdl2(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 2247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, i0, j, j0, j1, j2, j3, m, mh; 2249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wn4r, wk1r, wk1i, wk3r, wk3i, 2250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1r, wl1i, wl3r, wl3i, wd1r, wd1i, wd3r, wd3i, 2251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we1r, we1i, we3r, we3i, ss1, ss3; 2252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y2r, y2i; 2253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen mh = n >> 3; 2255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = 2 * mh; 2256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wn4r = WR5000; 2257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = m; 2258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] - a[j2 + 1]; 2261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] + a[j2]; 2262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] + a[j2 + 1]; 2263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[j2]; 2264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] - a[j3 + 1]; 2265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3]; 2266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] + a[j3 + 1]; 2267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3]; 2268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = picofftsg_mult_w_a(wn4r, (x2r - x2i)); 2269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = picofftsg_mult_w_a(wn4r, (x2i + x2r)); 2270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + y0r; 2271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i + y0i; 2272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = x0r - y0r; 2273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = x0i - y0i; 2274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = picofftsg_mult_w_a(wn4r, (x3r - x3i)); 2275b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = picofftsg_mult_w_a(wn4r, (x3i + x3r)); 2276b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = x1r - y0i; 2277b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = x1i + y0r; 2278b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = x1r + y0i; 2279b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = x1i - y0r; 2280b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1r = PICODSP_WGT_SHIFT; 2281b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1i = 0; 2282b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl3r = PICODSP_WGT_SHIFT; 2283b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl3i = 0; 2284b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we1r = wn4r; 2285b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we1i = wn4r; 2286b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we3r = -wn4r; 2287b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we3i = -wn4r; 2288b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2289b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r = (PICOFFTSG_FFTTYPE)(0.995184719563 *PICODSP_WGT_SHIFT); 2290b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i = (PICOFFTSG_FFTTYPE)(0.098017141223 *PICODSP_WGT_SHIFT); 2291b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r = (PICOFFTSG_FFTTYPE)(0.634393274784 *PICODSP_WGT_SHIFT); 2292b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1i = (PICOFFTSG_FFTTYPE)(0.773010432720 *PICODSP_WGT_SHIFT); 2293b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss1 = (PICOFFTSG_FFTTYPE)(0.196034282446 *PICODSP_WGT_SHIFT); 2294b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i = (PICOFFTSG_FFTTYPE)(-0.290284663439 *PICODSP_WGT_SHIFT); 2295b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r = (PICOFFTSG_FFTTYPE)(0.956940352917 *PICODSP_WGT_SHIFT); 2296b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss3 = (PICOFFTSG_FFTTYPE)(-0.580569326878 *PICODSP_WGT_SHIFT); 2297b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3r = (PICOFFTSG_FFTTYPE)(-0.881921231747 *PICODSP_WGT_SHIFT); 2298b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3i = (PICOFFTSG_FFTTYPE)(-0.471396744251 *PICODSP_WGT_SHIFT); 2299b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2300b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = 0; 2301b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (;;) { 2302b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = i + 4 * CDFT_LOOP_DIV; 2303b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 > mh - 4) { 2304b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = mh - 4; 2305b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2306b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = i + 2; j < i0; j += 4) { 2307b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1r -= Mult_W_W(ss1, wk1i); 2308b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1i += Mult_W_W(ss1, wk1r); 2309b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl3r -= Mult_W_W(ss3, wk3i); 2310b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl3i += Mult_W_W(ss3, wk3r); 2311b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we1r -= Mult_W_W(ss1, wd1i); 2312b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we1i += Mult_W_W(ss1, wd1r); 2313b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we3r -= Mult_W_W(ss3, wd3i); 2314b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen we3i += Mult_W_W(ss3, wd3r); 2315b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j + m; 2316b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2317b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2318b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j] - a[j2 + 1]; 2319b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j + 1] + a[j2]; 2320b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j] + a[j2 + 1]; 2321b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j + 1] - a[j2]; 2322b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] - a[j3 + 1]; 2323b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3]; 2324b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] + a[j3 + 1]; 2325b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3]; 2326b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2327b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2328b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wd1r, x2r) - Mult_W_W(wd1i, x2i); 2329b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wd1r, x2i) + Mult_W_W(wd1i, x2r); 2330b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = y0r + y2r; 2331b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] = y0i + y2i; 2332b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = y0r - y2r; 2333b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = y0i - y2i; 2334b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wk3r, x1r) + Mult_W_W(wk3i, x1i); 2335b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wk3r, x1i) - Mult_W_W(wk3i, x1r); 2336b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wd3r, x3r) + Mult_W_W(wd3i, x3i); 2337b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wd3r, x3i) - Mult_W_W(wd3i, x3r); 2338b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = y0r + y2r; 2339b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = y0i + y2i; 2340b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = y0r - y2r; 2341b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = y0i - y2i; 2342b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j + 2] - a[j2 + 3]; 2343b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j + 3] + a[j2 + 2]; 2344b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j + 2] + a[j2 + 3]; 2345b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j + 3] - a[j2 + 2]; 2346b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 + 2] - a[j3 + 3]; 2347b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 3] + a[j3 + 2]; 2348b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 + 2] + a[j3 + 3]; 2349b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 3] - a[j3 + 2]; 2350b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wl1r, x0r) - Mult_W_W(wl1i, x0i); 2351b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wl1r, x0i) + Mult_W_W(wl1i, x0r); 2352b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(we1r, x2r) - Mult_W_W(we1i, x2i); 2353b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(we1r, x2i) + Mult_W_W(we1i, x2r); 2354b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 2] = y0r + y2r; 2355b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 3] = y0i + y2i; 2356b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 2] = y0r - y2r; 2357b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 3] = y0i - y2i; 2358b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wl3r, x1r) + Mult_W_W(wl3i, x1i); 2359b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wl3r, x1i) - Mult_W_W(wl3i, x1r); 2360b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(we3r, x3r) + Mult_W_W(we3i, x3i); 2361b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(we3r, x3i) - Mult_W_W(we3i, x3r); 2362b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 2] = y0r + y2r; 2363b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 3] = y0i + y2i; 2364b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 2] = y0r - y2r; 2365b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 3] = y0i - y2i; 2366b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = m - j; 2367b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j0 + m; 2368b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2369b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2370b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0] - a[j2 + 1]; 2371b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 + 1] + a[j2]; 2372b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0] + a[j2 + 1]; 2373b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 + 1] - a[j2]; 2374b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] - a[j3 + 1]; 2375b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3]; 2376b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] + a[j3 + 1]; 2377b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3]; 2378b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wd1i, x0r) - Mult_W_W(wd1r, x0i); 2379b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wd1i, x0i) + Mult_W_W(wd1r, x0r); 2380b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wk1i, x2r) - Mult_W_W(wk1r, x2i); 2381b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wk1i, x2i) + Mult_W_W(wk1r, x2r); 2382b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0] = y0r + y2r; 2383b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 1] = y0i + y2i; 2384b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = y0r - y2r; 2385b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = y0i - y2i; 2386b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wd3i, x1r) + Mult_W_W(wd3r, x1i); 2387b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wd3i, x1i) - Mult_W_W(wd3r, x1r); 2388b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wk3i, x3r) + Mult_W_W(wk3r, x3i); 2389b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wk3i, x3i) - Mult_W_W(wk3r, x3r); 2390b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = y0r + y2r; 2391b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = y0i + y2i; 2392b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = y0r - y2r; 2393b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = y0i - y2i; 2394b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 - 2] - a[j2 - 1]; 2395b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 - 1] + a[j2 - 2]; 2396b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 - 2] + a[j2 - 1]; 2397b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 - 1] - a[j2 - 2]; 2398b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 - 2] - a[j3 - 1]; 2399b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 - 1] + a[j3 - 2]; 2400b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 - 2] + a[j3 - 1]; 2401b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 - 1] - a[j3 - 2]; 2402b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(we1i, x0r) - Mult_W_W(we1r, x0i); 2403b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(we1i, x0i) + Mult_W_W(we1r, x0r); 2404b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wl1i, x2r) - Mult_W_W(wl1r, x2i); 2405b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wl1i, x2i) + Mult_W_W(wl1r, x2r); 2406b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 2] = y0r + y2r; 2407b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 1] = y0i + y2i; 2408b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 2] = y0r - y2r; 2409b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = y0i - y2i; 2410b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(we3i, x1r) + Mult_W_W(we3r, x1i); 2411b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(we3i, x1i) - Mult_W_W(we3r, x1r); 2412b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wl3i, x3r) + Mult_W_W(wl3r, x3i); 2413b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wl3i, x3i) - Mult_W_W(wl3r, x3r); 2414b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 2] = y0r + y2r; 2415b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 1] = y0i + y2i; 2416b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 2] = y0r - y2r; 2417b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 1] = y0i - y2i; 2418b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r -= Mult_W_W(ss1, wl1i); 2419b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i += Mult_W_W(ss1, wl1r); 2420b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r -= Mult_W_W(ss3, wl3i); 2421b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i += Mult_W_W(ss3, wl3r); 2422b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1r -= Mult_W_W(ss1, we1i); 2423b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd1i += Mult_W_W(ss1, we1r); 2424b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3r -= Mult_W_W(ss3, we3i); 2425b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wd3i += Mult_W_W(ss3, we3r); 2426b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2427b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 == mh - 4) { 2428b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 2429b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2430b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2431b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1r = WR2500; 2432b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wl1i = WI2500; 2433b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j0 = mh; 2434b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j1 = j0 + m; 2435b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j2 = j1 + m; 2436b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen j3 = j2 + m; 2437b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 - 2] - a[j2 - 1]; 2438b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 - 1] + a[j2 - 2]; 2439b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 - 2] + a[j2 - 1]; 2440b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 - 1] - a[j2 - 2]; 2441b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 - 2] - a[j3 - 1]; 2442b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 - 1] + a[j3 - 2]; 2443b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 - 2] + a[j3 - 1]; 2444b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 - 1] - a[j3 - 2]; 2445b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2446b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2447b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wd1r, x2r) - Mult_W_W(wd1i, x2i); 2448b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wd1r, x2i) + Mult_W_W(wd1i, x2r); 2449b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 2] = y0r + y2r; 2450b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 - 1] = y0i + y2i; 2451b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 2] = y0r - y2r; 2452b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 - 1] = y0i - y2i; 2453b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wk3r, x1r) + Mult_W_W(wk3i, x1i); 2454b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wk3r, x1i) - Mult_W_W(wk3i, x1r); 2455b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wd3r, x3r) + Mult_W_W(wd3i, x3i); 2456b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wd3r, x3i) - Mult_W_W(wd3i, x3r); 2457b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 2] = y0r + y2r; 2458b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 - 1] = y0i + y2i; 2459b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 2] = y0r - y2r; 2460b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 - 1] = y0i - y2i; 2461b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0] - a[j2 + 1]; 2462b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 + 1] + a[j2]; 2463b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0] + a[j2 + 1]; 2464b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 + 1] - a[j2]; 2465b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1] - a[j3 + 1]; 2466b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 1] + a[j3]; 2467b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1] + a[j3 + 1]; 2468b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 1] - a[j3]; 2469b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wl1r, x0r) - Mult_W_W(wl1i, x0i); 2470b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wl1r, x0i) + Mult_W_W(wl1i, x0r); 2471b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wl1i, x2r) - Mult_W_W(wl1r, x2i); 2472b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wl1i, x2i) + Mult_W_W(wl1r, x2r); 2473b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0] = y0r + y2r; 2474b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 1] = y0i + y2i; 2475b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1] = y0r - y2r; 2476b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 1] = y0i - y2i; 2477b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wl1i, x1r) - Mult_W_W(wl1r, x1i); 2478b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wl1i, x1i) + Mult_W_W(wl1r, x1r); 2479b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wl1r, x3r) - Mult_W_W(wl1i, x3i); 2480b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wl1r, x3i) + Mult_W_W(wl1i, x3r); 2481b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2] = y0r - y2r; 2482b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 1] = y0i - y2i; 2483b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3] = y0r + y2r; 2484b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 1] = y0i + y2i; 2485b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[j0 + 2] - a[j2 + 3]; 2486b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[j0 + 3] + a[j2 + 2]; 2487b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[j0 + 2] + a[j2 + 3]; 2488b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[j0 + 3] - a[j2 + 2]; 2489b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[j1 + 2] - a[j3 + 3]; 2490b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[j1 + 3] + a[j3 + 2]; 2491b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[j1 + 2] + a[j3 + 3]; 2492b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[j1 + 3] - a[j3 + 2]; 2493b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wd1i, x0r) - Mult_W_W(wd1r, x0i); 2494b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wd1i, x0i) + Mult_W_W(wd1r, x0r); 2495b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wk1i, x2r) - Mult_W_W(wk1r, x2i); 2496b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wk1i, x2i) + Mult_W_W(wk1r, x2r); 2497b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 2] = y0r + y2r; 2498b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j0 + 3] = y0i + y2i; 2499b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 2] = y0r - y2r; 2500b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j1 + 3] = y0i - y2i; 2501b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = Mult_W_W(wd3i, x1r) + Mult_W_W(wd3r, x1i); 2502b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = Mult_W_W(wd3i, x1i) - Mult_W_W(wd3r, x1r); 2503b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = Mult_W_W(wk3i, x3r) + Mult_W_W(wk3r, x3i); 2504b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = Mult_W_W(wk3i, x3i) - Mult_W_W(wk3r, x3r); 2505b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 2] = y0r + y2r; 2506b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j2 + 3] = y0i + y2i; 2507b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 2] = y0r - y2r; 2508b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j3 + 3] = y0i - y2i; 2509b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2510b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2511b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2512b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftfx41(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 2513b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2514b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2515b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (n == 128) { 2516b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(a); 2517b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf162(&a[32]); 2518b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[64]); 2519b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf161(&a[96]); 2520b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } else { 2521b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(a); 2522b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf082(&a[16]); 2523b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[32]); 2524b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen cftf081(&a[48]); 2525b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 2526b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2527b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2528b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2529b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf161(PICOFFTSG_FFTTYPE *a) 2530b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2531b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wn4r, wk1r, wk1i, 2532b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, 2533b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, 2534b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i, 2535b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i, 2536b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i; 2537b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2538b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wn4r = WR5000; 2539b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r = WR2500; 2540b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i = WI2500; 2541b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] + a[16]; 2542b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] + a[17]; 2543b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[16]; 2544b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[17]; 2545b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[8] + a[24]; 2546b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[9] + a[25]; 2547b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[8] - a[24]; 2548b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[9] - a[25]; 2549b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = x0r + x2r; 2550b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = x0i + x2i; 2551b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r = x0r - x2r; 2552b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4i = x0i - x2i; 2553b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y8r = x1r - x3i; 2554b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y8i = x1i + x3r; 2555b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y12r = x1r + x3i; 2556b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y12i = x1i - x3r; 2557b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[2] + a[18]; 2558b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[3] + a[19]; 2559b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[2] - a[18]; 2560b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[3] - a[19]; 2561b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[10] + a[26]; 2562b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[11] + a[27]; 2563b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[10] - a[26]; 2564b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[11] - a[27]; 2565b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1r = x0r + x2r; 2566b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1i = x0i + x2i; 2567b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5r = x0r - x2r; 2568b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5i = x0i - x2i; 2569b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2570b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2571b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y9r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2572b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y9i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2573b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2574b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2575b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y13r = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2576b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y13i = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2577b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[4] + a[20]; 2578b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[5] + a[21]; 2579b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[4] - a[20]; 2580b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[5] - a[21]; 2581b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[12] + a[28]; 2582b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[13] + a[29]; 2583b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[12] - a[28]; 2584b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[13] - a[29]; 2585b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = x0r + x2r; 2586b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = x0i + x2i; 2587b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6r = x0r - x2r; 2588b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6i = x0i - x2i; 2589b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2590b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2591b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y10r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2592b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y10i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2593b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2594b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2595b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y14r = picofftsg_mult_w_a(wn4r, (x0r + x0i)); 2596b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y14i = picofftsg_mult_w_a(wn4r, (x0i - x0r)); 2597b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[6] + a[22]; 2598b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[7] + a[23]; 2599b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[6] - a[22]; 2600b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[7] - a[23]; 2601b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[14] + a[30]; 2602b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[15] + a[31]; 2603b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[14] - a[30]; 2604b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[15] - a[31]; 2605b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3r = x0r + x2r; 2606b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3i = x0i + x2i; 2607b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7r = x0r - x2r; 2608b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7i = x0i - x2i; 2609b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2610b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2611b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y11r = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2612b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y11i = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2613b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r + x3i; 2614b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i - x3r; 2615b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y15r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2616b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y15i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2617b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y12r - y14r; 2618b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y12i - y14i; 2619b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y12r + y14r; 2620b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y12i + y14i; 2621b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y13r - y15r; 2622b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y13i - y15i; 2623b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = y13r + y15r; 2624b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = y13i + y15i; 2625b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[24] = x0r + x2r; 2626b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[25] = x0i + x2i; 2627b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[26] = x0r - x2r; 2628b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[27] = x0i - x2i; 2629b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[28] = x1r - x3i; 2630b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[29] = x1i + x3r; 2631b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[30] = x1r + x3i; 2632b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[31] = x1i - x3r; 2633b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y8r + y10r; 2634b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y8i + y10i; 2635b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y8r - y10r; 2636b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y8i - y10i; 2637b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y9r + y11r; 2638b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y9i + y11i; 2639b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = y9r - y11r; 2640b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = y9i - y11i; 2641b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[16] = x0r + x2r; 2642b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[17] = x0i + x2i; 2643b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[18] = x0r - x2r; 2644b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[19] = x0i - x2i; 2645b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[20] = x1r - x3i; 2646b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[21] = x1i + x3r; 2647b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[22] = x1r + x3i; 2648b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[23] = x1i - x3r; 2649b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y5r - y7i; 2650b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y5i + y7r; 2651b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2652b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2653b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y5r + y7i; 2654b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y5i - y7r; 2655b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2656b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2657b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y4r - y6i; 2658b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y4i + y6r; 2659b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y4r + y6i; 2660b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y4i - y6r; 2661b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x0r + x2r; 2662b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x0i + x2i; 2663b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = x0r - x2r; 2664b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = x0i - x2i; 2665b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = x1r - x3i; 2666b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = x1i + x3r; 2667b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = x1r + x3i; 2668b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = x1i - x3r; 2669b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y0r + y2r; 2670b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y0i + y2i; 2671b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y0r - y2r; 2672b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y0i - y2i; 2673b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y1r + y3r; 2674b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y1i + y3i; 2675b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = y1r - y3r; 2676b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = y1i - y3i; 2677b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + x2r; 2678b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i + x2i; 2679b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x0r - x2r; 2680b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x0i - x2i; 2681b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x1r - x3i; 2682b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x1i + x3r; 2683b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x1r + x3i; 2684b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x1i - x3r; 2685b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2686b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2687b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2688b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf162(PICOFFTSG_FFTTYPE *a) 2689b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2690b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wn4r, wk1r, wk1i, wk2r, wk2i, wk3r, wk3i, 2691b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r, x0i, x1r, x1i, x2r, x2i, 2692b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, 2693b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i, 2694b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y8r, y8i, y9r, y9i, y10r, y10i, y11r, y11i, 2695b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y12r, y12i, y13r, y13i, y14r, y14i, y15r, y15i; 2696b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2697b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wn4r = WR5000; 2698b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r = WR1250; 2699b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i = WI1250; 2700b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk2r = WR2500; 2701b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk2i = WI2500; 2702b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3r = WR3750; 2703b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk3i = WI3750; 2704b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[17]; 2705b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] + a[16]; 2706b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[8] - a[25]; 2707b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[9] + a[24]; 2708b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2709b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2710b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = x1r + x2r; 2711b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = x1i + x2i; 2712b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r = x1r - x2r; 2713b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4i = x1i - x2i; 2714b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] + a[17]; 2715b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[16]; 2716b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[8] + a[25]; 2717b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[9] - a[24]; 2718b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2719b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2720b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y8r = x1r - x2i; 2721b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y8i = x1i + x2r; 2722b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y12r = x1r + x2i; 2723b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y12i = x1i - x2r; 2724b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[2] - a[19]; 2725b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[3] + a[18]; 2726b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2727b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2728b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[10] - a[27]; 2729b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[11] + a[26]; 2730b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = Mult_W_W(wk3i, x0r) - Mult_W_W(wk3r, x0i); 2731b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = Mult_W_W(wk3i, x0i) + Mult_W_W(wk3r, x0r); 2732b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1r = x1r + x2r; 2733b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1i = x1i + x2i; 2734b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5r = x1r - x2r; 2735b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5i = x1i - x2i; 2736b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[2] + a[19]; 2737b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[3] - a[18]; 2738b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = Mult_W_W(wk3r, x0r) - Mult_W_W(wk3i, x0i); 2739b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = Mult_W_W(wk3r, x0i) + Mult_W_W(wk3i, x0r); 2740b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[10] + a[27]; 2741b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[11] - a[26]; 2742b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = Mult_W_W(wk1r, x0r) + Mult_W_W(wk1i, x0i); 2743b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = Mult_W_W(wk1r, x0i) - Mult_W_W(wk1i, x0r); 2744b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y9r = x1r - x2r; 2745b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y9i = x1i - x2i; 2746b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y13r = x1r + x2r; 2747b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y13i = x1i + x2i; 2748b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[4] - a[21]; 2749b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[5] + a[20]; 2750b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = Mult_W_W(wk2r, x0r) - Mult_W_W(wk2i, x0i); 2751b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = Mult_W_W(wk2r, x0i) + Mult_W_W(wk2i, x0r); 2752b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[12] - a[29]; 2753b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[13] + a[28]; 2754b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = Mult_W_W(wk2i, x0r) - Mult_W_W(wk2r, x0i); 2755b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = Mult_W_W(wk2i, x0i) + Mult_W_W(wk2r, x0r); 2756b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = x1r + x2r; 2757b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = x1i + x2i; 2758b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6r = x1r - x2r; 2759b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6i = x1i - x2i; 2760b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[4] + a[21]; 2761b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[5] - a[20]; 2762b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = Mult_W_W(wk2i, x0r) - Mult_W_W(wk2r, x0i); 2763b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = Mult_W_W(wk2i, x0i) + Mult_W_W(wk2r, x0r); 2764b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[12] + a[29]; 2765b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[13] - a[28]; 2766b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = Mult_W_W(wk2r, x0r) - Mult_W_W(wk2i, x0i); 2767b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = Mult_W_W(wk2r, x0i) + Mult_W_W(wk2i, x0r); 2768b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y10r = x1r - x2r; 2769b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y10i = x1i - x2i; 2770b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y14r = x1r + x2r; 2771b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y14i = x1i + x2i; 2772b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[6] - a[23]; 2773b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[7] + a[22]; 2774b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = Mult_W_W(wk3r, x0r) - Mult_W_W(wk3i, x0i); 2775b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = Mult_W_W(wk3r, x0i) + Mult_W_W(wk3i, x0r); 2776b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[14] - a[31]; 2777b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[15] + a[30]; 2778b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2779b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2780b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3r = x1r + x2r; 2781b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3i = x1i + x2i; 2782b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7r = x1r - x2r; 2783b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7i = x1i - x2i; 2784b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[6] + a[23]; 2785b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[7] - a[22]; 2786b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = Mult_W_W(wk1i, x0r) + Mult_W_W(wk1r, x0i); 2787b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = Mult_W_W(wk1i, x0i) - Mult_W_W(wk1r, x0r); 2788b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[14] + a[31]; 2789b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[15] - a[30]; 2790b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = Mult_W_W(wk3i, x0r) - Mult_W_W(wk3r, x0i); 2791b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = Mult_W_W(wk3i, x0i) + Mult_W_W(wk3r, x0r); 2792b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y11r = x1r + x2r; 2793b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y11i = x1i + x2i; 2794b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y15r = x1r - x2r; 2795b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y15i = x1i - x2i; 2796b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y0r + y2r; 2797b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y0i + y2i; 2798b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y1r + y3r; 2799b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y1i + y3i; 2800b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x1r + x2r; 2801b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x1i + x2i; 2802b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x1r - x2r; 2803b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x1i - x2i; 2804b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y0r - y2r; 2805b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y0i - y2i; 2806b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y1r - y3r; 2807b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y1i - y3i; 2808b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x1r - x2i; 2809b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x1i + x2r; 2810b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x1r + x2i; 2811b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x1i - x2r; 2812b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y4r - y6i; 2813b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y4i + y6r; 2814b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y5r - y7i; 2815b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y5i + y7r; 2816b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2817b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2818b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x1r + x2r; 2819b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x1i + x2i; 2820b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = x1r - x2r; 2821b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = x1i - x2i; 2822b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y4r + y6i; 2823b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y4i - y6r; 2824b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y5r + y7i; 2825b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y5i - y7r; 2826b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2827b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2828b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = x1r - x2i; 2829b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = x1i + x2r; 2830b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = x1r + x2i; 2831b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = x1i - x2r; 2832b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y8r + y10r; 2833b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y8i + y10i; 2834b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y9r - y11r; 2835b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y9i - y11i; 2836b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[16] = x1r + x2r; 2837b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[17] = x1i + x2i; 2838b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[18] = x1r - x2r; 2839b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[19] = x1i - x2i; 2840b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y8r - y10r; 2841b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y8i - y10i; 2842b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = y9r + y11r; 2843b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = y9i + y11i; 2844b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[20] = x1r - x2i; 2845b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[21] = x1i + x2r; 2846b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[22] = x1r + x2i; 2847b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[23] = x1i - x2r; 2848b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y12r - y14i; 2849b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y12i + y14r; 2850b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y13r + y15i; 2851b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y13i - y15r; 2852b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2853b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2854b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[24] = x1r + x2r; 2855b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[25] = x1i + x2i; 2856b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[26] = x1r - x2r; 2857b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[27] = x1i - x2i; 2858b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y12r + y14i; 2859b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y12i - y14r; 2860b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y13r - y15i; 2861b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y13i + y15r; 2862b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2863b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2864b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[28] = x1r - x2i; 2865b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[29] = x1i + x2r; 2866b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[30] = x1r + x2i; 2867b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[31] = x1i - x2r; 2868b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2869b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2870b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2871b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf081(PICOFFTSG_FFTTYPE *a) 2872b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2873b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, 2874b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, 2875b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; 2876b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2877b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wn4r = WR5000; 2878b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] + a[8]; 2879b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] + a[9]; 2880b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[8]; 2881b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[9]; 2882b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[4] + a[12]; 2883b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[5] + a[13]; 2884b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[4] - a[12]; 2885b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[5] - a[13]; 2886b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = x0r + x2r; 2887b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = x0i + x2i; 2888b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = x0r - x2r; 2889b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = x0i - x2i; 2890b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1r = x1r - x3i; 2891b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1i = x1i + x3r; 2892b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3r = x1r + x3i; 2893b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3i = x1i - x3r; 2894b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[2] + a[10]; 2895b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[3] + a[11]; 2896b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[2] - a[10]; 2897b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[3] - a[11]; 2898b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[6] + a[14]; 2899b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[7] + a[15]; 2900b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[6] - a[14]; 2901b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[7] - a[15]; 2902b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r = x0r + x2r; 2903b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4i = x0i + x2i; 2904b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6r = x0r - x2r; 2905b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6i = x0i - x2i; 2906b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = x1r - x3i; 2907b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = x1i + x3r; 2908b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = x1r + x3i; 2909b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = x1i - x3r; 2910b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2911b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5i = picofftsg_mult_w_a(wn4r, (x0r + x0i)); 2912b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7r = picofftsg_mult_w_a(wn4r, (x2r - x2i)); 2913b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7i = picofftsg_mult_w_a(wn4r, (x2r + x2i)); 2914b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = y1r + y5r; 2915b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = y1i + y5i; 2916b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = y1r - y5r; 2917b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = y1i - y5i; 2918b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = y3r - y7i; 2919b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = y3i + y7r; 2920b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = y3r + y7i; 2921b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = y3i - y7r; 2922b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = y0r + y4r; 2923b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = y0i + y4i; 2924b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = y0r - y4r; 2925b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = y0i - y4i; 2926b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = y2r - y6i; 2927b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = y2i + y6r; 2928b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = y2r + y6i; 2929b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = y2i - y6r; 2930b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 2931b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2932b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2933b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf082(PICOFFTSG_FFTTYPE *a) 2934b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 2935b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wn4r, wk1r, wk1i, x0r, x0i, x1r, x1i, 2936b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r, y0i, y1r, y1i, y2r, y2i, y3r, y3i, 2937b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i; 2938b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 2939b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wn4r = WR5000; 2940b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1r = WR2500; 2941b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wk1i = WI2500; 2942b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0r = a[0] - a[9]; 2943b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y0i = a[1] + a[8]; 2944b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1r = a[0] + a[9]; 2945b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y1i = a[1] - a[8]; 2946b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[4] - a[13]; 2947b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[5] + a[12]; 2948b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2949b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y2i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2950b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[4] + a[13]; 2951b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[5] - a[12]; 2952b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3r = picofftsg_mult_w_a(wn4r, (x0r - x0i)); 2953b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y3i = picofftsg_mult_w_a(wn4r, (x0i + x0r)); 2954b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[2] - a[11]; 2955b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[3] + a[10]; 2956b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2957b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y4i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2958b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[2] + a[11]; 2959b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[3] - a[10]; 2960b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5r = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2961b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y5i = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2962b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[6] - a[15]; 2963b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[7] + a[14]; 2964b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6r = Mult_W_W(wk1i, x0r) - Mult_W_W(wk1r, x0i); 2965b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y6i = Mult_W_W(wk1i, x0i) + Mult_W_W(wk1r, x0r); 2966b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[6] + a[15]; 2967b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[7] - a[14]; 2968b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7r = Mult_W_W(wk1r, x0r) - Mult_W_W(wk1i, x0i); 2969b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen y7i = Mult_W_W(wk1r, x0i) + Mult_W_W(wk1i, x0r); 2970b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y0r + y2r; 2971b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y0i + y2i; 2972b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y4r + y6r; 2973b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y4i + y6i; 2974b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + x1r; 2975b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i + x1i; 2976b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x0r - x1r; 2977b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x0i - x1i; 2978b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y0r - y2r; 2979b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y0i - y2i; 2980b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y4r - y6r; 2981b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y4i - y6i; 2982b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x0r - x1i; 2983b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x0i + x1r; 2984b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x0r + x1i; 2985b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x0i - x1r; 2986b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y1r - y3i; 2987b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y1i + y3r; 2988b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y5r - y7r; 2989b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y5i - y7i; 2990b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[8] = x0r + x1r; 2991b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[9] = x0i + x1i; 2992b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[10] = x0r - x1r; 2993b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[11] = x0i - x1i; 2994b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = y1r + y3i; 2995b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = y1i - y3r; 2996b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = y5r + y7r; 2997b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = y5i + y7i; 2998b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[12] = x0r - x1i; 2999b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[13] = x0i + x1r; 3000b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[14] = x0r + x1i; 3001b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[15] = x0i - x1r; 3002b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3003b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3004b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3005b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftf040(PICOFFTSG_FFTTYPE *a) 3006b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3007b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 3008b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3009b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] + a[4]; 3010b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] + a[5]; 3011b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[4]; 3012b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[5]; 3013b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[2] + a[6]; 3014b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[3] + a[7]; 3015b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[2] - a[6]; 3016b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[3] - a[7]; 3017b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + x2r; 3018b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i + x2i; 3019b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x1r - x3i; 3020b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x1i + x3r; 3021b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x0r - x2r; 3022b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x0i - x2i; 3023b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x1r + x3i; 3024b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x1i - x3r; 3025b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3026b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3027b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3028b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftb040(PICOFFTSG_FFTTYPE *a) 3029b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3030b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; 3031b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3032b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] + a[4]; 3033b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] + a[5]; 3034b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1r = a[0] - a[4]; 3035b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x1i = a[1] - a[5]; 3036b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2r = a[2] + a[6]; 3037b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x2i = a[3] + a[7]; 3038b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3r = a[2] - a[6]; 3039b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x3i = a[3] - a[7]; 3040b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] = x0r + x2r; 3041b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = x0i + x2i; 3042b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x1r + x3i; 3043b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x1i - x3r; 3044b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[4] = x0r - x2r; 3045b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[5] = x0i - x2i; 3046b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[6] = x1r - x3i; 3047b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[7] = x1i + x3r; 3048b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3049b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3050b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3051b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid cftx020(PICOFFTSG_FFTTYPE *a) 3052b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3053b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE x0r, x0i; 3054b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3055b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0r = a[0] - a[2]; 3056b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen x0i = a[1] - a[3]; 3057b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[0] += a[2]; 3058b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] += a[3]; 3059b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] = x0r; 3060b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = x0i; 3061b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3062b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3063b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3064b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid rftfsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 3065b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3066b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, i0, j, k; 3067b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE w1r, w1i, wkr, wki, wdr, wdi, ss, xr, xi, yr, yi; 3068b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3069b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wkr = 0; 3070b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki = 0; 3071b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3072b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen switch (n) { 3073b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 8 : 3074b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi=(PICOFFTSG_FFTTYPE)(0.353553414345*PICODSP_WGT_SHIFT); wdr=(PICOFFTSG_FFTTYPE)(0.146446630359*PICODSP_WGT_SHIFT); 3075b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1r=(PICOFFTSG_FFTTYPE)(0.707106709480*PICODSP_WGT_SHIFT); w1i=(PICOFFTSG_FFTTYPE)(0.707106828690*PICODSP_WGT_SHIFT); 3076b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss =(PICOFFTSG_FFTTYPE)(1.414213657379*PICODSP_WGT_SHIFT); break; 3077b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 16 : 3078b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi=(PICOFFTSG_FFTTYPE)(0.191341713071*PICODSP_WGT_SHIFT); wdr=(PICOFFTSG_FFTTYPE)(0.038060232997*PICODSP_WGT_SHIFT); 3079b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1r=(PICOFFTSG_FFTTYPE)(0.923879504204*PICODSP_WGT_SHIFT); w1i=(PICOFFTSG_FFTTYPE)(0.382683426142*PICODSP_WGT_SHIFT); 3080b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss =(PICOFFTSG_FFTTYPE)(0.765366852283*PICODSP_WGT_SHIFT); break; 3081b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 32 : 3082b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi=(PICOFFTSG_FFTTYPE)(0.097545161843*PICODSP_WGT_SHIFT); wdr=(PICOFFTSG_FFTTYPE)(0.009607359767*PICODSP_WGT_SHIFT); 3083b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1r=(PICOFFTSG_FFTTYPE)(0.980785250664*PICODSP_WGT_SHIFT); w1i=(PICOFFTSG_FFTTYPE)(0.195090323687*PICODSP_WGT_SHIFT); 3084b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss =(PICOFFTSG_FFTTYPE)(0.390180647373*PICODSP_WGT_SHIFT); break; 3085b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 64 : 3086b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi=(PICOFFTSG_FFTTYPE)(0.049008570611*PICODSP_WGT_SHIFT); wdr=(PICOFFTSG_FFTTYPE)(0.002407636726*PICODSP_WGT_SHIFT); 3087b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1r=(PICOFFTSG_FFTTYPE)(0.995184719563*PICODSP_WGT_SHIFT); w1i=(PICOFFTSG_FFTTYPE)(0.098017141223*PICODSP_WGT_SHIFT); 3088b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss =(PICOFFTSG_FFTTYPE)(0.196034282446*PICODSP_WGT_SHIFT); break; 3089b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen default : 3090b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr = 0; wdi = 0; ss = 0; 3091b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 3092b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3093b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3094b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = n >> 1; 3095b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (;;) { 3096b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = i - RDFT_LOOP_DIV_4; 3097b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 < 4) { 3098b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = 4; 3099b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3100b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = i - 4; j >= i0; j -= 4) { 3101b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = n - j; 3102b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j + 2] - a[k - 2]; 3103b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j + 3] + a[k - 1]; 3104b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wdr, xr) - Mult_W_W(wdi, xi); 3105b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wdr, xi) + Mult_W_W(wdi, xr); 3106b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 2] -= yr; 3107b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 3] -= yi; 3108b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k - 2] += yr; 3109b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k - 1] -= yi; 3110b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wkr += Mult_W_W(ss, wdi); 3111b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki += picofftsg_mult_w_w(ss, (PICOFFTSG_WGT_SHIFT2 - wdr)); 3112b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j] - a[k]; 3113b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j + 1] + a[k + 1]; 3114b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wkr, xr) - Mult_W_W(wki, xi); 3115b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wkr, xi) + Mult_W_W(wki, xr); 3116b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] -= yr; 3117b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] -= yi; 3118b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] += yr; 3119b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] -= yi; 3120b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr += Mult_W_W(ss, wki); 3121b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi += picofftsg_mult_w_w(ss, (PICOFFTSG_WGT_SHIFT2 - wkr)); 3122b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3123b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 == 4) { 3124b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 3125b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3126b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3127b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3128b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[2] - a[n - 2]; 3129b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[3] + a[n - 1]; 3130b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wdr, xr) - Mult_W_W(wdi, xi); 3131b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wdr, xi) + Mult_W_W(wdi, xr); 3132b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3133b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] -= yr; 3134b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] -= yi; 3135b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[n - 2] += yr; 3136b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[n - 1] -= yi; 3137b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3138b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3139b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3140b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3141b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3142b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid rftbsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 3143b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3144b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, i0, j, k; 3145b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE w1r, w1i, wkr, wki, wdr, wdi, ss, xr, xi, yr, yi; 3146b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wkr = 0; 3147b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki = 0; 3148b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi=(PICOFFTSG_FFTTYPE)(0.012270614505*PICODSP_WGT_SHIFT); 3149b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr=(PICOFFTSG_FFTTYPE)(0.000150590655*PICODSP_WGT_SHIFT); 3150b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1r=(PICOFFTSG_FFTTYPE)(0.999698817730*PICODSP_WGT_SHIFT); 3151b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1i=(PICOFFTSG_FFTTYPE)(0.024541229010*PICODSP_WGT_SHIFT); 3152b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen ss=(PICOFFTSG_FFTTYPE)(0.049082458019*PICODSP_WGT_SHIFT); 3153b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3154b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = n >> 1; 3155b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (;;) { 3156b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = i - RDFT_LOOP_DIV4; 3157b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 < 4) { 3158b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = 4; 3159b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3160b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = i - 4; j >= i0; j -= 4) { 3161b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = n - j; 3162b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j + 2] - a[k - 2]; 3163b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j + 3] + a[k - 1]; 3164b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wdr, xr) + Mult_W_W(wdi, xi); 3165b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wdr, xi) - Mult_W_W(wdi, xr); 3166b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 2] -= yr; 3167b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 3] -= yi; 3168b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k - 2] += yr; 3169b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k - 1] -= yi; 3170b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wkr += Mult_W_W(ss, wdi); 3171b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki += picofftsg_mult_w_w(ss, (PICOFFTSG_WGT_SHIFT2 - wdr)); 3172b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[j] - a[k]; 3173b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[j + 1] + a[k + 1]; 3174b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wkr, xr) + Mult_W_W(wki, xi); 3175b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wkr, xi) - Mult_W_W(wki, xr); 3176b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] -= yr; 3177b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j + 1] -= yi; 3178b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] += yr; 3179b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] -= yi; 3180b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr += Mult_W_W(ss, wki); 3181b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi += picofftsg_mult_w_w(ss, (PICOFFTSG_WGT_SHIFT2 - wkr)); 3182b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3183b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 == 4) { 3184b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 3185b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3186b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3187b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = a[2] - a[n - 2]; 3188b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = a[3] + a[n - 1]; 3189b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wdr, xr) + Mult_W_W(wdi, xi); 3190b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wdr, xi) - Mult_W_W(wdi, xr); 3191b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[2] -= yr; 3192b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] -= yi; 3193b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[n - 2] += yr; 3194b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[n - 1] -= yi; 3195b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3196b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3197b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3198b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid dctsub(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 3199b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3200b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 i, i0, j, k, m; 3201b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE w1r, w1i, wkr, wki, wdr, wdi, ss, xr, xi, yr, yi; 3202b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wkr = (PICOFFTSG_FFTTYPE)(0.5*PICODSP_WGT_SHIFT); 3203b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki = (PICOFFTSG_FFTTYPE)(0.5*PICODSP_WGT_SHIFT); 3204b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3205b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen switch (n) { 3206b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 8 : wdi=(PICOFFTSG_FFTTYPE)(0.587937772274*PICODSP_WGT_SHIFT); 3207b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr=(PICOFFTSG_FFTTYPE)(0.392847478390*PICODSP_WGT_SHIFT); w1r=(PICOFFTSG_FFTTYPE)(0.980785250664*PICODSP_WGT_SHIFT); 3208b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1i=(PICOFFTSG_FFTTYPE)(0.195090323687*PICODSP_WGT_SHIFT); ss =(PICOFFTSG_FFTTYPE)(0.390180647373*PICODSP_WGT_SHIFT); break; 3209b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 16 : wdi=(PICOFFTSG_FFTTYPE)(0.546600937843*PICODSP_WGT_SHIFT); 3210b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr=(PICOFFTSG_FFTTYPE)(0.448583781719*PICODSP_WGT_SHIFT); w1r=(PICOFFTSG_FFTTYPE)(0.995184719563*PICODSP_WGT_SHIFT); 3211b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1i=(PICOFFTSG_FFTTYPE)(0.098017141223*PICODSP_WGT_SHIFT); ss =(PICOFFTSG_FFTTYPE)(0.196034282446*PICODSP_WGT_SHIFT); break; 3212b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 32 : wdi=(PICOFFTSG_FFTTYPE)(0.523931562901*PICODSP_WGT_SHIFT); 3213b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr=(PICOFFTSG_FFTTYPE)(0.474863886833*PICODSP_WGT_SHIFT); w1r=(PICOFFTSG_FFTTYPE)(0.998795449734*PICODSP_WGT_SHIFT); 3214b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1i=(PICOFFTSG_FFTTYPE)(0.049067676067*PICODSP_WGT_SHIFT); ss =(PICOFFTSG_FFTTYPE)(0.098135352135*PICODSP_WGT_SHIFT); break; 3215b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen case 64 : wdi=(PICOFFTSG_FFTTYPE)(0.512120008469*PICODSP_WGT_SHIFT); 3216b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr=(PICOFFTSG_FFTTYPE)(0.487578809261*PICODSP_WGT_SHIFT); w1r=(PICOFFTSG_FFTTYPE)(0.999698817730*PICODSP_WGT_SHIFT); 3217b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen w1i=(PICOFFTSG_FFTTYPE)(0.024541229010*PICODSP_WGT_SHIFT); ss =(PICOFFTSG_FFTTYPE)(0.049082458019*PICODSP_WGT_SHIFT); break; 3218b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen default: 3219b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr = 0; wdi = 0; ss = 0; break; 3220b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3221b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3222b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = n >> 1; 3223b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i = 0; 3224b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (;;) { 3225b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = i + DCST_LOOP_DIV2; 3226b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 > m - 2) { 3227b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen i0 = m - 2; 3228b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3229b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen for (j = i + 2; j <= i0; j += 2) { 3230b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen k = n - j; 3231b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = picofftsg_mult_w_a(wdi, a[j - 1]) - picofftsg_mult_w_a(wdr, a[k + 1]); 3232b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xi = picofftsg_mult_w_a(wdr, a[j - 1]) + picofftsg_mult_w_a(wdi, a[k + 1]); 3233b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wkr -= Mult_W_W(ss, wdi); 3234b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki += Mult_W_W(ss, wdr); 3235b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yr = Mult_W_W(wki, a[j]) - Mult_W_W(wkr, a[k]); 3236b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen yi = Mult_W_W(wkr, a[j]) + Mult_W_W(wki, a[k]); 3237b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr -= Mult_W_W(ss, wki); 3238b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi += Mult_W_W(ss, wkr); 3239b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k + 1] = xr; 3240b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[k] = yr; 3241b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j - 1] = xi; 3242b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[j] = yi; 3243b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3244b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (i0 == m - 2) { 3245b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen break; 3246b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3247b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3248b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = picofftsg_mult_w_a(wdi, a[m - 1]) - picofftsg_mult_w_a(wdr, a[m + 1]); 3249b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[m - 1] = picofftsg_mult_w_a(wdr, a[m - 1]) + picofftsg_mult_w_a(wdi, a[m + 1]); 3250b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[m + 1] = xr; 3251b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[m] = Mult_W_W(WR5000, a[m]); 3252b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3253b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3254b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3255b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chenvoid dctsub4(picoos_int32 n, PICOFFTSG_FFTTYPE *a) 3256b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen{ 3257b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen picoos_int32 m; 3258b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen PICOFFTSG_FFTTYPE wki, wdr, wdi, xr; 3259b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3260b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wki = WR5000; 3261b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen m = n >> 1; 3262b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen if (m == 2) { 3263b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdr = Mult_W_W(wki, WI2500); 3264b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen wdi = Mult_W_W(wki, WR2500); 3265b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen xr = Mult_W_W(wdi, a[1]) - Mult_W_W(wdr, a[3]); 3266b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[1] = Mult_W_W(wdr, a[1]) + Mult_W_W(wdi, a[3]); 3267b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[3] = xr; 3268b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen } 3269b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen a[m] = Mult_W_W(wki, a[m]); 3270b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3271b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen 3272b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#ifdef __cplusplus 3273b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen} 3274b190149a69b110e6719ce0a41877a683f8db7ae7Charles Chen#endif 3275