#include <itpp/comm/channel.h>
Public Member Functions | |
TDL_Channel (const double norm_doppler=0.0, const vec &avg_power_dB="0", const ivec &delay_prof="0") | |
Set normalized doppler, average power profile in dB, and power delay profile in samples. | |
TDL_Channel (Channel_Specification &channel_spec) | |
Set with defined Channel_Specification (need to be discretized). | |
virtual | ~TDL_Channel () |
Destructor. | |
void | set_channel_profile (const vec &avg_power_dB="0", const ivec &delay_prof="0") |
Set both average power profile in dB and power delay profile in samples. | |
void | set_channel_profile_uniform (const int no_taps) |
Set channel profile to uniform with no_taps taps. | |
void | set_channel_profile_exponential (int no_taps) |
Set channel profile to exponential with no_taps taps. | |
void | set_channel_profile (Channel_Specification &channel_spec) |
Set channel profile to a defined Channel_Specification (need to be discretized). | |
void | set_norm_doppler (const double norm_doppler) |
Set normalized doppler rate. | |
void | set_doppler_spectrum (DOPPLER_SPECTRUM *tap_spectrum) |
Set doppler spectrum for each tap in the channel profile. If not set default is Jakes. | |
void | set_LOS (const double relative_power, const double norm_doppler) |
Set LOS component for the first tap (zero delay). Only possible if Rice is chosen as doppler spectrum. Relative power (Rice factor) and normalized doppler. | |
void | set_generation_method (const FADING_GENERATION_METHOD method=Rice_MEDS) |
Set the fading generation method to method . Default is Rice_MEDS. | |
int | taps () |
Return the number of channel taps. | |
void | get_channel_profile (vec &avg_power_dB, ivec &delay_prof) |
Get both average power profile in dB and power delay profile in samples. | |
vec | get_avg_power_dB () |
Return power profile in dB. | |
ivec | get_delay_prof () |
Return delay profile in samples. | |
double | get_norm_doppler () |
Return normalized doppler rate. | |
double | get_LOS_power () |
Get LOS relative power (Rice factor) on first tap (zero delay). Only if fist tap is of type Rice spectrum. | |
double | get_LOS_doppler () |
Get LOS doppler (relative to the maximum doppler) on first tap (zero delay). Only if fist tap is of type Rice spectrum. | |
FADING_GENERATION_METHOD | get_generation_method () |
Return fading generation method. | |
double | calc_mean_excess_delay () |
Calculate mean excess delay in samples. | |
double | calc_rms_delay_spread () |
Calculate RMS delay spread in samples. | |
void | init () |
Initialize all fading generators (needs to be called before generate() or filter()). | |
virtual void | generate (const int no_samples, Array< cvec > &channel_coeff) |
Generate no_samples values of the channel. | |
virtual void | generate (const int no_samples, cmat &channel_coeff) |
Generate no_samples values of the channel. Returns cmat with one tap per column. | |
virtual void | generate (const int no_samples, const int upsampling_factor, Array< cvec > &channel_coeff) |
Generate no_samples values from the fading process upsampled by upsampling_factor . | |
virtual void | generate (const int no_samples, const int upsampling_factor, cmat &channel_coeff) |
Generate no_samples values from the fading process upsampled by upsampling_factor . | |
void | shift_time_offset (const int no_samples) |
Shift generator time offset by a number of samples. | |
void | filter_known_channel (const cvec &input, cvec &output, const Array< cvec > &channel_coeff) |
Filter the input with the known channel values channel_coeff (e.g. from the generate function). | |
void | filter_known_channel (const cvec &input, cvec &output, const cmat &channel_coeff) |
Filter the input with the known channel values channel_coeff (e.g. from the generate function). | |
void | filter (const cvec &input, cvec &output, Array< cvec > &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
void | filter (const cvec &input, cvec &output, cmat &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
cvec | filter (const cvec &input, Array< cvec > &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
cvec | filter (const cvec &input, cmat &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
void | filter (const cvec &input, cvec &output) |
Generate channel coefficients and filter the input . Only return the output. | |
cvec | filter (const cvec &input) |
Generate channel coefficients and filter the input . Only return output. | |
void | operator() (const cvec &input, cvec &output, Array< cvec > &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
void | operator() (const cvec &input, cvec &output, cmat &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
cvec | operator() (const cvec &input, Array< cvec > &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
cvec | operator() (const cvec &input, cmat &channel_coeff) |
Generate channel coefficients and filter the input . Return output and channel coefficients. | |
cvec | operator() (const cvec &input) |
Generate channel coefficients and filter the input . Only return output. | |
void | calc_impulse_response (const Array< cvec > &channel_coeff, Array< cvec > &impulse_response) |
Calculate impulse-response on the supplied channel coefficients (produced by the generate() function). | |
void | calc_frequency_response (const Array< cvec > &channel_coeff, Array< cvec > &frequency_response, const int fft_size) |
Calculate frequency-response on the supplied channel coefficients (produced by the generate() function). | |
void | calc_frequency_response (const cmat &channel_coeff, cmat &frequency_response, const int fft_size) |
Calculate frequency-response on the supplied channel coefficients (produced by the generate() function). | |
Protected Attributes | |
vec | a_prof |
ivec | d_prof |
int | N_taps |
double | n_dopp |
double | los_dopp |
double | los_power |
Array< DOPPLER_SPECTRUM > | tap_doppler_spectrum |
Array< Fading_Generator * > | fading_gen |
FADING_GENERATION_METHOD | method |
bool | init_flag |
A time invariant (or at least wide-sense stationary) channel have an impulse response that can be modeled as:
where is the number of channel taps,
is the average amplitude at delay
, and
is the channel phase of the
th channel tap. The average power profile, and the delay profiles are defined as:
and
, respectively. We assume without loss of generality that and
.
To initialize the channel profile the following parameters should be defined:
The correlation in time is decided by the normalized doppler frequency and the doppler spectrum. The normalized doppler frequency is calculated as , where
is the maximum doppler frequency and
the sample duration. Depending on the parameter
norm_doppler
the following models are used:
Two main types of generation methods exist: the filter method and the Rice method. In the filter method the fading process is generated as a filtering of complex Gaussian process to achieve a given doppler spectrum. Currently there are two filter implementations
To summarize, the currently supported fading generation models are:
Example: Simulation of WCDMA
#include "itpp/itcomm.h" int main() { Channel_Specification channel_spec(COST259_RAx); // select the COST259 Rural Area model channel_spec.discretize(130.2e-9); // sample the channel at half a chip rate (=0.5/3.84e6) TDL_Channel channel(channel_spec); // initialize with defined channel profile channel.set_norm_doppler(0.01); // set the normalized doppler cvec transmitted_signal; // // Your code here generates the transmitted signal // Array<cvec> coeff; //The used channel values is returned in the 'coeff' which is an Array of cvec. cvec received_signal = channel(transmitted_signal, coeff); }
References:
[P"atzold] Matthias P"atzold, Mobile fading channels, Wiley, 2002.
[St"uber] Gordon L. St"uber, Principles of mobile communication, 2nd. ed., Kluwer, 2001.
[Rappaport] Theodore S. Rappaport, Wireless communications: principles and practise, Prentice Hall, 1996.
Definition at line 670 of file channel.h.
itpp::TDL_Channel::TDL_Channel | ( | const double | norm_doppler = 0.0 , |
|
const vec & | avg_power_dB = "0" , |
|||
const ivec & | delay_prof = "0" | |||
) |
Set normalized doppler, average power profile in dB, and power delay profile in samples.
Definition at line 797 of file channel.cpp.
References method, set_channel_profile(), and set_norm_doppler().
itpp::TDL_Channel::TDL_Channel | ( | Channel_Specification & | channel_spec | ) |
Set with defined Channel_Specification (need to be discretized).
Definition at line 804 of file channel.cpp.
References itpp::Channel_Specification::get_doppler_spectrum(), itpp::Channel_Specification::get_LOS_doppler(), itpp::Channel_Specification::get_LOS_power(), method, N_taps, set_channel_profile(), set_LOS(), set_norm_doppler(), and tap_doppler_spectrum.
itpp::TDL_Channel::~TDL_Channel | ( | ) | [virtual] |
void itpp::TDL_Channel::set_channel_profile | ( | const vec & | avg_power_dB = "0" , |
|
const ivec & | delay_prof = "0" | |||
) |
Set both average power profile in dB and power delay profile in samples.
Definition at line 832 of file channel.cpp.
References a_prof, d_prof, init_flag, it_assert, itpp::min(), N_taps, itpp::norm(), and itpp::pow().
Referenced by set_channel_profile(), set_channel_profile_uniform(), and TDL_Channel().
void itpp::TDL_Channel::set_channel_profile_uniform | ( | const int | no_taps | ) |
Set channel profile to uniform with no_taps
taps.
Definition at line 859 of file channel.cpp.
References it_assert, set_channel_profile(), and itpp::zeros().
void itpp::TDL_Channel::set_channel_profile_exponential | ( | int | no_taps | ) |
void itpp::TDL_Channel::set_channel_profile | ( | Channel_Specification & | channel_spec | ) |
Set channel profile to a defined Channel_Specification (need to be discretized).
Definition at line 882 of file channel.cpp.
References itpp::Channel_Specification::get_channel_profile(), itpp::Channel_Specification::get_discrete_Ts(), itpp::Channel_Specification::is_discrete(), it_assert, itpp::round(), set_channel_profile(), and itpp::to_ivec().
void itpp::TDL_Channel::set_norm_doppler | ( | const double | norm_doppler | ) |
Set normalized doppler rate.
Definition at line 852 of file channel.cpp.
References init_flag, it_assert, and n_dopp.
Referenced by TDL_Channel().
void itpp::TDL_Channel::set_doppler_spectrum | ( | DOPPLER_SPECTRUM * | tap_spectrum | ) |
Set doppler spectrum for each tap in the channel profile. If not set default is Jakes.
Definition at line 894 of file channel.cpp.
References init_flag, it_assert, N_taps, and tap_doppler_spectrum.
void itpp::TDL_Channel::set_LOS | ( | const double | relative_power, | |
const double | norm_doppler | |||
) |
Set LOS component for the first tap (zero delay). Only possible if Rice is chosen as doppler spectrum. Relative power (Rice factor) and normalized doppler.
Definition at line 911 of file channel.cpp.
References init_flag, it_assert, los_dopp, los_power, N_taps, and tap_doppler_spectrum.
Referenced by TDL_Channel().
void itpp::TDL_Channel::set_generation_method | ( | const FADING_GENERATION_METHOD | method = Rice_MEDS |
) |
Set the fading generation method to method
. Default is Rice_MEDS.
Definition at line 905 of file channel.cpp.
int itpp::TDL_Channel::taps | ( | ) | [inline] |
void itpp::TDL_Channel::get_channel_profile | ( | vec & | avg_power_dB, | |
ivec & | delay_prof | |||
) |
Get both average power profile in dB and power delay profile in samples.
Definition at line 923 of file channel.cpp.
References a_prof, d_prof, and itpp::log10().
vec itpp::TDL_Channel::get_avg_power_dB | ( | ) |
Return power profile in dB.
Definition at line 930 of file channel.cpp.
References a_prof, and itpp::log10().
ivec itpp::TDL_Channel::get_delay_prof | ( | ) |
double itpp::TDL_Channel::get_norm_doppler | ( | ) |
double itpp::TDL_Channel::get_LOS_power | ( | ) |
Get LOS relative power (Rice factor) on first tap (zero delay). Only if fist tap is of type Rice spectrum.
Definition at line 946 of file channel.cpp.
References los_power.
double itpp::TDL_Channel::get_LOS_doppler | ( | ) |
Get LOS doppler (relative to the maximum doppler) on first tap (zero delay). Only if fist tap is of type Rice spectrum.
Definition at line 951 of file channel.cpp.
References los_dopp.
FADING_GENERATION_METHOD itpp::TDL_Channel::get_generation_method | ( | ) |
double itpp::TDL_Channel::calc_mean_excess_delay | ( | ) |
Calculate mean excess delay in samples.
Definition at line 961 of file channel.cpp.
References a_prof, d_prof, itpp::sqr(), and itpp::sum_sqr().
double itpp::TDL_Channel::calc_rms_delay_spread | ( | ) |
Calculate RMS delay spread in samples.
Definition at line 966 of file channel.cpp.
References a_prof, d_prof, itpp::sqr(), itpp::sqrt(), itpp::sum_sqr(), and itpp::to_vec().
void itpp::TDL_Channel::init | ( | ) |
Initialize all fading generators (needs to be called before generate() or filter()).
Definition at line 974 of file channel.cpp.
References fading_gen, init_flag, it_assert, it_error, los_dopp, los_power, method, n_dopp, N_taps, and tap_doppler_spectrum.
Referenced by generate().
void itpp::TDL_Channel::generate | ( | const int | no_samples, | |
Array< cvec > & | channel_coeff | |||
) | [virtual] |
Generate no_samples
values of the channel.
Definition at line 1027 of file channel.cpp.
References a_prof, fading_gen, init(), init_flag, N_taps, and itpp::Array< T >::set_size().
Referenced by filter(), and generate().
void itpp::TDL_Channel::generate | ( | const int | no_samples, | |
cmat & | channel_coeff | |||
) | [virtual] |
Generate no_samples
values of the channel. Returns cmat with one tap per column.
Definition at line 1038 of file channel.cpp.
References a_prof, fading_gen, generate(), init(), init_flag, and N_taps.
void itpp::TDL_Channel::generate | ( | const int | no_samples, | |
const int | upsampling_factor, | |||
Array< cvec > & | channel_coeff | |||
) | [virtual] |
Generate no_samples
values from the fading process upsampled by upsampling_factor
.
Definition at line 1052 of file channel.cpp.
References a_prof, fading_gen, generate(), init(), init_flag, it_assert, method, N_taps, and itpp::Array< T >::set_size().
void itpp::TDL_Channel::generate | ( | const int | no_samples, | |
const int | upsampling_factor, | |||
cmat & | channel_coeff | |||
) | [virtual] |
Generate no_samples
values from the fading process upsampled by upsampling_factor
.
Definition at line 1066 of file channel.cpp.
References a_prof, fading_gen, generate(), init(), init_flag, it_assert, method, and N_taps.
void itpp::TDL_Channel::shift_time_offset | ( | const int | no_samples | ) |
Shift generator time offset by a number of samples.
Definition at line 1080 of file channel.cpp.
References fading_gen, and N_taps.
void itpp::TDL_Channel::filter_known_channel | ( | const cvec & | input, | |
cvec & | output, | |||
const Array< cvec > & | channel_coeff | |||
) |
Filter the input
with the known channel values channel_coeff
(e.g. from the generate function).
Definition at line 1088 of file channel.cpp.
References itpp::concat(), d_prof, itpp::elem_mult(), itpp::max(), N_taps, and itpp::zeros_c().
Referenced by filter().
void itpp::TDL_Channel::filter_known_channel | ( | const cvec & | input, | |
cvec & | output, | |||
const cmat & | channel_coeff | |||
) |
Filter the input
with the known channel values channel_coeff
(e.g. from the generate function).
Definition at line 1099 of file channel.cpp.
References itpp::concat(), d_prof, itpp::elem_mult(), itpp::max(), N_taps, and itpp::zeros_c().
void itpp::TDL_Channel::filter | ( | const cvec & | input, | |
cvec & | output, | |||
Array< cvec > & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1110 of file channel.cpp.
References filter_known_channel(), and generate().
Referenced by filter(), and operator()().
void itpp::TDL_Channel::filter | ( | const cvec & | input, | |
cvec & | output, | |||
cmat & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1116 of file channel.cpp.
References filter_known_channel(), and generate().
cvec itpp::TDL_Channel::filter | ( | const cvec & | input, | |
Array< cvec > & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1122 of file channel.cpp.
References filter().
cvec itpp::TDL_Channel::filter | ( | const cvec & | input, | |
cmat & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1129 of file channel.cpp.
References filter().
void itpp::TDL_Channel::filter | ( | const cvec & | input, | |
cvec & | output | |||
) |
Generate channel coefficients and filter the input
. Only return the output.
Definition at line 1136 of file channel.cpp.
References filter().
cvec itpp::TDL_Channel::filter | ( | const cvec & | input | ) |
Generate channel coefficients and filter the input
. Only return output.
Definition at line 1142 of file channel.cpp.
References filter().
void itpp::TDL_Channel::operator() | ( | const cvec & | input, | |
cvec & | output, | |||
Array< cvec > & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1150 of file channel.cpp.
References filter().
void itpp::TDL_Channel::operator() | ( | const cvec & | input, | |
cvec & | output, | |||
cmat & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1155 of file channel.cpp.
References filter().
cvec itpp::TDL_Channel::operator() | ( | const cvec & | input, | |
Array< cvec > & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1161 of file channel.cpp.
References filter().
cvec itpp::TDL_Channel::operator() | ( | const cvec & | input, | |
cmat & | channel_coeff | |||
) |
Generate channel coefficients and filter the input
. Return output and channel coefficients.
Definition at line 1166 of file channel.cpp.
References filter().
cvec itpp::TDL_Channel::operator() | ( | const cvec & | input | ) |
Generate channel coefficients and filter the input
. Only return output.
Definition at line 1171 of file channel.cpp.
References filter().
void itpp::TDL_Channel::calc_impulse_response | ( | const Array< cvec > & | channel_coeff, | |
Array< cvec > & | impulse_response | |||
) |
Calculate impulse-response on the supplied channel coefficients (produced by the generate() function).
Definition at line 1177 of file channel.cpp.
References d_prof, init_flag, it_assert, N_taps, itpp::Array< T >::set_size(), and itpp::Array< T >::size().
void itpp::TDL_Channel::calc_frequency_response | ( | const Array< cvec > & | channel_coeff, | |
Array< cvec > & | frequency_response, | |||
const int | fft_size | |||
) |
Calculate frequency-response on the supplied channel coefficients (produced by the generate() function).
Definition at line 1197 of file channel.cpp.
References d_prof, itpp::fft(), init_flag, it_assert, N_taps, itpp::Array< T >::set_size(), and itpp::Array< T >::size().
void itpp::TDL_Channel::calc_frequency_response | ( | const cmat & | channel_coeff, | |
cmat & | frequency_response, | |||
const int | fft_size | |||
) |
Calculate frequency-response on the supplied channel coefficients (produced by the generate() function).
Definition at line 1221 of file channel.cpp.
References d_prof, itpp::fft(), init_flag, it_assert, and N_taps.
Generated on Thu Apr 19 14:18:38 2007 for IT++ by Doxygen 1.5.1