Wie Sinus erzeugen?

Gast #5037044
Lesenswert?

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?
Gast #5037867
Lesenswert?

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.
Gast #5041084
Lesenswert?

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.
Gast #5053005
Lesenswert?

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
Persönliche Seite #5101621
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren