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 PSK_FSK, který obsahuje funke :

 

 

kde :

public enum TypModulaceAM

 {

        PSK2 = 0,

        FSK2,

        PSK4,

        FSK4,

        QPSK

}

 

// Ampl_mod – amplituda signalu

// Freq1 až Freq4– frekvence signalu

// time – cas zobrazeneho signalu

// bity – pole bitu

public Data(int Ampl, int Freq1, int Freq2, int Freq3, int Freq4, int Time, bool[] bity)

 

 

//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);

 

//PSK2

            float lenght = data.Time / 1000f;

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

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

            float krok = lenght / 10;

 

            int index = 0; float i = 0;

            float krok2 = krok;

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

            {

                if (index >= 10) break;

                if (i > krok2)

                {

                    krok2 += krok;

                    index++;

                }

                if (data.bity[index]) //1

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq1 * i));

                else //0

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq1 * i + Math.PI));

            }

 

 

//PSK4

            float lenght = data.Time / 1000f;

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

            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 >= 8) 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.Freq1 * i));

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

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

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

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq1 * i + Math.PI));

                else //11

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

            }

 

 

//FSK2

            float lenght = data.Time / 1000f;

            float deltat = 1.0f / (data.Time * (data.Freq1 < data.Freq2 ? data.Freq2 : data.Freq1));

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

            float krok = lenght / 10;

 

            int index = 0; float i = 0;

            float krok2 = krok;

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

            {

                if (index >= 10) break;

                if (i > krok2)

                {

                    krok2 += krok;

                    index++;

                }

                if (data.bity[index])

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq1 * i));

                else

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq2 * i));

            }

 

 

//FSK4

            float lenght = data.Time / 1000f;

            float nejvetsi = 0.0f;

            if (data.Freq1 > data.Freq2) nejvetsi = data.Freq1;

            if (nejvetsi < data.Freq3) nejvetsi = data.Freq3;

            if (nejvetsi < data.Freq4) nejvetsi = data.Freq4;

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

            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 >= 8) 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.Freq1 * i));

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

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq2 * i));

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

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq3 * i));

                else //11

                    vrat.Add(i, data.Ampl * Math.Cos(2 * Math.PI * data.Freq4 * i));

            }

 

 

 

//QPSK

           float lenght = data.Time / 1000f;

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

            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 >= 8) 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.Freq1 * 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.Freq1 * 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.Freq1 * i + ((5 / 4) * Math.PI)));

                else //11

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

            }

 

 

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

-          ReckceZnaky.Velke

-          ReckceZnaky.Male