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.
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
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. (?)
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.