IT++ Logo
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
itpp::TDL_Channel Class Reference

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_SPECTRUMtap_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:

\[ h(t) = \sum_{k=0}^{N_\mathrm{taps}-1} a_k \exp (-j \theta_k ) \delta(t-\tau_k), \]

where $ N_{taps} $ is the number of channel taps, $ a_k $ is the average amplitude at delay $ \tau_k $, and $ \theta_k $ is the channel phase of the $ k^{th} $ channel tap. The average power profile, and delay profile are defined as:

\[ \mathbf{a} = [a_0, a_1, \ldots, a_{N_\mathrm{taps}-1}] \]

and

\[ \mathbf{\tau} = [\tau_0, \tau_1, \ldots, \tau_{N_\mathrm{taps}-1}], \]

respectively. We assume without loss of generality that $ \tau_0 = 0 $ and $ \tau_0 < \tau_1 < \ldots < \tau_{N_\mathrm{taps}-1} $.

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 $ f_\mathrm{max} T_s $, where $ f_\mathrm{max} $ is the maximum Doppler frequency and $ T_s $ 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

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

Definition at line 852 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_profileDelay 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:
SourceForge Logo

Generated on Sat May 25 2013 16:32:30 for IT++ by Doxygen 1.8.2