diff options
Diffstat (limited to 'gr-fec/lib/cldpc.cc')
-rw-r--r-- | gr-fec/lib/cldpc.cc | 103 |
1 files changed, 44 insertions, 59 deletions
diff --git a/gr-fec/lib/cldpc.cc b/gr-fec/lib/cldpc.cc index fe17277313..3d105ae18d 100644 --- a/gr-fec/lib/cldpc.cc +++ b/gr-fec/lib/cldpc.cc @@ -23,7 +23,8 @@ #include <gnuradio/fec/cldpc.h> #include <stdexcept> -cldpc::cldpc(const GF2Mat X) { +cldpc::cldpc(const GF2Mat X) +{ H = X; M = H.get_M(); N = H.get_N(); @@ -31,7 +32,8 @@ cldpc::cldpc(const GF2Mat X) { K = N - rank_H; } -cldpc::cldpc(const alist _list) { +cldpc::cldpc(const alist _list) +{ H = GF2Mat(_list); M = H.get_M(); N = H.get_N(); @@ -39,7 +41,8 @@ cldpc::cldpc(const alist _list) { K = N - rank_H; } -void cldpc::set_alist(const alist _list) { +void cldpc::set_alist(const alist _list) +{ H = GF2Mat(_list); M = H.get_M(); N = H.get_N(); @@ -47,99 +50,81 @@ void cldpc::set_alist(const alist _list) { K = N - rank_H; } -std::vector<char> cldpc::get_systematic_bits(std::vector<char> in) { +std::vector<char> cldpc::get_systematic_bits(std::vector<char> in) +{ std::vector<char> data; data.resize(K); int index; - for (size_t i = 0; i < K; i++ ) { + for (size_t i = 0; i < K; i++) { index = permute[i + rank_H]; data[i] = in[index]; } return data; } -void cldpc::print_permute() { - for (size_t i = 0; i < permute.size(); i++ ) { +void cldpc::print_permute() +{ + for (size_t i = 0; i < permute.size(); i++) { std::cout << permute[i] << ", "; } std::cout << "\n"; } -std::vector<char> cldpc::syndrome(const std::vector<char> in) { +std::vector<char> cldpc::syndrome(const std::vector<char> in) +{ std::vector<char> synd; synd.resize(rank_H); GF2Vec in_bvec; in_bvec.set_vec(in); - for ( int i = 0; i < rank_H; i++ ) { - synd[i] = H[i]*in_bvec; + for (int i = 0; i < rank_H; i++) { + synd[i] = H[i] * in_bvec; } return synd; } -bool cldpc::is_codeword(const std::vector<char> in) { +bool cldpc::is_codeword(const std::vector<char> in) +{ std::vector<char> synd; synd = syndrome(in); bool is_code; is_code = true; - for ( int i = 0; i < rank_H; i++ ) { - if ( synd[i] != char(0) ) { + for (int i = 0; i < rank_H; i++) { + if (synd[i] != char(0)) { is_code = false; } } return is_code; } -std::vector<char> -cldpc::encode(std::vector<char> dataword) +std::vector<char> cldpc::encode(std::vector<char> dataword) { - if(dataword.size() == K) { - GF2Vec x(N); - GF2Vec data(K); - data.set_vec(dataword); - for(int i = rank_H; i < N; i++) { - x[i] = dataword[i - rank_H]; - } - for(int i = 0; i < rank_H; i++) { - x[i] = G[i].sub_vector(N-K, N)*data; - } - GF2Vec y(N); - for(int i = 0; i < N; i++) { - y[permute[i]] = x[i]; + if (dataword.size() == K) { + GF2Vec x(N); + GF2Vec data(K); + data.set_vec(dataword); + for (int i = rank_H; i < N; i++) { + x[i] = dataword[i - rank_H]; + } + for (int i = 0; i < rank_H; i++) { + x[i] = G[i].sub_vector(N - K, N) * data; + } + GF2Vec y(N); + for (int i = 0; i < N; i++) { + y[permute[i]] = x[i]; + } + return y.get_vec(); + } else { + throw std::runtime_error("bad vector length!"); + return std::vector<char>(); } - return y.get_vec(); - } - else { - throw std::runtime_error("bad vector length!"); - return std::vector<char>(); - } } -int -cldpc::dimension() -{ - return K; -} +int cldpc::dimension() { return K; } -int -cldpc::get_M() -{ - return M; -} +int cldpc::get_M() { return M; } -int -cldpc::get_N() -{ - return N; -} +int cldpc::get_N() { return N; } -GF2Mat -cldpc::get_H() -{ - return H; -} +GF2Mat cldpc::get_H() { return H; } -GF2Mat -cldpc::get_G() -{ - return G; -} +GF2Mat cldpc::get_G() { return G; } |