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

public PointPairList ModulacniSignal(Data data)

public PointPairList[] Vzorky(Data data, float sizeUp, float sizeDown)

public PointPairList[] Urovne2bit(Data data)

public PointPairList[] Urovne3bit(Data data)

public PointPairList[] Urovne4bit(Data data)

public TextObj[] text2Bit (Data data)

public TextObj[] text3Bit (Data data)

public TextObj[] text4Bit (Data data)

public PointPairList PCModulation2Bit(Data data)

public PointPairList PCModulation3Bit(Data data)

public PointPairList PCModulation4Bit(Data data)

public PointPairList UnipolarNRZ2Bit(Data data)

public PointPairList UnipolarNRZ3Bit(Data data)

public PointPairList UnipolarNRZ4Bit(Data data)

public PointPairList PolarNRZ2Bit(Data data)

public PointPairList PolarNRZ2Bit(Data data)

public PointPairList PolarNRZ4Bit(Data data)

public PointPairList UnipolarRZ2Bit(Data data)

public PointPairList UnipolarRZ3Bit(Data data)

public PointPairList UnipolarRZ4Bit(Data data)

public PointPairList BipolarRZ2Bit(Data data)

public PointPairList BipolarRZ3Bit(Data data)

public PointPairList BipolarRZ4Bit(Data data)

public PointPairList ManchesterNRZ2Bit(Data data)

public PointPairList ManchesterNRZ3Bit(Data data)

public PointPairList ManchesterNRZ4Bit(Data data)

 

kde :

// Ampl_mod – amplituda modulacniho signalu

// Freq – frekvence modulacniho signalu

// TypSig_mod – typ modulacniho signalu (sin, cos)

// Ts– perioda vzorkovani

public Data(int Ampl_mod, int freq, TypSignalu TypSig_mod, int Ts)

 

 

Pro ukázku jsou zobrazeny pouze 2bitové funkce

 

//Generovani modulacniho signalu

            float t = (1.0f / (float)data.Freq1);

            double y1 = 0;

            for (float i = 0; i < t; i += (t / 1000))

            {

                if(data.typSignalu == TypSignalu.sin)

                     y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

                vrat.Add(i, y1);

            }

 

//Generovani Vzorkü – znazorneni vzorkovani v grafu

            PointPairList[] vrat = new PointPairList[data.Ts];

            float t = (1.0f / (float)data.Freq1);

            float t2 = t / data.Ts;

            float dx = 0;

            int index = 0;

            for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    vrat[index] = new PointPairList();

                    vrat[index].Add(i, sizeUp);

                    vrat[index++].Add(i, -sizeDown);

                }

            }

 

//Urovne – znazorneni kvantovacich urovni v grafu

            PointPairList[] vrat = new PointPairList[4];

            float t = (1.0f / (float)data.Freq1);

            float t2 = t / data.Ts;

            double dValue = (2*data.Ampl_mod) / 3.0f;

            for (int i = 0; i < vrat.Length; i++) vrat[i] = new PointPairList();

 

            vrat[0].Add(0, -data.Ampl_mod); vrat[0].Add(t, -data.Ampl_mod); //00

            vrat[1].Add(0, -data.Ampl_mod + (dValue)); vrat[1].Add(t, -data.Ampl_mod + (dValue)); //01

            vrat[2].Add(0, -data.Ampl_mod + (dValue * 2)); vrat[2].Add(t, -data.Ampl_mod + (dValue * 2)); //10

            vrat[3].Add(0, -data.Ampl_mod + (dValue * 3)); vrat[3].Add(t, -data.Ampl_mod + (dValue * 3)); //11

 

 

 

//Text  do grafu

            TextObj[] text = new TextObj[4];

            text[0] = new TextObj("00", t + (t*0.05) , -data.Ampl_mod);

            text[1] = new TextObj("01", t + (t * 0.05), -data.Ampl_mod + (dValue));

            text[2] = new TextObj("10", t + (t * 0.05), -data.Ampl_mod + (dValue * 2));

            text[3] = new TextObj("11", t + (t * 0.05), -data.Ampl_mod + (dValue * 3));

 

            for (int i = 0; i < text.Length; i++)

            {

                text[i].Location.CoordinateFrame = CoordType.AxisXYScale;

                text[i].Location.AlignH = AlignH.Right;

                text[i].Location.AlignV = AlignV.Center;

                text[i].FontSpec.FontColor = Color.Black;

                text[i].FontSpec.Border.IsVisible = false;

                text[i].FontSpec.Fill.IsVisible = false;

                text[i].FontSpec.Size = 14;

            }

            return text;

 

 

//PCM modulation

            for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    if (data.typSignalu == TypSignalu.sin)

                        y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                    else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

 

 

                    if (y1 < 0) hodnota = hodnota * (-1);

                    if (y1 == 0) hodnota = 0;

                    else

                    {

                        if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = -data.Ampl_mod; //00

                        else if (y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota = -data.Ampl_mod + dValue; //01

                        else if (y1 < (-data.Ampl_mod + (dValue * 2)) + dvalueHalf) hodnota = -data.Ampl_mod + (dValue*2); //10

                        else hodnota = -data.Ampl_mod + (dValue * 3); //11

                    }

 

                    vrat.Add(i, hodnota);

                }

                else

                {

                    vrat.Add(i, hodnota);

                }

 

            }

 

 

//Unipolar NRZ

for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    if (data.typSignalu == TypSignalu.sin)

                        y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                    else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

 

 

                    if (y1 < 0) hodnota = hodnota * (-1);

                    if (y1 == 0) hodnota = 0;

                    else

                    {

                        if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00

                        else if (y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota = 2; //01

                        else if (y1 < (-data.Ampl_mod + (dValue * 2)) + dvalueHalf) hodnota = 3; //10

                        else hodnota = 4; //11

                    }

                    dx2 += (t2 / 2); bit2 = false;

                }

 

                if (i > dx2)

                {

                    dx2 += (t2 / 2);

                    bit2 = true;

                }

 

                if (hodnota == 1) //00

                    vrat.Add(i, 0);

                else if (hodnota == 2) //01

                {

                    if (bit2) vrat.Add(i, data.Ampl_mod);

                    else vrat.Add(i, 0);

                }

                else if (hodnota == 3) //10

                {

                    if (bit2) vrat.Add(i, 0);

                    else vrat.Add(i, data.Ampl_mod);

                }

                else vrat.Add(i, data.Ampl_mod);  //11             

 

            }

 

 

//Polar NRZ

            for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    if (data.typSignalu == TypSignalu.sin)

                        y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                    else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

 

 

                    if (y1 < 0) hodnota = hodnota * (-1);

                    if (y1 == 0) hodnota = 0;

                    else

                    {

                        if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00

                        else if (y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota = 2; //01

                        else if (y1 < (-data.Ampl_mod + (dValue * 2)) + dvalueHalf) hodnota = 3; //10

                        else hodnota = 4; //11

                    }

                    dx2 += (t2 / 2); bit2 = false;

                }

 

                if (i > dx2)

                {

                    dx2 += (t2 / 2);

                    bit2 = true;

                }

 

                if (hodnota == 1) //00

                    vrat.Add(i, -data.Ampl_mod);

                else if (hodnota == 2) //01

                {

                    if (bit2) vrat.Add(i, data.Ampl_mod);

                    else vrat.Add(i, -data.Ampl_mod);

                }

                else if (hodnota == 3) //10

                {

                    if (bit2) vrat.Add(i, -data.Ampl_mod);

                    else vrat.Add(i, data.Ampl_mod);

                }

                else vrat.Add(i, data.Ampl_mod);  //11             

 

            }

 

 

//Unipolar RZ

            for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    if (data.typSignalu == TypSignalu.sin)

                        y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                    else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

 

 

                    if (y1 < 0) hodnota = hodnota * (-1);

                    if (y1 == 0) hodnota = 0;

                    else

                    {

                        if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00

                        else if (y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota = 2; //01

                        else if (y1 < (-data.Ampl_mod + (dValue * 2)) + dvalueHalf) hodnota = 3; //10

                        else hodnota = 4; //11

                    }

                    dx2 += (t2 / 4); bit2 = false; returnzero = false;

                }

 

                if (i > dx2)

                {

                    dx2 += (t2 / 4);

                    if (bit2)

                    {

                        if (returnzero == false)

                            returnzero = true;

                    }

                    else

                    {

                        if (returnzero == false)

                            returnzero = true;

                        else

                        {

                            bit2 = true;

                            returnzero = false;

                        }

                    }

                }

                if (returnzero) vrat.Add(i, 0);

                else

                {

                    if (hodnota == 1) //00

                        vrat.Add(i, 0);

                    else if (hodnota == 2) //01

                    {

                        if (bit2) vrat.Add(i, data.Ampl_mod);

                        else vrat.Add(i, 0);

                    }

                    else if (hodnota == 3) //10

                    {

                        if (bit2) vrat.Add(i, 0);

                        else vrat.Add(i, data.Ampl_mod);

                    }

                    else vrat.Add(i, data.Ampl_mod);  //11         

                }

 

            }

 

 

//Bipolar RZ

            for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    if (data.typSignalu == TypSignalu.sin)

                        y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                    else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

 

 

                    if (y1 < 0) hodnota = hodnota * (-1);

                    if (y1 == 0) hodnota = 0;

                    else

                    {

                        if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00

                        else if (y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota = 2; //01

                        else if (y1 < (-data.Ampl_mod + (dValue * 2)) + dvalueHalf) hodnota = 3; //10

                        else hodnota = 4; //11

                    }

                    dx2 += (t2 / 4); bit2 = false; returnzero = false;

                }

 

                if (i > dx2)

                {

                    dx2 += (t2 / 4);

                    if (bit2)

                    {

                        if (returnzero == false)

                            returnzero = true;

                    }

                    else

                    {

                        if (returnzero == false)

                            returnzero = true;

                        else

                        {

                            bit2 = true;

                            returnzero = false;

                        }

                    }

                }

                if (returnzero) vrat.Add(i, 0);

                else

                {

                    if (hodnota == 1) //00

                        vrat.Add(i, -data.Ampl_mod);

                    else if (hodnota == 2) //01

                    {

                        if (bit2) vrat.Add(i, data.Ampl_mod);

                        else vrat.Add(i, -data.Ampl_mod);

                    }

                    else if (hodnota == 3) //10

                    {

                        if (bit2) vrat.Add(i, -data.Ampl_mod);

                        else vrat.Add(i, data.Ampl_mod);

                    }

                    else vrat.Add(i, data.Ampl_mod);  //11         

                }

 

            }

 

 

//Manchaster NRZ

            PointPairList vrat = new PointPairList();

            float t = (1.0f / (float)data.Freq1);

            float t2 = t / data.Ts;

            float dx = 0;

            float dx2 = 0;

            double y1 = 0;

            double dValue = (2 * data.Ampl_mod) / 3.0f;

            double dvalueHalf = dValue / 2.0f;

            double hodnota = 0;

            bool bit2 = true;

            bool returnzero = false;

 

            for (float i = 0; i < t; i += (t / 1000))

            {

                if (i > dx)

                {

                    dx += t2;

                    if (data.typSignalu == TypSignalu.sin)

                        y1 = data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data.Freq1);

                    else y1 = data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data.Freq1);

 

 

                    if (y1 < 0) hodnota = hodnota * (-1);

                    if (y1 == 0) hodnota = 0;

                    else

                    {

                        if (y1 < -data.Ampl_mod + dvalueHalf) hodnota = 1; //00

                        else if (y1 < (-data.Ampl_mod + dValue) + dvalueHalf) hodnota = 2; //01

                        else if (y1 < (-data.Ampl_mod + (dValue * 2)) + dvalueHalf) hodnota = 3; //10

                        else hodnota = 4; //11

                    }

                    dx2 += (t2 / 4); bit2 = false; returnzero = false;

                }

 

                if (i > dx2)

                {

                    dx2 += (t2 / 4);

                    if (bit2)

                    {

                        if (returnzero == false)

                            returnzero = true;

                    }

                    else

                    {

                        if (returnzero == false)

                            returnzero = true;

                        else

                        {

                            bit2 = true;

                            returnzero = false;

                        }

                    }

                }

 

                if (hodnota == 1)//00

                {

                    if (returnzero) vrat.Add(i, data.Ampl_mod);

                    else vrat.Add(i, -data.Ampl_mod);

                }

                else if (hodnota == 2) //01

                {

                    if (bit2)//1

                    {

                        if (returnzero) vrat.Add(i, -data.Ampl_mod);

                        else vrat.Add(i, data.Ampl_mod);

                    }

                    else//0

                    {

                        if (returnzero) vrat.Add(i, data.Ampl_mod);

                        else vrat.Add(i, -data.Ampl_mod);

                    }

                }

                else if (hodnota == 3) //10

                {

                    if (bit2)//0

                    {

                        if (returnzero) vrat.Add(i, data.Ampl_mod);

                        else vrat.Add(i, -data.Ampl_mod);

                    }

                    else//1

                    {

                        if (returnzero) vrat.Add(i, -data.Ampl_mod);

                        else vrat.Add(i, data.Ampl_mod);

                    }

                }

                else //11

                {

                    if (returnzero) vrat.Add(i, -data.Ampl_mod);

                    else vrat.Add(i, data.Ampl_mod);               

                }

 

            }

 

 

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

-          ReckceZnaky.Velke

-          ReckceZnaky.Male