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

-         public PointPairList ModulacniSignal(Data data, int volba)

-         public PointPairList PasmovySignal(Data data1, Data data2)

-         public PointPairList AmplitudoveSpektrum(Data[] data)

-         public PointPairList FazoveSpektrum(Data[] data)

-         public PointPairList VykonoveSpektrum(Data[] data)

 

kde

public Data(int Freq_mod, int Freq_mod2, int DC_mod, int Ampl_mod, TypSignalu TypSig_mod,

int Freq_pasm, int period, int time)

 

 

 

//Generovani modulacniho signalu

 

            for (float i = 0; i < Math.Round((lenght - deltat), zaokrouhleni); i = (float)Math.Round(i + deltat, zaokrouhleni))

            {

                if (Data.TypSignalu.sin == data.TypSig_mod)

                    y = data.DC_mod + data.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * fm);

                else //jinak je cos

                    y = data.DC_mod + data.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * fm);

                vrat.Add(i, y);

            }

 

//Generovani pasmoveho signalu

           for (float k = 0; k < meze; k++, i += deltat)

            {

 

                //m1

                if(data1.TypSig_mod == Data.TypSignalu.sin)

                   pomoc.Re = (data1.DC_mod + data1.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data1.Freq_mod));

                else pomoc.Re = (data1.DC_mod + data1.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data1.Freq_mod));

 

                //m2

                if (data2.TypSig_mod == Data.TypSignalu.sin)

                    pomoc.Im = (data2.DC_mod + data2.Ampl_mod * Math.Sin((float)i * 2 * 3.14 * data2.Freq_mod2));

                else pomoc.Im = (data2.DC_mod + data2.Ampl_mod * Math.Cos((float)i * 2 * 3.14 * data2.Freq_mod2));

               

                pomoc2.Re = Math.Cos((float)i * 2 * 3.14 * data1.Freq_pasm);

                pomoc2.Im = Math.Sin((float)i * 2 * 3.14 * data1.Freq_pasm);

                y = (pomoc.Re * pomoc2.Re) - (pomoc.Im * pomoc2.Im);

                vrat.Add(i, y);

                index++;

            }

 

//Amplitudove spektrum

                MyFourier.MyFourier mydft = new MyFourier.MyFourier();

                MyFourier.FourierData fourierData = mydft.DFT(mojedata, MyFourier.MyFourier.Type.prima);

 

                int delka = fourierData.dataDFT.Length;

                int[] k = new int[delka];

                for (int i = 0; i < delka / 2; i++)

                {

                    k[i] = (-(delka / 2)) + i;

                }

                for (int i = delka / 2; i < delka; i++)

                {

                    k[i] = i - (delka / 2);

                }

 

                MyFourier.Complex[] fftdata = mydft.fftshift(fourierData.dataDFT);

                for (int i = 0; i < delka; i++)

                {

                    if (fftdata[i] != null)

                        vrat.Add(((double)(k[i] * data[0].Fvz) / sig.Count), fourierData.MagnitudeDot(fftdata[i]) / fourierData.dataDFT.Length);

                }

 

//Fazove spektrum

                for (int i = 0; i < delka - 1; i++)

                {

                    if (fftdata[i] != null)

                    {

                        //vycisteni spektra

                        if ((fourierData.MagnitudeDot(fftdata[i]) / fourierData.dataDFT.Length < 0.01))

                        {

                            fftdata[i].Real = 0;

                            fftdata[i].Imag = 0;

                        }

                        vrat.Add(((double)(k[i] * data[0].Fvz) / sig.Count), fourierData.PhaseDot(fftdata[i]));

                    }

                }    

 

//Vykonove spektrum

                MyFourier.Complex[] fftdata = mydft.fftshift(fourierData.dataDFT);

                for (int i = 0; i < delka; i++)

                {

                    if (fftdata[i] != null)

                    vrat.Add(((double)(k[i] * data[0].Fvz) / sig.Count), Math.Pow(fourierData.MagnitudeDot(fftdata[i]) / fourierData.dataDFT.Length, 2));

                }

 

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

-          ReckceZnaky.Velke

-          ReckceZnaky.Male

 

Pro práci s komplexními čísly a výpočet fft byla použita knihovna třetí strany Aforge Framework  dostupná ze stránek

http://www.aforgenet.com/framework/