Sinus wird nicht korrekt berechnet?

Hallo ich ein Problem mit der Phasenverschiebung wenn diese bei GenerateSignal als 0 oder kleiner als 10 übergeben wird ist der Graph ein Gerade allerdings wenn die Phase als Wert wie zum Beispiel 200 übergeben wird ist der Graph wieder normal als ob die Phase die Amplitude beeinflusst ich kann aber nicht herausfinden woran es liegt?

Mein Code dieser erbt zwar von einer Klasse allerdings ist das unwichtig sowie das Main-Window unwichtig ist weil es kommen wirklich richtige Werte (Habe auch schon ChatGPT dazu gezogen wie man am Code sehen kann.):using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Controls;

using System.Windows.Navigation;

using System.Windows.Shapes;

using System.Windows;

using System.Windows.Media;

namespace Generator

{

  public class Sinus : Signal

  {

    public Sinus(int sampleRate) : base(sampleRate)

    {

    }

    public double[] GenerateSignal(double amplitude, double frequency, double phase, int time)

    {

      int totalSamples = this.SampleRate * time;

      double[] points = new double[totalSamples];

      // Phase als Verschiebung der x-Achse: Keine Umrechnung nötig, da Phase schon als verschobene Zeit in Bogenmaß funktioniert.

      for (int i = 0; i < totalSamples; ++i)

      {

        double t = (double)i / this.SampleRate; // Zeit in Sekunden

        points[i] = amplitude * Math.Sin(2 * Math.PI * frequency * t + phase); // Phase wirkt sich nur auf die Verschiebung aus

      }

      return points;

    }

    public override void Draw(Canvas canvas, double[] points)

    {

      // Erstelle die Polyline

      Polyline geometryFigure = new Polyline()

      {

        Name = “myPolyline”,

        Stroke = Brushes.Black, // Linie sichtbar machen

        StrokeThickness = 1,   // Linienstärke

        Fill = Brushes.Transparent

      };

      // Berechne den Mittelpunkt des Canvas

      double canvasCenterY = canvas.ActualHeight / 2;

      // Berechne die Amplitude der Sinuskurve

      double amplitude = points.Max(); // Die maximale Amplitude der Sinusfunktion

      double minAmplitude = points.Min(); // Der minimalste Wert der Sinuskurve

      double amplitudeRange = amplitude – minAmplitude; // Gesamtbereich der Amplitude

      // Berechne den Offset, um den Mittelpunkt der Sinuskurve auf den Mittelpunkt des Canvas zu verschieben

      double offsetY = canvasCenterY;

      // Erstelle die PointCollection mit den verschobenen Punkten

      PointCollection pointCollection = new PointCollection();

      for (int i = 0; i < points.Length; ++i)

      {

        // Verschiebe den Punkt so, dass der Mittelpunkt der Sinuskurve in die Mitte des Canvas verschoben wird

        double x = i -500;

        // Skalierung und Verschiebung

        double y = points[i] + canvas.ActualHeight / 1.98;

        // Punkte zur PointCollection hinzufügen

        pointCollection.Add(new Point(x, y));

      }

      // Setze die Points für die Polyline

      geometryFigure.Points = pointCollection;

      // Füge die Polyline zum Canvas hinzu

      canvas.Children.Add(geometryFigure);

    }

  }

}

(1 votes)
Loading...

Similar Posts

Subscribe
Notify of
1 Answer
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Kelec
3 months ago

See if Generate Signals generates the correct data and are passed on to Draw correctly on these values.