SSTV-Decoder/src/fft/table.c

74 lines
5.5 KiB
C

#include "fft/table.h"
const q15_t hanning[] = {
0, 11, 43, 96, 171, 266, 383, 521, 679, 858, 1057, 1276, 1514, 1772, 2049, 2345,
2659, 2991, 3341, 3707, 4090, 4489, 4904, 5333, 5777, 6235, 6706, 7190, 7685, 8192, 8710, 9237,
9774, 10320, 10873, 11434, 12001, 12574, 13151, 13733, 14319, 14907, 15497, 16088, 16680, 17271, 17861, 18449,
19035, 19617, 20194, 20767, 21334, 21895, 22448, 22994, 23531, 24058, 24576, 25083, 25578, 26062, 26533, 26991,
27435, 27864, 28279, 28678, 29061, 29427, 29777, 30109, 30423, 30719, 30996, 31254, 31492, 31711, 31910, 32089,
32247, 32385, 32502, 32597, 32672, 32725, 32757, 32767, 32757, 32725, 32672, 32597, 32502, 32385, 32247, 32089,
31910, 31711, 31492, 31254, 30996, 30719, 30423, 30109, 29777, 29427, 29061, 28678, 28279, 27864, 27435, 26991,
26533, 26062, 25578, 25083, 24576, 24058, 23531, 22994, 22448, 21895, 21334, 20767, 20194, 19617, 19035, 18449,
17861, 17271, 16680, 16088, 15497, 14907, 14319, 13733, 13151, 12574, 12001, 11434, 10873, 10320, 9774, 9237,
8710, 8192, 7685, 7190, 6706, 6235, 5777, 5333, 4904, 4489, 4090, 3707, 3341, 2991, 2659, 2345,
2049, 1772, 1514, 1276, 1057, 858, 679, 521, 383, 266, 171, 96, 43, 11, 0,
};
/*
Table for bit reversal process, where N = 256 logN2 = 8, N is the maximum FFT Size supported
for (l = 1; l <= N / 4; l++) {
for (i = 0; i < logN2; i++) {
a[i] = l & (1 << i);
}
for (j = 0; j < logN2; j++) {
if (a[j] != 0) y[l] += (1 << ((logN2 - 1) - j));
}
y[l] = y[l] >> 1;
}
*/
const uint16_t bitrevTable[64] = {
0x40, 0x20, 0x60, 0x10, 0x50, 0x30, 0x70, 0x8, 0x48, 0x28, 0x68, 0x18, 0x58, 0x38, 0x78, 0x4,
0x44, 0x24, 0x64, 0x14, 0x54, 0x34, 0x74, 0xc, 0x4c, 0x2c, 0x6c, 0x1c, 0x5c, 0x3c, 0x7c, 0x2,
0x42, 0x22, 0x62, 0x12, 0x52, 0x32, 0x72, 0xa, 0x4a, 0x2a, 0x6a, 0x1a, 0x5a, 0x3a, 0x7a, 0x6,
0x46, 0x26, 0x66, 0x16, 0x56, 0x36, 0x76, 0xe, 0x4e, 0x2e, 0x6e, 0x1e, 0x5e, 0x3e, 0x7e, 0x1,
};
/*
Example code for q15 Twiddle factors Generation::
for (i = 0; i < 3N / 4; i++) {
rotCoef[2 * i] = cos(i * 2 * PI / (float)N);
rotCoef[2 * i + 1] = sin(i * 2 * PI / (float)N);
}
where N = 256 and PI = 3.14159265358979, Cos and Sin values are interleaved fashion
Convert Floating point to int16 round(rotCoef(i) * pow(2, 15))
*/
const q15_t rotCoef[384] = {
32767, 0, 32757, 804, 32728, 1608, 32678, 2410, 32609, 3212, 32521, 4011, 32412, 4808,
32285, 5602, 32137, 6393, 31971, 7179, 31785, 7962, 31580, 8739, 31356, 9512, 31113, 10278,
30852, 11039, 30571, 11793, 30273, 12539, 29956, 13279, 29621, 14010, 29268, 14732, 28898, 15446,
28510, 16151, 28105, 16846, 27683, 17530, 27245, 18204, 26790, 18868, 26319, 19519, 25832, 20159,
25329, 20787, 24811, 21403, 24279, 22005, 23731, 22594, 23170, 23170, 22594, 23731, 22005, 24279,
21403, 24811, 20787, 25329, 20159, 25832, 19519, 26319, 18868, 26790, 18204, 27245, 17530, 27683,
16846, 28105, 16151, 28510, 15446, 28898, 14732, 29268, 14010, 29621, 13279, 29956, 12539, 30273,
11793, 30571, 11039, 30852, 10278, 31113, 9512, 31356, 8739, 31580, 7962, 31785, 7179, 31971,
6393, 32137, 5602, 32285, 4808, 32412, 4011, 32521, 3212, 32609, 2410, 32678, 1608, 32728,
804, 32757, 0, 32767, -804, 32757, -1608, 32728, -2410, 32678, -3212, 32609, -4011, 32521,
-4808, 32412, -5602, 32285, -6393, 32137, -7179, 31971, -7962, 31785, -8739, 31580, -9512, 31356,
-10278, 31113, -11039, 30852, -11793, 30571, -12539, 30273, -13279, 29956, -14010, 29621, -14732, 29268,
-15446, 28898, -16151, 28510, -16846, 28105, -17530, 27683, -18204, 27245, -18868, 26790, -19519, 26319,
-20159, 25832, -20787, 25329, -21403, 24811, -22005, 24279, -22594, 23731, -23170, 23170, -23731, 22594,
-24279, 22005, -24811, 21403, -25329, 20787, -25832, 20159, -26319, 19519, -26790, 18868, -27245, 18204,
-27683, 17530, -28105, 16846, -28510, 16151, -28898, 15446, -29268, 14732, -29621, 14010, -29956, 13279,
-30273, 12539, -30571, 11793, -30852, 11039, -31113, 10278, -31356, 9512, -31580, 8739, -31785, 7962,
-31971, 7179, -32137, 6393, -32285, 5602, -32412, 4808, -32521, 4011, -32609, 3212, -32678, 2410,
-32728, 1608, -32757, 804, -32767, 0, -32757, -804, -32728, -1608, -32678, -2410, -32609, -3212,
-32521, -4011, -32412, -4808, -32285, -5602, -32137, -6393, -31971, -7179, -31785, -7962, -31580, -8739,
-31356, -9512, -31113, -10278, -30852, -11039, -30571, -11793, -30273, -12539, -29956, -13279, -29621, -14010,
-29268, -14732, -28898, -15446, -28510, -16151, -28105, -16846, -27683, -17530, -27245, -18204, -26790, -18868,
-26319, -19519, -25832, -20159, -25329, -20787, -24811, -21403, -24279, -22005, -23731, -22594, -23170, -23170,
-22594, -23731, -22005, -24279, -21403, -24811, -20787, -25329, -20159, -25832, -19519, -26319, -18868, -26790,
-18204, -27245, -17530, -27683, -16846, -28105, -16151, -28510, -15446, -28898, -14732, -29268, -14010, -29621,
-13279, -29956, -12539, -30273, -11793, -30571, -11039, -30852, -10278, -31113, -9512, -31356, -8739, -31580,
-7962, -31785, -7179, -31971, -6393, -32137, -5602, -32285, -4808, -32412, -4011, -32521, -3212, -32609,
-2410, -32678, -1608, -32728, -804, -32757,
};