The turbo equalizer uses a SISO NSC module and a SISO equalizer module. Optionally a precoder can be used at the channel input (by default the precoder is enabled).
Reference: R. Koetter, A. C. Singer, and M. Tuchler, ''Turbo equalization: an iterative equalization and decoding technique for coded data transmision,`` IEEE Signal Processing Magazine, pp. 67-80, Jan. 2004
#define USE_PRECODER
using std::cout;
using std::endl;
using std::string;
{
ivec gen = "07 05";
double R = 1.0 / 2.0;
double Ec = 1.0;
#ifdef USE_PRECODER
ivec prec_gen = "03 02";
#endif
vec sigma2 = (0.5 * Ec / R) * pow(inv_dB(
EbN0_dB), -1.0);
#ifdef USE_PRECODER
#endif
#ifdef USE_PRECODER
#endif
RNG_randomize();
{
#ifdef USE_PRECODER
#endif
{
}
}
}
it_file ff(
"turbo_equalizer_bersim_multipath.it");
return 0;
}
Ordinary AWGN Channel for cvec or vec inputs and outputs.
Array< T > left(int n) const
Get n left elements of the array.
int length() const
Returns the number of data elements in the array object.
Bit Error Rate Counter (BERC) Class.
BPSK modulator with real symbols.
void modulate_bits(const bvec &bits, vec &output) const
Modulate bits into BPSK symbols in complex domain.
void demodulate_bits(const vec &signal, bvec &output) const
Demodulate noisy BPSK symbols in complex domain into bits.
Binary Convolutional rate 1/n class.
void encode_tail(const bvec &input, bvec &output)
Encoding that starts and ends in the zero state.
void set_generator_polynomials(const ivec &gen, int constraint_length)
Set generator polynomials. Given in Proakis integer form.
Automatic naming when saving.
A Recursive Systematic Convolutional Encoder/Decoder class.
Soft Input Soft Output (SISO) modules.
The IT++ file format reading and writing class.
Include file for the IT++ communications module.
Mat< bin > bmat
bin matrix
When you run this program, the results (BER and EbN0_dB) are saved into turbo_equalizer_bersim_multipath.it file. Using the following MATLAB script
clear all
itload('turbo_equalizer_bersim_multipath.it');
figure
semilogy(EbN0_dB, BER, 'o-')
grid on
xlabel('E_b/N_0 [dB]')
ylabel('BER')
the results can be displayed.