1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-06-04 06:54:39 -04:00

Fixed point utility: implemented fixed_resolution_shift of 16 and 24

This commit is contained in:
f4exb
2018-02-04 01:25:09 +01:00
parent de83434405
commit 58f0145705
5 changed files with 425 additions and 2071 deletions
+387 -16
View File
@@ -17,30 +17,401 @@
#include "fixedtraits.h"
// 1.0 = 2^28 internal representation
// ln(1/2^n), n = index+1 then list is reversed
const int64_t FixedTraits<28>::log_two_power_n_reversed[35] = {
0x18429946ELL,0x1791272EFLL,0x16DFB516FLL,0x162E42FF0LL,0x157CD0E70LL,0x14CB5ECF1LL,0x1419ECB71LL,0x13687A9F2LL,
0x12B708872LL,0x1205966F3LL,0x115424573LL,0x10A2B23F4LL,0xFF140274LL,0xF3FCE0F5LL,0xE8E5BF75LL,0xDDCE9DF6LL,
0xD2B77C76LL,0xC7A05AF7LL,0xBC893977LL,0xB17217F8LL,0xA65AF679LL,0x9B43D4F9LL,0x902CB379LL,0x851591FaLL,
0x79FE707bLL,0x6EE74EFbLL,0x63D02D7BLL,0x58B90BFcLL,0x4DA1EA7CLL,0x428AC8FdLL,0x3773A77DLL,0x2C5C85FeLL,
0x2145647ELL,0x162E42FfLL,0xB17217FLL
0x18429946ELL,
0x1791272EFLL,
0x16DFB516FLL,
0x162E42FF0LL,
0x157CD0E70LL,
0x14CB5ECF1LL,
0x1419ECB71LL,
0x13687A9F2LL,
0x12B708872LL,
0x1205966F3LL,
0x115424573LL,
0x10A2B23F4LL,
0xFF140274LL,
0xF3FCE0F5LL,
0xE8E5BF75LL,
0xDDCE9DF6LL,
0xD2B77C76LL,
0xC7A05AF7LL,
0xBC893977LL,
0xB17217F8LL,
0xA65AF679LL,
0x9B43D4F9LL,
0x902CB379LL,
0x851591FaLL,
0x79FE707bLL,
0x6EE74EFbLL,
0x63D02D7BLL,
0x58B90BFcLL,
0x4DA1EA7CLL,
0x428AC8FdLL,
0x3773A77DLL,
0x2C5C85FeLL,
0x2145647ELL,
0x162E42FfLL,
0xB17217FLL
};
// ln(1+2^-n), n = index+1
const int64_t FixedTraits<28>::log_one_plus_two_power_minus_n[28] = {
0x67CC8FBLL,0x391FEF9LL,0x1E27077LL,0xF85186LL,
0x7E0A6CLL,0x3F8151LL,0x1FE02ALL,0xFF805LL,0x7FE01LL,0x3FF80LL,0x1FFE0LL,0xFFF8LL,
0x7FFELL,0x4000LL,0x2000LL,0x1000LL,0x800LL,0x400LL,0x200LL,0x100LL,
0x80LL,0x40LL,0x20LL,0x10LL,0x8LL,0x4LL,0x2LL,0x1LL
0x67CC8FBLL,
0x391FEF9LL,
0x1E27077LL,
0xF85186LL,
0x7E0A6CLL,
0x3F8151LL,
0x1FE02ALL,
0xFF805LL,
0x7FE01LL,
0x3FF80LL,
0x1FFE0LL,
0xFFF8LL,
0x7FFELL,
0x4000LL,
0x2000LL,
0x1000LL,
0x800LL,
0x400LL,
0x200LL,
0x100LL,
0x80LL,
0x40LL,
0x20LL,
0x10LL,
0x8LL,
0x4LL,
0x2LL,
0x1LL
};
// ln(1/1-2^-n), n = index+1
const int64_t FixedTraits<28>::log_one_over_one_minus_two_power_minus_n[28] = {
0xB172180LL,0x49A5884LL,0x222F1D0LL,0x108598BLL,
0x820AECLL,0x408159LL,0x20202BLL,0x100805LL,0x80201LL,0x40080LL,0x20020LL,0x10008LL,
0x8002LL,0x4001LL,0x2000LL,0x1000LL,0x800LL,0x400LL,0x200LL,0x100LL,
0x80LL,0x40LL,0x20LL,0x10LL,0x8LL,0x4LL,0x2LL,0x1LL
0xB172180LL,
0x49A5884LL,
0x222F1D0LL,
0x108598BLL,
0x820AECLL,
0x408159LL,
0x20202BLL,
0x100805LL,
0x80201LL,
0x40080LL,
0x20020LL,
0x10008LL,
0x8002LL,
0x4001LL,
0x2000LL,
0x1000LL,
0x800LL,
0x400LL,
0x200LL,
0x100LL,
0x80LL,
0x40LL,
0x20LL,
0x10LL,
0x8LL,
0x4LL,
0x2LL,
0x1LL
};
const int64_t FixedTraits<28>::arctantab[32] = {
297197971, 210828714, 124459457, 65760959, 33381290, 16755422, 8385879,
4193963, 2097109, 1048571, 524287, 262144, 131072, 65536, 32768, 16384,
8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0, 0,
297197971,
210828714,
124459457,
65760959,
33381290,
16755422,
8385879,
4193963,
2097109,
1048571,
524287,
262144,
131072,
65536,
32768,
16384,
8192,
4096,
2048,
1024,
512,
256,
128,
64,
32,
16,
8,
4,
2,
1,
0,
0
};
// 1.0 = 2^16 internal representation
const int64_t FixedTraits<16>::log_two_power_n_reversed[47] = {
2135026LL,
2089600LL,
2044174LL,
1998748LL,
1953322LL,
1907896LL,
1862470LL,
1817044LL,
1771618LL,
1726192LL,
1680765LL,
1635339LL,
1589913LL,
1544487LL,
1499061LL,
1453635LL,
1408209LL,
1362783LL,
1317357LL,
1271931LL,
1226505LL,
1181078LL,
1135652LL,
1090226LL,
1044800LL,
999374LL,
953948LL,
908522LL,
863096LL,
817670LL,
772244LL,
726817LL,
681391LL,
635965LL,
590539LL,
545113LL,
499687LL,
454261LL,
408835LL,
363409LL,
317983LL,
272557LL,
227130LL,
181704LL,
136278LL,
90852LL,
45426LL
};
const int64_t FixedTraits<16>::log_one_plus_two_power_minus_n[16] = {
26573LL,
14624LL,
7719LL,
3973LL,
2017LL,
1016LL,
510LL,
256LL,
128LL,
64LL,
32LL,
16LL,
8LL,
4LL,
2LL,
1LL
};
const int64_t FixedTraits<16>::log_one_over_one_minus_two_power_minus_n[16] = {
45426LL,
18854LL,
8751LL,
4230LL,
2081LL,
1032LL,
514LL,
257LL,
128LL,
64LL,
32LL,
16LL,
8LL,
4LL,
2LL,
1LL
};
const int64_t FixedTraits<16>::arctantab[32] = {
72558LL,
51471LL,
30385LL,
16054LL,
8149LL,
4090LL,
2047LL,
1023LL,
511LL,
255LL,
127LL,
64LL,
32LL,
16LL,
8LL,
4LL,
2LL,
1LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL
};
// 1.0 = 2^24 internal representation
const int64_t FixedTraits<24>::log_two_power_n_reversed[39] = {
453534119LL,
441905039LL,
430275959LL,
418646879LL,
407017799LL,
395388719LL,
383759639LL,
372130559LL,
360501479LL,
348872399LL,
337243319LL,
325614239LL,
313985159LL,
302356079LL,
290726999LL,
279097919LL,
267468839LL,
255839759LL,
244210679LL,
232581599LL,
220952519LL,
209323439LL,
197694359LL,
186065279LL,
174436200LL,
162807120LL,
151178040LL,
139548960LL,
127919880LL,
116290800LL,
104661720LL,
93032640LL,
81403560LL,
69774480LL,
58145400LL,
46516320LL,
34887240LL,
23258160LL,
11629080LL
};
const int64_t FixedTraits<24>::log_one_plus_two_power_minus_n[24] = {
6802576LL,
3743728LL,
1976071LL,
1017112LL,
516263LL,
260117LL,
130563LL,
65408LL,
32736LL,
16376LL,
8190LL,
4096LL,
2048LL,
1024LL,
512LL,
256LL,
128LL,
64LL,
32LL,
16LL,
8LL,
4LL,
2LL,
1LL
};
const int64_t FixedTraits<24>::log_one_over_one_minus_two_power_minus_n[24] = {
11629080LL,
4826504LL,
2240285LL,
1082777LL,
532655LL,
264214LL,
131587LL,
65664LL,
32800LL,
16392LL,
8194LL,
4097LL,
2048LL,
1024LL,
512LL,
256LL,
128LL,
64LL,
32LL,
16LL,
8LL,
4LL,
2LL,
1LL
};
const int64_t FixedTraits<24>::arctantab[32] = {
18574873LL,
13176794LL,
7778716LL,
4110059LL,
2086330LL,
1047213LL,
524117LL,
262122LL,
131069LL,
65535LL,
32767LL,
16384LL,
8192LL,
4096LL,
2048LL,
1024LL,
512LL,
256LL,
128LL,
64LL,
32LL,
16LL,
8LL,
4LL,
2LL,
1LL,
0LL,
0LL,
0LL,
0LL,
0LL,
0LL
};