[Mathematik]Sinusfunktionen mit ungleicher Frequenz Addieren

  • C#
  • .NET 4.5

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von mausekeks.

    [Mathematik]Sinusfunktionen mit ungleicher Frequenz Addieren

    Hallo Community,

    ich stehe aktuell vor dem Problem das ich 2 Sinusfunktionen Addieren soll, bei welchen sich die Frequenz unterscheidet.

    Sinusfunktion 1: 20Hz
    Sinusfunktion 2: 40Hz
    (Doppelte Frequenz)

    Meine Funktion sieht bis jetzt wie folgt aus:

    C#-Quellcode

    1. private double GetSinus(double AxisX, double Amplitude, double Frequency, double SampleRate)
    2. {
    3. // sin( 2 * pi * t )
    4. float t = (float)(Frequency / SampleRate * AxisX);
    5. return (Math.Sin(2f * Math.PI * t)) * Amplitude + Offset;
    6. }



    Kann mir bitte jemand erklären wie das Genau funktioniert.

    P.s: Ich habe Google bemüht(leidet jetzt an BurnOut), nur verstehe ich die Mathematischen Formeln nicht.

    Lg Mausekeks
    Brain is Loading: 35%
    Wieso nicht einfach eine Klasse Sinus erstellen, die dann über eine Methode Get(t) verfügt.

    Jeweils dann wenn eben die beiden Signale überlagert werden sollen Sin1.Get(t) und Sin2.Get(t) addieren.

    Hier:

    C#-Quellcode

    1. public class Signal
    2. {
    3. // y = a * sin (b * (x + c)) + d aus https://de.bettermarks.com/mathe/periodische-vorgaenge-die-allgemeine-sinusfunktion/
    4. public double Amplitude { get; set; } // a
    5. public double PeriodScale { get; set; } // b
    6. public double PhaseTranslation { get; set; } // c
    7. public double HeigthTranslation { get; set; } // d
    8. public Signal(double _amplitude, double _periodScale, double _phaseTranslation, double _heightTranslation)
    9. {
    10. Amplitude = _amplitude;
    11. PeriodScale = _periodScale;
    12. PhaseTranslation = _phaseTranslation;
    13. HeigthTranslation = _heightTranslation;
    14. }
    15. public double Get(double t)
    16. {
    17. return Amplitude * Math.Sin(PeriodScale * (t + PhaseTranslation)) + HeigthTranslation;
    18. }
    19. public static double Add(double t, params Signal[] _signals)
    20. {
    21. double _result = .0d;
    22. for (int i = 0; i < _signals.Length; i++)
    23. _result += _signals[i].Get(t);
    24. return _result;
    25. }


    Aufruf:

    C#-Quellcode

    1. Signal s1 = new Signal(1, 2 * Math.PI, 0, 0);
    2. Signal s2 = new Signal(1, 4 * Math.PI, 0, 0);
    3. Console.WriteLine(Signal.Add(Math.PI, s1, s2));
    4. Console.Read();


    Oder missverstehe ich gerade deine Frage?

    Liebe Grüße.
    _
    DotNETWork (Generische Tcp-Klasse, verschlüsselt!)
    MonogameMinecraftClone (Minecraft-Klon)
    NeuroEvolution (Implementation zweier Lernmethoden für neuronale Netze)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „φConst“ ()

    @mausekeks Wo ist das Problem?
    Beide Summanden müssen dieselbe X-Koordinate haben, bei Dir Parameter AxisX, nehme ich an.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!