15 reverse(s.begin(), s.begin()+d);
16 reverse(s.begin()+d, s.end());
17 reverse(s.begin(), s.end());
27 std::vector<std::string>
splitString(
const std::string& str, std::size_t len)
29 if (len >= str.size())
31 auto it = str.begin();
33 std::vector<std::string> strings;
34 while (end != str.end())
36 strings.emplace_back(it, end);
41 strings.emplace_back(it, end);
45 std::vector < std::vector<unsigned char> >
50 infile.open(
"/home/mbkitine/Dropbox/Lulea/GRC/DeepSpace/gr-ccsds/lib/fec/ldpc/gmini/C2.txt");
52 cerr <<
"Unable to open file circulants.txt";
56 std::vector<std::string> circulants;
57 while (std::getline(infile, line))
59 circulants.push_back(line);
62 const int numCirculants = 14;
63 const int numCirculations = 511;
64 const int lenCirculants = 511*2;
66 std::vector<std::string> genMtx;
67 std::vector < std::vector<unsigned char> > G;
68 for(
int i = 0; i < numCirculants; i++)
70 std::string curCirculant = circulants.at(i);
71 std::string b1 = curCirculant.substr(0,511);
72 std::string b2 = curCirculant.substr(511,511);
79 for(
int j = 0; j < numCirculations; j++)
81 std::string b = b1 + b2;
93 std::vector<unsigned char> row;
94 for(
int k = 0; k < numCirculants*numCirculations; k++)
97 for(
int i = 0; i < lenCirculants; i++)
100 row.push_back((genMtx.at(k)[i] ==
'1') ? 0x01 : 0x00);
107 std::cout <<
"Generator matrix initialized" << std::endl;
108 std::cout <<
"N : " <<
N << std::endl;
109 std::cout <<
"K : " <<
K << std::endl;
110 std::cout <<
"P : " <<
P << std::endl;
113 std::vector<unsigned char>
ldpc_encode(std::vector<unsigned char> input, std::vector < std::vector<unsigned char> > G)
116 std::vector<unsigned char> parity(
P, 0x00);
119 for(
int i = 0; i <
K; i++)
123 std::transform(parity.begin(), parity.end(), G.at(i).begin(),
124 parity.begin(), std::bit_xor<unsigned char>());
129 input.insert(input.end(), parity.begin(), parity.end());
136 std::vector<std::string> A1;
137 std::vector<std::string> A2;
138 std::vector< std::vector<int> > A1_indicies{{0, 176}, {12, 239}, {0, 352}, {24, 431}, {0, 392}, {151, 409}, {0, 351}, {9, 359}, {0, 307}, {53, 329}, {0, 207}, {18, 281}, {0, 399}, {202, 457}, {0, 247}, {36, 261}};
139 std::vector< std::vector<int> > A2_indicies{{99, 471}, {130, 473}, {198, 435}, {260, 478}, {215, 420}, {282, 481}, {48, 396}, {193, 445}, {273, 430}, {302, 451}, {96, 379}, {191, 386}, {244, 467}, {364, 470}, {51, 382}, {192, 414}};
141 std::cout <<
"size of A1 Indicies: " << A1_indicies.size() << std::endl;
142 std::cout <<
"size of A2 Indicies: " << A2_indicies.size() << std::endl;
145 const int size = 511;
146 std::string zeros = std::string(size,
'0');
148 for(
int i = 0; i < 16; i++)
150 A1.push_back(zeros);A1[i][A1_indicies[i][0]] =
'1';A1[i][A1_indicies[i][1]] =
'1';
151 A2.push_back(zeros);A2[i][A2_indicies[i][0]] =
'1';A2[i][A2_indicies[i][1]] =
'1';
153 std::cout <<
"Size of A1 : " << A1.size() << std::endl;
154 std::cout <<
"Size of A2 : " << A1.size() << std::endl;
156 std::vector<std::string> hString;
160 for(
int j = 0; j < 511;j++)
164 for(
int i = 0; i < 16; i++)
167 hString.push_back(a);
168 for(
int r = 0; r < 16; r++)
173 for(
int j = 0; j < 511;j++)
177 for(
int i = 0; i < 16; i++)
180 hString.push_back(a);
181 for(
int r = 0; r < 16; r++)
197 std::cout <<
"Size of hString : " << hString.size() <<
" x " << hString[0].length() << std::endl;
204 #endif // LDPC_ENCODER #define P
Definition: ldpc_encoder.h:10
void leftrotate(string &s, int d)
Definition: ldpc_encoder.h:13
#define K
Definition: ldpc_encoder.h:9
std::vector< std::vector< unsigned char > > generatorMatrix()
Definition: ldpc_encoder.h:46
#define N
Definition: ldpc_encoder.h:8
void C2_Parity()
Definition: ldpc_encoder.h:134
void rightrotate(string &s, int d)
Definition: ldpc_encoder.h:22
std::vector< unsigned char > ldpc_encode(std::vector< unsigned char > input, std::vector< std::vector< unsigned char > > G)
Definition: ldpc_encoder.h:113
std::vector< std::string > splitString(const std::string &str, std::size_t len)
Definition: ldpc_encoder.h:27