/*****************************************************************************/ /* TDE stage in GMTI with data from SmallModel By Jinwoo Suh (ISI-East) email: jsuh@isi.edu On 10/12/05 - TDE stage performs frequency doamin convolution. - Currently, it is not well optimized. More work to do. Modified by Allyn Dimock May 2006 from Jinwoo's old revision 1.3 which was pipeline-parallel: - Replaced Jinwoo's FFT which was not working at that time and replaced with vanilla FFT from our FFT2 code. - Made amount of data-parallelism tunable. - Removed unreferenced answer array (which can be found in a C version in the /projects/raw/cvsroot CVS Repository as starsearch/end-to-end/isi/svm/RSTREAM-TEST/GMTI/refeq.c) A steady-state of this code should have 0 inputs and produce 6480 float outputs (3240 complex values). The algorithm is a simple convolution. */ /*****************************************************************************/ void->void pipeline tde_pp { // pipeline-parallel tde /* The number of channels or sensors receiving data. */ int CH = 6; // N_CH in C Code. /* The number of range (distance from antenna) gates. */ int N = 36; // number of input samples (N_RG in C Code) /* Pulse repetition intervals per data cube */ int M = 15; // number of pri's in a (N_PRI in C Code) int B = 64; // smallest power of 2 above N // Data is [N_CH][N_RG][N_PRI][2] float mult = 0.00390625; // multiplier int DataParallelism = 1; // any number 0 < DataParallelism <= N int FFTDataParallelism = 2; // any number < number of DFTs calculated // CH * M gives you the whole source for a single iteration add source (CH * M); add Transpose(N, M); if (DataParallelism == 1) { // Redundant, for versions of the compiler that do not // optimize away a splitjoint that does nothing. add pipeline { add Expand(N, B); // up to power of 2 for fft add FFTKernel4(B, FFTDataParallelism); // fft add Multiply_by_float(B, mult); // mult add IFFTKernel4(B, FFTDataParallelism);// ifft add Contract(N, B); // back to original size } } else { // Same as above with data-parallelism. add splitjoin { split roundrobin(2); for (int i=0; ifloat filter Contract(int N, int B) { float x; work pop 2*B push 2*N { for (int i = 0; i < 2*N; i++) { push(pop()); } for (int i = 2*N; i < 2*B; i++) { pop(); } } } // expand data for next-largest power of 2 (known to be 64) float->float filter Expand(int N, int B) { float x; work pop 2*N push 2*B { for (int i = 0; i < 2*N; i++) { x = pop(); push(x); } for (int i = 2*N; i < 2*B; i++) { push(0.0); } } } // Multiply data by coefficients: in this case, we have constant // coefficients with 0.0 imaginary part, allowing simplification. // float->float filter Multiply(int B) { // // float[B][2] coeff; // // init { // for (int i = 0; ifloat filter Multiply_by_float(int B, float m) { work pop 2*B push 2*B { for (int j = 0; j < B; j++) { push(pop() * m); push(pop() * m); } } } // Transpose written as a filter. // A future optimization could be to combine Transpose with source. // // The Transpose at the end can be eliminated if you are going on to // other phases of the GMTI program with this data and can masage their // data requirements appropriately. float->float filter Transpose(int M, int N) { work push M*N*2 peek M*N*2 pop M*N*2 { for(int i=0; ivoid filter sink (int m) { float x, diff; int correct = 1; work pop 36 * 2 * m { for (int i=0; i 0.01) // correct = 0; // x = pop(); // diff = x - j - 100; // if(diff<0) // diff *= -1; // if(diff > 0.01) // correct = 0; // For printing outputs instead of self-checking. // (Needed if not self-generated inputs, unless you want all of refeq.c's // contents to check against.) println(pop()); println(pop()); } } // println(correct); } } // parameter m is number of (N * sizeof(complex)/sizeof(float)) // void->float filter source (int m) { // Data array for inputs, corresponding to inputs for GMTI small model // in ISI or R-Stream code. float[6*15*36*2] Raw = { /* CH 1 */ /* RG 1 */ -440,6942, -695,6636, -350,6933, -272,7016, -488,6792, -767,7017, -698,6870, -498,6811, -505,6769, -416,6927, -570,6888, -908,6789, -486,6966, -689,6927, -660,6823, /* RG 2 */ -248,7496, 138,7516, 340,7521, -35,8020, -76,7668, 58,7591, -15,7773, 147,7683, 109,7831, 95,7613, 3,7640, -34,7664, -197,7369, 116,7790, -111,7445, /* RG 3 */ 1252,8521, 1345,8727, 1279,8369, 1524,8790, 1629,8431, 1281,8931, 1394,8481, 1382,8588, 1153,8400, 1064,8545, 1311,8191, 1544,8614, 1305,8419, 1389,8349, 1495,8516, /* RG 4 */ 4100,8951, 4371,9056, 4513,8888, 4323,8703, 4856,8946, 4299,8968, 4079,9192, 4363,8652, 4412,8882, 4556,9155, 4456,8953, 4338,9109, 4313,8906, 4435,8848, 4353,9297, /* RG 5 */ 5901,7384, 5585,7764, 5730,7668, 5702,7489, 5735,7944, 5831,7707, 6079,7747, 5766,7724, 5893,7630, 5901,7713, 5661,7827, 5576,7403, 5699,7915, 5743,7876, 5876,7919, /* RG 6 */ 5360,6642, 5064,6597, 5215,6765, 5209,6939, 5155,6596, 5725,6617, 5263,6803, 5089,6683, 5584,6429, 5262,6733, 5238,6692, 5185,6528, 5349,6726, 5366,6495, 5296,6783, /* RG 7 */ 487,5236, 326,5008, 316,5090, 334,4975, 556,5416, 540,5083, 331,5175, 582,5022, 285,5289, 209,4967, 459,5129, 520,5099, 352,5089, 184,4938, 430,5236, /* RG 8 */ -106,6717, -83,6486, -240,6334, -297,6494, -238,6709, -481,6528, -381,6175, -479,6321, -387,6414, -475,6540, -498,6275, -402,6379, -207,6492, -316,6670, -72,6669, /* RG 9 */ -25,6328, 224,6246, -97,6182, -39,6607, -24,6784, -129,6555, 85,6654, -59,6399, -164,6866, 36,6428, -593,6413, 502,6288, 7,6430, 145,6669, -378,6590, /* RG 10 */ 2412,6407, 2698,6507, 2519,6423, 2272,6280, 2545,6518, 2384,6600, 2452,6297, 2751,6189, 2615,6506, 2692,6633, 2353,6391, 2234,6756, 2786,6144, 2826,6123, 2710,6546, /* RG 11 */ 3900,10144, 3277,9750, 3571,10008, 3595,9641, 3814,9475, 3826,10015, 3308,9971, 3588,10158, 3700,9968, 3538,9836, 3817,10104, 3531,9710, 3985,9725, 3839,10009, 3726,10343, /* RG 12 */ 2168,8202, 2178,8213, 2177,7768, 1965,8252, 2172,8187, 1931,8133, 1748,8205, 2031,7908, 2139,7980, 1927,8306, 1926,8031, 1872,8117, 1846,7895, 2022,8179, 2231,7877, /* RG 13 */ 3241,3792, 3123,4255, 2888,4324, 3235,3950, 3209,4061, 2972,4231, 2649,4142, 2810,4271, 2926,4464, 2803,4134, 2888,4014, 2770,4162, 3117,4399, 3240,4190, 3090,4480, /* RG 14 */ 4046,4981, 3876,5233, 3940,5169, 4054,5047, 4073,5200, 4116,5238, 3997,4949, 4112,5065, 4177,4968, 4131,5274, 3985,5083, 3811,5129, 4130,5093, 4259,5123, 4012,5086, /* RG 15 */ -3957,-962, -4852,326, -5183,1815, -5669,3867, -5634,5580, -4776,7109, -3547,8959, -2410,10270, -846,10836, 820,11438, 2184,11199, 4583,11427, 6223,10616, 7989,9309, 8488,8146, /* RG 16 */ -4128,423, -4941,2104, -5617,3675, -5762,5625, -4830,7024, -4171,9033, -3166,10245, -1378,11197, 275,12226, 2036,12115, 4083,12249, 5581,10941, 6947,10512, 8486,9017, 9512,7332, /* RG 17 */ -8755,1607, -9385,3538, -9444,4631, -9373,6974, -8977,8607, -7554,10131, -6072,11099, -4660,12247, -2880,12493, -1048,12525, 808,12009, 2216,11642, 3596,10134, 4793,9093, 5553,6917, /* RG 18 */ -14112,2303, -14419,532, -12354,-435, -8672,-573, -4307,1130, 131,4273, 3607,8204, 6063,12400, 6714,16274, 5528,18609, 3856,19375, 2016,17463, 894,14356, 88,9564, 579,4019, /* RG 19 */ -18868,5804, -19660,2300, -17926,-964, -13985,-3202, -8656,-4179, -2967,-3307, 3151,-527, 7252,2700, 10435,6247, 11964,9074, 11987,11049, 11847,10554, 10994,9322, 10624,6537, 11169,2680, /* RG 20 */ -20147,5456, -21632,2093, -20188,-1741, -16555,-4140, -11939,-5227, -5968,-4803, -26,-2573, 4476,555, 7992,3524, 9613,6440, 10306,7941, 9678,7850, 8877,6613, 8359,3638, 8656,62, /* RG 21 */ -14556,6422, -16501,3552, -15570,1065, -12693,-1267, -7691,-1956, -2179,-1327, 3655,1085, 8072,4686, 11278,8280, 12672,11401, 12966,13684, 12263,14145, 10859,12884, 9914,10882, 9376,7949, /* RG 22 */ -12221,2391, -14434,-533, -13554,-3008, -10657,-5473, -6483,-6292, -1035,-5507, 5015,-3521, 9741,123, 12579,3483, 14756,6574, 15049,8670, 14398,9711, 13723,9083, 12218,6591, 11877,3282, /* RG 23 */ -15878,1347, -18548,-1462, -17906,-4345, -15303,-6437, -10872,-7538, -5453,-6687, 42,-4402, 4878,-1460, 8407,2365, 10418,5533, 11161,7949, 10324,8683, 9552,7768, 8839,5761, 8466,2409, /* RG 24 */ -15493,403, -17610,-2124, -17205,-4636, -14908,-7043, -10140,-7708, -4740,-6998, 795,-4966, 5247,-1697, 8755,2255, 11193,5460, 11200,7792, 10587,8463, 10093,8090, 9214,5948, 9757,2824, /* RG 25 */ -18609,-2182, -20367,-4720, -20280,-7563, -17460,-9569, -13345,-10554, -8113,-9446, -2915,-6884, 1597,-3301, 5064,424, 7316,4277, 7677,6443, 6760,7412, 6662,6755, 6396,4680, 6563,1657, /* RG 26 */ -12391,572, -13501,-4216, -12945,-8649, -10528,-12877, -6321,-15001, -2056,-14894, 2241,-13524, 4667,-10743, 6160,-7403, 5836,-4046, 4790,-1437, 2731,-93, 761,134, -928,-566, -865,-1858, /* RG 27 */ -12531,-271, -13193,-4757, -12391,-9089, -9283,-12847, -4780,-14911, -461,-14554, 3224,-12820, 6132,-9742, 6678,-6410, 6241,-3066, 4744,-876, 3252,295, 858,557, 348,-421, -324,-1634, /* RG 28 */ -14230,-3356, -14576,-7920, -13003,-12361, -9470,-15427, -5115,-16915, -1030,-16470, 2384,-14058, 4713,-11074, 6240,-7400, 5114,-4243, 2871,-2596, 1069,-1322, -358,-1387, -1455,-2436, -1185,-3818, /* RG 29 */ -1773,-3221, -1801,-4597, -2320,-5898, -2208,-7077, -1362,-8263, -234,-9424, 1148,-9954, 3189,-10063, 4582,-9687, 6661,-9029, 8611,-8341, 9661,-6366, 10795,-4285, 11380,-1943, 11661,735, /* RG 30 */ 6374,-7701, 7233,-6893, 7167,-6190, 7091,-5487, 7450,-5146, 7509,-4105, 7307,-3591, 7285,-2868, 7097,-2392, 6835,-1656, 6592,-978, 6407,-372, 6161,440, 5274,589, 5249,1559, /* RG 31 */ 7590,-6301, 7456,-5715, 7754,-4879, 7682,-4193, 7883,-3819, 7787,-3016, 7664,-2286, 7588,-1552, 6989,-846, 7374,-182, 6749,334, 6575,974, 5647,1049, 5746,1995, 5047,2102, /* RG 32 */ 2105,-4054, 2395,-4192, 2530,-4211, 2312,-3774, 2298,-4207, 2483,-4386, 2263,-4452, 2271,-3937, 2120,-4113, 2324,-4116, 2018,-4074, 2054,-4357, 2102,-4235, 2195,-4402, 2473,-4308, /* RG 33 */ 3773,-5299, 3631,-5008, 3456,-5271, 3634,-5388, 3719,-5326, 3880,-5438, 3597,-5265, 3785,-5277, 3157,-5200, 3263,-5014, 3541,-5032, 3327,-5522, 3665,-5391, 3592,-5156, 3637,-4925, /* RG 34 */ 517,-3610, 481,-3445, 379,-3332, 424,-3653, 526,-3452, 929,-3771, 577,-3458, 210,-3219, 140,-3048, 188,-3786, 386,-3719, 150,-3516, -94,-3616, 382,-3109, -110,-3145, /* RG 35 */ 3901,-5419, 3671,-4853, 3456,-5000, 3528,-5395, 3666,-4979, 3528,-4933, 3543,-5135, 3539,-5247, 3794,-5120, 3615,-5159, 3683,-5388, 3777,-4982, 3802,-4959, 3706,-5041, 3538,-5267, /* RG 36 */ 3830,-3998, 4072,-4087, 3691,-4096, 3837,-3698, 4006,-4183, 4174,-3601, 3880,-3956, 3831,-3848, 4054,-4043, 3703,-3401, 3676,-4005, 3952,-4066, 3731,-3605, 3779,-3912, 3792,-3715, /* CH 2 */ /* RG 1 */ -1105,7328, -951,7265, -1250,7328, -1136,7280, -1054,7416, -1261,7392, -1439,7445, -760,7578, -1118,7222, -1250,7410, -1027,7106, -1110,7280, -1342,7397, -1035,7521, -1215,7260, /* RG 2 */ -1285,8189, -1039,8611, -1221,8377, -1089,8192, -1476,8400, -1573,8595, -1635,8288, -1355,8296, -1481,8202, -1179,8145, -1376,8275, -1486,8191, -1342,8225, -1571,8132, -1578,8455, /* RG 3 */ 50,9985, 200,9693, 6,9497, 288,9392, 507,9689, 291,9388, 221,10101, 40,9486, 248,9298, 93,9701, 47,9685, 1,9661, 424,9796, 244,9720, 412,9732, /* RG 4 */ 3606,10971, 4144,10748, 3956,10753, 4037,10900, 4079,10799, 3787,11100, 4054,10840, 3866,10410, 3935,10845, 3736,10786, 4122,10885, 4018,10632, 4253,10342, 3924,10983, 4082,10508, /* RG 5 */ 5583,8905, 5569,9090, 5242,9364, 5486,9160, 5566,9276, 5405,9312, 5521,9180, 5676,9162, 5294,8921, 5510,9303, 5514,8863, 5591,9297, 5652,8580, 5459,8975, 5197,9220, /* RG 6 */ 5453,7448, 5129,7222, 4979,7632, 5352,7616, 5186,7204, 5257,7125, 5088,7246, 5400,7423, 5524,7040, 5380,7087, 5131,7560, 5415,7208, 5657,7289, 5645,7341, 5702,7338, /* RG 7 */ 948,5435, 811,5349, 543,5528, 480,5286, 577,5304, 494,5304, 1105,5659, 543,5606, 823,5429, 734,5452, 458,5558, 579,5470, 689,5677, 809,5701, 715,5762, /* RG 8 */ -860,7069, -985,6878, -896,7090, -892,6866, -775,6953, -905,7070, -535,7103, -936,6949, -637,6977, -690,6830, -866,6825, -903,7319, -929,6922, -818,7456, -692,7067, /* RG 9 */ -246,6984, -202,6701, -105,7424, -224,7384, -185,6990, -193,7176, -236,7237, -992,7659, -373,7238, -264,7362, -529,7274, -666,7205, -306,7126, -656,7241, -349,7310, /* RG 10 */ 2201,7463, 2206,6920, 2346,7498, 2079,7251, 2257,7225, 2178,7269, 2307,7382, 2144,7577, 2388,7231, 2104,7183, 2212,7501, 2191,7492, 2118,7268, 2306,7850, 2374,7461, /* RG 11 */ 2774,10753, 2989,10455, 3026,10529, 2818,10551, 3085,10574, 2667,10400, 2749,10517, 2799,10826, 2822,10382, 2822,10515, 2877,10606, 2792,10117, 3180,10420, 3059,10391, 3069,10284, /* RG 12 */ 1259,8518, 1547,9005, 1191,9363, 1449,8614, 1117,8799, 1436,8941, 1407,8982, 1259,9171, 1236,9090, 1295,9097, 1331,9110, 1518,8911, 1230,9192, 1167,9024, 1752,9135, /* RG 13 */ 2477,5452, 2383,5825, 2125,5323, 2392,5721, 2430,6037, 2281,5594, 2137,5435, 2558,5476, 2229,5458, 2147,5717, 2284,5629, 2809,5656, 2517,5525, 2567,5565, 2643,5321, /* RG 14 */ 4149,5253, 4021,5645, 3576,5663, 4057,5542, 4170,5572, 3907,5984, 3985,5880, 3933,5542, 4105,5734, 3983,5654, 3762,5729, 4249,5425, 3957,5429, 4013,5581, 3948,5317, /* RG 15 */ -3627,-1796, -4367,-553, -5075,1317, -5613,3236, -5746,4791, -4709,7052, -3689,8633, -2594,9918, -1014,10414, 348,10859, 2103,11270, 4201,10839, 5653,10400, 7238,9098, 8508,7940, /* RG 16 */ -4533,-1436, -5181,213, -6407,2096, -6149,3902, -5538,5452, -5129,7080, -3860,8700, -2408,9394, -452,10503, 708,10619, 2924,10874, 4577,10257, 5930,9153, 7449,7943, 8564,6671, /* RG 17 */ -9107,-155, -9709,1547, -9915,3247, -10018,5101, -9034,7085, -8350,8375, -6948,9633, -5364,10872, -3711,11354, -2045,11241, -190,11041, 1734,10337, 3105,9190, 4335,7987, 4934,6397, /* RG 18 */ -15220,1478, -15057,-241, -13316,-1147, -9388,-858, -5366,765, -857,4185, 2528,8776, 4303,12773, 5008,16209, 4265,19220, 2348,19613, 351,17674, -1083,14523, -1369,9516, -220,4004, /* RG 19 */ -19532,4208, -20063,883, -18253,-2436, -14166,-4579, -8833,-5010, -3387,-3748, 2327,-1093, 6881,2885, 9458,6632, 10843,9446, 10911,10751, 10553,10751, 10058,9341, 9759,6353, 10253,2992, /* RG 20 */ -20346,2986, -21199,-833, -20232,-3965, -16245,-6305, -11058,-7302, -5177,-6557, 262,-4346, 4676,-1053, 7979,2197, 9408,5113, 9593,7084, 9475,6943, 9068,5611, 8599,2803, 8824,-897, /* RG 21 */ -13116,5087, -15148,1910, -13957,-691, -10907,-2432, -6276,-3016, -408,-2264, 4911,418, 9601,4193, 12706,8250, 13784,11656, 14020,13577, 13166,14190, 12259,13089, 11260,10458, 10835,7492, /* RG 22 */ -11084,1972, -12916,-928, -12325,-3301, -9246,-5657, -4733,-6048, 832,-5205, 6218,-2782, 10346,1129, 14306,4385, 15315,7969, 15928,9947, 15098,10911, 13816,9858, 13274,7640, 13090,4450, /* RG 23 */ -15094,1190, -17197,-1715, -16376,-4431, -13211,-6478, -8725,-7416, -3329,-6155, 2169,-3930, 6391,-215, 10042,3669, 11186,6753, 11657,9357, 11185,9754, 10747,8757, 9767,6989, 9921,3781, /* RG 24 */ -12757,390, -15149,-2367, -14574,-5153, -11772,-7093, -7193,-7960, -2336,-6768, 3281,-4413, 7887,-438, 11283,3061, 12920,6676, 13289,9201, 12688,10016, 11825,8947, 11775,6699, 11567,3855, /* RG 25 */ -16037,-2627, -18190,-5709, -17693,-8201, -14987,-10064, -10598,-10831, -5163,-9139, -398,-6903, 3951,-2603, 6901,831, 9040,4865, 9435,7189, 8966,7899, 8526,7350, 8113,5094, 9099,2255, /* RG 26 */ -10351,-409, -11246,-5175, -10281,-9476, -7559,-13210, -3629,-14932, 1184,-14785, 4717,-13206, 7297,-10661, 8455,-7222, 8661,-4104, 6465,-1343, 4946,-54, 2786,394, 1545,-858, 1533,-2243, /* RG 27 */ -9664,13, -10388,-4976, -9151,-9040, -5862,-12381, -1668,-13981, 2669,-13799, 6388,-11902, 8822,-8930, 9667,-5712, 9443,-2049, 7612,16, 5532,1091, 3795,973, 2441,556, 2943,-667, /* RG 28 */ -11397,-2924, -11189,-8089, -9430,-12160, -6118,-15205, -1292,-16017, 2920,-15139, 6018,-13277, 8305,-9704, 8564,-6267, 8353,-3180, 6256,-928, 3906,-377, 2295,-317, 1662,-1627, 1814,-2939, /* RG 29 */ 311,-2763, -19,-3628, -221,-5188, 256,-6532, 1073,-7735, 2285,-8775, 3803,-9470, 5643,-9286, 7009,-9161, 9151,-8114, 10776,-6613, 12151,-5109, 12994,-3214, 13649,-520, 13264,1736, /* RG 30 */ 8352,-7644, 8490,-6322, 8783,-6299, 8869,-5184, 9129,-4835, 8830,-3799, 9108,-3324, 8490,-2688, 8733,-1738, 8573,-1614, 8278,-772, 7367,74, 7276,592, 6873,1073, 6420,1282, /* RG 31 */ 8664,-5641, 8720,-4914, 9164,-4344, 9179,-3550, 9257,-2819, 9043,-2388, 8879,-1883, 8632,-1181, 8570,-257, 8231,488, 7180,471, 7233,1346, 7074,1897, 6712,2404, 5659,3034, /* RG 32 */ 3062,-3234, 2903,-3372, 2929,-3670, 2795,-3111, 2813,-3489, 3223,-3288, 2955,-3478, 2593,-3184, 3016,-2938, 3199,-3118, 3247,-2864, 2961,-3303, 3038,-2932, 2714,-3137, 2911,-3078, /* RG 33 */ 2856,-4561, 2994,-5105, 3213,-4812, 3780,-4678, 3511,-4878, 3332,-4701, 3048,-4734, 3638,-4724, 3394,-4819, 3371,-4835, 3009,-4591, 3139,-4806, 3398,-4534, 3297,-4718, 3562,-4774, /* RG 34 */ 201,-4049, 355,-3627, 381,-3394, 445,-3881, 289,-3591, 295,-3893, 255,-3605, 337,-4043, 482,-4007, 65,-3754, -59,-3564, 179,-3961, 67,-3710, 391,-3767, 321,-3764, /* RG 35 */ 3620,-5551, 3646,-5609, 3556,-5611, 3433,-5596, 3496,-5337, 3513,-5491, 3436,-5414, 3239,-5520, 3498,-5361, 3586,-5551, 3625,-5692, 3567,-5275, 3683,-5413, 3856,-5612, 3548,-5534, /* RG 36 */ 2857,-4337, 2668,-4467, 2644,-3926, 2888,-4627, 2452,-4160, 2648,-4349, 2899,-4175, 2655,-4566, 2944,-4440, 2702,-4747, 2800,-4387, 2741,-4508, 2566,-3937, 2763,-4652, 2774,-4671, /* CH 3 */ /* RG 1 */ -1467,7199, -1456,7180, -1423,7187, -1174,7383, -1095,7482, -1071,7191, -1171,6800, -1292,6740, -1112,7415, -1095,7396, -1078,7375, -1519,7250, -1672,7141, -1069,7059, -1364,7347, /* RG 2 */ -2336,8275, -2206,8177, -2460,8681, -2193,8271, -2519,8738, -1933,8438, -1899,8188, -2167,8630, -2028,8525, -2037,8427, -2383,8424, -2256,8549, -2175,8358, -2144,8420, -2002,8065, /* RG 3 */ -512,10097, -815,9796, -554,9868, -657,10310, -752,10001, -709,10104, -793,10540, -489,10063, -593,10322, -711,9997, -755,10460, -802,9984, -884,9909, -538,10202, -798,10102, /* RG 4 */ 3534,12086, 3640,11625, 3429,12054, 3396,11606, 3231,12022, 3771,11728, 3633,12069, 3692,11915, 3432,11992, 3573,11887, 3479,11852, 3163,12180, 3480,12121, 3327,11996, 3505,12088, /* RG 5 */ 5257,10034, 5154,9660, 5036,10028, 4791,9719, 5104,9900, 5632,9896, 5338,9663, 5386,9789, 5430,10027, 5399,9846, 5273,9907, 5029,9624, 4956,9812, 4991,9702, 5250,9648, /* RG 6 */ 5481,7055, 5540,7121, 5976,7309, 5466,7429, 5512,7508, 5301,7786, 5658,7518, 5292,7461, 5616,7479, 5535,7509, 5499,7250, 5648,7148, 5425,7351, 5307,7506, 5332,7324, /* RG 7 */ 1553,5810, 1678,5561, 1712,5487, 1569,5494, 1701,5696, 2022,5767, 1708,5418, 1855,5463, 1570,5736, 1573,5561, 1983,5893, 1760,5476, 1704,5568, 1517,5482, 1725,5845, /* RG 8 */ -566,7009, -127,6829, 29,7118, -344,7011, -214,6958, 24,6962, -718,6778, -608,7001, -389,6871, -230,7043, -663,6945, -283,7306, -417,7317, -95,6656, -221,6720, /* RG 9 */ -75,7076, -41,7103, 48,7075, 106,6973, -62,7071, -241,6986, -384,7300, -84,7196, -152,6745, -156,7013, 119,7045, 122,7063, -93,7311, -157,6860, 85,7015, /* RG 10 */ 1888,7342, 1673,7298, 1781,7239, 1888,7408, 1712,7442, 1955,7096, 1996,7759, 1745,7241, 1624,7665, 1721,7391, 1691,7577, 1476,7350, 1866,7123, 1612,7288, 2005,7024, /* RG 11 */ 2378,9644, 2033,9737, 2188,9741, 2451,9332, 2129,9545, 2100,9874, 2012,9463, 1708,9856, 2222,9507, 2121,9691, 1960,9728, 2064,9630, 2095,9294, 1833,9729, 1941,9633, /* RG 12 */ 580,8153, 527,8847, 585,8203, 645,8624, 827,8268, 226,8633, 514,8637, 951,8468, 562,8307, 589,8955, 535,8590, 580,8661, 567,8722, 796,8643, 492,8481, /* RG 13 */ 2137,6250, 2083,5757, 2236,6084, 2388,6018, 2251,5687, 2116,5999, 2334,6155, 1998,5619, 1777,5874, 2517,5873, 2400,5928, 2391,5824, 2247,5960, 1838,5615, 2600,5647, /* RG 14 */ 3837,4941, 3656,4917, 4083,4893, 3764,5170, 4137,5081, 3655,5352, 4119,4744, 3815,5050, 4030,5088, 4043,5161, 3781,4976, 3816,5251, 3736,5011, 3942,5130, 4184,4921, /* RG 15 */ -3314,-3468, -4778,-1798, -5235,-200, -5608,1760, -5710,3517, -5030,5029, -4525,6852, -3042,8570, -1776,9381, 153,10199, 1810,10140, 3811,10082, 5770,9321, 6772,8403, 8086,7125, /* RG 16 */ -5003,-3630, -6068,-2136, -6959,-242, -6739,1368, -6767,3313, -5669,5155, -4863,6311, -3282,7600, -2012,8441, 4,9064, 1799,8714, 3619,8314, 5334,7445, 6695,6515, 7556,4927, /* RG 17 */ -8960,-2045, -9794,-228, -10524,1312, -10484,3426, -9567,5008, -8908,6812, -7562,7776, -6239,8924, -4193,9483, -2987,9602, -916,9894, 993,9118, 2234,7789, 3568,6753, 4413,4900, /* RG 18 */ -16136,906, -15640,-831, -13534,-1515, -10111,-1370, -5685,1046, -1959,4240, 1137,8505, 2825,12764, 3339,16993, 2458,19394, 731,19959, -1446,17881, -2620,14334, -2361,9336, -1703,4380, /* RG 19 */ -20440,3280, -21252,-613, -19177,-3768, -15105,-5544, -9673,-5864, -3757,-4547, 1780,-1291, 5474,2339, 8043,6310, 9221,9223, 9369,10969, 8869,10766, 8253,9426, 8381,6649, 8896,3581, /* RG 20 */ -20193,1379, -21233,-2261, -20117,-5533, -16127,-7522, -10955,-8379, -5078,-7244, 511,-4866, 4964,-1000, 7578,2289, 8997,5321, 9338,7158, 8601,6965, 8452,5136, 8741,2593, 8769,-753, /* RG 21 */ -11742,4581, -13309,1764, -11622,-1267, -8666,-3077, -4381,-3532, 1414,-1914, 6813,1196, 11084,4929, 13691,8958, 15286,12311, 15012,14255, 14061,14557, 13009,13627, 12235,11136, 12140,8115, /* RG 22 */ -9815,2155, -11442,-629, -10599,-3368, -7341,-4983, -2696,-5680, 2662,-4066, 7938,-1653, 12342,2211, 15300,5997, 16772,9584, 16814,11759, 16432,12387, 15191,11500, 14763,9011, 14655,5764, /* RG 23 */ -12291,1784, -14183,-903, -13938,-3918, -10845,-5644, -6063,-6132, -540,-4750, 4614,-2363, 9218,1527, 12089,5495, 13904,8827, 13983,11201, 13591,11609, 12597,10447, 11949,8613, 12401,5682, /* RG 24 */ -9848,693, -11689,-2116, -10814,-4857, -7881,-6459, -3652,-7201, 1733,-5726, 6948,-2656, 11127,682, 14175,4946, 15702,8591, 15970,10962, 15702,11435, 15077,10499, 14957,8632, 15331,5738, /* RG 25 */ -12996,-2770, -14674,-5841, -14358,-8152, -11165,-10042, -7464,-10451, -2008,-8895, 3221,-5941, 7658,-1698, 9901,2642, 11908,6212, 12017,8742, 11534,9317, 11273,8334, 11044,6502, 12104,3588, /* RG 26 */ -7428,-663, -8276,-5222, -6621,-9855, -3949,-13117, 62,-14852, 4501,-14765, 8378,-12884, 11139,-10082, 11691,-6226, 11430,-3322, 9584,-627, 7234,874, 5653,910, 4395,-63, 4373,-1674, /* RG 27 */ -5680,294, -6300,-4471, -4731,-9032, -1731,-11915, 2476,-13364, 7026,-13074, 10685,-10693, 12709,-7747, 13643,-4173, 12581,-1113, 11165,1390, 8771,2115, 7398,2307, 6088,1025, 6342,-31, /* RG 28 */ -7260,-2904, -7641,-7751, -5444,-11722, -1564,-14265, 2970,-15357, 6960,-14326, 10109,-12124, 12311,-8421, 12737,-5136, 11862,-2047, 9508,-125, 7625,1022, 5738,621, 5355,-1032, 5229,-1921, /* RG 29 */ 2759,-2626, 2391,-3665, 1899,-5367, 2456,-6345, 3429,-7407, 4411,-8349, 6267,-8755, 7729,-8846, 9815,-8576, 11595,-7649, 12761,-6197, 13972,-4593, 14805,-2310, 15593,-17, 14844,2278, /* RG 30 */ 9862,-7380, 10350,-6772, 10227,-5834, 10315,-5106, 10278,-4582, 10126,-3608, 10492,-3199, 10104,-2662, 9720,-2185, 9750,-695, 9220,-659, 8979,-95, 8310,523, 7849,950, 7400,1301, /* RG 31 */ 9267,-5105, 9581,-4594, 9542,-3862, 9835,-3328, 9416,-2501, 9528,-1570, 9441,-1136, 9146,-602, 8513,-133, 8476,1070, 8002,1567, 7775,2052, 7278,2147, 6457,3043, 6053,3267, /* RG 32 */ 2339,-2853, 2558,-2356, 2760,-2553, 2470,-2361, 2602,-2449, 2504,-2483, 2476,-2560, 2271,-2417, 2199,-2578, 2748,-2521, 2420,-2118, 2532,-2605, 2371,-2577, 2677,-2498, 2492,-2570, /* RG 33 */ 2069,-4406, 2268,-4015, 1830,-4446, 2002,-4090, 2313,-4247, 1761,-4229, 2050,-4380, 1777,-4317, 2336,-4461, 2077,-3990, 2183,-3808, 2332,-4337, 1714,-4584, 2356,-4160, 2186,-4292, /* RG 34 */ -873,-3767, -438,-3903, -637,-3664, -749,-3581, -675,-3445, -425,-4020, -554,-3734, -794,-3778, -451,-3638, -805,-3839, -487,-3495, -541,-3835, -292,-3767, -509,-3711, -873,-3493, /* RG 35 */ 2115,-5765, 1862,-5614, 2141,-5592, 1796,-5471, 1988,-5561, 1668,-5652, 2067,-5601, 1751,-5474, 2053,-5752, 1915,-5594, 2006,-5801, 2077,-5338, 1868,-5711, 1862,-5581, 2086,-5496, /* RG 36 */ 251,-5408, 117,-5192, -39,-5212, 232,-4981, 484,-5090, 170,-4946, 127,-4978, 203,-4851, 144,-4873, -23,-5384, 532,-5203, 429,-4862, 45,-4922, 104,-5068, -26,-4851, /* CH 4 */ /* RG 1 */ -1267,7017, -1374,6719, -1445,6833, -1305,6661, -1326,6727, -1431,6609, -1075,6723, -1324,6853, -1487,6732, -1728,6630, -1212,6566, -1393,6813, -1357,6564, -1327,6857, -1354,6636, /* RG 2 */ -2499,7993, -2200,8199, -2706,7994, -2748,8273, -2860,8297, -2556,8176, -2880,7847, -2502,8022, -2507,8102, -2703,8090, -2655,8123, -2709,8048, -2537,8287, -2585,8230, -2724,8105, /* RG 3 */ -1507,9945, -1196,9662, -1313,10057, -1698,9878, -1087,9706, -1351,9604, -1151,10050, -1168,9940, -1497,10076, -1445,9661, -1402,9728, -1205,10050, -1509,9681, -1230,9838, -1457,9989, /* RG 4 */ 2434,12594, 2713,12594, 2573,12155, 2496,12354, 2357,12280, 2627,12357, 2893,12219, 2601,12717, 2755,12328, 2686,12342, 2398,12687, 2713,12147, 2610,12283, 2714,12259, 2719,12487, /* RG 5 */ 4846,9347, 4870,9234, 4826,9681, 4895,9527, 4777,9744, 4671,9675, 5111,9729, 4730,9605, 4846,9471, 4344,9495, 4888,9774, 4576,9431, 4516,9595, 4770,9638, 4856,9685, /* RG 6 */ 5164,6854, 5696,6624, 5634,6937, 5666,6589, 5639,7106, 5316,6649, 5312,6745, 5518,6781, 5602,7080, 5366,6921, 5428,6211, 5330,6975, 5222,6802, 5444,6880, 5536,6823, /* RG 7 */ 2787,5065, 3302,5476, 2717,5211, 3060,5407, 3108,5273, 2935,5096, 2955,5306, 3009,5049, 3087,5198, 2827,5194, 3005,5144, 2763,5373, 2921,5059, 2786,5012, 3093,5323, /* RG 8 */ 876,6223, 782,6300, 1234,6386, 879,6245, 672,6512, 1234,6277, 971,6447, 903,6319, 855,6555, 848,6571, 1058,6577, 632,6159, 522,6069, 735,6315, 937,6285, /* RG 9 */ 330,5921, 780,6258, 476,6369, 846,5952, 585,6189, 520,6291, 748,6068, 931,6277, 1015,5640, 760,6263, 744,6132, 841,6113, 513,6259, 828,6279, 1220,5806, /* RG 10 */ 813,6676, 992,7020, 670,6652, 727,7091, 874,6872, 1229,6421, 889,6532, 951,6504, 1148,6642, 445,6669, 1050,6537, 721,6611, 1054,6809, 977,6862, 777,6588, /* RG 11 */ 927,7406, 710,7197, 708,7304, 1310,7385, 771,7446, 720,7384, 893,7343, 1059,7579, 1083,7130, 1087,7211, 847,7530, 858,7552, 884,7267, 928,7525, 930,7293, /* RG 12 */ -383,7230, -539,6981, -604,6866, -103,7351, -314,7257, -663,7500, -324,6802, -34,6821, -283,6947, -425,6793, -136,7036, -254,7020, -349,7202, -441,6984, -277,7097, /* RG 13 */ 2207,5408, 2001,5471, 2248,5124, 1759,5193, 2140,5358, 1690,5171, 2067,5238, 2058,5318, 1724,5137, 1999,5082, 2135,5242, 1957,5140, 2014,5165, 2089,5182, 1901,5146, /* RG 14 */ 3343,4027, 3421,4030, 3322,3787, 3510,3835, 3615,3956, 3609,3949, 3347,3937, 3474,3765, 3474,3801, 3264,3894, 3098,3749, 3245,3891, 3200,3532, 3478,3876, 3613,3573, /* RG 15 */ -3916,-4389, -5281,-3096, -5824,-1263, -6198,106, -6336,1989, -5957,4017, -5553,5585, -4384,6833, -2544,8246, -1072,8596, 832,9199, 2655,9306, 4180,8274, 5961,7634, 7241,6492, /* RG 16 */ -6099,-5232, -6748,-3746, -7331,-2054, -7755,-525, -7413,1837, -6804,3311, -6282,4856, -4646,6027, -2931,6958, -1380,7386, 407,7557, 2268,6939, 3844,6608, 5705,5367, 6414,4247, /* RG 17 */ -9355,-3062, -10572,-1385, -10576,335, -10672,2350, -10163,4136, -9145,5680, -8208,7010, -6945,8053, -5171,8414, -3381,8988, -1272,9011, -42,8553, 2060,7549, 3035,6038, 4144,4730, /* RG 18 */ -17687,557, -16844,-1140, -14787,-2016, -11491,-1315, -7023,1027, -3321,4689, -246,9445, 1364,13659, 1535,17389, 247,20051, -1987,20208, -3521,18728, -4596,14516, -4374,9797, -2779,4756, /* RG 19 */ -22320,2165, -22473,-1832, -20639,-4750, -16371,-6528, -10894,-6267, -5355,-3942, -298,-892, 3759,3291, 6212,6902, 7163,10334, 7277,11730, 6769,11301, 6242,10095, 6538,7084, 7474,3616, /* RG 20 */ -20825,1040, -21816,-2333, -19772,-5945, -16378,-7550, -11459,-8198, -5597,-6607, -167,-3852, 3851,-196, 6928,3207, 8094,6402, 8518,8109, 8269,7845, 7756,6731, 7685,3541, 8440,302, /* RG 21 */ -11001,4540, -12401,1648, -11146,-1251, -7839,-2590, -3003,-2539, 2273,-1037, 7259,2250, 11372,6503, 14157,10106, 15231,13956, 14789,15794, 13817,16388, 12768,15287, 12531,12773, 12399,9395, /* RG 22 */ -8737,3301, -9654,-32, -9124,-2331, -5965,-4262, -834,-4528, 4287,-2724, 9287,217, 13377,4358, 15929,8268, 17516,11630, 17462,13804, 16713,14591, 15888,13422, 15345,10751, 15566,7531, /* RG 23 */ -10237,3229, -11742,30, -10749,-2407, -7858,-4199, -3296,-4069, 1878,-2900, 6892,-299, 11372,3964, 14184,8167, 15265,11507, 15599,13965, 14714,14576, 14279,13508, 13762,11148, 14155,8175, /* RG 24 */ -7103,2201, -8343,-1482, -7847,-3840, -4860,-5824, -632,-5702, 4400,-3975, 9656,-903, 13938,3050, 16635,7083, 17905,10732, 18350,13541, 17668,14215, 17104,13115, 17145,10629, 17669,7884, /* RG 25 */ -10179,-1597, -11850,-4866, -11436,-7604, -8388,-8653, -4115,-8998, 1081,-6928, 5971,-3588, 9661,244, 12610,4840, 13884,8491, 13953,10454, 13550,11562, 13124,10745, 13050,8612, 13966,5910, /* RG 26 */ -4588,69, -5576,-4627, -3735,-8893, -851,-12225, 2942,-13352, 7971,-13254, 11506,-11307, 13868,-8337, 15042,-4468, 14225,-1373, 12601,883, 10397,2204, 8395,1772, 6965,834, 7247,-685, /* RG 27 */ -2309,741, -2491,-4414, -883,-8133, 3000,-11369, 7151,-12595, 11383,-11934, 14766,-9556, 17310,-6252, 17719,-2642, 16751,714, 14847,2834, 12619,3456, 10571,3434, 9929,2323, 10264,793, /* RG 28 */ -4651,-2330, -4170,-7473, -1200,-10875, 2080,-13760, 6914,-14739, 10721,-13712, 14219,-10904, 15933,-7388, 16013,-4089, 15020,-844, 13041,1199, 11148,1487, 9496,1078, 8664,-61, 8898,-1310, /* RG 29 */ 3855,-3266, 3333,-4317, 3318,-5646, 3886,-6818, 5011,-7823, 6318,-8805, 7566,-9411, 9674,-9555, 10716,-8853, 12831,-7761, 14314,-6223, 15558,-4466, 16364,-2166, 16508,-422, 16238,2639, /* RG 30 */ 11201,-7069, 11093,-6596, 11170,-5468, 11738,-5149, 11150,-4668, 11201,-3867, 11172,-3190, 11012,-2369, 10683,-1607, 10798,-1403, 10178,-544, 9657,-180, 9377,575, 9179,1206, 8073,1307, /* RG 31 */ 9613,-4800, 9654,-3606, 9654,-3538, 9655,-2384, 9799,-2234, 9536,-1122, 9391,-347, 9188,-89, 8985,302, 8340,1356, 8059,1970, 7952,2340, 6745,2443, 6569,3216, 5864,3741, /* RG 32 */ 1454,-1923, 1442,-2138, 1928,-2039, 1155,-1845, 1572,-2087, 1113,-2027, 1148,-2417, 1426,-1707, 1709,-1873, 1321,-2048, 1650,-2173, 1752,-1922, 1225,-2229, 1557,-2107, 1446,-2150, /* RG 33 */ 246,-3715, 216,-3749, 476,-3640, 461,-3605, 275,-3445, 640,-3643, 395,-3259, 563,-3630, 352,-3689, 780,-3653, 307,-3448, 660,-3749, 380,-3462, 585,-3469, 665,-3660, /* RG 34 */ -1914,-3352, -1884,-3274, -2012,-3311, -1920,-3631, -2131,-3524, -2111,-3444, -2142,-3754, -1835,-3654, -2342,-3693, -1864,-3786, -1855,-3608, -1988,-3583, -1892,-3320, -2018,-3662, -1851,-3750, /* RG 35 */ -471,-5860, -365,-5356, -277,-5324, -250,-5498, -77,-5876, -656,-5245, -532,-5462, -396,-5311, -477,-5248, -209,-5331, -363,-5594, -390,-5253, -177,-5910, -525,-5458, -562,-5060, /* RG 36 */ -2799,-5237, -2835,-5176, -2730,-5299, -2979,-5629, -2706,-5301, -2763,-5206, -2870,-5162, -2631,-5131, -2785,-5504, -2797,-5411, -2868,-5300, -2873,-5382, -2789,-5401, -2748,-5274, -2941,-5372, /* CH 5 */ /* RG 1 */ -1688,5505, -1906,5698, -1445,6080, -1914,6217, -1557,6164, -1571,6106, -1473,5978, -1748,5653, -1510,6166, -1686,6238, -1545,5891, -1838,5548, -1657,6071, -1629,5935, -1799,5853, /* RG 2 */ -2987,7283, -2408,7582, -2694,7320, -2560,7647, -2677,7212, -2888,7453, -2612,7668, -2514,7395, -2773,7702, -2732,7591, -2606,7369, -2517,7255, -2477,7194, -2714,7506, -2315,7548, /* RG 3 */ -1910,8767, -1770,8985, -2059,8871, -1687,8892, -1796,8906, -1672,8958, -1709,8700, -1679,8920, -1762,8695, -2099,8849, -1807,8906, -1803,8930, -1637,8663, -1915,8510, -1954,8823, /* RG 4 */ 948,11915, 1746,11722, 1290,11953, 1369,11453, 1557,11866, 1369,11583, 1695,11720, 1223,11933, 1298,11870, 1158,11715, 1190,11816, 1655,11522, 1296,11717, 1483,11940, 1173,11613, /* RG 5 */ 4035,8688, 3680,8575, 3875,8778, 3765,8717, 3794,8642, 4143,8936, 3839,8746, 3846,8514, 4191,8783, 3845,8792, 4052,8947, 4139,9053, 4048,8856, 3916,8783, 4397,8936, /* RG 6 */ 4612,5956, 4745,5659, 4802,5675, 5038,5796, 4799,5775, 4672,6055, 4784,5960, 5079,5672, 4771,5984, 5128,5836, 4791,5580, 4748,5701, 5201,5648, 4827,5491, 4954,5565, /* RG 7 */ 3858,4784, 3953,4978, 3981,5279, 3940,4807, 4031,4878, 3653,4893, 4193,5081, 3919,5212, 4007,5132, 3943,4729, 3711,4911, 4157,4791, 3899,4578, 3997,5180, 4001,5158, /* RG 8 */ 1914,5381, 2105,5442, 2011,5742, 2108,5604, 1936,5258, 1907,5435, 2422,5683, 2308,5169, 2069,5674, 2079,5929, 1869,5379, 1901,5762, 2126,5928, 2224,5239, 1904,5598, /* RG 9 */ 1375,4913, 1586,5583, 1543,4879, 1257,5060, 1391,5402, 1397,5013, 1242,4891, 1648,4862, 1239,4962, 1232,5225, 1336,5132, 1649,4873, 1577,5084, 1558,5412, 1631,5194, /* RG 10 */ -621,5783, -876,5794, -1042,5809, -468,5660, -691,5718, -481,5757, -598,5647, -563,5422, -467,5576, -614,5497, -673,5455, -891,5451, -543,5616, -504,5546, -702,5561, /* RG 11 */ -778,5080, -664,5477, -562,5304, -493,5449, -683,4897, -282,4955, -543,5133, -301,4938, -858,5104, -650,5141, -786,5344, -746,5250, -736,4978, -769,5185, -730,5103, /* RG 12 */ -1733,5150, -1934,5291, -1710,5090, -1797,4995, -1605,5268, -1390,5125, -1585,5361, -1783,5353, -1976,4968, -1712,5254, -1313,5151, -1731,5443, -1604,5233, -1758,5145, -1383,5175, /* RG 13 */ 1554,4086, 1592,4351, 1397,4263, 1231,4044, 1200,4069, 1676,4029, 1206,3997, 1242,3969, 1275,4100, 1339,3902, 1538,3797, 1224,3935, 1507,3840, 1214,4284, 1226,4387, /* RG 14 */ 2319,2602, 2259,2486, 2360,2782, 2109,2581, 2008,2404, 2436,2871, 2197,2585, 1875,2501, 2324,2692, 2233,2536, 2159,2389, 2420,2342, 2173,2340, 1880,2320, 2429,2688, /* RG 15 */ -4584,-4810, -5859,-3498, -6892,-2370, -7548,-540, -7719,1117, -7479,3653, -6745,5298, -5627,6262, -4433,7770, -2437,8283, -641,8734, 760,8940, 2500,8461, 4668,7549, 6090,6634, /* RG 16 */ -6710,-5881, -7733,-4433, -8645,-2724, -8977,-792, -8773,627, -8008,2521, -7110,4108, -6141,5534, -4352,6655, -2754,6971, -874,7592, 813,6754, 2496,6131, 4117,5175, 5735,4118, /* RG 17 */ -9534,-3400, -10789,-1337, -11227,56, -11464,2363, -10648,3788, -10361,5630, -9528,7039, -7995,8156, -6179,9324, -4303,9398, -2617,9340, -357,8905, 312,8050, 2195,6919, 3293,5656, /* RG 18 */ -18633,588, -18592,-1573, -16256,-2138, -12555,-1160, -8565,1504, -5060,5454, -2537,10033, -991,14836, -1281,18177, -2743,20723, -4397,20378, -5887,18884, -6812,15054, -6622,10384, -4643,5222, /* RG 19 */ -24526,1629, -24594,-1901, -22007,-5041, -18115,-6740, -12153,-6316, -7209,-3788, -2427,-394, 1514,3827, 3841,7893, 4931,10817, 4466,12404, 4294,12361, 3764,10301, 4496,7414, 5235,4119, /* RG 20 */ -21775,1873, -22848,-1908, -20699,-5430, -17157,-6852, -12004,-7217, -5982,-5708, -959,-2301, 2942,1755, 5336,5482, 6866,8388, 6796,10222, 6185,9798, 6088,8113, 6499,5118, 7367,2151, /* RG 21 */ -11761,5102, -13050,2138, -11490,-471, -8194,-1913, -3590,-1654, 1627,392, 6602,3781, 10598,7549, 13142,12093, 14150,15423, 13587,17426, 12731,17778, 11876,16778, 11630,13895, 11506,11202, /* RG 22 */ -8451,4096, -9829,971, -8473,-1716, -5559,-2866, -1044,-2989, 4047,-1452, 9499,1875, 13714,5899, 15792,10229, 17013,13496, 16639,16004, 16073,16509, 15465,15598, 14801,13216, 15476,9909, /* RG 23 */ -9367,4547, -10895,1732, -9957,-920, -6490,-2434, -2399,-2842, 3135,-1299, 8358,2518, 11726,6240, 14678,10869, 16068,14108, 16053,16717, 15632,17201, 14274,16183, 14670,13643, 14690,10937, /* RG 24 */ -5786,3026, -7045,16, -6404,-2330, -3137,-3951, 1248,-3642, 6342,-1756, 11134,1224, 15196,5642, 17329,9623, 19081,13593, 19152,15567, 18480,16709, 18272,15495, 17621,13273, 18653,10484, /* RG 25 */ -8628,105, -10208,-3285, -9559,-6240, -6734,-7357, -2075,-6895, 3109,-5076, 7836,-1608, 11336,2647, 13859,7171, 15032,10817, 14984,13513, 14351,14353, 14162,13568, 14142,10860, 15272,8577, /* RG 26 */ -2783,1518, -3286,-3194, -1486,-7540, 1691,-10466, 6139,-12102, 10357,-11385, 13906,-9396, 16292,-5564, 16819,-2208, 15570,607, 14158,3046, 11750,4274, 9840,3968, 8799,2756, 8759,1609, /* RG 27 */ 198,1046, 628,-3698, 2730,-7890, 6388,-10687, 10276,-11339, 14634,-10350, 18179,-8059, 19866,-4992, 20246,-1174, 19381,1775, 17351,4056, 15375,4632, 13430,4317, 12287,3235, 12863,2162, /* RG 28 */ -1547,-2812, -1039,-7747, 1453,-11732, 5480,-13764, 9856,-14620, 14123,-12954, 16992,-10300, 18883,-6590, 18925,-2873, 17411,-173, 15380,1678, 13157,2127, 11572,1485, 11102,122, 11701,-766, /* RG 29 */ 4136,-4382, 4098,-5188, 4234,-6984, 4825,-8174, 5585,-9162, 7000,-10034, 8987,-10309, 10646,-10055, 12459,-9480, 14017,-8403, 15284,-7025, 16519,-4912, 16850,-2825, 17054,-419, 16756,1801, /* RG 30 */ 11839,-7391, 12317,-6578, 12092,-5688, 12277,-5327, 12191,-4675, 11864,-3930, 11811,-3283, 11683,-2813, 11186,-2118, 11055,-1489, 10542,-644, 10004,-496, 9668,86, 9385,364, 8237,918, /* RG 31 */ 9737,-4665, 10077,-4195, 10135,-2965, 9622,-2520, 9598,-1754, 9561,-1275, 9438,-568, 8711,113, 8931,344, 8394,1305, 7974,1809, 7535,2136, 6989,2622, 6264,3477, 5726,3658, /* RG 32 */ 454,-2120, 559,-2139, 314,-2113, 429,-2267, 393,-2157, 337,-2015, 118,-2083, 637,-2491, 180,-2336, 8,-2049, 252,-2033, 600,-1884, 545,-2302, 321,-1917, 180,-2074, /* RG 33 */ -525,-3096, -805,-3056, -415,-3277, -558,-3147, -366,-3193, -313,-3080, -725,-3264, -646,-3245, -684,-3238, -683,-3030, -731,-2966, -681,-2994, -437,-3054, -620,-3083, -699,-3278, /* RG 34 */ -2802,-3840, -2976,-3359, -3385,-3305, -2861,-3592, -2866,-3435, -3517,-3349, -2805,-3441, -3026,-3374, -3211,-3854, -3085,-3518, -3190,-3702, -2843,-3193, -2869,-3380, -2795,-3365, -2768,-3588, /* RG 35 */ -2152,-5206, -2021,-5139, -1920,-5154, -1908,-5102, -2138,-5202, -2318,-5226, -1981,-5373, -1811,-5397, -2063,-5437, -1857,-5175, -1977,-5072, -2076,-5240, -2084,-5172, -1902,-5585, -2167,-5338, /* RG 36 */ -4814,-5547, -4961,-5693, -5248,-5460, -5262,-5684, -4950,-5767, -5129,-5501, -4941,-5364, -4786,-4912, -4647,-5442, -4576,-5420, -5145,-5374, -4556,-5594, -5068,-5523, -5109,-6024, -4721,-5613, /* CH 6 */ /* RG 1 */ -2097,5325, -1962,5577, -2126,5446, -2097,4976, -2139,5115, -2482,5133, -1663,5442, -2226,5268, -1830,5359, -1828,5017, -1804,5175, -1383,4990, -1901,5501, -1551,5063, -1818,5313, /* RG 2 */ -2928,7171, -3217,6896, -2813,6883, -2802,6615, -2943,6948, -2718,6637, -2837,6715, -2630,6898, -2961,6834, -2903,6543, -2631,6883, -2642,6477, -2582,6812, -2951,6928, -2685,6947, /* RG 3 */ -2415,8218, -2456,7984, -2249,7600, -2521,7948, -2414,7896, -2432,7990, -2198,7933, -2237,8025, -2437,7829, -2259,8188, -2231,8347, -2448,8172, -2485,7968, -2398,8055, -2250,8361, /* RG 4 */ -646,10737, -725,10511, -657,10622, -596,10557, -436,10758, -554,10788, -373,10581, -457,10890, -654,10566, -600,10704, -486,10709, -734,10690, -267,10599, -402,10626, -383,10740, /* RG 5 */ 2098,8118, 2281,7739, 2376,7877, 2222,7752, 2499,8062, 2308,7938, 2723,7898, 2641,7866, 2394,8095, 2473,7801, 2356,7706, 2483,8132, 2419,8120, 2195,8035, 2214,8331, /* RG 6 */ 3614,5284, 3768,5524, 3432,5589, 3509,5384, 3538,5354, 3659,5130, 3240,5288, 3673,5222, 3324,5702, 3520,5119, 3478,5168, 3734,5136, 3208,5732, 3617,5425, 3659,5438, /* RG 7 */ 3935,5700, 3598,5302, 4305,5275, 4102,5005, 3939,5226, 3804,5243, 3780,5239, 4114,5373, 4125,5362, 3911,5216, 4220,5151, 4066,5184, 4013,5319, 4114,5432, 4202,4942, /* RG 8 */ 2514,5159, 2686,5047, 2211,4989, 2691,5310, 2559,5353, 2356,5247, 2762,5240, 2694,5325, 2679,5298, 2520,5299, 2321,5364, 2605,5199, 2628,5221, 2703,5170, 2650,5160, /* RG 9 */ 1959,4261, 1556,4013, 1732,3801, 1808,4149, 1462,4216, 1818,4252, 1584,4058, 1599,4358, 1582,4018, 1890,3935, 1959,3952, 1888,4180, 1889,4134, 1755,4238, 1753,4190, /* RG 10 */ -2801,4881, -2831,4846, -2401,4744, -2873,4856, -2561,5137, -3143,4774, -2965,5155, -2572,4864, -2698,4752, -2925,5352, -2838,4690, -2579,5062, -2860,4564, -3163,5077, -2997,4903, /* RG 11 */ -2799,3460, -2846,3307, -2423,3658, -2713,3486, -2892,3035, -2737,3227, -2976,3172, -2929,3540, -3082,3251, -2879,3442, -2536,3232, -2818,3702, -2503,3322, -2801,3346, -2866,3411, /* RG 12 */ -3054,3528, -3181,3246, -3286,3382, -3406,3168, -3332,3236, -3289,3174, -3292,3228, -3390,3278, -3351,3484, -3137,3428, -3095,3257, -3450,3813, -3397,3588, -3513,3082, -3285,3025, /* RG 13 */ 217,2716, 26,2506, 183,3002, -3,2975, 314,3097, 539,2483, 367,2736, 328,3061, 346,2681, -51,2856, 525,3068, 263,2804, 92,3105, 200,2968, -73,2550, /* RG 14 */ 995,1439, 831,1195, 753,1621, 1200,1447, 850,1554, 789,1514, 1180,1181, 607,1389, 840,1307, 1080,943, 1060,1213, 676,1305, 988,1362, 821,1499, 802,1433, /* RG 15 */ -5784,-5397, -7612,-3915, -8409,-2732, -9478,-788, -9926,852, -9349,2695, -8819,4345, -7608,6048, -6536,7190, -4868,7827, -3396,8734, -1133,8966, 923,8676, 2209,7711, 3258,6950, /* RG 16 */ -7205,-6009, -8482,-4097, -9202,-3242, -9912,-941, -9622,907, -9172,2430, -8393,4124, -7231,5382, -5913,6486, -4045,7463, -2434,7713, -261,7358, 1618,6892, 2790,5570, 4140,4448, /* RG 17 */ -9964,-2418, -11046,-752, -11416,885, -11494,2345, -11479,4539, -11103,6221, -10035,7436, -8139,8752, -6800,9518, -5114,10587, -3498,10248, -1683,10375, 76,9123, 1596,8166, 2205,6227, /* RG 18 */ -20228,-21, -19905,-1539, -17738,-2436, -13695,-1247, -9791,1259, -6629,5551, -3814,10407, -2949,14641, -3403,19023, -4968,20795, -6776,21221, -8251,19052, -8533,15192, -7956,10751, -5995,5538, /* RG 19 */ -26185,855, -26001,-3032, -23554,-5922, -19812,-7152, -14208,-6350, -8786,-4082, -3964,-200, -406,4194, 1862,8404, 2165,11516, 2142,12914, 1560,12798, 1598,11053, 1764,8102, 3444,5097, /* RG 20 */ -23376,1932, -24204,-2012, -21693,-5007, -18230,-6670, -12753,-6184, -7567,-4588, -2136,-1144, 1612,2739, 3784,6790, 4812,10424, 4719,11633, 4359,11542, 4421,9991, 4364,7035, 5793,3741, /* RG 21 */ -13152,4843, -14184,1541, -12857,-866, -9175,-2042, -4598,-1637, 742,673, 5382,4375, 9019,8796, 11032,13147, 11956,16791, 11482,18474, 10390,19000, 9570,17822, 9321,15349, 9888,12339, /* RG 22 */ -9364,4311, -10405,1270, -9151,-1206, -6099,-3076, -1123,-2466, 3837,-304, 8879,3416, 12623,7596, 14777,11654, 16072,15424, 15481,17619, 14871,17979, 13842,16868, 13914,14573, 14016,11474, /* RG 23 */ -9503,5049, -10840,1801, -9909,-832, -6796,-2099, -2182,-1815, 3075,319, 7877,3717, 11391,8598, 14197,12522, 15038,16238, 14996,18144, 14289,18599, 13855,17740, 13286,15342, 14194,12826, /* RG 24 */ -5288,4295, -6765,932, -5889,-1342, -3033,-2854, 1542,-2281, 6739,-494, 11274,2955, 15021,7405, 17459,11819, 18440,15302, 18331,17781, 17846,18799, 17342,17700, 17297,15467, 17982,12494, /* RG 25 */ -8203,1361, -9388,-2050, -8339,-4611, -5513,-5808, -1420,-5424, 3488,-3180, 8246,346, 11704,5228, 14083,9456, 14883,13705, 14694,15896, 14053,16519, 14045,15771, 14276,13625, 15259,10832, /* RG 26 */ -2292,2300, -2190,-1987, -716,-6608, 3050,-9054, 7035,-10566, 11504,-9494, 14928,-7520, 17046,-3646, 17379,-520, 16652,2687, 14852,4918, 12363,5753, 10807,5735, 9358,4371, 9380,3131, /* RG 27 */ 1914,1268, 2095,-3572, 4465,-7539, 8038,-10141, 12630,-10928, 16704,-9874, 20178,-7119, 21733,-3868, 21885,34, 20830,3174, 18523,4712, 16188,5226, 14622,4969, 13902,3949, 14588,2458, /* RG 28 */ -116,-3122, 727,-8019, 3593,-11955, 7552,-14001, 11543,-14280, 15945,-12668, 18573,-9642, 20033,-6384, 20091,-2782, 18818,50, 16192,1911, 14724,2499, 12395,1746, 12177,22, 12681,-539, /* RG 29 */ 4234,-5723, 4011,-6812, 4039,-8006, 5076,-9412, 5927,-10193, 7541,-10949, 9128,-11621, 10763,-11111, 12737,-10642, 14005,-9318, 15075,-7833, 16251,-5548, 16925,-3418, 16913,-1265, 16406,1459, /* RG 30 */ 12274,-7888, 12670,-7151, 12721,-5913, 12432,-5414, 12465,-4680, 12322,-4153, 12724,-3559, 12083,-2689, 11897,-2323, 11685,-1446, 10872,-1467, 10584,-665, 10113,-339, 9288,423, 8916,893, /* RG 31 */ 10030,-4862, 9711,-4032, 10242,-3444, 10250,-2622, 9792,-1756, 9654,-1223, 9335,-482, 9345,230, 8406,412, 8351,874, 7680,1697, 7407,2184, 6908,2402, 6139,2834, 5365,2940, /* RG 32 */ -234,-3142, 47,-3002, 192,-2803, -298,-2747, -146,-2852, 151,-2967, 36,-2991, -52,-2639, 27,-2599, 326,-2605, 262,-2953, -210,-2918, 97,-2697, -202,-2862, 72,-2943, /* RG 33 */ -800,-3154, -762,-3172, -734,-2907, -923,-2752, -807,-2850, -638,-2749, -573,-2874, -873,-2856, -594,-3517, -874,-3006, -1031,-3138, -691,-2757, -527,-2696, -768,-3012, -959,-3166, /* RG 34 */ -3524,-3928, -3256,-3977, -3355,-4009, -3128,-3973, -3236,-3931, -3518,-3620, -3223,-3768, -2858,-3854, -3279,-3834, -3093,-3751, -3374,-3734, -3067,-3882, -3405,-4154, -3249,-4012, -3472,-3911, /* RG 35 */ -2725,-5111, -2986,-5067, -2825,-5595, -2716,-5862, -2699,-5387, -2407,-5165, -2313,-5515, -2583,-5138, -2496,-5558, -2313,-5002, -2592,-4971, -2674,-5208, -2555,-5504, -2719,-5129, -2451,-5159, /* RG 36 */ -5297,-6217, -5237,-5957, -5459,-6245, -5488,-6188, -5804,-6000, -5476,-6326, -5268,-5760, -5294,-6091, -5283,-6470, -5297,-6142, -5538,-6219, -5519,-5842, -5082,-6242, -5391,-6053, -5333,-5946}; work push 36 * 2 * m { for (int i=0; i<36*2*m; i++) { push(Raw[i]); } } // alternative is to just generate some inputs. /* work push 36 * 2 * m { for (int i=0; ifloat filter CombineDFT(int n) { // coefficients, real and imaginary interleaved float[n] w; init { float wn_r = (float)cos(2 * 3.141592654 / n); float wn_i = (float)sin(-2 * 3.141592654 / n); float real = 1; float imag = 0; float next_real, next_imag; for (int i=0; ifloat filter CombineIDFT(int n) { // coefficients, real and imaginary interleaved float[n] w; init { float wn_r = (float)cos(2 * 3.141592654 / n); float wn_i = (float)sin(2 * 3.141592654 / n); float real = 1; float imag = 0; float next_real, next_imag; for (int i=0; ifloat filter CombineIDFTFinal(int n) { // coefficients, real and imaginary interleaved float[n] w; float n_recip; init { float wn_r = (float)cos(2 * 3.141592654 / n); float wn_i = (float)sin(2 * 3.141592654 / n); n_recip = 1.0/((float)n); // scales coefficients for y1 (but not y0) float real = n_recip; float imag = 0; float next_real, next_imag; for (int i=0; ifloat filter FFTReorderSimple(int n) { int totalData; init { totalData = 2*n; } work push 2*n pop 2*n { int i; for (i = 0; i < totalData; i+=4) { push(peek(i)); push(peek(i+1)); } for (i = 2; i < totalData; i+=4) { push(peek(i)); push(peek(i+1)); } for (i=0;ifloat pipeline FFTReorder(int n) { for(int i=1; i<(n/2); i*= 2) add FFTReorderSimple(n/i); } // N-way complex FFT where N is power of 2 float->float pipeline FFTKernel4(int n, int DataParallelism) { if (DataParallelism == 1) { add FFTReorder(n); for(int j=2; j<=n; j*=2) { add CombineDFT(j); } } else { // data-parallel version add float->float splitjoin { split roundrobin(2*n); for(int i=0; ifloat pipeline IFFTKernel4(int n, int DataParallelism) { if (DataParallelism == 1) { add FFTReorder(n); for(int j=2; jfloat splitjoin { split roundrobin(2*n); for(int i=0; i