#include "itcomm.h"
using std::cout;
using std::endl;
using namespace itpp;
int main(void)
{
cout << "====================================================" << endl;
cout << "convcode: Test of convolutional coders" << endl;
cout << "====================================================" << endl;
Array<ivec> spectrum, spectrum_fast, spectrum_punct, spectrum_punct_fast;
//Array<llvec> spectrum, spectrum_fast, spectrum_punct, spectrum_punct_fast;
spectrum.set_size(2);
spectrum_fast.set_size(2);
spectrum_punct.set_size(2);
spectrum_punct_fast.set_size(2);
ivec dist_profile;
//llvec dist_profile;
Convolutional_Code code;
Punctured_Convolutional_Code code_punct;
BPSK bpsk;
ivec generator(2);
generator(0)=0133;
generator(1)=0171;
bvec bits=randb(7);
bvec outbits, temp_outbits, decoded_bits;
vec tx_symbols, rx_symbols;
code.set_generator_polynomials(generator, 7);
code_punct.set_generator_polynomials(generator, 7);
bmat punct_matrix = "0 1;1 0";
code_punct.set_puncture_matrix(punct_matrix);
cout << "code: catastrophic test:" << code.catastrophic() << endl;
cout << "code: rate:" << code.get_rate() << endl;
code.calculate_spectrum(spectrum, 10, 10);
code.fast(spectrum_fast, 10, 10);
code.distance_profile(dist_profile, 10);
cout << "spectrum:" << endl;
cout << "Ad=" << spectrum(0) << endl;
cout << "Cd=" << spectrum(1) << endl;
cout << "spectrum, fast:" << endl;
cout << "Ad=" << spectrum_fast(0) << endl;
cout << "Cd=" << spectrum_fast(1) << endl;
cout << "distance profile=:" << dist_profile << endl;
cout << "code: encode:" << endl;
code.encode_tail(bits, outbits);
bpsk.modulate_bits(outbits, tx_symbols);
rx_symbols = tx_symbols;
code.decode_tail(tx_symbols, decoded_bits);
cout << "bits =" << bits << endl;
cout << "outbits =" << outbits << endl;
cout << "decoded_bits =" << decoded_bits << endl;
cout << endl << "=====================================" << endl;
cout << "Punctured code" << endl;
cout << "=====================================" << endl;
cout << "code_punct: catastrophic test:" << code_punct.catastrophic() << endl;
cout << "code_punct: rate:" << code_punct.get_rate() << endl;
cout << "punct_matrix = " << code_punct.get_puncture_matrix() << endl;
cout << "code_punct: encode:" << endl;
code_punct.encode_tail(bits, outbits);
bpsk.modulate_bits(outbits, tx_symbols);
rx_symbols = tx_symbols;
code_punct.decode_tail(rx_symbols, decoded_bits);
cout << "bits =" << bits << endl;
cout << "outbits =" << outbits << endl;
cout << "decoded_bits =" << decoded_bits << endl;
}
syntax highlighted by Code2HTML, v. 0.9.1