IT++ Logo Newcom Logo

itpp::TDL_Channel Class Reference
[Communication Channel Models]

Tapped Delay Line (TDL) channel model. More...

#include <itpp/comm/channel.h>

List of all members.

Public Member Functions

 TDL_Channel (const double norm_doppler=0.0, const vec &avg_power_dB="0", const ivec &delay_prof="0")
 Set normalized doppler, average power profile in dB, and power delay profile in samples.
 TDL_Channel (Channel_Specification &channel_spec)
 Set with defined Channel_Specification (need to be discretized).
virtual ~TDL_Channel ()
 Destructor.
void set_channel_profile (const vec &avg_power_dB="0", const ivec &delay_prof="0")
 Set both average power profile in dB and power delay profile in samples.
void set_channel_profile_uniform (const 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 (Channel_Specification &channel_spec)
 Set channel profile to a defined Channel_Specification (need to be discretized).
void set_norm_doppler (const double norm_doppler)
 Set normalized doppler rate.
void set_doppler_spectrum (DOPPLER_SPECTRUM *tap_spectrum)
 Set doppler spectrum for each tap in the channel profile. If not set default is Jakes.
void set_LOS (const double relative_power, const double norm_doppler)
 Set LOS component for the first tap (zero delay). Only possible if Rice is chosen as doppler spectrum. Relative power (Rice factor) and normalized doppler.
void set_generation_method (const FADING_GENERATION_METHOD method=Rice_MEDS)
 Set the fading generation method to method. Default is Rice_MEDS.
int taps ()
 Return the number of channel taps.
void get_channel_profile (vec &avg_power_dB, ivec &delay_prof)
 Get both average power profile in dB and power delay profile in samples.
vec get_avg_power_dB ()
 Return power profile in dB.
ivec get_delay_prof ()
 Return delay profile in samples.
double get_norm_doppler ()
 Return normalized doppler rate.
double get_LOS_power ()
 Get LOS relative power (Rice factor) on first tap (zero delay). Only if fist tap is of type Rice spectrum.
double get_LOS_doppler ()
 Get LOS doppler (relative to the maximum doppler) on first tap (zero delay). Only if fist tap is of type Rice spectrum.
FADING_GENERATION_METHOD get_generation_method ()
 Return fading generation method.
double calc_mean_excess_delay ()
 Calculate mean excess delay in samples.
double calc_rms_delay_spread ()
 Calculate RMS delay spread in samples.
void init ()
 Initialize all fading generators (needs to be called before generate() or filter()).
virtual void generate (const int no_samples, Array< cvec > &channel_coeff)
 Generate no_samples values of the channel.
virtual void generate (const int no_samples, cmat &channel_coeff)
 Generate no_samples values of the channel. Returns cmat with one tap per column.
virtual void generate (const int no_samples, const int upsampling_factor, Array< cvec > &channel_coeff)
 Generate no_samples values from the fading process upsampled by upsampling_factor.
virtual void generate (const int no_samples, const int upsampling_factor, cmat &channel_coeff)
 Generate no_samples values from the fading process upsampled by upsampling_factor.
void shift_time_offset (const int no_samples)
 Shift generator time offset by a number of samples.
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).

Protected Attributes

vec a_prof
ivec d_prof
int N_taps
double n_dopp
double los_dopp
double los_power
Array< DOPPLER_SPECTRUMtap_doppler_spectrum
Array< Fading_Generator * > fading_gen
FADING_GENERATION_METHOD method
bool init_flag


Detailed Description

Tapped Delay Line (TDL) channel model.

Author:
Tony Ottosson
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 the delay profiles 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:

The correlation in time is decided by the normalized doppler frequency and the 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$ the sample duration. Depending on the parameter norm_doppler the following models are used:

Two main types of generation methods exist: the filter method and the Rice method. In the filter method the fading process is generated as a filtering of complex Gaussian process to achieve a given doppler spectrum. Currently there are two filter implementations

The preferred method 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 also is the default choice.

To summarize, the currently supported fading generation models are:

Example: Simulation of WCDMA

    #include "itpp/itcomm.h"

    int main() {

    Channel_Specification channel_spec(COST259_RAx); // select the COST259 Rural Area model
    channel_spec.discretize(130.2e-9); // sample the channel at half a chip rate (=0.5/3.84e6)

    TDL_Channel channel(channel_spec); // initialize with defined channel profile
    channel.set_norm_doppler(0.01); // set the normalized doppler

    cvec transmitted_signal;
    //
    // Your code here generates the transmitted signal
    //

    Array<cvec> coeff;
    //The used channel values is returned in the 'coeff' which is an Array of cvec.
    cvec received_signal = channel(transmitted_signal, coeff);
    }

References:

[P"atzold] Matthias P"atzold, Mobile fading channels, Wiley, 2002.

[St"uber] Gordon L. St"uber, Principles of mobile communication, 2nd. ed., Kluwer, 2001.

[Rappaport] Theodore S. Rappaport, Wireless communications: principles and practise, Prentice Hall, 1996.

Definition at line 670 of file channel.h.


Constructor & Destructor Documentation

itpp::TDL_Channel::TDL_Channel ( const double  norm_doppler = 0.0,
const vec &  avg_power_dB = "0",
const ivec &  delay_prof = "0" 
)

Set normalized doppler, average power profile in dB, and power delay profile in samples.

Definition at line 797 of file channel.cpp.

References method, itpp::Rice_MEDS, set_channel_profile(), and set_norm_doppler().

itpp::TDL_Channel::TDL_Channel ( Channel_Specification channel_spec  ) 

Set with defined Channel_Specification (need to be discretized).

Definition at line 804 of file channel.cpp.

References itpp::Channel_Specification::get_doppler_spectrum(), itpp::Channel_Specification::get_LOS_doppler(), itpp::Channel_Specification::get_LOS_power(), method, N_taps, itpp::Rice, itpp::Rice_MEDS, set_channel_profile(), set_LOS(), set_norm_doppler(), itpp::Array< T >::set_size(), and tap_doppler_spectrum.

itpp::TDL_Channel::~TDL_Channel (  )  [virtual]

Destructor.

Definition at line 821 of file channel.cpp.

References fading_gen, and itpp::Array< T >::size().


Member Function Documentation

void itpp::TDL_Channel::set_channel_profile ( const vec &  avg_power_dB = "0",
const ivec &  delay_prof = "0" 
)

Set both average power profile in dB and power delay profile in samples.

Definition at line 832 of file channel.cpp.

References a_prof, d_prof, init_flag, it_assert, itpp::min(), N_taps, itpp::norm(), and itpp::pow().

Referenced by set_channel_profile(), set_channel_profile_uniform(), and TDL_Channel().

void itpp::TDL_Channel::set_channel_profile_uniform ( const int  no_taps  ) 

Set channel profile to uniform with no_taps taps.

Definition at line 859 of file channel.cpp.

References it_assert, set_channel_profile(), and itpp::zeros().

void itpp::TDL_Channel::set_channel_profile_exponential ( int  no_taps  ) 

Set channel profile to exponential with no_taps taps.

Definition at line 875 of file channel.cpp.

References it_assert, and it_error.

void itpp::TDL_Channel::set_channel_profile ( Channel_Specification channel_spec  ) 

Set channel profile to a defined Channel_Specification (need to be discretized).

Definition at line 882 of file channel.cpp.

References itpp::Channel_Specification::get_channel_profile(), itpp::Channel_Specification::get_discrete_Ts(), itpp::Channel_Specification::is_discrete(), it_assert, itpp::round(), set_channel_profile(), and itpp::to_ivec().

void itpp::TDL_Channel::set_norm_doppler ( const double  norm_doppler  ) 

Set normalized doppler rate.

Definition at line 852 of file channel.cpp.

References init_flag, it_assert, and n_dopp.

Referenced by TDL_Channel().

void itpp::TDL_Channel::set_doppler_spectrum ( DOPPLER_SPECTRUM tap_spectrum  ) 

Set doppler spectrum for each tap in the channel profile. If not set default is Jakes.

Definition at line 894 of file channel.cpp.

References init_flag, it_assert, N_taps, itpp::Array< T >::set_size(), and tap_doppler_spectrum.

void itpp::TDL_Channel::set_LOS ( const double  relative_power,
const double  norm_doppler 
)

Set LOS component for the first tap (zero delay). Only possible if Rice is chosen as doppler spectrum. Relative power (Rice factor) and normalized doppler.

Definition at line 911 of file channel.cpp.

References init_flag, it_assert, los_dopp, los_power, N_taps, itpp::Rice, and tap_doppler_spectrum.

Referenced by TDL_Channel().

void itpp::TDL_Channel::set_generation_method ( const FADING_GENERATION_METHOD  method = Rice_MEDS  ) 

Set the fading generation method to method. Default is Rice_MEDS.

Definition at line 905 of file channel.cpp.

References init_flag, and method.

int itpp::TDL_Channel::taps (  )  [inline]

Return the number of channel taps.

Definition at line 700 of file channel.h.

References N_taps.

void itpp::TDL_Channel::get_channel_profile ( vec &  avg_power_dB,
ivec &  delay_prof 
)

Get both average power profile in dB and power delay profile in samples.

Definition at line 923 of file channel.cpp.

References a_prof, d_prof, and itpp::log10().

vec itpp::TDL_Channel::get_avg_power_dB (  ) 

Return power profile in dB.

Definition at line 930 of file channel.cpp.

References a_prof, and itpp::log10().

ivec itpp::TDL_Channel::get_delay_prof (  ) 

Return delay profile in samples.

Definition at line 935 of file channel.cpp.

References d_prof.

double itpp::TDL_Channel::get_norm_doppler (  ) 

Return normalized doppler rate.

Definition at line 941 of file channel.cpp.

References n_dopp.

double itpp::TDL_Channel::get_LOS_power (  ) 

Get LOS relative power (Rice factor) on first tap (zero delay). Only if fist tap is of type Rice spectrum.

Definition at line 946 of file channel.cpp.

References los_power.

double itpp::TDL_Channel::get_LOS_doppler (  ) 

Get LOS doppler (relative to the maximum doppler) on first tap (zero delay). Only if fist tap is of type Rice spectrum.

Definition at line 951 of file channel.cpp.

References los_dopp.

FADING_GENERATION_METHOD itpp::TDL_Channel::get_generation_method (  ) 

Return fading generation method.

Definition at line 956 of file channel.cpp.

References method.

double itpp::TDL_Channel::calc_mean_excess_delay (  ) 

Calculate mean excess delay in samples.

Definition at line 961 of file channel.cpp.

References a_prof, d_prof, itpp::sqr(), and itpp::sum_sqr().

double itpp::TDL_Channel::calc_rms_delay_spread (  ) 

Calculate RMS delay spread in samples.

Definition at line 966 of file channel.cpp.

References a_prof, d_prof, itpp::sqr(), itpp::sqrt(), itpp::sum_sqr(), and itpp::to_vec().

void itpp::TDL_Channel::init (  ) 

Initialize all fading generators (needs to be called before generate() or filter()).

Definition at line 974 of file channel.cpp.

References fading_gen, itpp::FIR, itpp::IFFT, init_flag, it_assert, it_error, itpp::Jakes, los_dopp, los_power, itpp::MEDS, method, n_dopp, N_taps, itpp::Rice, itpp::Rice_MEDS, itpp::Array< T >::set_size(), itpp::Array< T >::size(), and tap_doppler_spectrum.

Referenced by generate().

void itpp::TDL_Channel::generate ( const int  no_samples,
Array< cvec > &  channel_coeff 
) [virtual]

Generate no_samples values of the channel.

Definition at line 1027 of file channel.cpp.

References a_prof, fading_gen, init(), init_flag, N_taps, and itpp::Array< T >::set_size().

Referenced by filter(), and generate().

void itpp::TDL_Channel::generate ( const int  no_samples,
cmat &  channel_coeff 
) [virtual]

Generate no_samples values of the channel. Returns cmat with one tap per column.

Definition at line 1038 of file channel.cpp.

References a_prof, fading_gen, generate(), init(), init_flag, and N_taps.

void itpp::TDL_Channel::generate ( const int  no_samples,
const int  upsampling_factor,
Array< cvec > &  channel_coeff 
) [virtual]

Generate no_samples values from the fading process upsampled by upsampling_factor.

Definition at line 1052 of file channel.cpp.

References a_prof, fading_gen, generate(), init(), init_flag, it_assert, method, N_taps, itpp::Rice_MEDS, and itpp::Array< T >::set_size().

void itpp::TDL_Channel::generate ( const int  no_samples,
const int  upsampling_factor,
cmat &  channel_coeff 
) [virtual]

Generate no_samples values from the fading process upsampled by upsampling_factor.

Definition at line 1066 of file channel.cpp.

References a_prof, fading_gen, generate(), init(), init_flag, it_assert, method, N_taps, and itpp::Rice_MEDS.

void itpp::TDL_Channel::shift_time_offset ( const int  no_samples  ) 

Shift generator time offset by a number of samples.

Definition at line 1080 of file channel.cpp.

References fading_gen, and N_taps.

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 1088 of file channel.cpp.

References itpp::concat(), d_prof, itpp::elem_mult(), itpp::max(), N_taps, and itpp::zeros_c().

Referenced by filter().

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 1099 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 ( const cvec &  input,
cvec &  output,
Array< cvec > &  channel_coeff 
)

Generate channel coefficients and filter the input. Return output and channel coefficients.

Definition at line 1110 of file channel.cpp.

References filter_known_channel(), and generate().

Referenced by filter(), and operator()().

void itpp::TDL_Channel::filter ( const cvec &  input,
cvec &  output,
cmat &  channel_coeff 
)

Generate channel coefficients and filter the input. Return output and channel coefficients.

Definition at line 1116 of file channel.cpp.

References filter_known_channel(), and generate().

cvec itpp::TDL_Channel::filter ( const cvec &  input,
Array< cvec > &  channel_coeff 
)

Generate channel coefficients and filter the input. Return output and channel coefficients.

Definition at line 1122 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 1129 of file channel.cpp.

References filter().

void itpp::TDL_Channel::filter ( const cvec &  input,
cvec &  output 
)

Generate channel coefficients and filter the input. Only return the output.

Definition at line 1136 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 1142 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 1150 of file channel.cpp.

References filter().

void itpp::TDL_Channel::operator() ( const cvec &  input,
cvec &  output,
cmat &  channel_coeff 
)

Generate channel coefficients and filter the input. Return output and channel coefficients.

Definition at line 1155 of file channel.cpp.

References filter().

cvec itpp::TDL_Channel::operator() ( const cvec &  input,
Array< cvec > &  channel_coeff 
)

Generate channel coefficients and filter the input. Return output and channel coefficients.

Definition at line 1161 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 1166 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 1171 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 1177 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 1197 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 1221 of file channel.cpp.

References d_prof, itpp::fft(), init_flag, it_assert, and N_taps.


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

Generated on Wed Apr 18 11:45:39 2007 for IT++ by Doxygen 1.5.2