//---------------------------------------------------------------------------
#include <vcl.h>
#include "funkcje.h"
#include <iostream.h>
#include <fstream.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PERFGRAP"
#pragma link "CSPIN"
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BStartClick(TObject *Sender)
{
ofstream plik;
plik.open("wyniki.csv");
var = ScrollBar1->Position+1;
liczba_danych = Label4->Caption.ToInt();
//Setting dynamic tables
Tdane_wejsciowe = new bool[liczba_danych];
//parral_to_serial_out = new bool[liczba_danych*2];
Tprzeplot_wyjscie = new bool[liczba_danych];
zdekodowane = new bool[liczba_danych];
Trozplot_wyjscie = new bool[liczba_danych];
Tx1_symbol = new int[liczba_danych];//pierwsza antena nadajnika
Tx2_symbol = new int[liczba_danych];//druga antena nadajnika
Tx3_symbol = new int[liczba_danych];//trzecia antena nadajnika
odebrane = new complex<double>[liczba_danych];
oszacowane = new complex<double>[liczba_danych];
SNR=SNROd->Value;
double dzielnik;
dzielnik = ((SNRdo->Value)-(SNROd->Value))/(double)(SNRkrok->Value);
/*==========================MAIN=====================*/
int licz =1;
do{
int counter=0;
double wynik;
int licznik_bledow=0;
do{
int FER=0;
//Data generation
source_gen(Tdane_wejsciowe);
switch (ScrollBar1->Position){
case 0:
interleaver64(Tdane_wejsciowe);break;
case 1:
interleaver144(Tdane_wejsciowe);break;
case 2:
interleaver256(Tdane_wejsciowe);break;
case 3:
//interleaver512(Tdane_wejsciowe);break;
Tprzeplot_wyjscie = Tdane_wejsciowe;break;
}
switch (rodz_modulacji){
//BPSK
case 0:{
for(int k=0;k<liczba_danych;k++){
Tkoder_tailbiting_wyjscie[0][k]=Tprzeplot_wyjscie[k]; //pomijamy koder
}
}break;
//QPST
case 1:{
tailcoder1na2();
}break;
case 2:{
tailcoder2na3();
}break;
}
//STTC CODER
STTCcoder();
kanal();
//odbiornik
switch(rodz_modulacji){
case 0:
odbiornik(Tx1_symbol, Tx2_symbol, Tx3_symbol, complex<double>(1.0,0.0),0);break;
case 1:
odbiornik(Tx1_symbol, Tx2_symbol, Tx3_symbol, complex<double>(0.71,0.71),0);break;
case 2:
odbiornik(Tx1_symbol, Tx2_symbol, Tx3_symbol, complex<double>(1.0,0.0),0);break;
}
if (rodz_modulacji>0)
viterbi_alg() ;
else{
for (int q=0;q<liczba_danych;q++)
zdekodowane[q]=od_przed_viterbim[0][q];
}
switch (ScrollBar1->Position){
case 0:
rozplot64();break;
case 1:
rozplot144();break;
case 2:
rozplot256();break;
case 3:
//rozplot512();break;
Trozplot_wyjscie=zdekodowane;break;
}
int blad = policz_bledy();
if (blad > 99) FER = 1;
else licznik_bledow++;
counter++;
}while ((licznik_bledow<100)&&(counter<30000));
CGauge1->Progress=(int)licz/dzielnik*100;
licz++;
wynik = ((double)licznik_bledow/(double)counter);
plik<<"1;"<<SNR<<";"<<wynik<<"\n";
SNR+=SNRkrok->Value;
}while (SNR<(SNRdo->Value)+1);
}
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
switch (ScrollBar1->Position){
case 0:
Label4->Caption = "64";
var = ScrollBar1->Position; break;
case 1:
Label4->Caption = "144";
var = ScrollBar1->Position; break;
case 2:
Label4->Caption = "256";
var = ScrollBar1->Position; break;
case 3:
Label4->Caption = "512";
var = ScrollBar1->Position; break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RodzModGroupClick(TObject *Sender)
{
switch (RodzModGroup->ItemIndex){
case 0: rodz_modulacji=0;break;
case 1: rodz_modulacji=1;break;
case 2: rodz_modulacji=2;break;
}
}
void __fastcall TForm1::GAntenyTxClick(TObject *Sender)
{
switch (GAntenyTx->ItemIndex){
case 0:{ liczba_anten_nad=0;};break;
case 1:{ liczba_anten_nad=1;};break;
case 2:{ liczba_anten_nad=2;};break;
}
switch (GAntenyRx->ItemIndex){
case 0:{ liczba_anten_odb=0;};break;
case 1:{ liczba_anten_odb=1;};break;
case 2:{ liczba_anten_odb=2;};break;
}
}