V Programu jsou vytvořeny funkce, které se zavolají s příslušnými parametry a následně nám vrátí požadované data, které lze přímo vykreslit do grafu. Je zde soubor QAM, který obsahuje funke :

public PointPairList ModulacniSignal(Data data)

public PointPairList QAM4(Data data)

public PointPairList QAM16(Data data)

 

kde :

public enum TypModulaceAM

 {

        QAM16 = 0,

        QAM4

}

// Ampl1 až Ampl3– amplituda signalu

// Freq_mod – frekvence signalu

// time – cas zobrazeneho signalu

//bity[] – pole bitu

public Data(int Freq_mod, int DC_mod, int Ampl_mod, TypSignalu TypSig_mod, int Freq_pasm, int fvz, int period, int time)

 

 

//Generovani modulacniho signalu

            float lenght = data.Time / 1000f;

            float deltat = lenght / 10;

 

            int index = 0; float i = 0;

            vrat.Add(0, 0);

            bool last = false;

            for (i = 0; i < lenght; i += deltat)

            {

                if (index >= 10) break;

                if (data.bity[index++])

                {

                   if(!last) vrat.Add(i, 0);

                   vrat.Add(i, 1);

                   last = true;

                }

                else

                {

                    if (last) vrat.Add(i, 1);

                    vrat.Add(i, 0);

                    last = false;

                }

            }

 

            if (last) vrat.Add(i, 1);

            else vrat.Add(i, 0);

 

 

//QAM4

            float lenght = data.Time / 1000f;

            float deltat = 1.0f / (data.Time * data.Freq);

            if (deltat < 0.00001f) deltat = 0.00001f;

            float krok = lenght / 5;

 

            int index = 0; float i = 0;

            float krok2 = krok;

            for (i = 0; i < lenght ; i += deltat)

            {

                if (index >= 9) break;

                if (i > krok2)

                {

                    krok2 += krok;

                    index += 2;

                }

                if ((data.bity[index] == false) && (data.bity[index + 1] == false)) //00

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((1 / 4) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == true)) //01

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((3 / 4) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == false)) //10

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((5 / 4) * Math.PI)));

                else //11

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((7 / 5) * Math.PI)));

            }

 

 

//QAM16

            float lenght = data.Time / 1000f;

            float deltat = 1.0f / (data.Time * data.Freq);

            if (deltat < 0.00001f) deltat = 0.00001f;

            float krok = lenght / (10.0f/4.0f);

 

            int index = 0; float i = 0;

            float krok2 = krok;

            for (i = 0; i < lenght; i += deltat)

            {

                if (index >= 6) break;

                if (i > krok2)

                {

                    krok2 += krok;

                    index+=4;

                    if (index > 4) break;

                }

                if ((data.bity[index] == false) && (data.bity[index+1] == false) && (data.bity[index+2] == false) && (data.bity[index+3] == false)) //0000

                    vrat.Add(i, data.Ampl3 * Math.Cos(2 * Math.PI * data.Freq * i + ((5 / 4) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == false) && (data.bity[index + 2] == false) && (data.bity[index + 3] == true)) //0001

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((13 / 12) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == false) && (data.bity[index + 2] == true) && (data.bity[index + 3] == false)) //0010

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((11 / 12) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == false) && (data.bity[index + 2] == true) && (data.bity[index + 3] == true)) //0011

                    vrat.Add(i, data.Ampl3 * Math.Cos(2 * Math.PI * data.Freq * i + ((3 / 4) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == true) && (data.bity[index + 2] == false) && (data.bity[index + 3] == false)) //0100

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((17 / 12) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == true) && (data.bity[index + 2] == false) && (data.bity[index + 3] == true)) //0101

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((5 / 4) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == true) && (data.bity[index + 2] == true) && (data.bity[index + 3] == true)) //0111

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((3 / 4) * Math.PI)));

                else if ((data.bity[index] == false) && (data.bity[index + 1] == true) && (data.bity[index + 2] == true) && (data.bity[index + 3] == false)) //0110

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((7 / 12) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == true) && (data.bity[index + 2] == false) && (data.bity[index + 3] == false)) //1100

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((19 / 12) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == true) && (data.bity[index + 2] == false) && (data.bity[index + 3] == true)) //1101

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((7 / 4) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == true) && (data.bity[index + 2] == true) && (data.bity[index + 3] == true)) //1111

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq * i + ((1 / 4) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == true) && (data.bity[index + 2] == true) && (data.bity[index + 3] == false)) //1110

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((5 / 12) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == false) && (data.bity[index + 2] == false) && (data.bity[index + 3] == false)) //1000

                    vrat.Add(i, data.Ampl3 * Math.Cos(2 * Math.PI * data.Freq * i + ((7 / 4) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == false) && (data.bity[index + 2] == false) && (data.bity[index + 3] == true)) //1001

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((23 / 12) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == false) && (data.bity[index + 2] == true) && (data.bity[index + 3] == true)) //1011

                    vrat.Add(i, data.Ampl2 * Math.Cos(2 * Math.PI * data.Freq * i + ((1 / 12) * Math.PI)));

                else if ((data.bity[index] == true) && (data.bity[index + 1] == false) && (data.bity[index + 2] == true) && (data.bity[index + 3] == false)) //1010

                    vrat.Add(i, data.Ampl3 * Math.Cos(2 * Math.PI * data.Freq * i + ((1 / 4) * Math.PI)));

 

            }

 

 

Pro zobrazení písmen řeské abecedy byla vytořeny funkce :

-          ReckceZnaky.Velke

-          ReckceZnaky.Male