60 "Fading_Generator::set_LOS_power(): Relative_power can not be negative");
68 it_warning(
"Fading_Generator::set_LOS_doppler(): This function has no effect on this kind of generator");
73 it_warning(
"Fading_Generator::set_time_offset(): This function has no effect on this kind of generator");
78 it_warning(
"Fading_Generator::set_norm_doppler(): This function has no effect on this kind of generator");
83 it_warning(
"Fading_Generator::set_filter_length(): This function has no effect on this kind of generator");
88 it_warning(
"Fading_Generator::set_doppler_spectrum(): This function has no effect on this kind of generator");
93 it_warning(
"Fading_Generator::set_no_frequencies(): This function has no effect on this kind of generator");
98 it_warning(
"Fading_Generator::set_rice_method(): This function has no effect on this kind of generator");
103 it_warning(
"Fading_Generator::get_LOS_doppler(): This function has no effect on this kind of generator");
109 it_warning(
"Fading_Generator::get_time_offset(): This function has no effect on this kind of generator");
115 it_warning(
"Fading_Generator::get_filter_length(): This function has no effect on this kind of generator");
121 it_warning(
"Fading_Generator::get_norm_doppler(): This function has no effect on this kind of generator");
127 it_warning(
"Fading_Generator::get_doppler_spectrum(): This function has no effect on this kind of generator");
133 it_warning(
"Fading_Generator::get_no_frequencies(): This function has no effect on this kind of generator");
139 it_warning(
"Fading_Generator::get_rice_method(): This function has no effect on this kind of generator");
145 it_warning(
"Fading_Generator::shift_time_offset(): This function has no effect on this kind of generator");
213 "Correlated_Fading_Generator: Normalized Doppler out of range");
221 "Correlated_Fading_Generator::set_LOS_doppler(): Relative Doppler out of range");
267 "Rice_Fading_Generator::set_no_frequencies(): Too low number of Doppler frequencies");
286 it_error(
"Rice_Fading_Generator::init(): Wrong Rice method for this fading generator");
325 * std::complex<double>(std::cos(
f01 *
tmp), -std::sin(
f01 *
tmp))
327 * std::complex<double>(std::cos(
f02 *
tmp), -std::sin(
f02 *
tmp));
348 f2 =
sin(
pi / (2 * (
Ni + 1)) * (n - 0.5));
349 c2 = std::sqrt(1.0 / (
Ni + 1)) *
ones(
Ni + 1);
357 f1 = std::sqrt(2.0) * 0.05 *
erfinv((2 * n - 1) / (2 *
Ni));
361 f2 = std::sqrt(2.0) * 0.1 *
erfinv((2 * n - 1) / (2 *
Ni));
368 sgm_0_2 = std::sqrt(10.0) / (std::sqrt(10.0) + 0.15);
370 f1 = std::sqrt(2.0) * 0.1 *
erfinv((2 * n - 1) / (2 *
Ni));
372 sgm_0_2 = 0.15 / (std::sqrt(10.0) + 0.15);
374 f2 = std::sqrt(2.0) * 0.15 *
erfinv((2 * n - 1) / (2 *
Ni));
380 it_error(
"Rice_Fading_Generator::init_MEDS(): Wrong spectrum method for this fading generator");
399 "FIR_Fading_Generator::set_filter_length(): Filter length should be at least 50");
451 for (
int i = 1;
i <= L;
i++) {
487 double df = 1.0 / Nfft;
497 "IFFT_Fading_Generator::generate_Jakes(): Too low normalized doppler or too small blocks of data. Results in an inefficient algorithm with lots of zero-padding");
504 for (
int i = 0;
i < F.
size();
i++) {
506 S(
i) = std::sqrt(1.5 / (
pi *
n_dopp * std::sqrt(1 - std::pow(F(
i) /
n_dopp, 2))));
507 else if (std::fabs(F(
i)) ==
n_dopp)
518 x(Nfft - 1 -
i) =
S(Nfft - 1 -
i) *
randn_c();
545 "Channel_Specification::set_channel_profile(): Minimum relative delay must be 0");
547 "Channel_Specification::set_channel_profile(): Power and delay vectors must be of equal length");
549 "Channel_Specification::set_channel_profile(): First tap must be at zero delay");
552 "Channel_Specification::set_channel_profile(): Delays should be sorted and unique");
571 case ITU_Vehicular_A:
573 vec(
"0 310 710 1090 1730 2510") * 1e-9);
576 case ITU_Vehicular_B:
578 vec(
"0 300 8900 12900 17100 20000") * 1e-9);
581 case ITU_Pedestrian_A:
583 vec(
"0 110 190 410") * 1e-9);
586 case ITU_Pedestrian_B:
588 vec(
"0 200 800 1200 2300 3700") * 1e-9);
593 set_channel_profile(vec(
"-5.7 -7.6 -10.1 -10.2 -10.2 -11.5 -13.4 -16.3 -16.9 -17.1 -17.4 -19 -19 -19.8 -21.5 -21.6 -22.1 -22.6 -23.5 -24.3"),
594 vec(
"0 217 512 514 517 674 882 1230 1287 1311 1349 1533 1535 1622 1818 1836 1884 1943 2048 2140") * 1e-9);
599 vec(
"0 42 101 129 149 245 312 410 469 528") * 1e-9);
604 set_channel_profile(vec(
"-3.6 -8.9 -10.2 -11.5 -11.8 -12.7 -13.0 -16.2 -17.3 -17.7 -17.6 -22.7 -24.1 -25.8 -25.8 -26.2 -29 -29.9 -30 -30.7"),
605 vec(
"0 356 441 528 546 609 625 842 916 941 15000 16172 16492 16876 16882 16978 17615 17827 17849 18016") * 1e-9);
611 vec(
"0 200 400 600") * 1e-9);
617 vec(
"0 100 200 300 400 500") * 1e-9);
623 vec(
"0 200 600 1600 2400 5000") * 1e-9);
632 vec(
"0 200 500 1600 2300 5000") * 1e-9);
640 vec(
"0 200 400 600 800 1200 1400 1800 2400 3000 3200 5000") * 1e-9);
652 case COST207_TU12alt:
654 vec(
"0 200 400 600 800 1200 1400 1800 2400 3000 3200 5000") * 1e-9);
667 vec(
"0 400 1000 1600 5000 6600") * 1e-9);
676 vec(
"0 300 1000 1600 5000 6600") * 1e-9);
685 vec(
"0 200 400 800 1600 2200 3200 5000 6000 7200 8200 10000") * 1e-9);
697 case COST207_BU12alt:
699 vec(
"0 100 300 700 1600 2200 3100 5000 6000 7200 8100 10000") * 1e-9);
714 vec(
"0 200 400 600 15000 17200") * 1e-9);
721 vec(
"0 100 300 500 15000 17200") * 1e-9);
728 vec(
"0 200 400 600 800 2000 2400 15000 15200 15800 17200 20000") * 1e-9);
740 case COST207_HT12alt:
742 vec(
"0 100 300 500 700 1000 1300 15000 15200 15700 17200 20000") * 1e-9);
771 "Channel_Specification::set_LOS(): Cannot set LOS component if not set channel profile");
773 "Channel_Specification::set_LOS(): Tap number out of range");
775 "Channel_Specification::set_LOS(): Normalized Doppler out of range");
777 "Channel_Specification::set_LOS(): Rice factor out of range");
789 "Channel_Specification::set_LOS(): Improper size of input vectors");
796 "Channel_Specification::set_LOS(): Rice factor out of range");
803 "Channel_Specification::set_LOS(): Improper size of input vectors");
808 "Channel_Specification::set_LOS(): Normalized Doppler out of range");
810 "Channel_Specification::set_LOS(): Rice factor out of range");
827 "Channel_Specification::get_doppler_spectrum(): Index of of range");
843 return std::sqrt(b -
a*
a);
852 init_flag(
false), n_dopp(0.0), fading_type(Independent), method(Rice_MEDS),
853 filter_length(0), nrof_freq(16), discrete_Ts(0.0)
866 init_flag(
false), n_dopp(0.0), fading_type(Independent), method(Rice_MEDS),
891 "TDL_Channel::set_channel_profile(): Minimum relative delay must be 0.");
893 "TDL_Channel::set_channel_profile(): Power and delay vectors must be of equal length!");
895 "TDL_Channel::set_channel_profile(): First tap must be at zero delay");
898 "TDL_Channel::set_channel_profile(): Delays should be sorted and unique");
919 it_assert(
no_taps >= 1,
"TDL_Channel::set_channel_profile_uniform(): Minimum number of taps is 1.");
931 it_assert(
no_taps >= 1,
"TDL_Channel::set_channel_profile_exponential(): Minimum number of taps is 1.");
986 "TDL_Channel::set_norm_doppler(): Normalized Doppler out of range");
997 "TDL_Channel::set_LOS(): Improper size of input vectors");
1004 "TDL_Channel::set_LOS(): Rice factor out of range");
1011 "TDL_Channel::set_LOS(): Improper size of input vectors");
1016 "TDL_Channel::set_LOS(): Normalized Doppler out of range");
1018 "TDL_Channel::set_LOS(): Rice factor out of range");
1028 "TDL_Channel::set_LOS_power(): Improper size of input vector");
1042 "TDL_Channel::set_LOS_doppler(): Improper size of input vector");
1044 it_assert(
n_dopp > 0,
"TDL_Channel::set_LOS_doppler(): Normalized Doppler needs to be non zero to set the LOS Doppler in a Correlated fading generator");
1049 "TDL_Channel::set_LOS_doppler(): Normalized Doppler out of range");
1059 it_assert(
N_taps > 0,
"TDL_Channel::set_doppler_spectrum(): Channel profile not defined yet");
1061 it_assert(
n_dopp > 0,
"TDL_Channel::set_doppler_spectrum(): Normalized Doppler needs to be non zero to set the Doppler spectrum in the Correlated Rice MEDS fading generator");
1076 "TDL_Channel::set_doppler_spectrum(): Improper tap number");
1078 it_assert(
n_dopp > 0,
"TDL_Channel::set_doppler_spectrum(): Normalized Doppler needs to be non zero to set the Doppler spectrum in the Correlated Rice MEDS fading generator");
1091 it_assert(
n_dopp > 0,
"TDL_Channel::set_no_frequencies(): Normalized Doppler needs to be non zero to set the number of frequencies in the Correlated Rice MEDS fading generator");
1102 it_assert(
n_dopp > 0,
"TDL_Channel::set_filter_length(): Normalized Doppler needs to be non zero to use the Correlated FIR fading generator");
1114 it_assert(
n_dopp > 0,
"TDL_Channel::set_time_offset(): Normalized Doppler needs to be non zero to set time offset in a Correlated fading generator");
1127 it_assert(
n_dopp > 0,
"TDL_Channel::shift_time_offset(): Normalized Doppler needs to be non zero to shift time offset in a Correlated fading generator");
1168 return (std::sqrt(b -
a*
a));
1173 it_assert(
N_taps > 0,
"TDL_Channel::init(): Channel profile not defined yet");
1175 "TDL_Channel::init(): LOS profile does not mach the channel profile");
1210 "TDL_Channel::init(): Correlated fading requires non zero normalized Doppler");
1231 "TDL_Channel::init(): FIR fading generator can be used with Jakes spectrum only");
1246 "TDL_Channel::init(): IFFT fading generator can be used with Jakes spectrum only");
1257 it_error(
"TDL_Channel::init(): No such fading generation method");
1262 it_error(
"TDL_Channel::init(): No such fading type");
1293 output.set_size(input.size() +
maxdelay,
false);
1304 output.set_size(input.size() +
maxdelay,
false);
1380 it_assert(
init_flag ==
true,
"calc_impulse_response: TDL_Channel is not initialized");
1390 impulse_response(
i).zeros();
1400 it_assert(
init_flag ==
true,
"calc_frequency_response: TDL_Channel is not initialized");
1412 impulse_response.zeros();
1424 it_assert(
init_flag ==
true,
"calc_frequency_response: TDL_Channel is not initialized");
1437 impulse_response.zeros();
1449 it_assert(
N_taps > 0,
"TDL_Channel::discretize(): No channel profile specified");
1454 "TDL_Channel:: discretize(): Channel profile lenghts must be equal to the number of taps");
1495 "TDL_Channel::discretize(): Sampling frequency too low. Can not discretize the channel with different Doppler spectra on merged taps.");
1496 it_warning(
"TDL_Channel::discretize(): Sampling frequency too low. Merging original tap " <<
i <<
" with new tap " <<
j <<
".");
1499 it_warning(
"TDL_Channel::discretize(): LOS Doppler value reset to 0.7 for tap " <<
j <<
" due to the merging process.");
1536 output(
i) = input(
i) +
bin(1);
1539 output(
i) = input(
i);
1552 int n = input.size();
1562 int n = input.
size();
Definitions of Bessel functions.
Communication channels' classes - header file.
cvec operator()(const cvec &input)
Feed the complex input input through the complex-valued AWGN channel.
int size() const
Returns the number of data elements in the array object.
void set_size(int n, bool copy=false)
Resizing an Array<T>.
int length() const
Returns the number of data elements in the array object.
bvec operator()(const bvec &input)
Feed input through the BSC channel.
General specification of a time-domain multipath channel.
vec los_dopp
Relative Rice Doppler for each Rice component.
void set_doppler_spectrum(DOPPLER_SPECTRUM *tap_spectrum)
Set doppler spectrum for each tap in the channel profile.
int N_taps
Number of taps.
double calc_rms_delay_spread() const
Calculate RMS delay spread in samples.
vec los_power
Relative power for each Rice component.
double calc_mean_excess_delay() const
Calculate mean excess delay in samples.
Array< DOPPLER_SPECTRUM > tap_doppler_spectrum
Doppler spectrum for each tap.
vec a_prof_dB
Power profile in dB.
void set_LOS(int tap_number, double relative_power, double relative_doppler=0.7)
Set LOS (Rice) components for tap tap_number.
Array< DOPPLER_SPECTRUM > get_doppler_spectrum() const
Get doppler spectrum for tap index.
void set_channel_profile(const vec &avg_power_dB, const vec &delay_prof)
Set both average power profile in dB and power delay profile in seconds.
Channel_Specification(const vec &avg_power_dB="0", const vec &delay_prof="0")
Default constructor (power profile in dB, delay profile in seconds)
void get_channel_profile(vec &avg_power_dB, vec &delay_prof) const
Get both average power profile in dB and power delay profile in seconds.
vec d_prof
Delay profile in seconds.
void sample_vector(int size, cvec &out)
Get a Complex Normal (0,1) distributed vector.
FIR type Fading generator class.
virtual void init()
Initialize the generator.
FIR_Fading_Generator(double norm_doppler, int filter_length=500)
Default constructor.
MA_Filter< std::complex< double >, double, std::complex< double > > fir_filter
Filter used for fading generation.
cvec left_overs
Left-overs from upsampling.
virtual void set_filter_length(int filter_length)
Set FIR filter length.
int fir_length
Size of FIR filter.
vec Jakes_filter(double norm_dopp, int order=100)
Jakes spectrum filter.
virtual void generate(int no_samples, cvec &output)
Generate no_samples values from the fading process.
virtual double get_time_offset() const
Get time offset in samples (for correlated fading generators)
virtual double get_LOS_doppler() const
Get relative Doppler of the LOS component (for correlated fading generators)
virtual void set_rice_method(RICE_METHOD method)
Set calculation method of Doppler frequencies and amplitudes (for Rice fading generator)
void set_LOS_power(double relative_power)
Set relative LOS power.
Fading_Generator()
Default constructor.
virtual int get_no_frequencies() const
Get number of sine frequencies (for Rice fading generator)
virtual int get_filter_length() const
Set FIR filter length (for FIR fading generator)
virtual void generate(int no_samples, cvec &output)=0
Generate no_samples values from the fading process.
virtual void shift_time_offset(int no_samples)
Shift generator time offset by a number of samples (for correlated fading generators)
double los_diffuse
Diffuse component: sqrt(1 / (1 + los_power))
bool init_flag
signals if generator is initialized or not
virtual void set_LOS_doppler(double relative_doppler)
Set relative Doppler of the LOS component (for correlated fading generators)
virtual double get_norm_doppler() const
Return normalized Doppler (for correlated fading generators)
virtual void set_time_offset(int offset)
Set time offset in samples (for correlated fading generators)
virtual void set_filter_length(int filter_length)
Set FIR filter length (for FIR fading generator)
double los_direct
Direct component: sqrt(los_power / (1 + los_power))
virtual RICE_METHOD get_rice_method() const
Get calculation method of Doppler frequencies and amplitudes (for Rice fading generator)
double los_power
Relative power of LOS component compared to diffuse component (K factor)
virtual void set_doppler_spectrum(DOPPLER_SPECTRUM spectrum)
Set Doppler spectrum (for Rice fading generator)
virtual void set_norm_doppler(double norm_doppler)
Set normalized Doppler (for correlated fading generators)
virtual DOPPLER_SPECTRUM get_doppler_spectrum() const
Return Doppler spectrum (for Rice fading generator)
virtual void set_no_frequencies(int no_freq)
Set number of sine frequencies (for Rice fading generator)
IFFT type Fading generator class.
void generate_Jakes(int no_samples, cvec &output)
Generator for Jakes spectrum.
virtual void init()
Initialize the generator.
virtual void generate(int no_samples, cvec &output)
Generate no_samples values from the fading process.
Independent (random) fading generator class.
virtual void generate(int no_samples, cvec &output)
Generate no_samples values from the fading process.
void set_coeffs(const Vec< T2 > &b)
Set the filter coefficients.
void sample_vector(int size, vec &out)
Get a Normal distributed (0,1) vector.
Rice type fading generator class.
virtual void set_doppler_spectrum(DOPPLER_SPECTRUM spectrum)
Set Doppler spectrum.
void init_MEDS()
Init function for MEDS method.
virtual void generate(int no_samples, cvec &output)
Generate no_samples values from the fading process.
virtual void set_rice_method(RICE_METHOD method)
Set calculation method of Doppler frequencies and amplitudes.
virtual void init()
Initialize the generator.
Rice_Fading_Generator(double norm_doppler, DOPPLER_SPECTRUM spectrum=Jakes, int no_freq=16, RICE_METHOD method=MEDS)
Default constructor.
DOPPLER_SPECTRUM dopp_spectrum
virtual void set_no_frequencies(int no_freq)
Set number of Doppler frequencies.
int Ni
Number of sine waves in a Gaussian process.
RICE_METHOD rice_method
Rice process generation method.
Static fading generator class.
virtual void generate(int no_samples, cvec &output)
Generate no_samples values from the fading process.
double static_sample_re
Static Rayleigh distributed sample.
virtual void init()
Initialize the generator.
vec a_prof
Average amplitude of each tap.
void set_correlated_method(CORRELATED_METHOD method)
Set the fading generation method to method.
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 init()
Initialize all fading generators. Automatically invoked in generate() or filter() functions.
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() functio...
CORRELATED_METHOD method
Correlated fading generation method: Rice_MEDS (default), IFFT or FIR.
Array< DOPPLER_SPECTRUM > tap_doppler_spectrum
Doppler spectrum for each tap.
void discretize(const vec &delay_profile)
Discretize the delay profile with discrete_Ts (Ts). All taps within ((i-0.5)Ts,(i+0....
double n_dopp
Normalized Doppler of the correlated fading.
vec get_avg_power_dB() const
Return power profile in dB.
int N_taps
Number of taps.
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.
double get_time_offset() const
Get fading generators' time ofset.
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 set_LOS_power(const vec &relative_power)
Set LOS power for each tap. LOS Doppler will be set to 0.7 by default.
vec los_power
Relative power for each Rice component.
void set_no_frequencies(int no_freq)
Set number of sine frequencies. Rice_MEDS method will be used.
void set_fading_type(FADING_TYPE fading_type)
Set fading type to one of Independent, Static or Correlated.
TDL_Channel(const vec &avg_power_dB="0", const ivec &delay_prof="0")
Default constructor.
void shift_time_offset(int no_samples)
Shift fading generators' time offset. A Correlated fading type will be used.
virtual ~TDL_Channel()
Destructor.
double calc_rms_delay_spread() const
Calculate RMS delay spread in samples.
void set_LOS_doppler(const vec &relative_doppler)
Set LOS doppler for each tap. A Correlated fading type will be used.
bool init_flag
Channel ready to produce data.
ivec d_prof
Delay in samples for each tap.
void set_norm_doppler(double norm_doppler)
Set normalized Doppler rate. A Correlated fading type will be used.
FADING_TYPE fading_type
Fading type: Independent (default), Static or Correlated.
void set_filter_length(int filter_length)
Set fading generator filter length. FIR method will be used.
int nrof_freq
Number of sine frequencies in the Rice MEDS fading generator.
void set_channel_profile_exponential(int no_taps)
Set channel profile to exponential with no_taps taps.
Array< Fading_Generator * > fading_gen
Fading generators for each tap.
vec los_dopp
Relative LOS Doppler for each Rice component.
double discrete_Ts
Sampling time of discretization.
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.
void set_time_offset(int offset)
Set fading generators' time offset in samples. A Correlated fading type will be used.
int filter_length
Filter length of FIR fading generator.
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 generate(int no_samples, Array< cvec > &channel_coeff)
Generate no_samples values of the channel.
double calc_mean_excess_delay() const
Calculate mean excess delay in samples.
void set_channel_profile_uniform(int no_taps)
Set channel profile to uniform with no_taps taps.
void operator()(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, Array< cvec > &channel_coeff)
Generate channel coefficients and filter the input. Return output and channel coefficients.
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)
Binary arithmetic (boolean) class.
Error functions - header file.
double besselj(int nu, double x)
Bessel function of first kind of order nu for nu integer.
double erfinv(double P)
Inverse of error function.
#define it_error(s)
Abort unconditionally.
#define it_warning(s)
Display a warning message.
#define it_assert(t, s)
Abort if t is not true.
ITPP_EXPORT void ifft(const cvec &in, cvec &out)
Inverse Fast Fourier Transform.
ITPP_EXPORT void fft(const cvec &in, cvec &out)
Fast Fourier Transform.
vec pow(const double x, const vec &y)
Calculates x to the power of y (x^y)
int pow2i(int x)
Calculate two to the power of x (2^x); x is integer.
double dB(double x)
Decibel of x (10*log10(x))
double inv_dB(double x)
Inverse of decibel of x.
int levels2bits(int n)
Calculate the number of bits needed to represent n different values (levels).
vec log10(const vec &x)
log-10 of the elements
T sum(const Vec< T > &v)
Sum of all elements in the vector.
T sum_sqr(const Vec< T > &v)
Sum of square of the elements in a vector.
int length(const Vec< T > &v)
Length of vector.
T min(const Vec< T > &in)
Minimum value of vector.
T max(const Vec< T > &v)
Maximum value of vector.
vec sqr(const cvec &data)
Absolute square of elements.
vec sqrt(const vec &x)
Square root of the elements.
double randu(void)
Generates a random uniform (0,1) number.
std::complex< double > randn_c(void)
Generates a random complex Gaussian (0,1) variable.
Vec< T > reverse(const Vec< T > &in)
Reverse the input vector.
vec spectrum(const vec &v, int nfft, int noverlap)
Power spectrum calculation.
vec linspace(double from, double to, int points)
linspace (works in the same way as the MATLAB version)
ITPP_EXPORT vec zeros(int size)
A Double vector of zeros.
ITPP_EXPORT cvec zeros_c(int size)
A Double Complex vector of zeros.
ITPP_EXPORT vec ones(int size)
A float vector of ones.
double norm(const cvec &v)
Calculate the 2-norm: norm(v)=sqrt(sum(abs(v).^2))
vec sin(const vec &x)
Sine function.
vec cos(const vec &x)
Cosine function.
vec hamming(int n)
Hamming window.
Various functions on vectors and matrices - header file.
Minimum and maximum functions on vectors and matrices.
Miscellaneous statistics functions and classes - header file.
CORRELATED_METHOD
Correlated fading generation methods: Rice_MEDS (default), IFFT or FIR.
ITPP_EXPORT int round_i(double x)
Round to nearest integer.
const double m_2pi
Constant 2*Pi.
RICE_METHOD
Rice fading generation methods: MEDS.
const Array< T > concat(const Array< T > &a, const T &e)
Append element e to the end of the Array a.
vec to_vec(const Vec< T > &v)
Converts a Vec<T> to vec.
const double pi
Constant Pi.
int ceil_i(double x)
The nearest larger integer.
Mat< Num_T > elem_div(const Mat< Num_T > &m1, const Mat< Num_T > &m2)
Element wise division of two matrices.
Mat< Num_T > elem_mult(const Mat< Num_T > &m1, const Mat< Num_T > &m2)
Element wise multiplication of two matrices.
CHANNEL_PROFILE
Predefined channel profiles. Includes LOS and Doppler spectrum settings.
FADING_TYPE
Fading generator type: Independent (default), Static or Correlated.
DOPPLER_SPECTRUM
Predefined Doppler spectra.
Resampling functions - header file.
Definitions of special vectors and matrices.
Trigonometric and hyperbolic functions - header file.
Definitions of window functions.