RTV forum PL | NewsGroups PL

Jak szybkie obliczenia sin(x) na procesorach ARM w porównaniu do AVR?

ARM - prędkość wyliczania sin(x)

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak szybkie obliczenia sin(x) na procesorach ARM w porównaniu do AVR?

Krzysztof
Guest

Fri Aug 18, 2006 3:10 pm   



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
Guest

Fri Aug 18, 2006 4:13 pm   



Krzysztof napisał(a):
Quote:
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
| sibi@drut.org GG:23319 tel +48 696455098 http://drut.org/
| http://www.allegro.pl/show_user_auctions.php?uid=338173

Krzysztof
Guest

Sat Aug 19, 2006 2:09 pm   



Quote:
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
Guest

Sat Aug 19, 2006 5:40 pm   



Witam

Użytkownik "Krzysztof" <krzysztof.gedroyc_NOSPAM_@wp.pl> napisał w
wiadomości news:ec766v$sq1$1@nemesis.news.tpi.pl...

Quote:
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
Guest

Sat Aug 19, 2006 7:08 pm   



Użytkownik Krzysztof napisał:
Quote:
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
Guest

Sat Aug 19, 2006 7:41 pm   



Quote:
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
Guest

Sat Aug 19, 2006 8:55 pm   



Użytkownik "Krzysztof" :

Quote:
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 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

--
pzdr.
JR

JR
Guest

Sat Aug 19, 2006 9:12 pm   



Użytkownik "Krzysztof" :

Quote:
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.
Guest

Sun Aug 20, 2006 6:41 am   



On Sat, 19 Aug 2006 21:41:01 +0200, Krzysztof wrote:
Quote:
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
Guest

Sun Aug 20, 2006 10:25 am   



Krzysztof wrote:

Quote:
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ć.

Quote:
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
Guest

Mon Aug 21, 2006 8:09 am   



"J.F." <jfox_xnospamx@poczta.onet.pl> wrote in message
news:dsvfe2hufd8r6b2frhj76cm0c76q2q9o2u@4ax.com...
Quote:
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

elektroda NewsGroups Forum Index - Elektronika Polska - Jak szybkie obliczenia sin(x) na procesorach ARM w porównaniu do AVR?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map