예제 #1
0
        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);
        }
예제 #2
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);
        }