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:
, given in dB
, given in samples. The delay profile should be sorted (increasing delay) and the first delay has to be 0.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