"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:447917ba$0$38666$edfadb0f@dread12.news.tele.dk
> "Harald Mossige" <haraldmnospam@hkabel.no> wrote in
> message news:4478c952$1@news.wineasy.se...
>> Finnes der en enkel algoritme for å la en
>> mikrokontroller (8 bit) bereine sinus?
>
> Man kan anvende rækkeudvikling:
>
> sin(x) = x - x^3/3! + x^5/5! - x^7/7! + x^9/9! etc.
>
> Ovenstående 5 led er rigeligt. Se f.eks. mere her:
>
http://www.cs.aau.dk/~ohj/AA1-03/num.pdf - side 5-6.
Hvis man skal bruge en sekvens af sinusværdier, kan man simulere en
resonator og "slå den an". Den metode er både simpel og ekstremt hurtig og
pladsbesparende. Den kræver ikke engang en multiplikation.
Eksempel:
a=10000 ("anslag")
b=0
Loop:
a=a+b/16
b=b-a/16
jump Loop
Divisionen med 16 bestemmer hvor hurtigt sinusen svinger, altså frekvensen.
Den kan laves med højreskift. a og b skal dog være i 16 bit bredde for at få
et rimeligt 8-bit resultat uden for store afrundingsfejl. a og b vil begge
give sinusbølger, 90 grader forskudt. Så man kan sige den ene giver sinus og
den anden giver cosinus.
Princippet kan også bruges til at lave hurtige digitale filtre.
--
Ulrik Smed
Aarhus, Denmark