Forum: Compiler & IDEs Sinusgenerator programmieren


von steht auf dem Schlauch (Gast)


Lesenswert?

Hi, ich suche einen Algorithmus um einen Sinus zu erzeugen. Ich erinnere 
mich dunkel, das ich das in 56002 Assembler mal gesehen habe. War bei 
den Beispiel-Programmen eines 56002 Eval-Boards dabei. Leider habe ich 
das längst entsorgt. Waren nur ein paar Zeilen Assembler Quellcode. 
Keine Sinustabelle! Wollte das jetzt gern nach C portieren.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Dazu gibts hier mehrere Artikel:

http://www.mikrocontroller.net/articles/Digitale_Sinusfunktion
http://www.mikrocontroller.net/articles/Schnelle_32Bit-Integer_Sinusberechnung
http://www.mikrocontroller.net/articles/Sinusgenerator_mit_IIR-Filter
http://www.mikrocontroller.net/articles/Sinus_Tabelle
http://www.mikrocontroller.net/articles/AVR_Arithmetik/Sinus_und_Cosinus_%28CORDIC%29

Zwei Gruppen, Tabellenbasiert oder immer neu berechnet. Letztere 
brauchen irgendeine Amplitudenregelung wie jeder analoge Sinusgenerator 
(Wien-Brücke mit der berühmten Glühlampe als nichtlinearer Widerstand).

von Detlef _. (detlef_a)


Lesenswert?

Folgende Rekursion liefert Dir nen super Sinus:

z0=z1+z1-(z1>>8)-z2;
z2=z1;
z1=z0;

Initialisierung z.B. z1=2000; z2=0;
Kost nix. Andere Frequenz (ist jetzt ~ 101samples/Welle) geht auch, wenn 
man z1>>8 ändert. Amplitude ändert sich durch die Initialisierung.

Cheers
Detlef

von steht auf dem Schlauch (Gast)


Lesenswert?

Detlef _a schrieb:
>Rekursion liefert Dir nen super Sinus:
> z0=z1+z1-(z1>>8)-z2;
> z2=z1;
> z1=z0;

Geht klasse! Vielen lieben Dank!
Meine Initialisierung:
1
z1 = 399;
2
z2 = z1;
So ist Amplitude 399

von Detlef _. (detlef_a)


Lesenswert?

steht auf dem Schlauch schrieb:

>
1
> z1 = 399;
2
> z2 = z1;
3
>
> So ist Amplitude 399

Ah, geschickt, so setzt man die Amplitude und muss nicht rumfummeln.

Cheers
Detlef

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
Noch kein Account? Hier anmelden.