1 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
---|
2 | <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> |
---|
3 | <title>mixpp: itpp::LDPC_Code Class Reference</title> |
---|
4 | <link href="tabs.css" rel="stylesheet" type="text/css"> |
---|
5 | <link href="doxygen.css" rel="stylesheet" type="text/css"> |
---|
6 | </head><body> |
---|
7 | <!-- Generated by Doxygen 1.5.8 --> |
---|
8 | <script type="text/javascript"> |
---|
9 | <!-- |
---|
10 | function changeDisplayState (e){ |
---|
11 | var num=this.id.replace(/[^[0-9]/g,''); |
---|
12 | var button=this.firstChild; |
---|
13 | var sectionDiv=document.getElementById('dynsection'+num); |
---|
14 | if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){ |
---|
15 | sectionDiv.style.display='block'; |
---|
16 | button.src='open.gif'; |
---|
17 | }else{ |
---|
18 | sectionDiv.style.display='none'; |
---|
19 | button.src='closed.gif'; |
---|
20 | } |
---|
21 | } |
---|
22 | function initDynSections(){ |
---|
23 | var divs=document.getElementsByTagName('div'); |
---|
24 | var sectionCounter=1; |
---|
25 | for(var i=0;i<divs.length-1;i++){ |
---|
26 | if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){ |
---|
27 | var header=divs[i]; |
---|
28 | var section=divs[i+1]; |
---|
29 | var button=header.firstChild; |
---|
30 | if (button!='IMG'){ |
---|
31 | divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild); |
---|
32 | button=document.createElement('img'); |
---|
33 | divs[i].insertBefore(button,divs[i].firstChild); |
---|
34 | } |
---|
35 | header.style.cursor='pointer'; |
---|
36 | header.onclick=changeDisplayState; |
---|
37 | header.id='dynheader'+sectionCounter; |
---|
38 | button.src='closed.gif'; |
---|
39 | section.id='dynsection'+sectionCounter; |
---|
40 | section.style.display='none'; |
---|
41 | section.style.marginLeft='14px'; |
---|
42 | sectionCounter++; |
---|
43 | } |
---|
44 | } |
---|
45 | } |
---|
46 | window.onload = initDynSections; |
---|
47 | --> |
---|
48 | </script> |
---|
49 | <div class="navigation" id="top"> |
---|
50 | <div class="tabs"> |
---|
51 | <ul> |
---|
52 | <li><a href="main.html"><span>Main Page</span></a></li> |
---|
53 | <li><a href="pages.html"><span>Related Pages</span></a></li> |
---|
54 | <li><a href="modules.html"><span>Modules</span></a></li> |
---|
55 | <li class="current"><a href="annotated.html"><span>Classes</span></a></li> |
---|
56 | <li><a href="files.html"><span>Files</span></a></li> |
---|
57 | </ul> |
---|
58 | </div> |
---|
59 | <div class="tabs"> |
---|
60 | <ul> |
---|
61 | <li><a href="annotated.html"><span>Class List</span></a></li> |
---|
62 | <li><a href="classes.html"><span>Class Index</span></a></li> |
---|
63 | <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> |
---|
64 | <li><a href="functions.html"><span>Class Members</span></a></li> |
---|
65 | </ul> |
---|
66 | </div> |
---|
67 | <div class="navpath"><b>itpp</b>::<a class="el" href="classitpp_1_1LDPC__Code.html">LDPC_Code</a> |
---|
68 | </div> |
---|
69 | </div> |
---|
70 | <div class="contents"> |
---|
71 | <h1>itpp::LDPC_Code Class Reference<br> |
---|
72 | <small> |
---|
73 | [<a class="el" href="group__fec.html">Forward Error Correcting Codes</a>]</small> |
---|
74 | </h1><!-- doxytag: class="itpp::LDPC_Code" --><!-- doxytag: inherits="itpp::Channel_Code" -->Low-density parity check (LDPC) codec. |
---|
75 | <a href="#_details">More...</a> |
---|
76 | <p> |
---|
77 | <code>#include <<a class="el" href="ldpc_8h-source.html">ldpc.h</a>></code> |
---|
78 | <p> |
---|
79 | |
---|
80 | <p> |
---|
81 | <a href="classitpp_1_1LDPC__Code-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> |
---|
82 | <tr><td></td></tr> |
---|
83 | <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> |
---|
84 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="67225734edb76c509e25eb5c03504bb7"></a><!-- doxytag: member="itpp::LDPC_Code::LDPC_Code" ref="67225734edb76c509e25eb5c03504bb7" args="()" --> |
---|
85 | </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#67225734edb76c509e25eb5c03504bb7">LDPC_Code</a> ()</td></tr> |
---|
86 | |
---|
87 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Default constructor. <br></td></tr> |
---|
88 | <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#25bd58ebafe70752ab5b8672e60d706f">LDPC_Code</a> (const <a class="el" href="classitpp_1_1LDPC__Parity.html">LDPC_Parity</a> *const H, <a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const <a class="el" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0">G</a>=0)</td></tr> |
---|
89 | |
---|
90 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor, from a parity check matrix and optionally a generator. <a href="#25bd58ebafe70752ab5b8672e60d706f"></a><br></td></tr> |
---|
91 | <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#708c727acf1fd6dbc42644950c2062a1">LDPC_Code</a> (const std::string &filename, <a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const <a class="el" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0">G</a>=0)</td></tr> |
---|
92 | |
---|
93 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Constructor, from a saved file. <a href="#708c727acf1fd6dbc42644950c2062a1"></a><br></td></tr> |
---|
94 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1cef517f16fd7731457d5b5cd5002222"></a><!-- doxytag: member="itpp::LDPC_Code::~LDPC_Code" ref="1cef517f16fd7731457d5b5cd5002222" args="()" --> |
---|
95 | virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#1cef517f16fd7731457d5b5cd5002222">~LDPC_Code</a> ()</td></tr> |
---|
96 | |
---|
97 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Destructor. <br></td></tr> |
---|
98 | <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#cb246790e35667c0fa2f72cde8204044">set_code</a> (const <a class="el" href="classitpp_1_1LDPC__Parity.html">LDPC_Parity</a> *const H, <a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const <a class="el" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0">G</a>=0)</td></tr> |
---|
99 | |
---|
100 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the codec, from a parity check matrix and optionally a generator. <a href="#cb246790e35667c0fa2f72cde8204044"></a><br></td></tr> |
---|
101 | <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#eb77df900d57a21f4e58d61b89021137">load_code</a> (const std::string &filename, <a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const <a class="el" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0">G</a>=0)</td></tr> |
---|
102 | |
---|
103 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the codec, by reading from a saved file. <a href="#eb77df900d57a21f4e58d61b89021137"></a><br></td></tr> |
---|
104 | <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#11d57db70a6f26d1e61645bd4d46d2be">save_code</a> (const std::string &filename) const </td></tr> |
---|
105 | |
---|
106 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Save the codec to a file. <a href="#11d57db70a6f26d1e61645bd4d46d2be"></a><br></td></tr> |
---|
107 | <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#1dc075d2037b99063e56c6367125f7c1">set_decoding_method</a> (const std::string &method)</td></tr> |
---|
108 | |
---|
109 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the decoding method. <a href="#1dc075d2037b99063e56c6367125f7c1"></a><br></td></tr> |
---|
110 | <tr><td class="memItemLeft" nowrap align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#e0973ce52201a50b152fc12d0ea2bede">set_exit_conditions</a> (int <a class="el" href="classitpp_1_1LDPC__Code.html#bb224992cccd0175c11dd347052736d4">max_iters</a>, bool syndr_check_each_iter=true, bool syndr_check_at_start=false)</td></tr> |
---|
111 | |
---|
112 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Set the decoding loop exit conditions. <a href="#e0973ce52201a50b152fc12d0ea2bede"></a><br></td></tr> |
---|
113 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4219bb70addf01ce19c014c69704b735"></a><!-- doxytag: member="itpp::LDPC_Code::set_llrcalc" ref="4219bb70addf01ce19c014c69704b735" args="(const LLR_calc_unit &llrcalc)" --> |
---|
114 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#4219bb70addf01ce19c014c69704b735">set_llrcalc</a> (const <a class="el" href="classitpp_1_1LLR__calc__unit.html">LLR_calc_unit</a> &<a class="el" href="classitpp_1_1LDPC__Code.html#50db4abe3af5c9e57ccf8c2a8f488433">llrcalc</a>)</td></tr> |
---|
115 | |
---|
116 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Set LLR calculation unit. <br></td></tr> |
---|
117 | <tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#640c68e85d0df3b607b96f7d3787e5a8">encode</a> (const bvec &input, bvec &output)</td></tr> |
---|
118 | |
---|
119 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Encode codeword. <a href="#640c68e85d0df3b607b96f7d3787e5a8"></a><br></td></tr> |
---|
120 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d63f3f18ec1955866e50174fde361f1b"></a><!-- doxytag: member="itpp::LDPC_Code::encode" ref="d63f3f18ec1955866e50174fde361f1b" args="(const bvec &input)" --> |
---|
121 | virtual bvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#d63f3f18ec1955866e50174fde361f1b">encode</a> (const bvec &input)</td></tr> |
---|
122 | |
---|
123 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Encode codeword. <br></td></tr> |
---|
124 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="99fb8f359baa6fb4aaa1e8e46dcd5281"></a><!-- doxytag: member="itpp::LDPC_Code::decode" ref="99fb8f359baa6fb4aaa1e8e46dcd5281" args="(const bvec &, bvec &)" --> |
---|
125 | virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#99fb8f359baa6fb4aaa1e8e46dcd5281">decode</a> (const bvec &, bvec &)</td></tr> |
---|
126 | |
---|
127 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Inherited from the base class - not implemented here. <br></td></tr> |
---|
128 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1afefa2e0da0e129c5bf90c230726211"></a><!-- doxytag: member="itpp::LDPC_Code::decode" ref="1afefa2e0da0e129c5bf90c230726211" args="(const bvec &)" --> |
---|
129 | virtual bvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#1afefa2e0da0e129c5bf90c230726211">decode</a> (const bvec &)</td></tr> |
---|
130 | |
---|
131 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Inherited from the base class - not implemented here. <br></td></tr> |
---|
132 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="dec3a0be8d3331253a86f6c70f71e4cd"></a><!-- doxytag: member="itpp::LDPC_Code::decode" ref="dec3a0be8d3331253a86f6c70f71e4cd" args="(const vec &llr_in, bvec &syst_bits)" --> |
---|
133 | virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#dec3a0be8d3331253a86f6c70f71e4cd">decode</a> (const vec &llr_in, bvec &syst_bits)</td></tr> |
---|
134 | |
---|
135 | <tr><td class="mdescLeft"> </td><td class="mdescRight">This function outputs systematic bits of the decoded codeword. <br></td></tr> |
---|
136 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="daf071dad2e2e521ae50330b33ccfca4"></a><!-- doxytag: member="itpp::LDPC_Code::decode" ref="daf071dad2e2e521ae50330b33ccfca4" args="(const vec &llr_in)" --> |
---|
137 | virtual bvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#daf071dad2e2e521ae50330b33ccfca4">decode</a> (const vec &llr_in)</td></tr> |
---|
138 | |
---|
139 | <tr><td class="mdescLeft"> </td><td class="mdescRight">This function outputs systematic bits of the decoded codeword. <br></td></tr> |
---|
140 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fcddb278cb81265d6354094087dfcaca"></a><!-- doxytag: member="itpp::LDPC_Code::decode_soft_out" ref="fcddb278cb81265d6354094087dfcaca" args="(const vec &llr_in, vec &llr_out)" --> |
---|
141 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#fcddb278cb81265d6354094087dfcaca">decode_soft_out</a> (const vec &llr_in, vec &llr_out)</td></tr> |
---|
142 | |
---|
143 | <tr><td class="mdescLeft"> </td><td class="mdescRight">This function is a wrapper for <code><a class="el" href="classitpp_1_1LDPC__Code.html#d2643b5e6178c9664e4bc34621868f74" title="Belief propagation decoding.">bp_decode()</a></code>. <br></td></tr> |
---|
144 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e41b67c6bdc20bf449128742be587404"></a><!-- doxytag: member="itpp::LDPC_Code::decode_soft_out" ref="e41b67c6bdc20bf449128742be587404" args="(const vec &llr_in)" --> |
---|
145 | vec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#e41b67c6bdc20bf449128742be587404">decode_soft_out</a> (const vec &llr_in)</td></tr> |
---|
146 | |
---|
147 | <tr><td class="mdescLeft"> </td><td class="mdescRight">This function is a wrapper for <code><a class="el" href="classitpp_1_1LDPC__Code.html#d2643b5e6178c9664e4bc34621868f74" title="Belief propagation decoding.">bp_decode()</a></code>. <br></td></tr> |
---|
148 | <tr><td class="memItemLeft" nowrap align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#d2643b5e6178c9664e4bc34621868f74">bp_decode</a> (const QLLRvec &LLRin, QLLRvec &LLRout)</td></tr> |
---|
149 | |
---|
150 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Belief propagation decoding. <a href="#d2643b5e6178c9664e4bc34621868f74"></a><br></td></tr> |
---|
151 | <tr><td class="memItemLeft" nowrap align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#a7dda5d95ea5b2e1967f7530089e2686">syndrome_check</a> (const QLLRvec &LLR) const </td></tr> |
---|
152 | |
---|
153 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Syndrome check, on QLLR vector. <a href="#a7dda5d95ea5b2e1967f7530089e2686"></a><br></td></tr> |
---|
154 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1def08d48a4342ac5f6aa022cb6c99d4"></a><!-- doxytag: member="itpp::LDPC_Code::syndrome_check" ref="1def08d48a4342ac5f6aa022cb6c99d4" args="(const bvec &b) const " --> |
---|
155 | bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#1def08d48a4342ac5f6aa022cb6c99d4">syndrome_check</a> (const bvec &b) const </td></tr> |
---|
156 | |
---|
157 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Syndrome check, on bit vector. <br></td></tr> |
---|
158 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0b5bb00ac0c304d4d98c3a803238a852"></a><!-- doxytag: member="itpp::LDPC_Code::get_rate" ref="0b5bb00ac0c304d4d98c3a803238a852" args="() const " --> |
---|
159 | double </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#0b5bb00ac0c304d4d98c3a803238a852">get_rate</a> () const </td></tr> |
---|
160 | |
---|
161 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the coderate. <br></td></tr> |
---|
162 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89cbc43a80cb950399b220343a45a551"></a><!-- doxytag: member="itpp::LDPC_Code::get_nvar" ref="89cbc43a80cb950399b220343a45a551" args="() const " --> |
---|
163 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#89cbc43a80cb950399b220343a45a551">get_nvar</a> () const </td></tr> |
---|
164 | |
---|
165 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the number of variable nodes. <br></td></tr> |
---|
166 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e29d996569bb6d7c4dd1d515f0575adc"></a><!-- doxytag: member="itpp::LDPC_Code::get_ncheck" ref="e29d996569bb6d7c4dd1d515f0575adc" args="() const " --> |
---|
167 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#e29d996569bb6d7c4dd1d515f0575adc">get_ncheck</a> () const </td></tr> |
---|
168 | |
---|
169 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the number of check nodes. <br></td></tr> |
---|
170 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="88cda37174caacfb6d0f6f2c5ee46748"></a><!-- doxytag: member="itpp::LDPC_Code::get_ninfo" ref="88cda37174caacfb6d0f6f2c5ee46748" args="() const " --> |
---|
171 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#88cda37174caacfb6d0f6f2c5ee46748">get_ninfo</a> () const </td></tr> |
---|
172 | |
---|
173 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the number of information bits per codeword. <br></td></tr> |
---|
174 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="644fa7036ea884b6157b009377532060"></a><!-- doxytag: member="itpp::LDPC_Code::get_decoding_method" ref="644fa7036ea884b6157b009377532060" args="() const " --> |
---|
175 | std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#644fa7036ea884b6157b009377532060">get_decoding_method</a> () const </td></tr> |
---|
176 | |
---|
177 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Return the decoding method. <br></td></tr> |
---|
178 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="249b1d3890a6d622ea46dbdf303394fe"></a><!-- doxytag: member="itpp::LDPC_Code::get_nrof_iterations" ref="249b1d3890a6d622ea46dbdf303394fe" args="() const " --> |
---|
179 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#249b1d3890a6d622ea46dbdf303394fe">get_nrof_iterations</a> () const </td></tr> |
---|
180 | |
---|
181 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Get the maximum number of iterations of the decoder. <br></td></tr> |
---|
182 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="73803c985e4fee2942e280f0598a1308"></a><!-- doxytag: member="itpp::LDPC_Code::get_llrcalc" ref="73803c985e4fee2942e280f0598a1308" args="() const " --> |
---|
183 | <a class="el" href="classitpp_1_1LLR__calc__unit.html">LLR_calc_unit</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#73803c985e4fee2942e280f0598a1308">get_llrcalc</a> () const </td></tr> |
---|
184 | |
---|
185 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Get LLR calculation unit used in decoder. <br></td></tr> |
---|
186 | <tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr> |
---|
187 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="315028cb705384218de166866966bd8c"></a><!-- doxytag: member="itpp::LDPC_Code::decoder_parameterization" ref="315028cb705384218de166866966bd8c" args="(const LDPC_Parity *const H)" --> |
---|
188 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#315028cb705384218de166866966bd8c">decoder_parameterization</a> (const <a class="el" href="classitpp_1_1LDPC__Parity.html">LDPC_Parity</a> *const H)</td></tr> |
---|
189 | |
---|
190 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Function to compute decoder parameterization. <br></td></tr> |
---|
191 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8d5308e5ca059e8b15aaa44402c381ca"></a><!-- doxytag: member="itpp::LDPC_Code::integrity_check" ref="8d5308e5ca059e8b15aaa44402c381ca" args="()" --> |
---|
192 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#8d5308e5ca059e8b15aaa44402c381ca">integrity_check</a> ()</td></tr> |
---|
193 | |
---|
194 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Function to check the integrity of the parity check matrix and generator. <br></td></tr> |
---|
195 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="91e331956ee790ae2f6f732b9310b0cf"></a><!-- doxytag: member="itpp::LDPC_Code::setup_decoder" ref="91e331956ee790ae2f6f732b9310b0cf" args="()" --> |
---|
196 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#91e331956ee790ae2f6f732b9310b0cf">setup_decoder</a> ()</td></tr> |
---|
197 | |
---|
198 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Initialize decoder. <br></td></tr> |
---|
199 | <tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr> |
---|
200 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3c4fd1b5f0853d65d4721aabcb6269a0"></a><!-- doxytag: member="itpp::LDPC_Code::H_defined" ref="3c4fd1b5f0853d65d4721aabcb6269a0" args="" --> |
---|
201 | bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#3c4fd1b5f0853d65d4721aabcb6269a0">H_defined</a></td></tr> |
---|
202 | |
---|
203 | <tr><td class="mdescLeft"> </td><td class="mdescRight">true if parity check matrix is defined <br></td></tr> |
---|
204 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f4ed785144777a683e3403f46a14c8b9"></a><!-- doxytag: member="itpp::LDPC_Code::G_defined" ref="f4ed785144777a683e3403f46a14c8b9" args="" --> |
---|
205 | bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#f4ed785144777a683e3403f46a14c8b9">G_defined</a></td></tr> |
---|
206 | |
---|
207 | <tr><td class="mdescLeft"> </td><td class="mdescRight">true if generator is defined <br></td></tr> |
---|
208 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="67763300074130d403b921e30bc73c18"></a><!-- doxytag: member="itpp::LDPC_Code::nvar" ref="67763300074130d403b921e30bc73c18" args="" --> |
---|
209 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#67763300074130d403b921e30bc73c18">nvar</a></td></tr> |
---|
210 | |
---|
211 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Number of variable nodes. <br></td></tr> |
---|
212 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ba49268475773e439d266ff900312060"></a><!-- doxytag: member="itpp::LDPC_Code::ncheck" ref="ba49268475773e439d266ff900312060" args="" --> |
---|
213 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#ba49268475773e439d266ff900312060">ncheck</a></td></tr> |
---|
214 | |
---|
215 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Number of check nodes. <br></td></tr> |
---|
216 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8e0a35c62e26fe98fe3a0b1fbdbb4ac0"></a><!-- doxytag: member="itpp::LDPC_Code::G" ref="8e0a35c62e26fe98fe3a0b1fbdbb4ac0" args="" --> |
---|
217 | <a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0">G</a></td></tr> |
---|
218 | |
---|
219 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Generator object pointer. <br></td></tr> |
---|
220 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fae3d84382be09abb61569fc1dd22023"></a><!-- doxytag: member="itpp::LDPC_Code::dec_method" ref="fae3d84382be09abb61569fc1dd22023" args="" --> |
---|
221 | std::string </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#fae3d84382be09abb61569fc1dd22023">dec_method</a></td></tr> |
---|
222 | |
---|
223 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Decoding method. <br></td></tr> |
---|
224 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bb224992cccd0175c11dd347052736d4"></a><!-- doxytag: member="itpp::LDPC_Code::max_iters" ref="bb224992cccd0175c11dd347052736d4" args="" --> |
---|
225 | int </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#bb224992cccd0175c11dd347052736d4">max_iters</a></td></tr> |
---|
226 | |
---|
227 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Maximum number of iterations. <br></td></tr> |
---|
228 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="162ef04a7ab6c84ae7eecddc62652105"></a><!-- doxytag: member="itpp::LDPC_Code::psc" ref="162ef04a7ab6c84ae7eecddc62652105" args="" --> |
---|
229 | bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#162ef04a7ab6c84ae7eecddc62652105">psc</a></td></tr> |
---|
230 | |
---|
231 | <tr><td class="mdescLeft"> </td><td class="mdescRight">check syndrom after each iteration <br></td></tr> |
---|
232 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64ca9f09f9fe699f0be44b7187f7b54a"></a><!-- doxytag: member="itpp::LDPC_Code::pisc" ref="64ca9f09f9fe699f0be44b7187f7b54a" args="" --> |
---|
233 | bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#64ca9f09f9fe699f0be44b7187f7b54a">pisc</a></td></tr> |
---|
234 | |
---|
235 | <tr><td class="mdescLeft"> </td><td class="mdescRight">check syndrom before first iteration <br></td></tr> |
---|
236 | <tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="50db4abe3af5c9e57ccf8c2a8f488433"></a><!-- doxytag: member="itpp::LDPC_Code::llrcalc" ref="50db4abe3af5c9e57ccf8c2a8f488433" args="" --> |
---|
237 | <a class="el" href="classitpp_1_1LLR__calc__unit.html">LLR_calc_unit</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#50db4abe3af5c9e57ccf8c2a8f488433">llrcalc</a></td></tr> |
---|
238 | |
---|
239 | <tr><td class="mdescLeft"> </td><td class="mdescRight">LLR calculation unit. <br></td></tr> |
---|
240 | <tr><td colspan="2"><br><h2>Friends</h2></td></tr> |
---|
241 | <tr><td class="memItemLeft" nowrap align="right" valign="top">std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1LDPC__Code.html#98ccdcb0c1e67513c9e65539ef777f96">operator<<</a> (std::ostream &os, const <a class="el" href="classitpp_1_1LDPC__Code.html">LDPC_Code</a> &C)</td></tr> |
---|
242 | |
---|
243 | <tr><td class="mdescLeft"> </td><td class="mdescRight">Print some properties of the codec in plain text. <a href="#98ccdcb0c1e67513c9e65539ef777f96"></a><br></td></tr> |
---|
244 | </table> |
---|
245 | <hr><a name="_details"></a><h2>Detailed Description</h2> |
---|
246 | Low-density parity check (LDPC) codec. |
---|
247 | <p> |
---|
248 | This class provides the functionality for encoding and decoding of LDPC codes defined via <code><a class="el" href="classitpp_1_1LDPC__Parity.html" title="LDPC parity check matrix generic class.">LDPC_Parity</a></code> and <code><a class="el" href="classitpp_1_1LDPC__Generator.html" title="LDPC Generator pure virtual base class.">LDPC_Generator</a></code> classes.<p> |
---|
249 | LDPC codecs are constructed from parity check and generator matrices. Since the procedure of constructing the codec can be time-consuming (for example, due to optimization of the parity matrix and computation of the generator matrix), codecs can be saved to a file for later use. This class provides functionality and a special file format (the file format is designed to optimize the operation of the decoder) to do this. Some examples of load and save operations follow:<p> |
---|
250 | Saving a codec without generator matrix: <div class="fragment"><pre class="fragment"> <span class="comment">// assume the parity matrix is already defined and stored in H</span> |
---|
251 | <a class="code" href="classitpp_1_1LDPC__Code.html#67225734edb76c509e25eb5c03504bb7" title="Default constructor.">LDPC_Code</a> C(&H); |
---|
252 | C.save_code(<span class="stringliteral">"filename.it"</span>); |
---|
253 | </pre></div><p> |
---|
254 | Saving a codec with generator matrix (for the example of systematic generator): <div class="fragment"><pre class="fragment"> <span class="comment">// assume the parity matrix is already defined and stored in H</span> |
---|
255 | LDPC_Generator_Systematic <a class="code" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0" title="Generator object pointer.">G</a>(&H); <span class="comment">// create generator</span> |
---|
256 | <a class="code" href="classitpp_1_1LDPC__Code.html#67225734edb76c509e25eb5c03504bb7" title="Default constructor.">LDPC_Code</a> C(&H, &<a class="code" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0" title="Generator object pointer.">G</a>); |
---|
257 | C.save_code(<span class="stringliteral">"filename.it"</span>); |
---|
258 | </pre></div><p> |
---|
259 | Loading a codec without a generator: <div class="fragment"><pre class="fragment"> <a class="code" href="classitpp_1_1LDPC__Code.html#67225734edb76c509e25eb5c03504bb7" title="Default constructor.">LDPC_Code</a>(<span class="stringliteral">"filename.it"</span>); |
---|
260 | </pre></div><p> |
---|
261 | Loading a codec with a generator (systematic in this example): <div class="fragment"><pre class="fragment"> LDPC_Generator_Systematic <a class="code" href="classitpp_1_1LDPC__Code.html#8e0a35c62e26fe98fe3a0b1fbdbb4ac0" title="Generator object pointer.">G</a>; <span class="comment">// the generator object must be created first</span> |
---|
262 | <a class="code" href="classitpp_1_1LDPC__Code.html#67225734edb76c509e25eb5c03504bb7" title="Default constructor.">LDPC_Code</a>(<span class="stringliteral">"filename.it"</span>, &G); |
---|
263 | </pre></div><p> |
---|
264 | <dl class="note" compact><dt><b>Note:</b></dt><dd>Please refer to the tutorials ldpc_gen_codes and ldpc_bersim_awgn for extensive examples of how to use LDPC codes.</dd></dl> |
---|
265 | <dl class="author" compact><dt><b>Author:</b></dt><dd>Erik G. Larsson and Adam Piatyszek </dd></dl> |
---|
266 | <hr><h2>Constructor & Destructor Documentation</h2> |
---|
267 | <a class="anchor" name="25bd58ebafe70752ab5b8672e60d706f"></a><!-- doxytag: member="itpp::LDPC_Code::LDPC_Code" ref="25bd58ebafe70752ab5b8672e60d706f" args="(const LDPC_Parity *const H, LDPC_Generator *const G=0)" --> |
---|
268 | <div class="memitem"> |
---|
269 | <div class="memproto"> |
---|
270 | <table class="memname"> |
---|
271 | <tr> |
---|
272 | <td class="memname">itpp::LDPC_Code::LDPC_Code </td> |
---|
273 | <td>(</td> |
---|
274 | <td class="paramtype">const <a class="el" href="classitpp_1_1LDPC__Parity.html">LDPC_Parity</a> *const </td> |
---|
275 | <td class="paramname"> <em>H</em>, </td> |
---|
276 | </tr> |
---|
277 | <tr> |
---|
278 | <td class="paramkey"></td> |
---|
279 | <td></td> |
---|
280 | <td class="paramtype"><a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const </td> |
---|
281 | <td class="paramname"> <em>G</em> = <code>0</code></td><td> </td> |
---|
282 | </tr> |
---|
283 | <tr> |
---|
284 | <td></td> |
---|
285 | <td>)</td> |
---|
286 | <td></td><td></td><td></td> |
---|
287 | </tr> |
---|
288 | </table> |
---|
289 | </div> |
---|
290 | <div class="memdoc"> |
---|
291 | |
---|
292 | <p> |
---|
293 | Constructor, from a parity check matrix and optionally a generator. |
---|
294 | <p> |
---|
295 | This constructor simply calls <code><a class="el" href="classitpp_1_1LDPC__Code.html#cb246790e35667c0fa2f72cde8204044" title="Set the codec, from a parity check matrix and optionally a generator.">set_code()</a></code>. |
---|
296 | <p>References <a class="el" href="ldpc_8cpp-source.html#l01228">set_code()</a>.</p> |
---|
297 | |
---|
298 | </div> |
---|
299 | </div><p> |
---|
300 | <a class="anchor" name="708c727acf1fd6dbc42644950c2062a1"></a><!-- doxytag: member="itpp::LDPC_Code::LDPC_Code" ref="708c727acf1fd6dbc42644950c2062a1" args="(const std::string &filename, LDPC_Generator *const G=0)" --> |
---|
301 | <div class="memitem"> |
---|
302 | <div class="memproto"> |
---|
303 | <table class="memname"> |
---|
304 | <tr> |
---|
305 | <td class="memname">itpp::LDPC_Code::LDPC_Code </td> |
---|
306 | <td>(</td> |
---|
307 | <td class="paramtype">const std::string & </td> |
---|
308 | <td class="paramname"> <em>filename</em>, </td> |
---|
309 | </tr> |
---|
310 | <tr> |
---|
311 | <td class="paramkey"></td> |
---|
312 | <td></td> |
---|
313 | <td class="paramtype"><a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const </td> |
---|
314 | <td class="paramname"> <em>G</em> = <code>0</code></td><td> </td> |
---|
315 | </tr> |
---|
316 | <tr> |
---|
317 | <td></td> |
---|
318 | <td>)</td> |
---|
319 | <td></td><td></td><td></td> |
---|
320 | </tr> |
---|
321 | </table> |
---|
322 | </div> |
---|
323 | <div class="memdoc"> |
---|
324 | |
---|
325 | <p> |
---|
326 | Constructor, from a saved file. |
---|
327 | <p> |
---|
328 | This constructor simply calls <code><a class="el" href="classitpp_1_1LDPC__Code.html#eb77df900d57a21f4e58d61b89021137" title="Set the codec, by reading from a saved file.">load_code()</a></code>. |
---|
329 | <p>References <a class="el" href="ldpc_8cpp-source.html#l01240">load_code()</a>.</p> |
---|
330 | |
---|
331 | </div> |
---|
332 | </div><p> |
---|
333 | <hr><h2>Member Function Documentation</h2> |
---|
334 | <a class="anchor" name="d2643b5e6178c9664e4bc34621868f74"></a><!-- doxytag: member="itpp::LDPC_Code::bp_decode" ref="d2643b5e6178c9664e4bc34621868f74" args="(const QLLRvec &LLRin, QLLRvec &LLRout)" --> |
---|
335 | <div class="memitem"> |
---|
336 | <div class="memproto"> |
---|
337 | <table class="memname"> |
---|
338 | <tr> |
---|
339 | <td class="memname">int itpp::LDPC_Code::bp_decode </td> |
---|
340 | <td>(</td> |
---|
341 | <td class="paramtype">const QLLRvec & </td> |
---|
342 | <td class="paramname"> <em>LLRin</em>, </td> |
---|
343 | </tr> |
---|
344 | <tr> |
---|
345 | <td class="paramkey"></td> |
---|
346 | <td></td> |
---|
347 | <td class="paramtype">QLLRvec & </td> |
---|
348 | <td class="paramname"> <em>LLRout</em></td><td> </td> |
---|
349 | </tr> |
---|
350 | <tr> |
---|
351 | <td></td> |
---|
352 | <td>)</td> |
---|
353 | <td></td><td></td><td></td> |
---|
354 | </tr> |
---|
355 | </table> |
---|
356 | </div> |
---|
357 | <div class="memdoc"> |
---|
358 | |
---|
359 | <p> |
---|
360 | Belief propagation decoding. |
---|
361 | <p> |
---|
362 | This function implements the sum-product message passing decoder (Pearl's belief propagation) using LLR values as messages. A fast update mechanism is used for nodes with large degrees.<p> |
---|
363 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
364 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
365 | <tr><td valign="top"></td><td valign="top"><em>LLRin</em> </td><td>vector of <code>nvar</code> input LLR values </td></tr> |
---|
366 | <tr><td valign="top"></td><td valign="top"><em>LLRout</em> </td><td>vector of <code>nvar</code> output LLR values</td></tr> |
---|
367 | </table> |
---|
368 | </dl> |
---|
369 | If the decoder converged to a valid codeword, the function returns the number of iterations performed. Otherwise the function returns the number of iterations performed but with negative sign.<p> |
---|
370 | One can use <code><a class="el" href="classitpp_1_1LDPC__Code.html#e0973ce52201a50b152fc12d0ea2bede" title="Set the decoding loop exit conditions.">set_exit_conditions()</a></code> method to change the number of decoding iterations and related parameters parameters. The decoding function uses <code><a class="el" href="classitpp_1_1LLR__calc__unit.html" title="Log-likelihood algebra calculation unit.">LLR_calc_unit</a></code> to implement table-lookup for the Boxplus operator. By setting the parameters of the <code><a class="el" href="classitpp_1_1LLR__calc__unit.html" title="Log-likelihood algebra calculation unit.">LLR_calc_unit</a></code> provided in <code><a class="el" href="classitpp_1_1LDPC__Code.html#4219bb70addf01ce19c014c69704b735" title="Set LLR calculation unit.">set_llrcalc()</a></code>, one can change the resolution, for example to use a logmax approximation. See the documentation of <code><a class="el" href="classitpp_1_1LLR__calc__unit.html" title="Log-likelihood algebra calculation unit.">LLR_calc_unit</a></code> for details on how to do this. |
---|
371 | <p>References <a class="el" href="llr_8cpp-source.html#l00123">itpp::LLR_calc_unit::Boxplus()</a>, <a class="el" href="ldpc_8h-source.html#l00917">H_defined</a>, <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="itassert_8h-source.html#l00126">it_error</a>, <a class="el" href="itassert_8h-source.html#l00163">it_info_debug</a>, <a class="el" href="itassert_8h-source.html#l00168">it_info_no_endl_debug</a>, <a class="el" href="ldpc_8h-source.html#l00928">llrcalc</a>, <a class="el" href="ldpc_8h-source.html#l00925">max_iters</a>, <a class="el" href="ldpc_8h-source.html#l00920">ncheck</a>, <a class="el" href="ldpc_8h-source.html#l00919">nvar</a>, <a class="el" href="ldpc_8h-source.html#l00927">pisc</a>, <a class="el" href="ldpc_8h-source.html#l00926">psc</a>, and <a class="el" href="ldpc_8cpp-source.html#l01852">syndrome_check()</a>.</p> |
---|
372 | |
---|
373 | <p>Referenced by <a class="el" href="ldpc_8cpp-source.html#l01356">decode()</a>, and <a class="el" href="ldpc_8cpp-source.html#l01371">decode_soft_out()</a>.</p> |
---|
374 | |
---|
375 | </div> |
---|
376 | </div><p> |
---|
377 | <a class="anchor" name="640c68e85d0df3b607b96f7d3787e5a8"></a><!-- doxytag: member="itpp::LDPC_Code::encode" ref="640c68e85d0df3b607b96f7d3787e5a8" args="(const bvec &input, bvec &output)" --> |
---|
378 | <div class="memitem"> |
---|
379 | <div class="memproto"> |
---|
380 | <table class="memname"> |
---|
381 | <tr> |
---|
382 | <td class="memname">void itpp::LDPC_Code::encode </td> |
---|
383 | <td>(</td> |
---|
384 | <td class="paramtype">const bvec & </td> |
---|
385 | <td class="paramname"> <em>input</em>, </td> |
---|
386 | </tr> |
---|
387 | <tr> |
---|
388 | <td class="paramkey"></td> |
---|
389 | <td></td> |
---|
390 | <td class="paramtype">bvec & </td> |
---|
391 | <td class="paramname"> <em>output</em></td><td> </td> |
---|
392 | </tr> |
---|
393 | <tr> |
---|
394 | <td></td> |
---|
395 | <td>)</td> |
---|
396 | <td></td><td></td><td><code> [virtual]</code></td> |
---|
397 | </tr> |
---|
398 | </table> |
---|
399 | </div> |
---|
400 | <div class="memdoc"> |
---|
401 | |
---|
402 | <p> |
---|
403 | Encode codeword. |
---|
404 | <p> |
---|
405 | This is a wrapper functions which calls a proper implementation from the <code><a class="el" href="classitpp_1_1LDPC__Generator.html" title="LDPC Generator pure virtual base class.">LDPC_Generator</a></code> object.<p> |
---|
406 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
407 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
408 | <tr><td valign="top"></td><td valign="top"><em>input</em> </td><td>Vector of <code>ncheck</code> input bits </td></tr> |
---|
409 | <tr><td valign="top"></td><td valign="top"><em>output</em> </td><td>Vector of <code>nvar</code> output bits </td></tr> |
---|
410 | </table> |
---|
411 | </dl> |
---|
412 | |
---|
413 | <p>Implements <a class="el" href="classitpp_1_1Channel__Code.html#8e151b53b207d644598360537dacaf91">itpp::Channel_Code</a>.</p> |
---|
414 | |
---|
415 | <p>References <a class="el" href="classitpp_1_1LDPC__Generator.html#c0b88b84513103f2d1c19d62284648c2">itpp::LDPC_Generator::encode()</a>, <a class="el" href="ldpc_8h-source.html#l00921">G</a>, <a class="el" href="ldpc_8h-source.html#l00918">G_defined</a>, <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="itassert_8h-source.html#l00107">it_assert_debug</a>, and <a class="el" href="ldpc_8cpp-source.html#l01852">syndrome_check()</a>.</p> |
---|
416 | |
---|
417 | <p>Referenced by <a class="el" href="ldpc_8cpp-source.html#l01349">encode()</a>.</p> |
---|
418 | |
---|
419 | </div> |
---|
420 | </div><p> |
---|
421 | <a class="anchor" name="eb77df900d57a21f4e58d61b89021137"></a><!-- doxytag: member="itpp::LDPC_Code::load_code" ref="eb77df900d57a21f4e58d61b89021137" args="(const std::string &filename, LDPC_Generator *const G=0)" --> |
---|
422 | <div class="memitem"> |
---|
423 | <div class="memproto"> |
---|
424 | <table class="memname"> |
---|
425 | <tr> |
---|
426 | <td class="memname">void itpp::LDPC_Code::load_code </td> |
---|
427 | <td>(</td> |
---|
428 | <td class="paramtype">const std::string & </td> |
---|
429 | <td class="paramname"> <em>filename</em>, </td> |
---|
430 | </tr> |
---|
431 | <tr> |
---|
432 | <td class="paramkey"></td> |
---|
433 | <td></td> |
---|
434 | <td class="paramtype"><a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const </td> |
---|
435 | <td class="paramname"> <em>G</em> = <code>0</code></td><td> </td> |
---|
436 | </tr> |
---|
437 | <tr> |
---|
438 | <td></td> |
---|
439 | <td>)</td> |
---|
440 | <td></td><td></td><td></td> |
---|
441 | </tr> |
---|
442 | </table> |
---|
443 | </div> |
---|
444 | <div class="memdoc"> |
---|
445 | |
---|
446 | <p> |
---|
447 | Set the codec, by reading from a saved file. |
---|
448 | <p> |
---|
449 | The file format is defined in the source code. LDPC codecs can be saved with the function <code><a class="el" href="classitpp_1_1LDPC__Code.html#11d57db70a6f26d1e61645bd4d46d2be" title="Save the codec to a file.">save_code()</a></code>.<p> |
---|
450 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
451 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
452 | <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td><a class="el" href="classitpp_1_1Name.html" title="Automatic naming when savingAn easy way to give a variable a name and optionally...">Name</a> of the file where the codec is stored </td></tr> |
---|
453 | <tr><td valign="top"></td><td valign="top"><em>G</em> </td><td>A pointer to the optional generator object</td></tr> |
---|
454 | </table> |
---|
455 | </dl> |
---|
456 | <dl class="note" compact><dt><b>Note:</b></dt><dd>If <code>G</code> points at <code>0</code> (default), the generator data is not read from the saved file. This means that the encoding can not be performed. </dd></dl> |
---|
457 | |
---|
458 | <p>References <a class="el" href="itfile_8cpp-source.html#l00060">itpp::it_ifile::close()</a>, <a class="el" href="ldpc_8h-source.html#l00921">G</a>, <a class="el" href="ldpc_8h-source.html#l00918">G_defined</a>, <a class="el" href="ldpc_8h-source.html#l00917">H_defined</a>, <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="itassert_8h-source.html#l00163">it_info_debug</a>, <a class="el" href="classitpp_1_1LDPC__Generator.html#8973051cc4b7073f84b2e3607c8ba837">itpp::LDPC_Generator::load()</a>, <a class="el" href="ldpc_8h-source.html#l00920">ncheck</a>, <a class="el" href="ldpc_8h-source.html#l00919">nvar</a>, and <a class="el" href="ldpc_8cpp-source.html#l01950">setup_decoder()</a>.</p> |
---|
459 | |
---|
460 | <p>Referenced by <a class="el" href="ldpc_8cpp-source.html#l01219">LDPC_Code()</a>.</p> |
---|
461 | |
---|
462 | </div> |
---|
463 | </div><p> |
---|
464 | <a class="anchor" name="11d57db70a6f26d1e61645bd4d46d2be"></a><!-- doxytag: member="itpp::LDPC_Code::save_code" ref="11d57db70a6f26d1e61645bd4d46d2be" args="(const std::string &filename) const " --> |
---|
465 | <div class="memitem"> |
---|
466 | <div class="memproto"> |
---|
467 | <table class="memname"> |
---|
468 | <tr> |
---|
469 | <td class="memname">void itpp::LDPC_Code::save_code </td> |
---|
470 | <td>(</td> |
---|
471 | <td class="paramtype">const std::string & </td> |
---|
472 | <td class="paramname"> <em>filename</em> </td> |
---|
473 | <td> ) </td> |
---|
474 | <td> const</td> |
---|
475 | </tr> |
---|
476 | </table> |
---|
477 | </div> |
---|
478 | <div class="memdoc"> |
---|
479 | |
---|
480 | <p> |
---|
481 | Save the codec to a file. |
---|
482 | <p> |
---|
483 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
484 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
485 | <tr><td valign="top"></td><td valign="top"><em>filename</em> </td><td><a class="el" href="classitpp_1_1Name.html" title="Automatic naming when savingAn easy way to give a variable a name and optionally...">Name</a> of the file where to store the codec</td></tr> |
---|
486 | </table> |
---|
487 | </dl> |
---|
488 | <dl class="note" compact><dt><b>Note:</b></dt><dd>The decoder parameters (<code>max_iters</code>, <code>syndr_check_each_iter</code>, <code>syndr_check_at_start</code> and <code>llrcalc</code>) are not saved to a file. </dd></dl> |
---|
489 | |
---|
490 | <p>References <a class="el" href="itfile_8cpp-source.html#l00532">itpp::it_file::close()</a>, <a class="el" href="ldpc_8h-source.html#l00921">G</a>, <a class="el" href="ldpc_8h-source.html#l00918">G_defined</a>, <a class="el" href="ldpc_8h-source.html#l00917">H_defined</a>, <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="itassert_8h-source.html#l00163">it_info_debug</a>, <a class="el" href="ldpc_8h-source.html#l00920">ncheck</a>, <a class="el" href="ldpc_8h-source.html#l00919">nvar</a>, <a class="el" href="itfile_8cpp-source.html#l00514">itpp::it_file::open()</a>, and <a class="el" href="classitpp_1_1LDPC__Generator.html#6dc3ede11c56d04304c480b04507b8e5">itpp::LDPC_Generator::save()</a>.</p> |
---|
491 | |
---|
492 | </div> |
---|
493 | </div><p> |
---|
494 | <a class="anchor" name="cb246790e35667c0fa2f72cde8204044"></a><!-- doxytag: member="itpp::LDPC_Code::set_code" ref="cb246790e35667c0fa2f72cde8204044" args="(const LDPC_Parity *const H, LDPC_Generator *const G=0)" --> |
---|
495 | <div class="memitem"> |
---|
496 | <div class="memproto"> |
---|
497 | <table class="memname"> |
---|
498 | <tr> |
---|
499 | <td class="memname">void itpp::LDPC_Code::set_code </td> |
---|
500 | <td>(</td> |
---|
501 | <td class="paramtype">const <a class="el" href="classitpp_1_1LDPC__Parity.html">LDPC_Parity</a> *const </td> |
---|
502 | <td class="paramname"> <em>H</em>, </td> |
---|
503 | </tr> |
---|
504 | <tr> |
---|
505 | <td class="paramkey"></td> |
---|
506 | <td></td> |
---|
507 | <td class="paramtype"><a class="el" href="classitpp_1_1LDPC__Generator.html">LDPC_Generator</a> *const </td> |
---|
508 | <td class="paramname"> <em>G</em> = <code>0</code></td><td> </td> |
---|
509 | </tr> |
---|
510 | <tr> |
---|
511 | <td></td> |
---|
512 | <td>)</td> |
---|
513 | <td></td><td></td><td></td> |
---|
514 | </tr> |
---|
515 | </table> |
---|
516 | </div> |
---|
517 | <div class="memdoc"> |
---|
518 | |
---|
519 | <p> |
---|
520 | Set the codec, from a parity check matrix and optionally a generator. |
---|
521 | <p> |
---|
522 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
523 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
524 | <tr><td valign="top"></td><td valign="top"><em>H</em> </td><td>The parity check matrix </td></tr> |
---|
525 | <tr><td valign="top"></td><td valign="top"><em>G</em> </td><td>A pointer to the optional generator object </td></tr> |
---|
526 | </table> |
---|
527 | </dl> |
---|
528 | |
---|
529 | <p>References <a class="el" href="ldpc_8cpp-source.html#l01880">decoder_parameterization()</a>, <a class="el" href="ldpc_8h-source.html#l00921">G</a>, <a class="el" href="ldpc_8h-source.html#l00918">G_defined</a>, <a class="el" href="ldpc_8cpp-source.html#l01959">integrity_check()</a>, and <a class="el" href="ldpc_8cpp-source.html#l01950">setup_decoder()</a>.</p> |
---|
530 | |
---|
531 | <p>Referenced by <a class="el" href="ldpc_8cpp-source.html#l01211">LDPC_Code()</a>.</p> |
---|
532 | |
---|
533 | </div> |
---|
534 | </div><p> |
---|
535 | <a class="anchor" name="1dc075d2037b99063e56c6367125f7c1"></a><!-- doxytag: member="itpp::LDPC_Code::set_decoding_method" ref="1dc075d2037b99063e56c6367125f7c1" args="(const std::string &method)" --> |
---|
536 | <div class="memitem"> |
---|
537 | <div class="memproto"> |
---|
538 | <table class="memname"> |
---|
539 | <tr> |
---|
540 | <td class="memname">void itpp::LDPC_Code::set_decoding_method </td> |
---|
541 | <td>(</td> |
---|
542 | <td class="paramtype">const std::string & </td> |
---|
543 | <td class="paramname"> <em>method</em> </td> |
---|
544 | <td> ) </td> |
---|
545 | <td></td> |
---|
546 | </tr> |
---|
547 | </table> |
---|
548 | </div> |
---|
549 | <div class="memdoc"> |
---|
550 | |
---|
551 | <p> |
---|
552 | Set the decoding method. |
---|
553 | <p> |
---|
554 | Currently only a belief propagation method ("BP" or "bp") is supported.<p> |
---|
555 | <dl class="note" compact><dt><b>Note:</b></dt><dd>The default method set in the class constructors is "BP". </dd></dl> |
---|
556 | |
---|
557 | <p>References <a class="el" href="ldpc_8h-source.html#l00924">dec_method</a>, and <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>.</p> |
---|
558 | |
---|
559 | </div> |
---|
560 | </div><p> |
---|
561 | <a class="anchor" name="e0973ce52201a50b152fc12d0ea2bede"></a><!-- doxytag: member="itpp::LDPC_Code::set_exit_conditions" ref="e0973ce52201a50b152fc12d0ea2bede" args="(int max_iters, bool syndr_check_each_iter=true, bool syndr_check_at_start=false)" --> |
---|
562 | <div class="memitem"> |
---|
563 | <div class="memproto"> |
---|
564 | <table class="memname"> |
---|
565 | <tr> |
---|
566 | <td class="memname">void itpp::LDPC_Code::set_exit_conditions </td> |
---|
567 | <td>(</td> |
---|
568 | <td class="paramtype">int </td> |
---|
569 | <td class="paramname"> <em>max_iters</em>, </td> |
---|
570 | </tr> |
---|
571 | <tr> |
---|
572 | <td class="paramkey"></td> |
---|
573 | <td></td> |
---|
574 | <td class="paramtype">bool </td> |
---|
575 | <td class="paramname"> <em>syndr_check_each_iter</em> = <code>true</code>, </td> |
---|
576 | </tr> |
---|
577 | <tr> |
---|
578 | <td class="paramkey"></td> |
---|
579 | <td></td> |
---|
580 | <td class="paramtype">bool </td> |
---|
581 | <td class="paramname"> <em>syndr_check_at_start</em> = <code>false</code></td><td> </td> |
---|
582 | </tr> |
---|
583 | <tr> |
---|
584 | <td></td> |
---|
585 | <td>)</td> |
---|
586 | <td></td><td></td><td></td> |
---|
587 | </tr> |
---|
588 | </table> |
---|
589 | </div> |
---|
590 | <div class="memdoc"> |
---|
591 | |
---|
592 | <p> |
---|
593 | Set the decoding loop exit conditions. |
---|
594 | <p> |
---|
595 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
596 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
597 | <tr><td valign="top"></td><td valign="top"><em>max_iters</em> </td><td>Maximum number of the decoding iterations </td></tr> |
---|
598 | <tr><td valign="top"></td><td valign="top"><em>syndr_check_each_iter</em> </td><td>If true, break the decoding loop as soon as valid codeword is found. Recommended value: <code>true</code>. </td></tr> |
---|
599 | <tr><td valign="top"></td><td valign="top"><em>syndr_check_at_start</em> </td><td>If true, perform a syndrome check before entering the decoding loop. If LLRin corresponds to a valid codeword, set LLRout = LLRin. Recommended value: <code>false</code>.</td></tr> |
---|
600 | </table> |
---|
601 | </dl> |
---|
602 | <dl class="note" compact><dt><b>Note:</b></dt><dd>The default values set in the class constructor are: "50", "true" and "false", respectively. </dd></dl> |
---|
603 | |
---|
604 | <p>References <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="ldpc_8h-source.html#l00925">max_iters</a>, <a class="el" href="ldpc_8h-source.html#l00927">pisc</a>, and <a class="el" href="ldpc_8h-source.html#l00926">psc</a>.</p> |
---|
605 | |
---|
606 | </div> |
---|
607 | </div><p> |
---|
608 | <a class="anchor" name="a7dda5d95ea5b2e1967f7530089e2686"></a><!-- doxytag: member="itpp::LDPC_Code::syndrome_check" ref="a7dda5d95ea5b2e1967f7530089e2686" args="(const QLLRvec &LLR) const " --> |
---|
609 | <div class="memitem"> |
---|
610 | <div class="memproto"> |
---|
611 | <table class="memname"> |
---|
612 | <tr> |
---|
613 | <td class="memname">bool itpp::LDPC_Code::syndrome_check </td> |
---|
614 | <td>(</td> |
---|
615 | <td class="paramtype">const QLLRvec & </td> |
---|
616 | <td class="paramname"> <em>LLR</em> </td> |
---|
617 | <td> ) </td> |
---|
618 | <td> const</td> |
---|
619 | </tr> |
---|
620 | </table> |
---|
621 | </div> |
---|
622 | <div class="memdoc"> |
---|
623 | |
---|
624 | <p> |
---|
625 | Syndrome check, on QLLR vector. |
---|
626 | <p> |
---|
627 | This function performs a syndrome check on a softbit (LLR vector). The function returns true for a valid codeword, false else.<p> |
---|
628 | <dl compact><dt><b>Parameters:</b></dt><dd> |
---|
629 | <table border="0" cellspacing="2" cellpadding="0"> |
---|
630 | <tr><td valign="top"></td><td valign="top"><em>LLR</em> </td><td>LLR-vector to check </td></tr> |
---|
631 | </table> |
---|
632 | </dl> |
---|
633 | |
---|
634 | <p>References <a class="el" href="ldpc_8h-source.html#l00920">ncheck</a>.</p> |
---|
635 | |
---|
636 | <p>Referenced by <a class="el" href="ldpc_8cpp-source.html#l01386">bp_decode()</a>, <a class="el" href="ldpc_8cpp-source.html#l01340">encode()</a>, <a class="el" href="ldpc_8cpp-source.html#l01959">integrity_check()</a>, and <a class="el" href="ldpc_8cpp-source.html#l01846">syndrome_check()</a>.</p> |
---|
637 | |
---|
638 | </div> |
---|
639 | </div><p> |
---|
640 | <hr><h2>Friends And Related Function Documentation</h2> |
---|
641 | <a class="anchor" name="98ccdcb0c1e67513c9e65539ef777f96"></a><!-- doxytag: member="itpp::LDPC_Code::operator<<" ref="98ccdcb0c1e67513c9e65539ef777f96" args="(std::ostream &os, const LDPC_Code &C)" --> |
---|
642 | <div class="memitem"> |
---|
643 | <div class="memproto"> |
---|
644 | <table class="memname"> |
---|
645 | <tr> |
---|
646 | <td class="memname">std::ostream & operator<< </td> |
---|
647 | <td>(</td> |
---|
648 | <td class="paramtype">std::ostream & </td> |
---|
649 | <td class="paramname"> <em>os</em>, </td> |
---|
650 | </tr> |
---|
651 | <tr> |
---|
652 | <td class="paramkey"></td> |
---|
653 | <td></td> |
---|
654 | <td class="paramtype">const <a class="el" href="classitpp_1_1LDPC__Code.html">LDPC_Code</a> & </td> |
---|
655 | <td class="paramname"> <em>C</em></td><td> </td> |
---|
656 | </tr> |
---|
657 | <tr> |
---|
658 | <td></td> |
---|
659 | <td>)</td> |
---|
660 | <td></td><td></td><td><code> [friend]</code></td> |
---|
661 | </tr> |
---|
662 | </table> |
---|
663 | </div> |
---|
664 | <div class="memdoc"> |
---|
665 | |
---|
666 | <p> |
---|
667 | Print some properties of the codec in plain text. |
---|
668 | <p> |
---|
669 | Print some properties of the LDPC codec in plain text. |
---|
670 | </div> |
---|
671 | </div><p> |
---|
672 | <hr>The documentation for this class was generated from the following files:<ul> |
---|
673 | <li><a class="el" href="ldpc_8h-source.html">ldpc.h</a><li><a class="el" href="ldpc_8cpp.html">ldpc.cpp</a></ul> |
---|
674 | </div> |
---|
675 | <hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:19 2009 for mixpp by |
---|
676 | <a href="http://www.doxygen.org/index.html"> |
---|
677 | <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address> |
---|
678 | </body> |
---|
679 | </html> |
---|