ARM - prędkość wyliczania sin(x)
Krzysztof - 18-08-2006 17:46
ARM - prędkość wyliczania sin(x) 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...
BartekK - 18-08-2006 18:45
Krzysztof napisał(a):
> z jaką prędkością da się wyliczać
> wartość sinusa na procesorach serii ARM?
> na mikrokontrolerach serii AVR przy standardowych
> bibliotekach da się wyliczać max. niecałe 3000
> razy/sek wartość sinusa...
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 ?
--
| Bartlomiej Kuzniewski
|
http://drut.org/|
http://www.allegro.pl/show_user_auctions.php?uid=338173
Krzysztof - 19-08-2006 16:45
> 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 ?
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.
Jarosław Grolik - 19-08-2006 18:45
Witam
Użytkownik "Krzysztof" <krzysztof.gedroyc_NOSPAM_@wp.pl> napisał w
wiadomości news:ec766v$sq1$1@nemesis.news.tpi.pl...
> 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).
A może dało by się użyć jakiegoś DDS-a zamiast programowo generować sinusa ?
Pozdrawiam
Jarek Grolik
Grzegorz Kurczyk - 19-08-2006 21:45
Użytkownik Krzysztof napisał:
>> 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 ?
>
>
> 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).
A ilu bitowy jest ten przetwornik D/A ?
Pozdrawiam
Grzegorz
Krzysztof - 19-08-2006 21:45
> A ilu bitowy jest ten przetwornik D/A ?
Przetowrnik jest 16-bitowy.
Dla informacji dodam, że potrzebuję naraz generowac dwa przebiegi o
podobnych częstotliwościach (330-350Hz)...
K.
JR - 19-08-2006 23:45
Użytkownik "Krzysztof" :
> Przetowrnik jest 16-bitowy.
> Dla informacji dodam, że potrzebuję naraz generowac dwa przebiegi o
> podobnych częstotliwościach (330-350Hz)...
>
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
--
pzdr.
JR
J.F. - 20-08-2006 08:48
On Sat, 19 Aug 2006 21:41:01 +0200, Krzysztof wrote:
>> A ilu bitowy jest ten przetwornik D/A ?
>
> Przetowrnik jest 16-bitowy.
> Dla informacji dodam, że potrzebuję naraz generowac dwa przebiegi o
>podobnych częstotliwościach (330-350Hz)...
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.
Piotr Wyderski - 20-08-2006 12:45
Krzysztof wrote:
> 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?
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ć.
> na mikrokontrolerach serii AVR przy standardowych
> bibliotekach da się wyliczać max. niecałe 3000
> razy/sek wartość sinusa...
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
PAndy - 21-08-2006 10:45
"J.F." <jfox_xnospamx@poczta.onet.pl> wrote in message
news:dsvfe2hufd8r6b2frhj76cm0c76q2q9o2u@4ax.com...
> On Sat, 19 Aug 2006 21:41:01 +0200, Krzysztof wrote:
>>> A ilu bitowy jest ten przetwornik D/A ?
>>
>> Przetowrnik jest 16-bitowy.
>> Dla informacji dodam, że potrzebuję naraz generowac dwa przebiegi
>> o
>>podobnych częstotliwościach (330-350Hz)...
>
> 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.
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
zanotowane.pldoc.pisz.plpdf.pisz.plkonstruktor.keep.pl