root/doc/html/classitpp_1_1Punctured__Convolutional__Code.html @ 353

Revision 353, 81.2 kB (checked in by smidl, 15 years ago)

doc

Line 
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::Punctured_Convolutional_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<!--
10function 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}
22function 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}
46window.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&nbsp;Page</span></a></li>
53      <li><a href="pages.html"><span>Related&nbsp;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&nbsp;List</span></a></li>
62      <li><a href="classes.html"><span>Class&nbsp;Index</span></a></li>
63      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
64      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
65    </ul>
66  </div>
67  <div class="navpath"><b>itpp</b>::<a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html">Punctured_Convolutional_Code</a>
68  </div>
69</div>
70<div class="contents">
71<h1>itpp::Punctured_Convolutional_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::Punctured_Convolutional_Code" --><!-- doxytag: inherits="itpp::Convolutional_Code" -->Binary Punctured Convolutional Code Class. 
75<a href="#_details">More...</a>
76<p>
77<code>#include &lt;<a class="el" href="punct__convcode_8h-source.html">punct_convcode.h</a>&gt;</code>
78<p>
79
80<p>
81<a href="classitpp_1_1Punctured__Convolutional__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="8f73e4bcd82e98ace9e52003483755e6"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::Punctured_Convolutional_Code" ref="8f73e4bcd82e98ace9e52003483755e6" args="(void)" -->
85&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#8f73e4bcd82e98ace9e52003483755e6">Punctured_Convolutional_Code</a> (void)</td></tr>
86
87<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <br></td></tr>
88<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4917b5626e01e3566eb183be1e1db709"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::~Punctured_Convolutional_Code" ref="4917b5626e01e3566eb183be1e1db709" args="(void)" -->
89virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#4917b5626e01e3566eb183be1e1db709">~Punctured_Convolutional_Code</a> (void)</td></tr>
90
91<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
92<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#3b8b66d056a2cde7ad92a8b6ce0c19ba">set_code</a> (const <a class="el" href="group__fec.html#ge9651aa649deec69310af24cd89b8729">CONVOLUTIONAL_CODE_TYPE</a> type_of_code, int inverse_rate, int constraint_length)</td></tr>
93
94<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the code according to built-in tables.  <a href="#3b8b66d056a2cde7ad92a8b6ce0c19ba"></a><br></td></tr>
95<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="19de0087797a6b4da4d9e32523c49701"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::set_generator_polynomials" ref="19de0087797a6b4da4d9e32523c49701" args="(const ivec &amp;gen, int constraint_length)" -->
96void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#19de0087797a6b4da4d9e32523c49701">set_generator_polynomials</a> (const ivec &amp;gen, int constraint_length)</td></tr>
97
98<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set generator polynomials. Given in Proakis integer form. <br></td></tr>
99<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e17fee30caf169e009ff6fba671b5fb"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_generator_polynomials" ref="2e17fee30caf169e009ff6fba671b5fb" args="() const " -->
100ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#2e17fee30caf169e009ff6fba671b5fb">get_generator_polynomials</a> () const </td></tr>
101
102<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get generator polynomials. <br></td></tr>
103<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="26441c092c8ab4b4e4bf480479a74232"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_rate" ref="26441c092c8ab4b4e4bf480479a74232" args="() const " -->
104virtual double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#26441c092c8ab4b4e4bf480479a74232">get_rate</a> () const </td></tr>
105
106<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return rate of code. <br></td></tr>
107<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="086f61a5c99ca542520c28174c45023d"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::set_method" ref="086f61a5c99ca542520c28174c45023d" args="(const CONVOLUTIONAL_CODE_METHOD method)" -->
108void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#086f61a5c99ca542520c28174c45023d">set_method</a> (const <a class="el" href="group__fec.html#ge22fe2744a6f00b512ee75e304d72a82">CONVOLUTIONAL_CODE_METHOD</a> method)</td></tr>
109
110<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set encoding and decoding method (Trunc, Tail, or Tailbite). <br></td></tr>
111<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f85e15222896c0392b13e6d7a2e13751"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::set_puncture_matrix" ref="f85e15222896c0392b13e6d7a2e13751" args="(const bmat &amp;pmatrix)" -->
112void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#f85e15222896c0392b13e6d7a2e13751">set_puncture_matrix</a> (const <a class="el" href="mat_8h.html#f90acd1af41bf2d1d8a4bb23662fff69">bmat</a> &amp;pmatrix)</td></tr>
113
114<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set puncture matrix (size n*Period). <br></td></tr>
115<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cf55657458143ec0501780b7aa7439e2"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_puncture_matrix" ref="cf55657458143ec0501780b7aa7439e2" args="() const " -->
116<a class="el" href="mat_8h.html#f90acd1af41bf2d1d8a4bb23662fff69">bmat</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#cf55657458143ec0501780b7aa7439e2">get_puncture_matrix</a> () const </td></tr>
117
118<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get puncture matrix. <br></td></tr>
119<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a47e9275c102b6ce2b3baeb9c0131305"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_puncture_period" ref="a47e9275c102b6ce2b3baeb9c0131305" args="() const " -->
120int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#a47e9275c102b6ce2b3baeb9c0131305">get_puncture_period</a> () const </td></tr>
121
122<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get puncturing period. <br></td></tr>
123<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e71898980b935887287e9980f075efb0"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::init_encoder" ref="e71898980b935887287e9980f075efb0" args="()" -->
124void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#e71898980b935887287e9980f075efb0">init_encoder</a> ()</td></tr>
125
126<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the encoder internal state in start_state (set by <a class="el" href="classitpp_1_1Convolutional__Code.html#6316d7d75c01471aa44d533fdaa586c1" title="Set encoder default start state.">set_start_state()</a>). <br></td></tr>
127<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="52a8335d94b8e4b0777a09afcb47445c"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode" ref="52a8335d94b8e4b0777a09afcb47445c" args="(const bvec &amp;input, bvec &amp;output)" -->
128void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#52a8335d94b8e4b0777a09afcb47445c">encode</a> (const bvec &amp;input, bvec &amp;output)</td></tr>
129
130<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary vector of inputs using specified method. <br></td></tr>
131<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aae281080e4a74ea7094c4fe777cac54"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode" ref="aae281080e4a74ea7094c4fe777cac54" args="(const bvec &amp;input)" -->
132bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#aae281080e4a74ea7094c4fe777cac54">encode</a> (const bvec &amp;input)</td></tr>
133
134<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary vector of inputs using specified method. <br></td></tr>
135<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="49dbb58e8a99c89502140e8f2d527503"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_trunc" ref="49dbb58e8a99c89502140e8f2d527503" args="(const bvec &amp;input, bvec &amp;output)" -->
136void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#49dbb58e8a99c89502140e8f2d527503">encode_trunc</a> (const bvec &amp;input, bvec &amp;output)</td></tr>
137
138<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary vector of inputs starting from state set by the set_state function. <br></td></tr>
139<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="95c4c6d4cd1e0d2b1b7164b9405d7d33"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_trunc" ref="95c4c6d4cd1e0d2b1b7164b9405d7d33" args="(const bvec &amp;input)" -->
140bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#95c4c6d4cd1e0d2b1b7164b9405d7d33">encode_trunc</a> (const bvec &amp;input)</td></tr>
141
142<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary vector of inputs starting from state set by the set_state function. <br></td></tr>
143<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#eda7709de1cff7c6211884f9acfae470">encode_tail</a> (const bvec &amp;input, bvec &amp;output)</td></tr>
144
145<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encoding that begins and ends in the zero state.  <a href="#eda7709de1cff7c6211884f9acfae470"></a><br></td></tr>
146<tr><td class="memItemLeft" nowrap align="right" valign="top">bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#550a724cf0a14e96dd572063c5d862d6">encode_tail</a> (const bvec &amp;input)</td></tr>
147
148<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encoding that begins and ends in the zero state.  <a href="#550a724cf0a14e96dd572063c5d862d6"></a><br></td></tr>
149<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="60feaefdc4f8b62884268f7cc0ea8296"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_tailbite" ref="60feaefdc4f8b62884268f7cc0ea8296" args="(const bvec &amp;input, bvec &amp;output)" -->
150void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#60feaefdc4f8b62884268f7cc0ea8296">encode_tailbite</a> (const bvec &amp;input, bvec &amp;output)</td></tr>
151
152<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary vector of inputs using tailbiting. <br></td></tr>
153<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6fbdfbea0ba4a31686740dbfe9ca3ac5"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_tailbite" ref="6fbdfbea0ba4a31686740dbfe9ca3ac5" args="(const bvec &amp;input)" -->
154bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#6fbdfbea0ba4a31686740dbfe9ca3ac5">encode_tailbite</a> (const bvec &amp;input)</td></tr>
155
156<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary vector of inputs using tailbiting. <br></td></tr>
157<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f6f6621fc90d8d3774e5228846eafcd5"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode" ref="f6f6621fc90d8d3774e5228846eafcd5" args="(const vec &amp;received_signal, bvec &amp;output)" -->
158virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#f6f6621fc90d8d3774e5228846eafcd5">decode</a> (const vec &amp;received_signal, bvec &amp;output)</td></tr>
159
160<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Viterbi decoding using specified method. <br></td></tr>
161<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b63ed0bc93b14bcf4db7004132b38bfc"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode" ref="b63ed0bc93b14bcf4db7004132b38bfc" args="(const vec &amp;received_signal)" -->
162virtual bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#b63ed0bc93b14bcf4db7004132b38bfc">decode</a> (const vec &amp;received_signal)</td></tr>
163
164<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Viterbi decoding using specified method. <br></td></tr>
165<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="75e880d4c8cfd973d4459c0593cd304e"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode" ref="75e880d4c8cfd973d4459c0593cd304e" args="(const bvec &amp;coded_bits, bvec &amp;decoded_bits)" -->
166virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#75e880d4c8cfd973d4459c0593cd304e">decode</a> (const bvec &amp;coded_bits, bvec &amp;decoded_bits)</td></tr>
167
168<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode a bvec of coded data. <br></td></tr>
169<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ba48bd81d653f58161c10c2d4487533"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode" ref="3ba48bd81d653f58161c10c2d4487533" args="(const bvec &amp;coded_bits)" -->
170virtual bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#3ba48bd81d653f58161c10c2d4487533">decode</a> (const bvec &amp;coded_bits)</td></tr>
171
172<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode a bvec of coded data. <br></td></tr>
173<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="13be31ca6bcd770cad2a7120315bc6dd"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode_trunc" ref="13be31ca6bcd770cad2a7120315bc6dd" args="(const vec &amp;received_signal, bvec &amp;output)" -->
174void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#13be31ca6bcd770cad2a7120315bc6dd">decode_trunc</a> (const vec &amp;received_signal, bvec &amp;output)</td></tr>
175
176<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Viterbi decoding using truncation of memory (default = 5*K). <br></td></tr>
177<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c0e1f2f26a7dd2368139ae40bdc9d042"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode_trunc" ref="c0e1f2f26a7dd2368139ae40bdc9d042" args="(const vec &amp;received_signal)" -->
178bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#c0e1f2f26a7dd2368139ae40bdc9d042">decode_trunc</a> (const vec &amp;received_signal)</td></tr>
179
180<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Viterbi decoding using truncation of memory (default = 5*K). <br></td></tr>
181<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#8c706434a618852db7304b6e699c0194">decode_tail</a> (const vec &amp;received_signal, bvec &amp;output)</td></tr>
182
183<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode a block of encoded data where encode_tail has been used.  <a href="#8c706434a618852db7304b6e699c0194"></a><br></td></tr>
184<tr><td class="memItemLeft" nowrap align="right" valign="top">bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#7842a78c7a0abb4a7a5695452448c6e6">decode_tail</a> (const vec &amp;received_signal)</td></tr>
185
186<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode a block of encoded data where encode_tail has been used.  <a href="#7842a78c7a0abb4a7a5695452448c6e6"></a><br></td></tr>
187<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="841c9437974ffa14ff10385e9729f59d"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode_tailbite" ref="841c9437974ffa14ff10385e9729f59d" args="(const vec &amp;received_signal, bvec &amp;output)" -->
188void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#841c9437974ffa14ff10385e9729f59d">decode_tailbite</a> (const vec &amp;received_signal, bvec &amp;output)</td></tr>
189
190<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode a block of encoded data where encode_tailbite has been used. Tries all start states. <br></td></tr>
191<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1e75ceaa37751af19c7028c6239ed45"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode_tailbite" ref="a1e75ceaa37751af19c7028c6239ed45" args="(const vec &amp;received_signal)" -->
192bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#a1e75ceaa37751af19c7028c6239ed45">decode_tailbite</a> (const vec &amp;received_signal)</td></tr>
193
194<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decode a block of encoded data where encode_tailbite has been used. Tries all start states. <br></td></tr>
195<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#b9fa55cd0b92e4d0db5debcd198184b1">inverse_tail</a> (const bvec coded_sequence, bvec &amp;input)</td></tr>
196
197<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate the inverse sequence.  <a href="#b9fa55cd0b92e4d0db5debcd198184b1"></a><br></td></tr>
198<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8e66d820e304baed62f2750a8139c7df"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::catastrophic" ref="8e66d820e304baed62f2750a8139c7df" args="(void)" -->
199bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#8e66d820e304baed62f2750a8139c7df">catastrophic</a> (void)</td></tr>
200
201<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if the code is catastrophic. Returns true if catastrophic. <br></td></tr>
202<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="86534f4a85b09bb3340edcbbfb825b2a"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::distance_profile" ref="86534f4a85b09bb3340edcbbfb825b2a" args="(ivec &amp;dist_prof, int time, int dmax=100000, bool reverse=false)" -->
203void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#86534f4a85b09bb3340edcbbfb825b2a">distance_profile</a> (ivec &amp;dist_prof, int time, int dmax=100000, bool reverse=false)</td></tr>
204
205<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate distance profile. If reverse = true calculate for the reverse code instead. <br></td></tr>
206<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#5b03f1aa26a5521cdcab6298d94926c9">calculate_spectrum</a> (<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;spectrum, int dmax, int no_terms)</td></tr>
207
208<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate spectrum.  <a href="#5b03f1aa26a5521cdcab6298d94926c9"></a><br></td></tr>
209<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#3cef5b8543adca3a83cdd61b7181957b">calculate_spectrum</a> (<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;spectrum, int time, int dmax, int no_terms, int block_length=0)</td></tr>
210
211<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate spectrum. Suitable when calculating many terms in the spectra. Breadth first search.  <a href="#3cef5b8543adca3a83cdd61b7181957b"></a><br></td></tr>
212<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#120a1f328f3d51597b8258901ad285de">fast</a> (<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;spectrum, int time, int dfree, int no_terms, int d_best_so_far=0, bool test_catastrophic=false)</td></tr>
213
214<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cederwall's fast algorithm.  <a href="#120a1f328f3d51597b8258901ad285de"></a><br></td></tr>
215<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6ac83f0a1be7b4f6f06a1b4d7b45489a"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::reset" ref="6ac83f0a1be7b4f6f06a1b4d7b45489a" args="()" -->
216void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#6ac83f0a1be7b4f6f06a1b4d7b45489a">reset</a> ()</td></tr>
217
218<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reset encoder and decoder states. <br></td></tr>
219<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6316d7d75c01471aa44d533fdaa586c1"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::set_start_state" ref="6316d7d75c01471aa44d533fdaa586c1" args="(int state)" -->
220void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#6316d7d75c01471aa44d533fdaa586c1">set_start_state</a> (int state)</td></tr>
221
222<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set encoder default start state. <br></td></tr>
223<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22321baddd7afddcd255356debaf0fb8"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_encoder_state" ref="22321baddd7afddcd255356debaf0fb8" args="(void) const " -->
224int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#22321baddd7afddcd255356debaf0fb8">get_encoder_state</a> (void) const </td></tr>
225
226<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the current encoder state. <br></td></tr>
227<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a1929841dfb95d406fa1a16867f144bb"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::set_truncation_length" ref="a1929841dfb95d406fa1a16867f144bb" args="(const int length)" -->
228void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#a1929841dfb95d406fa1a16867f144bb">set_truncation_length</a> (const int length)</td></tr>
229
230<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set memory truncation length. Must be at least K. <br></td></tr>
231<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35d7ef525f88707e4ff2c6ed05469c00"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_truncation_length" ref="35d7ef525f88707e4ff2c6ed05469c00" args="(void) const " -->
232int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#35d7ef525f88707e4ff2c6ed05469c00">get_truncation_length</a> (void) const </td></tr>
233
234<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get memory truncation length. <br></td></tr>
235<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e99bf2f2d1973c7626214ad93222cbcf"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::distance_profile" ref="e99bf2f2d1973c7626214ad93222cbcf" args="(ivec &amp;dist_prof, int dmax=100000, bool reverse=false)" -->
236void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#e99bf2f2d1973c7626214ad93222cbcf">distance_profile</a> (ivec &amp;dist_prof, int dmax=100000, bool reverse=false)</td></tr>
237
238<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate distance profile. If reverse = true calculate for the reverse code instead. <br></td></tr>
239<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#8217a8922992b1fb4faa28d86f21e6d7">fast</a> (<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;spectrum, const int dfree, const int no_terms, const int Cdfree=1000000, const bool test_catastrophic=false)</td></tr>
240
241<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cederwall's fast algorithm.  <a href="#8217a8922992b1fb4faa28d86f21e6d7"></a><br></td></tr>
242<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
243<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#a6884e3f60678177fbf60e22d2447a5b">encode_bit</a> (const <a class="el" href="classitpp_1_1bin.html">bin</a> &amp;input, bvec &amp;output)</td></tr>
244
245<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Encode a binary bit starting from the internal encoder state.  <a href="#a6884e3f60678177fbf60e22d2447a5b"></a><br></td></tr>
246<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0c0c16ff8863936435a73f3e1efd9b99"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_bit" ref="0c0c16ff8863936435a73f3e1efd9b99" args="(const bin &amp;input)" -->
247bvec&nbsp;</td><td class="memItemRight" valign="bottom"><b>encode_bit</b> (const <a class="el" href="classitpp_1_1bin.html">bin</a> &amp;input)</td></tr>
248
249<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
250<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8bfca66093ff6a6c3a431c5e8fc585c0"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight" ref="8bfca66093ff6a6c3a431c5e8fc585c0" args="(const int state, const int input, int time)" -->
251int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#8bfca66093ff6a6c3a431c5e8fc585c0">weight</a> (const int state, const int input, int time)</td></tr>
252
253<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight of path from <code>state</code> with <code>input</code> (0 or 1) at transition <code>time</code>. <br></td></tr>
254<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="585bf56461c90d14d38d00282f1a9ce5"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight" ref="585bf56461c90d14d38d00282f1a9ce5" args="(const int state, int &amp;w0, int &amp;w1, int time)" -->
255void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#585bf56461c90d14d38d00282f1a9ce5">weight</a> (const int state, int &amp;w0, int &amp;w1, int time)</td></tr>
256
257<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight of the two paths (input 0 or 1) from given state. <br></td></tr>
258<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45c0bb8e2e8e8aa2807aa77b1ed39904"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight_reverse" ref="45c0bb8e2e8e8aa2807aa77b1ed39904" args="(const int state, const int input, int time)" -->
259int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#45c0bb8e2e8e8aa2807aa77b1ed39904">weight_reverse</a> (const int state, const int input, int time)</td></tr>
260
261<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Weight of the reverse code from <code>state</code> with <code>input</code> (0 or 1) at transition <code>time</code>. <br></td></tr>
262<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1103e0c07d1c2730587dacbe6582874e"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight_reverse" ref="1103e0c07d1c2730587dacbe6582874e" args="(const int state, int &amp;w0, int &amp;w1, int time)" -->
263void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#1103e0c07d1c2730587dacbe6582874e">weight_reverse</a> (const int state, int &amp;w0, int &amp;w1, int time)</td></tr>
264
265<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight of the reverse code of two paths (input 0 or 1) from given state. <br></td></tr>
266<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="31df4741737f7b87b848ce95505f80fc"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::next_state" ref="31df4741737f7b87b848ce95505f80fc" args="(const int instate, const int input)" -->
267int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#31df4741737f7b87b848ce95505f80fc">next_state</a> (const int instate, const int input)</td></tr>
268
269<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Next state from instate given the input. <br></td></tr>
270<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bdfde49b386946dcd7476fbd2488dd8"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::previous_state" ref="7bdfde49b386946dcd7476fbd2488dd8" args="(const int state, const int input)" -->
271int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#7bdfde49b386946dcd7476fbd2488dd8">previous_state</a> (const int state, const int input)</td></tr>
272
273<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The previous state from state given the input. <br></td></tr>
274<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="681ad623bd14abcaabfa317d6fd0bdad"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::previous_state" ref="681ad623bd14abcaabfa317d6fd0bdad" args="(const int state, int &amp;S0, int &amp;S1)" -->
275void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#681ad623bd14abcaabfa317d6fd0bdad">previous_state</a> (const int state, int &amp;S0, int &amp;S1)</td></tr>
276
277<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The previous state from state given the input. <br></td></tr>
278<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ceb3aadcb9da39f2330d5e9870bda5af"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight" ref="ceb3aadcb9da39f2330d5e9870bda5af" args="(const int state, const int input)" -->
279int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#ceb3aadcb9da39f2330d5e9870bda5af">weight</a> (const int state, const int input)</td></tr>
280
281<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight of the transition from given state with the input given. <br></td></tr>
282<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7518410d14d05925f4e8a6de2655399a"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight" ref="7518410d14d05925f4e8a6de2655399a" args="(const int state, int &amp;w0, int &amp;w1)" -->
283void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#7518410d14d05925f4e8a6de2655399a">weight</a> (const int state, int &amp;w0, int &amp;w1)</td></tr>
284
285<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight of the two paths (input 0 or 1) from given state. <br></td></tr>
286<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f600390d130ce3cb7aa2e33037560626"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight_reverse" ref="f600390d130ce3cb7aa2e33037560626" args="(const int state, const int input)" -->
287int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#f600390d130ce3cb7aa2e33037560626">weight_reverse</a> (const int state, const int input)</td></tr>
288
289<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight (of the reverse code) of the transition from given state with the input given. <br></td></tr>
290<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2814b056af9cb40570aeaa39fc3f322f"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight_reverse" ref="2814b056af9cb40570aeaa39fc3f322f" args="(const int state, int &amp;w0, int &amp;w1)" -->
291void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#2814b056af9cb40570aeaa39fc3f322f">weight_reverse</a> (const int state, int &amp;w0, int &amp;w1)</td></tr>
292
293<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The weight (of the reverse code) of the two paths (input 0 or 1) from given state. <br></td></tr>
294<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f286a1fb3897e5fd78e749b03aaadff6"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::output_reverse" ref="f286a1fb3897e5fd78e749b03aaadff6" args="(const int state, const int input)" -->
295bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#f286a1fb3897e5fd78e749b03aaadff6">output_reverse</a> (const int state, const int input)</td></tr>
296
297<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output on transition (backwards) with input from state. <br></td></tr>
298<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1780746970f5e9ffdddd26bc805e087d"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::output_reverse" ref="1780746970f5e9ffdddd26bc805e087d" args="(const int state, bvec &amp;zero_output, bvec &amp;one_output)" -->
299void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#1780746970f5e9ffdddd26bc805e087d">output_reverse</a> (const int state, bvec &amp;zero_output, bvec &amp;one_output)</td></tr>
300
301<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output on transition (backwards) with input from state. <br></td></tr>
302<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45d579da2009db6c0e7074c826ff96c2"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::output_reverse" ref="45d579da2009db6c0e7074c826ff96c2" args="(const int state, int &amp;zero_output, int &amp;one_output)" -->
303void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#45d579da2009db6c0e7074c826ff96c2">output_reverse</a> (const int state, int &amp;zero_output, int &amp;one_output)</td></tr>
304
305<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output on transition (backwards) with input from state. <br></td></tr>
306<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5860dd3376bf2b0971e8e2a45b755b04"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::calc_metric_reverse" ref="5860dd3376bf2b0971e8e2a45b755b04" args="(const int state, const vec &amp;rx_codeword, double &amp;zero_metric, double &amp;one_metric)" -->
307void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#5860dd3376bf2b0971e8e2a45b755b04">calc_metric_reverse</a> (const int state, const vec &amp;rx_codeword, double &amp;zero_metric, double &amp;one_metric)</td></tr>
308
309<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate delta metrics for 0 and 1 input branches reaching state. <br></td></tr>
310<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="79f47928875683c5b2d91c50220ff3d6"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::calc_metric" ref="79f47928875683c5b2d91c50220ff3d6" args="(const vec &amp;rx_codeword, vec &amp;delta_metrics)" -->
311void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#79f47928875683c5b2d91c50220ff3d6">calc_metric</a> (const vec &amp;rx_codeword, vec &amp;delta_metrics)</td></tr>
312
313<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate delta metrics for all possible codewords. <br></td></tr>
314<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="028a1867c118c4fc5f8fea9b404bf20d"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::get_input" ref="028a1867c118c4fc5f8fea9b404bf20d" args="(const int state)" -->
315int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#028a1867c118c4fc5f8fea9b404bf20d">get_input</a> (const int state)</td></tr>
316
317<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the input that results in state, that is the MSB of state. <br></td></tr>
318<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
319<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ede590a005351b224cad750e9f8bb3a6"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::Period" ref="ede590a005351b224cad750e9f8bb3a6" args="" -->
320int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#ede590a005351b224cad750e9f8bb3a6">Period</a></td></tr>
321
322<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The puncture period (i.e. the number of columns in the puncture matrix). <br></td></tr>
323<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7728ad6a3c0389c00d005002a0dd45e7"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::total" ref="7728ad6a3c0389c00d005002a0dd45e7" args="" -->
324int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#7728ad6a3c0389c00d005002a0dd45e7">total</a></td></tr>
325
326<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The number of "1" in the puncture matrix. <br></td></tr>
327<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="533bca591da4abe1478bd11cf3aa82eb"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::puncture_matrix" ref="533bca591da4abe1478bd11cf3aa82eb" args="" -->
328<a class="el" href="mat_8h.html#f90acd1af41bf2d1d8a4bb23662fff69">bmat</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#533bca591da4abe1478bd11cf3aa82eb">puncture_matrix</a></td></tr>
329
330<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The puncture matrix (<em>n</em> rows and <em>Period</em> columns). <br></td></tr>
331<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b314ab153e137a68c8a0ca6e1bbbdbee"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::n" ref="b314ab153e137a68c8a0ca6e1bbbdbee" args="" -->
332int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#b314ab153e137a68c8a0ca6e1bbbdbee">n</a></td></tr>
333
334<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of generators. <br></td></tr>
335<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="63430f36f9dc2c9d78b9a0ce145a8f2d"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::K" ref="63430f36f9dc2c9d78b9a0ce145a8f2d" args="" -->
336int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#63430f36f9dc2c9d78b9a0ce145a8f2d">K</a></td></tr>
337
338<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constraint length. <br></td></tr>
339<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b93371ece607184c04780de0e05d7abc"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::m" ref="b93371ece607184c04780de0e05d7abc" args="" -->
340int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#b93371ece607184c04780de0e05d7abc">m</a></td></tr>
341
342<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Memory of the encoder. <br></td></tr>
343<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8c164aac0932007e5eeaa502d5bdb1ca"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::no_states" ref="8c164aac0932007e5eeaa502d5bdb1ca" args="" -->
344int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#8c164aac0932007e5eeaa502d5bdb1ca">no_states</a></td></tr>
345
346<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of states. <br></td></tr>
347<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5b54f1bab039f8480c7ae0013f3f5fe"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::gen_pol" ref="e5b54f1bab039f8480c7ae0013f3f5fe" args="" -->
348ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#e5b54f1bab039f8480c7ae0013f3f5fe">gen_pol</a></td></tr>
349
350<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generator polynomials. <br></td></tr>
351<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d072282520c19e64e8a88e0e79d91b96"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::gen_pol_rev" ref="d072282520c19e64e8a88e0e79d91b96" args="" -->
352ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#d072282520c19e64e8a88e0e79d91b96">gen_pol_rev</a></td></tr>
353
354<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generator polynomials for the reverse code. <br></td></tr>
355<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="04a91848197a2624c5dbdbcd5224166a"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encoder_state" ref="04a91848197a2624c5dbdbcd5224166a" args="" -->
356int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#04a91848197a2624c5dbdbcd5224166a">encoder_state</a></td></tr>
357
358<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The current encoder state. <br></td></tr>
359<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7bfc69c7f70316fe051e2802c9f09ee3"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::start_state" ref="7bfc69c7f70316fe051e2802c9f09ee3" args="" -->
360int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#7bfc69c7f70316fe051e2802c9f09ee3">start_state</a></td></tr>
361
362<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The encoder start state. <br></td></tr>
363<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="57ef97ff464b7f36a284540426a26ce3"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::trunc_length" ref="57ef97ff464b7f36a284540426a26ce3" args="" -->
364int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#57ef97ff464b7f36a284540426a26ce3">trunc_length</a></td></tr>
365
366<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The decoder truncation length. <br></td></tr>
367<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0e92407956851a04cffa5f89f2fd39a5"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::rate" ref="0e92407956851a04cffa5f89f2fd39a5" args="" -->
368double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#0e92407956851a04cffa5f89f2fd39a5">rate</a></td></tr>
369
370<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The rate of the code. <br></td></tr>
371<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e31e1e09af8f51be5eb37ffca507d232"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::xor_int_table" ref="e31e1e09af8f51be5eb37ffca507d232" args="" -->
372bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#e31e1e09af8f51be5eb37ffca507d232">xor_int_table</a></td></tr>
373
374<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Auxilary table used by the codec. <br></td></tr>
375<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7e63597801ab594d590234192eed3da4"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::output_reverse_int" ref="7e63597801ab594d590234192eed3da4" args="" -->
376imat&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#7e63597801ab594d590234192eed3da4">output_reverse_int</a></td></tr>
377
378<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">output in int format for a given state and input <br></td></tr>
379<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="df24ee075bc58e4b277c44cfd146d84b"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::cc_method" ref="df24ee075bc58e4b277c44cfd146d84b" args="" -->
380<a class="el" href="group__fec.html#ge22fe2744a6f00b512ee75e304d72a82">CONVOLUTIONAL_CODE_METHOD</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#df24ee075bc58e4b277c44cfd146d84b">cc_method</a></td></tr>
381
382<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">encoding and decoding method <br></td></tr>
383<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2be7d32bc57f8be15b9e45993d88253b"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::path_memory" ref="2be7d32bc57f8be15b9e45993d88253b" args="" -->
384imat&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#2be7d32bc57f8be15b9e45993d88253b">path_memory</a></td></tr>
385
386<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Path memory (trellis). <br></td></tr>
387<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e840a45790781563ef45047652bf794b"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::visited_state" ref="e840a45790781563ef45047652bf794b" args="" -->
388<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; bool &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#e840a45790781563ef45047652bf794b">visited_state</a></td></tr>
389
390<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Visited states. <br></td></tr>
391<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2a894772cc027542c600f5b86fe17173"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::sum_metric" ref="2a894772cc027542c600f5b86fe17173" args="" -->
392vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#2a894772cc027542c600f5b86fe17173">sum_metric</a></td></tr>
393
394<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Metrics accumulator. <br></td></tr>
395<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89b0d6ba21457e1aab73f53631a5cb7f"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::trunc_ptr" ref="89b0d6ba21457e1aab73f53631a5cb7f" args="" -->
396int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#89b0d6ba21457e1aab73f53631a5cb7f">trunc_ptr</a></td></tr>
397
398<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Truncated path memory pointer. <br></td></tr>
399<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d26ed837b36f7313277a2b1dcc7b0c4c"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::trunc_state" ref="d26ed837b36f7313277a2b1dcc7b0c4c" args="" -->
400int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#d26ed837b36f7313277a2b1dcc7b0c4c">trunc_state</a></td></tr>
401
402<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Truncated memory fill state. <br></td></tr>
403<tr><td colspan="2"><br><h2>Related Functions</h2></td></tr>
404<tr><td colspan="2">(Note that these are not member functions.) <br><br></td></tr>
405<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ca1881cee55d7c3219f46dd40e7cbd31"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::reverse_int" ref="ca1881cee55d7c3219f46dd40e7cbd31" args="(int length, int in)" -->
406int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#ca1881cee55d7c3219f46dd40e7cbd31">reverse_int</a> (int length, int in)</td></tr>
407
408<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reverses the bitrepresentation of in (of size length) and converts to an integer. <br></td></tr>
409<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="33760fc0bdf27b4b5232694796590365"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::weight_int" ref="33760fc0bdf27b4b5232694796590365" args="(int length, int in)" -->
410int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#33760fc0bdf27b4b5232694796590365">weight_int</a> (int length, int in)</td></tr>
411
412<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate the Hamming weight of the binary representation of in of size length. <br></td></tr>
413<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9e332af5e8d1ce1ba795f4e032adace2"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::compare_spectra" ref="9e332af5e8d1ce1ba795f4e032adace2" args="(ivec v1, ivec v2)" -->
414int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#9e332af5e8d1ce1ba795f4e032adace2">compare_spectra</a> (ivec v1, ivec v2)</td></tr>
415
416<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare two distance spectra. Return 1 if v1 is less, 0 if v2 less, and -1 if equal. <br></td></tr>
417<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Convolutional__Code.html#4abebe627013b4dfb5e1025c1f94c769">compare_spectra</a> (ivec v1, ivec v2, vec weight_profile)</td></tr>
418
419<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compare two distance spectra using a weight profile.  <a href="#4abebe627013b4dfb5e1025c1f94c769"></a><br></td></tr>
420</table>
421<hr><a name="_details"></a><h2>Detailed Description</h2>
422Binary Punctured Convolutional Code Class.
423<p>
424The codes are given as feedforward encoders an given in the Proakis form. That is the binary generators (K-tuples) are converted to octal integers. Observe that the constraint length (K) is defined as the number of meomory cells plus one (as in Proakis). The puncture matrix should be of size <em>n</em> * <em>Period</em>, where <em>Period</em> is the puncturing period.<p>
425Encoding is performed with the <code>encode</code> function. By default the <code>encode_tail</code> function is called which automatically add a tail of K-1 zeros and also assume that the encoder starts in the zero state. Observe that <code>decode_tail</code> is used for data encoded with <code>encode_tail</code>, and decode_trunc assumes that the memory truncation length either is the default (5*K) or set using the <code>set_truncation_length</code> function. Encoding and decoding method can be changed by calling the <a class="el" href="classitpp_1_1Punctured__Convolutional__Code.html#086f61a5c99ca542520c28174c45023d" title="Set encoding and decoding method (Trunc, Tail, or Tailbite).">set_method()</a> function.<p>
426Example of use: (rate 1/3 constraint length K=7 ODS code using <a class="el" href="classitpp_1_1BPSK.html" title="BPSK modulator with real symbols.">BPSK</a> over AWGN) <div class="fragment"><pre class="fragment">  BPSK bpsk;
427  <a class="code" href="classitpp_1_1Punctured__Convolutional__Code.html#8f73e4bcd82e98ace9e52003483755e6" title="Constructor.">Punctured_Convolutional_Code</a> code;
428  ivec generator(3);
429  generator(0)=0133;
430  generator(1)=0165;
431  generator(2)=0171;
432  code.set_generator_polynomials(generator, 7);
433
434  <a class="code" href="mat_8h.html#f90acd1af41bf2d1d8a4bb23662fff69" title="bin matrix">bmat</a> <a class="code" href="classitpp_1_1Punctured__Convolutional__Code.html#533bca591da4abe1478bd11cf3aa82eb" title="The puncture matrix (n rows and Period columns).">puncture_matrix</a> = <span class="stringliteral">"1 1;0 1"</span>;
435  code.set_puncture_matrix(puncture_matrix);
436  code.set_truncation_length(30);
437
438  bvec bits=<a class="code" href="group__randgen.html#g5aa06887cf1fd3301b040987924068f0" title="Generates a random bit (equally likely 0s and 1s).">randb</a>(100), encoded_bits, decoded_bits;
439  vec tx_signal, rx_signal;
440
441  code.encode(bits, encoded_bits);
442  tx_signal = bpsk.modulate_bits(encoded_bits);
443  rx_signal = tx_signal + <a class="code" href="group__miscfunc.html#gf559d29ca56ad3396a4284964b01a9b0" title="Square root of the elements.">sqrt</a>(0.5)*<a class="code" href="group__randgen.html#g9ecf5af23567f51abc9af737fdbd872a" title="Generates a random Gaussian (0,1) variable.">randn</a>(tx_signal.size());
444  code.decode(rx_signal, decoded_bits);
445</pre></div> <hr><h2>Member Function Documentation</h2>
446<a class="anchor" name="3cef5b8543adca3a83cdd61b7181957b"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::calculate_spectrum" ref="3cef5b8543adca3a83cdd61b7181957b" args="(Array&lt; ivec &gt; &amp;spectrum, int time, int dmax, int no_terms, int block_length=0)" -->
447<div class="memitem">
448<div class="memproto">
449      <table class="memname">
450        <tr>
451          <td class="memname">void itpp::Punctured_Convolutional_Code::calculate_spectrum           </td>
452          <td>(</td>
453          <td class="paramtype"><a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;&nbsp;</td>
454          <td class="paramname"> <em>spectrum</em>, </td>
455        </tr>
456        <tr>
457          <td class="paramkey"></td>
458          <td></td>
459          <td class="paramtype">int&nbsp;</td>
460          <td class="paramname"> <em>time</em>, </td>
461        </tr>
462        <tr>
463          <td class="paramkey"></td>
464          <td></td>
465          <td class="paramtype">int&nbsp;</td>
466          <td class="paramname"> <em>dmax</em>, </td>
467        </tr>
468        <tr>
469          <td class="paramkey"></td>
470          <td></td>
471          <td class="paramtype">int&nbsp;</td>
472          <td class="paramname"> <em>no_terms</em>, </td>
473        </tr>
474        <tr>
475          <td class="paramkey"></td>
476          <td></td>
477          <td class="paramtype">int&nbsp;</td>
478          <td class="paramname"> <em>block_length</em> = <code>0</code></td><td>&nbsp;</td>
479        </tr>
480        <tr>
481          <td></td>
482          <td>)</td>
483          <td></td><td></td><td></td>
484        </tr>
485      </table>
486</div>
487<div class="memdoc">
488
489<p>
490Calculate spectrum. Suitable when calculating many terms in the spectra. Breadth first search.
491<p>
492Use this function to evaluate the spectum whith a speccific puncturing period, or to calculate the spectrum for block transmission. To calculate spectra for block transmission: <ul>
493<li>
494Use <em>time</em> = 0 if the puncturing is restarted at each block.  </li>
495<li>
496Use <em>block_length</em> = 0 (default value) for infinite blocks.  </li>
497</ul>
498
499<p>References <a class="el" href="convcode_8h-source.html#l00411">itpp::Convolutional_Code::K</a>, <a class="el" href="convcode_8h-source.html#l00413">itpp::Convolutional_Code::m</a>, <a class="el" href="convcode_8h-source.html#l00372">itpp::Convolutional_Code::next_state()</a>, <a class="el" href="punct__convcode_8h-source.html#l00260">Period</a>, <a class="el" href="array_8h-source.html#l00257">itpp::Array&lt; T &gt;::set_size()</a>, <a class="el" href="sigfun_8cpp-source.html#l00297">itpp::spectrum()</a>, and <a class="el" href="punct__convcode_8cpp-source.html#l00038">weight()</a>.</p>
500
501</div>
502</div><p>
503<a class="anchor" name="5b03f1aa26a5521cdcab6298d94926c9"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::calculate_spectrum" ref="5b03f1aa26a5521cdcab6298d94926c9" args="(Array&lt; ivec &gt; &amp;spectrum, int dmax, int no_terms)" -->
504<div class="memitem">
505<div class="memproto">
506      <table class="memname">
507        <tr>
508          <td class="memname">void itpp::Punctured_Convolutional_Code::calculate_spectrum           </td>
509          <td>(</td>
510          <td class="paramtype"><a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;&nbsp;</td>
511          <td class="paramname"> <em>spectrum</em>, </td>
512        </tr>
513        <tr>
514          <td class="paramkey"></td>
515          <td></td>
516          <td class="paramtype">int&nbsp;</td>
517          <td class="paramname"> <em>dmax</em>, </td>
518        </tr>
519        <tr>
520          <td class="paramkey"></td>
521          <td></td>
522          <td class="paramtype">int&nbsp;</td>
523          <td class="paramname"> <em>no_terms</em></td><td>&nbsp;</td>
524        </tr>
525        <tr>
526          <td></td>
527          <td>)</td>
528          <td></td><td></td><td></td>
529        </tr>
530      </table>
531</div>
532<div class="memdoc">
533
534<p>
535Calculate spectrum.
536<p>
537Calculates both the weight spectrum (Ad) and the information weight spectrum (Cd) and returns it as ivec:s in the 0:th and 1:st component of spectrum, respectively. For a punctrued code the spectrum is a sum of the spectras of all starting positions. Suitable for calculating many terms in the spectra (uses an breadth first algorithm). It is assumed that the code is non-catastrophic or else it is a possibility for an eternal loop.<p>
538<ul>
539<li>
540<em>dmax</em> = an upper bound on the free distance  </li>
541<li>
542<em>no_terms</em> = number of terms including the <em>dmax</em> term that should be calculated  </li>
543</ul>
544<p>
545Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.
546<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html#3f442fd4218c746dc046ea996f301cf7">itpp::Convolutional_Code</a>.</p>
547
548<p>References <a class="el" href="punct__convcode_8h-source.html#l00260">Period</a>, <a class="el" href="array_8h-source.html#l00257">itpp::Array&lt; T &gt;::set_size()</a>, and <a class="el" href="sigfun_8cpp-source.html#l00297">itpp::spectrum()</a>.</p>
549
550</div>
551</div><p>
552<a class="anchor" name="7842a78c7a0abb4a7a5695452448c6e6"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode_tail" ref="7842a78c7a0abb4a7a5695452448c6e6" args="(const vec &amp;received_signal)" -->
553<div class="memitem">
554<div class="memproto">
555      <table class="memname">
556        <tr>
557          <td class="memname">bvec itpp::Punctured_Convolutional_Code::decode_tail           </td>
558          <td>(</td>
559          <td class="paramtype">const vec &amp;&nbsp;</td>
560          <td class="paramname"> <em>received_signal</em>          </td>
561          <td>&nbsp;)&nbsp;</td>
562          <td><code> [inline, virtual]</code></td>
563        </tr>
564      </table>
565</div>
566<div class="memdoc">
567
568<p>
569Decode a block of encoded data where encode_tail has been used.
570<p>
571Thus is assumes a decoder start state of zero and that a tail of K-1 zeros has been added. No memory truncation.
572<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html">itpp::Convolutional_Code</a>.</p>
573
574<p>References <a class="el" href="punct__convcode_8h-source.html#l00179">decode_tail()</a>.</p>
575
576<p>Referenced by <a class="el" href="punct__convcode_8h-source.html#l00179">decode_tail()</a>.</p>
577
578</div>
579</div><p>
580<a class="anchor" name="8c706434a618852db7304b6e699c0194"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::decode_tail" ref="8c706434a618852db7304b6e699c0194" args="(const vec &amp;received_signal, bvec &amp;output)" -->
581<div class="memitem">
582<div class="memproto">
583      <table class="memname">
584        <tr>
585          <td class="memname">void itpp::Punctured_Convolutional_Code::decode_tail           </td>
586          <td>(</td>
587          <td class="paramtype">const vec &amp;&nbsp;</td>
588          <td class="paramname"> <em>received_signal</em>, </td>
589        </tr>
590        <tr>
591          <td class="paramkey"></td>
592          <td></td>
593          <td class="paramtype">bvec &amp;&nbsp;</td>
594          <td class="paramname"> <em>output</em></td><td>&nbsp;</td>
595        </tr>
596        <tr>
597          <td></td>
598          <td>)</td>
599          <td></td><td></td><td><code> [virtual]</code></td>
600        </tr>
601      </table>
602</div>
603<div class="memdoc">
604
605<p>
606Decode a block of encoded data where encode_tail has been used.
607<p>
608Thus is assumes a decoder start state of zero and that a tail of K-1 zeros has been added. No memory truncation.
609<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html#9f42d8c8bdb51460ebc7d43deb93bad7">itpp::Convolutional_Code</a>.</p>
610
611<p>References <a class="el" href="itassert_8h-source.html#l00173">it_warning</a>, <a class="el" href="convcode_8h-source.html#l00409">itpp::Convolutional_Code::n</a>, <a class="el" href="punct__convcode_8h-source.html#l00260">Period</a>, <a class="el" href="punct__convcode_8h-source.html#l00264">puncture_matrix</a>, and <a class="el" href="punct__convcode_8h-source.html#l00262">total</a>.</p>
612
613<p>Referenced by <a class="el" href="punct__convcode_8cpp-source.html#l00224">decode()</a>.</p>
614
615</div>
616</div><p>
617<a class="anchor" name="a6884e3f60678177fbf60e22d2447a5b"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_bit" ref="a6884e3f60678177fbf60e22d2447a5b" args="(const bin &amp;input, bvec &amp;output)" -->
618<div class="memitem">
619<div class="memproto">
620      <table class="memname">
621        <tr>
622          <td class="memname">void itpp::Convolutional_Code::encode_bit           </td>
623          <td>(</td>
624          <td class="paramtype">const <a class="el" href="classitpp_1_1bin.html">bin</a> &amp;&nbsp;</td>
625          <td class="paramname"> <em>input</em>, </td>
626        </tr>
627        <tr>
628          <td class="paramkey"></td>
629          <td></td>
630          <td class="paramtype">bvec &amp;&nbsp;</td>
631          <td class="paramname"> <em>output</em></td><td>&nbsp;</td>
632        </tr>
633        <tr>
634          <td></td>
635          <td>)</td>
636          <td></td><td></td><td><code> [inherited]</code></td>
637        </tr>
638      </table>
639</div>
640<div class="memdoc">
641
642<p>
643Encode a binary bit starting from the internal encoder state.
644<p>
645To initialize the encoder state use <a class="el" href="classitpp_1_1Convolutional__Code.html#6316d7d75c01471aa44d533fdaa586c1" title="Set encoder default start state.">set_start_state()</a> and <a class="el" href="classitpp_1_1Convolutional__Code.html#9ef6fc1934531d3c12123ed90c5b4c40" title="Initialise internal encoder state with start state. Has no effect on Tail and Tailbite...">init_encoder()</a> 
646<p>References <a class="el" href="convcode_8h-source.html#l00421">itpp::Convolutional_Code::encoder_state</a>, <a class="el" href="convcode_8h-source.html#l00417">itpp::Convolutional_Code::gen_pol</a>, <a class="el" href="convcode_8h-source.html#l00413">itpp::Convolutional_Code::m</a>, and <a class="el" href="convcode_8h-source.html#l00429">itpp::Convolutional_Code::xor_int_table</a>.</p>
647
648</div>
649</div><p>
650<a class="anchor" name="550a724cf0a14e96dd572063c5d862d6"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_tail" ref="550a724cf0a14e96dd572063c5d862d6" args="(const bvec &amp;input)" -->
651<div class="memitem">
652<div class="memproto">
653      <table class="memname">
654        <tr>
655          <td class="memname">bvec itpp::Punctured_Convolutional_Code::encode_tail           </td>
656          <td>(</td>
657          <td class="paramtype">const bvec &amp;&nbsp;</td>
658          <td class="paramname"> <em>input</em>          </td>
659          <td>&nbsp;)&nbsp;</td>
660          <td><code> [inline]</code></td>
661        </tr>
662      </table>
663</div>
664<div class="memdoc">
665
666<p>
667Encoding that begins and ends in the zero state.
668<p>
669Encode a binary vector of inputs starting from zero state and also adds a tail of K-1 zeros to force the encoder into the zero state. Well suited for packet transmission.
670<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html">itpp::Convolutional_Code</a>.</p>
671
672<p>References <a class="el" href="punct__convcode_8h-source.html#l00143">encode_tail()</a>.</p>
673
674<p>Referenced by <a class="el" href="punct__convcode_8h-source.html#l00143">encode_tail()</a>.</p>
675
676</div>
677</div><p>
678<a class="anchor" name="eda7709de1cff7c6211884f9acfae470"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::encode_tail" ref="eda7709de1cff7c6211884f9acfae470" args="(const bvec &amp;input, bvec &amp;output)" -->
679<div class="memitem">
680<div class="memproto">
681      <table class="memname">
682        <tr>
683          <td class="memname">void itpp::Punctured_Convolutional_Code::encode_tail           </td>
684          <td>(</td>
685          <td class="paramtype">const bvec &amp;&nbsp;</td>
686          <td class="paramname"> <em>input</em>, </td>
687        </tr>
688        <tr>
689          <td class="paramkey"></td>
690          <td></td>
691          <td class="paramtype">bvec &amp;&nbsp;</td>
692          <td class="paramname"> <em>output</em></td><td>&nbsp;</td>
693        </tr>
694        <tr>
695          <td></td>
696          <td>)</td>
697          <td></td><td></td><td></td>
698        </tr>
699      </table>
700</div>
701<div class="memdoc">
702
703<p>
704Encoding that begins and ends in the zero state.
705<p>
706Encode a binary vector of inputs starting from zero state and also adds a tail of K-1 zeros to force the encoder into the zero state. Well suited for packet transmission.
707<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html#47230acfea5aa32cb31e63abca1d222e">itpp::Convolutional_Code</a>.</p>
708
709<p>References <a class="el" href="convcode_8h-source.html#l00409">itpp::Convolutional_Code::n</a>, <a class="el" href="punct__convcode_8h-source.html#l00260">Period</a>, and <a class="el" href="punct__convcode_8h-source.html#l00264">puncture_matrix</a>.</p>
710
711<p>Referenced by <a class="el" href="punct__convcode_8cpp-source.html#l00136">encode()</a>.</p>
712
713</div>
714</div><p>
715<a class="anchor" name="8217a8922992b1fb4faa28d86f21e6d7"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::fast" ref="8217a8922992b1fb4faa28d86f21e6d7" args="(Array&lt; ivec &gt; &amp;spectrum, const int dfree, const int no_terms, const int Cdfree=1000000, const bool test_catastrophic=false)" -->
716<div class="memitem">
717<div class="memproto">
718      <table class="memname">
719        <tr>
720          <td class="memname">int itpp::Convolutional_Code::fast           </td>
721          <td>(</td>
722          <td class="paramtype"><a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;&nbsp;</td>
723          <td class="paramname"> <em>spectrum</em>, </td>
724        </tr>
725        <tr>
726          <td class="paramkey"></td>
727          <td></td>
728          <td class="paramtype">const int&nbsp;</td>
729          <td class="paramname"> <em>dfree</em>, </td>
730        </tr>
731        <tr>
732          <td class="paramkey"></td>
733          <td></td>
734          <td class="paramtype">const int&nbsp;</td>
735          <td class="paramname"> <em>no_terms</em>, </td>
736        </tr>
737        <tr>
738          <td class="paramkey"></td>
739          <td></td>
740          <td class="paramtype">const int&nbsp;</td>
741          <td class="paramname"> <em>Cdfree</em> = <code>1000000</code>, </td>
742        </tr>
743        <tr>
744          <td class="paramkey"></td>
745          <td></td>
746          <td class="paramtype">const bool&nbsp;</td>
747          <td class="paramname"> <em>test_catastrophic</em> = <code>false</code></td><td>&nbsp;</td>
748        </tr>
749        <tr>
750          <td></td>
751          <td>)</td>
752          <td></td><td></td><td><code> [inherited]</code></td>
753        </tr>
754      </table>
755</div>
756<div class="memdoc">
757
758<p>
759Cederwall's fast algorithm.
760<p>
761Calculates both the weight spectrum (Ad) and the information weight spectrum (Cd) and returns it as ivec:s in the 0:th and 1:st component of spectrum, respectively. The FAST algorithm is good for calculating only a few terms in the spectrum. If many terms are desired, use calc_spectrum instead. The algorithm returns -1 if the code tested is worse that the input dfree and Cdfree. It returns 0 if the code MAY be catastrophic (assuming that test_catastrophic is true), and returns 1 if everything went right.<p>
762<ul>
763<li><code>dfree</code> the free distance of the code (or an upper bound) </li>
764<li><code>no_terms</code> including the dfree term that should be calculated </li>
765<li><code>Cdfree</code> is the best value of information weight spectrum found so far</li>
766</ul>
767Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.<p>
768See IT No. 6, pp. 1146-1159, Nov. 1989 for details.
769<p>References <a class="el" href="convcode_8cpp-source.html#l01130">itpp::Convolutional_Code::distance_profile()</a>, <a class="el" href="convcode_8h-source.html#l00413">itpp::Convolutional_Code::m</a>, <a class="el" href="convcode_8h-source.html#l00372">itpp::Convolutional_Code::next_state()</a>, <a class="el" href="matfunc_8h-source.html#l00777">itpp::reverse()</a>, <a class="el" href="array_8h-source.html#l00257">itpp::Array&lt; T &gt;::set_size()</a>, <a class="el" href="sigfun_8cpp-source.html#l00297">itpp::spectrum()</a>, <a class="el" href="convcode_8cpp-source.html#l00042">itpp::Convolutional_Code::weight()</a>, and <a class="el" href="convcode_8cpp-source.html#l00064">itpp::Convolutional_Code::weight_reverse()</a>.</p>
770
771</div>
772</div><p>
773<a class="anchor" name="120a1f328f3d51597b8258901ad285de"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::fast" ref="120a1f328f3d51597b8258901ad285de" args="(Array&lt; ivec &gt; &amp;spectrum, int time, int dfree, int no_terms, int d_best_so_far=0, bool test_catastrophic=false)" -->
774<div class="memitem">
775<div class="memproto">
776      <table class="memname">
777        <tr>
778          <td class="memname">int itpp::Punctured_Convolutional_Code::fast           </td>
779          <td>(</td>
780          <td class="paramtype"><a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt; &amp;&nbsp;</td>
781          <td class="paramname"> <em>spectrum</em>, </td>
782        </tr>
783        <tr>
784          <td class="paramkey"></td>
785          <td></td>
786          <td class="paramtype">int&nbsp;</td>
787          <td class="paramname"> <em>time</em>, </td>
788        </tr>
789        <tr>
790          <td class="paramkey"></td>
791          <td></td>
792          <td class="paramtype">int&nbsp;</td>
793          <td class="paramname"> <em>dfree</em>, </td>
794        </tr>
795        <tr>
796          <td class="paramkey"></td>
797          <td></td>
798          <td class="paramtype">int&nbsp;</td>
799          <td class="paramname"> <em>no_terms</em>, </td>
800        </tr>
801        <tr>
802          <td class="paramkey"></td>
803          <td></td>
804          <td class="paramtype">int&nbsp;</td>
805          <td class="paramname"> <em>d_best_so_far</em> = <code>0</code>, </td>
806        </tr>
807        <tr>
808          <td class="paramkey"></td>
809          <td></td>
810          <td class="paramtype">bool&nbsp;</td>
811          <td class="paramname"> <em>test_catastrophic</em> = <code>false</code></td><td>&nbsp;</td>
812        </tr>
813        <tr>
814          <td></td>
815          <td>)</td>
816          <td></td><td></td><td></td>
817        </tr>
818      </table>
819</div>
820<div class="memdoc">
821
822<p>
823Cederwall's fast algorithm.
824<p>
825<ul>
826<li>
827See IEEE Trans. Information Theory No. 6, pp. 1146-1159, Nov. 1989 for details.  </li>
828<li>
829Calculates both the weight spectrum (Ad) and the information weight spectrum (Cd) and returns it as ivec:s in the 0:th and 1:st component of spectrum, respectively.  </li>
830<li>
831The algorithm returns -1 if the code tested is worse that the input <em>dfree</em> and <em>Cdfree</em></li>
832<li>
833It returns 0 if the code MAY be catastrophic (assuming that <em>test_catastrophic</em> is <code>true</code>), and returns 1 if everything went right.  </li>
834<li>
835<em>dfree</em> = the free distance of the code (or an upper bound).  </li>
836<li>
837<em>no_terms</em> = Number of terms including the <em>dfree</em> term that should be calculated.  </li>
838<li>
839<em>d_best_so_far</em> = the best value of the free distance found so far.  </li>
840<li>
841The FAST algorithm is good for calculating only a few terms in the spectrum. If many terms are desired, use <code>calc_spectrum</code> instead.  </li>
842</ul>
843<p>
844Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.
845<p>References <a class="el" href="punct__convcode_8cpp-source.html#l00516">distance_profile()</a>, <a class="el" href="convcode_8h-source.html#l00411">itpp::Convolutional_Code::K</a>, <a class="el" href="convcode_8h-source.html#l00413">itpp::Convolutional_Code::m</a>, <a class="el" href="convcode_8h-source.html#l00372">itpp::Convolutional_Code::next_state()</a>, <a class="el" href="punct__convcode_8h-source.html#l00260">Period</a>, <a class="el" href="matfunc_8h-source.html#l00777">itpp::reverse()</a>, <a class="el" href="array_8h-source.html#l00257">itpp::Array&lt; T &gt;::set_size()</a>, <a class="el" href="sigfun_8cpp-source.html#l00297">itpp::spectrum()</a>, <a class="el" href="punct__convcode_8cpp-source.html#l00038">weight()</a>, and <a class="el" href="punct__convcode_8cpp-source.html#l00057">weight_reverse()</a>.</p>
846
847</div>
848</div><p>
849<a class="anchor" name="b9fa55cd0b92e4d0db5debcd198184b1"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::inverse_tail" ref="b9fa55cd0b92e4d0db5debcd198184b1" args="(const bvec coded_sequence, bvec &amp;input)" -->
850<div class="memitem">
851<div class="memproto">
852      <table class="memname">
853        <tr>
854          <td class="memname">bool itpp::Punctured_Convolutional_Code::inverse_tail           </td>
855          <td>(</td>
856          <td class="paramtype">const bvec&nbsp;</td>
857          <td class="paramname"> <em>coded_sequence</em>, </td>
858        </tr>
859        <tr>
860          <td class="paramkey"></td>
861          <td></td>
862          <td class="paramtype">bvec &amp;&nbsp;</td>
863          <td class="paramname"> <em>input</em></td><td>&nbsp;</td>
864        </tr>
865        <tr>
866          <td></td>
867          <td>)</td>
868          <td></td><td></td><td></td>
869        </tr>
870      </table>
871</div>
872<div class="memdoc">
873
874<p>
875Calculate the inverse sequence.
876<p>
877Assumes that encode_tail is used in the encoding process. Returns false if there is an error in the coded sequence (not a valid codeword). Do not check that the tail forces the encoder into the zeroth state.
878<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html#635406cac085c188709234c688ce2c68">itpp::Convolutional_Code</a>.</p>
879
880<p>References <a class="el" href="convcode_8h-source.html#l00417">itpp::Convolutional_Code::gen_pol</a>, <a class="el" href="itassert_8h-source.html#l00117">it_error_if</a>, <a class="el" href="convcode_8h-source.html#l00413">itpp::Convolutional_Code::m</a>, <a class="el" href="convcode_8h-source.html#l00409">itpp::Convolutional_Code::n</a>, <a class="el" href="punct__convcode_8h-source.html#l00260">Period</a>, <a class="el" href="punct__convcode_8h-source.html#l00264">puncture_matrix</a>, <a class="el" href="punct__convcode_8h-source.html#l00262">total</a>, and <a class="el" href="convcode_8h-source.html#l00429">itpp::Convolutional_Code::xor_int_table</a>.</p>
881
882</div>
883</div><p>
884<a class="anchor" name="3b8b66d056a2cde7ad92a8b6ce0c19ba"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::set_code" ref="3b8b66d056a2cde7ad92a8b6ce0c19ba" args="(const CONVOLUTIONAL_CODE_TYPE type_of_code, int inverse_rate, int constraint_length)" -->
885<div class="memitem">
886<div class="memproto">
887      <table class="memname">
888        <tr>
889          <td class="memname">void itpp::Punctured_Convolutional_Code::set_code           </td>
890          <td>(</td>
891          <td class="paramtype">const <a class="el" href="group__fec.html#ge9651aa649deec69310af24cd89b8729">CONVOLUTIONAL_CODE_TYPE</a>&nbsp;</td>
892          <td class="paramname"> <em>type_of_code</em>, </td>
893        </tr>
894        <tr>
895          <td class="paramkey"></td>
896          <td></td>
897          <td class="paramtype">int&nbsp;</td>
898          <td class="paramname"> <em>inverse_rate</em>, </td>
899        </tr>
900        <tr>
901          <td class="paramkey"></td>
902          <td></td>
903          <td class="paramtype">int&nbsp;</td>
904          <td class="paramname"> <em>constraint_length</em></td><td>&nbsp;</td>
905        </tr>
906        <tr>
907          <td></td>
908          <td>)</td>
909          <td></td><td></td><td><code> [inline]</code></td>
910        </tr>
911      </table>
912</div>
913<div class="memdoc">
914
915<p>
916Set the code according to built-in tables.
917<p>
918The <em>type_of_code</em> can be either <em>MFD</em> or <em>ODS</em> for maximum free distance codes (according to Proakis) or Optimum Distance Spectrum Codes according to Frenger, Orten and Ottosson.
919<p>Reimplemented from <a class="el" href="classitpp_1_1Convolutional__Code.html#9860c6e22e6f7a58c020534045a432d0">itpp::Convolutional_Code</a>.</p>
920
921</div>
922</div><p>
923<hr><h2>Friends And Related Function Documentation</h2>
924<a class="anchor" name="4abebe627013b4dfb5e1025c1f94c769"></a><!-- doxytag: member="itpp::Punctured_Convolutional_Code::compare_spectra" ref="4abebe627013b4dfb5e1025c1f94c769" args="(ivec v1, ivec v2, vec weight_profile)" -->
925<div class="memitem">
926<div class="memproto">
927      <table class="memname">
928        <tr>
929          <td class="memname">int compare_spectra           </td>
930          <td>(</td>
931          <td class="paramtype">ivec&nbsp;</td>
932          <td class="paramname"> <em>v1</em>, </td>
933        </tr>
934        <tr>
935          <td class="paramkey"></td>
936          <td></td>
937          <td class="paramtype">ivec&nbsp;</td>
938          <td class="paramname"> <em>v2</em>, </td>
939        </tr>
940        <tr>
941          <td class="paramkey"></td>
942          <td></td>
943          <td class="paramtype">vec&nbsp;</td>
944          <td class="paramname"> <em>weight_profile</em></td><td>&nbsp;</td>
945        </tr>
946        <tr>
947          <td></td>
948          <td>)</td>
949          <td></td><td></td><td><code> [related, inherited]</code></td>
950        </tr>
951      </table>
952</div>
953<div class="memdoc">
954
955<p>
956Compare two distance spectra using a weight profile.
957<p>
958Return 1 if v1 is less, 0 if v2 less, and -1 if equal.
959</div>
960</div><p>
961<hr>The documentation for this class was generated from the following files:<ul>
962<li><a class="el" href="punct__convcode_8h-source.html">punct_convcode.h</a><li><a class="el" href="punct__convcode_8cpp.html">punct_convcode.cpp</a></ul>
963</div>
964<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:19 2009 for mixpp by&nbsp;
965<a href="http://www.doxygen.org/index.html">
966<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
967</body>
968</html>
Note: See TracBrowser for help on using the browser.