/usr/share/doc/libitpp-dev/html/spread.html is in libitpp-doc 4.3.1-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>Welcome to IT++!</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" href="favicon.ico">
</head>
<body>
<div style="width: 100%; height: 40px; background-color: #ffff00; border: 1px solid #b0b0b0; margin: 5px 5px 5px 0; padding: 2px;">
<a href="http://itpp.sourceforge.net"><img src="itpp_logo.png" alt="IT++ Logo" style="float: left; border: 0;"></a>
</div>
<!-- Generated by Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main Page</span></a></li>
<li class="current"><a href="pages.html"><span>Related Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<div class="left">
<form id="FSearchBox" action="search.php" method="get">
<img id="MSearchSelect" src="search/mag.png" alt=""/>
<input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"/>
</form>
</div><div class="right"></div>
</div>
</li>
</ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Simulation of a Multicode CDMA system on an AWGN channel </div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>In this example we will introduce the multi-code spreading class <code>Multicode_Spread_2d</code>. This is the most general spreading class availiable in it++. Different spreading codes may be assigned to the I and Q branches. The number of multiple spreading codes and the spreading factor is determined by the number of rows and collumns respectively that is used when calling the member function set_codes. In this example we will use four Hadamard sequenced of length four, and the same spreading sequences will be used for the I and Q brances.</p>
<div class="fragment"><div class="line"><span class="preprocessor">#include <<a class="code" href="itcomm_8h.html">itpp/itcomm.h</a>></span></div><div class="line"></div><div class="line"><span class="keyword">using namespace </span><a class="code" href="namespaceitpp.html">itpp</a>;</div><div class="line"></div><div class="line"><span class="comment">//These lines are needed for use of cout and endl</span></div><div class="line"><span class="keyword">using</span> std::cout;</div><div class="line"><span class="keyword">using</span> std::endl;</div><div class="line"></div><div class="line"><span class="keywordtype">int</span> main()</div><div class="line">{</div><div class="line"> <span class="comment">//Scalars:</span></div><div class="line"> <span class="keywordtype">int</span> SF, Ncode, sc, i, j, NumOfBits, MaxIterations, MaxNrOfErrors, MinNrOfErrors;</div><div class="line"> <span class="keywordtype">double</span> Eb;</div><div class="line"></div><div class="line"> <span class="comment">//Vectors and matrixes:</span></div><div class="line"> vec EbN0dB, EbN0, N0, ber;</div><div class="line"> smat all_codes, spread_codesI, spread_codesQ;</div><div class="line"> bvec transmited_bits, received_bits;</div><div class="line"> cvec transmited_symbols, received_symbols, transmited_chips, received_chips;</div><div class="line"></div><div class="line"> <span class="comment">//Classes:</span></div><div class="line"> <a class="code" href="classitpp_1_1Multicode__Spread__2d.html">Multicode_Spread_2d</a> mc_spread;</div><div class="line"> <a class="code" href="classitpp_1_1AWGN__Channel.html">AWGN_Channel</a> channel;</div><div class="line"> <a class="code" href="classitpp_1_1QPSK.html">QPSK</a> qpsk;</div><div class="line"> <a class="code" href="classitpp_1_1BERC.html">BERC</a> berc;</div><div class="line"></div><div class="line"> <span class="comment">//Initialize the spreading:</span></div><div class="line"> SF = 4; <span class="comment">//The spreading factor is 4</span></div><div class="line"> Ncode = 4; <span class="comment">//Use all four codes in the multi-code spreader</span></div><div class="line"> all_codes = <a class="code" href="group__convertfunc.html#gac7c855f55a10bf3affdb26dbda8242b4">to_smat</a>(<a class="code" href="group__specmat.html#ga8ce5cf3016addfef54c999891116b7ef">hadamard</a>(SF)); <span class="comment">//Calculate the spreading codes</span></div><div class="line"></div><div class="line"> <span class="comment">//Set the spreading codes:</span></div><div class="line"> spread_codesI.set_size(Ncode, SF, <span class="keyword">false</span>);</div><div class="line"> spread_codesQ.set_size(Ncode, SF, <span class="keyword">false</span>);</div><div class="line"> <span class="keywordflow">for</span> (sc = 0; sc < Ncode; sc++) {</div><div class="line"> spread_codesI.set_row(sc, all_codes.get_row(sc));</div><div class="line"> spread_codesQ.set_row(sc, all_codes.get_row(sc));</div><div class="line"> }</div><div class="line"> mc_spread.<a class="code" href="classitpp_1_1Multicode__Spread__2d.html#aa77a0c16beadaa6e31824140a15bebce">set_codes</a>(<a class="code" href="group__convertfunc.html#ga790487f584fdef1d3ee0889fa4986ffc">to_mat</a>(spread_codesI), <a class="code" href="group__convertfunc.html#ga790487f584fdef1d3ee0889fa4986ffc">to_mat</a>(spread_codesQ));</div><div class="line"></div><div class="line"> <span class="comment">//Specify simulation specific variables:</span></div><div class="line"> EbN0dB = <a class="code" href="group__specmat.html#ga00d68c6d3fa03dee1c8a03670dc574f4">linspace</a>(-2, 14, 17);</div><div class="line"> EbN0 = <a class="code" href="group__logexpfunc.html#ga0c42d158b1f623f9b72c1ccde7e2fd09">pow</a>(10, EbN0dB / 10);</div><div class="line"> Eb = 1.0;</div><div class="line"> N0 = Eb * <a class="code" href="group__logexpfunc.html#ga0c42d158b1f623f9b72c1ccde7e2fd09">pow</a>(EbN0, -1.0);</div><div class="line"> NumOfBits = 50000;</div><div class="line"> MaxIterations = 10;</div><div class="line"> MaxNrOfErrors = 200;</div><div class="line"> MinNrOfErrors = 5;</div><div class="line"> ber.set_size(EbN0dB.size(), <span class="keyword">false</span>);</div><div class="line"> ber.clear();</div><div class="line"></div><div class="line"> <span class="comment">//Randomize the random number generators:</span></div><div class="line"> <a class="code" href="group__randgen.html#ga001a62b1a1e3092d3bc60f71c95208cd">RNG_randomize</a>();</div><div class="line"></div><div class="line"> <span class="keywordflow">for</span> (i = 0; i < EbN0dB.length(); i++) {</div><div class="line"></div><div class="line"> cout << endl << <span class="stringliteral">"Simulating point nr "</span> << i + 1 << endl;</div><div class="line"> berc.<a class="code" href="classitpp_1_1BERC.html#a3b575cfbe8dd194c2cd51a6aa52651e5">clear</a>();</div><div class="line"> channel.<a class="code" href="classitpp_1_1AWGN__Channel.html#aedf43a1a192a6c474ef915c297e9fcbb">set_noise</a>(N0(i) / 2.0);</div><div class="line"></div><div class="line"> <span class="keywordflow">for</span> (j = 0; j < MaxIterations; j++) {</div><div class="line"></div><div class="line"> transmited_bits = <a class="code" href="group__randgen.html#ga5aa06887cf1fd3301b040987924068f0">randb</a>(NumOfBits);</div><div class="line"> transmited_symbols = qpsk.<a class="code" href="classitpp_1_1Modulator.html#a53826bf7e0ec83b99592235b0c2f6235">modulate_bits</a>(transmited_bits);</div><div class="line"></div><div class="line"> <span class="comment">//This is where we do the multi-code spreading:</span></div><div class="line"> transmited_chips = mc_spread.<a class="code" href="classitpp_1_1Multicode__Spread__2d.html#a17bb74ea4c88fe0ffd565b9020dede28">spread</a>(transmited_symbols);</div><div class="line"></div><div class="line"> received_chips = channel(transmited_chips);</div><div class="line"></div><div class="line"> <span class="comment">//The multi-code despreading:</span></div><div class="line"> <span class="comment">//The second argument tells the despreader that the offset is zero chips.</span></div><div class="line"> <span class="comment">//This offset is usefull on channels with delay.</span></div><div class="line"> received_symbols = mc_spread.<a class="code" href="classitpp_1_1Multicode__Spread__2d.html#ad191b52b55d0306fd7e591a299b4d94d">despread</a>(received_chips, 0);</div><div class="line"></div><div class="line"> received_bits = qpsk.<a class="code" href="classitpp_1_1PSK.html#aa3b14b2e7174454ddd1270915161bb4e">demodulate_bits</a>(received_symbols);</div><div class="line"></div><div class="line"> berc.<a class="code" href="classitpp_1_1BERC.html#a539b0c989badff3027d97e4693fc9cd7">count</a>(transmited_bits, received_bits);</div><div class="line"> ber(i) = berc.<a class="code" href="classitpp_1_1BERC.html#af17d5f534ba34558d3632a98f29f0519">get_errorrate</a>();</div><div class="line"></div><div class="line"> cout << <span class="stringliteral">" Itteration "</span> << j + 1 << <span class="stringliteral">": ber = "</span> << berc.<a class="code" href="classitpp_1_1BERC.html#af17d5f534ba34558d3632a98f29f0519">get_errorrate</a>() << endl;</div><div class="line"> <span class="keywordflow">if</span> (berc.<a class="code" href="classitpp_1_1BERC.html#a02e757f28e87003404ad0d4aec1e44a6">get_errors</a>() > MaxNrOfErrors) {</div><div class="line"> cout << <span class="stringliteral">"Breaking on point "</span> << i + 1 << <span class="stringliteral">" with "</span> << berc.<a class="code" href="classitpp_1_1BERC.html#a02e757f28e87003404ad0d4aec1e44a6">get_errors</a>() << <span class="stringliteral">" errors."</span> << endl;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordflow">if</span> (berc.<a class="code" href="classitpp_1_1BERC.html#a02e757f28e87003404ad0d4aec1e44a6">get_errors</a>() < MinNrOfErrors) {</div><div class="line"> cout << <span class="stringliteral">"Exiting Simulation on point "</span> << i + 1 << endl;</div><div class="line"> <span class="keywordflow">break</span>;</div><div class="line"> }</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">//Print results:</span></div><div class="line"> cout << endl;</div><div class="line"> cout << <span class="stringliteral">"EbN0dB = "</span> << EbN0dB << endl;</div><div class="line"> cout << <span class="stringliteral">"ber = "</span> << ber << endl;</div><div class="line"></div><div class="line"> <span class="comment">//Exit program:</span></div><div class="line"> <span class="keywordflow">return</span> 0;</div><div class="line"></div><div class="line">}</div><div class="line"></div></div><!-- fragment --><p>A typical run of this program will look like this:</p>
<div class="fragment"><div class="line"></div><div class="line">Simulating point nr 1</div><div class="line"> Itteration 1: ber = 0.13016</div><div class="line">Breaking on point 1 with 6508 errors.</div><div class="line"></div><div class="line">Simulating point nr 2</div><div class="line"> Itteration 1: ber = 0.103</div><div class="line">Breaking on point 2 with 5150 errors.</div><div class="line"></div><div class="line">Simulating point nr 3</div><div class="line"> Itteration 1: ber = 0.07886</div><div class="line">Breaking on point 3 with 3943 errors.</div><div class="line"></div><div class="line">Simulating point nr 4</div><div class="line"> Itteration 1: ber = 0.05534</div><div class="line">Breaking on point 4 with 2767 errors.</div><div class="line"></div><div class="line">Simulating point nr 5</div><div class="line"> Itteration 1: ber = 0.03822</div><div class="line">Breaking on point 5 with 1911 errors.</div><div class="line"></div><div class="line">Simulating point nr 6</div><div class="line"> Itteration 1: ber = 0.02388</div><div class="line">Breaking on point 6 with 1194 errors.</div><div class="line"></div><div class="line">Simulating point nr 7</div><div class="line"> Itteration 1: ber = 0.01316</div><div class="line">Breaking on point 7 with 658 errors.</div><div class="line"></div><div class="line">Simulating point nr 8</div><div class="line"> Itteration 1: ber = 0.00586</div><div class="line">Breaking on point 8 with 293 errors.</div><div class="line"></div><div class="line">Simulating point nr 9</div><div class="line"> Itteration 1: ber = 0.0027</div><div class="line"> Itteration 2: ber = 0.00247</div><div class="line">Breaking on point 9 with 247 errors.</div><div class="line"></div><div class="line">Simulating point nr 10</div><div class="line"> Itteration 1: ber = 0.00094</div><div class="line"> Itteration 2: ber = 0.00086</div><div class="line"> Itteration 3: ber = 0.00076</div><div class="line"> Itteration 4: ber = 0.00077</div><div class="line"> Itteration 5: ber = 0.0008</div><div class="line"> Itteration 6: ber = 0.000796667</div><div class="line">Breaking on point 10 with 239 errors.</div><div class="line"></div><div class="line">Simulating point nr 11</div><div class="line"> Itteration 1: ber = 0.00016</div><div class="line"> Itteration 2: ber = 0.00016</div><div class="line"> Itteration 3: ber = 0.000186667</div><div class="line"> Itteration 4: ber = 0.000175</div><div class="line"> Itteration 5: ber = 0.000172</div><div class="line"> Itteration 6: ber = 0.000173333</div><div class="line"> Itteration 7: ber = 0.000162857</div><div class="line"> Itteration 8: ber = 0.00017</div><div class="line"> Itteration 9: ber = 0.000166667</div><div class="line"> Itteration 10: ber = 0.000172</div><div class="line"></div><div class="line">Simulating point nr 12</div><div class="line"> Itteration 1: ber = 4e-05</div><div class="line"> Itteration 2: ber = 2e-05</div><div class="line"> Itteration 3: ber = 2.66667e-05</div><div class="line"> Itteration 4: ber = 2.5e-05</div><div class="line"> Itteration 5: ber = 2e-05</div><div class="line"> Itteration 6: ber = 2e-05</div><div class="line"> Itteration 7: ber = 3.14286e-05</div><div class="line"> Itteration 8: ber = 2.75e-05</div><div class="line"> Itteration 9: ber = 2.44444e-05</div><div class="line"> Itteration 10: ber = 2.6e-05</div><div class="line"></div><div class="line">Simulating point nr 13</div><div class="line"> Itteration 1: ber = 0</div><div class="line"> Itteration 2: ber = 0</div><div class="line"> Itteration 3: ber = 0</div><div class="line"> Itteration 4: ber = 0</div><div class="line"> Itteration 5: ber = 0</div><div class="line"> Itteration 6: ber = 0</div><div class="line"> Itteration 7: ber = 0</div><div class="line"> Itteration 8: ber = 2.5e-06</div><div class="line"> Itteration 9: ber = 2.22222e-06</div><div class="line"> Itteration 10: ber = 2e-06</div><div class="line">Exiting Simulation on point 13</div><div class="line"></div><div class="line">EbN0dB = [-2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]</div><div class="line">ber = [0.13016 0.103 0.07886 0.05534 0.03822 0.02388 0.01316 0.00586 0.00247 0.000796667 0.000172 2.6e-05 2e-06 0 0 0 0]</div></div><!-- fragment --><p>Use copy-and-paste to insert the variables <code>EbN0dB</code> and <code>ber</code> into Matlab and plot the result. </p>
</div></div><!-- contents -->
<div style="clear: both; width: 100%; height: 31px; background-color: #ffff00; border: 1px solid #b0b0b0; margin: 5px 5px 5px 0; padding: 2px;">
<p style="padding-left: 10px; font-size: 85%;">Generated on Tue Aug 2 2016 16:13:35 for IT++ by <a href="http://www.doxygen.org/index.html">Doxygen</a> 1.8.11</p>
</div>
</body>
</html>
|