/*
* Copyright 2014 Ron Economos (w6rz@comcast.net)
*
* 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, either 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
/* DVB-S2 useful bitrate */
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OPTION_CHAR '-'
double rate_qpsk[11][4] = {{1.0, 4.0, 12.0, 2}, {1.0, 3.0, 12.0, 2}, {2.0, 5.0, 12.0, 2}, {1.0, 2.0, 12.0, 2}, {3.0, 5.0, 12.0, 2}, {2.0, 3.0, 10.0, 2}, {3.0, 4.0, 12.0, 2}, {4.0, 5.0, 12.0, 2}, {5.0, 6.0, 10.0, 2}, {8.0, 9.0, 8.0, 2}, {9.0, 10.0, 8.0, 1}};
double rate_8psk[6][4] = {{3.0, 5.0, 12.0, 2}, {2.0, 3.0, 10.0, 2}, {3.0, 4.0, 12.0, 2}, {5.0, 6.0, 10.0, 2}, {8.0, 9.0, 8.0, 2}, {9.0, 10.0, 8.0, 1}};
double rate_16apsk[6][4] = {{2.0, 3.0, 10.0, 2}, {3.0, 4.0, 12.0, 2}, {4.0, 5.0, 12.0, 2}, {5.0, 6.0, 10.0, 2}, {8.0, 9.0, 8.0, 2}, {9.0, 10.0, 8.0, 1}};
double rate_32apsk[5][4] = {{3.0, 4.0, 12.0, 2}, {4.0, 5.0, 12.0, 2}, {5.0, 6.0, 10.0, 2}, {8.0, 9.0, 8.0, 2}, {9.0, 10.0, 8.0, 1}};
double rate_qpsk_short[10][6] = {{1.0, 4.0, 12.0, 2, 1.0, 5.0}, {1.0, 3.0, 12.0, 2, 1.0, 3.0}, {2.0, 5.0, 12.0, 2, 2.0, 5.0}, {1.0, 2.0, 12.0, 2, 4.0, 9.0}, {3.0, 5.0, 12.0, 2, 3.0, 5.0}, {2.0, 3.0, 12.0, 2, 2.0, 3.0}, {3.0, 4.0, 12.0, 2, 11.0, 15.0}, {4.0, 5.0, 12.0, 2, 7.0, 9.0}, {5.0, 6.0, 12.0, 2, 37.0, 45.0}, {8.0, 9.0, 12.0, 2, 8.0, 9.0}};
double rate_8psk_short[5][6] = {{3.0, 5.0, 12.0, 2, 3.0, 5.0}, {2.0, 3.0, 12.0, 2, 2.0, 3.0}, {3.0, 4.0, 12.0, 2, 11.0, 15.0}, {5.0, 6.0, 12.0, 2, 37.0, 45.0}, {8.0, 9.0, 12.0, 2, 8.0, 9.0}};
double rate_16apsk_short[5][6] = {{2.0, 3.0, 12.0, 2, 2.0, 3.0}, {3.0, 4.0, 12.0, 2, 11.0, 15.0}, {4.0, 5.0, 12.0, 2, 7.0, 9.0}, {5.0, 6.0, 12.0, 2, 37.0, 45.0}, {8.0, 9.0, 12.0, 2, 8.0, 9.0}};
double rate_32apsk_short[4][6] = {{3.0, 4.0, 12.0, 2, 11.0, 15.0}, {4.0, 5.0, 12.0, 2, 7.0, 9.0}, {5.0, 6.0, 12.0, 2, 37.0, 45.0}, {8.0, 9.0, 12.0, 2, 8.0, 9.0}};
double rate_qpskx[3][4] = {{13.0, 45.0, 12.0, 3}, {9.0, 20.0, 12.0, 4}, {11.0, 20.0, 12.0, 3}};
double rate_8apsk[2][4] = {{100.0, 180.0, 12.0, 1}, {104.0, 180.0, 12.0, 1}};
double rate_8pskx[3][4] = {{23.0, 36.0, 12.0, 3}, {25.0, 36.0, 12.0, 3}, {13.0, 18.0, 12.0, 3}};
double rate_16apskx[8][4] = {{26.0, 45.0, 12.0, 3}, {3.0, 5.0, 12.0, 5}, {28.0, 45.0, 12.0, 3}, {23.0, 36.0, 12.0, 3}, {25.0, 36.0, 12.0, 3}, {13.0, 18.0, 12.0, 3}, {140.0, 180.0, 12.0, 1}, {154.0, 180.0, 12.0, 1}};
double rate_8_8apsk[5][4] = {{90.0, 180.0, 12.0, 2}, {96.0, 180.0, 12.0, 2}, {100.0, 180.0, 12.0, 1}, {18.0, 30.0, 12.0, 3}, {20.0, 30.0, 12.0, 3}};
double rate_32_16rbapsk[1][4] = {{2.0, 3.0, 12.0, 5}};
double rate_32_16apsk[3][4] = {{128.0, 180.0, 12.0, 1}, {132.0, 180.0, 12.0, 1}, {140.0, 180.0, 12.0, 1}};
double rate_64apsk[1][4] = {{128.0, 180.0, 12.0, 1}};
double rate_64_28apsk[1][4] = {{132.0, 180.0, 12.0, 1}};
double rate_64_20apsk[3][4] = {{7.0, 9.0, 12.0, 5}, {4.0, 5.0, 12.0, 5}, {5.0, 6.0, 12.0, 5}};
double rate_128apsk[2][4] = {{135.0, 180.0, 12.0, 1}, {140.0, 180.0, 12.0, 1}};
double rate_256apsk[6][4] = {{20.0, 30.0, 12.0, 3}, {22.0, 30.0, 12.0, 3}, {116.0, 180.0, 12.0, 1}, {124.0, 180.0, 12.0, 1}, {128.0, 180.0, 12.0, 1}, {135.0, 180.0, 12.0, 1}};
double rate_qpskx_short[6][4] = {{11.0, 45.0, 12.0, 3}, {4.0, 15.0, 12.0, 4}, {14.0, 45.0, 12.0, 3}, {7.0, 15.0, 12.0, 4}, {8.0, 15.0, 12.0, 4}, {32.0, 45.0, 12.0, 3}};
double rate_8pskx_short[4][4] = {{7.0, 15.0, 12.0, 4}, {8.0, 15.0, 12.0, 4}, {26.0, 45.0, 12.0, 3}, {32.0, 45.0, 12.0, 3}};
double rate_16apskx_short[5][4] = {{7.0, 15.0, 12.0, 4}, {8.0, 15.0, 12.0, 4}, {26.0, 45.0, 12.0, 3}, {3.0, 5.0, 12.0, 5}, {32.0, 45.0, 12.0, 3}};
double rate_32_16rbapsk_short[2][4] = {{2.0, 3.0, 12.0, 5}, {32.0, 45.0, 12.0, 3}};
double calc(double symbols, double mod, double num, double den, double bch, double pilots)
{
double fec_frame = 64800.0;
double tsrate;
tsrate = symbols / (fec_frame / mod + 90 + ceil((fec_frame/ mod / 90 / 16 - 1)) * pilots) * (fec_frame * (num / den) - (16 * bch) - 80);
return (tsrate);
}
double calc_short(double symbols, double mod, double num, double den, double bch, double pilots)
{
double fec_frame = 16200.0;
double tsrate;
tsrate = symbols / (fec_frame / mod + 90 + ceil((fec_frame/ mod / 90 / 16 - 1)) * pilots) * (fec_frame * (num / den) - (16 * bch) - 80);
return (tsrate);
}
void dump(double rate, double num, double den, double bch, double spaces)
{
int i;
char s[10];
for (i = 0; i < (int)spaces; i++)
{
s[i] = 0x20;
}
s[i] = 0x0;
printf("coderate = %d/%d,%sBCH rate = %2d, ts rate = %f\n", (int)num, (int)den, s, (int)bch, rate);
}
int main(int argc, char **argv)
{
int i;
int short_frame = FALSE;
int dvb_s2x = FALSE;
int vlsnr = FALSE;
double rate;
double symbol_rate = 27500000.0;
double q;
if (argc != 2 && argc != 3) {
fprintf(stderr, "usage: dvbs2rate -sx \n");
fprintf(stderr, "Options:\n");
fprintf(stderr, "\ts = short FECFRAME rates\n");
fprintf(stderr, "\tv = DVB-S2X VL-SNR\n");
fprintf(stderr, "\tx = DVB-S2X rates\n");
exit(-1);
}
if (argc == 2)
{
symbol_rate = atof(argv[1]);
}
else
{
if(*argv[1] == OPTION_CHAR)
{
for(i = 1; i < strlen(argv[1]); i++)
{
switch (argv[1][i])
{
case 's':
case 'S':
short_frame = TRUE;
break;
case 'v':
case 'V':
vlsnr = TRUE;
break;
case 'x':
case 'X':
dvb_s2x = TRUE;
break;
default:
fprintf(stderr, "Unsupported Option: %c\n", argv[1][i]);
}
}
}
else
{
fprintf(stderr, "usage: dvbs2rate -sx \n");
fprintf(stderr, "Options:\n");
fprintf(stderr, "\ts = short FECFRAME rates\n");
fprintf(stderr, "\tv = DVB-S2X VL-SNR\n");
fprintf(stderr, "\tx = DVB-S2X rates\n");
exit(-1);
}
symbol_rate = atof(argv[2]);
}
if (vlsnr == TRUE) {
printf("DVB-S2X short FECFRAME\n");
printf("BPSK-SF2\n");
printf("coderate = 1/5, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -9.90, -9.9 - (10 * log10((1.0 / 33282) * (2512 - 80))), (symbol_rate / 33282) * (2512 - 80));
printf("coderate = 11/45, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -8.30, -8.3 - (10 * log10((1.0 / 33282) * (3792 - 80))), (symbol_rate / 33282) * (3792 - 80));
printf("BPSK\n");
printf("coderate = 1/5, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -6.10, -6.1 - (10 * log10((1.0 / 16686) * (3072 - 80))), (symbol_rate / 16686) * (3072 - 80));
printf("coderate = 4/15, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -4.90, -4.9 - (10 * log10((1.0 / 16686) * (4152 - 80))), (symbol_rate / 16686) * (4152 - 80));
printf("coderate = 1/3, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -3.72, -3.72 - (10 * log10((1.0 / 16686) * (5232 - 80))), (symbol_rate / 16686) * (5232 - 80));
printf("DVB-S2X medium FECFRAME\n");
printf("BPSK\n");
printf("coderate = 1/5, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -6.85, -6.85 - (10 * log10((1.0 / 33282) * (5660 - 80))), (symbol_rate / 33282) * (5660 - 80));
printf("coderate = 11/45, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -5.50, -5.5 - (10 * log10((1.0 / 33282) * (7740 - 80))), (symbol_rate / 33282) * (7740 - 80));
printf("coderate = 1/3, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -4.00, -4.0 - (10 * log10((1.0 / 33282) * (10620 - 80))), (symbol_rate / 33282) * (10620 - 80));
printf("DVB-S2X normal FECFRAME\n");
printf("QPSK\n");
printf("coderate = 2/9, Es/No = %0.2f, Eb/No = %f, ts_rate = %f\n", -2.85, -2.85 - (10 * log10((1.0 / 33282) * (14208 - 80))), (symbol_rate / 33282) * (14208 - 80));
return 0;
}
if (dvb_s2x == FALSE)
{
if (short_frame == FALSE)
{
printf("DVB-S2 normal FECFRAME\n");
q = 2.0;
printf("QPSK, pilots off\n");
for (i = 0; i < 11; i++)
{
rate = calc(symbol_rate, q, rate_qpsk[i][0], rate_qpsk[i][1], rate_qpsk[i][2], 0.0);
dump(rate, rate_qpsk[i][0], rate_qpsk[i][1], rate_qpsk[i][2], rate_qpsk[i][3]);
}
printf("QPSK, pilots on\n");
for (i = 0; i < 11; i++)
{
rate = calc(symbol_rate, q, rate_qpsk[i][0], rate_qpsk[i][1], rate_qpsk[i][2], 36.0);
dump(rate, rate_qpsk[i][0], rate_qpsk[i][1], rate_qpsk[i][2], rate_qpsk[i][3]);
}
q = 3.0;
printf("8PSK, pilots off\n");
for (i = 0; i < 6; i++)
{
rate = calc(symbol_rate, q, rate_8psk[i][0], rate_8psk[i][1], rate_8psk[i][2], 0.0);
dump(rate, rate_8psk[i][0], rate_8psk[i][1], rate_8psk[i][2], rate_8psk[i][3]);
}
printf("8PSK, pilots on\n");
for (i = 0; i < 6; i++)
{
rate = calc(symbol_rate, q, rate_8psk[i][0], rate_8psk[i][1], rate_8psk[i][2], 36.0);
dump(rate, rate_8psk[i][0], rate_8psk[i][1], rate_8psk[i][2], rate_8psk[i][3]);
}
q = 4.0;
printf("16APSK, pilots off\n");
for (i = 0; i < 6; i++)
{
rate = calc(symbol_rate, q, rate_16apsk[i][0], rate_16apsk[i][1], rate_16apsk[i][2], 0.0);
dump(rate, rate_16apsk[i][0], rate_16apsk[i][1], rate_16apsk[i][2], rate_16apsk[i][3]);
}
printf("16APSK, pilots on\n");
for (i = 0; i < 6; i++)
{
rate = calc(symbol_rate, q, rate_16apsk[i][0], rate_16apsk[i][1], rate_16apsk[i][2], 36.0);
dump(rate, rate_16apsk[i][0], rate_16apsk[i][1], rate_16apsk[i][2], rate_16apsk[i][3]);
}
q = 5.0;
printf("32APSK, pilots off\n");
for (i = 0; i < 5; i++)
{
rate = calc(symbol_rate, q, rate_32apsk[i][0], rate_32apsk[i][1], rate_32apsk[i][2], 0.0);
dump(rate, rate_32apsk[i][0], rate_32apsk[i][1], rate_32apsk[i][2], rate_32apsk[i][3]);
}
printf("32APSK, pilots on\n");
for (i = 0; i < 5; i++)
{
rate = calc(symbol_rate, q, rate_32apsk[i][0], rate_32apsk[i][1], rate_32apsk[i][2], 36.0);
dump(rate, rate_32apsk[i][0], rate_32apsk[i][1], rate_32apsk[i][2], rate_32apsk[i][3]);
}
}
else
{
printf("DVB-S2 short FECFRAME\n");
q = 2.0;
printf("QPSK, pilots off\n");
for (i = 0; i < 10; i++)
{
rate = calc_short(symbol_rate, q, rate_qpsk_short[i][4], rate_qpsk_short[i][5], rate_qpsk_short[i][2], 0.0);
dump(rate, rate_qpsk_short[i][0], rate_qpsk_short[i][1], rate_qpsk_short[i][2], rate_qpsk_short[i][3]);
}
printf("QPSK, pilots on\n");
for (i = 0; i < 10; i++)
{
rate = calc_short(symbol_rate, q, rate_qpsk_short[i][4], rate_qpsk_short[i][5], rate_qpsk_short[i][2], 36.0);
dump(rate, rate_qpsk_short[i][0], rate_qpsk_short[i][1], rate_qpsk_short[i][2], rate_qpsk_short[i][3]);
}
q = 3.0;
printf("8PSK, pilots off\n");
for (i = 0; i < 5; i++)
{
rate = calc_short(symbol_rate, q, rate_8psk_short[i][4], rate_8psk_short[i][5], rate_8psk_short[i][2], 0.0);
dump(rate, rate_8psk_short[i][0], rate_8psk_short[i][1], rate_8psk_short[i][2], rate_8psk_short[i][3]);
}
printf("8PSK, pilots on\n");
for (i = 0; i < 5; i++)
{
rate = calc_short(symbol_rate, q, rate_8psk_short[i][4], rate_8psk_short[i][5], rate_8psk_short[i][2], 36.0);
dump(rate, rate_8psk_short[i][0], rate_8psk_short[i][1], rate_8psk_short[i][2], rate_8psk_short[i][3]);
}
q = 4.0;
printf("16APSK, pilots off\n");
for (i = 0; i < 5; i++)
{
rate = calc_short(symbol_rate, q, rate_16apsk_short[i][4], rate_16apsk_short[i][5], rate_16apsk_short[i][2], 0.0);
dump(rate, rate_16apsk_short[i][0], rate_16apsk_short[i][1], rate_16apsk_short[i][2], rate_16apsk_short[i][3]);
}
printf("16APSK, pilots on\n");
for (i = 0; i < 5; i++)
{
rate = calc_short(symbol_rate, q, rate_16apsk_short[i][4], rate_16apsk_short[i][5], rate_16apsk_short[i][2], 36.0);
dump(rate, rate_16apsk_short[i][0], rate_16apsk_short[i][1], rate_16apsk_short[i][2], rate_16apsk_short[i][3]);
}
q = 5.0;
printf("32APSK, pilots off\n");
for (i = 0; i < 4; i++)
{
rate = calc_short(symbol_rate, q, rate_32apsk_short[i][4], rate_32apsk_short[i][5], rate_32apsk_short[i][2], 0.0);
dump(rate, rate_32apsk_short[i][0], rate_32apsk_short[i][1], rate_32apsk_short[i][2], rate_32apsk_short[i][3]);
}
printf("32APSK, pilots on\n");
for (i = 0; i < 4; i++)
{
rate = calc_short(symbol_rate, q, rate_32apsk_short[i][4], rate_32apsk_short[i][5], rate_32apsk_short[i][2], 36.0);
dump(rate, rate_32apsk_short[i][0], rate_32apsk_short[i][1], rate_32apsk_short[i][2], rate_32apsk_short[i][3]);
}
}
}
else
{
if (short_frame == FALSE)
{
printf("DVB-S2X normal FECFRAME\n");
q = 2.0;
printf("QPSK, pilots off\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_qpskx[i][0], rate_qpskx[i][1], rate_qpskx[i][2], 0.0);
dump(rate, rate_qpskx[i][0], rate_qpskx[i][1], rate_qpskx[i][2], rate_qpskx[i][3]);
}
printf("QPSK, pilots on\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_qpskx[i][0], rate_qpskx[i][1], rate_qpskx[i][2], 36.0);
dump(rate, rate_qpskx[i][0], rate_qpskx[i][1], rate_qpskx[i][2], rate_qpskx[i][3]);
}
q = 3.0;
printf("8APSK, pilots off\n");
for (i = 0; i < 2; i++)
{
rate = calc(symbol_rate, q, rate_8apsk[i][0], rate_8apsk[i][1], rate_8apsk[i][2], 0.0);
dump(rate, rate_8apsk[i][0], rate_8apsk[i][1], rate_8apsk[i][2], rate_8apsk[i][3]);
}
printf("8APSK, pilots on\n");
for (i = 0; i < 2; i++)
{
rate = calc(symbol_rate, q, rate_8apsk[i][0], rate_8apsk[i][1], rate_8apsk[i][2], 36.0);
dump(rate, rate_8apsk[i][0], rate_8apsk[i][1], rate_8apsk[i][2], rate_8apsk[i][3]);
}
q = 3.0;
printf("8PSK, pilots off\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_8pskx[i][0], rate_8pskx[i][1], rate_8pskx[i][2], 0.0);
dump(rate, rate_8pskx[i][0], rate_8pskx[i][1], rate_8pskx[i][2], rate_8pskx[i][3]);
}
printf("8PSK, pilots on\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_8pskx[i][0], rate_8pskx[i][1], rate_8pskx[i][2], 36.0);
dump(rate, rate_8pskx[i][0], rate_8pskx[i][1], rate_8pskx[i][2], rate_8pskx[i][3]);
}
q = 4.0;
printf("16APSK, pilots off\n");
for (i = 0; i < 8; i++)
{
rate = calc(symbol_rate, q, rate_16apskx[i][0], rate_16apskx[i][1], rate_16apskx[i][2], 0.0);
dump(rate, rate_16apskx[i][0], rate_16apskx[i][1], rate_16apskx[i][2], rate_16apskx[i][3]);
}
printf("16APSK, pilots on\n");
for (i = 0; i < 8; i++)
{
rate = calc(symbol_rate, q, rate_16apskx[i][0], rate_16apskx[i][1], rate_16apskx[i][2], 36.0);
dump(rate, rate_16apskx[i][0], rate_16apskx[i][1], rate_16apskx[i][2], rate_16apskx[i][3]);
}
q = 4.0;
printf("8+8APSK, pilots off\n");
for (i = 0; i < 5; i++)
{
rate = calc(symbol_rate, q, rate_8_8apsk[i][0], rate_8_8apsk[i][1], rate_8_8apsk[i][2], 0.0);
dump(rate, rate_8_8apsk[i][0], rate_8_8apsk[i][1], rate_8_8apsk[i][2], rate_8_8apsk[i][3]);
}
printf("8+8APSK, pilots on\n");
for (i = 0; i < 5; i++)
{
rate = calc(symbol_rate, q, rate_8_8apsk[i][0], rate_8_8apsk[i][1], rate_8_8apsk[i][2], 36.0);
dump(rate, rate_8_8apsk[i][0], rate_8_8apsk[i][1], rate_8_8apsk[i][2], rate_8_8apsk[i][3]);
}
q = 5.0;
printf("4+12+16rbAPSK, pilots off\n");
for (i = 0; i < 1; i++)
{
rate = calc(symbol_rate, q, rate_32_16rbapsk[i][0], rate_32_16rbapsk[i][1], rate_32_16rbapsk[i][2], 0.0);
dump(rate, rate_32_16rbapsk[i][0], rate_32_16rbapsk[i][1], rate_32_16rbapsk[i][2], rate_32_16rbapsk[i][3]);
}
printf("4+12+16rbAPSK, pilots on\n");
for (i = 0; i < 1; i++)
{
rate = calc(symbol_rate, q, rate_32_16rbapsk[i][0], rate_32_16rbapsk[i][1], rate_32_16rbapsk[i][2], 36.0);
dump(rate, rate_32_16rbapsk[i][0], rate_32_16rbapsk[i][1], rate_32_16rbapsk[i][2], rate_32_16rbapsk[i][3]);
}
q = 5.0;
printf("4+8+4+16APSK, pilots off\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_32_16apsk[i][0], rate_32_16apsk[i][1], rate_32_16apsk[i][2], 0.0);
dump(rate, rate_32_16apsk[i][0], rate_32_16apsk[i][1], rate_32_16apsk[i][2], rate_32_16apsk[i][3]);
}
printf("4+8+4+16APSK, pilots on\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_32_16apsk[i][0], rate_32_16apsk[i][1], rate_32_16apsk[i][2], 36.0);
dump(rate, rate_32_16apsk[i][0], rate_32_16apsk[i][1], rate_32_16apsk[i][2], rate_32_16apsk[i][3]);
}
q = 6.0;
printf("64APSK, pilots off\n");
for (i = 0; i < 1; i++)
{
rate = calc(symbol_rate, q, rate_64apsk[i][0], rate_64apsk[i][1], rate_64apsk[i][2], 0.0);
dump(rate, rate_64apsk[i][0], rate_64apsk[i][1], rate_64apsk[i][2], rate_64apsk[i][3]);
}
printf("64APSK, pilots on\n");
for (i = 0; i < 1; i++)
{
rate = calc(symbol_rate, q, rate_64apsk[i][0], rate_64apsk[i][1], rate_64apsk[i][2], 36.0);
dump(rate, rate_64apsk[i][0], rate_64apsk[i][1], rate_64apsk[i][2], rate_64apsk[i][3]);
}
q = 6.0;
printf("4+12+20+28APSK, pilots off\n");
for (i = 0; i < 1; i++)
{
rate = calc(symbol_rate, q, rate_64_28apsk[i][0], rate_64_28apsk[i][1], rate_64_28apsk[i][2], 0.0);
dump(rate, rate_64_28apsk[i][0], rate_64_28apsk[i][1], rate_64_28apsk[i][2], rate_64_28apsk[i][3]);
}
printf("4+12+20+28APSK, pilots on\n");
for (i = 0; i < 1; i++)
{
rate = calc(symbol_rate, q, rate_64_28apsk[i][0], rate_64_28apsk[i][1], rate_64_28apsk[i][2], 36.0);
dump(rate, rate_64_28apsk[i][0], rate_64_28apsk[i][1], rate_64_28apsk[i][2], rate_64_28apsk[i][3]);
}
q = 6.0;
printf("8+16+20+20APSK, pilots off\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_64_20apsk[i][0], rate_64_20apsk[i][1], rate_64_20apsk[i][2], 0.0);
dump(rate, rate_64_20apsk[i][0], rate_64_20apsk[i][1], rate_64_20apsk[i][2], rate_64_20apsk[i][3]);
}
printf("8+16+20+20APSK, pilots on\n");
for (i = 0; i < 3; i++)
{
rate = calc(symbol_rate, q, rate_64_20apsk[i][0], rate_64_20apsk[i][1], rate_64_20apsk[i][2], 36.0);
dump(rate, rate_64_20apsk[i][0], rate_64_20apsk[i][1], rate_64_20apsk[i][2], rate_64_20apsk[i][3]);
}
q = 7.0;
printf("128APSK, pilots off\n");
for (i = 0; i < 2; i++)
{
rate = calc(symbol_rate, q, rate_128apsk[i][0], rate_128apsk[i][1], rate_128apsk[i][2], 0.0);
dump(rate, rate_128apsk[i][0], rate_128apsk[i][1], rate_128apsk[i][2], rate_128apsk[i][3]);
}
printf("128APSK, pilots on\n");
for (i = 0; i < 2; i++)
{
rate = calc(symbol_rate, q, rate_128apsk[i][0], rate_128apsk[i][1], rate_128apsk[i][2], 36.0);
dump(rate, rate_128apsk[i][0], rate_128apsk[i][1], rate_128apsk[i][2], rate_128apsk[i][3]);
}
q = 8.0;
printf("256APSK, pilots off\n");
for (i = 0; i < 6; i++)
{
rate = calc(symbol_rate, q, rate_256apsk[i][0], rate_256apsk[i][1], rate_256apsk[i][2], 0.0);
dump(rate, rate_256apsk[i][0], rate_256apsk[i][1], rate_256apsk[i][2], rate_256apsk[i][3]);
}
printf("256APSK, pilots on\n");
for (i = 0; i < 6; i++)
{
rate = calc(symbol_rate, q, rate_256apsk[i][0], rate_256apsk[i][1], rate_256apsk[i][2], 36.0);
dump(rate, rate_256apsk[i][0], rate_256apsk[i][1], rate_256apsk[i][2], rate_256apsk[i][3]);
}
}
else
{
printf("DVB-S2X short FECFRAME\n");
q = 2.0;
printf("QPSK, pilots off\n");
for (i = 0; i < 6; i++)
{
rate = calc_short(symbol_rate, q, rate_qpskx_short[i][0], rate_qpskx_short[i][1], rate_qpskx_short[i][2], 0.0);
dump(rate, rate_qpskx_short[i][0], rate_qpskx_short[i][1], rate_qpskx_short[i][2], rate_qpskx_short[i][3]);
}
printf("QPSK, pilots on\n");
for (i = 0; i < 6; i++)
{
rate = calc_short(symbol_rate, q, rate_qpskx_short[i][0], rate_qpskx_short[i][1], rate_qpskx_short[i][2], 36.0);
dump(rate, rate_qpskx_short[i][0], rate_qpskx_short[i][1], rate_qpskx_short[i][2], rate_qpskx_short[i][3]);
}
q = 3.0;
printf("8PSK, pilots off\n");
for (i = 0; i < 4; i++)
{
rate = calc_short(symbol_rate, q, rate_8pskx_short[i][0], rate_8pskx_short[i][1], rate_8pskx_short[i][2], 0.0);
dump(rate, rate_8pskx_short[i][0], rate_8pskx_short[i][1], rate_8pskx_short[i][2], rate_8pskx_short[i][3]);
}
printf("8PSK, pilots on\n");
for (i = 0; i < 4; i++)
{
rate = calc_short(symbol_rate, q, rate_8pskx_short[i][0], rate_8pskx_short[i][1], rate_8pskx_short[i][2], 36.0);
dump(rate, rate_8pskx_short[i][0], rate_8pskx_short[i][1], rate_8pskx_short[i][2], rate_8pskx_short[i][3]);
}
q = 4.0;
printf("16APSK, pilots off\n");
for (i = 0; i < 5; i++)
{
rate = calc_short(symbol_rate, q, rate_16apskx_short[i][0], rate_16apskx_short[i][1], rate_16apskx_short[i][2], 0.0);
dump(rate, rate_16apskx_short[i][0], rate_16apskx_short[i][1], rate_16apskx_short[i][2], rate_16apskx_short[i][3]);
}
printf("16APSK, pilots on\n");
for (i = 0; i < 5; i++)
{
rate = calc_short(symbol_rate, q, rate_16apskx_short[i][0], rate_16apskx_short[i][1], rate_16apskx_short[i][2], 36.0);
dump(rate, rate_16apskx_short[i][0], rate_16apskx_short[i][1], rate_16apskx_short[i][2], rate_16apskx_short[i][3]);
}
q = 5.0;
printf("4+12+16rbAPSK, pilots off\n");
for (i = 0; i < 2; i++)
{
rate = calc_short(symbol_rate, q, rate_32_16rbapsk_short[i][0], rate_32_16rbapsk_short[i][1], rate_32_16rbapsk_short[i][2], 0.0);
dump(rate, rate_32_16rbapsk_short[i][0], rate_32_16rbapsk_short[i][1], rate_32_16rbapsk_short[i][2], rate_32_16rbapsk_short[i][3]);
}
printf("4+12+16rbAPSK, pilots on\n");
for (i = 0; i < 2; i++)
{
rate = calc_short(symbol_rate, q, rate_32_16rbapsk_short[i][0], rate_32_16rbapsk_short[i][1], rate_32_16rbapsk_short[i][2], 36.0);
dump(rate, rate_32_16rbapsk_short[i][0], rate_32_16rbapsk_short[i][1], rate_32_16rbapsk_short[i][2], rate_32_16rbapsk_short[i][3]);
}
}
}
return 0;
}