mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-15 20:50:33 +00:00
Avoid variable length arrays
This commit is contained in:
parent
f4bdf234e3
commit
23ad333901
@ -163,8 +163,8 @@ galileo_e1b_telemetry_decoder_cc::~galileo_e1b_telemetry_decoder_cc()
|
|||||||
|
|
||||||
void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols, int32_t frame_length)
|
void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols, int32_t frame_length)
|
||||||
{
|
{
|
||||||
double page_part_symbols_deint[frame_length];
|
|
||||||
// 1. De-interleave
|
// 1. De-interleave
|
||||||
|
double *page_part_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||||
deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint);
|
deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint);
|
||||||
|
|
||||||
// 2. Viterbi decoder
|
// 2. Viterbi decoder
|
||||||
@ -178,8 +178,9 @@ void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols, in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t page_part_bits[frame_length / 2];
|
int32_t *page_part_bits = static_cast<int32_t *>(volk_gnsssdr_malloc((frame_length / 2) * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
viterbi_decoder(page_part_symbols_deint, page_part_bits);
|
viterbi_decoder(page_part_symbols_deint, page_part_bits);
|
||||||
|
volk_gnsssdr_free(page_part_symbols_deint);
|
||||||
|
|
||||||
// 3. Call the Galileo page decoder
|
// 3. Call the Galileo page decoder
|
||||||
std::string page_String;
|
std::string page_String;
|
||||||
@ -217,6 +218,7 @@ void galileo_e1b_telemetry_decoder_cc::decode_word(double *page_part_symbols, in
|
|||||||
d_nav.split_page(page_String.c_str(), flag_even_word_arrived);
|
d_nav.split_page(page_String.c_str(), flag_even_word_arrived);
|
||||||
flag_even_word_arrived = 1;
|
flag_even_word_arrived = 1;
|
||||||
}
|
}
|
||||||
|
volk_gnsssdr_free(page_part_bits);
|
||||||
|
|
||||||
// 4. Push the new navigation data to the queues
|
// 4. Push the new navigation data to the queues
|
||||||
if (d_nav.have_new_ephemeris() == true)
|
if (d_nav.have_new_ephemeris() == true)
|
||||||
@ -370,7 +372,7 @@ int galileo_e1b_telemetry_decoder_cc::general_work(int noutput_items __attribute
|
|||||||
// NEW Galileo page part is received
|
// NEW Galileo page part is received
|
||||||
// 0. fetch the symbols into an array
|
// 0. fetch the symbols into an array
|
||||||
int32_t frame_length = GALILEO_INAV_PAGE_PART_SYMBOLS - d_symbols_per_preamble;
|
int32_t frame_length = GALILEO_INAV_PAGE_PART_SYMBOLS - d_symbols_per_preamble;
|
||||||
double page_part_symbols[frame_length];
|
double *page_part_symbols = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||||
|
|
||||||
for (int32_t i = 0; i < frame_length; i++)
|
for (int32_t i = 0; i < frame_length; i++)
|
||||||
{
|
{
|
||||||
@ -412,6 +414,7 @@ int galileo_e1b_telemetry_decoder_cc::general_work(int noutput_items __attribute
|
|||||||
d_nav.flag_TOW_set = false;
|
d_nav.flag_TOW_set = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
volk_gnsssdr_free(page_part_symbols);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,8 +79,8 @@ void galileo_e5a_telemetry_decoder_cc::deinterleaver(int32_t rows, int32_t cols,
|
|||||||
|
|
||||||
void galileo_e5a_telemetry_decoder_cc::decode_word(double *page_symbols, int32_t frame_length)
|
void galileo_e5a_telemetry_decoder_cc::decode_word(double *page_symbols, int32_t frame_length)
|
||||||
{
|
{
|
||||||
double page_symbols_deint[frame_length];
|
|
||||||
// 1. De-interleave
|
// 1. De-interleave
|
||||||
|
double *page_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||||
deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint);
|
deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint);
|
||||||
|
|
||||||
// 2. Viterbi decoder
|
// 2. Viterbi decoder
|
||||||
@ -93,8 +93,9 @@ void galileo_e5a_telemetry_decoder_cc::decode_word(double *page_symbols, int32_t
|
|||||||
page_symbols_deint[i] = -page_symbols_deint[i];
|
page_symbols_deint[i] = -page_symbols_deint[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int32_t page_bits[frame_length / 2];
|
int32_t *page_bits = static_cast<int32_t *>(volk_gnsssdr_malloc((frame_length / 2) * sizeof(int32_t), volk_gnsssdr_get_alignment()));
|
||||||
viterbi_decoder(page_symbols_deint, page_bits);
|
viterbi_decoder(page_symbols_deint, page_bits);
|
||||||
|
volk_gnsssdr_free(page_symbols_deint);
|
||||||
|
|
||||||
// 3. Call the Galileo page decoder
|
// 3. Call the Galileo page decoder
|
||||||
std::string page_String;
|
std::string page_String;
|
||||||
@ -109,6 +110,7 @@ void galileo_e5a_telemetry_decoder_cc::decode_word(double *page_symbols, int32_t
|
|||||||
page_String.push_back('0');
|
page_String.push_back('0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
volk_gnsssdr_free(page_bits);
|
||||||
|
|
||||||
// DECODE COMPLETE WORD (even + odd) and TEST CRC
|
// DECODE COMPLETE WORD (even + odd) and TEST CRC
|
||||||
d_nav.split_page(page_String);
|
d_nav.split_page(page_String);
|
||||||
|
@ -189,7 +189,7 @@ sbas_l1_telemetry_decoder_cc::symbol_aligner_and_decoder::symbol_aligner_and_dec
|
|||||||
{
|
{
|
||||||
// convolutional code properties
|
// convolutional code properties
|
||||||
d_KK = 7;
|
d_KK = 7;
|
||||||
int32_t nn = 2;
|
const int32_t nn = 2;
|
||||||
int32_t g_encoder[nn];
|
int32_t g_encoder[nn];
|
||||||
g_encoder[0] = 121;
|
g_encoder[0] = 121;
|
||||||
g_encoder[1] = 91;
|
g_encoder[1] = 91;
|
||||||
|
Loading…
Reference in New Issue
Block a user