35 QAM (
double power,
int gain = 0)
37 d_gain = gain + CHAR_BIT - NumBits;
38 const int nn = (1<<(NumBits-1));
42 for (
int i = 0; i < nn; ++i) {
43 sum2+= (2*i + 1)*(2*i + 1);
46 int sum2 = (4*nn*nn*nn-nn)/3;
48 double sf = sqrt(power *
double(nn) /
double(sum2));
60 return +1 | (v >> (
sizeof(int) * CHAR_BIT - 1));
70 return i < 0 ? 0 : (i > 255 ? 255 : i);
83 inline void encode (
const char* bits,
double *sym)
88 for (
int i = 0; i < NumBits; ++i)
90 int bit = *bits * 2 - 1;
91 pt = bit * flip + pt * 2;
110 inline void decode (
double sym,
unsigned char *bits)
116 for (
int i = 0; i < NumBits; ++i)
118 *bits =
clamp(flip * pt + 128);