DDS, prośba o wyjaśnienie

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
Witam,

Przeczytałem zasadę działania DDS i wydaje
mi się, że wszystko zrozumiałem.
Potem znalazłem opis pewnego projektu
http://www.scienceprog.com/avr-dds-signal-generator-v20 /
i nie rozumiem, w jaki sposób autor
uzyskuje częstotliwość od 1 do 65kHz,
a ma stablicowane tylko 256 próbek sinusa.
Będę wdzięczny za wyjaśnienie.

Z góry dziękuję.

Robbo



Re: DDS, pro�ba o wyja�nienie
W dniu 2010-03-18 20:02, Robbo pisze:
Quoted text here. Click to load it
No to widocznie nie zrozumiałeś.
Zakres częstotliwości uzyskuje się wybierając "prędkość odtwarzania"
tych próbek. Próbki zawierają tylko wartości chwilowe.
Łatwiej może byś zrozumiał gdyby autor miał 360 próbek skatalogowanych,
i dla sinusa ustawiał co 1stopień kolejną próbkę z tabeli. A jak szybko
stopnie się zmieniają - do tego zależy częstotliwość, jeśli będziesz
zmieniał stopnie (numery próbek z tabeli) z częstotliwością (prędkością)
1/360s to cały sinus wymalujesz w czasie 360/360=1s czyli uzyskasz 1Hz.
Oczywiście nie ma sensu przechowywać 360próbek, bo w układzie cyfrowym
po pierwsze łatwiej się liczy do pełnych potęg dwójki, a w dodatku skoro
"góra i dół" sinusa (0-180st i 180-360) są takie same tylko odwrócone co
do znaku. I nie ma sensu przechowywać całego kawałka 0-180st, skoro
90-180st jest taki sam jak 0-90 tylko odtwarzany od tyłu. Dzięki temu
odcinek 0-90st zapisujesz "niby tylko" na 256prĂłbkach, tylko te prĂłbki
odtwarzasz z odpowiednią kolejnością i ze znakiem, a to przekłada się na
1024 próbki na całego sinusa, całkiem ładny przebieg dając.

--
| Bartlomiej Kuzniewski
| snipped-for-privacy@drut.org  GG:23319  tel +48 696455098  http://drut.org /
We've slightly trimmed the long signature. Click to see the full one.
Re: DDS, pro?ba o wyja?nienie
Nie wiem, czy się rozumiemy, a mi zależy,
żeby dobrze zrozumieć DDS i wymieniony projekt
generatora.
    Załóżmy, że dla 1Hz układ "wypluwa"
na wyjście po kolei 256 próbek.
Dla częstotliwości 2Hz korzysta już tylko
z połowy próbek -- "wypluwa" co drugą
próbkę. Przy 256Hz wypluwa już tylko jedną próbkę
na okres.
Nie rozumiem, jak może dojść do 65kHz i mieć
na wyjściu sinusoidę.
Będę wdzięczny za wyjaśnienie. Z góry dzięki.

Robbo



Re: DDS, pro?ba o wyja?nienie
W dniu 2010-03-18 20:31, Robbo pisze:
Quoted text here. Click to load it
Wszystko Ĺşle :)
Dla 1Hz układ wypluwa po kolei 256 próbek, w odstępach 1/256sekundy.
Dla 2Hz układ wypluwa po kolei 256 próbek, w odstępach 1/512sekundy.
Dla 256Hz układ wypluwa po kolei 256 próbek, w odstępach 1/(256*f[HZ]) itd.
Dla 65kHz (65000Hz) układ wypluwa po kolei 256 próbek, w odstępach
1/16640000 sekundy czyli z prędkością 16,64 MHz (coś wysoko, Atmega by
musiała być taktowana z 32MHz, by "co takt" mogła zmieniać wartość na
porcie)

--
| Bartlomiej Kuzniewski
| snipped-for-privacy@drut.org  GG:23319  tel +48 696455098  http://drut.org /
We've slightly trimmed the long signature. Click to see the full one.
Re: DDS, pro?ba o wyja?nienie
Quoted text here. Click to load it

Obawiam siEA%, BF%e to jednak Ty nie rozumiuesz zasady dziaB3%ania DDS.

Robbo dobrze napisaB3%, DDS ma staB3%B1 czEA%stotliwoB6%E6 prF3%bkowania,=
 a
zmienny jest krok (inkrement) fazy, z tym BF%e podany przykB3%ad dotyczyB3%
akurat prF3%bkowania z czestotliwoB6%ciB1% 256 Hz, BF%eby uzyskaE6% wyBF%sz=
B1%
czEA%stotliwoB6%E6 trzeba oczywiB6%cie z wyBF%szB1% czEA%stotliwoB6%ciB1% =
prF3%bkowaE6%.

Re: DDS, pro?ba o wyja?nienie
W dniu 2010-03-19 00:51, shg pisze:
Quoted text here. Click to load it
Co innego DDS "prawdziwy do 100MHz" a co innego jego implementacja na AVR.
Zasada jest prosta - odtwarzamy cyklicznie próbki sygnału z pamięci (np
prĂłbki sinusa) i zamieniamy go w przebieg analogowy w przetworniku C/A.
Istnieją takie i takie implementacje, w avr akurat widziałem taką jak
opisałem. W DDSach "scalonych" różnie bywa, niektóre mają przełączany
tryb pracy - dla wyższych częstotliwości "po twojemu", dla niższych "po
mojemu" - aby uzyskać ładniejszy przebieg dla niższych częstotliwości, i
by dało się generować wyższe. Można sobie jeszcze wyobrazić inne
implementacje (np z obliczaniem interpolacji między próbkami, dla
niższych częstotliwości, by jeszcze wygładzić sygnał, lub pomijanie
niektórych próbek dla wyższych, by przyspieszyć odtwarzanie i umożliwić
generowanie wyĹźszych częstotliwości), ale  to tylko komplikuje
tłumaczenie, a idea jest prosta - odtwarzamy próbkę zapętloną z pamięci,
i tyle.

--
| Bartlomiej Kuzniewski
| snipped-for-privacy@drut.org  GG:23319  tel +48 696455098  http://drut.org /
We've slightly trimmed the long signature. Click to see the full one.
Re: DDS, pro?ba o wyja?nienie
On Thu, 18 Mar 2010 20:31:11 +0100,  Robbo wrote:
Quoted text here. Click to load it

Nie chce mi sie przez ten kod przebijac - ale DDS dziala inaczej.
"wypluwa" probki bardzo czesto - w tym przypadku tak czesto jak sie
procesor wyrobi, powiedzmy 1MHz, czy jak kto woli co 1us.

Za kazdym razem oblicza jaka ma byc wartosc probki.
Jesli syntezuje 1Hz - to bardzo czesto nowa probka bedzie taka sama
jak stara. Trudno zreszta zeby bylo inaczej jesli mamy do dyspozycji
tylko 8-bitowy DAC.

Jesli syntezuje 65kHz, to co 1us przeskakuje o wiecej bitow i probek.

A jak oblicza? Dosc prosto.

Mamy np 32 bitowy rejestr, zwany dalej "faza". Traktujemy go tak ze on
odpowiada pelnemu "obrotowi" czy jak kto woli okresowi, czyli jedna
jednostka odpowiada 360/2^32 stopnia.

Co chwila dodajemy do tego rejestru "skok". Jesli chcemy wygenerowac
1Hz przy cyklu 1MHz/1us, to w ciagu miliona cykli rejestr fazy
powinien sie "przekrecic". Skok powinien wiec wynosic
2^32/1000000 = 4294.967296

Ulamkowej liczby dodawac nie damy rady, bedziemy wiec dodawac np 4295,
uzyskujac czestotliwosc 1.0000076.. Hz.
Ta odchylka sie nie przejmujemy, albo dobieramy lepiej parametry.


Teraz skupmy sie na najstarszym bajcie rejestru fazy - on tez podaje
faze, tylko z rozdzielczoscia 360/256 stopnia.. Moze wprost wybierac
wartosc probki z tablicy sinusa. Albo trojkata.

Poniewaz ten bajt zmienia sie po dodaniu ok 16.7 mln do rejestru fazy,
w naszym przykladzie bedzie sie zmienial co ok 3906.2 cykli zegara.

Jesli chcemy generowac 2Hz, dodajemy co cykl 8590, i probka zmienia
sie co ~1853 cykle.

A przy 65000Hz, co cykl dodajemy 279 172 874, czyli za kazdym razem
przestakujemy ok co 1us przeskakujemy co ok 17 probek w tablicy.

Quoted text here. Click to load it

Jak sie dokladnie przyjrzec na cyfrowym oscyloskopie, to szemrana ta
sinusoida :-)

Ale w AD twierdza ze wystarczaja im nawet 3 probki na okres :-)

Duzo zalezy czy mozemy sobie pozwolic na filtr dolnoprzepustowy.

J.


Re: DDS, pro?ba o wyja?nienie
No to dobrze wiedzieć, jak działa DDS.
Czyli cała kwestia rozbija się o to, że
z akumulatora odczytujemy tylko pewną
liczbę najstarszych bitów. W ten sposób
przez kilka kolejnych cykli pracy układu
może pojawić się próbka sinusa spod tego
samego adresu w pamięci.
Natomiast, jeśli zwiększamy rejestr o odpowiednio
dużą wartość (tak aby co cykl pracy najstarsze
brane pod uwagę bity akumulatora zmieniały
swoją wartość), to dopiero wtedy na wyjściu
pojawia się co któraś stablicowana próbka.
    Zmyliły mnie opisy DDS-ów, które
znalazłem (a było ich trzy). Tam wszędzie
była mowa o tym, że odczytuje się cały
akumulator (a nie np. najstarsze bity).
Tylko w jednym z opisów znalazłem informację,
że można sobie akumulator rozszerzyć
o część ułamkową (czyli mniej więcej to samo,
co mamy odczytując tylko najstarsze bity).

Robbo



Re: DDS, pro?ba o wyja?nienie


Quoted text here. Click to load it

Jeśli w tych opisach były akumulatory rzędu 32 bity to powinno Cię
zastanowić, gdzie upchnęli pamięć 4 gigabajtów próbek.
P.G.


Re: DDS, pro?ba o wyja?nienie
Quoted text here. Click to load it

I po co - sinus to funkcja stosunkowo wolnozmienna, dla 8 bit DAC
wystarczy probek 500-650, a jak dobrze pomyslec to cwierc z tego.

J.


Re: DDS, pro?ba o wyja?nienie

Quoted text here. Click to load it
Nie zrozumiałeś, co chciałem powiedzieć.
P.G.


Re: DDS, pro?ba o wyja?nienie
Quoted text here. Click to load it

Zrozumialem, i chcialem poprzec dodatkowym argumentem, ale zle
napisalem :-)

Powinno byc "i zastanowic sie po co trzymac 4G  probek, skoro DAC
ma 8-16 bitow".

J.


Re: DDS, pro?ba o wyja?nienie

Quoted text here. Click to load it
Fakt, nawet tamtą wypowiedź można tak zrozumieć - tylko, że na to nie
wpadłem.
P.G.


Re: DDS, proÂśba o wyjaÂśnienie
Quoted text here. Click to load it

Masz licznik o wielkiej pojemnosci A.

Masz stałą o niewielkiej wartości B

Dodajesz w ciasnej pętli B do A bez przerwy.

Bierzesz najstarsze osiem bitĂłw z A i to jest indeks w tablicy twojego
sinusa. Dzieki temu ze A się czasem przepelnia bezustannie przechodzisz
przez swoje 256 prĂłbek sinusa.

Sinus na wyjsciu układu bedzie nie lepszy niż 256 próbek sinsua, a jesli
B stanie się niebezpiecznie wysokie - może byc gorszy, bedziesz wtedy
przeskakiwał próbki z tablicy.

Zerknij sobie tutaj:

http://www.myplace.nu/avr/minidds/index.htm

Główna pętla DDS jest tak mala, że łatwo pojąć nawet bez znajomosci
asemblera.

Re: DDS, pro?ba o wyja?nienie
Dzięki za odpowiedź.

Quoted text here. Click to load it

Jeśli dobrze zrozumiałem...
Jeśli B jest relatywnie niewielkie, to trzeba wielu obiegów pętli,
żeby najstarsze osiem bitów A zmieniło swoją wartość o jeden. W ten sposób
przez wiele obiegów pętli na wyjściu uC utrzymuje się ta sama stablicowana
próbka sinusa. Zatem mamy tu jakgdyby do czynienia z rozciąganiem.

Jeśli B jest tak dobrane, że każdy obieg pętli powoduje, że te najstarsze
osiem bitów A zwiększa się o jeden, to co obieg pętli mamy na wyjściu uC
kolejne stablicowane próbki sinusa.

Jeśli B jest na tyle duże, że każdy obieg pętli powoduje, że te najstarsze
osiem bitów A zwiększa się o więcej niż jeden, to niektóre stablicowane
próbki sinusa są omijane; np. jeśli co obieg pętli wartość ośmiu
najstarszych
bitów zwiększa się o 2, to ma wyjściu uC mamy co drugą próbkę.


Quoted text here. Click to load it

Widziałem to. Czytałem w dokumentacji Atmela o znaczeniu
mnemonika "lpm", ale nie udało mi się ustalić, skąd czerpie on informację,
spod jakiego adresu ma pobrać bajt w sytuacji, gdy nie stoją po
nim żadne argumenty.

Robbo



Re: DDS, pro?ba o wyja?nienie
Quoted text here. Click to load it

Mniej więcej dobrze.

Quoted text here. Click to load it

Z adresu pamieci wskazywanego przez Z.

Poczytaj tutaj:

http://www.avr-asm-tutorial.net/avr_en/beginner/REGISTER.html

Site Timeline