summaryrefslogtreecommitdiff
path: root/gr-fec/lib/polar_decoder_sc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-fec/lib/polar_decoder_sc.cc')
-rw-r--r--gr-fec/lib/polar_decoder_sc.cc18
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);
}