Hallo liebe community,
ich habe mal wieder ein Problem in C#.
Und zwar soll ich ein Programm entwickeln welches ein Signal Simuliert.
Das Signal bekomme ich folgt:
Spoiler anzeigen
Dies so in einem Chart einzufügen ist auch kein Problem und funktioniert einwandfrei:
Das Intervall beträgt 60ms.
Wenn ich aber versuche dies in ein Array zu übertragen:
und dieses dann auf das Chart übertragen möchte zeigt er mir zwar etwas an jedoch nicht die gewünschte Sinuskurve:
Kann mir jemand weiterhelfen?
Vielen Dank im Vorraus
LG Mausekeks
ich habe mal wieder ein Problem in C#.
Und zwar soll ich ein Programm entwickeln welches ein Signal Simuliert.
Das Signal bekomme ich folgt:
C#-Quellcode
-
- private SignalType signalType = SignalType.Sinus;
- public SignalType SignalType
- {
- get { return signalType; }
- set { signalType = value; }
- }
- private float frequency = 1f;
- public float Frequency
- {
- get { return frequency; }
- set { frequency = value; }
- }
- private float amplitude = 1f;
- public float Amplitude
- {
- get { return amplitude; }
- set { amplitude = value; }
- }
- private float phase = 0f;
- public float Phase
- {
- get { return phase; }
- set { phase = value; }
- }
- private float offset = 0f;
- public float Offset
- {
- get { return offset; }
- set { offset = value; }
- }
- private float invert = 1;
- public bool Invert
- {
- get { return invert == -1; }
- set { invert = value ? -1 : 1; }
- }
- private long startTime = Stopwatch.GetTimestamp();
- private long ticksPerSecond = Stopwatch.Frequency;
- public float GetValue(float time)
- {
- float value = 0f;
- float t = frequency * time;// + phase;
- switch (SignalType)
- {
- case SignalType.Sinus:
- {
- //sin( 2 * pi * t )
- value = (float)Math.Sin(2f * Math.PI * t);
- }
- break;
- case SignalType.Rechteck:
- {
- //sign(sin(2*pi*t))
- value = Math.Sign(Math.Sin(2f * Math.PI * t));
- }
- break;
- case SignalType.Sägezahn:
- {
- // 2 * ( t/a - floor( t/a + 1/2 ) )
- value = 2f * (t - (float)Math.Floor(t + 0.5f));
- }
- break;
- }
- return (invert * amplitude * value + offset);
- }
- public float GetValue()
- {
- float time = (float)(Stopwatch.GetTimestamp() - startTime)
- / ticksPerSecond;
- return GetValue(time);
- }
- public void Reset()
- {
- startTime = Stopwatch.GetTimestamp();
- }
Dies so in einem Chart einzufügen ist auch kein Problem und funktioniert einwandfrei:
Das Intervall beträgt 60ms.
Wenn ich aber versuche dies in ein Array zu übertragen:
und dieses dann auf das Chart übertragen möchte zeigt er mir zwar etwas an jedoch nicht die gewünschte Sinuskurve:
Kann mir jemand weiterhelfen?
Vielen Dank im Vorraus
LG Mausekeks
Brain is Loading: 35%