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); }
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); }
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); }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
public SymulatorCzujnikaOdleglosci() { InitializeComponent(); A = (Sygnal)DaneStatyczne.dane; wyswietlSygnal(A); }
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(); }
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; }
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); }
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); } }
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); }
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; }
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); } }