root/doc/html/classitpp_1_1ND__UPSK.html @ 353

Revision 353, 47.9 kB (checked in by smidl, 16 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::ND_UPSK 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_1ND__UPSK.html">ND_UPSK</a>
68  </div>
69</div>
70<div class="contents">
71<h1>itpp::ND_UPSK Class Reference<br>
72<small>
73[<a class="el" href="group__modulators.html">Digital Modulation</a>]</small>
74</h1><!-- doxytag: class="itpp::ND_UPSK" --><!-- doxytag: inherits="itpp::Modulator_NCD" --><code>#include &lt;<a class="el" href="modulator__nd_8h-source.html">modulator_nd.h</a>&gt;</code>
75<p>
76
77<p>
78<a href="classitpp_1_1ND__UPSK-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
79<tr><td></td></tr>
80<tr><td colspan="2"><br><h2>Public Types</h2></td></tr>
81<tr><td class="memItemLeft" nowrap align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">Soft_Demod_Method</a> { <a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035c743f79c2dbf90c34fd03075b7648058">FULL_ENUM_LOGMAP</a>,
82<a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035d5798fd18f93f399475392b8aee09cba">ZF_LOGMAP</a>
83 }</td></tr>
84
85<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulation method.  <a href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">More...</a><br></td></tr>
86<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
87<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d95ce3ccb3e6c8dc40a77cf5bc7e81ac"></a><!-- doxytag: member="itpp::ND_UPSK::ND_UPSK" ref="d95ce3ccb3e6c8dc40a77cf5bc7e81ac" args="(int nt=1, int Mary=4)" -->
88&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1ND__UPSK.html#d95ce3ccb3e6c8dc40a77cf5bc7e81ac">ND_UPSK</a> (int <a class="el" href="classitpp_1_1Modulator__ND.html#18f0f81646514aa7210415f83fc62c1b">nt</a>=1, int Mary=4)</td></tr>
89
90<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <br></td></tr>
91<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6cb9cf0924ee337173ec95b9187ce302"></a><!-- doxytag: member="itpp::ND_UPSK::~ND_UPSK" ref="6cb9cf0924ee337173ec95b9187ce302" args="()" -->
92&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1ND__UPSK.html#6cb9cf0924ee337173ec95b9187ce302">~ND_UPSK</a> ()</td></tr>
93
94<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
95<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="00e4f0aa17f66d3487bcf04b4dc1816c"></a><!-- doxytag: member="itpp::ND_UPSK::set_M" ref="00e4f0aa17f66d3487bcf04b4dc1816c" args="(int nt=1, int Mary=4)" -->
96void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1ND__UPSK.html#00e4f0aa17f66d3487bcf04b4dc1816c">set_M</a> (int <a class="el" href="classitpp_1_1Modulator__ND.html#18f0f81646514aa7210415f83fc62c1b">nt</a>=1, int Mary=4)</td></tr>
97
98<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set component modulators to M-QAM with Gray mapping. <br></td></tr>
99<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="378f0c9a32f8419cfce1b55d052a6146"></a><!-- doxytag: member="itpp::ND_UPSK::set_M" ref="378f0c9a32f8419cfce1b55d052a6146" args="(int nt=1, ivec Mary=&quot;4&quot;)" -->
100void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1ND__UPSK.html#378f0c9a32f8419cfce1b55d052a6146">set_M</a> (int <a class="el" href="classitpp_1_1Modulator__ND.html#18f0f81646514aa7210415f83fc62c1b">nt</a>=1, ivec Mary=&quot;4&quot;)</td></tr>
101
102<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set component modulators to M-QAM with Gray mapping, different M per component. <br></td></tr>
103<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="41b6b6b9a21039a88a1ba07f358cd43a"></a><!-- doxytag: member="itpp::ND_UPSK::get_symbols" ref="41b6b6b9a21039a88a1ba07f358cd43a" args="() const " -->
104<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#41b6b6b9a21039a88a1ba07f358cd43a">get_symbols</a> () const </td></tr>
105
106<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get modulation symbols per dimension. <br></td></tr>
107<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6e0475c4f4dc96d08f5f4707a9dfaf17"></a><!-- doxytag: member="itpp::ND_UPSK::modulate_bits" ref="6e0475c4f4dc96d08f5f4707a9dfaf17" args="(const bvec &amp;bits, cvec &amp;symbols) const " -->
108void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#6e0475c4f4dc96d08f5f4707a9dfaf17">modulate_bits</a> (const bvec &amp;bits, cvec &amp;<a class="el" href="classitpp_1_1Modulator__NCD.html#e6948b64b0a10e47fd0a864ead0516b7">symbols</a>) const </td></tr>
109
110<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modulate <code>bits</code> into <code>symbols</code>. <br></td></tr>
111<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1bee64f0ca29bf8ef1dea72a083ff4ad"></a><!-- doxytag: member="itpp::ND_UPSK::modulate_bits" ref="1bee64f0ca29bf8ef1dea72a083ff4ad" args="(const bvec &amp;bits) const " -->
112cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#1bee64f0ca29bf8ef1dea72a083ff4ad">modulate_bits</a> (const bvec &amp;bits) const </td></tr>
113
114<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modulation of bits. <br></td></tr>
115<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#a25a04d3c20e24c033a1dd152e674f7c">demodulate_soft_bits</a> (const cvec &amp;y, const cmat &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, QLLRvec &amp;LLR_aposteriori, <a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">Soft_Demod_Method</a> method)</td></tr>
116
117<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulation wrapper function for various methods.  <a href="#a25a04d3c20e24c033a1dd152e674f7c"></a><br></td></tr>
118<tr><td class="memItemLeft" nowrap align="right" valign="top">QLLRvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#a45b72fcdc70134a46710d7a5a381976">demodulate_soft_bits</a> (const cvec &amp;y, const cmat &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, <a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">Soft_Demod_Method</a> method)</td></tr>
119
120<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulation wrapper function for various methods.  <a href="#a45b72fcdc70134a46710d7a5a381976"></a><br></td></tr>
121<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#ca10f18dbcf7542db0c0d8078f7834ae">demodulate_soft_bits</a> (const cvec &amp;y, const cmat &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, QLLRvec &amp;LLR_aposteriori)</td></tr>
122
123<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation points.  <a href="#ca10f18dbcf7542db0c0d8078f7834ae"></a><br></td></tr>
124<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#544faf2c9477cf7b2fa2f69efc7b3abe">demodulate_soft_bits</a> (const cvec &amp;y, const cvec &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, QLLRvec &amp;LLR_aposteriori)</td></tr>
125
126<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft MAP demodulation for parallelchannels without crosstalk.  <a href="#544faf2c9477cf7b2fa2f69efc7b3abe"></a><br></td></tr>
127<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e5a2e50b1bf055d6db9f56bd4fe83105"></a><!-- doxytag: member="itpp::ND_UPSK::set_llrcalc" ref="e5a2e50b1bf055d6db9f56bd4fe83105" args="(LLR_calc_unit llrcalc_in)" -->
128void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#e5a2e50b1bf055d6db9f56bd4fe83105">set_llrcalc</a> (<a class="el" href="classitpp_1_1LLR__calc__unit.html">LLR_calc_unit</a> llrcalc_in)</td></tr>
129
130<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set LLR calculation unit. <br></td></tr>
131<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b68aa9155f305d9fb4e8d3cab45d5c9d"></a><!-- doxytag: member="itpp::ND_UPSK::get_llrcalc" ref="b68aa9155f305d9fb4e8d3cab45d5c9d" args="() const " -->
132<a class="el" href="classitpp_1_1LLR__calc__unit.html">LLR_calc_unit</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#b68aa9155f305d9fb4e8d3cab45d5c9d">get_llrcalc</a> () const </td></tr>
133
134<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get LLR calculation unit. <br></td></tr>
135<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="64691da50e1a9f604c41bdda141d477a"></a><!-- doxytag: member="itpp::ND_UPSK::get_dim" ref="64691da50e1a9f604c41bdda141d477a" args="() const " -->
136int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#64691da50e1a9f604c41bdda141d477a">get_dim</a> () const </td></tr>
137
138<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get number of dimensions. <br></td></tr>
139<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="aa89b07529c5c5bbe75d4c6b45f9264c"></a><!-- doxytag: member="itpp::ND_UPSK::get_k" ref="aa89b07529c5c5bbe75d4c6b45f9264c" args="() const " -->
140ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#aa89b07529c5c5bbe75d4c6b45f9264c">get_k</a> () const </td></tr>
141
142<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get number of bits per modulation symbol per dimension. <br></td></tr>
143<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9f88563e5de7dd446f0c61c86976c76"></a><!-- doxytag: member="itpp::ND_UPSK::get_M" ref="a9f88563e5de7dd446f0c61c86976c76" args="() const " -->
144ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#a9f88563e5de7dd446f0c61c86976c76">get_M</a> () const </td></tr>
145
146<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get number of modulation symbols per dimension. <br></td></tr>
147<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
148<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#27e760213e8c30b93fc338b4a6e3a864">update_norm</a> (double &amp;norm, int <a class="el" href="classitpp_1_1Modulator__ND.html#5545e8651244ffca103252926fb18a1c">k</a>, int sold, int snew, const cvec &amp;ytH, const cmat &amp;HtH, const ivec &amp;s)</td></tr>
149
150<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update residual norm (for internal use).  <a href="#27e760213e8c30b93fc338b4a6e3a864"></a><br></td></tr>
151<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a7eaacc702e0564b3388b9fb9413d301"></a><!-- doxytag: member="itpp::ND_UPSK::probabilities" ref="a7eaacc702e0564b3388b9fb9413d301" args="(QLLR l)" -->
152QLLRvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#a7eaacc702e0564b3388b9fb9413d301">probabilities</a> (QLLR l)</td></tr>
153
154<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convert LLR to log-probabilities. <br></td></tr>
155<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6278bfead2080abfd50998067336eb12"></a><!-- doxytag: member="itpp::ND_UPSK::probabilities" ref="6278bfead2080abfd50998067336eb12" args="(const QLLRvec &amp;l)" -->
156<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; QLLRvec &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#6278bfead2080abfd50998067336eb12">probabilities</a> (const QLLRvec &amp;l)</td></tr>
157
158<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Convert LLR to log-probabilities, vector version. <br></td></tr>
159<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#48975e0d26dac075e1f448bdca15ca87">update_LLR</a> (const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; QLLRvec &gt; &amp;logP_apriori, const ivec &amp;s, QLLR scaled_norm, QLLRvec &amp;num, QLLRvec &amp;denom)</td></tr>
160
161<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update LLR (for internal use).  <a href="#48975e0d26dac075e1f448bdca15ca87"></a><br></td></tr>
162<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#6bb417318b8105a78db7ad2c618283ce">update_LLR</a> (const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; QLLRvec &gt; &amp;logP_apriori, int s, QLLR scaled_norm, int j, QLLRvec &amp;num, QLLRvec &amp;denom)</td></tr>
163
164<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Update LLR, for scalar channel (for internal use).  <a href="#6bb417318b8105a78db7ad2c618283ce"></a><br></td></tr>
165<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
166<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e6948b64b0a10e47fd0a864ead0516b7"></a><!-- doxytag: member="itpp::ND_UPSK::symbols" ref="e6948b64b0a10e47fd0a864ead0516b7" args="" -->
167<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#e6948b64b0a10e47fd0a864ead0516b7">symbols</a></td></tr>
168
169<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Vectors of modulation symbols (along each dimension). <br></td></tr>
170<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="18f0f81646514aa7210415f83fc62c1b"></a><!-- doxytag: member="itpp::ND_UPSK::nt" ref="18f0f81646514aa7210415f83fc62c1b" args="" -->
171int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#18f0f81646514aa7210415f83fc62c1b">nt</a></td></tr>
172
173<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of dimensions. <br></td></tr>
174<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8690246ff99fd198a5e7d179954ac5a9"></a><!-- doxytag: member="itpp::ND_UPSK::llrcalc" ref="8690246ff99fd198a5e7d179954ac5a9" args="" -->
175<a class="el" href="classitpp_1_1LLR__calc__unit.html">LLR_calc_unit</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#8690246ff99fd198a5e7d179954ac5a9">llrcalc</a></td></tr>
176
177<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LLR calculation unit. <br></td></tr>
178<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5545e8651244ffca103252926fb18a1c"></a><!-- doxytag: member="itpp::ND_UPSK::k" ref="5545e8651244ffca103252926fb18a1c" args="" -->
179ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#5545e8651244ffca103252926fb18a1c">k</a></td></tr>
180
181<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of bits per modulation symbol. <br></td></tr>
182<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="45916df32ce60b4c286367501482b441"></a><!-- doxytag: member="itpp::ND_UPSK::M" ref="45916df32ce60b4c286367501482b441" args="" -->
183ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#45916df32ce60b4c286367501482b441">M</a></td></tr>
184
185<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of modulation symbols along each dimension. <br></td></tr>
186<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cf19a4c13454739dfa68d0b9f6a85211"></a><!-- doxytag: member="itpp::ND_UPSK::bitmap" ref="cf19a4c13454739dfa68d0b9f6a85211" args="" -->
187<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; <a class="el" href="mat_8h.html#f90acd1af41bf2d1d8a4bb23662fff69">bmat</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#cf19a4c13454739dfa68d0b9f6a85211">bitmap</a></td></tr>
188
189<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Bit mapping table (one table per dimension). <br></td></tr>
190<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="123a047e221467e2f63b4e353963b1a7"></a><!-- doxytag: member="itpp::ND_UPSK::bits2symbols" ref="123a047e221467e2f63b4e353963b1a7" args="" -->
191<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; ivec &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__ND.html#123a047e221467e2f63b4e353963b1a7">bits2symbols</a></td></tr>
192
193<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Bit pattern in decimal form ordered and the corresponding symbols (one pattern per dimension). <br></td></tr>
194<tr><td colspan="2"><br><h2>Friends</h2></td></tr>
195<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5934d627a296bb0e22e09c3d9051553b"></a><!-- doxytag: member="itpp::ND_UPSK::operator&lt;&lt;" ref="5934d627a296bb0e22e09c3d9051553b" args="(std::ostream &amp;os, const Modulator_NCD &amp;m)" -->
196std::ostream &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator__NCD.html#5934d627a296bb0e22e09c3d9051553b">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classitpp_1_1Modulator__NCD.html">Modulator_NCD</a> &amp;m)</td></tr>
197
198<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print some properties of the MIMO modulator (mainly to aid debugging). <br></td></tr>
199</table>
200<hr><a name="_details"></a><h2>Detailed Description</h2>
201Complex MIMO channel with uniform <a class="el" href="classitpp_1_1PSK.html" title="M-ary PSK modulator.">PSK</a> per dimension <hr><h2>Member Enumeration Documentation</h2>
202<a class="anchor" name="6e3b4c745f904cdb34301aeb4cc03035"></a><!-- doxytag: member="itpp::ND_UPSK::Soft_Demod_Method" ref="6e3b4c745f904cdb34301aeb4cc03035" args="" -->
203<div class="memitem">
204<div class="memproto">
205      <table class="memname">
206        <tr>
207          <td class="memname">enum <a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">itpp::Modulator_ND::Soft_Demod_Method</a><code> [inherited]</code>          </td>
208        </tr>
209      </table>
210</div>
211<div class="memdoc">
212
213<p>
214Soft demodulation method.
215<p>
216<dl compact><dt><b>Enumerator: </b></dt><dd>
217<table border="0" cellspacing="2" cellpadding="0">
218<tr><td valign="top"><em><a class="anchor" name="6e3b4c745f904cdb34301aeb4cc03035c743f79c2dbf90c34fd03075b7648058"></a><!-- doxytag: member="FULL_ENUM_LOGMAP" ref="6e3b4c745f904cdb34301aeb4cc03035c743f79c2dbf90c34fd03075b7648058" args="" -->FULL_ENUM_LOGMAP</em>&nbsp;</td><td>
219Log-MAP demodulation by "brute-force" enumeration of all points. </td></tr>
220<tr><td valign="top"><em><a class="anchor" name="6e3b4c745f904cdb34301aeb4cc03035d5798fd18f93f399475392b8aee09cba"></a><!-- doxytag: member="ZF_LOGMAP" ref="6e3b4c745f904cdb34301aeb4cc03035d5798fd18f93f399475392b8aee09cba" args="" -->ZF_LOGMAP</em>&nbsp;</td><td>
221Zero-Forcing Log-MAP approximated demodulation. </td></tr>
222</table>
223</dl>
224
225</div>
226</div><p>
227<hr><h2>Member Function Documentation</h2>
228<a class="anchor" name="544faf2c9477cf7b2fa2f69efc7b3abe"></a><!-- doxytag: member="itpp::ND_UPSK::demodulate_soft_bits" ref="544faf2c9477cf7b2fa2f69efc7b3abe" args="(const cvec &amp;y, const cvec &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, QLLRvec &amp;LLR_aposteriori)" -->
229<div class="memitem">
230<div class="memproto">
231      <table class="memname">
232        <tr>
233          <td class="memname">void itpp::Modulator_NCD::demodulate_soft_bits           </td>
234          <td>(</td>
235          <td class="paramtype">const cvec &amp;&nbsp;</td>
236          <td class="paramname"> <em>y</em>, </td>
237        </tr>
238        <tr>
239          <td class="paramkey"></td>
240          <td></td>
241          <td class="paramtype">const cvec &amp;&nbsp;</td>
242          <td class="paramname"> <em>H</em>, </td>
243        </tr>
244        <tr>
245          <td class="paramkey"></td>
246          <td></td>
247          <td class="paramtype">double&nbsp;</td>
248          <td class="paramname"> <em>sigma2</em>, </td>
249        </tr>
250        <tr>
251          <td class="paramkey"></td>
252          <td></td>
253          <td class="paramtype">const QLLRvec &amp;&nbsp;</td>
254          <td class="paramname"> <em>LLR_apriori</em>, </td>
255        </tr>
256        <tr>
257          <td class="paramkey"></td>
258          <td></td>
259          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
260          <td class="paramname"> <em>LLR_aposteriori</em></td><td>&nbsp;</td>
261        </tr>
262        <tr>
263          <td></td>
264          <td>)</td>
265          <td></td><td></td><td><code> [inherited]</code></td>
266        </tr>
267      </table>
268</div>
269<div class="memdoc">
270
271<p>
272Soft MAP demodulation for parallelchannels without crosstalk.
273<p>
274This function is a much faster equivalent to <code>demodulate_soft_bits</code> with <img class="formulaInl" alt="$H = \mbox{diag}(h)$" src="form_299.png">. Its complexity is linear in the number of subchannels.
275<p>References <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="modulator__nd_8h-source.html#l00096">itpp::Modulator_ND::k</a>, <a class="el" href="matfunc_8h-source.html#l00051">itpp::length()</a>, <a class="el" href="modulator__nd_8h-source.html#l00094">itpp::Modulator_ND::llrcalc</a>, <a class="el" href="modulator__nd_8h-source.html#l00098">itpp::Modulator_ND::M</a>, <a class="el" href="modulator__nd_8h-source.html#l00092">itpp::Modulator_ND::nt</a>, <a class="el" href="group__specmat.html#g7c2c02190b4aa222cc692641cc3a73c7">itpp::ones_i()</a>, <a class="el" href="modulator__nd_8cpp-source.html#l00043">itpp::Modulator_ND::probabilities()</a>, <a class="el" href="elem__math_8h-source.html#l00056">itpp::sqr()</a>, <a class="el" href="matfunc_8h-source.html#l00077">itpp::sum()</a>, <a class="el" href="modulator__nd_8h-source.html#l00448">itpp::Modulator_NCD::symbols</a>, <a class="el" href="llr_8h-source.html#l00235">itpp::LLR_calc_unit::to_qllr()</a>, and <a class="el" href="modulator__nd_8cpp-source.html#l00093">itpp::Modulator_ND::update_LLR()</a>.</p>
276
277</div>
278</div><p>
279<a class="anchor" name="ca10f18dbcf7542db0c0d8078f7834ae"></a><!-- doxytag: member="itpp::ND_UPSK::demodulate_soft_bits" ref="ca10f18dbcf7542db0c0d8078f7834ae" args="(const cvec &amp;y, const cmat &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, QLLRvec &amp;LLR_aposteriori)" -->
280<div class="memitem">
281<div class="memproto">
282      <table class="memname">
283        <tr>
284          <td class="memname">void itpp::Modulator_NCD::demodulate_soft_bits           </td>
285          <td>(</td>
286          <td class="paramtype">const cvec &amp;&nbsp;</td>
287          <td class="paramname"> <em>y</em>, </td>
288        </tr>
289        <tr>
290          <td class="paramkey"></td>
291          <td></td>
292          <td class="paramtype">const cmat &amp;&nbsp;</td>
293          <td class="paramname"> <em>H</em>, </td>
294        </tr>
295        <tr>
296          <td class="paramkey"></td>
297          <td></td>
298          <td class="paramtype">double&nbsp;</td>
299          <td class="paramname"> <em>sigma2</em>, </td>
300        </tr>
301        <tr>
302          <td class="paramkey"></td>
303          <td></td>
304          <td class="paramtype">const QLLRvec &amp;&nbsp;</td>
305          <td class="paramname"> <em>LLR_apriori</em>, </td>
306        </tr>
307        <tr>
308          <td class="paramkey"></td>
309          <td></td>
310          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
311          <td class="paramname"> <em>LLR_aposteriori</em></td><td>&nbsp;</td>
312        </tr>
313        <tr>
314          <td></td>
315          <td>)</td>
316          <td></td><td></td><td><code> [inherited]</code></td>
317        </tr>
318      </table>
319</div>
320<div class="memdoc">
321
322<p>
323Soft MAP demodulation for multidimensional channel, by "brute-force" enumeration of all constellation points.
324<p>
325This function computes the LLR values <p class="formulaDsp">
326<img class="formulaDsp" alt="\[ LLR(k) = \log \left( \frac {\sum_{s:b_k=0} \exp \left( -\frac{|y - Hs|^2}{\sigma^2} \right) P(s)} {\sum_{s:b_k=1} \exp \left( -\frac{|y - Hs|^2}{\sigma^2} \right) P(s)} \right) \]" src="form_301.png">
327<p>
328<p>
329without approximations. It is assumed that H, y and s are complex-valued.<p>
330<dl compact><dt><b>Parameters:</b></dt><dd>
331  <table border="0" cellspacing="2" cellpadding="0">
332    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>y</em>&nbsp;</td><td>Received vector </td></tr>
333    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>H</em>&nbsp;</td><td>Channel matrix </td></tr>
334    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>sigma2</em>&nbsp;</td><td>Noise variance per complex dimension, i.e. the sum of real and imaginary parts (typically <img class="formulaInl" alt="$N_0$" src="form_233.png">) </td></tr>
335    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>LLR_apriori</em>&nbsp;</td><td>Vector of a priori LLR values per bit </td></tr>
336    <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>LLR_aposteriori</em>&nbsp;</td><td>Vector of a posteriori LLR values</td></tr>
337  </table>
338</dl>
339The function performs an exhaustive search over all possible points <code>s</code> in the n-dimensional constellation. This is only feasible for relatively small constellations. The Jacobian logarithm is used to compute the sum-exp expression.
340<p>References <a class="el" href="fix__functions_8cpp-source.html#l00098">itpp::conj()</a>, <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="modulator__nd_8h-source.html#l00096">itpp::Modulator_ND::k</a>, <a class="el" href="matfunc_8h-source.html#l00051">itpp::length()</a>, <a class="el" href="modulator__nd_8h-source.html#l00094">itpp::Modulator_ND::llrcalc</a>, <a class="el" href="modulator__nd_8h-source.html#l00098">itpp::Modulator_ND::M</a>, <a class="el" href="misc__stat_8h-source.html#l00193">itpp::norm()</a>, <a class="el" href="modulator__nd_8h-source.html#l00092">itpp::Modulator_ND::nt</a>, <a class="el" href="group__specmat.html#g7c2c02190b4aa222cc692641cc3a73c7">itpp::ones_i()</a>, <a class="el" href="modulator__nd_8cpp-source.html#l00043">itpp::Modulator_ND::probabilities()</a>, <a class="el" href="elem__math_8h-source.html#l00056">itpp::sqr()</a>, <a class="el" href="matfunc_8h-source.html#l00077">itpp::sum()</a>, <a class="el" href="modulator__nd_8h-source.html#l00448">itpp::Modulator_NCD::symbols</a>, <a class="el" href="llr_8h-source.html#l00235">itpp::LLR_calc_unit::to_qllr()</a>, <a class="el" href="modulator__nd_8cpp-source.html#l00093">itpp::Modulator_ND::update_LLR()</a>, and <a class="el" href="modulator__nd_8cpp-source.html#l00529">itpp::Modulator_NCD::update_norm()</a>.</p>
341
342</div>
343</div><p>
344<a class="anchor" name="a45b72fcdc70134a46710d7a5a381976"></a><!-- doxytag: member="itpp::ND_UPSK::demodulate_soft_bits" ref="a45b72fcdc70134a46710d7a5a381976" args="(const cvec &amp;y, const cmat &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, Soft_Demod_Method method)" -->
345<div class="memitem">
346<div class="memproto">
347      <table class="memname">
348        <tr>
349          <td class="memname">QLLRvec itpp::Modulator_NCD::demodulate_soft_bits           </td>
350          <td>(</td>
351          <td class="paramtype">const cvec &amp;&nbsp;</td>
352          <td class="paramname"> <em>y</em>, </td>
353        </tr>
354        <tr>
355          <td class="paramkey"></td>
356          <td></td>
357          <td class="paramtype">const cmat &amp;&nbsp;</td>
358          <td class="paramname"> <em>H</em>, </td>
359        </tr>
360        <tr>
361          <td class="paramkey"></td>
362          <td></td>
363          <td class="paramtype">double&nbsp;</td>
364          <td class="paramname"> <em>sigma2</em>, </td>
365        </tr>
366        <tr>
367          <td class="paramkey"></td>
368          <td></td>
369          <td class="paramtype">const QLLRvec &amp;&nbsp;</td>
370          <td class="paramname"> <em>LLR_apriori</em>, </td>
371        </tr>
372        <tr>
373          <td class="paramkey"></td>
374          <td></td>
375          <td class="paramtype"><a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">Soft_Demod_Method</a>&nbsp;</td>
376          <td class="paramname"> <em>method</em></td><td>&nbsp;</td>
377        </tr>
378        <tr>
379          <td></td>
380          <td>)</td>
381          <td></td><td></td><td><code> [inherited]</code></td>
382        </tr>
383      </table>
384</div>
385<div class="memdoc">
386
387<p>
388Soft demodulation wrapper function for various methods.
389<p>
390Currently the following two demodulation methods are supported:<ul>
391<li>FULL_ENUM_LOGMAP - exact demodulation, which use "brute-force" enumeration of all constellation points</li><li>ZF_LOGMAP - approximated methods with Zero-Forcing preprocessing, which sometimes tends to perform poorly, especially for poorly conditioned H</li></ul>
392<p>
393<dl compact><dt><b>Parameters:</b></dt><dd>
394  <table border="0" cellspacing="2" cellpadding="0">
395    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>y</em>&nbsp;</td><td>Received vector </td></tr>
396    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>H</em>&nbsp;</td><td>Channel matrix </td></tr>
397    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>sigma2</em>&nbsp;</td><td>Noise variance per complex dimension, i.e. the sum of real and imaginary parts (typically <img class="formulaInl" alt="$N_0$" src="form_233.png">) </td></tr>
398    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>LLR_apriori</em>&nbsp;</td><td>Vector of a priori LLR values per bit </td></tr>
399    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>method</em>&nbsp;</td><td>Soft demodulation method </td></tr>
400  </table>
401</dl>
402<dl class="return" compact><dt><b>Returns:</b></dt><dd>Vector of a posteriori LLR values </dd></dl>
403
404<p>References <a class="el" href="modulator__nd_8cpp-source.html#l00370">itpp::Modulator_NCD::demodulate_soft_bits()</a>.</p>
405
406</div>
407</div><p>
408<a class="anchor" name="a25a04d3c20e24c033a1dd152e674f7c"></a><!-- doxytag: member="itpp::ND_UPSK::demodulate_soft_bits" ref="a25a04d3c20e24c033a1dd152e674f7c" args="(const cvec &amp;y, const cmat &amp;H, double sigma2, const QLLRvec &amp;LLR_apriori, QLLRvec &amp;LLR_aposteriori, Soft_Demod_Method method)" -->
409<div class="memitem">
410<div class="memproto">
411      <table class="memname">
412        <tr>
413          <td class="memname">void itpp::Modulator_NCD::demodulate_soft_bits           </td>
414          <td>(</td>
415          <td class="paramtype">const cvec &amp;&nbsp;</td>
416          <td class="paramname"> <em>y</em>, </td>
417        </tr>
418        <tr>
419          <td class="paramkey"></td>
420          <td></td>
421          <td class="paramtype">const cmat &amp;&nbsp;</td>
422          <td class="paramname"> <em>H</em>, </td>
423        </tr>
424        <tr>
425          <td class="paramkey"></td>
426          <td></td>
427          <td class="paramtype">double&nbsp;</td>
428          <td class="paramname"> <em>sigma2</em>, </td>
429        </tr>
430        <tr>
431          <td class="paramkey"></td>
432          <td></td>
433          <td class="paramtype">const QLLRvec &amp;&nbsp;</td>
434          <td class="paramname"> <em>LLR_apriori</em>, </td>
435        </tr>
436        <tr>
437          <td class="paramkey"></td>
438          <td></td>
439          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
440          <td class="paramname"> <em>LLR_aposteriori</em>, </td>
441        </tr>
442        <tr>
443          <td class="paramkey"></td>
444          <td></td>
445          <td class="paramtype"><a class="el" href="classitpp_1_1Modulator__ND.html#6e3b4c745f904cdb34301aeb4cc03035">Soft_Demod_Method</a>&nbsp;</td>
446          <td class="paramname"> <em>method</em></td><td>&nbsp;</td>
447        </tr>
448        <tr>
449          <td></td>
450          <td>)</td>
451          <td></td><td></td><td><code> [inherited]</code></td>
452        </tr>
453      </table>
454</div>
455<div class="memdoc">
456
457<p>
458Soft demodulation wrapper function for various methods.
459<p>
460Soft demodulation wrapper function for various methods Currently the following two demodulation methods are supported:<ul>
461<li>FULL_ENUM_LOGMAP - exact demodulation, which use "brute-force" enumeration of all constellation points</li><li>ZF_LOGMAP - approximated methods with Zero-Forcing preprocessing, which sometimes tends to perform poorly, especially for poorly conditioned H</li></ul>
462<p>
463<dl compact><dt><b>Parameters:</b></dt><dd>
464  <table border="0" cellspacing="2" cellpadding="0">
465    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>y</em>&nbsp;</td><td>Received vector </td></tr>
466    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>H</em>&nbsp;</td><td>Channel matrix </td></tr>
467    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>sigma2</em>&nbsp;</td><td>Noise variance per complex dimension, i.e. the sum of real and imaginary parts (typically <img class="formulaInl" alt="$N_0$" src="form_233.png">) </td></tr>
468    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>LLR_apriori</em>&nbsp;</td><td>Vector of a priori LLR values per bit </td></tr>
469    <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>LLR_aposteriori</em>&nbsp;</td><td>Vector of a posteriori LLR values </td></tr>
470    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>method</em>&nbsp;</td><td>Soft demodulation method </td></tr>
471  </table>
472</dl>
473
474<p>References <a class="el" href="modulator__nd_8h-source.html#l00064">itpp::Modulator_ND::FULL_ENUM_LOGMAP</a>, <a class="el" href="inv_8cpp-source.html#l00109">itpp::inv()</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="modulator__nd_8h-source.html#l00096">itpp::Modulator_ND::k</a>, <a class="el" href="group__specmat.html#g593a539551f14bd6241701910a106b16">itpp::ones_c()</a>, <a class="el" href="fix__functions_8cpp-source.html#l00084">itpp::real()</a>, <a class="el" href="elem__math_8h-source.html#l00126">itpp::sqrt()</a>, <a class="el" href="matfunc_8h-source.html#l00077">itpp::sum()</a>, <a class="el" href="group__specmat.html#g9df9aa3553b6a5c07924954b85466cec">itpp::zeros_i()</a>, and <a class="el" href="modulator__nd_8h-source.html#l00066">itpp::Modulator_ND::ZF_LOGMAP</a>.</p>
475
476<p>Referenced by <a class="el" href="modulator__nd_8cpp-source.html#l00402">itpp::Modulator_NCD::demodulate_soft_bits()</a>.</p>
477
478</div>
479</div><p>
480<a class="anchor" name="6bb417318b8105a78db7ad2c618283ce"></a><!-- doxytag: member="itpp::ND_UPSK::update_LLR" ref="6bb417318b8105a78db7ad2c618283ce" args="(const Array&lt; QLLRvec &gt; &amp;logP_apriori, int s, QLLR scaled_norm, int j, QLLRvec &amp;num, QLLRvec &amp;denom)" -->
481<div class="memitem">
482<div class="memproto">
483      <table class="memname">
484        <tr>
485          <td class="memname">void itpp::Modulator_ND::update_LLR           </td>
486          <td>(</td>
487          <td class="paramtype">const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; QLLRvec &gt; &amp;&nbsp;</td>
488          <td class="paramname"> <em>logP_apriori</em>, </td>
489        </tr>
490        <tr>
491          <td class="paramkey"></td>
492          <td></td>
493          <td class="paramtype">int&nbsp;</td>
494          <td class="paramname"> <em>s</em>, </td>
495        </tr>
496        <tr>
497          <td class="paramkey"></td>
498          <td></td>
499          <td class="paramtype">QLLR&nbsp;</td>
500          <td class="paramname"> <em>scaled_norm</em>, </td>
501        </tr>
502        <tr>
503          <td class="paramkey"></td>
504          <td></td>
505          <td class="paramtype">int&nbsp;</td>
506          <td class="paramname"> <em>j</em>, </td>
507        </tr>
508        <tr>
509          <td class="paramkey"></td>
510          <td></td>
511          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
512          <td class="paramname"> <em>num</em>, </td>
513        </tr>
514        <tr>
515          <td class="paramkey"></td>
516          <td></td>
517          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
518          <td class="paramname"> <em>denom</em></td><td>&nbsp;</td>
519        </tr>
520        <tr>
521          <td></td>
522          <td>)</td>
523          <td></td><td></td><td><code> [protected, inherited]</code></td>
524        </tr>
525      </table>
526</div>
527<div class="memdoc">
528
529<p>
530Update LLR, for scalar channel (for internal use).
531<p>
532This function updates the numerator and denominator in the expression <p class="formulaDsp">
533<img class="formulaDsp" alt="\[ \log \left( \frac {\sum_{s:b_k=0} \exp (-x^2) P(s)} {\sum_{s:b_k=1} \exp (-x^2) P(s)} \right) \]" src="form_297.png">
534<p>
535<p>
536<dl compact><dt><b>Parameters:</b></dt><dd>
537  <table border="0" cellspacing="2" cellpadding="0">
538    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>logP_apriori</em>&nbsp;</td><td>Vector of a priori probabilities per bit </td></tr>
539    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>s</em>&nbsp;</td><td>Symbol </td></tr>
540    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>scaled_norm</em>&nbsp;</td><td>Argument of the exponents in the above equation </td></tr>
541    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>j</em>&nbsp;</td><td>Channel index (dimension) </td></tr>
542    <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>num</em>&nbsp;</td><td>Logarithm of the numerator in the above expression </td></tr>
543    <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>denom</em>&nbsp;</td><td>Logarithm of the denominator in the above expression </td></tr>
544  </table>
545</dl>
546
547<p>References <a class="el" href="modulator__nd_8h-source.html#l00100">itpp::Modulator_ND::bitmap</a>, <a class="el" href="llr_8h-source.html#l00270">itpp::LLR_calc_unit::jaclog()</a>, <a class="el" href="modulator__nd_8h-source.html#l00096">itpp::Modulator_ND::k</a>, and <a class="el" href="modulator__nd_8h-source.html#l00094">itpp::Modulator_ND::llrcalc</a>.</p>
548
549</div>
550</div><p>
551<a class="anchor" name="48975e0d26dac075e1f448bdca15ca87"></a><!-- doxytag: member="itpp::ND_UPSK::update_LLR" ref="48975e0d26dac075e1f448bdca15ca87" args="(const Array&lt; QLLRvec &gt; &amp;logP_apriori, const ivec &amp;s, QLLR scaled_norm, QLLRvec &amp;num, QLLRvec &amp;denom)" -->
552<div class="memitem">
553<div class="memproto">
554      <table class="memname">
555        <tr>
556          <td class="memname">void itpp::Modulator_ND::update_LLR           </td>
557          <td>(</td>
558          <td class="paramtype">const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; QLLRvec &gt; &amp;&nbsp;</td>
559          <td class="paramname"> <em>logP_apriori</em>, </td>
560        </tr>
561        <tr>
562          <td class="paramkey"></td>
563          <td></td>
564          <td class="paramtype">const ivec &amp;&nbsp;</td>
565          <td class="paramname"> <em>s</em>, </td>
566        </tr>
567        <tr>
568          <td class="paramkey"></td>
569          <td></td>
570          <td class="paramtype">QLLR&nbsp;</td>
571          <td class="paramname"> <em>scaled_norm</em>, </td>
572        </tr>
573        <tr>
574          <td class="paramkey"></td>
575          <td></td>
576          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
577          <td class="paramname"> <em>num</em>, </td>
578        </tr>
579        <tr>
580          <td class="paramkey"></td>
581          <td></td>
582          <td class="paramtype">QLLRvec &amp;&nbsp;</td>
583          <td class="paramname"> <em>denom</em></td><td>&nbsp;</td>
584        </tr>
585        <tr>
586          <td></td>
587          <td>)</td>
588          <td></td><td></td><td><code> [protected, inherited]</code></td>
589        </tr>
590      </table>
591</div>
592<div class="memdoc">
593
594<p>
595Update LLR (for internal use).
596<p>
597This function updates the numerator and denominator in the expression <p class="formulaDsp">
598<img class="formulaDsp" alt="\[ \log \left( \frac {\sum_{s:b_k=0} \exp(-x^2) P(s)} {\sum_{s:b_k=1} \exp(-x^2) P(s)} \right) \]" src="form_296.png">
599<p>
600<p>
601<dl compact><dt><b>Parameters:</b></dt><dd>
602  <table border="0" cellspacing="2" cellpadding="0">
603    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>logP_apriori</em>&nbsp;</td><td>Vector of a priori probabilities per bit </td></tr>
604    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>s</em>&nbsp;</td><td>Symbol vector </td></tr>
605    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>scaled_norm</em>&nbsp;</td><td>Argument of the exponents in the above equation </td></tr>
606    <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>num</em>&nbsp;</td><td>Logarithm of the numerator in the above expression </td></tr>
607    <tr><td valign="top"><tt>[out]</tt>&nbsp;</td><td valign="top"><em>denom</em>&nbsp;</td><td>Logarithm of the denominator in the above expression </td></tr>
608  </table>
609</dl>
610
611<p>References <a class="el" href="modulator__nd_8h-source.html#l00100">itpp::Modulator_ND::bitmap</a>, <a class="el" href="llr_8h-source.html#l00270">itpp::LLR_calc_unit::jaclog()</a>, <a class="el" href="modulator__nd_8h-source.html#l00096">itpp::Modulator_ND::k</a>, <a class="el" href="modulator__nd_8h-source.html#l00094">itpp::Modulator_ND::llrcalc</a>, and <a class="el" href="modulator__nd_8h-source.html#l00092">itpp::Modulator_ND::nt</a>.</p>
612
613<p>Referenced by <a class="el" href="modulator__nd_8cpp-source.html#l00413">itpp::Modulator_NCD::demodulate_soft_bits()</a>, and <a class="el" href="modulator__nd_8cpp-source.html#l00193">itpp::Modulator_NRD::demodulate_soft_bits()</a>.</p>
614
615</div>
616</div><p>
617<a class="anchor" name="27e760213e8c30b93fc338b4a6e3a864"></a><!-- doxytag: member="itpp::ND_UPSK::update_norm" ref="27e760213e8c30b93fc338b4a6e3a864" args="(double &amp;norm, int k, int sold, int snew, const cvec &amp;ytH, const cmat &amp;HtH, const ivec &amp;s)" -->
618<div class="memitem">
619<div class="memproto">
620      <table class="memname">
621        <tr>
622          <td class="memname">void itpp::Modulator_NCD::update_norm           </td>
623          <td>(</td>
624          <td class="paramtype">double &amp;&nbsp;</td>
625          <td class="paramname"> <em>norm</em>, </td>
626        </tr>
627        <tr>
628          <td class="paramkey"></td>
629          <td></td>
630          <td class="paramtype">int&nbsp;</td>
631          <td class="paramname"> <em>k</em>, </td>
632        </tr>
633        <tr>
634          <td class="paramkey"></td>
635          <td></td>
636          <td class="paramtype">int&nbsp;</td>
637          <td class="paramname"> <em>sold</em>, </td>
638        </tr>
639        <tr>
640          <td class="paramkey"></td>
641          <td></td>
642          <td class="paramtype">int&nbsp;</td>
643          <td class="paramname"> <em>snew</em>, </td>
644        </tr>
645        <tr>
646          <td class="paramkey"></td>
647          <td></td>
648          <td class="paramtype">const cvec &amp;&nbsp;</td>
649          <td class="paramname"> <em>ytH</em>, </td>
650        </tr>
651        <tr>
652          <td class="paramkey"></td>
653          <td></td>
654          <td class="paramtype">const cmat &amp;&nbsp;</td>
655          <td class="paramname"> <em>HtH</em>, </td>
656        </tr>
657        <tr>
658          <td class="paramkey"></td>
659          <td></td>
660          <td class="paramtype">const ivec &amp;&nbsp;</td>
661          <td class="paramname"> <em>s</em></td><td>&nbsp;</td>
662        </tr>
663        <tr>
664          <td></td>
665          <td>)</td>
666          <td></td><td></td><td><code> [protected, inherited]</code></td>
667        </tr>
668      </table>
669</div>
670<div class="memdoc">
671
672<p>
673Update residual norm (for internal use).
674<p>
675Update the residual norm <img class="formulaInl" alt="$|y-Hs|$" src="form_300.png"> when moving from one constellation point to an adjacent point.<p>
676<dl compact><dt><b>Parameters:</b></dt><dd>
677  <table border="0" cellspacing="2" cellpadding="0">
678    <tr><td valign="top"><tt>[in,out]</tt>&nbsp;</td><td valign="top"><em>norm</em>&nbsp;</td><td>Norm to be updated </td></tr>
679    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>k</em>&nbsp;</td><td>Position where s changed </td></tr>
680    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>sold</em>&nbsp;</td><td>Old value of s[k] </td></tr>
681    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>snew</em>&nbsp;</td><td>New value of s[k] </td></tr>
682    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>ytH</em>&nbsp;</td><td>y'H vector </td></tr>
683    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>HtH</em>&nbsp;</td><td>Grammian matrix H'H </td></tr>
684    <tr><td valign="top"><tt>[in]</tt>&nbsp;</td><td valign="top"><em>s</em>&nbsp;</td><td>Symbol vector </td></tr>
685  </table>
686</dl>
687
688<p>References <a class="el" href="fix__functions_8cpp-source.html#l00098">itpp::conj()</a>, <a class="el" href="matfunc_8h-source.html#l00051">itpp::length()</a>, <a class="el" href="fix__functions_8cpp-source.html#l00084">itpp::real()</a>, <a class="el" href="elem__math_8h-source.html#l00056">itpp::sqr()</a>, and <a class="el" href="modulator__nd_8h-source.html#l00448">itpp::Modulator_NCD::symbols</a>.</p>
689
690<p>Referenced by <a class="el" href="modulator__nd_8cpp-source.html#l00444">itpp::Modulator_NCD::demodulate_soft_bits()</a>.</p>
691
692</div>
693</div><p>
694<hr>The documentation for this class was generated from the following files:<ul>
695<li><a class="el" href="modulator__nd_8h-source.html">modulator_nd.h</a><li><a class="el" href="modulator__nd_8cpp.html">modulator_nd.cpp</a></ul>
696</div>
697<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:19 2009 for mixpp by&nbsp;
698<a href="http://www.doxygen.org/index.html">
699<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
700</body>
701</html>
Note: See TracBrowser for help on using the browser.