예제 #1
0
 public static void ZapiszDoPliku(Funkcja fun, string path)
 {
     using (StreamWriter writer = new StreamWriter(path))
     {
         foreach (var item in fun.Punkty)
         {
             writer.WriteLine(item.X + " " + item.Y);
         }
     }
 }
예제 #2
0
 public static void ZapiszDoPlikuWlasciwosci(Funkcja fun, string path, double t1, double f, bool rz)
 {
     using (StreamWriter writer = new StreamWriter(path))
     {
         writer.WriteLine(fun.CzasPoczatkowy);
         writer.WriteLine(fun.CzestotliwoscProbkowania);
         writer.WriteLine(fun.Rzeczywiste);
         foreach (var item in fun.Punkty)
         {
             writer.WriteLine(item.X + " " + item.Y);
         }
     }
 }
예제 #3
0
        public static Funkcja Pomnoz(Funkcja f1, Funkcja f2)
        {
            int          ile;
            List <Punkt> lista = new List <Punkt>();

            if (f1.Punkty.Count > f2.Punkty.Count)
            {
                ile = f2.Punkty.Count;
            }
            else
            {
                ile = f1.Punkty.Count;
            }
            for (int i = 0; i < ile; i++)
            {
                lista.Add(new Punkt(f1.Punkty.ElementAt(i).X, f1.Punkty.ElementAt(i).Y *f2.Punkty.ElementAt(i).Y));
            }
            return(new Funkcja(lista));
        }
예제 #4
0
        //public static void oblicz(Funkcja funkcjaPoProbkowaniu, double czas_poczatkowy)
        //{
        //    Funkcja Frekonstruowana = new Funkcja(new List<Punkt>());
        //    for (int i = 0; i < funkcjaPoProbkowaniu.Punkty.Count; ++i)
        //    {
        //        var liczbaSasiadow = funkcjaPoProbkowaniu.Punkty.Count;
        //        var czestotliwosc = czas_poczatkowy / funkcjaPoProbkowaniu.Punkty.Count;
        //        var suma = 0.0;
        //        for (int j = liczbaSasiadow-3; j < liczbaSasiadow+3; ++j)
        //        {
        //            if (j < 0 || j >= funkcjaPoProbkowaniu.Punkty.Count)
        //            {
        //                continue;
        //            }
        //            suma += funkcjaPoProbkowaniu.Punkty[j].Y * sinc(funkcjaPoProbkowaniu.Punkty[j].X / czestotliwosc - i);
        //        }
        //        Frekonstruowana.Punkty.Add(new Punkt(i, suma));
        //    }
        //    GeneratorSygnalow.ZapiszDoPlikuWlasciwosci(Frekonstruowana, "RekonstrukcjaSinc.txt");
        //}

        public static void oblicz(Funkcja funkcjaPoProbkowaniu, double czas_poczatkowy)
        {
            Funkcja Frekonstruowana = new Funkcja(new List <Punkt>());

            for (double t = 0; t < funkcjaPoProbkowaniu.Punkty.Last().X; t += 0.01)
            {
                var liczbaSasiadow = funkcjaPoProbkowaniu.Punkty.Count(p => p.X < t);
                var czestotliwosc  = czas_poczatkowy / funkcjaPoProbkowaniu.Punkty.Count;
                var suma           = 0.0;
                for (int j = liczbaSasiadow - 4; j < liczbaSasiadow + 3; ++j)
                {
                    if (j < 0 || j >= funkcjaPoProbkowaniu.Punkty.Count)
                    {
                        continue;
                    }
                    suma += funkcjaPoProbkowaniu.Punkty[j].Y * sinc((t - funkcjaPoProbkowaniu.Punkty[j].X) / czestotliwosc);
                }
                Frekonstruowana.Punkty.Add(new Punkt(t, suma / 2));
            }
            GeneratorSygnalow.ZapiszDoPlikuWlasciwosci(Frekonstruowana, "RekonstrukcjaSinc.txt");
        }
예제 #5
0
        public static void oblicz(Funkcja funkcjaPoProbkowaniu)
        {
            Funkcja Finterpolowana = new Funkcja(new List <Punkt>());

            for (int i = 0; i < funkcjaPoProbkowaniu.Punkty.Count; ++i)
            {
                for (int j = 0; j < 10; ++j)
                {
                    if (j == 0)
                    {
                        Finterpolowana.Punkty.Add(new Punkt(funkcjaPoProbkowaniu.Punkty[i].X, funkcjaPoProbkowaniu.Punkty[i].Y));
                    }
                    //else if( j == 9)
                    //{
                    //    if (i == funkcjaPoProbkowaniu.Punkty.Count - 1)
                    //    {
                    //        continue;
                    //    } else
                    //    {
                    //        Finterpolowana.Punkty.Add(new Punkt(funkcjaPoProbkowaniu.Punkty[i + 1].X, funkcjaPoProbkowaniu.Punkty[i + 1].Y));
                    //    }
                    //}
                    else
                    {
                        if (i == funkcjaPoProbkowaniu.Punkty.Count - 1)
                        {
                            continue;
                        }
                        else
                        {
                            double wartoscX = Math.Abs(((funkcjaPoProbkowaniu.Punkty[i].X - funkcjaPoProbkowaniu.Punkty[i + 1].X)) * j / 10) + funkcjaPoProbkowaniu.Punkty[i].X;
                            Finterpolowana.Punkty.Add(new Punkt(wartoscX, ObliczY(funkcjaPoProbkowaniu.Punkty[i], funkcjaPoProbkowaniu.Punkty[i + 1], wartoscX)));
                        }
                    }
                }
            }
            GeneratorSygnalow.ZapiszDoPlikuWlasciwosci(Finterpolowana, "interpolacja.txt");
        }
예제 #6
0
        public static Funkcja KwantyzacjaRownomiernaZZaokragleniem(Funkcja funkcja)
        {
            Funkcja temp = funkcja;
            double  ktoryProgKwantyzacji = 0;
            double  polowaProgu          = 0;
            double  nizszyPrzedzial      = 0;
            double  wyzszyPrzedzial      = 0;

            foreach (var item in temp.Punkty)
            {
                if (item.Y < -1.5)
                {
                    var s = 3;
                }

                ktoryProgKwantyzacji = item.Y / CoIlePrzedzial;

                nizszyPrzedzial = Math.Floor(ktoryProgKwantyzacji) * CoIlePrzedzial;
                wyzszyPrzedzial = nizszyPrzedzial + CoIlePrzedzial;
                polowaProgu     = wyzszyPrzedzial - (CoIlePrzedzial / 2);
                if (item.Y < polowaProgu)
                {
                    item.Y = nizszyPrzedzial;
                }
                else
                {
                    //  if (item.Y == listaY.Last())
                    //  {
                    //      item.Y = (int)ktoryProgKwantyzacji;
                    //  } else
                    item.Y = wyzszyPrzedzial;
                }
                //   polowaProgu *= -1;
            }
            return(temp);
        }
예제 #7
0
 public static void WezFunkcje(Funkcja org, Funkcja kop)
 {
     oryginal = org;
     podrobka = kop;
 }