none
Dynamic Data Display - Zweiter Graph RRS feed

  • Frage

  • Hallo zusammen,

    ich habe mir gestern mal Dynamic Data Display angeschaut und auch mal etwas rumprobiert.
    Nun möchte ich einen zweiten Graphen hinzufügen. Dafür habe ich diesen Code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using Microsoft.Research.DynamicDataDisplay.DataSources;
    using Microsoft.Research.DynamicDataDisplay;
    using AForge.Math;
    
    namespace Graph
    {
        /// <summary>
        /// Interaktionslogik für MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public static int MaxSamples = 64;
    
            public static DataPointCollection DataPoint = new DataPointCollection();
            public static DataPointCollection DataPoint2 = new DataPointCollection();
            public static Complex[] Signal = new Complex[MaxSamples];
            public static Complex[] Spektrum = new Complex[MaxSamples];
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void DataWindow_Initialized(object sender, EventArgs e)
            {
                GenerateSineSamples(DataPoint, MaxSamples, 1.0);
                PlotData(DataPoint, Colors.Green, "Signal");
                //FourierTransform.FFT(Signal, FourierTransform.Direction.Forward);
    
                /*for (int Sample = 0; Sample < MaxSamples; Sample++)
                {
                    DataPoint.Add(new DataPoint(Signal[Sample].Im, Sample));
                }*/
    
                GenerateCosineSamples(DataPoint2, MaxSamples, 2.0);
                PlotData(DataPoint2, Colors.Red, "Spektrum");
            }
    
            private void PlotData(DataPointCollection Data, Color Farbe, string Name)
            {
                var DataList = new EnumerableDataSource<DataPoint>(Data);
    
                DataList.SetXMapping(x => x.X);
                DataList.SetYMapping(y => y.Y);
                plotter.AddLineGraph(DataList, Farbe, 2, Name);
            }
    
            void GenerateSineSamples(DataPointCollection Data, int SampleCount, double Amplitude)
            {
                for (int i = 0; i < MaxSamples; i++)
                {
                    Signal[i].Re = Math.Sin(i * 2 * 3.14 / MaxSamples);
                }
    
                for (int Sample = 0; Sample < SampleCount; Sample++)
                {
                    DataPoint.Add(new DataPoint(Signal[Sample].Re, Sample));
                }
            }
    
            void GenerateCosineSamples(DataPointCollection Data, int SampleCount, double Amplitude)
            {
                for (int i = 0; i < MaxSamples; i++)
                {
                    Signal[i].Re = Math.Sin(i * 2 * 3.14 / MaxSamples + 1.57);
                }
    
                for (int Sample = 0; Sample < SampleCount; Sample++)
                {
                    DataPoint.Add(new DataPoint(Signal[Sample].Re, Sample));
                }
            }
        }
    }
    

    Allerdings bekomme ich nun das hier raus:

    Wo steckt da der Fehler? Was habe ich falsch gemacht?

    Danke für die Hilfe!

    Donnerstag, 6. August 2015 05:30

Antworten

  • Ok habe es hinbekommen....da war wohl doch einiges verknotet :D
    Habe den Code etwas umgeschrieben und das Ergebnis sieht nun so aus:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using Microsoft.Research.DynamicDataDisplay.DataSources;
    using Microsoft.Research.DynamicDataDisplay;
    using AForge.Math;
    
    namespace Graph
    {
        /// <summary>
        /// Interaktionslogik für MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public static int MaxSamples = 64;
    
            public static Complex[] Sinus = new Complex[MaxSamples];
            public static Complex[] Cosinus = new Complex[MaxSamples];
            public static Complex[] Spektrum = new Complex[MaxSamples];
    
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void DataWindow_Initialized(object sender, EventArgs e)
            {
                GenerateSineSamples(Sinus, MaxSamples, 1.0);
                PlotData(Sinus, MaxSamples, Colors.Green, "Signal");
                //FourierTransform.FFT(Signal, FourierTransform.Direction.Forward);
    
                /*for (int Sample = 0; Sample < MaxSamples; Sample++)
                {
                    DataPoint.Add(new DataPoint(Signal[Sample].Im, Sample));
                }*/
    
                GenerateCosineSamples(Cosinus, MaxSamples, 2.0);
                PlotData(Cosinus, MaxSamples, Colors.Red, "Spektrum");
            }
    
            private void PlotData(Complex[] Data, int Samples, Color Farbe, string Name)
            {
                DataPointCollection Real = new DataPointCollection();
                DataPointCollection Imaginaer = new DataPointCollection();
    
                for (int Sample = 0; Sample < Samples; Sample++)
                {
                    Real.Add(new DataPoint(Data[Sample].Re, Sample));
                    Imaginaer.Add(new DataPoint(Data[Sample].Im, Sample));
                }
    
                AddPlot(Real, Farbe, Name + " - Re");
                AddPlot(Imaginaer, Farbe, Name + " - Im");
            }
    
            private void AddPlot(DataPointCollection DataPoint, Color Farbe, string Name)
            {
                var DataList = new EnumerableDataSource<DataPoint>(DataPoint);
    
                DataList.SetXMapping(x => x.X);
                DataList.SetYMapping(y => y.Y);
    
                plotter.AddLineGraph(DataList, Farbe, 2, Name);
            }
    
            void GenerateSineSamples(Complex[] Data, int SampleCount, double Amplitude)
            {
                for (int i = 0; i < MaxSamples; i++)
                {
                    Data[i].Re = Amplitude * Math.Sin(i * 2 * 3.14 / MaxSamples);
                }
            }
    
            void GenerateCosineSamples(Complex[] Data, int SampleCount, double Amplitude)
            {
                for (int i = 0; i < MaxSamples; i++)
                {
                    Data[i].Re = Amplitude * Math.Cos(i * 2 * 3.14 / MaxSamples);
                }
            }
        }
    }
    

    Donnerstag, 6. August 2015 05:49