diff options
Diffstat (limited to 'gr-fec/lib/polar_common.cc')
-rw-r--r-- | gr-fec/lib/polar_common.cc | 160 |
1 files changed, 80 insertions, 80 deletions
diff --git a/gr-fec/lib/polar_common.cc b/gr-fec/lib/polar_common.cc index 9952ba0ea3..ff78d3428e 100644 --- a/gr-fec/lib/polar_common.cc +++ b/gr-fec/lib/polar_common.cc @@ -39,97 +39,97 @@ namespace gr { namespace fec { namespace code { - polar_common::polar_common(int block_size, int num_info_bits, - std::vector<int> frozen_bit_positions, - std::vector<char> frozen_bit_values) : - d_frozen_bit_positions(frozen_bit_positions), d_frozen_bit_values(frozen_bit_values), - d_block_size(block_size), d_block_power((int) log2(float(block_size))), - d_num_info_bits(num_info_bits) - { - if(pow(2, d_block_power) != d_block_size){ - throw std::runtime_error("block_size MUST be a power of 2!"); - } + polar_common::polar_common(int block_size, int num_info_bits, + std::vector<int> frozen_bit_positions, + std::vector<char> frozen_bit_values) : + d_frozen_bit_positions(frozen_bit_positions), d_frozen_bit_values(frozen_bit_values), + d_block_size(block_size), d_block_power((int) log2(float(block_size))), + d_num_info_bits(num_info_bits) + { + if(pow(2, d_block_power) != d_block_size){ + throw std::runtime_error("block_size MUST be a power of 2!"); + } - unsigned int num_frozen_bits = d_block_size - d_num_info_bits; - if(num_frozen_bits != d_frozen_bit_positions.size()){ - throw std::runtime_error( - "number of frozen bit positions must equal block_size - num_info_bits"); - } + unsigned int num_frozen_bits = d_block_size - d_num_info_bits; + if(num_frozen_bits != d_frozen_bit_positions.size()){ + throw std::runtime_error( + "number of frozen bit positions must equal block_size - num_info_bits"); + } - // According to papers frozen bits default to '0'. - while(d_frozen_bit_values.size() < num_frozen_bits){ - d_frozen_bit_values.push_back(0); + // According to papers frozen bits default to '0'. + while(d_frozen_bit_values.size() < num_frozen_bits){ + d_frozen_bit_values.push_back(0); + } + initialize_info_bit_position_vector(); + + d_unpacker = new gr::blocks::kernel::unpack_k_bits(8); } - initialize_info_bit_position_vector(); - - d_unpacker = new gr::blocks::kernel::unpack_k_bits(8); - } - - void - polar_common::initialize_info_bit_position_vector() - { - int num_frozen_bit = 0; - int frozen_pos = d_frozen_bit_positions.at(num_frozen_bit); - for(int i = 0; i < d_block_size; i++) { - if(i != frozen_pos) { - d_info_bit_positions.push_back((int) i); + + void + polar_common::initialize_info_bit_position_vector() + { + int num_frozen_bit = 0; + int frozen_pos = d_frozen_bit_positions.at(num_frozen_bit); + for(int i = 0; i < d_block_size; i++) { + if(i != frozen_pos) { + d_info_bit_positions.push_back((int) i); + } + else { + num_frozen_bit++; + num_frozen_bit = std::min(num_frozen_bit, (int) (d_frozen_bit_positions.size() - 1)); + frozen_pos = d_frozen_bit_positions.at(num_frozen_bit); + } } - else { - num_frozen_bit++; - num_frozen_bit = std::min(num_frozen_bit, (int) (d_frozen_bit_positions.size() - 1)); - frozen_pos = d_frozen_bit_positions.at(num_frozen_bit); + + if((int) d_info_bit_positions.size() != num_info_bits()) { + throw std::runtime_error("polar_common: number of info bit positions MUST equal num_info_bits (K)!"); } } - if((int) d_info_bit_positions.size() != num_info_bits()) { - throw std::runtime_error("polar_common: number of info bit positions MUST equal num_info_bits (K)!"); + polar_common::~polar_common() + { + delete d_unpacker; } - } - - polar_common::~polar_common() - { - delete d_unpacker; - } - - long - polar_common::bit_reverse(long value, int active_bits) const - { - long r = 0; - for(int i = 0; i < active_bits; i++) { - r <<= 1; - r |= value & 1; - value >>= 1; + + long + polar_common::bit_reverse(long value, int active_bits) const + { + long r = 0; + for(int i = 0; i < active_bits; i++) { + r <<= 1; + r |= value & 1; + value >>= 1; + } + return r; } - return r; - } - - void - polar_common::print_packed_bit_array(const unsigned char* printed_array, - const int num_bytes) const - { - int num_bits = num_bytes << 3; - unsigned char* temp = new unsigned char[num_bits]; - d_unpacker->unpack(temp, printed_array, num_bytes); - - std::cout << "["; - for(int i = 0; i < num_bits; i++) { - std::cout << (int) *(temp + i) << " "; + + void + polar_common::print_packed_bit_array(const unsigned char* printed_array, + const int num_bytes) const + { + int num_bits = num_bytes << 3; + unsigned char* temp = new unsigned char[num_bits]; + d_unpacker->unpack(temp, printed_array, num_bytes); + + std::cout << "["; + for(int i = 0; i < num_bits; i++) { + std::cout << (int) *(temp + i) << " "; + } + std::cout << "]" << std::endl; + + delete [] temp; } - std::cout << "]" << std::endl; - - delete [] temp; - } - - void - polar_common::print_unpacked_bit_array(const unsigned char* bits, - const unsigned int num_bytes) const - { - std::cout << "( "; - for(unsigned int i = 0; i < num_bytes; i++){ - std::cout << (int) *bits++ << ", "; + + void + polar_common::print_unpacked_bit_array(const unsigned char* bits, + const unsigned int num_bytes) const + { + std::cout << "( "; + for(unsigned int i = 0; i < num_bytes; i++){ + std::cout << (int) *bits++ << ", "; + } + std::cout << ")" << std::endl; } - std::cout << ")" << std::endl; - } } /* namespace code */ } /* namespace fec */ |