public FiltrGornoprzepustowy(Okno window, int order, double highFrqCutoff, double samplingRate) : base(window, order, 0, highFrqCutoff, samplingRate) { double cutoff = highFrqCutoff / samplingRate; //filter = new Complex[order + 1]; filter = new List <Complex>(); double factor = 2.0 * cutoff; int half = order >> 1; for (int i = 0; i < order + 1; i++) { filter.Add(new Complex((i == half ? 1.0 : 0.0) - factor * SINCConverter.SINC(factor * (i - half)), 0)); } filter = window.apply(filter); }
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); }