kopia lustrzana https://github.com/f4exb/sdrangel
				
				
				
			
		
			
				
	
	
		
			550 wiersze
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			550 wiersze
		
	
	
		
			8.8 KiB
		
	
	
	
		
			C++
		
	
	
| ///////////////////////////////////////////////////////////////////////////////////
 | |
| // Copyright (C) 2018-2019 Edouard Griffiths, F4EXB <f4exb06@gmail.com>          //
 | |
| //                                                                               //
 | |
| // This program is free software; you can redistribute it and/or modify          //
 | |
| // it under the terms of the GNU General Public License as published by          //
 | |
| // the Free Software Foundation as version 3 of the License, or                  //
 | |
| // (at your option) any later version.                                           //
 | |
| //                                                                               //
 | |
| // This program is distributed in the hope that it will be useful,               //
 | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of                //
 | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
 | |
| // GNU General Public License V3 for more details.                               //
 | |
| //                                                                               //
 | |
| // You should have received a copy of the GNU General Public License             //
 | |
| // along with this program. If not, see <http://www.gnu.org/licenses/>.          //
 | |
| ///////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| #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
 | |
| };
 | |
| 
 | |
| // 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
 | |
| };
 | |
| 
 | |
| // 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
 | |
| };
 | |
| 
 | |
| 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
 | |
| };
 | |
| 
 | |
| // 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^23 internal representation
 | |
| 
 | |
| const int64_t  FixedTraits<23>::log_two_power_n_reversed[40] = {
 | |
|     232581599LL,
 | |
|     226767059LL,
 | |
|     220952519LL,
 | |
|     215137979LL,
 | |
|     209323439LL,
 | |
|     203508899LL,
 | |
|     197694359LL,
 | |
|     191879819LL,
 | |
|     186065279LL,
 | |
|     180250740LL,
 | |
|     174436200LL,
 | |
|     168621660LL,
 | |
|     162807120LL,
 | |
|     156992580LL,
 | |
|     151178040LL,
 | |
|     145363500LL,
 | |
|     139548960LL,
 | |
|     133734420LL,
 | |
|     127919880LL,
 | |
|     122105340LL,
 | |
|     116290800LL,
 | |
|     110476260LL,
 | |
|     104661720LL,
 | |
|     98847180LL,
 | |
|     93032640LL,
 | |
|     87218100LL,
 | |
|     81403560LL,
 | |
|     75589020LL,
 | |
|     69774480LL,
 | |
|     63959940LL,
 | |
|     58145400LL,
 | |
|     52330860LL,
 | |
|     46516320LL,
 | |
|     40701780LL,
 | |
|     34887240LL,
 | |
|     29072700LL,
 | |
|     23258160LL,
 | |
|     17443620LL,
 | |
|     11629080LL,
 | |
|     5814540LL
 | |
| };
 | |
| 
 | |
| const int64_t  FixedTraits<23>::log_one_plus_two_power_minus_n[23] = {
 | |
|     3401288LL,
 | |
|     1871864LL,
 | |
|     988036LL,
 | |
|     508556LL,
 | |
|     258131LL,
 | |
|     130059LL,
 | |
|     65281LL,
 | |
|     32704LL,
 | |
|     16368LL,
 | |
|     8188LL,
 | |
|     4095LL,
 | |
|     2048LL,
 | |
|     1024LL,
 | |
|     512LL,
 | |
|     256LL,
 | |
|     128LL,
 | |
|     64LL,
 | |
|     32LL,
 | |
|     16LL,
 | |
|     8LL,
 | |
|     4LL,
 | |
|     2LL,
 | |
|     1LL
 | |
| };
 | |
| 
 | |
| const int64_t  FixedTraits<23>::log_one_over_one_minus_two_power_minus_n[23] = {
 | |
|     5814540LL,
 | |
|     2413252LL,
 | |
|     1120143LL,
 | |
|     541388LL,
 | |
|     266327LL,
 | |
|     132107LL,
 | |
|     65793LL,
 | |
|     32832LL,
 | |
|     16400LL,
 | |
|     8196LL,
 | |
|     4097LL,
 | |
|     2048LL,
 | |
|     1024LL,
 | |
|     512LL,
 | |
|     256LL,
 | |
|     128LL,
 | |
|     64LL,
 | |
|     32LL,
 | |
|     16LL,
 | |
|     8LL,
 | |
|     4LL,
 | |
|     2LL,
 | |
|     1LL
 | |
| };
 | |
| 
 | |
| const int64_t  FixedTraits<23>::arctantab[32] = {
 | |
|     9287436LL,
 | |
|     6588397LL,
 | |
|     3889358LL,
 | |
|     2055029LL,
 | |
|     1043165LL,
 | |
|     523606LL,
 | |
|     262058LL,
 | |
|     131061LL,
 | |
|     65534LL,
 | |
|     32767LL,
 | |
|     16383LL,
 | |
|     8192LL,
 | |
|     4096LL,
 | |
|     2048LL,
 | |
|     1024LL,
 | |
|     512LL,
 | |
|     256LL,
 | |
|     128LL,
 | |
|     64LL,
 | |
|     32LL,
 | |
|     16LL,
 | |
|     8LL,
 | |
|     4LL,
 | |
|     2LL,
 | |
|     1LL,
 | |
|     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
 | |
| };
 | |
| 
 |