Tapped Delay Line (TDL) channel model. More...
#include <itpp/comm/channel.h>
Public Member Functions | |
TDL_Channel (const vec &avg_power_dB="0", const ivec &delay_prof="0") | |
Default constructor. | |
TDL_Channel (const Channel_Specification &channel_spec, double sampling_time) | |
Constructor with defined Channel_Specification. Delay profile will be discretized with sampling_time in seconds. | |
virtual | ~TDL_Channel () |
Destructor. | |
void | set_channel_profile (const vec &avg_power_dB, const ivec &delay_prof) |
Set both average power profile in dB and power delay profile in samples. | |
void | set_channel_profile_uniform (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 (const Channel_Specification &channel_spec, double sampling_time) |
Set channel profile using Channel_Specification. Delay profile will be discretized with sampling_time in seconds. | |
void | set_correlated_method (CORRELATED_METHOD method) |
Set the fading generation method to method. | |
void | set_fading_type (FADING_TYPE fading_type) |
Set fading type to one of Independent, Static or Correlated. | |
void | set_norm_doppler (double norm_doppler) |
Set normalized Doppler rate. A Correlated fading type will be used. | |
void | set_LOS (const vec &relative_power, const vec &relative_doppler="") |
Set LOS parameters for each tap. LOS Doppler will be set to 0.7 by default. | |
void | set_LOS_power (const vec &relative_power) |
Set LOS power for each tap. LOS Doppler will be set to 0.7 by default. | |
void | set_LOS_doppler (const vec &relative_doppler) |
Set LOS doppler for each tap. A Correlated fading type will be used. | |
void | set_doppler_spectrum (const DOPPLER_SPECTRUM *tap_spectrum) |
Set doppler spectrum for each tap in the channel profile. Rice_MEDS method will be used. | |
void | set_doppler_spectrum (int tap_number, DOPPLER_SPECTRUM tap_spectrum) |
Set doppler spectrum of tap tap_number. Rice_MEDS method will be used. | |
void | set_no_frequencies (int no_freq) |
Set number of sine frequencies. Rice_MEDS method will be used. | |
void | set_time_offset (int offset) |
Set fading generators' time offset in samples. A Correlated fading type will be used. | |
void | shift_time_offset (int no_samples) |
Shift fading generators' time offset. A Correlated fading type will be used. | |
void | set_filter_length (int filter_length) |
Set fading generator filter length. FIR method will be used. | |
int | taps () const |
Return the number of channel taps. | |
void | get_channel_profile (vec &avg_power_dB, ivec &delay_prof) const |
Get both average power profile in dB and power delay profile in samples. | |
vec | get_avg_power_dB () const |
Return power profile in dB. | |
ivec | get_delay_prof () const |
Return delay profile in samples. | |
CORRELATED_METHOD | get_correlated_method () const |
Return fading generation method. | |
FADING_TYPE | get_fading_type () const |
Return fading type. | |
double | get_norm_doppler () const |
Return normalized doppler rate. | |
vec | get_LOS_power () const |
Get relative power (Rice factor) for each tap. | |
vec | get_LOS_doppler () const |
Get relative Doppler (to the maximum Doppler) for each tap. | |
double | get_LOS_power (int tap_number) const |
Get relative power (Rice factor) for tap tap_number. | |
double | get_LOS_doppler (int tap_number) const |
Get relative Doppler (to the maximum Doppler) for tap tap_number. | |
int | get_no_frequencies () const |
Get the minimum number of frequencies used in Rice MEDS fading generator. | |
double | get_time_offset () const |
Get fading generators' time ofset. | |
double | calc_mean_excess_delay () const |
Calculate mean excess delay in samples. | |
double | calc_rms_delay_spread () const |
Calculate RMS delay spread in samples. | |
void | init () |
Initialize all fading generators. Automatically invoked in generate() or filter() functions. | |
void | generate (int no_samples, Array< cvec > &channel_coeff) |
Generate no_samples values of the channel. | |
void | generate (int no_samples, cmat &channel_coeff) |
Generate no_samples values of the channel. Returns the matrix with one tap per column. | |
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) | |
double | get_sampling_time () const |
Return channel sampling time (used for discretization) | |
Protected Member Functions | |
void | discretize (const vec &delay_profile) |
Discretize the delay profile with discrete_Ts (Ts). All taps within ((i-0.5)Ts,(i+0.5)Ts] belong to the ith discrete tap. | |
Protected Attributes | |
bool | init_flag |
Channel ready to produce data. | |
vec | a_prof |
Average amplitude of each tap. | |
ivec | d_prof |
Delay in samples for each tap. | |
vec | los_power |
Relative power for each Rice component. | |
vec | los_dopp |
Relative LOS Doppler for each Rice component. | |
int | N_taps |
Number of taps. | |
double | n_dopp |
Normalized Doppler of the correlated fading. | |
FADING_TYPE | fading_type |
Fading type: Independent (default), Static or Correlated. | |
CORRELATED_METHOD | method |
Correlated fading generation method: Rice_MEDS (default), IFFT or FIR. | |
Array< DOPPLER_SPECTRUM > | tap_doppler_spectrum |
Doppler spectrum for each tap. | |
Array< Fading_Generator * > | fading_gen |
Fading generators for each tap. | |
int | filter_length |
Filter length of FIR fading generator. | |
int | nrof_freq |
Number of sine frequencies in the Rice MEDS fading generator. | |
double | discrete_Ts |
Sampling time of discretization. | |
Tapped Delay Line (TDL) channel model.
A time invariant (or at least wide-sense stationary) channel have an impulse response that can be modeled as:
where
and
respectively. We assume without loss of generality that
To initialize the channel profile the following parameters should be defined:
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
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 (Jakes by default). Currently there are two filter implementations:
The preferred method for generating the correlated fading process is the Rice method that approximate the fading process as a sum of sinusoids. Currently there is only one implementation, the Rice Method of Exact Doppler Spread (Rice_MEDS), which is also the default choice.
To summarize, the currently supported correlated fading generation methods are:
Beside the above described correlated methods, two additional fading generators exists: the Independent_Fading_Generator and Static_Fading_Generator ones. Their names are self-explanatory. The only optional parameter of these two generators is a relative_power of the LOS component.
Example: Simulation of WCDMA
References:
Default constructor.
Definition at line 851 of file channel.cpp.
References set_channel_profile(), set_LOS(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), tap_doppler_spectrum, and itpp::zeros().
itpp::TDL_Channel::TDL_Channel | ( | const Channel_Specification & | channel_spec, |
double | sampling_time | ||
) |
Constructor with defined Channel_Specification. Delay profile will be discretized with sampling_time in seconds.
Definition at line 865 of file channel.cpp.
References set_channel_profile(), and tap_doppler_spectrum.
|
virtual |
Destructor.
Definition at line 875 of file channel.cpp.
References fading_gen, and itpp::Array< T >::size().
Set both average power profile in dB and power delay profile in samples.
Definition at line 887 of file channel.cpp.
References a_prof, d_prof, init_flag, it_assert, itpp::min(), N_taps, itpp::norm(), itpp::pow(), set_LOS(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), tap_doppler_spectrum, and itpp::zeros().
Referenced by set_channel_profile_exponential(), set_channel_profile_uniform(), TDL_Channel(), and TDL_Channel().
Set channel profile to uniform with no_taps taps.
Definition at line 917 of file channel.cpp.
References it_assert, set_channel_profile(), and itpp::zeros().
Set channel profile to exponential with no_taps taps.
Definition at line 929 of file channel.cpp.
References itpp::dB(), it_assert, and set_channel_profile().
void itpp::TDL_Channel::set_channel_profile | ( | const Channel_Specification & | channel_spec, |
double | sampling_time | ||
) |
Set channel profile using Channel_Specification. Delay profile will be discretized with sampling_time in seconds.
Definition at line 944 of file channel.cpp.
References a_prof, discrete_Ts, discretize(), init_flag, N_taps, itpp::norm(), itpp::pow(), set_LOS(), itpp::Array< T >::size(), and tap_doppler_spectrum.
void itpp::TDL_Channel::set_correlated_method | ( | CORRELATED_METHOD | method | ) |
Set the fading generation method to method.
Definition at line 969 of file channel.cpp.
References fading_type, init_flag, and method.
void itpp::TDL_Channel::set_fading_type | ( | FADING_TYPE | fading_type | ) |
Set fading type to one of Independent, Static or Correlated.
Definition at line 976 of file channel.cpp.
References fading_type, and init_flag.
Set normalized Doppler rate. A Correlated fading type will be used.
Definition at line 983 of file channel.cpp.
References fading_type, init_flag, it_assert, and n_dopp.
Set LOS parameters for each tap. LOS Doppler will be set to 0.7 by default.
Definition at line 994 of file channel.cpp.
References it_assert, los_dopp, los_power, N_taps, and itpp::Array< T >::size().
Referenced by set_channel_profile(), set_channel_profile(), and TDL_Channel().
Set LOS power for each tap. LOS Doppler will be set to 0.7 by default.
Definition at line 1025 of file channel.cpp.
References init_flag, it_assert, los_dopp, los_power, N_taps, and itpp::Array< T >::size().
Set LOS doppler for each tap. A Correlated fading type will be used.
Definition at line 1039 of file channel.cpp.
References init_flag, it_assert, los_dopp, los_power, n_dopp, and itpp::Array< T >::size().
void itpp::TDL_Channel::set_doppler_spectrum | ( | const DOPPLER_SPECTRUM * | tap_spectrum | ) |
Set doppler spectrum for each tap in the channel profile. Rice_MEDS method will be used.
Definition at line 1057 of file channel.cpp.
References init_flag, it_assert, method, n_dopp, N_taps, itpp::Array< T >::set_size(), and tap_doppler_spectrum.
void itpp::TDL_Channel::set_doppler_spectrum | ( | int | tap_number, |
DOPPLER_SPECTRUM | tap_spectrum | ||
) |
Set doppler spectrum of tap tap_number. Rice_MEDS method will be used.
Definition at line 1073 of file channel.cpp.
References init_flag, it_assert, method, n_dopp, N_taps, itpp::Array< T >::set_size(), and tap_doppler_spectrum.
Set fading generators' time offset in samples. A Correlated fading type will be used.
Definition at line 1112 of file channel.cpp.
References fading_gen, init(), init_flag, it_assert, n_dopp, and N_taps.
Shift fading generators' time offset. A Correlated fading type will be used.
Definition at line 1125 of file channel.cpp.
References fading_gen, init(), init_flag, it_assert, n_dopp, and N_taps.
Set fading generator filter length. FIR method will be used.
Definition at line 1100 of file channel.cpp.
References filter_length, init_flag, it_assert, method, and n_dopp.
|
inline |
void itpp::TDL_Channel::get_channel_profile | ( | vec & | avg_power_dB, |
ivec & | delay_prof | ||
) | const |
Get both average power profile in dB and power delay profile in samples.
Definition at line 1138 of file channel.cpp.
References a_prof, d_prof, and itpp::log10().
vec itpp::TDL_Channel::get_avg_power_dB | ( | ) | const |
Return power profile in dB.
Definition at line 1145 of file channel.cpp.
References a_prof, and itpp::log10().
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
double itpp::TDL_Channel::get_time_offset | ( | ) | const |
Get fading generators' time ofset.
Definition at line 1150 of file channel.cpp.
References fading_gen.
double itpp::TDL_Channel::calc_mean_excess_delay | ( | ) | const |
Calculate mean excess delay in samples.
Definition at line 1158 of file channel.cpp.
References a_prof, d_prof, itpp::sqr(), and itpp::sum_sqr().
double itpp::TDL_Channel::calc_rms_delay_spread | ( | ) | const |
Calculate RMS delay spread in samples.
Definition at line 1163 of file channel.cpp.
References a_prof, d_prof, itpp::sqr(), itpp::sum_sqr(), and itpp::to_vec().
void itpp::TDL_Channel::init | ( | ) |
Initialize all fading generators. Automatically invoked in generate() or filter() functions.
Definition at line 1171 of file channel.cpp.
References fading_gen, fading_type, filter_length, init_flag, it_assert, it_error, los_dopp, los_power, method, n_dopp, N_taps, nrof_freq, itpp::Array< T >::set_size(), itpp::Array< T >::size(), and tap_doppler_spectrum.
Referenced by generate(), generate(), set_time_offset(), and shift_time_offset().
Generate no_samples values of the channel.
Definition at line 1268 of file channel.cpp.
References a_prof, fading_gen, init(), init_flag, N_taps, and itpp::Array< T >::set_size().
Referenced by filter(), filter(), and generate().
Generate no_samples values of the channel. Returns the matrix with one tap per column.
Definition at line 1278 of file channel.cpp.
References a_prof, fading_gen, generate(), init(), init_flag, N_taps, and itpp::Array< T >::set_size().
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 1289 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_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 1300 of file channel.cpp.
References itpp::concat(), d_prof, itpp::elem_mult(), itpp::max(), N_taps, and itpp::zeros_c().
Generate channel coefficients and filter the input. Return output and channel coefficients.
Definition at line 1311 of file channel.cpp.
References filter_known_channel(), and generate().
Referenced by filter(), filter(), filter(), filter(), operator()(), operator()(), operator()(), operator()(), and operator()().
Generate channel coefficients and filter the input. Return output and channel coefficients.
Definition at line 1317 of file channel.cpp.
References filter_known_channel(), and generate().
Generate channel coefficients and filter the input. Return output and channel coefficients.
Definition at line 1323 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 1330 of file channel.cpp.
References filter().
Generate channel coefficients and filter the input. Only return the output.
Definition at line 1337 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 1343 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 1351 of file channel.cpp.
References filter().
Generate channel coefficients and filter the input. Return output and channel coefficients.
Definition at line 1356 of file channel.cpp.
References filter().
Generate channel coefficients and filter the input. Return output and channel coefficients.
Definition at line 1362 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 1367 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 1372 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 1378 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 1398 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 1422 of file channel.cpp.
References d_prof, itpp::fft(), init_flag, it_assert, N_taps, and itpp::Array< T >::set_size().
|
inline |
Discretize the delay profile with discrete_Ts (Ts). All taps within ((i-0.5)Ts,(i+0.5)Ts] belong to the ith discrete tap.
delay_profile | Delay profile in seconds. |
Definition at line 1447 of file channel.cpp.
References a_prof, d_prof, discrete_Ts, itpp::elem_div(), it_assert, it_warning, los_dopp, los_power, N_taps, itpp::round_i(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), itpp::sqr(), itpp::sqrt(), and tap_doppler_spectrum.
Referenced by set_channel_profile().
|
protected |
Channel ready to produce data.
Definition at line 993 of file channel.h.
Referenced by calc_frequency_response(), calc_frequency_response(), calc_impulse_response(), generate(), generate(), init(), set_channel_profile(), set_channel_profile(), set_correlated_method(), set_doppler_spectrum(), set_doppler_spectrum(), set_fading_type(), set_filter_length(), set_LOS_doppler(), set_LOS_power(), set_no_frequencies(), set_norm_doppler(), set_time_offset(), and shift_time_offset().
|
protected |
Average amplitude of each tap.
Definition at line 994 of file channel.h.
Referenced by calc_mean_excess_delay(), calc_rms_delay_spread(), discretize(), generate(), generate(), get_avg_power_dB(), get_channel_profile(), set_channel_profile(), and set_channel_profile().
|
protected |
Delay in samples for each tap.
Definition at line 995 of file channel.h.
Referenced by calc_frequency_response(), calc_frequency_response(), calc_impulse_response(), calc_mean_excess_delay(), calc_rms_delay_spread(), discretize(), filter_known_channel(), filter_known_channel(), get_channel_profile(), and set_channel_profile().
|
protected |
Relative power for each Rice component.
Definition at line 996 of file channel.h.
Referenced by discretize(), init(), set_LOS(), set_LOS_doppler(), and set_LOS_power().
|
protected |
Relative LOS Doppler for each Rice component.
Definition at line 997 of file channel.h.
Referenced by discretize(), init(), set_LOS(), set_LOS_doppler(), and set_LOS_power().
|
protected |
Number of taps.
Definition at line 998 of file channel.h.
Referenced by calc_frequency_response(), calc_frequency_response(), calc_impulse_response(), discretize(), filter_known_channel(), filter_known_channel(), generate(), generate(), init(), set_channel_profile(), set_channel_profile(), set_doppler_spectrum(), set_doppler_spectrum(), set_LOS(), set_LOS_power(), set_time_offset(), and shift_time_offset().
|
protected |
Normalized Doppler of the correlated fading.
Definition at line 999 of file channel.h.
Referenced by init(), set_doppler_spectrum(), set_doppler_spectrum(), set_filter_length(), set_LOS_doppler(), set_no_frequencies(), set_norm_doppler(), set_time_offset(), and shift_time_offset().
|
protected |
Fading type: Independent (default), Static or Correlated.
Definition at line 1000 of file channel.h.
Referenced by init(), set_correlated_method(), set_fading_type(), and set_norm_doppler().
|
protected |
Correlated fading generation method: Rice_MEDS (default), IFFT or FIR.
Definition at line 1001 of file channel.h.
Referenced by init(), set_correlated_method(), set_doppler_spectrum(), set_doppler_spectrum(), set_filter_length(), and set_no_frequencies().
|
protected |
Doppler spectrum for each tap.
Definition at line 1002 of file channel.h.
Referenced by discretize(), init(), set_channel_profile(), set_channel_profile(), set_doppler_spectrum(), set_doppler_spectrum(), TDL_Channel(), and TDL_Channel().
|
protected |
Fading generators for each tap.
Definition at line 1003 of file channel.h.
Referenced by generate(), generate(), get_time_offset(), init(), set_time_offset(), shift_time_offset(), and ~TDL_Channel().
|
protected |
Filter length of FIR fading generator.
Definition at line 1004 of file channel.h.
Referenced by init(), and set_filter_length().
|
protected |
Number of sine frequencies in the Rice MEDS fading generator.
Definition at line 1005 of file channel.h.
Referenced by init(), and set_no_frequencies().
|
protected |
Sampling time of discretization.
Definition at line 1006 of file channel.h.
Referenced by discretize(), and set_channel_profile().
Generated on Tue Mar 26 2024 19:08:31 for IT++ by Doxygen 1.9.8