Może ktoś to robił, ewentualnie może ktoś to wie: z jaką prędkością da się wyliczać wartość sinusa na procesorach serii ARM?
Krzysiek
PS. Może ktoś tego będzie szukał: na mikrokontrolerach serii AVR przy standardowych bibliotekach da się wyliczać max. niecałe 3000 razy/sek wartość sinusa...
Didn't find your answer? Ask the community — no account required.
B
BartekK
Krzysztof napisał(a):
co prawda nie odpowiem na twoje pytanie - ale czy trzeba wyliczac? a nie mozna zrobic "tabelki" z gotowymi wynikami, np znormalizowanymi, gdzie max sinusa to pelny zakres (dla danego typu zmiennej), a potem sobie tylko odnajdywac w tabelce wartosc dla danego kata ?
K
Krzysztof
Testowałem tą metodę (na mikrokontrolerach AVR, tabela o rozmiarze kilkuset bajtów), ale do mojego zastosowania jest zbyt mało dokładna. Potrzebuję miec wartości sinusa dla niemal dowolnych kątów, bo później wyliczone wartości trafiają na przetowrnik D/A. Potrzebuję generowac częstotliwości (sinusoida) z zakresu 330-350Hz, przy niskim poziomie zniekształceń (pierwsza harmoniczna najwyżej -40 dB). Ale gdyby tabela wartości była dużych rozmiarów (kilkadziesiąt kB) może dałoby to zamierzony efekt...
Pzdr. K.
I
invalid unparseable
Witam
Użytkownik "Krzysztof" <krzysztof.gedroyc_NOSPAM snipped-for-privacy@wp.pl napisał w wiadomości news:ec766v$sq1$ snipped-for-privacy@nemesis.news.tpi.pl...
A może dało by się użyć jakiegoś DDS-a zamiast programowo generować sinusa ?
Pozdrawiam
Jarek Grolik
G
Grzegorz Kurczyk
Użytkownik Krzysztof napisał:
A ilu bitowy jest ten przetwornik D/A ?
Pozdrawiam Grzegorz
K
Krzysztof
Przetowrnik jest 16-bitowy. Dla informacji dodam, że potrzebuję naraz generowac dwa przebiegi o podobnych częstotliwościach (330-350Hz)...
K.
J
JR
Użytkownik "Krzysztof" :
możesz spróbować zastosować na wyjściu C/A ostry filtr dolnoprzepustowy analogowy fgr = 370..400Hz, taki jaki ongiś stosowało się w torze CD-Audio w czasach przed C/A 1-bit i wielokrotnym oversamplingiem ( żyratory i takie inne Butherwothy/Czebyszewy); zerknij na jakieś gotowce i przeskaluj na niższe częstotliwości; powinieneś dostać bardzo czyste przebiegi nawet przy mało dokładnym wyznaczeniu sinusa;
a od strony programowej szukaj algorytmu pod: "DTMF Generation" a szczególnie "Artificial Sine Wave Generation Using SX Microcontroller" pod mikrokontrolery Scenixa; mała ilość kodu i świetna szybkość algorytmu
J
JR
Użytkownik "Krzysztof" :
możesz spróbować zastosować na wyjściu C/A ostry filtr dolnoprzepustowy analogowy fgr = 370..400Hz, taki jaki ongiś stosowało się w torze CD-Audio w czasach przed C/A 1-bit z wielokrotnym oversamplingiem ( żyratory i takie inne Butherwothy/Czebyszewy); zerknij na jakieś gotowce i przeskaluj na niższe częstotliwości; powinieneś dostać bardzo czyste przebiegi nawet przy mało dokładnym wyznaczeniu sinusa;
a od strony programowej szukaj algorytmu pod: "DTMF Generation" a szczególnie "Artificial Sine Wave Generation Using SX Microcontroller" pod mikrokontrolery Scenixa; mała ilość kodu i świetna szybkość algorytmu
J
J.F.
Po pierwsze - kolejne probki mozna wyliczyc w ogole bez sinusa, po drugie - mozesz to sobie stablicowac i interpolacje liniowa miedzy wezlami wprowadzic, po trzecie - dla tej dokladnosci to i wielomian obliczeniowy moze byc krotszy.
J.
P
Piotr Wyderski
Na ARMie nie robiłem, ale na FPGA tak -- tam częstotliwość ograniczała wydajność bloku RAM, co na Cyclone dawało ~250 MHz. Algorytm był prosty i generował dokładność 17,3 bitu. Zgaduję, że na ARMie da się osiągnąć co najmniej kilka milionów sampli na sekundę. Pomysł jest następujący: stablicuj sobie wartości sinusa w zakresie podzielonym na 256 i pobieraj je indeksując starszym bajtem akumulatora fazy. Dodaj do tego wynik interpolacji liniowej, obliczony z iloczynu różnicy dwóch kolejnych próbek i młodszego bajtu akumulatora fazy. I to wszystko.
Na FPGA oszczędzałem RAM, więc trzymałem tylko 256 18-bitowych wartości z pierwszej ćwiartki kątów i na podstawie dwóch najstarszych bitów akumulatora fazy dokonywałem korekcji kąta i znaku. Akumurator miał więc efektywnie 18 bitów. Ze wzgledu na sekwencyjną naturę procesorów na ARMie może się to nie opłacać.
Jeśli ktoś potrzebuje więcej, to są metody niestandardowe... Sądzę, że kilkaset tysięcy próbek na sekundę bym z niego wycisnął.
Pozdrawiam Piotr Wyderski
P
PAndy
z DSP - jeszcze czasem po prostu wystarczy zasymulowac bezstratny obwod LC A pzoa tym CORDIC i masa innych roziwazan. pamietac nalezy o symetrii sinusa wiec wystarczy liczyc wartosc dla jednej cwiartki a pozsotale uzyskuje sie przez proste zanegowanie
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.