1 /*
2  * Copyright (c) 2007 - 2015 Joseph Gaeddert
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20  * THE SOFTWARE.
21  */
22 
23 //
24 // modem_arb_const.c
25 //
26 // Constant arbitrary linear modems
27 //
28 
29 #include <stdlib.h>
30 #include "liquid.internal.h"
31 
32 // 'square' 32-QAM (first quadrant)
33 const float complex modem_arb_sqam32[8] = {
34       0.22361000+  0.22361000*_Complex_I,   0.67082000+  0.22361000*_Complex_I,
35       0.67082000+  1.11800000*_Complex_I,   1.11800000+  0.22361000*_Complex_I,
36       0.22361000+  0.67082000*_Complex_I,   0.67082000+  0.67082000*_Complex_I,
37       0.22361000+  1.11800000*_Complex_I,   1.11800000+  0.67082000*_Complex_I
38 };
39 
40 // 'square' 128-QAM (first quadrant)
41 const float complex modem_arb_sqam128[32] = {
42       0.11043000+  0.11043000*_Complex_I,   0.33129000+  0.11043000*_Complex_I,
43       0.11043000+  0.33129000*_Complex_I,   0.33129000+  0.33129000*_Complex_I,
44       0.77302000+  0.11043000*_Complex_I,   0.55216000+  0.11043000*_Complex_I,
45       0.77302000+  0.33129000*_Complex_I,   0.55216000+  0.33129000*_Complex_I,
46       0.77302000+  0.99388000*_Complex_I,   0.55216000+  0.99388000*_Complex_I,
47       0.77302000+  1.21470000*_Complex_I,   0.55216000+  1.21470000*_Complex_I,
48       0.99388000+  0.11043000*_Complex_I,   1.21470000+  0.11043000*_Complex_I,
49       0.99388000+  0.33129000*_Complex_I,   1.21470000+  0.33129000*_Complex_I,
50       0.11043000+  0.77302000*_Complex_I,   0.33129000+  0.77302000*_Complex_I,
51       0.11043000+  0.55216000*_Complex_I,   0.33129000+  0.55216000*_Complex_I,
52       0.77302000+  0.77302000*_Complex_I,   0.55216000+  0.77302000*_Complex_I,
53       0.77302000+  0.55216000*_Complex_I,   0.55216000+  0.55216000*_Complex_I,
54       0.11043000+  0.99388000*_Complex_I,   0.33129000+  0.99388000*_Complex_I,
55       0.11043000+  1.21470000*_Complex_I,   0.33129000+  1.21470000*_Complex_I,
56       0.99388000+  0.77302000*_Complex_I,   1.21470000+  0.77302000*_Complex_I,
57       0.99388000+  0.55216000*_Complex_I,   1.21470000+  0.55216000*_Complex_I
58 };
59 
60 // V.29 star constellation
61 const float complex modem_arb_V29[16] = {
62       0.06804100+  0.06804100*_Complex_I,   0.20412000+  0.00000000*_Complex_I,
63       0.00000000+  0.20412000*_Complex_I,  -0.06804100+  0.06804100*_Complex_I,
64       0.00000000+ -0.20412000*_Complex_I,   0.06804100+ -0.06804100*_Complex_I,
65      -0.06804100+ -0.06804100*_Complex_I,  -0.20412000+  0.00000000*_Complex_I,
66       0.20412000+  0.20412000*_Complex_I,   0.34021000+  0.00000000*_Complex_I,
67       0.00000000+  0.34021000*_Complex_I,  -0.20412000+  0.20412000*_Complex_I,
68       0.00000000+ -0.34021000*_Complex_I,   0.20412000+ -0.20412000*_Complex_I,
69      -0.20412000+ -0.20412000*_Complex_I,  -0.34021000+  0.00000000*_Complex_I
70 };
71 
72 // Virginia Tech logo
73 const float complex modem_arb_vt64[64] = {
74      -1.5633e+00+  5.5460e-01*_Complex_I,  -1.3833e+00+  5.5460e-01*_Complex_I,
75      -1.0234e+00+  5.5460e-01*_Complex_I,  -1.2034e+00+  5.5460e-01*_Complex_I,
76      -7.3553e-01+  5.0751e-02*_Complex_I,  -8.0750e-01+  1.7671e-01*_Complex_I,
77      -9.5146e-01+  4.2863e-01*_Complex_I,  -8.7948e-01+  3.0267e-01*_Complex_I,
78      -3.3741e-02+  5.5460e-01*_Complex_I,  -2.1368e-01+  5.5460e-01*_Complex_I,
79      -4.4761e-01+  4.2863e-01*_Complex_I,  -3.9363e-01+  5.5460e-01*_Complex_I,
80      -6.6355e-01+ -7.5211e-02*_Complex_I,  -6.0956e-01+  5.0751e-02*_Complex_I,
81      -5.0160e-01+  3.0267e-01*_Complex_I,  -5.5558e-01+  1.7671e-01*_Complex_I,
82       9.5596e-01+  1.0473e-01*_Complex_I,   1.1359e+00+  1.0473e-01*_Complex_I,
83       1.4958e+00+  1.0473e-01*_Complex_I,   1.3158e+00+  1.0473e-01*_Complex_I,
84       1.5858e+00+  5.5460e-01*_Complex_I,   1.7657e+00+  5.5460e-01*_Complex_I,
85       1.5858e+00+  2.5499e-01*_Complex_I,   1.6757e+00+  4.0434e-01*_Complex_I,
86       1.4621e-01+  5.5460e-01*_Complex_I,   3.2615e-01+  5.5460e-01*_Complex_I,
87       6.8604e-01+  5.5460e-01*_Complex_I,   5.0610e-01+  5.5460e-01*_Complex_I,
88       1.4058e+00+  5.5460e-01*_Complex_I,   1.2259e+00+  5.5460e-01*_Complex_I,
89       8.6599e-01+  5.5460e-01*_Complex_I,   1.0459e+00+  5.5460e-01*_Complex_I,
90      -1.4508e+00+  3.6385e-01*_Complex_I,  -1.3383e+00+  1.7221e-01*_Complex_I,
91      -1.1134e+00+ -2.1017e-01*_Complex_I,  -1.2259e+00+ -1.8529e-02*_Complex_I,
92      -6.6355e-01+ -9.7494e-01*_Complex_I,  -7.7601e-01+ -7.8420e-01*_Complex_I,
93      -1.0009e+00+ -4.0181e-01*_Complex_I,  -8.8848e-01+ -5.9255e-01*_Complex_I,
94       1.4621e-01+  1.0473e-01*_Complex_I,   1.1246e-02+  1.0473e-01*_Complex_I,
95      -2.1368e-01+ -7.5211e-02*_Complex_I,  -1.2371e-01+  1.0473e-01*_Complex_I,
96      -5.7358e-01+ -7.9499e-01*_Complex_I,  -4.8360e-01+ -6.1505e-01*_Complex_I,
97      -3.0366e-01+ -2.5516e-01*_Complex_I,  -3.9363e-01+ -4.3510e-01*_Complex_I,
98       8.5069e-01+ -7.5211e-02*_Complex_I,   7.4632e-01+ -2.5516e-01*_Complex_I,
99       5.3579e-01+ -6.1505e-01*_Complex_I,   6.4105e-01+ -4.3510e-01*_Complex_I,
100      -3.3741e-02+ -9.7494e-01*_Complex_I,   1.4621e-01+ -9.7494e-01*_Complex_I,
101       4.3142e-01+ -7.9499e-01*_Complex_I,   3.2615e-01+ -9.7494e-01*_Complex_I,
102       2.8116e-01+  1.0473e-01*_Complex_I,   4.1612e-01+  1.0473e-01*_Complex_I,
103       2.0649e-01+ -2.5516e-01*_Complex_I,   3.1086e-01+ -7.5211e-02*_Complex_I,
104      -2.1368e-01+ -9.7494e-01*_Complex_I,  -1.0842e-01+ -7.9499e-01*_Complex_I,
105       1.0122e-01+ -4.3510e-01*_Complex_I,  -4.0500e-03+ -6.1505e-01*_Complex_I
106 };
107 
108 // optimal 16-QAM
109 const float complex modem_arb16opt[16] = {
110      -0.87119000+ -0.87970000*_Complex_I,  -1.15090000+ -0.26101000*_Complex_I,
111      -1.10090000+  0.87457000*_Complex_I,  -0.81088000+  0.29689000*_Complex_I,
112      -0.21295000+ -0.91897000*_Complex_I,  -0.46984000+ -0.29804000*_Complex_I,
113      -0.43443000+  0.91820000*_Complex_I,  -0.16786000+  0.30338000*_Complex_I,
114       1.10000000+ -0.87511000*_Complex_I,   0.81125000+ -0.29671000*_Complex_I,
115       0.87134000+  0.87989000*_Complex_I,   1.15170000+  0.26143000*_Complex_I,
116       0.43379000+ -0.91801000*_Complex_I,   0.16807000+ -0.30335000*_Complex_I,
117       0.21246000+  0.91867000*_Complex_I,   0.47033000+  0.29787000*_Complex_I
118 };
119 
120 // optimal 32-QAM
121 const float complex modem_arb32opt[32] = {
122      -1.04570000+ -0.72639000*_Complex_I,  -1.26710000+ -0.00824020*_Complex_I,
123      -0.99868000+  0.92359000*_Complex_I,  -1.13660000+  0.45833000*_Complex_I,
124      -0.67812000+ -1.07470000*_Complex_I,  -0.88363000+ -0.25914000*_Complex_I,
125      -0.64443000+  0.62407000*_Complex_I,  -0.76238000+  0.18163000*_Complex_I,
126      -0.20985000+ -0.91032000*_Complex_I,  -0.08603100+ -0.45730000*_Complex_I,
127      -0.18073000+  0.75747000*_Complex_I,   0.02826900+ -0.01908400*_Complex_I,
128      -0.55206000+ -0.61092000*_Complex_I,  -0.42946000+ -0.16611000*_Complex_I,
129      -0.51187000+  1.09190000*_Complex_I,  -0.30769000+  0.27731000*_Complex_I,
130       1.20280000+ -0.58421000*_Complex_I,   1.29120000+ -0.09249800*_Complex_I,
131       1.10450000+  0.69170000*_Complex_I,   0.96433000+  0.24011000*_Complex_I,
132       0.60130000+ -1.16500000*_Complex_I,   0.83106000+ -0.23576000*_Complex_I,
133       0.73090000+  1.01880000*_Complex_I,   0.62090000+  0.54470000*_Complex_I,
134       0.23884000+ -0.81583000*_Complex_I,   0.36064000+ -0.36749000*_Complex_I,
135      -0.02439300+  1.23570000*_Complex_I,   0.15492000+  0.41465000*_Complex_I,
136       0.11172000+ -1.28340000*_Complex_I,   0.70560000+ -0.68005000*_Complex_I,
137       0.28323000+  0.89268000*_Complex_I,   0.48844000+  0.10367000*_Complex_I
138 };
139 
140 // optimal 64-QAM
141 const float complex modem_arb64opt[64] = {
142      -9.6048e-01 +  -1.0031e+00*_Complex_I,
143      -1.1105e+00 +  -6.8896e-01*_Complex_I,
144      -1.1029e+00 +  -9.5064e-02*_Complex_I,
145      -1.2692e+00 +  -3.8774e-01*_Complex_I,
146      -7.9322e-01 +   1.1014e+00*_Complex_I,
147      -9.5999e-01 +   7.9701e-01*_Complex_I,
148      -1.2734e+00 +   1.9621e-01*_Complex_I,
149      -1.1121e+00 +   4.9520e-01*_Complex_I,
150      -6.2388e-01 +  -9.8614e-01*_Complex_I,
151      -7.7108e-01 +  -6.8653e-01*_Complex_I,
152      -7.6793e-01 +  -1.0097e-01*_Complex_I,
153      -9.1812e-01 +  -3.9210e-01*_Complex_I,
154      -4.5416e-01 +   1.0712e+00*_Complex_I,
155      -6.1578e-01 +   7.7701e-01*_Complex_I,
156      -9.1845e-01 +   1.9699e-01*_Complex_I,
157      -7.7026e-01 +   4.8601e-01*_Complex_I,
158      -1.1067e-01 +  -1.2612e+00*_Complex_I,
159      -2.6544e-01 +  -9.6343e-01*_Complex_I,
160       1.3076e+00 +   4.5615e-01*_Complex_I,
161      -2.5827e-01 +  -3.9458e-01*_Complex_I,
162      -1.0044e-01 +   1.0486e+00*_Complex_I,
163       3.9086e-02 +   7.4394e-01*_Complex_I,
164      -2.6144e-01 +   1.7968e-01*_Complex_I,
165      -1.1912e-01 +   4.5495e-01*_Complex_I,
166      -4.5452e-01 +  -1.2733e+00*_Complex_I,
167      -4.3866e-01 +  -6.8570e-01*_Complex_I,
168      -4.3802e-01 +  -1.0872e-01*_Complex_I,
169      -5.8466e-01 +  -3.9550e-01*_Complex_I,
170      -2.6246e-01 +   1.3479e+00*_Complex_I,
171      -2.8816e-01 +   7.5672e-01*_Complex_I,
172      -5.8784e-01 +   1.8705e-01*_Complex_I,
173      -4.4008e-01 +   4.7244e-01*_Complex_I,
174       7.9849e-01 +  -1.0124e+00*_Complex_I,
175       9.5371e-01 +  -7.1194e-01*_Complex_I,
176       1.2696e+00 +  -1.1448e-01*_Complex_I,
177       1.1145e+00 +  -4.2441e-01*_Complex_I,
178       9.0580e-01 +   1.0653e+00*_Complex_I,
179       1.0641e+00 +   7.6363e-01*_Complex_I,
180       1.0837e+00 +   1.7467e-01*_Complex_I,
181       9.1489e-01 +   4.6389e-01*_Complex_I,
182       5.8983e-01 +  -1.2906e+00*_Complex_I,
183       6.0746e-01 +  -7.0336e-01*_Complex_I,
184       9.1373e-01 +  -1.3004e-01*_Complex_I,
185       7.4917e-01 +  -4.1576e-01*_Complex_I,
186       5.6608e-01 +   1.0707e+00*_Complex_I,
187       7.1464e-01 +   7.5794e-01*_Complex_I,
188       7.4460e-01 +   1.6652e-01*_Complex_I,
189       5.7594e-01 +   4.5036e-01*_Complex_I,
190       7.6128e-02 +  -9.7664e-01*_Complex_I,
191      -9.2551e-02 +  -6.8763e-01*_Complex_I,
192      -9.4285e-02 +  -1.0993e-01*_Complex_I,
193       6.5368e-02 +  -4.0109e-01*_Complex_I,
194       1.0945e-01 +   1.3350e+00*_Complex_I,
195       2.2470e-01 +   4.7166e-01*_Complex_I,
196       5.5987e-01 +  -1.1259e-01*_Complex_I,
197       7.0006e-02 +   1.9154e-01*_Complex_I,
198       2.4876e-01 +  -1.2685e+00*_Complex_I,
199       4.2452e-01 +  -9.8023e-01*_Complex_I,
200       2.5356e-01 +  -6.8613e-01*_Complex_I,
201       4.0576e-01 +  -4.1184e-01*_Complex_I,
202       2.4615e-01 +   1.0373e+00*_Complex_I,
203       3.9219e-01 +   7.4440e-01*_Complex_I,
204       2.4704e-01 +  -1.0509e-01*_Complex_I,
205       3.9791e-01 +   1.8370e-01*_Complex_I,
206 };
207 // optimal 128-QAM
208 const float complex modem_arb128opt[128] = {
209      -1.0682e+00 +  -9.2598e-01*_Complex_I,
210      -1.1831e+00 +  -7.0704e-01*_Complex_I,
211      -1.3029e+00 +  -1.0555e-01*_Complex_I,
212      -1.3061e+00 +  -4.9292e-01*_Complex_I,
213      -9.4032e-01 +   9.7928e-01*_Complex_I,
214      -1.1807e+00 +   5.4821e-01*_Complex_I,
215      -1.4078e+00 +   1.1265e-01*_Complex_I,
216      -1.2954e+00 +   3.3623e-01*_Complex_I,
217      -7.3838e-01 +  -1.1381e+00*_Complex_I,
218      -9.4161e-01 +  -7.0518e-01*_Complex_I,
219      -1.1625e+00 +  -2.9080e-01*_Complex_I,
220      -1.0477e+00 +  -4.9556e-01*_Complex_I,
221      -1.0664e+00 +   7.7185e-01*_Complex_I,
222      -8.3123e-01 +   7.4171e-01*_Complex_I,
223      -1.1636e+00 +   1.1831e-01*_Complex_I,
224      -1.0506e+00 +   3.2582e-01*_Complex_I,
225      -4.8913e-01 +  -1.1074e+00*_Complex_I,
226      -5.8148e-01 +  -8.9486e-01*_Complex_I,
227      -8.0747e-01 +  -9.4398e-02*_Complex_I,
228      -9.1178e-01 +  -2.9590e-01*_Complex_I,
229      -7.0503e-01 +   9.5290e-01*_Complex_I,
230      -5.8794e-01 +   7.4046e-01*_Complex_I,
231      -6.9655e-01 +   1.0350e-01*_Complex_I,
232      -6.8968e-01 +   5.2969e-01*_Complex_I,
233      -8.2001e-01 +  -9.1531e-01*_Complex_I,
234      -7.0810e-01 +  -7.0021e-01*_Complex_I,
235      -1.0403e+00 +  -8.9321e-02*_Complex_I,
236      -8.0893e-01 +  -4.9762e-01*_Complex_I,
237      -6.1299e-01 +   1.1733e+00*_Complex_I,
238      -9.2994e-01 +   5.3436e-01*_Complex_I,
239      -9.2384e-01 +   1.1851e-01*_Complex_I,
240      -8.0873e-01 +   3.2535e-01*_Complex_I,
241       8.5789e-03 +  -1.1069e+00*_Complex_I,
242       1.3354e-01 +  -9.0426e-01*_Complex_I,
243       1.2277e+00 +  -3.0336e-01*_Complex_I,
244      -2.1578e-01 +  -2.9289e-01*_Complex_I,
245       2.5555e-03 +   1.3535e+00*_Complex_I,
246      -1.0737e-01 +   7.4055e-01*_Complex_I,
247       5.0972e-03 +   1.1376e-01*_Complex_I,
248      -4.5018e-03 +   5.4428e-01*_Complex_I,
249      -1.0895e-01 +  -1.3162e+00*_Complex_I,
250      -2.2365e-01 +  -6.9809e-01*_Complex_I,
251       1.3461e+00 +  -9.5212e-02*_Complex_I,
252      -4.3183e-01 +  -2.9421e-01*_Complex_I,
253      -1.1598e-01 +   1.1402e+00*_Complex_I,
254      -2.2730e-01 +   9.3180e-01*_Complex_I,
255      -2.1915e-01 +   1.1528e-01*_Complex_I,
256      -2.2953e-01 +   5.3517e-01*_Complex_I,
257      -3.6962e-01 +  -1.3195e+00*_Complex_I,
258      -4.6545e-01 +  -6.9766e-01*_Complex_I,
259      -6.7387e-01 +  -2.8466e-01*_Complex_I,
260      -5.6923e-01 +  -4.9130e-01*_Complex_I,
261      -3.6828e-01 +   1.1445e+00*_Complex_I,
262      -4.6503e-01 +   9.3615e-01*_Complex_I,
263      -5.7039e-01 +  -8.3381e-02*_Complex_I,
264      -4.6304e-01 +   5.2568e-01*_Complex_I,
265      -2.4438e-01 +  -1.1062e+00*_Complex_I,
266      -3.4724e-01 +  -8.9072e-01*_Complex_I,
267      -3.3719e-01 +  -8.1507e-02*_Complex_I,
268      -3.4116e-01 +  -4.9075e-01*_Complex_I,
269      -2.5467e-01 +   1.3510e+00*_Complex_I,
270      -3.4640e-01 +   7.4004e-01*_Complex_I,
271      -4.5303e-01 +   1.1207e-01*_Complex_I,
272      -5.7498e-01 +   3.1560e-01*_Complex_I,
273       8.7471e-01 +  -9.3403e-01*_Complex_I,
274       1.1932e+00 +  -7.1750e-01*_Complex_I,
275       1.0817e+00 +  -9.5165e-02*_Complex_I,
276       1.0850e+00 +  -5.0487e-01*_Complex_I,
277       9.7521e-01 +   9.8123e-01*_Complex_I,
278       1.0879e+00 +   7.6120e-01*_Complex_I,
279       1.1902e+00 +   1.1187e-01*_Complex_I,
280       1.1983e+00 +   5.4100e-01*_Complex_I,
281       7.5089e-01 +  -1.1405e+00*_Complex_I,
282       9.5031e-01 +  -7.0315e-01*_Complex_I,
283       9.6679e-01 +  -2.8997e-01*_Complex_I,
284       8.4619e-01 +  -4.8958e-01*_Complex_I,
285       7.4379e-01 +   9.5772e-01*_Complex_I,
286       8.4793e-01 +   7.4658e-01*_Complex_I,
287       9.4820e-01 +   1.1332e-01*_Complex_I,
288       9.5910e-01 +   5.3750e-01*_Complex_I,
289       5.0524e-01 +  -1.1045e+00*_Complex_I,
290       4.9092e-01 +  -6.9263e-01*_Complex_I,
291       6.0143e-01 +  -8.7696e-02*_Complex_I,
292       6.0078e-01 +  -4.8901e-01*_Complex_I,
293       5.0450e-01 +   9.5208e-01*_Complex_I,
294       7.1207e-01 +   5.3740e-01*_Complex_I,
295       1.0790e+00 +   3.1868e-01*_Complex_I,
296       6.0339e-01 +   3.3768e-01*_Complex_I,
297       6.2518e-01 +  -9.0613e-01*_Complex_I,
298       7.2199e-01 +  -6.9979e-01*_Complex_I,
299       8.2756e-01 +  -9.3837e-02*_Complex_I,
300       7.2238e-01 +  -2.9345e-01*_Complex_I,
301       6.4006e-01 +   1.1740e+00*_Complex_I,
302       6.1312e-01 +   7.3911e-01*_Complex_I,
303       7.1908e-01 +   1.2320e-01*_Complex_I,
304       8.3253e-01 +   3.2769e-01*_Complex_I,
305      -9.4871e-02 +  -9.0259e-01*_Complex_I,
306      -9.6676e-02 +  -4.9277e-01*_Complex_I,
307       4.8818e-01 +  -2.7584e-01*_Complex_I,
308      -9.8973e-02 +  -1.0402e-01*_Complex_I,
309       2.0955e-02 +   9.4046e-01*_Complex_I,
310       1.3132e-01 +   7.3484e-01*_Complex_I,
311       1.3357e+00 +   3.0715e-01*_Complex_I,
312      -3.3806e-01 +   3.2795e-01*_Complex_I,
313       1.4149e-01 +  -1.3293e+00*_Complex_I,
314       1.4162e-02 +  -6.8874e-01*_Complex_I,
315       1.3376e-01 +  -9.5389e-02*_Complex_I,
316       2.5367e-02 +  -2.8878e-01*_Complex_I,
317       1.3413e-01 +   1.1437e+00*_Complex_I,
318       2.3299e-01 +   5.3149e-01*_Complex_I,
319       4.7428e-01 +   1.2730e-01*_Complex_I,
320       1.1767e-01 +   3.3670e-01*_Complex_I,
321       4.1070e-01 +  -1.3283e+00*_Complex_I,
322       3.7197e-01 +  -8.8947e-01*_Complex_I,
323       2.5771e-01 +  -2.8158e-01*_Complex_I,
324       3.6892e-01 +  -4.8660e-01*_Complex_I,
325       3.8837e-01 +   1.1516e+00*_Complex_I,
326       3.7013e-01 +   7.3189e-01*_Complex_I,
327       2.3982e-01 +   1.2673e-01*_Complex_I,
328       4.7588e-01 +   5.2723e-01*_Complex_I,
329       2.6342e-01 +  -1.1217e+00*_Complex_I,
330       2.4743e-01 +  -6.8820e-01*_Complex_I,
331       3.5855e-01 +  -7.8191e-02*_Complex_I,
332       1.4393e-01 +  -4.8365e-01*_Complex_I,
333       2.7111e-01 +   1.3506e+00*_Complex_I,
334       2.6368e-01 +   9.3477e-01*_Complex_I,
335       3.5476e-01 +   3.1767e-01*_Complex_I,
336      -1.0269e-01 +   3.2880e-01*_Complex_I,};
337 
338 
339 // optimal 256-QAM
340 const float complex modem_arb256opt[256] = {
341      -9.3121e-01 +  -1.0845e+00*_Complex_I,
342      -1.0165e+00 +  -9.3103e-01*_Complex_I,
343      -1.1864e+00 +  -6.3650e-01*_Complex_I,
344      -1.1012e+00 +  -7.8304e-01*_Complex_I,
345      -1.3617e+00 +  -4.3833e-02*_Complex_I,
346      -1.2644e+00 +  -1.9022e-01*_Complex_I,
347      -1.2686e+00 +  -4.8780e-01*_Complex_I,
348      -1.3534e+00 +  -3.3726e-01*_Complex_I,
349      -8.4260e-01 +   1.1480e+00*_Complex_I,
350      -9.2614e-01 +   9.9761e-01*_Complex_I,
351      -1.1955e+00 +   5.5467e-01*_Complex_I,
352      -1.1148e+00 +   6.9890e-01*_Complex_I,
353      -1.1792e+00 +  -3.7010e-02*_Complex_I,
354      -1.2648e+00 +   1.1118e-01*_Complex_I,
355      -1.2769e+00 +   4.0872e-01*_Complex_I,
356      -1.3599e+00 +   2.5518e-01*_Complex_I,
357      -6.7924e-01 +  -1.2278e+00*_Complex_I,
358      -8.4406e-01 +  -9.1876e-01*_Complex_I,
359      -1.0044e+00 +  -6.2843e-01*_Complex_I,
360      -9.2155e-01 +  -7.7299e-01*_Complex_I,
361      -1.0806e+00 +   1.0494e-01*_Complex_I,
362      -1.0866e+00 +  -1.9152e-01*_Complex_I,
363      -1.0854e+00 +  -4.8371e-01*_Complex_I,
364      -1.1661e+00 +  -3.3876e-01*_Complex_I,
365      -1.0146e+00 +   8.4545e-01*_Complex_I,
366      -7.5625e-01 +   9.8074e-01*_Complex_I,
367      -9.2315e-01 +   6.9214e-01*_Complex_I,
368      -8.3445e-01 +   8.3483e-01*_Complex_I,
369      -1.0046e+00 +  -3.8507e-02*_Complex_I,
370      -1.1695e+00 +   2.5672e-01*_Complex_I,
371      -1.0054e+00 +   5.4855e-01*_Complex_I,
372      -1.0894e+00 +   4.0650e-01*_Complex_I,
373      -4.9806e-01 +  -1.2285e+00*_Complex_I,
374      -6.6615e-01 +  -9.1531e-01*_Complex_I,
375      -6.6471e-01 +  -6.1531e-01*_Complex_I,
376      -5.0291e-01 +  -9.1017e-01*_Complex_I,
377      -6.6983e-01 +  -4.8903e-02*_Complex_I,
378      -7.4988e-01 +  -1.8703e-01*_Complex_I,
379      -7.4628e-01 +  -4.7626e-01*_Complex_I,
380      -8.2246e-01 +  -3.3201e-01*_Complex_I,
381      -6.7081e-01 +   1.1403e+00*_Complex_I,
382      -5.0407e-01 +   1.1300e+00*_Complex_I,
383      -6.6636e-01 +   5.3994e-01*_Complex_I,
384      -4.9992e-01 +   8.2622e-01*_Complex_I,
385      -8.3007e-01 +  -3.4761e-02*_Complex_I,
386      -7.3978e-01 +   1.0568e-01*_Complex_I,
387      -7.4366e-01 +   3.9573e-01*_Complex_I,
388      -6.6403e-01 +   2.4968e-01*_Complex_I,
389      -7.5405e-01 +  -1.0716e+00*_Complex_I,
390      -5.8636e-01 +  -1.0663e+00*_Complex_I,
391      -8.3409e-01 +  -6.2296e-01*_Complex_I,
392      -7.5222e-01 +  -7.6536e-01*_Complex_I,
393      -9.1403e-01 +   1.0898e-01*_Complex_I,
394      -9.1712e-01 +  -1.8842e-01*_Complex_I,
395      -9.1470e-01 +  -4.7918e-01*_Complex_I,
396      -9.8965e-01 +  -3.3463e-01*_Complex_I,
397      -5.9594e-01 +   1.2959e+00*_Complex_I,
398      -5.8407e-01 +   9.7847e-01*_Complex_I,
399      -7.5480e-01 +   6.8214e-01*_Complex_I,
400      -6.6815e-01 +   8.2880e-01*_Complex_I,
401      -8.3654e-01 +   2.4948e-01*_Complex_I,
402      -9.9781e-01 +   2.5965e-01*_Complex_I,
403      -8.3730e-01 +   5.3876e-01*_Complex_I,
404      -9.1612e-01 +   3.9942e-01*_Complex_I,
405      -1.6318e-01 +  -1.2127e+00*_Complex_I,
406       3.3430e-03 +  -1.2073e+00*_Complex_I,
407      -1.5729e-01 +  -6.1725e-01*_Complex_I,
408       4.1148e-03 +  -9.0838e-01*_Complex_I,
409       1.7582e-01 +  -3.3603e-01*_Complex_I,
410       9.8785e-03 +  -3.7206e-02*_Complex_I,
411      -8.5107e-02 +  -4.7781e-01*_Complex_I,
412      -1.5814e-01 +  -4.2120e-02*_Complex_I,
413      -7.2012e-02 +   1.2831e+00*_Complex_I,
414       9.0714e-04 +   1.1297e+00*_Complex_I,
415      -7.8182e-02 +   6.8626e-01*_Complex_I,
416      -1.5437e-01 +   8.2912e-01*_Complex_I,
417       5.1610e-01 +  -3.3653e-02*_Complex_I,
418       1.2961e+00 +   4.0304e-01*_Complex_I,
419      -5.9161e-03 +   5.4276e-01*_Complex_I,
420      -1.6148e-01 +   2.5858e-01*_Complex_I,
421      -8.4651e-02 +  -1.3668e+00*_Complex_I,
422      -3.2532e-01 +  -9.1229e-01*_Complex_I,
423      -3.2442e-01 +  -6.1566e-01*_Complex_I,
424      -1.6208e-01 +  -9.0614e-01*_Complex_I,
425       1.8048e-01 +  -3.7457e-02*_Complex_I,
426       1.3866e+00 +  -3.3074e-01*_Complex_I,
427      -2.4797e-01 +  -4.7456e-01*_Complex_I,
428      -2.4267e-01 +  -1.8754e-01*_Complex_I,
429      -1.6601e-01 +   1.4313e+00*_Complex_I,
430      -1.6374e-01 +   1.1268e+00*_Complex_I,
431      -2.4284e-01 +   6.8228e-01*_Complex_I,
432      -3.1958e-01 +   8.2714e-01*_Complex_I,
433       1.4029e+00 +  -4.1466e-02*_Complex_I,
434      -2.4744e-01 +   1.0415e-01*_Complex_I,
435      -1.7024e-01 +   5.3942e-01*_Complex_I,
436      -2.4815e-01 +   3.9378e-01*_Complex_I,
437      -3.3086e-01 +  -1.2116e+00*_Complex_I,
438      -4.1344e-01 +  -1.0631e+00*_Complex_I,
439      -4.9938e-01 +  -6.1504e-01*_Complex_I,
440      -5.7571e-01 +  -7.6257e-01*_Complex_I,
441      -4.9789e-01 +  -3.2872e-01*_Complex_I,
442      -5.7916e-01 +  -1.9183e-01*_Complex_I,
443      -5.7533e-01 +  -4.6997e-01*_Complex_I,
444      -6.6353e-01 +  -3.3083e-01*_Complex_I,
445      -4.1537e-01 +   1.2917e+00*_Complex_I,
446      -3.3797e-01 +   1.1288e+00*_Complex_I,
447      -4.1372e-01 +   6.7949e-01*_Complex_I,
448      -5.7762e-01 +   6.8425e-01*_Complex_I,
449      -5.0299e-01 +  -3.9519e-02*_Complex_I,
450      -5.7735e-01 +   1.0080e-01*_Complex_I,
451      -5.7869e-01 +   3.9486e-01*_Complex_I,
452      -4.1708e-01 +   3.8814e-01*_Complex_I,
453      -2.6216e-01 +  -1.3722e+00*_Complex_I,
454      -2.4777e-01 +  -1.0554e+00*_Complex_I,
455      -2.4828e-01 +  -7.5682e-01*_Complex_I,
456      -4.1106e-01 +  -7.6293e-01*_Complex_I,
457      -3.3539e-01 +  -4.5041e-02*_Complex_I,
458      -4.1183e-01 +  -1.8648e-01*_Complex_I,
459      -4.0960e-01 +  -4.6924e-01*_Complex_I,
460      -3.2757e-01 +  -3.2493e-01*_Complex_I,
461      -2.4811e-01 +   1.2791e+00*_Complex_I,
462      -4.1293e-01 +   9.7796e-01*_Complex_I,
463      -4.9363e-01 +   5.4125e-01*_Complex_I,
464      -2.4841e-01 +   9.7484e-01*_Complex_I,
465      -3.3291e-01 +   2.4287e-01*_Complex_I,
466      -4.1270e-01 +   1.0610e-01*_Complex_I,
467      -3.3149e-01 +   5.3493e-01*_Complex_I,
468      -4.9570e-01 +   2.4793e-01*_Complex_I,
469       1.0268e+00 +  -9.4120e-01*_Complex_I,
470       1.1117e+00 +  -7.9063e-01*_Complex_I,
471       1.0229e+00 +  -6.2590e-01*_Complex_I,
472       1.1972e+00 +  -6.4225e-01*_Complex_I,
473       1.1800e+00 +  -3.7594e-02*_Complex_I,
474       1.0994e+00 +  -1.8428e-01*_Complex_I,
475       1.1013e+00 +  -4.8132e-01*_Complex_I,
476       1.1761e+00 +  -3.3277e-01*_Complex_I,
477       9.5265e-01 +   9.9923e-01*_Complex_I,
478       1.0339e+00 +   8.4543e-01*_Complex_I,
479       1.1967e+00 +   5.5722e-01*_Complex_I,
480       1.1136e+00 +   7.0186e-01*_Complex_I,
481       1.1048e+00 +   1.1370e-01*_Complex_I,
482       1.1933e+00 +   2.5489e-01*_Complex_I,
483       1.0283e+00 +   5.4096e-01*_Complex_I,
484       1.1081e+00 +   3.9628e-01*_Complex_I,
485       7.8700e-01 +  -1.0692e+00*_Complex_I,
486       8.5334e-01 +  -9.1694e-01*_Complex_I,
487       8.5637e-01 +  -6.2050e-01*_Complex_I,
488       9.3281e-01 +  -7.7176e-01*_Complex_I,
489       1.0137e+00 +  -3.3408e-02*_Complex_I,
490       9.3260e-01 +  -1.7917e-01*_Complex_I,
491       9.3071e-01 +  -4.7454e-01*_Complex_I,
492       1.0048e+00 +  -3.2937e-01*_Complex_I,
493       8.6318e-01 +   1.1482e+00*_Complex_I,
494       7.7447e-01 +   9.8650e-01*_Complex_I,
495       8.5413e-01 +   5.5129e-01*_Complex_I,
496       9.3949e-01 +   6.9420e-01*_Complex_I,
497       8.5475e-01 +  -2.3510e-02*_Complex_I,
498       9.3037e-01 +   1.2129e-01*_Complex_I,
499       9.3010e-01 +   4.0514e-01*_Complex_I,
500       1.0095e+00 +   2.6363e-01*_Complex_I,
501       5.2780e-01 +  -1.2149e+00*_Complex_I,
502       5.9973e-01 +  -1.0535e+00*_Complex_I,
503       5.9400e-01 +  -7.5805e-01*_Complex_I,
504       5.2055e-01 +  -9.0495e-01*_Complex_I,
505       1.2793e+00 +   9.5945e-02*_Complex_I,
506       6.0607e-01 +  -1.8528e-01*_Complex_I,
507       6.0178e-01 +  -4.7516e-01*_Complex_I,
508       6.7818e-01 +  -3.2877e-01*_Complex_I,
509       6.0752e-01 +   1.2941e+00*_Complex_I,
510       6.0140e-01 +   9.9091e-01*_Complex_I,
511       5.9529e-01 +   6.9382e-01*_Complex_I,
512       5.2016e-01 +   8.4000e-01*_Complex_I,
513       6.0208e-01 +   1.1391e-01*_Complex_I,
514       6.7047e-01 +   2.5780e-01*_Complex_I,
515       5.2294e-01 +   5.4883e-01*_Complex_I,
516       5.9654e-01 +   4.0163e-01*_Complex_I,
517       7.0156e-01 +  -1.2190e+00*_Complex_I,
518       6.9013e-01 +  -9.1191e-01*_Complex_I,
519       6.9013e-01 +  -6.2098e-01*_Complex_I,
520       7.6463e-01 +  -7.6594e-01*_Complex_I,
521       6.9136e-01 +  -3.6954e-02*_Complex_I,
522       7.6789e-01 +  -1.7954e-01*_Complex_I,
523       7.6457e-01 +  -4.7424e-01*_Complex_I,
524       8.3961e-01 +  -3.2637e-01*_Complex_I,
525       6.8917e-01 +   1.1431e+00*_Complex_I,
526       8.5163e-01 +   8.4194e-01*_Complex_I,
527       7.6086e-01 +   6.8960e-01*_Complex_I,
528       6.8618e-01 +   8.3840e-01*_Complex_I,
529       7.6026e-01 +   1.0911e-01*_Complex_I,
530       8.3319e-01 +   2.5542e-01*_Complex_I,
531       6.8351e-01 +   5.4604e-01*_Complex_I,
532       7.5901e-01 +   4.0203e-01*_Complex_I,
533       9.6338e-02 +  -1.3604e+00*_Complex_I,
534      -7.0831e-02 +  -1.0602e+00*_Complex_I,
535      -9.4577e-04 +  -6.3305e-01*_Complex_I,
536      -6.9734e-02 +  -7.6470e-01*_Complex_I,
537       4.2835e-01 +  -4.6668e-01*_Complex_I,
538       3.4710e-01 +  -3.3413e-01*_Complex_I,
539      -1.5430e-01 +  -3.3941e-01*_Complex_I,
540       8.0032e-02 +  -1.7572e-01*_Complex_I,
541       2.5905e-02 +   1.4320e+00*_Complex_I,
542      -6.9530e-02 +   9.7883e-01*_Complex_I,
543       1.7048e-01 +   8.2571e-01*_Complex_I,
544       1.0068e-02 +   8.3542e-01*_Complex_I,
545       3.4137e-01 +   2.5976e-01*_Complex_I,
546       9.5063e-02 +   1.1412e-01*_Complex_I,
547      -7.6478e-02 +   4.0262e-01*_Complex_I,
548       1.3861e+00 +   2.4822e-01*_Complex_I,
549       1.8256e-01 +  -1.2079e+00*_Complex_I,
550       9.5999e-02 +  -1.0579e+00*_Complex_I,
551       1.7231e-01 +  -6.3492e-01*_Complex_I,
552       9.5184e-02 +  -7.6915e-01*_Complex_I,
553       4.2346e-01 +  -1.8043e-01*_Complex_I,
554       3.4732e-01 +  -3.9482e-02*_Complex_I,
555       6.7179e-03 +  -3.3361e-01*_Complex_I,
556       1.2869e+00 +  -4.7883e-01*_Complex_I,
557       1.0396e-01 +   1.2834e+00*_Complex_I,
558       1.7477e-01 +   1.1309e+00*_Complex_I,
559       9.3443e-02 +   6.8396e-01*_Complex_I,
560       1.0164e-01 +   9.8006e-01*_Complex_I,
561       2.6248e-01 +   4.0262e-01*_Complex_I,
562       1.4300e-02 +   2.5562e-01*_Complex_I,
563       1.7725e-01 +   5.4449e-01*_Complex_I,
564       1.7520e-01 +   2.5568e-01*_Complex_I,
565       3.5711e-01 +  -1.2043e+00*_Complex_I,
566       4.3106e-01 +  -1.0550e+00*_Complex_I,
567       4.3130e-01 +  -7.5874e-01*_Complex_I,
568       3.5671e-01 +  -9.0533e-01*_Complex_I,
569       1.2810e+00 +  -1.8054e-01*_Complex_I,
570       2.5776e-01 +  -4.7036e-01*_Complex_I,
571       5.1032e-01 +  -6.1269e-01*_Complex_I,
572       5.1825e-01 +  -3.2616e-01*_Complex_I,
573       4.3563e-01 +   1.2900e+00*_Complex_I,
574       5.0429e-01 +   1.1325e+00*_Complex_I,
575       4.3124e-01 +   6.9057e-01*_Complex_I,
576       4.2828e-01 +   9.7727e-01*_Complex_I,
577       2.6878e-01 +   1.1645e-01*_Complex_I,
578       5.1065e-01 +   2.5785e-01*_Complex_I,
579       3.5648e-01 +   5.4453e-01*_Complex_I,
580       4.3802e-01 +   4.0358e-01*_Complex_I,
581       2.8096e-01 +  -1.3583e+00*_Complex_I,
582       2.6017e-01 +  -1.0511e+00*_Complex_I,
583       2.6553e-01 +  -7.5915e-01*_Complex_I,
584       1.8554e-01 +  -9.0436e-01*_Complex_I,
585       2.7459e-01 +  -1.6584e-01*_Complex_I,
586       9.6288e-02 +  -4.7108e-01*_Complex_I,
587       3.4524e-01 +  -6.2309e-01*_Complex_I,
588      -7.6534e-02 +  -1.8689e-01*_Complex_I,
589       2.6953e-01 +   1.2917e+00*_Complex_I,
590       3.3760e-01 +   1.1286e+00*_Complex_I,
591       3.3928e-01 +   8.2592e-01*_Complex_I,
592       2.6659e-01 +   9.7456e-01*_Complex_I,
593       4.2936e-01 +   1.1261e-01*_Complex_I,
594       9.1148e-02 +   4.0330e-01*_Complex_I,
595       2.6333e-01 +   6.7210e-01*_Complex_I,
596      -7.8413e-02 +   1.1615e-01*_Complex_I,
597 };
598