diff options
Diffstat (limited to 'gr-fec/lib/polar_decoder_sc.cc')
-rw-r--r-- | gr-fec/lib/polar_decoder_sc.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/gr-fec/lib/polar_decoder_sc.cc b/gr-fec/lib/polar_decoder_sc.cc index 7a290a8563..1b872d0c2a 100644 --- a/gr-fec/lib/polar_decoder_sc.cc +++ b/gr-fec/lib/polar_decoder_sc.cc @@ -38,18 +38,16 @@ namespace gr generic_decoder::sptr polar_decoder_sc::make(int block_size, int num_info_bits, std::vector<int> frozen_bit_positions, - std::vector<char> frozen_bit_values, bool is_packed) + std::vector<char> frozen_bit_values) { return generic_decoder::sptr( - new polar_decoder_sc(block_size, num_info_bits, frozen_bit_positions, frozen_bit_values, - is_packed)); + new polar_decoder_sc(block_size, num_info_bits, frozen_bit_positions, frozen_bit_values)); } polar_decoder_sc::polar_decoder_sc(int block_size, int num_info_bits, std::vector<int> frozen_bit_positions, - std::vector<char> frozen_bit_values, bool is_packed) : - polar_decoder_common(block_size, num_info_bits, frozen_bit_positions, frozen_bit_values, is_packed), - d_frozen_bit_counter(0) + std::vector<char> frozen_bit_values) : + polar_decoder_common(block_size, num_info_bits, frozen_bit_positions, frozen_bit_values) { d_llr_vec = (float*) volk_malloc(sizeof(float) * block_size * (block_power() + 1), volk_get_alignment()); memset(d_llr_vec, 0, sizeof(float) * block_size * (block_power() + 1)); @@ -69,7 +67,7 @@ namespace gr const float *in = (const float*) in_buffer; unsigned char *out = (unsigned char*) out_buffer; - initialize_llr_vector(d_llr_vec, in); + initialize_decoder(d_u_hat_vec, d_llr_vec, in); sc_decode(d_llr_vec, d_u_hat_vec); extract_info_bits(out, d_u_hat_vec); } @@ -77,8 +75,6 @@ namespace gr void polar_decoder_sc::sc_decode(float* llrs, unsigned char* u) { - d_frozen_bit_counter = 0; - memset(u, 0, sizeof(unsigned char) * block_size() * block_power()); for(int i = 0; i < block_size(); i++){ butterfly(llrs, u, 0, i, i); u[i] = retrieve_bit_from_llr(llrs[i], i); @@ -88,8 +84,8 @@ namespace gr unsigned char polar_decoder_sc::retrieve_bit_from_llr(float llr, const int pos) { - if(d_frozen_bit_counter < d_frozen_bit_positions.size() && pos == d_frozen_bit_positions.at(d_frozen_bit_counter)){ - return d_frozen_bit_values.at(d_frozen_bit_counter++); + if(is_frozen_bit(pos)){ + return next_frozen_bit(); } return llr_bit_decision(llr); } |