Ich möchte mittels DSP Sinussignale erzeugen. Die Frequenz soll innerhalb eines engen Bereichs variabel sein, hohe Anforderungen an den Klirrfaktor existieren nicht. Üblicherweise wird das ja über DDS gemacht: Ein Phasenakkumulator wird pro Abtastintervall um einen konstanten Wert erhöht, wobei bei 2*Pi zyklisch wieder bei null begonnen wird. Der jeweilige Pahsenwert dient als Index in eine Sinustabelle. Der Sinuswert wird dann auf den DAC gegeben, der das Ausgangssignal erzeugt. Nachteilig ist, dass man eine recht große Tabelle im Speicher vorhalten muss. Ich hätte eine andere Idee: Es wird zunächst ein Rechtecksignal erzeugt, das anschließend durch ein IIR-Filter geschickt wird, dessen Grenzfrequenz knapp oberhalb der höchsten zu erzeugenden Sinusfrequenz liegt. Dadurch werden die Oberwellen unterdrückt und es bleibt die Grundschwingung zurück. Ich habe das anhand eines 4.Ordnung Butterworth in Matlab mal ausprobiert, es scheint zu funktionieren. Nachteilig ist der etwas höhere Rechenaufwand. Wäre hier irgendein Pferdefuss in der praktischen Umsetzung zu erwarten?
Mike schrieb: > Es wird zunächst ein Rechtecksignal erzeugt, das anschließend durch ein > IIR-Filter geschickt wird, dessen Grenzfrequenz knapp oberhalb der > höchsten zu erzeugenden Sinusfrequenz liegt. Dadurch werden die > Oberwellen unterdrückt und es bleibt die Grundschwingung zurück. > > Ich habe das anhand eines 4.Ordnung Butterworth in Matlab mal > ausprobiert, es scheint zu funktionieren. Ich glaube, das sind die innovativen Lösungsansätze, die hier angesprochen wurden: Beitrag "Re: Hardwareentwickler als Technischer Informatiker" Das Thema ist 100mal diskutiert und genau so oft gelöst.
Mike schrieb: > Nachteilig ist, dass man eine recht große Tabelle im Speicher vorhalten > muss. > > Ich hätte eine andere Idee: > > Es wird zunächst ein Rechtecksignal erzeugt, das anschließend durch ein > IIR-Filter geschickt wird, Ach herrje... Rechne dir den sinus einfach aus und benutze dazu die simple Formel nach "Sinus nach Pedersen". Das kostet vermutlich weniger Zeit als dein IIR-Filter und liefert annähernd 6 gültige Dezimalstellen - sollte dir ausreichen. Das Thema hatten wir hier schon mal. W.S.
Du meinst den hier: Beitrag "Re: arm_sin_cos_f32() gibt keine Ergebnisse aus" Guter Tipp. Danke. Kannte Ich noch gar nicht.
DSP Entwickler schrieb: > Du meinst den hier Nö. Sondern: Beitrag "Sinusberechnung auf Controller STM32F030" Nochmal ganz kurz:
1 | y:= x * (K*x^2 + L + M / (x^2 + N)); |
2 | |
3 | mit
|
4 | K = 0.15625 |
5 | L = -11.45242628 |
6 | M = 480.1488517 |
7 | N = 38.55864669 |
W.S.
Da komme Ich aber nicht auf einen Sinus! Sieht eher aus wie eine Näherung von COS/7 im Bereich +/-PI. Aber nicht gut. ????
W.S. schrieb:
> Nochmal ganz kurz:
y:= x * (K*x^2 + L + M / (x^2 + N));
Wie ist denn diese Formel anzuwenden?
Ich vermute mal y=Sinuswert, x=Winkelwert(Grad).
Dann müsste mit x=90, y zu 1 werden.
Nach meiner Rechnung ist y dann 19.178940.....
Wo ist ist denn hier der Bock??
viele Grüße
Solche Formeln sind praktisch immer im Bogenmass. Also X von -PI bis PI. Oder digital in 8 Bit: https://www.mikrocontroller.net/wikifiles/thumb/b/b3/Opimierte_naeherung_sinusfunktion2_js.png/480px-Opimierte_naeherung_sinusfunktion2_js.png k1 = 1,0000, k2= -0,0444, k3= -0,0207, k4= -0,0018, k5= -0,00255. Siehe Digitale Sinusfunktion
BuDe schrieb:
> Wie ist denn diese Formel anzuwenden?
W.S. und J.Schuhmacher:
vielen Dank Euch beiden, mit Bogenmaß geht die Rechnung auf.
Gruß
BuDe
W.S. schrieb: > "Sinus nach Pedersen". Super! Danke für diese Info. Kannte Ich bisher noch nicht. Jürgen S. schrieb: > k1 = 1,0000, k2= -0,0444, k3= -0,0207, k4= -0,0018, k5= -0,00255. Woher kommt diese Formel? Quelle?
Edi M. schrieb: > Jürgen S. schrieb: >> k1 = 1,0000, k2= -0,0444, k3= -0,0207, k4= -0,0018, k5= -0,00255. > Woher kommt diese Formel? Quelle? Empirisch gefunden, durch Ausprobieren optimiert. Ob sie effektiv ist, hängt davon ob, wie effektiv die INT-Multiplikationen sind. Bei einem floating point DSP braucht es das nicht. Aber mit einem 8-Bit uc lässt sich das leicht realisieren. Ist auch grob 0,1% genau.
W.S. schrieb: > Nochmal ganz kurz: Hallo W.S. sehr guter Tipp. Heute morgen mal kurz eingetippt: Klappt. Jetzt müsste man nur noch wissen, wie man bei den Werten einfach die Frequenz ändern kann. (?)
> Jetzt müsste man nur noch wissen, wie man bei den Werten einfach die
Frequenz ändern kann. (?)
Das Konzept des DDS hast du aber verstanden ?
W.S. schrieb: > K = 0.15625 > L = -11.45242628 > M = 480.1488517 > N = 38.55864669 gibt es auch praktische Bedeutung zu diesen Werten? Ich als Physike lese da Längen und Momente, etc aber deren Verknüpfung macht so in der Formel eigentlich keinen Sinn.
Thomas U. schrieb: > Ich als Physike lese da Längen und Momente, Man muss ja nicht unbedingt die ganze Welt auf das cgs-System zurückführen. :-)
Hallo Thomas, > Die Frage wäre halt, woher die Bezeichnungen kommen und was sie > bedeuten? A, B, C,... rhf
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.