itpp::TDL_Channel Class Reference
Communications Module » Channel Modeling

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. More...

## 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.

## Detailed Description

Tapped Delay Line (TDL) channel model.

Author
  Tony Ottosson, Adam Piatyszek and Zbigniew Dlugaszewski

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:

- avg_power_dB Average power profile , given in dB
- delay_profile Delay profile , 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:

- FIR - Finite Impulse Response (FIR) filter. Rather slow and inaccurate. Use with care.
- IFFT - Blockwise filtering in the frequency-domain. Consecutive blocks have independent fading. Very efficient method for large blocks.

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:

- FIR - filter FIR method
- IFFT - filter IFFT method
- Rice_MEDS - sum of sine waves MEDS method

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

#include <itpp/itcomm.h>
using namespace itpp;
int main() {
// set sampling time at a half of chip rate (0.5 / 3.84e6)
double Ts = 130.2e-9;
// select the COST259 Rural Area model
Channel_Specification channel_spec(COST259_RAx);
// initialize with the predefined channel profile
TDL_Channel channel(channel_spec, Ts);
// set the normalized Doppler; fading type will be set to Correlated
// and Rice_MEDS method will be used (default settings)
channel.set_norm_doppler(0.01);
cvec transmitted_signal;
// -----------------------------------------------
// Your code here generates the transmitted signal
// -----------------------------------------------
// Channel coefficients are returned in the 'coeff' array of complex values
Array<cvec> coeff;
cvec received_signal = channel(transmitted_signal, coeff);
}

References:

- [Pat02] Matthias Patzold, Mobile fading channels, Wiley, 2002.
- [Stu01] Gordon L. Stuber, Principles of mobile communication, 2nd. ed., Kluwer, 2001.
- [Rap96] Theodore S. Rappaport, Wireless communications: principles and practise, Prentice Hall, 1996.

Definition at line 857 of file channel.h.

## Member Function Documentation

void itpp::TDL_Channel::discretize | ( | const vec & | delay_profile | ) |

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.

Parameters

  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().

The documentation for this class was generated from the following files:

- itpp/comm/channel.h
- itpp/comm/channel.cpp

Generated on Thu Aug 20 2015 21:02:54 for IT++ by Doxygen 1.8.9.1