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 is the number of channel taps, is the average amplitude at delay , and is the channel phase of the channel tap. The average power profile, and delay profile are defined as:
and
respectively. We assume without loss of generality that and .
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 , where is the maximum Doppler frequency and is the sample duration.
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:
|
protected |
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().
Generated on Sat Jul 6 2013 10:54:31 for IT++ by Doxygen 1.8.2