root/doc/html/classitpp_1_1TDL__Channel.html @ 354

Revision 353, 55.5 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::TDL_Channel 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_1TDL__Channel.html">TDL_Channel</a>
68  </div>
69</div>
70<div class="contents">
71<h1>itpp::TDL_Channel Class Reference<br>
72<small>
73[<a class="el" href="group__channels.html">Channel Modeling</a>]</small>
74</h1><!-- doxytag: class="itpp::TDL_Channel" -->Tapped Delay Line (TDL) channel model. 
75<a href="#_details">More...</a>
76<p>
77<code>#include &lt;<a class="el" href="channel_8h-source.html">channel.h</a>&gt;</code>
78<p>
79
80<p>
81<a href="classitpp_1_1TDL__Channel-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="6953b926d31092c1f7a1a4edf3af552f"></a><!-- doxytag: member="itpp::TDL_Channel::TDL_Channel" ref="6953b926d31092c1f7a1a4edf3af552f" args="(const vec &amp;avg_power_dB=&quot;0&quot;, const ivec &amp;delay_prof=&quot;0&quot;)" -->
85&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#6953b926d31092c1f7a1a4edf3af552f">TDL_Channel</a> (const vec &amp;avg_power_dB=&quot;0&quot;, const ivec &amp;delay_prof=&quot;0&quot;)</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="b6a0f1922c2b508df05bc29999cfda53"></a><!-- doxytag: member="itpp::TDL_Channel::TDL_Channel" ref="b6a0f1922c2b508df05bc29999cfda53" args="(const Channel_Specification &amp;channel_spec, double sampling_time)" -->
89&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#b6a0f1922c2b508df05bc29999cfda53">TDL_Channel</a> (const <a class="el" href="classitpp_1_1Channel__Specification.html">Channel_Specification</a> &amp;channel_spec, double sampling_time)</td></tr>
90
91<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor with defined <a class="el" href="classitpp_1_1Channel__Specification.html" title="General specification of a time-domain multipath channel.">Channel_Specification</a>. Delay profile will be discretized with <em>sampling_time</em> in seconds. <br></td></tr>
92<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="71a960187912ab176c7d82e0582b351c"></a><!-- doxytag: member="itpp::TDL_Channel::~TDL_Channel" ref="71a960187912ab176c7d82e0582b351c" args="()" -->
93virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#71a960187912ab176c7d82e0582b351c">~TDL_Channel</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="2c797d31786df97d2cb7b8ae1b99344b"></a><!-- doxytag: member="itpp::TDL_Channel::set_channel_profile" ref="2c797d31786df97d2cb7b8ae1b99344b" args="(const vec &amp;avg_power_dB, const ivec &amp;delay_prof)" -->
97void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#2c797d31786df97d2cb7b8ae1b99344b">set_channel_profile</a> (const vec &amp;avg_power_dB, const ivec &amp;delay_prof)</td></tr>
98
99<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set both average power profile in dB and power delay profile in samples. <br></td></tr>
100<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f05d94b37173d1bce7dc22e68b3ce4a7"></a><!-- doxytag: member="itpp::TDL_Channel::set_channel_profile_uniform" ref="f05d94b37173d1bce7dc22e68b3ce4a7" args="(int no_taps)" -->
101void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#f05d94b37173d1bce7dc22e68b3ce4a7">set_channel_profile_uniform</a> (int no_taps)</td></tr>
102
103<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set channel profile to uniform with <em>no_taps</em> taps. <br></td></tr>
104<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b29121e3d449fd5e8bfd9ac04ed8d88c"></a><!-- doxytag: member="itpp::TDL_Channel::set_channel_profile_exponential" ref="b29121e3d449fd5e8bfd9ac04ed8d88c" args="(int no_taps)" -->
105void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#b29121e3d449fd5e8bfd9ac04ed8d88c">set_channel_profile_exponential</a> (int no_taps)</td></tr>
106
107<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set channel profile to exponential with <em>no_taps</em> taps. <br></td></tr>
108<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="34f469d339b3c161f8631793e3ca5ef9"></a><!-- doxytag: member="itpp::TDL_Channel::set_channel_profile" ref="34f469d339b3c161f8631793e3ca5ef9" args="(const Channel_Specification &amp;channel_spec, double sampling_time)" -->
109void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#34f469d339b3c161f8631793e3ca5ef9">set_channel_profile</a> (const <a class="el" href="classitpp_1_1Channel__Specification.html">Channel_Specification</a> &amp;channel_spec, double sampling_time)</td></tr>
110
111<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set channel profile using <a class="el" href="classitpp_1_1Channel__Specification.html" title="General specification of a time-domain multipath channel.">Channel_Specification</a>. Delay profile will be discretized with <em>sampling_time</em> in seconds. <br></td></tr>
112<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2a198abb6acca0ac337b3943e535a823"></a><!-- doxytag: member="itpp::TDL_Channel::set_correlated_method" ref="2a198abb6acca0ac337b3943e535a823" args="(CORRELATED_METHOD method)" -->
113void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#2a198abb6acca0ac337b3943e535a823">set_correlated_method</a> (<a class="el" href="group__channels.html#g0875516a69d533c89b49a43c2b1b987d">CORRELATED_METHOD</a> <a class="el" href="classitpp_1_1TDL__Channel.html#31dd874ddb75acb467ec68160e19a1b6">method</a>)</td></tr>
114
115<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the fading generation method to <em>method</em>. <br></td></tr>
116<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="63ffed6eafdaa7f1f197e1284f98e475"></a><!-- doxytag: member="itpp::TDL_Channel::set_fading_type" ref="63ffed6eafdaa7f1f197e1284f98e475" args="(FADING_TYPE fading_type)" -->
117void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#63ffed6eafdaa7f1f197e1284f98e475">set_fading_type</a> (<a class="el" href="group__channels.html#gf331f50064dab0a357caba2a0cb02b76">FADING_TYPE</a> <a class="el" href="classitpp_1_1TDL__Channel.html#8f3f4349e8a8a33ce5d9709779f5a405">fading_type</a>)</td></tr>
118
119<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set fading type to one of <em>Independent</em>, <em>Static</em> or <em>Correlated</em>. <br></td></tr>
120<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8502b1dd0dfb0d7b438087739ab3b92d"></a><!-- doxytag: member="itpp::TDL_Channel::set_norm_doppler" ref="8502b1dd0dfb0d7b438087739ab3b92d" args="(double norm_doppler)" -->
121void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#8502b1dd0dfb0d7b438087739ab3b92d">set_norm_doppler</a> (double norm_doppler)</td></tr>
122
123<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set normalized Doppler rate. A <em>Correlated</em> fading type will be used. <br></td></tr>
124<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4e9ef69abb97dd05a2ec406d5012dfef"></a><!-- doxytag: member="itpp::TDL_Channel::set_LOS" ref="4e9ef69abb97dd05a2ec406d5012dfef" args="(const vec &amp;relative_power, const vec &amp;relative_doppler=&quot;&quot;)" -->
125void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#4e9ef69abb97dd05a2ec406d5012dfef">set_LOS</a> (const vec &amp;relative_power, const vec &amp;relative_doppler=&quot;&quot;)</td></tr>
126
127<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set LOS parameters for each tap. LOS Doppler will be set to 0.7 by default. <br></td></tr>
128<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="573a0608043a5db81951bbb56e58051a"></a><!-- doxytag: member="itpp::TDL_Channel::set_LOS_power" ref="573a0608043a5db81951bbb56e58051a" args="(const vec &amp;relative_power)" -->
129void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#573a0608043a5db81951bbb56e58051a">set_LOS_power</a> (const vec &amp;relative_power)</td></tr>
130
131<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set LOS power for each tap. LOS Doppler will be set to 0.7 by default. <br></td></tr>
132<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="78372f81d61551c6e9ebf9810debcad0"></a><!-- doxytag: member="itpp::TDL_Channel::set_LOS_doppler" ref="78372f81d61551c6e9ebf9810debcad0" args="(const vec &amp;relative_doppler)" -->
133void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#78372f81d61551c6e9ebf9810debcad0">set_LOS_doppler</a> (const vec &amp;relative_doppler)</td></tr>
134
135<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set LOS doppler for each tap. A <em>Correlated</em> fading type will be used. <br></td></tr>
136<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e79f49ef36b70ec9cb80f5b3cd55ca0c"></a><!-- doxytag: member="itpp::TDL_Channel::set_doppler_spectrum" ref="e79f49ef36b70ec9cb80f5b3cd55ca0c" args="(const DOPPLER_SPECTRUM *tap_spectrum)" -->
137void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e79f49ef36b70ec9cb80f5b3cd55ca0c">set_doppler_spectrum</a> (const <a class="el" href="group__channels.html#gfd030225d513c962191cbce565337fd8">DOPPLER_SPECTRUM</a> *tap_spectrum)</td></tr>
138
139<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set doppler spectrum for each tap in the channel profile. <em>Rice_MEDS</em> method will be used. <br></td></tr>
140<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="798e116747b6f1c3153199f69e1103d9"></a><!-- doxytag: member="itpp::TDL_Channel::set_doppler_spectrum" ref="798e116747b6f1c3153199f69e1103d9" args="(int tap_number, DOPPLER_SPECTRUM tap_spectrum)" -->
141void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#798e116747b6f1c3153199f69e1103d9">set_doppler_spectrum</a> (int tap_number, <a class="el" href="group__channels.html#gfd030225d513c962191cbce565337fd8">DOPPLER_SPECTRUM</a> tap_spectrum)</td></tr>
142
143<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set doppler spectrum of tap <em>tap_number</em>. <em>Rice_MEDS</em> method will be used. <br></td></tr>
144<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5fc8901f632abc5806da9c3819d1be7d"></a><!-- doxytag: member="itpp::TDL_Channel::set_no_frequencies" ref="5fc8901f632abc5806da9c3819d1be7d" args="(int no_freq)" -->
145void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#5fc8901f632abc5806da9c3819d1be7d">set_no_frequencies</a> (int no_freq)</td></tr>
146
147<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set number of sine frequencies. <em>Rice_MEDS</em> method will be used. <br></td></tr>
148<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d57abed39565c38b3a990db4fc4e0837"></a><!-- doxytag: member="itpp::TDL_Channel::set_time_offset" ref="d57abed39565c38b3a990db4fc4e0837" args="(int offset)" -->
149void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#d57abed39565c38b3a990db4fc4e0837">set_time_offset</a> (int offset)</td></tr>
150
151<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set fading generators' time offset in samples. A <em>Correlated</em> fading type will be used. <br></td></tr>
152<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6dfe0071b9de039523307f580683ff89"></a><!-- doxytag: member="itpp::TDL_Channel::shift_time_offset" ref="6dfe0071b9de039523307f580683ff89" args="(int no_samples)" -->
153void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#6dfe0071b9de039523307f580683ff89">shift_time_offset</a> (int no_samples)</td></tr>
154
155<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Shift fading generators' time offset. A <em>Correlated</em> fading type will be used. <br></td></tr>
156<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a141e865d9059c954c0750f2f090a21e"></a><!-- doxytag: member="itpp::TDL_Channel::set_filter_length" ref="a141e865d9059c954c0750f2f090a21e" args="(int filter_length)" -->
157void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#a141e865d9059c954c0750f2f090a21e">set_filter_length</a> (int <a class="el" href="classitpp_1_1TDL__Channel.html#de665383426f68ba54be93be024a0842">filter_length</a>)</td></tr>
158
159<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set fading generator filter length. <em>FIR</em> method will be used. <br></td></tr>
160<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="172fbe5d69b75fc950af0e5a9c5c3e39"></a><!-- doxytag: member="itpp::TDL_Channel::taps" ref="172fbe5d69b75fc950af0e5a9c5c3e39" args="() const " -->
161int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#172fbe5d69b75fc950af0e5a9c5c3e39">taps</a> () const </td></tr>
162
163<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of channel taps. <br></td></tr>
164<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d166229e1b0bbfa31c13d9ec6ad2d8bc"></a><!-- doxytag: member="itpp::TDL_Channel::get_channel_profile" ref="d166229e1b0bbfa31c13d9ec6ad2d8bc" args="(vec &amp;avg_power_dB, ivec &amp;delay_prof) const " -->
165void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#d166229e1b0bbfa31c13d9ec6ad2d8bc">get_channel_profile</a> (vec &amp;avg_power_dB, ivec &amp;delay_prof) const </td></tr>
166
167<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get both average power profile in dB and power delay profile in samples. <br></td></tr>
168<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ff9a7d23df369d4da63ad1aa6712b875"></a><!-- doxytag: member="itpp::TDL_Channel::get_avg_power_dB" ref="ff9a7d23df369d4da63ad1aa6712b875" args="() const " -->
169vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#ff9a7d23df369d4da63ad1aa6712b875">get_avg_power_dB</a> () const </td></tr>
170
171<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return power profile in dB. <br></td></tr>
172<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9f43d8a1cf923b1713b36106c099e5fb"></a><!-- doxytag: member="itpp::TDL_Channel::get_delay_prof" ref="9f43d8a1cf923b1713b36106c099e5fb" args="() const " -->
173ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#9f43d8a1cf923b1713b36106c099e5fb">get_delay_prof</a> () const </td></tr>
174
175<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return delay profile in samples. <br></td></tr>
176<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="33f676f0c4640645bab67fb26249fded"></a><!-- doxytag: member="itpp::TDL_Channel::get_correlated_method" ref="33f676f0c4640645bab67fb26249fded" args="() const " -->
177<a class="el" href="group__channels.html#g0875516a69d533c89b49a43c2b1b987d">CORRELATED_METHOD</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#33f676f0c4640645bab67fb26249fded">get_correlated_method</a> () const </td></tr>
178
179<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return fading generation method. <br></td></tr>
180<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d0b9943f587231c159063f59f4a1cdeb"></a><!-- doxytag: member="itpp::TDL_Channel::get_fading_type" ref="d0b9943f587231c159063f59f4a1cdeb" args="() const " -->
181<a class="el" href="group__channels.html#gf331f50064dab0a357caba2a0cb02b76">FADING_TYPE</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#d0b9943f587231c159063f59f4a1cdeb">get_fading_type</a> () const </td></tr>
182
183<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return fading type. <br></td></tr>
184<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6cda5bb12b28b7628fe5f44555d25457"></a><!-- doxytag: member="itpp::TDL_Channel::get_norm_doppler" ref="6cda5bb12b28b7628fe5f44555d25457" args="() const " -->
185double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#6cda5bb12b28b7628fe5f44555d25457">get_norm_doppler</a> () const </td></tr>
186
187<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return normalized doppler rate. <br></td></tr>
188<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="534ebadba2ad8e8658e1fe23a234cc38"></a><!-- doxytag: member="itpp::TDL_Channel::get_LOS_power" ref="534ebadba2ad8e8658e1fe23a234cc38" args="() const " -->
189vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#534ebadba2ad8e8658e1fe23a234cc38">get_LOS_power</a> () const </td></tr>
190
191<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get relative power (Rice factor) for each tap. <br></td></tr>
192<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c7ea04399928b644d9d16a7fd35a1d20"></a><!-- doxytag: member="itpp::TDL_Channel::get_LOS_doppler" ref="c7ea04399928b644d9d16a7fd35a1d20" args="() const " -->
193vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#c7ea04399928b644d9d16a7fd35a1d20">get_LOS_doppler</a> () const </td></tr>
194
195<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get relative Doppler (to the maximum Doppler) for each tap. <br></td></tr>
196<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b2d62a3bb11ad2aa42b0386f4c9b8fb7"></a><!-- doxytag: member="itpp::TDL_Channel::get_LOS_power" ref="b2d62a3bb11ad2aa42b0386f4c9b8fb7" args="(int tap_number) const " -->
197double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#b2d62a3bb11ad2aa42b0386f4c9b8fb7">get_LOS_power</a> (int tap_number) const </td></tr>
198
199<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get relative power (Rice factor) for tap <em>tap_number</em>. <br></td></tr>
200<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="beb2f3bc95cc083c809e470502dc4224"></a><!-- doxytag: member="itpp::TDL_Channel::get_LOS_doppler" ref="beb2f3bc95cc083c809e470502dc4224" args="(int tap_number) const " -->
201double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#beb2f3bc95cc083c809e470502dc4224">get_LOS_doppler</a> (int tap_number) const </td></tr>
202
203<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get relative Doppler (to the maximum Doppler) for tap <em>tap_number</em>. <br></td></tr>
204<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3465144be99bfd8878206307c8bba95"></a><!-- doxytag: member="itpp::TDL_Channel::get_no_frequencies" ref="e3465144be99bfd8878206307c8bba95" args="() const " -->
205int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e3465144be99bfd8878206307c8bba95">get_no_frequencies</a> () const </td></tr>
206
207<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the minimum number of frequencies used in Rice MEDS fading generator. <br></td></tr>
208<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f9847cf5ec7f8f2d4a75292bb0c98610"></a><!-- doxytag: member="itpp::TDL_Channel::get_time_offset" ref="f9847cf5ec7f8f2d4a75292bb0c98610" args="() const " -->
209double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#f9847cf5ec7f8f2d4a75292bb0c98610">get_time_offset</a> () const </td></tr>
210
211<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get fading generators' time ofset. <br></td></tr>
212<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="25709163fd22c7e53b0501443f16bfd2"></a><!-- doxytag: member="itpp::TDL_Channel::calc_mean_excess_delay" ref="25709163fd22c7e53b0501443f16bfd2" args="() const " -->
213double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#25709163fd22c7e53b0501443f16bfd2">calc_mean_excess_delay</a> () const </td></tr>
214
215<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate mean excess delay in samples. <br></td></tr>
216<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="31ea52da06cbc07b3958356bce3b1baa"></a><!-- doxytag: member="itpp::TDL_Channel::calc_rms_delay_spread" ref="31ea52da06cbc07b3958356bce3b1baa" args="() const " -->
217double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#31ea52da06cbc07b3958356bce3b1baa">calc_rms_delay_spread</a> () const </td></tr>
218
219<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate RMS delay spread in samples. <br></td></tr>
220<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2e70204dcf3fbd26ca9911575a4aa858"></a><!-- doxytag: member="itpp::TDL_Channel::init" ref="2e70204dcf3fbd26ca9911575a4aa858" args="()" -->
221void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#2e70204dcf3fbd26ca9911575a4aa858">init</a> ()</td></tr>
222
223<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize all fading generators. Automatically invoked in <a class="el" href="classitpp_1_1TDL__Channel.html#e8892db45e45f63c1fd228baf94b0222" title="Generate no_samples values of the channel.">generate()</a> or <a class="el" href="classitpp_1_1TDL__Channel.html#fa6ec93d1d4911a9a4b9550977db4d02" title="Generate channel coefficients and filter the input. Return output and channel coefficients...">filter()</a> functions. <br></td></tr>
224<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e8892db45e45f63c1fd228baf94b0222"></a><!-- doxytag: member="itpp::TDL_Channel::generate" ref="e8892db45e45f63c1fd228baf94b0222" args="(int no_samples, Array&lt; cvec &gt; &amp;channel_coeff)" -->
225void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e8892db45e45f63c1fd228baf94b0222">generate</a> (int no_samples, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff)</td></tr>
226
227<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate <em>no_samples</em> values of the channel. <br></td></tr>
228<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="80440b5b7bd01cbf8a1c647bb0104944"></a><!-- doxytag: member="itpp::TDL_Channel::generate" ref="80440b5b7bd01cbf8a1c647bb0104944" args="(int no_samples, cmat &amp;channel_coeff)" -->
229void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#80440b5b7bd01cbf8a1c647bb0104944">generate</a> (int no_samples, cmat &amp;channel_coeff)</td></tr>
230
231<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate <em>no_samples</em> values of the channel. Returns the matrix with one tap per column. <br></td></tr>
232<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5321f2eef7983f8847b1c99d3807616d"></a><!-- doxytag: member="itpp::TDL_Channel::filter_known_channel" ref="5321f2eef7983f8847b1c99d3807616d" args="(const cvec &amp;input, cvec &amp;output, const Array&lt; cvec &gt; &amp;channel_coeff)" -->
233void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#5321f2eef7983f8847b1c99d3807616d">filter_known_channel</a> (const cvec &amp;input, cvec &amp;output, const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff)</td></tr>
234
235<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classitpp_1_1Filter.html" title="Virtual Filter Base Class.The class is templated as follows:.">Filter</a> the <em>input</em> with the known channel values <em>channel_coeff</em> (e.g. from the generate function). <br></td></tr>
236<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e32dc8b6979fbf916a1e25574b095bc2"></a><!-- doxytag: member="itpp::TDL_Channel::filter_known_channel" ref="e32dc8b6979fbf916a1e25574b095bc2" args="(const cvec &amp;input, cvec &amp;output, const cmat &amp;channel_coeff)" -->
237void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e32dc8b6979fbf916a1e25574b095bc2">filter_known_channel</a> (const cvec &amp;input, cvec &amp;output, const cmat &amp;channel_coeff)</td></tr>
238
239<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classitpp_1_1Filter.html" title="Virtual Filter Base Class.The class is templated as follows:.">Filter</a> the <em>input</em> with the known channel values <em>channel_coeff</em> (e.g. from the generate function). <br></td></tr>
240<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fa6ec93d1d4911a9a4b9550977db4d02"></a><!-- doxytag: member="itpp::TDL_Channel::filter" ref="fa6ec93d1d4911a9a4b9550977db4d02" args="(const cvec &amp;input, cvec &amp;output, Array&lt; cvec &gt; &amp;channel_coeff)" -->
241void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#fa6ec93d1d4911a9a4b9550977db4d02">filter</a> (const cvec &amp;input, cvec &amp;output, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff)</td></tr>
242
243<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
244<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="509b7dbb8153fac66e03ad31338d2dd4"></a><!-- doxytag: member="itpp::TDL_Channel::filter" ref="509b7dbb8153fac66e03ad31338d2dd4" args="(const cvec &amp;input, cvec &amp;output, cmat &amp;channel_coeff)" -->
245void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#509b7dbb8153fac66e03ad31338d2dd4">filter</a> (const cvec &amp;input, cvec &amp;output, cmat &amp;channel_coeff)</td></tr>
246
247<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
248<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="239193990dc0c74269c1ba2643421c65"></a><!-- doxytag: member="itpp::TDL_Channel::filter" ref="239193990dc0c74269c1ba2643421c65" args="(const cvec &amp;input, Array&lt; cvec &gt; &amp;channel_coeff)" -->
249cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#239193990dc0c74269c1ba2643421c65">filter</a> (const cvec &amp;input, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff)</td></tr>
250
251<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
252<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e3dd95efc5ffbe7729e6c93e87820739"></a><!-- doxytag: member="itpp::TDL_Channel::filter" ref="e3dd95efc5ffbe7729e6c93e87820739" args="(const cvec &amp;input, cmat &amp;channel_coeff)" -->
253cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e3dd95efc5ffbe7729e6c93e87820739">filter</a> (const cvec &amp;input, cmat &amp;channel_coeff)</td></tr>
254
255<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
256<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="387feb7265c3954489c32d506b7acbd6"></a><!-- doxytag: member="itpp::TDL_Channel::filter" ref="387feb7265c3954489c32d506b7acbd6" args="(const cvec &amp;input, cvec &amp;output)" -->
257void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#387feb7265c3954489c32d506b7acbd6">filter</a> (const cvec &amp;input, cvec &amp;output)</td></tr>
258
259<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Only return the output. <br></td></tr>
260<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="10cdb64bc00f2f221d734c9337280fdd"></a><!-- doxytag: member="itpp::TDL_Channel::filter" ref="10cdb64bc00f2f221d734c9337280fdd" args="(const cvec &amp;input)" -->
261cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#10cdb64bc00f2f221d734c9337280fdd">filter</a> (const cvec &amp;input)</td></tr>
262
263<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Only return output. <br></td></tr>
264<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f179218475c2fbd7bbaf7eb80fbf7db8"></a><!-- doxytag: member="itpp::TDL_Channel::operator()" ref="f179218475c2fbd7bbaf7eb80fbf7db8" args="(const cvec &amp;input, cvec &amp;output, Array&lt; cvec &gt; &amp;channel_coeff)" -->
265void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#f179218475c2fbd7bbaf7eb80fbf7db8">operator()</a> (const cvec &amp;input, cvec &amp;output, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff)</td></tr>
266
267<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
268<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7a2ec75d001959f6924cf13f5cc5cfb9"></a><!-- doxytag: member="itpp::TDL_Channel::operator()" ref="7a2ec75d001959f6924cf13f5cc5cfb9" args="(const cvec &amp;input, cvec &amp;output, cmat &amp;channel_coeff)" -->
269void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#7a2ec75d001959f6924cf13f5cc5cfb9">operator()</a> (const cvec &amp;input, cvec &amp;output, cmat &amp;channel_coeff)</td></tr>
270
271<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
272<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="93e4cefd0f2f7b30fbf2a8d76bae3722"></a><!-- doxytag: member="itpp::TDL_Channel::operator()" ref="93e4cefd0f2f7b30fbf2a8d76bae3722" args="(const cvec &amp;input, Array&lt; cvec &gt; &amp;channel_coeff)" -->
273cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#93e4cefd0f2f7b30fbf2a8d76bae3722">operator()</a> (const cvec &amp;input, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff)</td></tr>
274
275<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
276<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="22087247345c2c0d88c63d1ef2f74ba0"></a><!-- doxytag: member="itpp::TDL_Channel::operator()" ref="22087247345c2c0d88c63d1ef2f74ba0" args="(const cvec &amp;input, cmat &amp;channel_coeff)" -->
277cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#22087247345c2c0d88c63d1ef2f74ba0">operator()</a> (const cvec &amp;input, cmat &amp;channel_coeff)</td></tr>
278
279<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Return output and channel coefficients. <br></td></tr>
280<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5267cafe7c22fd1a01fdfc29600e0155"></a><!-- doxytag: member="itpp::TDL_Channel::operator()" ref="5267cafe7c22fd1a01fdfc29600e0155" args="(const cvec &amp;input)" -->
281cvec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#5267cafe7c22fd1a01fdfc29600e0155">operator()</a> (const cvec &amp;input)</td></tr>
282
283<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate channel coefficients and filter the <em>input</em>. Only return output. <br></td></tr>
284<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ffd14db9b6d865d8e5f0ad24f04055fc"></a><!-- doxytag: member="itpp::TDL_Channel::calc_impulse_response" ref="ffd14db9b6d865d8e5f0ad24f04055fc" args="(const Array&lt; cvec &gt; &amp;channel_coeff, Array&lt; cvec &gt; &amp;impulse_response)" -->
285void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#ffd14db9b6d865d8e5f0ad24f04055fc">calc_impulse_response</a> (const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;impulse_response)</td></tr>
286
287<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate impulse-response on the supplied channel coefficients (produced by the <a class="el" href="classitpp_1_1TDL__Channel.html#e8892db45e45f63c1fd228baf94b0222" title="Generate no_samples values of the channel.">generate()</a> function). <br></td></tr>
288<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="30e70291ca0531eac4c5114316b66de3"></a><!-- doxytag: member="itpp::TDL_Channel::calc_frequency_response" ref="30e70291ca0531eac4c5114316b66de3" args="(const Array&lt; cvec &gt; &amp;channel_coeff, Array&lt; cvec &gt; &amp;frequency_response, const int fft_size)" -->
289void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#30e70291ca0531eac4c5114316b66de3">calc_frequency_response</a> (const <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;channel_coeff, <a class="el" href="classitpp_1_1Array.html">Array</a>&lt; cvec &gt; &amp;frequency_response, const int fft_size)</td></tr>
290
291<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate frequency-response on the supplied channel coefficients (produced by the <a class="el" href="classitpp_1_1TDL__Channel.html#e8892db45e45f63c1fd228baf94b0222" title="Generate no_samples values of the channel.">generate()</a> function). <br></td></tr>
292<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6b11207b34f781611d48956dfe36fb6"></a><!-- doxytag: member="itpp::TDL_Channel::calc_frequency_response" ref="a6b11207b34f781611d48956dfe36fb6" args="(const cmat &amp;channel_coeff, cmat &amp;frequency_response, const int fft_size)" -->
293void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#a6b11207b34f781611d48956dfe36fb6">calc_frequency_response</a> (const cmat &amp;channel_coeff, cmat &amp;frequency_response, const int fft_size)</td></tr>
294
295<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Calculate frequency-response on the supplied channel coefficients (produced by the <a class="el" href="classitpp_1_1TDL__Channel.html#e8892db45e45f63c1fd228baf94b0222" title="Generate no_samples values of the channel.">generate()</a> function). <br></td></tr>
296<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="316d132618499ce152a6a42bb8003228"></a><!-- doxytag: member="itpp::TDL_Channel::get_sampling_time" ref="316d132618499ce152a6a42bb8003228" args="() const " -->
297double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#316d132618499ce152a6a42bb8003228">get_sampling_time</a> () const </td></tr>
298
299<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return channel sampling time (used for discretization). <br></td></tr>
300<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
301<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#36c0e2b1342e7260055918bc40f90b70">discretize</a> (const vec &amp;delay_profile)</td></tr>
302
303<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Discretize the delay profile with <em>discrete_Ts</em> (Ts). All taps within ((i-0.5)Ts,(i+0.5)Ts] belong to the ith discrete tap.  <a href="#36c0e2b1342e7260055918bc40f90b70"></a><br></td></tr>
304<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
305<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="797720174bd4b07089f09fff05243d85"></a><!-- doxytag: member="itpp::TDL_Channel::init_flag" ref="797720174bd4b07089f09fff05243d85" args="" -->
306bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#797720174bd4b07089f09fff05243d85">init_flag</a></td></tr>
307
308<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Channel ready to produce data. <br></td></tr>
309<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="111d9ae12862a69fcf0f1ad388d1b4bf"></a><!-- doxytag: member="itpp::TDL_Channel::a_prof" ref="111d9ae12862a69fcf0f1ad388d1b4bf" args="" -->
310vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#111d9ae12862a69fcf0f1ad388d1b4bf">a_prof</a></td></tr>
311
312<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Average amplitude of each tap. <br></td></tr>
313<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8403c04165821ec65d6ac0a4d6a39b6d"></a><!-- doxytag: member="itpp::TDL_Channel::d_prof" ref="8403c04165821ec65d6ac0a4d6a39b6d" args="" -->
314ivec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#8403c04165821ec65d6ac0a4d6a39b6d">d_prof</a></td></tr>
315
316<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delay in samples for each tap. <br></td></tr>
317<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="59a3fbbe5581d4b59efa2e0592bc8db0"></a><!-- doxytag: member="itpp::TDL_Channel::los_power" ref="59a3fbbe5581d4b59efa2e0592bc8db0" args="" -->
318vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#59a3fbbe5581d4b59efa2e0592bc8db0">los_power</a></td></tr>
319
320<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Relative power for each Rice component. <br></td></tr>
321<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c2c2867660d28071ac8bcfdcdacda02a"></a><!-- doxytag: member="itpp::TDL_Channel::los_dopp" ref="c2c2867660d28071ac8bcfdcdacda02a" args="" -->
322vec&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#c2c2867660d28071ac8bcfdcdacda02a">los_dopp</a></td></tr>
323
324<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Relative LOS Doppler for each Rice component. <br></td></tr>
325<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="414b894875b8ee8f2d2f849e992d9257"></a><!-- doxytag: member="itpp::TDL_Channel::N_taps" ref="414b894875b8ee8f2d2f849e992d9257" args="" -->
326int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#414b894875b8ee8f2d2f849e992d9257">N_taps</a></td></tr>
327
328<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of taps. <br></td></tr>
329<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="3b243e032ecbb40b1418b6a2b6d9e451"></a><!-- doxytag: member="itpp::TDL_Channel::n_dopp" ref="3b243e032ecbb40b1418b6a2b6d9e451" args="" -->
330double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#3b243e032ecbb40b1418b6a2b6d9e451">n_dopp</a></td></tr>
331
332<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Normalized Doppler of the correlated fading. <br></td></tr>
333<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8f3f4349e8a8a33ce5d9709779f5a405"></a><!-- doxytag: member="itpp::TDL_Channel::fading_type" ref="8f3f4349e8a8a33ce5d9709779f5a405" args="" -->
334<a class="el" href="group__channels.html#gf331f50064dab0a357caba2a0cb02b76">FADING_TYPE</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#8f3f4349e8a8a33ce5d9709779f5a405">fading_type</a></td></tr>
335
336<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fading type: Independent (default), Static or Correlated. <br></td></tr>
337<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="31dd874ddb75acb467ec68160e19a1b6"></a><!-- doxytag: member="itpp::TDL_Channel::method" ref="31dd874ddb75acb467ec68160e19a1b6" args="" -->
338<a class="el" href="group__channels.html#g0875516a69d533c89b49a43c2b1b987d">CORRELATED_METHOD</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#31dd874ddb75acb467ec68160e19a1b6">method</a></td></tr>
339
340<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Correlated fading generation method: Rice_MEDS (default), IFFT or FIR. <br></td></tr>
341<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="325c4b7315bfdb61fb4cc35994539e91"></a><!-- doxytag: member="itpp::TDL_Channel::tap_doppler_spectrum" ref="325c4b7315bfdb61fb4cc35994539e91" args="" -->
342<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; <a class="el" href="group__channels.html#gfd030225d513c962191cbce565337fd8">DOPPLER_SPECTRUM</a> &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#325c4b7315bfdb61fb4cc35994539e91">tap_doppler_spectrum</a></td></tr>
343
344<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Doppler spectrum for each tap. <br></td></tr>
345<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4b33014df2202a54ddd80d55b455c07"></a><!-- doxytag: member="itpp::TDL_Channel::fading_gen" ref="b4b33014df2202a54ddd80d55b455c07" args="" -->
346<a class="el" href="classitpp_1_1Array.html">Array</a>&lt; <a class="el" href="classitpp_1_1Fading__Generator.html">Fading_Generator</a> * &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#b4b33014df2202a54ddd80d55b455c07">fading_gen</a></td></tr>
347
348<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fading generators for each tap. <br></td></tr>
349<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="de665383426f68ba54be93be024a0842"></a><!-- doxytag: member="itpp::TDL_Channel::filter_length" ref="de665383426f68ba54be93be024a0842" args="" -->
350int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#de665383426f68ba54be93be024a0842">filter_length</a></td></tr>
351
352<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><a class="el" href="classitpp_1_1Filter.html" title="Virtual Filter Base Class.The class is templated as follows:.">Filter</a> length of FIR fading generator. <br></td></tr>
353<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a62f9f49797ee458af8fe71f7e2ad752"></a><!-- doxytag: member="itpp::TDL_Channel::nrof_freq" ref="a62f9f49797ee458af8fe71f7e2ad752" args="" -->
354int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#a62f9f49797ee458af8fe71f7e2ad752">nrof_freq</a></td></tr>
355
356<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of sine frequencies in the Rice MEDS fading generator. <br></td></tr>
357<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c38f959613ae41b79b8cdd1ab587df43"></a><!-- doxytag: member="itpp::TDL_Channel::discrete_Ts" ref="c38f959613ae41b79b8cdd1ab587df43" args="" -->
358double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#c38f959613ae41b79b8cdd1ab587df43">discrete_Ts</a></td></tr>
359
360<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sampling time of discretization. <br></td></tr>
361</table>
362<hr><a name="_details"></a><h2>Detailed Description</h2>
363Tapped Delay Line (TDL) channel model.
364<p>
365<dl class="author" compact><dt><b>Author:</b></dt><dd>Tony Ottosson, Adam Piatyszek and Zbigniew Dlugaszewski</dd></dl>
366A time invariant (or at least wide-sense stationary) channel have an impulse response that can be modeled as:<p>
367<p class="formulaDsp">
368<img class="formulaDsp" alt="\[ h(t) = \sum_{k=0}^{N_\mathrm{taps}-1} a_k \exp (-j \theta_k ) \delta(t-\tau_k), \]" src="form_202.png">
369<p>
370<p>
371where <img class="formulaInl" alt="$ N_{taps} $" src="form_229.png"> is the number of channel taps, <img class="formulaInl" alt="$ a_k $" src="form_204.png"> is the average amplitude at delay <img class="formulaInl" alt="$ \tau_k $" src="form_205.png">, and <img class="formulaInl" alt="$ \theta_k $" src="form_206.png"> is the channel phase of the <img class="formulaInl" alt="$ k^{th} $" src="form_207.png"> channel tap. The average power profile, and delay profile are defined as:<p>
372<p class="formulaDsp">
373<img class="formulaDsp" alt="\[ \mathbf{a} = [a_0, a_1, \ldots, a_{N_\mathrm{taps}-1}] \]" src="form_208.png">
374<p>
375<p>
376and<p>
377<p class="formulaDsp">
378<img class="formulaDsp" alt="\[ \mathbf{\tau} = [\tau_0, \tau_1, \ldots, \tau_{N_\mathrm{taps}-1}], \]" src="form_209.png">
379<p>
380<p>
381respectively. We assume without loss of generality that <img class="formulaInl" alt="$ \tau_0 = 0 $" src="form_210.png"> and <img class="formulaInl" alt="$ \tau_0 < \tau_1 < \ldots < \tau_{N_\mathrm{taps}-1} $" src="form_211.png">.<p>
382To initialize the channel profile the following parameters should be defined:<ul>
383<li><em>avg_power_dB</em> Average power profile <img class="formulaInl" alt="$ \mathbf{a} $" src="form_230.png">, given in dB</li><li><em>delay_profile</em> Delay profile <img class="formulaInl" alt="$ \mathbf{\tau} $" src="form_231.png">, given in samples. The delay profile should be sorted (increasing delay) and the first delay has to be 0.</li></ul>
384<p>
385In the case of correlated channel, the correlation in time is decided by the normalized Doppler frequency and Doppler spectrum. The normalized Doppler frequency is calculated as <img class="formulaInl" alt="$ f_\mathrm{max} T_s $" src="form_199.png">, where <img class="formulaInl" alt="$ f_\mathrm{max} $" src="form_195.png"> is the maximum Doppler frequency and <img class="formulaInl" alt="$ T_s $" src="form_200.png"> is the sample duration.<p>
386Two main types of generation methods exist: the filter method and Rice method. In the filter method the correlated fading process is generated with a filtering of the complex Gaussian process to achieve a given Doppler spectrum (<em>Jakes</em> by default). Currently there are two filter implementations:<ul>
387<li><em>FIR</em> - Finite Impulse Response (FIR) filter. Rather slow and inaccurate. Use with care.</li><li><em>IFFT</em> - Blockwise filtering in the frequency-domain. Consecutive blocks have independent fading. Very efficient method for large blocks.</li></ul>
388<p>
389The preferred method for generating the correlated fading process is the <em>Rice</em> method that approximate the fading process as a sum of sinusoids. Currently there is only one implementation, the Rice Method of Exact Doppler Spread (<em>Rice_MEDS</em>), which is also the default choice.<p>
390To summarize, the currently supported correlated fading generation methods are:<ul>
391<li><em>FIR</em> - filter FIR method</li><li><em>IFFT</em> - filter IFFT method</li><li><em>Rice_MEDS</em> - sum of sine waves MEDS method</li></ul>
392<p>
393Beside the above described correlated methods, two additional fading generators exists: the <em><a class="el" href="classitpp_1_1Independent__Fading__Generator.html" title="Independent (random) fading generator class.">Independent_Fading_Generator</a></em> and <em><a class="el" href="classitpp_1_1Static__Fading__Generator.html" title="Static fading generator class.">Static_Fading_Generator</a></em> ones. Their names are self-explanatory. The only optional parameter of these two generators is a <em>relative_power</em> of the LOS component.<p>
394Example: Simulation of WCDMA <div class="fragment"><pre class="fragment"><span class="preprocessor"> #include &lt;<a class="code" href="itcomm_8h.html" title="Include file for the IT++ communications module.">itpp/itcomm.h</a>&gt;</span>
395 <span class="keyword">using namespace </span>itpp;
396
397 <span class="keywordtype">int</span> main() {
398   <span class="comment">// set sampling time at a half of chip rate (0.5 / 3.84e6)</span>
399   <span class="keywordtype">double</span> Ts = 130.2e-9;
400   <span class="comment">// select the COST259 Rural Area model</span>
401   Channel_Specification channel_spec(COST259_RAx);
402   <span class="comment">// initialize with the predefined channel profile</span>
403   <a class="code" href="classitpp_1_1TDL__Channel.html#6953b926d31092c1f7a1a4edf3af552f" title="Default constructor.">TDL_Channel</a> channel(channel_spec, Ts);
404   <span class="comment">// set the normalized Doppler; fading type will be set to Correlated</span>
405   <span class="comment">// and Rice_MEDS method will be used (default settings)</span>
406   channel.set_norm_doppler(0.01);
407
408   cvec transmitted_signal;
409   <span class="comment">// -----------------------------------------------</span>
410   <span class="comment">// Your code here generates the transmitted signal</span>
411   <span class="comment">// -----------------------------------------------</span>
412
413   <span class="comment">// Channel coefficients are returned in the 'coeff' array of complex values</span>
414   Array&lt;cvec&gt; coeff;
415   cvec received_signal = channel(transmitted_signal, coeff);
416 }
417</pre></div><p>
418References:<ul>
419<li>[Pat02] Matthias Patzold, Mobile fading channels, Wiley, 2002.</li><li>[Stu01] Gordon L. Stuber, Principles of mobile communication, 2nd. ed., Kluwer, 2001.</li><li>[Rap96] Theodore S. Rappaport, Wireless communications: principles and practise, Prentice Hall, 1996. </li></ul>
420<hr><h2>Member Function Documentation</h2>
421<a class="anchor" name="36c0e2b1342e7260055918bc40f90b70"></a><!-- doxytag: member="itpp::TDL_Channel::discretize" ref="36c0e2b1342e7260055918bc40f90b70" args="(const vec &amp;delay_profile)" -->
422<div class="memitem">
423<div class="memproto">
424      <table class="memname">
425        <tr>
426          <td class="memname">void itpp::TDL_Channel::discretize           </td>
427          <td>(</td>
428          <td class="paramtype">const vec &amp;&nbsp;</td>
429          <td class="paramname"> <em>delay_profile</em>          </td>
430          <td>&nbsp;)&nbsp;</td>
431          <td><code> [protected]</code></td>
432        </tr>
433      </table>
434</div>
435<div class="memdoc">
436
437<p>
438Discretize the delay profile with <em>discrete_Ts</em> (Ts). All taps within ((i-0.5)Ts,(i+0.5)Ts] belong to the ith discrete tap.
439<p>
440<dl compact><dt><b>Parameters:</b></dt><dd>
441  <table border="0" cellspacing="2" cellpadding="0">
442    <tr><td valign="top"></td><td valign="top"><em>delay_profile</em>&nbsp;</td><td>Delay profile in seconds. </td></tr>
443  </table>
444</dl>
445
446<p>References <a class="el" href="channel_8h-source.html#l00960">a_prof</a>, <a class="el" href="channel_8h-source.html#l00961">d_prof</a>, <a class="el" href="channel_8h-source.html#l00972">discrete_Ts</a>, <a class="el" href="itassert_8h-source.html#l00094">it_assert</a>, <a class="el" href="itassert_8h-source.html#l00173">it_warning</a>, <a class="el" href="channel_8h-source.html#l00963">los_dopp</a>, <a class="el" href="channel_8h-source.html#l00962">los_power</a>, <a class="el" href="channel_8h-source.html#l00964">N_taps</a>, <a class="el" href="group__convertfunc.html#gfba861d94f7752f6dfafcdf14b336ca5">itpp::round_i()</a>, <a class="el" href="array_8h-source.html#l00257">itpp::Array&lt; T &gt;::set_size()</a>, <a class="el" href="array_8h-source.html#l00155">itpp::Array&lt; T &gt;::size()</a>, <a class="el" href="elem__math_8h-source.html#l00056">itpp::sqr()</a>, <a class="el" href="elem__math_8h-source.html#l00126">itpp::sqrt()</a>, and <a class="el" href="channel_8h-source.html#l00968">tap_doppler_spectrum</a>.</p>
447
448<p>Referenced by <a class="el" href="channel_8cpp-source.html#l00942">set_channel_profile()</a>.</p>
449
450</div>
451</div><p>
452<hr>The documentation for this class was generated from the following files:<ul>
453<li><a class="el" href="channel_8h-source.html">channel.h</a><li><a class="el" href="channel_8cpp.html">channel.cpp</a></ul>
454</div>
455<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:19 2009 for mixpp by&nbsp;
456<a href="http://www.doxygen.org/index.html">
457<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
458</body>
459</html>
Note: See TracBrowser for help on using the browser.