root/doc/html/classitpp_1_1Modulator.html @ 353

Revision 353, 37.6 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::Modulator&lt; T &gt; Class Template 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_1Modulator.html">Modulator</a>
68  </div>
69</div>
70<div class="contents">
71<h1>itpp::Modulator&lt; T &gt; Class Template Reference<br>
72<small>
73[<a class="el" href="group__modulators.html">Digital Modulation</a>]</small>
74</h1><!-- doxytag: class="itpp::Modulator" -->General modulator for 1D or 2D signal constellations. 
75<a href="#_details">More...</a>
76<p>
77<code>#include &lt;<a class="el" href="modulator_8h-source.html">modulator.h</a>&gt;</code>
78<p>
79
80<p>
81<a href="classitpp_1_1Modulator-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="a3306fe1944bb997c9584a7238ec3d53"></a><!-- doxytag: member="itpp::Modulator::Modulator" ref="a3306fe1944bb997c9584a7238ec3d53" args="()" -->
85&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#a3306fe1944bb997c9584a7238ec3d53">Modulator</a> ()</td></tr>
86
87<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor. <br></td></tr>
88<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0f04d4e434d5f5b4d427ef153d724c33"></a><!-- doxytag: member="itpp::Modulator::Modulator" ref="0f04d4e434d5f5b4d427ef153d724c33" args="(const Vec&lt; T &gt; &amp;symbols, const ivec &amp;bits2symbols)" -->
89&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#0f04d4e434d5f5b4d427ef153d724c33">Modulator</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;<a class="el" href="classitpp_1_1Modulator.html#3069840e9e7a44180615fb772cf9ae42">symbols</a>, const ivec &amp;<a class="el" href="classitpp_1_1Modulator.html#3ca26614189cb7a66da369bf0c4b9070">bits2symbols</a>)</td></tr>
90
91<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <br></td></tr>
92<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ce8f01d9637358c1dbfd1a605fdaf091"></a><!-- doxytag: member="itpp::Modulator::~Modulator" ref="ce8f01d9637358c1dbfd1a605fdaf091" args="()" -->
93virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#ce8f01d9637358c1dbfd1a605fdaf091">~Modulator</a> ()</td></tr>
94
95<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
96<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b9722a6826869c6d6e15a9835d76239b"></a><!-- doxytag: member="itpp::Modulator::set" ref="b9722a6826869c6d6e15a9835d76239b" args="(const Vec&lt; T &gt; &amp;symbols, const ivec &amp;bits2symbols)" -->
97virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#b9722a6826869c6d6e15a9835d76239b">set</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;<a class="el" href="classitpp_1_1Modulator.html#3069840e9e7a44180615fb772cf9ae42">symbols</a>, const ivec &amp;<a class="el" href="classitpp_1_1Modulator.html#3ca26614189cb7a66da369bf0c4b9070">bits2symbols</a>)</td></tr>
98
99<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the constellation to use in the modulator. <br></td></tr>
100<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6e7cfa06570e2a1de515be5222a53a83"></a><!-- doxytag: member="itpp::Modulator::bits_per_symbol" ref="6e7cfa06570e2a1de515be5222a53a83" args="() const " -->
101virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#6e7cfa06570e2a1de515be5222a53a83">bits_per_symbol</a> () const </td></tr>
102
103<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns number of bits per symbol. <br></td></tr>
104<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="28b1c28bf8f4596e4d5149f1f3c8cd76"></a><!-- doxytag: member="itpp::Modulator::get_symbols" ref="28b1c28bf8f4596e4d5149f1f3c8cd76" args="() const " -->
105virtual <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#28b1c28bf8f4596e4d5149f1f3c8cd76">get_symbols</a> () const </td></tr>
106
107<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the symbol values used in the modulator. <br></td></tr>
108<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#a8186f0e837fd3d440a6acb7a0225d35">get_bits2symbols</a> () const </td></tr>
109
110<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the bitmap, which maps input bits into symbols.  <a href="#a8186f0e837fd3d440a6acb7a0225d35"></a><br></td></tr>
111<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4f7bde9d3bfa9e39c06017534e3f6647"></a><!-- doxytag: member="itpp::Modulator::modulate" ref="4f7bde9d3bfa9e39c06017534e3f6647" args="(const ivec &amp;symbolnumbers, Vec&lt; T &gt; &amp;output) const " -->
112virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#4f7bde9d3bfa9e39c06017534e3f6647">modulate</a> (const ivec &amp;symbolnumbers, <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;output) const </td></tr>
113
114<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modulation of symbols. <br></td></tr>
115<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0cb2673987e110920b519c139cdebe1"></a><!-- doxytag: member="itpp::Modulator::modulate" ref="e0cb2673987e110920b519c139cdebe1" args="(const ivec &amp;symbolnumbers) const " -->
116virtual <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#e0cb2673987e110920b519c139cdebe1">modulate</a> (const ivec &amp;symbolnumbers) const </td></tr>
117
118<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modulation of symbols. <br></td></tr>
119<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="845b5fbf4dad59edd3772627250623a1"></a><!-- doxytag: member="itpp::Modulator::demodulate" ref="845b5fbf4dad59edd3772627250623a1" args="(const Vec&lt; T &gt; &amp;signal, ivec &amp;output) const " -->
120virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#845b5fbf4dad59edd3772627250623a1">demodulate</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;signal, ivec &amp;output) const </td></tr>
121
122<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Demodulation of symbols. <br></td></tr>
123<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f2c15efa18d1cb46b8c97723c11ec9d"></a><!-- doxytag: member="itpp::Modulator::demodulate" ref="7f2c15efa18d1cb46b8c97723c11ec9d" args="(const Vec&lt; T &gt; &amp;signal) const " -->
124virtual ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#7f2c15efa18d1cb46b8c97723c11ec9d">demodulate</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;signal) const </td></tr>
125
126<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Demodulation of symbols. <br></td></tr>
127<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="53826bf7e0ec83b99592235b0c2f6235"></a><!-- doxytag: member="itpp::Modulator::modulate_bits" ref="53826bf7e0ec83b99592235b0c2f6235" args="(const bvec &amp;bits, Vec&lt; T &gt; &amp;output) const " -->
128virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#53826bf7e0ec83b99592235b0c2f6235">modulate_bits</a> (const bvec &amp;bits, <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;output) const </td></tr>
129
130<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modulation of bits. <br></td></tr>
131<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="622fa1ce4243330b7efa0605a9492513"></a><!-- doxytag: member="itpp::Modulator::modulate_bits" ref="622fa1ce4243330b7efa0605a9492513" args="(const bvec &amp;bits) const " -->
132virtual <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#622fa1ce4243330b7efa0605a9492513">modulate_bits</a> (const bvec &amp;bits) const </td></tr>
133
134<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modulation of bits. <br></td></tr>
135<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4d03bbe8bd467898f149d5f134f6f120"></a><!-- doxytag: member="itpp::Modulator::demodulate_bits" ref="4d03bbe8bd467898f149d5f134f6f120" args="(const Vec&lt; T &gt; &amp;signal, bvec &amp;bits) const " -->
136virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#4d03bbe8bd467898f149d5f134f6f120">demodulate_bits</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;signal, bvec &amp;bits) const </td></tr>
137
138<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hard demodulation of bits. <br></td></tr>
139<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9e3432dad687ac0ee102c208e34920f8"></a><!-- doxytag: member="itpp::Modulator::demodulate_bits" ref="9e3432dad687ac0ee102c208e34920f8" args="(const Vec&lt; T &gt; &amp;signal) const " -->
140virtual bvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#9e3432dad687ac0ee102c208e34920f8">demodulate_bits</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;signal) const </td></tr>
141
142<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Hard demodulation of bits. <br></td></tr>
143<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#9beffaf8f69378f9c20a85f3023bd9af">demodulate_soft_bits</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;rx_symbols, double N0, vec &amp;soft_bits, <a class="el" href="group__modulators.html#g5128af4688e1a1caa84e1fabf051faa7">Soft_Method</a> method=LOGMAP) const </td></tr>
144
145<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulator for AWGN channels.  <a href="#9beffaf8f69378f9c20a85f3023bd9af"></a><br></td></tr>
146<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a9cba88e460e11775fb72d21b543c375"></a><!-- doxytag: member="itpp::Modulator::demodulate_soft_bits" ref="a9cba88e460e11775fb72d21b543c375" args="(const Vec&lt; T &gt; &amp;rx_symbols, double N0, Soft_Method method=LOGMAP) const " -->
147virtual vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#a9cba88e460e11775fb72d21b543c375">demodulate_soft_bits</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;rx_symbols, double N0, <a class="el" href="group__modulators.html#g5128af4688e1a1caa84e1fabf051faa7">Soft_Method</a> method=LOGMAP) const </td></tr>
148
149<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulator for AWGN channels. <br></td></tr>
150<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#bd014d868b4f883712f92a7130401714">demodulate_soft_bits</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;rx_symbols, const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;channel, double N0, vec &amp;soft_bits, <a class="el" href="group__modulators.html#g5128af4688e1a1caa84e1fabf051faa7">Soft_Method</a> method=LOGMAP) const </td></tr>
151
152<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulator for fading channels.  <a href="#bd014d868b4f883712f92a7130401714"></a><br></td></tr>
153<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e40b7afd0d38d2d86b561b9dff6f55fd"></a><!-- doxytag: member="itpp::Modulator::demodulate_soft_bits" ref="e40b7afd0d38d2d86b561b9dff6f55fd" args="(const Vec&lt; T &gt; &amp;rx_symbols, const Vec&lt; T &gt; &amp;channel, double N0, Soft_Method method=LOGMAP) const " -->
154virtual vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#e40b7afd0d38d2d86b561b9dff6f55fd">demodulate_soft_bits</a> (const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;rx_symbols, const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;channel, double N0, <a class="el" href="group__modulators.html#g5128af4688e1a1caa84e1fabf051faa7">Soft_Method</a> method=LOGMAP) const </td></tr>
155
156<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Soft demodulator for fading channels. <br></td></tr>
157<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
158<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bb3e654a3fb6d127ee8d266677689233"></a><!-- doxytag: member="itpp::Modulator::calculate_softbit_matrices" ref="bb3e654a3fb6d127ee8d266677689233" args="()" -->
159void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#bb3e654a3fb6d127ee8d266677689233">calculate_softbit_matrices</a> ()</td></tr>
160
161<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This function calculates the soft bit mapping matrices S0 and S1. <br></td></tr>
162<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
163<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="552cd7add3e998eca485d0ea39808e0d"></a><!-- doxytag: member="itpp::Modulator::setup_done" ref="552cd7add3e998eca485d0ea39808e0d" args="" -->
164bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#552cd7add3e998eca485d0ea39808e0d">setup_done</a></td></tr>
165
166<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Setup indicator. <br></td></tr>
167<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3656edc52486e0551b734b32ab67d3b6"></a><!-- doxytag: member="itpp::Modulator::k" ref="3656edc52486e0551b734b32ab67d3b6" args="" -->
168int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#3656edc52486e0551b734b32ab67d3b6">k</a></td></tr>
169
170<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of bits per modulation symbol. <br></td></tr>
171<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a434960c7ff9e5356d832aa53b46930b"></a><!-- doxytag: member="itpp::Modulator::M" ref="a434960c7ff9e5356d832aa53b46930b" args="" -->
172int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#a434960c7ff9e5356d832aa53b46930b">M</a></td></tr>
173
174<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of modulation symbols. <br></td></tr>
175<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1b1a9a706c0736c51966703bea58cf48"></a><!-- doxytag: member="itpp::Modulator::bitmap" ref="1b1a9a706c0736c51966703bea58cf48" args="" -->
176<a class="el" href="mat_8h.html#f90acd1af41bf2d1d8a4bb23662fff69">bmat</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#1b1a9a706c0736c51966703bea58cf48">bitmap</a></td></tr>
177
178<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Bit to symbol mapping table (size: M x k). <br></td></tr>
179<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3ca26614189cb7a66da369bf0c4b9070"></a><!-- doxytag: member="itpp::Modulator::bits2symbols" ref="3ca26614189cb7a66da369bf0c4b9070" args="" -->
180ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#3ca26614189cb7a66da369bf0c4b9070">bits2symbols</a></td></tr>
181
182<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Bit to symbol mapping in decimal form (size: M). <br></td></tr>
183<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3069840e9e7a44180615fb772cf9ae42"></a><!-- doxytag: member="itpp::Modulator::symbols" ref="3069840e9e7a44180615fb772cf9ae42" args="" -->
184<a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#3069840e9e7a44180615fb772cf9ae42">symbols</a></td></tr>
185
186<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Corresponding modulation symbols (size: M). <br></td></tr>
187<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c19c8fe07e95e4eb80e832a633b7c422"></a><!-- doxytag: member="itpp::Modulator::S0" ref="c19c8fe07e95e4eb80e832a633b7c422" args="" -->
188imat&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#c19c8fe07e95e4eb80e832a633b7c422">S0</a></td></tr>
189
190<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Matrix where row k contains the constellation points with '0' in bit position k. <br></td></tr>
191<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9d4c223ffd96fdc5b26ba5c44956998b"></a><!-- doxytag: member="itpp::Modulator::S1" ref="9d4c223ffd96fdc5b26ba5c44956998b" args="" -->
192imat&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#9d4c223ffd96fdc5b26ba5c44956998b">S1</a></td></tr>
193
194<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Matrix where row k contains the constellation points with '1' in bit position k. <br></td></tr>
195<tr><td colspan="2"><br><h2>Related Functions</h2></td></tr>
196<tr><td colspan="2">(Note that these are not member functions.) <br><br></td></tr>
197<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d47d1377dffb2aed9f21f8f976e80a0a"></a><!-- doxytag: member="itpp::Modulator::Modulator_1D" ref="d47d1377dffb2aed9f21f8f976e80a0a" args="" -->
198typedef <a class="el" href="classitpp_1_1Modulator.html">Modulator</a>&lt; double &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#d47d1377dffb2aed9f21f8f976e80a0a">Modulator_1D</a></td></tr>
199
200<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Definition of 1D <a class="el" href="classitpp_1_1Modulator.html" title="General modulator for 1D or 2D signal constellations.">Modulator</a> (with real symbols). <br></td></tr>
201<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="97dc4e87ae4fa63c4e7dbbeac0ab00b0"></a><!-- doxytag: member="itpp::Modulator::Modulator_2D" ref="97dc4e87ae4fa63c4e7dbbeac0ab00b0" args="" -->
202typedef <a class="el" href="classitpp_1_1Modulator.html">Modulator</a><br class="typebreak">
203&lt; std::complex&lt; double &gt; &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1Modulator.html#97dc4e87ae4fa63c4e7dbbeac0ab00b0">Modulator_2D</a></td></tr>
204
205<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Definition of 2D <a class="el" href="classitpp_1_1Modulator.html" title="General modulator for 1D or 2D signal constellations.">Modulator</a> (with complex symbols). <br></td></tr>
206</table>
207<hr><a name="_details"></a><h2>Detailed Description</h2>
208<h3>template&lt;typename T&gt;<br>
209 class itpp::Modulator&lt; T &gt;</h3>
210
211General modulator for 1D or 2D signal constellations.
212<p>
213The <a class="el" href="classitpp_1_1Modulator.html" title="General modulator for 1D or 2D signal constellations.">Modulator</a> class is designed for modeling any kind of 1D (real) or 2D (complex) signal constellations. Therefore it is used as a base class for such modulations like <a class="el" href="classitpp_1_1PAM.html" title="M-ary PAM modulator with real symbols.">PAM</a>, <a class="el" href="classitpp_1_1PSK.html" title="M-ary PSK modulator.">PSK</a>, <a class="el" href="classitpp_1_1QAM.html" title="M-ary QAM modulator with square lattice.">QAM</a>, etc.<p>
214The constellation of the modulator is described with two vectors. The first one contains the real or complex values representing the constellation points, whereas the other one includes the corresponding bit to symbol mapping (in the decimal from).<p>
215Beside hard demapping, this class can also perform soft demodulation. To use it properly the received symbols should be equal to: <p class="formulaDsp">
216<img class="formulaDsp" alt="\[r_k = c_k s_k + n_k,\]" src="form_252.png">
217<p>
218 where <img class="formulaInl" alt="$c_k$" src="form_253.png"> is the real or complex channel gain, <img class="formulaInl" alt="$s_k$" src="form_254.png"> is the transmitted constellation symbol, and <img class="formulaInl" alt="$n_k$" src="form_255.png"> is the AWGN of the channel (with variance <img class="formulaInl" alt="$N_0$" src="form_233.png">).<p>
219It is also assumed that the channel estimates are perfect when calculating the soft bits. <hr><h2>Member Function Documentation</h2>
220<a class="anchor" name="bd014d868b4f883712f92a7130401714"></a><!-- doxytag: member="itpp::Modulator::demodulate_soft_bits" ref="bd014d868b4f883712f92a7130401714" args="(const Vec&lt; T &gt; &amp;rx_symbols, const Vec&lt; T &gt; &amp;channel, double N0, vec &amp;soft_bits, Soft_Method method=LOGMAP) const " -->
221<div class="memitem">
222<div class="memproto">
223<div class="memtemplate">
224template&lt;typename T&gt; </div>
225      <table class="memname">
226        <tr>
227          <td class="memname">void <a class="el" href="classitpp_1_1Modulator.html">itpp::Modulator</a>&lt; T &gt;::demodulate_soft_bits           </td>
228          <td>(</td>
229          <td class="paramtype">const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;&nbsp;</td>
230          <td class="paramname"> <em>rx_symbols</em>, </td>
231        </tr>
232        <tr>
233          <td class="paramkey"></td>
234          <td></td>
235          <td class="paramtype">const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;&nbsp;</td>
236          <td class="paramname"> <em>channel</em>, </td>
237        </tr>
238        <tr>
239          <td class="paramkey"></td>
240          <td></td>
241          <td class="paramtype">double&nbsp;</td>
242          <td class="paramname"> <em>N0</em>, </td>
243        </tr>
244        <tr>
245          <td class="paramkey"></td>
246          <td></td>
247          <td class="paramtype">vec &amp;&nbsp;</td>
248          <td class="paramname"> <em>soft_bits</em>, </td>
249        </tr>
250        <tr>
251          <td class="paramkey"></td>
252          <td></td>
253          <td class="paramtype"><a class="el" href="group__modulators.html#g5128af4688e1a1caa84e1fabf051faa7">Soft_Method</a>&nbsp;</td>
254          <td class="paramname"> <em>method</em> = <code>LOGMAP</code></td><td>&nbsp;</td>
255        </tr>
256        <tr>
257          <td></td>
258          <td>)</td>
259          <td></td><td></td><td> const<code> [inline, virtual]</code></td>
260        </tr>
261      </table>
262</div>
263<div class="memdoc">
264
265<p>
266Soft demodulator for fading channels.
267<p>
268This function calculates the log-likelihood ratio (LLR) of the received signal from fading channels. Depending on the soft demodulation method chosen, either full log-MAP calculation is performed (default method), according to the following equation: <p class="formulaDsp">
269<img class="formulaDsp" alt="\[\log \left( \frac{P(b_i=0|r)}{P(b_i=1|r)} \right) = \log \left( \frac{\sum_{s_i \in S_0} \exp \left( -\frac{|r_k - c_k s_i|^2}{N_0} \right)} {\sum_{s_i \in S_1} \exp \left( -\frac{|r_k - c_k s_i|^2}{N_0} \right)} \right) \]" src="form_275.png">
270<p>
271 or approximate, but faster calculation is performed.<p>
272The approximate method finds for each bit the closest constellation points that have zero and one in the corresponding position. Let <img class="formulaInl" alt="$d_0 = |r_k - c_k s_0|$" src="form_276.png"> denote the distance to the closest zero point and <img class="formulaInl" alt="$d_1 = |r_k - c_k s_1|$" src="form_277.png"> denote the distance to the closest one point for the corresponding bit respectively. The approximate algorithm then computes <p class="formulaDsp">
273<img class="formulaDsp" alt="\[\frac{d_1^2 - d_0^2}{N_0}\]" src="form_272.png">
274<p>
275<p>
276When this function is to be used together with MAP-based turbo decoding algorithms then the channel reliability factor <img class="formulaInl" alt="$L_c$" src="form_274.png"> of the turbo decoder shall be set to 1. The output from this function can also be used by a Viterbi decoder using an AWGN based metric calculation function.<p>
277<dl compact><dt><b>Parameters:</b></dt><dd>
278  <table border="0" cellspacing="2" cellpadding="0">
279    <tr><td valign="top"></td><td valign="top"><em>rx_symbols</em>&nbsp;</td><td>The received noisy constellation symbols <img class="formulaInl" alt="$r_k$" src="form_278.png"> </td></tr>
280    <tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>The channel values <img class="formulaInl" alt="$c_k$" src="form_253.png"> </td></tr>
281    <tr><td valign="top"></td><td valign="top"><em>N0</em>&nbsp;</td><td>The spectral density of the AWGN noise </td></tr>
282    <tr><td valign="top"></td><td valign="top"><em>soft_bits</em>&nbsp;</td><td>The soft bits calculated using the expression above </td></tr>
283    <tr><td valign="top"></td><td valign="top"><em>method</em>&nbsp;</td><td>The method used for demodulation (LOGMAP or APPROX)</td></tr>
284  </table>
285</dl>
286<dl class="note" compact><dt><b>Note:</b></dt><dd>For soft demodulation it is suggested to use the N-dimensional modulator (<a class="el" href="classitpp_1_1Modulator__ND.html" title="Base class for an N-dimensional (ND) vector (MIMO) modulator.">Modulator_ND</a>) instead, which is based on the QLLR (quantized) arithmetic and therefore is faster. Please note, however, that mixed use of <code>Modulator_1D/<code>Modulator_2D</code> and</code> <code><a class="el" href="classitpp_1_1Modulator__ND.html" title="Base class for an N-dimensional (ND) vector (MIMO) modulator.">Modulator_ND</a></code> is not advised. </dd></dl>
287
288<p>References <a class="el" href="log__exp_8h-source.html#l00172">itpp::exp()</a>, <a class="el" href="itassert_8h-source.html#l00107">it_assert_debug</a>, <a class="el" href="modulator_8h-source.html#l00228">itpp::Modulator&lt; T &gt;::k</a>, <a class="el" href="modulator_8h-source.html#l00047">itpp::LOGMAP</a>, <a class="el" href="modulator_8h-source.html#l00230">itpp::Modulator&lt; T &gt;::M</a>, <a class="el" href="tcp_8h-source.html#l00117">itpp::max()</a>, <a class="el" href="modulator_8h-source.html#l00239">itpp::Modulator&lt; T &gt;::S0</a>, <a class="el" href="modulator_8h-source.html#l00242">itpp::Modulator&lt; T &gt;::S1</a>, <a class="el" href="modulator_8h-source.html#l00226">itpp::Modulator&lt; T &gt;::setup_done</a>, <a class="el" href="vec_8h-source.html#l00277">itpp::Vec&lt; Num_T &gt;::size()</a>, <a class="el" href="elem__math_8h-source.html#l00056">itpp::sqr()</a>, <a class="el" href="modulator_8h-source.html#l00236">itpp::Modulator&lt; T &gt;::symbols</a>, and <a class="el" href="log__exp_8h-source.html#l00105">itpp::trunc_log()</a>.</p>
289
290</div>
291</div><p>
292<a class="anchor" name="9beffaf8f69378f9c20a85f3023bd9af"></a><!-- doxytag: member="itpp::Modulator::demodulate_soft_bits" ref="9beffaf8f69378f9c20a85f3023bd9af" args="(const Vec&lt; T &gt; &amp;rx_symbols, double N0, vec &amp;soft_bits, Soft_Method method=LOGMAP) const " -->
293<div class="memitem">
294<div class="memproto">
295<div class="memtemplate">
296template&lt;typename T&gt; </div>
297      <table class="memname">
298        <tr>
299          <td class="memname">void <a class="el" href="classitpp_1_1Modulator.html">itpp::Modulator</a>&lt; T &gt;::demodulate_soft_bits           </td>
300          <td>(</td>
301          <td class="paramtype">const <a class="el" href="classitpp_1_1Vec.html">Vec</a>&lt; T &gt; &amp;&nbsp;</td>
302          <td class="paramname"> <em>rx_symbols</em>, </td>
303        </tr>
304        <tr>
305          <td class="paramkey"></td>
306          <td></td>
307          <td class="paramtype">double&nbsp;</td>
308          <td class="paramname"> <em>N0</em>, </td>
309        </tr>
310        <tr>
311          <td class="paramkey"></td>
312          <td></td>
313          <td class="paramtype">vec &amp;&nbsp;</td>
314          <td class="paramname"> <em>soft_bits</em>, </td>
315        </tr>
316        <tr>
317          <td class="paramkey"></td>
318          <td></td>
319          <td class="paramtype"><a class="el" href="group__modulators.html#g5128af4688e1a1caa84e1fabf051faa7">Soft_Method</a>&nbsp;</td>
320          <td class="paramname"> <em>method</em> = <code>LOGMAP</code></td><td>&nbsp;</td>
321        </tr>
322        <tr>
323          <td></td>
324          <td>)</td>
325          <td></td><td></td><td> const<code> [inline, virtual]</code></td>
326        </tr>
327      </table>
328</div>
329<div class="memdoc">
330
331<p>
332Soft demodulator for AWGN channels.
333<p>
334This function calculates the log-likelihood ratio (LLR) of the received signal from AWGN channels. Depending on the soft demodulation method chosen, either full log-MAP calculation is performed (default method), according to the following equation: <p class="formulaDsp">
335<img class="formulaDsp" alt="\[\log \left( \frac{P(b_i=0|r)}{P(b_i=1|r)} \right) = \log \left( \frac{\sum_{s_i \in S_0} \exp \left( -\frac{|r_k - s_i|^2}{N_0} \right)} {\sum_{s_i \in S_1} \exp \left( -\frac{|r_k - s_i|^2}{N_0} \right)} \right) \]" src="form_269.png">
336<p>
337 or approximate, but faster calculation is performed.<p>
338The approximate method finds for each bit the closest constellation points that have zero and one in the corresponding position. Let <img class="formulaInl" alt="$d_0 = |r_k - s_0|$" src="form_270.png"> denote the distance to the closest zero point and <img class="formulaInl" alt="$d_1 = |r_k - s_1|$" src="form_271.png"> denote the distance to the closest one point for the corresponding bit respectively. The approximate algorithm then computes <p class="formulaDsp">
339<img class="formulaDsp" alt="\[\frac{d_1^2 - d_0^2}{N_0}\]" src="form_272.png">
340<p>
341<p>
342This function can be used on channels where the channel gain <img class="formulaInl" alt="$c_k = 1$" src="form_273.png">.<p>
343When this function is to be used together with MAP-based turbo decoding algorithms then the channel reliability factor <img class="formulaInl" alt="$L_c$" src="form_274.png"> of the turbo decoder shall be set to 1. The output from this function can also be used by a Viterbi decoder using an AWGN based metric calculation function.<p>
344<dl compact><dt><b>Parameters:</b></dt><dd>
345  <table border="0" cellspacing="2" cellpadding="0">
346    <tr><td valign="top"></td><td valign="top"><em>rx_symbols</em>&nbsp;</td><td>The received noisy constellation symbols </td></tr>
347    <tr><td valign="top"></td><td valign="top"><em>N0</em>&nbsp;</td><td>The spectral density of the AWGN noise </td></tr>
348    <tr><td valign="top"></td><td valign="top"><em>soft_bits</em>&nbsp;</td><td>The soft bits calculated using the expression above </td></tr>
349    <tr><td valign="top"></td><td valign="top"><em>method</em>&nbsp;</td><td>The method used for demodulation (LOGMAP or APPROX)</td></tr>
350  </table>
351</dl>
352<dl class="note" compact><dt><b>Note:</b></dt><dd>For soft demodulation it is suggested to use the N-dimensional modulator (<code><a class="el" href="classitpp_1_1Modulator__ND.html" title="Base class for an N-dimensional (ND) vector (MIMO) modulator.">Modulator_ND</a></code>) instead, which is based on the QLLR (quantized) arithmetic and therefore is faster. Please note, however, that mixed use of <code>Modulator_1D/<code>Modulator_2D</code> and</code> <code><a class="el" href="classitpp_1_1Modulator__ND.html" title="Base class for an N-dimensional (ND) vector (MIMO) modulator.">Modulator_ND</a></code> is not advised. </dd></dl>
353
354<p>References <a class="el" href="log__exp_8h-source.html#l00172">itpp::exp()</a>, <a class="el" href="itassert_8h-source.html#l00107">it_assert_debug</a>, <a class="el" href="modulator_8h-source.html#l00228">itpp::Modulator&lt; T &gt;::k</a>, <a class="el" href="modulator_8h-source.html#l00047">itpp::LOGMAP</a>, <a class="el" href="modulator_8h-source.html#l00230">itpp::Modulator&lt; T &gt;::M</a>, <a class="el" href="tcp_8h-source.html#l00117">itpp::max()</a>, <a class="el" href="modulator_8h-source.html#l00239">itpp::Modulator&lt; T &gt;::S0</a>, <a class="el" href="modulator_8h-source.html#l00242">itpp::Modulator&lt; T &gt;::S1</a>, <a class="el" href="modulator_8h-source.html#l00226">itpp::Modulator&lt; T &gt;::setup_done</a>, <a class="el" href="vec_8h-source.html#l00277">itpp::Vec&lt; Num_T &gt;::size()</a>, <a class="el" href="elem__math_8h-source.html#l00056">itpp::sqr()</a>, <a class="el" href="modulator_8h-source.html#l00236">itpp::Modulator&lt; T &gt;::symbols</a>, and <a class="el" href="log__exp_8h-source.html#l00105">itpp::trunc_log()</a>.</p>
355
356<p>Referenced by <a class="el" href="modulator_8h-source.html#l00453">itpp::Modulator&lt; T &gt;::demodulate_soft_bits()</a>.</p>
357
358</div>
359</div><p>
360<a class="anchor" name="a8186f0e837fd3d440a6acb7a0225d35"></a><!-- doxytag: member="itpp::Modulator::get_bits2symbols" ref="a8186f0e837fd3d440a6acb7a0225d35" args="() const " -->
361<div class="memitem">
362<div class="memproto">
363<div class="memtemplate">
364template&lt;typename T&gt; </div>
365      <table class="memname">
366        <tr>
367          <td class="memname">virtual ivec <a class="el" href="classitpp_1_1Modulator.html">itpp::Modulator</a>&lt; T &gt;::get_bits2symbols           </td>
368          <td>(</td>
369          <td class="paramname">          </td>
370          <td>&nbsp;)&nbsp;</td>
371          <td> const<code> [inline, virtual]</code></td>
372        </tr>
373      </table>
374</div>
375<div class="memdoc">
376
377<p>
378Get the bitmap, which maps input bits into symbols.
379<p>
380The mapping is done as follows. An input bit sequence in decimal notation is used for indexing the <code>bits2symbols</code> table. The indexing result denotes the symbol to be used from the <code>symbols</code> table, e.g.:<p>
381<div class="fragment"><pre class="fragment"> PSK <a class="code" href="group__miscfunc.html#g441f466a2b056fe5f2b05fcd894c472f" title="Calculates the modulus, i.e. the signed reminder after division.">mod</a>(8); <span class="comment">// assume 8-PSK modulator</span>
382 cvec sym =  <a class="code" href="group__miscfunc.html#g441f466a2b056fe5f2b05fcd894c472f" title="Calculates the modulus, i.e. the signed reminder after division.">mod</a>.get_symbols();
383 ivec bits2sym = <a class="code" href="group__miscfunc.html#g441f466a2b056fe5f2b05fcd894c472f" title="Calculates the modulus, i.e. the signed reminder after division.">mod</a>.get_bits2symbols();
384 bvec in_bits = <span class="stringliteral">"100"</span> <span class="comment">// input bits</span>
385 <span class="keywordtype">int</span> d = <a class="code" href="group__convertfunc.html#g698adf78bc0f9d36fd5987bc87d543fa" title="Convert a bvec to decimal int with the first bit as MSB if msb_first == true.">bin2dec</a>(in_bits); <span class="comment">// decimal representation of in_bits = 4</span>
386 <span class="comment">// mapping of d into PSK symbol using bits2sym and sym tables</span>
387 std::complex&lt;double&gt; out_symbol = sym(bits2sym(d));
388</pre></div> 
389</div>
390</div><p>
391<hr>The documentation for this class was generated from the following file:<ul>
392<li><a class="el" href="modulator_8h-source.html">modulator.h</a></ul>
393</div>
394<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:19 2009 for mixpp by&nbsp;
395<a href="http://www.doxygen.org/index.html">
396<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
397</body>
398</html>
Note: See TracBrowser for help on using the browser.