Пример #1
0
        private void wyswietlSygnal(Sygnal A)
        {
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Wysłany";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");

            Style style = new Style(typeof(LineDataPoint));

            style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, null));
            style.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(Colors.Red)));
            mySeries.DataPointStyle = style;

            punkty2 = new List <KeyValuePair <double, double> >();

            for (int i = 0; i < A.x.Count; i++)
            {
                punkty2.Add(new KeyValuePair <double, double>(A.x[i].Real, A.y[i].Real));
            }

            mySeries.ItemsSource = punkty2;

            Baza.Series.Add(mySeries);
        }
Пример #2
0
        private void wyswietlSygnalPrzesuniety(Sygnal A, int czas)
        {
            if (Baza.Series.Count > 1)
            {
                Baza.Series.RemoveAt(1);
            }

            Sygnal przesuniety = new Sygnal();

            przesuniety.x = new List <System.Numerics.Complex>();
            przesuniety.x.Clear();
            przesuniety.y = new List <System.Numerics.Complex>();
            przesuniety.y.Clear();
            for (int i = 0; i < A.x.Count; i++)
            {
                if (A.x[i].Real - (czas / 1000.0) > 0)
                {
                    przesuniety.x.Add(A.x[i] - (double)(czas / 1000.0));
                    przesuniety.y.Add(A.y[i]);
                }
            }
            for (int i = 0; i < A.x.Count; i++)
            {
                if (A.x[i].Real - (czas / 1000.0) <= 0)
                {
                    przesuniety.x.Add(A.x[i] + 10 - (czas / 1000.0));
                    przesuniety.y.Add(A.y[i]);
                }
            }

            for (int i = 0; i < A.x.Count; i++)
            {
                double z = przesuniety.y[i].Real;
            }
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Odebrany";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");

            Style style = new Style(typeof(LineDataPoint));

            style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, null));
            style.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(Colors.Black)));
            mySeries.DataPointStyle = style;

            punkty = new List <KeyValuePair <double, double> >();

            for (int i = 0; i < przesuniety.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(przesuniety.x[i].Real, przesuniety.y[i].Real));
            }

            mySeries.ItemsSource = punkty;

            Baza.Series.Add(mySeries);
            PoliczKorelacje(przesuniety);
        }
Пример #3
0
        private void GenerujSygnalWynikowy_Click(object sender, RoutedEventArgs e)
        {
            Sygnal splot = new Sygnal();

            splot.x = new List <Complex>();
            splot.y = new List <Complex>();

            int M             = A.x.Count;
            int N             = sp.x.Count;
            int dlugoscSplotu = M + N - 1;

            int i1;

            for (int i = 0; i < dlugoscSplotu; i++)
            {
                Complex y = new Complex();
                i1 = i;

                for (int k = 0; k < N; k++)
                {
                    if (i1 >= 0 && i1 < M)
                    {
                        var h = A.y[i1];
                        var x = sp.y[k];

                        y += h * x;
                    }
                    i1--;
                }

                splot.y.Add(y);
            }

            double odstep = 10 / double.Parse(dlugoscSplotu.ToString());

            for (double i = 0; i < 10; i += odstep)
            {
                splot.x.Add(i);
            }

            Wynik.Series.Clear();
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Splot";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");

            punkty = new List <KeyValuePair <double, double> >();

            for (int i = 0; i < splot.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(splot.x[i].Real, splot.y[i].Real));
            }

            mySeries.ItemsSource = punkty;
            Wynik.Series.Add(mySeries);
        }
Пример #4
0
        private void PoliczKorelacje_Click(object sender, RoutedEventArgs e)
        {
            ChartWynik.Series.Clear();
            Sygnal korelacja = new Sygnal();

            korelacja.x = new List <Complex>();
            korelacja.y = new List <Complex>();

            int M             = a.x.Count;
            int N             = b.x.Count;
            int dlugoscSplotu = M + N - 1;

            double odstep = 20 / (double)(dlugoscSplotu);
            int    p      = 0;

            //korelacja.y.Add(0);
            for (double i = 0; i < 20; i += odstep)
            {
                korelacja.x.Add(i);
                double y = 0;
                int    n = p - (N - 1);

                for (int k = 0; k < M; k++)
                {
                    if (k - n >= 0 && k - n < N)
                    {
                        double h = a.y[k].Real;
                        double x = b.y[k - n].Real;

                        y += h * x;
                    }
                    else
                    {
                        y += 0;
                    }
                }
                korelacja.y.Add(y);
                p++;
            }

            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Korelacja";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty = new List <KeyValuePair <double, double> >();
            for (int i = 0; i < korelacja.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(korelacja.x[i].Real, korelacja.y[i].Real));
            }
            mySeries.ItemsSource = punkty;
            ChartWynik.Series.Add(mySeries);
        }
Пример #5
0
        private void WczytajSygnal2_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();

            openFileDialog1.InitialDirectory = Serializacja.Serializacja.sciezka;
            openFileDialog1.Title            = "Wczytaj Sygnal 2";

            if (openFileDialog1.ShowDialog() == true)
            {
                b = Serializacja.Serializacja.WczytajWykres(openFileDialog1.FileName);
                int nr = 2;
                NarysujWczytanyWykres(nr);
            }
        }
Пример #6
0
        private void wyswietlDyskretny(Sygnal B)
        {
            ScatterSeries mySeries = new ScatterSeries();

            mySeries.Title = "Baza";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");

            punkty = new List <KeyValuePair <double, double> >();

            for (int i = 0; i < B.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(B.x[i].Real, B.y[i].Real));
            }

            mySeries.ItemsSource = punkty;
            Baza.Series.Add(mySeries);
        }
Пример #7
0
        private void policzModul(Sygnal sygnal)
        {
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Moduł";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty = new List <KeyValuePair <double, double> >();
            for (int i = 0; i < sygnal.y.Count; i++)
            {
                sygnal.y[i] = Math.Sqrt(Math.Pow(sygnal.y[i].Real, 2) + Math.Pow(sygnal.y[i].Imaginary, 2));
                punkty.Add(new KeyValuePair <double, double>(sygnal.x[i].Real, sygnal.y[i].Real));
            }
            mySeries.ItemsSource = punkty;

            ModulWykres.Series.Add(mySeries);
            policzHistogram(sygnal, 1);
        }
Пример #8
0
        public Sygnal Konwert(Sygnal input, int samplingRate, int originalSamplingRate)
        {
            values = new Complex[input.y.Count];
            int aLength = 400;

            for (int i = 0; i < input.y.Count; i++)
            {
                values[i] = input.y[i];
            }
            newValues = new Complex[aLength];

            this.originalSamplingRate = originalSamplingRate;

            newSamplingRate = samplingRate;

            for (int i = 0; i < newValues.Count(); i++)
            {
                newValues[i] = interpolate(30, i, i);
            }
            //int ileDodatkowych = (int)(400 / (originalSamplingRate*input.d))-originalSamplingRate;
            //double roznica = (input.x[1].Real - input.x[0].Real) / (ileDodatkowych + 1);
            zrekonstruowany   = new Sygnal();
            zrekonstruowany.x = new List <System.Numerics.Complex>();
            zrekonstruowany.y = new List <System.Numerics.Complex>();

            double roznica = input.d / newValues.Length;
            double ix      = 0;

            for (int i = 0; i < newValues.Length; i++)
            {
                zrekonstruowany.x.Add(ix);
                zrekonstruowany.y.Add(newValues[i]);
                ix += roznica;
            }
            zrekonstruowany.t1 = input.t1;
            zrekonstruowany.A  = input.A;
            zrekonstruowany.d  = input.d;
            zrekonstruowany.n  = newValues.Length;

            return(zrekonstruowany);
        }
Пример #9
0
        private void policzFaze(Sygnal sygnal)
        {
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Faza";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty = new List <KeyValuePair <double, double> >();
            for (int i = 0; i < sygnal.x.Count; i++)
            {
                double k = 1;
                if (sygnal.y[i].Imaginary != 0)
                {
                    k = sygnal.y[i].Imaginary;
                }
                sygnal.y[i] = Math.Atan(sygnal.y[i].Real / k);
                punkty.Add(new KeyValuePair <double, double>(sygnal.x[i].Real, sygnal.y[i].Real));
            }
            mySeries.ItemsSource = punkty;

            FazaWykres.Series.Add(mySeries);
            policzHistogram(sygnal, 2);
        }
Пример #10
0
        private void policzHistogram(Sygnal sygnal)
        {
            double minReal = sygnal.y[0].Real;
            double maxReal = sygnal.y[0].Real;

            for (int i = 1; i < sygnal.y.Count; i++)
            {
                if (sygnal.y[i].Real > maxReal)
                {
                    maxReal = sygnal.y[i].Real;
                }
                if (sygnal.y[i].Real < minReal)
                {
                    minReal = sygnal.y[i].Real;
                }
            }

            double roznicaReal             = maxReal - minReal;
            double szerokoscPrzedzialuReal = roznicaReal / ile;

            d   = new Sygnal();
            d.x = new List <System.Numerics.Complex>();
            d.y = new List <System.Numerics.Complex>();

            for (int i = 0; i < d.n; i++)
            {
                d.x.Add(new System.Numerics.Complex());
            }

            for (int i = 0; i < ile; i++)
            {
                d.x[i] = (minReal + (szerokoscPrzedzialuReal * i));
                int iloscWystapienR = 0;
                for (int j = 0; j < sygnal.y.Count; j++)
                {
                    if (sygnal.y[j].Real >= (minReal + (szerokoscPrzedzialuReal * i)) && sygnal.y[j].Real < (minReal + (szerokoscPrzedzialuReal * (i + 1))))
                    {
                        iloscWystapienR++;
                    }
                    if (i == (ile - 1) && sygnal.y[j] == maxReal)
                    {
                        iloscWystapienR++;
                    }
                }
                d.y.Add(iloscWystapienR);
            }
            HistogramRzeczywista.Series.Clear();
            ColumnSeries mySeries = new ColumnSeries();

            mySeries.Title = "Histogram";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty2 = new List <KeyValuePair <string, double> >();

            for (int i = 0; i < ile; i++)
            {
                if (i == ile - 1)
                {
                    punkty2.Add(new KeyValuePair <string, double>("< " + Math.Round(d.x[i].Real, 2).ToString() + " ; " + Math.Round(d.x[i].Real + szerokoscPrzedzialuReal, 2).ToString() + " >", d.y[i].Real));
                }
                else
                {
                    punkty2.Add(new KeyValuePair <string, double>("< " + Math.Round(d.x[i].Real, 2).ToString() + " ; " + Math.Round(d.x[i].Real + szerokoscPrzedzialuReal, 2).ToString() + " )", d.y[i].Real));
                }
            }

            mySeries.ItemsSource = punkty2;
            HistogramRzeczywista.Series.Add(mySeries);
            double minU = sygnal.y[0].Imaginary;
            double maxU = sygnal.y[0].Imaginary;

            for (int i = 1; i < sygnal.y.Count; i++)
            {
                if (sygnal.y[i].Imaginary > maxU)
                {
                    maxU = sygnal.y[i].Imaginary;
                }
                if (sygnal.y[i].Imaginary < minU)
                {
                    minU = sygnal.y[i].Imaginary;
                }
            }

            double roznicaU             = maxU - minU;
            double szerokoscPrzedzialuU = roznicaU / ile;
            bool   czy0 = false;

            if (szerokoscPrzedzialuU == 0)
            {
                szerokoscPrzedzialuU = 0.1;
                czy0 = true;
                minU = (ile * 0.1) / (-2);
            }

            e   = new Sygnal();
            e.x = new List <System.Numerics.Complex>();
            e.y = new List <System.Numerics.Complex>();

            for (int i = 0; i < d.n; i++)
            {
                e.x.Add(new System.Numerics.Complex());
            }

            for (int i = 0; i < ile; i++)
            {
                e.x[i] = (minU + (szerokoscPrzedzialuU * i));
                int iloscWystapienU = 0;
                for (int j = 0; j < sygnal.y.Count; j++)
                {
                    if (sygnal.y[j].Imaginary >= (minU + (szerokoscPrzedzialuU * i)) && sygnal.y[j].Imaginary < (minU + (szerokoscPrzedzialuU * (i + 1))))
                    {
                        iloscWystapienU++;
                    }
                    if (czy0 == false && i == (ile - 1) && sygnal.y[j] == maxU)
                    {
                        iloscWystapienU++;
                    }
                }
                e.y.Add(iloscWystapienU);
            }
            HistogramUrojona.Series.Clear();
            ColumnSeries mySeries2 = new ColumnSeries();

            mySeries2.Title = "Histogram";
            mySeries2.IndependentValueBinding = new Binding("Key");
            mySeries2.DependentValueBinding   = new Binding("Value");
            punkty2U = new List <KeyValuePair <string, double> >();
            for (int i = 0; i < ile; i++)
            {
                if (i == ile - 1)
                {
                    punkty2U.Add(new KeyValuePair <string, double>("< " + Math.Round(e.x[i].Real, 2).ToString() + " ; " + Math.Round(e.x[i].Real + szerokoscPrzedzialuU, 2).ToString() + " >", e.y[i].Real));
                }
                else
                {
                    punkty2U.Add(new KeyValuePair <string, double>("< " + Math.Round(e.x[i].Real, 2).ToString() + " ; " + Math.Round(e.x[i].Real + szerokoscPrzedzialuU, 2).ToString() + " )", e.y[i].Real));
                }
            }
            mySeries2.ItemsSource = punkty2U;
            HistogramUrojona.Series.Add(mySeries2);
        }
Пример #11
0
 public SymulatorCzujnikaOdleglosci()
 {
     InitializeComponent();
     A = (Sygnal)DaneStatyczne.dane;
     wyswietlSygnal(A);
 }
Пример #12
0
        private void PoliczKorelacje(Sygnal przesuniety)
        {
            Wynik.Series.Clear();
            Sygnal korelacja = new Sygnal();

            korelacja.x = new List <Complex>();
            korelacja.y = new List <Complex>();

            int M             = A.x.Count;
            int N             = przesuniety.x.Count;
            int dlugoscSplotu = M + N - 1;

            double odstep = 20 / (double)(dlugoscSplotu - 1);
            int    p      = 0;

            //korelacja.y.Add(0);
            for (double i = 0; i < 20; i += odstep)
            {
                korelacja.x.Add(i);
                double y = 0;
                int    n = p - (N - 1);

                for (int k = 0; k < M; k++)
                {
                    if (k - n >= 0 && k - n < N)
                    {
                        double h = A.y[k].Real;
                        double x = przesuniety.y[k - n].Real;

                        y += h * x;
                    }
                }
                //if( u > 1) y = 100;
                korelacja.y.Add(y);
                p++;
            }
            u++;

            LineSeries mySeries2 = new LineSeries();

            mySeries2.Title = "Korelacja";
            mySeries2.IndependentValueBinding = new Binding("Key");
            mySeries2.DependentValueBinding   = new Binding("Value");
            punkty2 = new List <KeyValuePair <double, double> >();
            Style style2 = new Style(typeof(LineDataPoint));

            style2.Setters.Add(new Setter(LineDataPoint.TemplateProperty, null));
            style2.Setters.Add(new Setter(LineDataPoint.BackgroundProperty, new SolidColorBrush(Colors.Blue)));
            mySeries2.DataPointStyle = style2;
            for (int i = 0; i < korelacja.y.Count; i++)
            {
                punkty2.Add(new KeyValuePair <double, double>(korelacja.x[i].Real, korelacja.y[i].Real));
            }
            mySeries2.ItemsSource = punkty2;
            Wynik.Series.Add(mySeries2);
            int    zakres = korelacja.y.Count;
            double max    = 0;
            int    index  = 0;

            for (int s = zakres / 2; s < zakres; s++)
            {
                if (korelacja.y[s].Real > max)
                {
                    max   = korelacja.y[s].Real;
                    index = s;
                }
            }
            double czas2 = korelacja.x[index].Real - korelacja.x[zakres / 2].Real;
            int    droga = (int)(predkoscOsrodka * czas2);

            odlegloscSymulator.Text = droga.ToString();
        }
Пример #13
0
        private void ZaladujSygnal(int nr)
        {
            double A  = double.Parse(Amplituda.Text.Trim());          // <-- Amplituda
            double t1 = double.Parse(CzasPoczatkowy.Text.Trim());;    // <-- Czas Poczatkowy
            double d  = double.Parse(CzasTrwaniaSygnalu.Text.Trim()); // <-- Czas Trwania

            if (TypySygnalow.SelectedItem.ToString() == "Skok Jednostkowy")
            {
                if (nr == 1)
                {
                    a = new SkokJednostkowy(A, t1, d);
                }
                else
                {
                    b = new SkokJednostkowy(A, t1, d);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Prostokatny")
            {
                double T  = double.Parse(OkresPodstwawowy.Text.Trim());;       // <-- Okres
                double kw = double.Parse(WspolczynnikWpelnienia.Text.Trim());  // <-- Współczynnik wypełnienia (tylko dla prost. i trój.)
                if (nr == 1)
                {
                    a = new SygnalProstokatny(A, T, t1, d, kw);
                }
                else
                {
                    b = new SygnalProstokatny(A, T, t1, d, kw);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Prostokatny Symetryczny")
            {
                double kw = double.Parse(WspolczynnikWpelnienia.Text.Trim());  // <-- Współczynnik wypełnienia (tylko dla prost. i trój.)
                double T  = double.Parse(OkresPodstwawowy.Text.Trim());;       // <-- Okres
                if (nr == 1)
                {
                    a = new SygnalProstokatnySymetryczny(A, T, t1, d, kw);
                }
                else
                {
                    b = new SygnalProstokatnySymetryczny(A, T, t1, d, kw);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Sinusoidalny")
            {
                double T = double.Parse(OkresPodstwawowy.Text.Trim());;        // <-- Okres
                if (nr == 1)
                {
                    a = new SygnalSinusoidalny(A, T, t1, d);
                }
                else
                {
                    b = new SygnalSinusoidalny(A, T, t1, d);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Sinusoidalny Dwupolowkowo")
            {
                double T = double.Parse(OkresPodstwawowy.Text.Trim());;        // <-- Okres
                if (nr == 1)
                {
                    a = new SygnalSinusoidalnyDwupolowkowo(A, T, t1, d);
                }
                else
                {
                    b = new SygnalSinusoidalnyDwupolowkowo(A, T, t1, d);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Sinusoidalny Jednopolowkowo")
            {
                double T = double.Parse(OkresPodstwawowy.Text.Trim());;        // <-- Okres
                if (nr == 1)
                {
                    a = new SygnalSinusoidalnyJednopolowkowo(A, T, t1, d);
                }
                else
                {
                    b = new SygnalSinusoidalnyJednopolowkowo(A, T, t1, d);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Trójkatny")
            {
                double kw = double.Parse(WspolczynnikWpelnienia.Text.Trim());  // <-- Współczynnik wypełnienia (tylko dla prost. i trój.)
                double T  = double.Parse(OkresPodstwawowy.Text.Trim());;       // <-- Okres
                if (nr == 1)
                {
                    a = new SygnalTrojkatny(A, T, t1, d, kw);
                }
                else
                {
                    b = new SygnalTrojkatny(A, T, t1, d, kw);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Szum Gaussowski")
            {
                if (nr == 1)
                {
                    a = new SzumGaussowski(A, t1, d);
                }
                else
                {
                    b = new SzumGaussowski(A, t1, d);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Szum o Rozdkladzie Jednostajnym")
            {
                if (nr == 1)
                {
                    a = new SzumRozkladJednostajny(A, t1, d);
                }
                else
                {
                    b = new SzumRozkladJednostajny(A, t1, d);
                }
            }
            else if (TypySygnalow.SelectedItem.ToString() == "Impuls Jednostkowy")
            {
                if (nr == 1)
                {
                    a = new ImpulsJednostkowy(A, t1, d);
                }
                else
                {
                    b = new ImpulsJednostkowy(A, t1, d);
                }
            }
            //Szum Impulsowy
            else
            {
                if (nr == 1)
                {
                    a = new SzumImpulsowy(A, t1, d);
                }
                else
                {
                    b = new SzumImpulsowy(A, t1, d);
                }
            }
            if (TypySygnalow.SelectedItem.ToString() == "Impuls Jednostkowy" || TypySygnalow.SelectedItem.ToString() == "Szum Impulsowy")
            {
                ScatterSeries mySeries = new ScatterSeries();
                mySeries.Title = "Sygnał";
                mySeries.IndependentValueBinding = new Binding("Key");
                mySeries.DependentValueBinding   = new Binding("Value");
                punkty = new List <KeyValuePair <double, double> >();
                if (nr == 1)
                {
                    for (int i = 0; i < a.x.Count; i++)
                    {
                        punkty.Add(new KeyValuePair <double, double>(a.x[i].Real, a.y[i].Real));
                    }
                }
                else
                {
                    for (int i = 0; i < b.x.Count; i++)
                    {
                        punkty.Add(new KeyValuePair <double, double>(b.x[i].Real, b.y[i].Real));
                    }
                }
                mySeries.ItemsSource = punkty;

                Chart.Series.Add(mySeries);
            }
            else
            {
                LineSeries mySeries = new LineSeries();
                mySeries.Title = "Sygnał " + nr;
                mySeries.IndependentValueBinding = new Binding("Key");
                mySeries.DependentValueBinding   = new Binding("Value");
                punkty = new List <KeyValuePair <double, double> >();
                if (nr == 1)
                {
                    for (int i = 0; i < a.x.Count; i++)
                    {
                        punkty.Add(new KeyValuePair <double, double>(a.x[i].Real, a.y[i].Real));
                    }
                }
                else
                {
                    for (int i = 0; i < b.x.Count; i++)
                    {
                        punkty.Add(new KeyValuePair <double, double>(b.x[i].Real, b.y[i].Real));
                    }
                }
                mySeries.ItemsSource = punkty;

                Chart.Series.Add(mySeries);
            }
            //if (IlePrzedzialow.SelectedItem.ToString() == "5")
            //    ile = 5;
            //else if (IlePrzedzialow.SelectedItem.ToString() == "10")
            //    ile = 10;
            //else if (IlePrzedzialow.SelectedItem.ToString() == "15")
            //    ile = 15;
            //else
            //    ile = 20;
        }
Пример #14
0
        private void Wczytaj_Click(object sender, RoutedEventArgs e)
        {
            ChartWynik.Series.Clear();
            c   = new Sygnal();
            c.x = new List <System.Numerics.Complex>();
            c.y = new List <System.Numerics.Complex>();

            if (TypyOperacji.SelectedItem.ToString() == "Sygnał 1 + Sygnał 2")
            {
                for (int i = 0; i < a.x.Count; i++)
                {
                    c.x.Add(a.x[i]);
                    c.y.Add(a.y[i] + b.y[i]);
                }
            }

            else if (TypyOperacji.SelectedItem.ToString() == "Sygnał 1 - Sygnał 2")
            {
                for (int i = 0; i < a.x.Count; i++)
                {
                    c.x.Add(a.x[i]);
                    c.y.Add(a.y[i] - b.y[i]);
                }
            }
            else if (TypyOperacji.SelectedItem.ToString() == "Sygnał 2 - Sygnał 1")
            {
                for (int i = 0; i < a.x.Count; i++)
                {
                    c.x.Add(a.x[i]);
                    c.y.Add(b.y[i] - a.y[i]);
                }
            }
            else if (TypyOperacji.SelectedItem.ToString() == "Sygnał 1 * Sygnał 2")
            {
                for (int i = 0; i < a.x.Count; i++)
                {
                    c.x.Add(a.x[i]);
                    c.y.Add(a.y[i] * b.y[i]);
                }
            }
            else if (TypyOperacji.SelectedItem.ToString() == "Sygnał 1 / Sygnał 2")
            {
                for (int i = 0; i < a.x.Count; i++)
                {
                    c.x.Add(a.x[i]);
                    if (b.y[i] != 0)
                    {
                        c.y.Add(a.y[i] / b.y[i]);
                    }
                    else
                    {
                        c.y.Add(0);
                    }
                }
            }
            else
            {
                for (int i = 0; i < a.x.Count; i++)
                {
                    c.x.Add(a.x[i]);
                    if (a.y[i] != 0)
                    {
                        c.y.Add(b.y[i] / a.y[i]);
                    }
                    else
                    {
                        c.y.Add(0);
                    }
                }
            }
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Wynik";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty = new List <KeyValuePair <double, double> >();
            for (int i = 0; i < c.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(c.x[i].Real, c.y[i].Real));
            }
            mySeries.ItemsSource = punkty;
            ChartWynik.Series.Add(mySeries);
        }
Пример #15
0
 public KonwersjaSygnalow()
 {
     InitializeComponent();
     AddItems();
     if (DaneStatyczne.dane is SkokJednostkowy)
     {
         A = (SkokJednostkowy)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SygnalProstokatny)
     {
         A = (SygnalProstokatny)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SygnalProstokatnySymetryczny)
     {
         A = (SygnalProstokatnySymetryczny)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SygnalSinusoidalny)
     {
         A = (SygnalSinusoidalny)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SygnalSinusoidalnyJednopolowkowo)
     {
         A = (SygnalSinusoidalnyJednopolowkowo)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SygnalSinusoidalnyDwupolowkowo)
     {
         A = (SygnalSinusoidalnyDwupolowkowo)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SygnalTrojkatny)
     {
         A = (SygnalTrojkatny)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SzumGaussowski)
     {
         A = (SzumGaussowski)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is SzumRozkladJednostajny)
     {
         A = (SzumRozkladJednostajny)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
     else if (DaneStatyczne.dane is ImpulsJednostkowy)
     {
         A = (ImpulsJednostkowy)DaneStatyczne.dane;
         wyswietlDyskretny(A);
     }
     else if (DaneStatyczne.dane is SzumImpulsowy)
     {
         A = (SzumImpulsowy)DaneStatyczne.dane;
         wyswietlDyskretny(A);
     }
     else
     {
         A = (Sygnal)DaneStatyczne.dane;
         wyswietlSygnal(A);
     }
 }
Пример #16
0
        private void Rekonstruuj_Click(object sender, RoutedEventArgs e)
        {
            PoRekonstrukcji.Series.Clear();

            zrekonstruowany = new Sygnal();

            zrekonstruowany.x = new List <System.Numerics.Complex>();
            zrekonstruowany.y = new List <System.Numerics.Complex>();

            if (MetodaRekonstrukcji.SelectedItem.ToString() == "Zero-order hold")
            {
                int    ileDodatkowych = (int)(400 / przekonwertowany.d);
                double roznica        = (przekonwertowany.x[2].Real - przekonwertowany.x[1].Real) / (ileDodatkowych + 1);

                for (int i = 0; i < przekonwertowany.x.Count; i++)
                {
                    zrekonstruowany.x.Add(przekonwertowany.x[i].Real);
                    zrekonstruowany.y.Add(przekonwertowany.y[i].Real);

                    for (int j = 0; j < ileDodatkowych; j++)
                    {
                        if (i != przekonwertowany.x.Count - 1)
                        {
                            zrekonstruowany.x.Add(przekonwertowany.x[i].Real + (j * roznica));
                            zrekonstruowany.y.Add(przekonwertowany.y[i].Real);
                        }
                    }
                }
            }
            else if (MetodaRekonstrukcji.SelectedItem.ToString() == "First-order hold")
            {
                int    ileDodatkowych = (int)(400 / przekonwertowany.d);
                double roznica        = (przekonwertowany.x[2].Real - przekonwertowany.x[1].Real) / (ileDodatkowych + 1);

                for (int i = 0; i < przekonwertowany.x.Count; i++)
                {
                    zrekonstruowany.x.Add(przekonwertowany.x[i].Real);
                    zrekonstruowany.y.Add(przekonwertowany.y[i].Real);
                    if (i != przekonwertowany.x.Count - 1)
                    {
                        double roznicaY = (przekonwertowany.y[i + 1].Real - przekonwertowany.y[i].Real) / (ileDodatkowych + 1);

                        for (int j = 0; j < ileDodatkowych; j++)
                        {
                            if (i != przekonwertowany.x.Count - 1)
                            {
                                zrekonstruowany.x.Add(przekonwertowany.x[i].Real + (j * roznica));
                                zrekonstruowany.y.Add(przekonwertowany.y[i].Real + (j * roznicaY));
                            }
                        }
                    }
                }
            }
            else
            {
                SINCConverter sincconverter = new SINCConverter();
                zrekonstruowany = sincconverter.Konwert(przekonwertowany, (int)(A.n / A.d), int.Parse(Parametry.Text.ToString()));
            }
            LineSeries mySeries = new LineSeries();

            mySeries.Title = "Zrekonstruowany";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            Style style = new Style(typeof(LineDataPoint));

            style.Setters.Add(new Setter(LineDataPoint.TemplateProperty, null));
            mySeries.DataPointStyle = style;
            punkty = new List <KeyValuePair <double, double> >();
            for (int i = 0; i < zrekonstruowany.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(zrekonstruowany.x[i].Real, zrekonstruowany.y[i].Real));
            }
            mySeries.ItemsSource = punkty;
            PoRekonstrukcji.Series.Add(mySeries);
        }
Пример #17
0
        private void Konwertuj_Click(object sender, RoutedEventArgs e)
        {
            PoKonwersji.Series.Clear();

            przekonwertowany = new Sygnal();

            przekonwertowany.x = new List <System.Numerics.Complex>();
            przekonwertowany.y = new List <System.Numerics.Complex>();

            double maxX = A.x[0].Real;
            double minX = A.x[0].Real;

            for (int i = 0; i < A.x.Count; i++)
            {
                if (A.x[i].Real > maxX)
                {
                    maxX = A.x[i].Real;
                }
                if (A.x[i].Real < minX)
                {
                    minX = A.x[i].Real;
                }
            }

            A.d = maxX - minX;

            double czestotliwosc = Double.Parse(Parametry.SelectedItem.ToString());
            int    ilePunktow    = (int)(czestotliwosc * A.d);
            int    coIle         = (int)(A.n / ilePunktow);

            if (TypKonwersji.SelectedItem.ToString() == "Próbkowanie równomierne")
            {
                for (int i = 0; i < A.n; i = i + coIle)
                {
                    przekonwertowany.x.Add(A.x[i]);
                    przekonwertowany.y.Add(A.y[i]);
                }

                przekonwertowany.x.Add(A.x[A.x.Count - 1]);
                przekonwertowany.y.Add(A.y[A.y.Count - 1]);
            }

            if (TypKonwersji.SelectedItem.ToString() == "Kwantyzacja równomierna z obcięciem")
            {
                int liczbaBitow = int.Parse(Parametry.SelectedItem.ToString());

                RoundDownQuantizer rdq = new RoundDownQuantizer(liczbaBitow);

                for (int i = 0; i < A.n; i = i + coIle)
                {
                    przekonwertowany.x.Add(A.x[i]);
                    przekonwertowany.y.Add(rdq.quantizeSample(A.y[i], A.A));
                }
            }

            if (TypKonwersji.SelectedItem.ToString() == "Kwantyzacja równomierna z zaokrągleniem")
            {
                int liczbaBitow = int.Parse(Parametry.SelectedItem.ToString());

                MeanQuantizer mq = new MeanQuantizer(liczbaBitow);

                for (int i = 0; i < A.n; i = i + coIle)
                {
                    przekonwertowany.x.Add(A.x[i]);
                    przekonwertowany.y.Add(mq.quantizeSample(A.y[i], A.A));
                }
            }

            ScatterSeries mySeries = new ScatterSeries();

            mySeries.Title = "Przekonwertowany";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty = new List <KeyValuePair <double, double> >();

            for (int i = 0; i < przekonwertowany.x.Count; i++)
            {
                punkty.Add(new KeyValuePair <double, double>(przekonwertowany.x[i].Real, przekonwertowany.y[i].Real));
            }

            mySeries.ItemsSource = punkty;
            PoKonwersji.Series.Add(mySeries);
            przekonwertowany.d  = A.d;
            przekonwertowany.A  = A.A;
            przekonwertowany.T  = A.T;
            przekonwertowany.t1 = A.t1;
            przekonwertowany.kw = A.kw;
        }
Пример #18
0
        private void policzHistogram(Sygnal sygnal, int nr)
        {
            double minReal = sygnal.y[0].Real;
            double maxReal = sygnal.y[0].Real;

            for (int i = 1; i < sygnal.y.Count; i++)
            {
                if (sygnal.y[i].Real > maxReal)
                {
                    maxReal = sygnal.y[i].Real;
                }
                if (sygnal.y[i].Real < minReal)
                {
                    minReal = sygnal.y[i].Real;
                }
            }

            double roznicaReal             = maxReal - minReal;
            double szerokoscPrzedzialuReal = roznicaReal / ile;

            d   = new Sygnal();
            d.x = new List <System.Numerics.Complex>();
            d.y = new List <System.Numerics.Complex>();

            for (int i = 0; i < ile; i++)
            {
                d.x.Add(minReal + (szerokoscPrzedzialuReal * i));
                int iloscWystapienR = 0;
                for (int j = 0; j < sygnal.y.Count; j++)
                {
                    if (sygnal.y[j].Real >= (minReal + (szerokoscPrzedzialuReal * i)) && sygnal.y[j].Real < (minReal + (szerokoscPrzedzialuReal * (i + 1))))
                    {
                        iloscWystapienR++;
                    }
                    if (i == (ile - 1) && sygnal.y[j] == maxReal)
                    {
                        iloscWystapienR++;
                    }
                }
                d.y.Add(iloscWystapienR);
            }
            ColumnSeries mySeries = new ColumnSeries();

            mySeries.Title = "Histogram";
            mySeries.IndependentValueBinding = new Binding("Key");
            mySeries.DependentValueBinding   = new Binding("Value");
            punkty2 = new List <KeyValuePair <string, double> >();
            for (int i = 0; i < ile; i++)
            {
                if (i == ile - 1)
                {
                    punkty2.Add(new KeyValuePair <string, double>("< " + Math.Round(d.x[i].Real, 2).ToString() + " ; " + Math.Round(d.x[i].Real + szerokoscPrzedzialuReal, 2).ToString() + " >", d.y[i].Real));
                }
                else
                {
                    punkty2.Add(new KeyValuePair <string, double>("< " + Math.Round(d.x[i].Real, 2).ToString() + " ; " + Math.Round(d.x[i].Real + szerokoscPrzedzialuReal, 2).ToString() + " )", d.y[i].Real));
                }
            }
            mySeries.ItemsSource = punkty2;
            if (nr == 1)
            {
                ModulHistogram.Series.Add(mySeries);
            }
            else
            {
                FazaHistogram.Series.Add(mySeries);
            }
        }