[353] | 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 | <!-- |
---|
| 10 | function 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 | } |
---|
| 22 | function 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 | } |
---|
| 46 | window.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 Page</span></a></li> |
---|
| 53 | <li><a href="pages.html"><span>Related 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 List</span></a></li> |
---|
| 62 | <li><a href="classes.html"><span>Class Index</span></a></li> |
---|
| 63 | <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> |
---|
| 64 | <li><a href="functions.html"><span>Class 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 <<a class="el" href="channel_8h-source.html">channel.h</a>></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 &avg_power_dB="0", const ivec &delay_prof="0")" --> |
---|
| 85 | </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#6953b926d31092c1f7a1a4edf3af552f">TDL_Channel</a> (const vec &avg_power_dB="0", const ivec &delay_prof="0")</td></tr> |
---|
| 86 | |
---|
| 87 | <tr><td class="mdescLeft"> </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 &channel_spec, double sampling_time)" --> |
---|
| 89 | </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> &channel_spec, double sampling_time)</td></tr> |
---|
| 90 | |
---|
| 91 | <tr><td class="mdescLeft"> </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="()" --> |
---|
| 93 | virtual </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"> </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 &avg_power_dB, const ivec &delay_prof)" --> |
---|
| 97 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#2c797d31786df97d2cb7b8ae1b99344b">set_channel_profile</a> (const vec &avg_power_dB, const ivec &delay_prof)</td></tr> |
---|
| 98 | |
---|
| 99 | <tr><td class="mdescLeft"> </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)" --> |
---|
| 101 | void </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"> </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)" --> |
---|
| 105 | void </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"> </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 &channel_spec, double sampling_time)" --> |
---|
| 109 | void </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> &channel_spec, double sampling_time)</td></tr> |
---|
| 110 | |
---|
| 111 | <tr><td class="mdescLeft"> </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)" --> |
---|
| 113 | void </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"> </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)" --> |
---|
| 117 | void </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"> </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)" --> |
---|
| 121 | void </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"> </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 &relative_power, const vec &relative_doppler="")" --> |
---|
| 125 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#4e9ef69abb97dd05a2ec406d5012dfef">set_LOS</a> (const vec &relative_power, const vec &relative_doppler="")</td></tr> |
---|
| 126 | |
---|
| 127 | <tr><td class="mdescLeft"> </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 &relative_power)" --> |
---|
| 129 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#573a0608043a5db81951bbb56e58051a">set_LOS_power</a> (const vec &relative_power)</td></tr> |
---|
| 130 | |
---|
| 131 | <tr><td class="mdescLeft"> </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 &relative_doppler)" --> |
---|
| 133 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#78372f81d61551c6e9ebf9810debcad0">set_LOS_doppler</a> (const vec &relative_doppler)</td></tr> |
---|
| 134 | |
---|
| 135 | <tr><td class="mdescLeft"> </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)" --> |
---|
| 137 | void </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"> </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)" --> |
---|
| 141 | void </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"> </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)" --> |
---|
| 145 | void </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"> </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)" --> |
---|
| 149 | void </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"> </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)" --> |
---|
| 153 | void </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"> </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)" --> |
---|
| 157 | void </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"> </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 " --> |
---|
| 161 | int </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"> </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 &avg_power_dB, ivec &delay_prof) const " --> |
---|
| 165 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#d166229e1b0bbfa31c13d9ec6ad2d8bc">get_channel_profile</a> (vec &avg_power_dB, ivec &delay_prof) const </td></tr> |
---|
| 166 | |
---|
| 167 | <tr><td class="mdescLeft"> </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 " --> |
---|
| 169 | vec </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"> </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 " --> |
---|
| 173 | ivec </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"> </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> </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"> </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> </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"> </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 " --> |
---|
| 185 | double </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"> </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 " --> |
---|
| 189 | vec </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"> </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 " --> |
---|
| 193 | vec </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"> </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 " --> |
---|
| 197 | double </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"> </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 " --> |
---|
| 201 | double </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"> </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 " --> |
---|
| 205 | int </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"> </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 " --> |
---|
| 209 | double </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"> </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 " --> |
---|
| 213 | double </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"> </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 " --> |
---|
| 217 | double </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"> </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="()" --> |
---|
| 221 | void </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"> </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< cvec > &channel_coeff)" --> |
---|
| 225 | void </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>< cvec > &channel_coeff)</td></tr> |
---|
| 226 | |
---|
| 227 | <tr><td class="mdescLeft"> </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 &channel_coeff)" --> |
---|
| 229 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#80440b5b7bd01cbf8a1c647bb0104944">generate</a> (int no_samples, cmat &channel_coeff)</td></tr> |
---|
| 230 | |
---|
| 231 | <tr><td class="mdescLeft"> </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 &input, cvec &output, const Array< cvec > &channel_coeff)" --> |
---|
| 233 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#5321f2eef7983f8847b1c99d3807616d">filter_known_channel</a> (const cvec &input, cvec &output, const <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &channel_coeff)</td></tr> |
---|
| 234 | |
---|
| 235 | <tr><td class="mdescLeft"> </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 &input, cvec &output, const cmat &channel_coeff)" --> |
---|
| 237 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e32dc8b6979fbf916a1e25574b095bc2">filter_known_channel</a> (const cvec &input, cvec &output, const cmat &channel_coeff)</td></tr> |
---|
| 238 | |
---|
| 239 | <tr><td class="mdescLeft"> </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 &input, cvec &output, Array< cvec > &channel_coeff)" --> |
---|
| 241 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#fa6ec93d1d4911a9a4b9550977db4d02">filter</a> (const cvec &input, cvec &output, <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &channel_coeff)</td></tr> |
---|
| 242 | |
---|
| 243 | <tr><td class="mdescLeft"> </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 &input, cvec &output, cmat &channel_coeff)" --> |
---|
| 245 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#509b7dbb8153fac66e03ad31338d2dd4">filter</a> (const cvec &input, cvec &output, cmat &channel_coeff)</td></tr> |
---|
| 246 | |
---|
| 247 | <tr><td class="mdescLeft"> </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 &input, Array< cvec > &channel_coeff)" --> |
---|
| 249 | cvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#239193990dc0c74269c1ba2643421c65">filter</a> (const cvec &input, <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &channel_coeff)</td></tr> |
---|
| 250 | |
---|
| 251 | <tr><td class="mdescLeft"> </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 &input, cmat &channel_coeff)" --> |
---|
| 253 | cvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#e3dd95efc5ffbe7729e6c93e87820739">filter</a> (const cvec &input, cmat &channel_coeff)</td></tr> |
---|
| 254 | |
---|
| 255 | <tr><td class="mdescLeft"> </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 &input, cvec &output)" --> |
---|
| 257 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#387feb7265c3954489c32d506b7acbd6">filter</a> (const cvec &input, cvec &output)</td></tr> |
---|
| 258 | |
---|
| 259 | <tr><td class="mdescLeft"> </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 &input)" --> |
---|
| 261 | cvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#10cdb64bc00f2f221d734c9337280fdd">filter</a> (const cvec &input)</td></tr> |
---|
| 262 | |
---|
| 263 | <tr><td class="mdescLeft"> </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 &input, cvec &output, Array< cvec > &channel_coeff)" --> |
---|
| 265 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#f179218475c2fbd7bbaf7eb80fbf7db8">operator()</a> (const cvec &input, cvec &output, <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &channel_coeff)</td></tr> |
---|
| 266 | |
---|
| 267 | <tr><td class="mdescLeft"> </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 &input, cvec &output, cmat &channel_coeff)" --> |
---|
| 269 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#7a2ec75d001959f6924cf13f5cc5cfb9">operator()</a> (const cvec &input, cvec &output, cmat &channel_coeff)</td></tr> |
---|
| 270 | |
---|
| 271 | <tr><td class="mdescLeft"> </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 &input, Array< cvec > &channel_coeff)" --> |
---|
| 273 | cvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#93e4cefd0f2f7b30fbf2a8d76bae3722">operator()</a> (const cvec &input, <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &channel_coeff)</td></tr> |
---|
| 274 | |
---|
| 275 | <tr><td class="mdescLeft"> </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 &input, cmat &channel_coeff)" --> |
---|
| 277 | cvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#22087247345c2c0d88c63d1ef2f74ba0">operator()</a> (const cvec &input, cmat &channel_coeff)</td></tr> |
---|
| 278 | |
---|
| 279 | <tr><td class="mdescLeft"> </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 &input)" --> |
---|
| 281 | cvec </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#5267cafe7c22fd1a01fdfc29600e0155">operator()</a> (const cvec &input)</td></tr> |
---|
| 282 | |
---|
| 283 | <tr><td class="mdescLeft"> </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< cvec > &channel_coeff, Array< cvec > &impulse_response)" --> |
---|
| 285 | void </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>< cvec > &channel_coeff, <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &impulse_response)</td></tr> |
---|
| 286 | |
---|
| 287 | <tr><td class="mdescLeft"> </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< cvec > &channel_coeff, Array< cvec > &frequency_response, const int fft_size)" --> |
---|
| 289 | void </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>< cvec > &channel_coeff, <a class="el" href="classitpp_1_1Array.html">Array</a>< cvec > &frequency_response, const int fft_size)</td></tr> |
---|
| 290 | |
---|
| 291 | <tr><td class="mdescLeft"> </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 &channel_coeff, cmat &frequency_response, const int fft_size)" --> |
---|
| 293 | void </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#a6b11207b34f781611d48956dfe36fb6">calc_frequency_response</a> (const cmat &channel_coeff, cmat &frequency_response, const int fft_size)</td></tr> |
---|
| 294 | |
---|
| 295 | <tr><td class="mdescLeft"> </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 " --> |
---|
| 297 | double </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"> </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 </td><td class="memItemRight" valign="bottom"><a class="el" href="classitpp_1_1TDL__Channel.html#36c0e2b1342e7260055918bc40f90b70">discretize</a> (const vec &delay_profile)</td></tr> |
---|
| 302 | |
---|
| 303 | <tr><td class="mdescLeft"> </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="" --> |
---|
| 306 | bool </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"> </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="" --> |
---|
| 310 | vec </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"> </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="" --> |
---|
| 314 | ivec </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"> </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="" --> |
---|
| 318 | vec </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"> </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="" --> |
---|
| 322 | vec </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"> </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="" --> |
---|
| 326 | int </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"> </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="" --> |
---|
| 330 | double </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"> </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> </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"> </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> </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"> </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>< <a class="el" href="group__channels.html#gfd030225d513c962191cbce565337fd8">DOPPLER_SPECTRUM</a> > </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"> </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>< <a class="el" href="classitpp_1_1Fading__Generator.html">Fading_Generator</a> * > </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"> </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="" --> |
---|
| 350 | int </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"> </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="" --> |
---|
| 354 | int </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"> </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="" --> |
---|
| 358 | double </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"> </td><td class="mdescRight">Sampling time of discretization. <br></td></tr> |
---|
| 361 | </table> |
---|
| 362 | <hr><a name="_details"></a><h2>Detailed Description</h2> |
---|
| 363 | Tapped 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> |
---|
| 366 | A 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> |
---|
| 371 | where <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> |
---|
| 376 | and<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> |
---|
| 381 | respectively. 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> |
---|
| 382 | To 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> |
---|
| 385 | In 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> |
---|
| 386 | Two 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> |
---|
| 389 | The 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> |
---|
| 390 | To 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> |
---|
| 393 | Beside 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> |
---|
| 394 | Example: Simulation of WCDMA <div class="fragment"><pre class="fragment"><span class="preprocessor"> #include <<a class="code" href="itcomm_8h.html" title="Include file for the IT++ communications module.">itpp/itcomm.h</a>></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<cvec> coeff; |
---|
| 415 | cvec received_signal = channel(transmitted_signal, coeff); |
---|
| 416 | } |
---|
| 417 | </pre></div><p> |
---|
| 418 | References:<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 &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 & </td> |
---|
| 429 | <td class="paramname"> <em>delay_profile</em> </td> |
---|
| 430 | <td> ) </td> |
---|
| 431 | <td><code> [protected]</code></td> |
---|
| 432 | </tr> |
---|
| 433 | </table> |
---|
| 434 | </div> |
---|
| 435 | <div class="memdoc"> |
---|
| 436 | |
---|
| 437 | <p> |
---|
| 438 | 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. |
---|
| 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> </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< T >::set_size()</a>, <a class="el" href="array_8h-source.html#l00155">itpp::Array< T >::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 |
---|
| 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> |
---|