Badanie przetworników A/C i C/A
Transkrypt
Badanie przetworników A/C i C/A
POLITECHNIKA WARSZAWSKA INSTYTUT SYSTEMÓW ELEKTRONICZNYCH LABORATORIUM SYSTEMÓW POMIAROWYCH INSTRUKCJA DO ĆWICZENIA NR 9 BADANIE PRZETWORNIKÓW A/C I C/A W ŚRODOWISKU MATLABA Do użytku wewnętrznego opracował dr hab. Konrad HEJN profesor Politechniki Warszawskiej w Instytucie Systemów Elektronicznych ul. Nowowiejska 15/19, 00-665 Warszawa e-mail: [email protected] Warszawa, Marzec 2006 1. Cel ćwiczenia Celem ćwiczenia jest zastosowanie języka MATLAB [MATLAB ’95] do badań charakterystyki kwantowania (ChK) przetwornika analogowo-cyfrowego (PAC) o zadanych parametrach metrologicznych. Zagadnienie takie pojawia się przy tworzeniu biblioteki przetworników emulowanych, wykorzystywanej w pomiarowych przyrządach wirtualnych [HEJN i KONIECZNY ’95, WINIECKI ’97, WINIECKI ’06]. 2. Opis Ćwiczenia Dwie przykładowe ChK idealnego i nasyconego PAC zostały przedstawione na rysunku 1. WY n u Najlepsza linia prosta Idealna ChK Nasycona ChK MAX MIN n(6) 111111 n(5) 011111 n(4) 001111 n(3) 000111 n(2) 000011 n(1) 000001 Numeryczna interpretacja nasyconej ChK: WY n = MIN + Q*sum(n), gdzie: Q = (MAX − MIN)/R i R = 7 000000 MIN q1 q2 q3 q4 q5 WE u q6 MAX Rysunek 1. Charakterystyki statyczne kwantowania idealnego i nasyconego PAC (np. równoległego) o nominalnej rozdzielczości R=7. Dla idealnej statycznej ChK prawdziwe są następujące dwa postulaty [HEJN ’96]: — wartości progów przełączania [...,q1,q2,...] ChK tworzą nieskończony postęp arytmetyczny, co odpowiada kwantowaniu jednorodnemu (lub inaczej równomiernemu), — początek układu współrzędnych “.” ChK należy do linii prostej najlepiej ją aproksymującej: na ogół leży w środku jednego ze “stopni” (ChK typu zaokrąglającego, jak na rysunku), lub w środku jednego z “podstopni” (ChK bez strefy martwej). Przy takich postulatach problem behawioralnego modelu PAC wygląda prosto, bo oznacza odwzorowanie zbioru liczb rzeczywistych na zbiór liczb naturalnych (R ⇒ N ) lub na zbiór liczb całkowitych (n=floor(u)). Niestety świat fizycznych układów elektronicznych jest bardziej złożony. Stąd rzeczywista ChK zwykle słabo przystaje do wymienionych wyżej postulatów. Po pierwsze, ze względu na skończone napięcia zasilające, dyskretne wartości próbek sygnału wejściowego u=[u1,u2,...] powinny należeć do zakresu (MIN,MAX). W przeciwnym wypadku ich wartości będą tłumione (“obcinane”) z powodu nasycania się ChK, rysunek 1. Po drugie, 1 skończone wartości różnicowej (różniczkowej) i sumacyjnej (całkowej) nieliniowości, (odpowiednio dnl=[dnl1,dnl2,...] i inl=[inl1,inl2,...] [SHEINGOLD ’86] powodują, że wartości progów przełączania nie tworzą postępu arytmetycznego — więcej, jeśli any(dnl)>0.5*LSB (angielski akronim od Least Significant Bit), to mogą one nie tworzyć nawet ciągu monotonicznego! Wreszcie po trzecie, początek układu współrzędnych “.” dryfuje (porusza się wolno i przypadkowo) z temperaturą i w czasie wokół “najlepszej” linii prostej — nieraz także bardzo szybko (i równolegle do niej) z powodu celowo wprowadzonego sygnału wybielającego (tzw. ditheru) błąd kwantowania [WINIECKI ’06]. Zatem odpowiedni model behawioralny rzeczywistego PAC okazuje się zadaniem bardziej złożonym, i jak dotychczas, nie do końca rozwiązanym dostatecznie starannie — nawet w profesjonalnych, bardzo drogich narzędziach wspomagających projektowanie układów elektronicznych. 2.1. Środowisko języka MATLAB Celem znalezienia dokładniejszego modelu ChK przyjmiemy, że może być ona opisana następującą sparametryzowaną funkcją wektorową: n = f (q, u) , (1) gdzie wektory u i n reprezentują odpowiednio analogowe wejście i cyfrowe wyjście a parametr q jest dwuwierszową macierzą zawierającą wartości progów przełączania, odpowiednio dla narastających i malejących wartości sygnału na wejściu. W przypadku występowania histerezy komparatorów wartości tych progów będą różne. Zauważmy, że length(n)=length(u), ale prawie nigdy nie jest równa max(size(q))=R-1, gdzie R jest nominalną rozdzielczością symulowanego PAC. Funkcję (1) zaimplementujemy w czterech szczególnych przypadkach, zaczynając od najprostszego a kończąc na najbardziej złożonym: (A) funkcja (1) jest monotoniczna ze względu na u, a parametr q jest wektorem, tzn. statyczna ChK nie ma histerezy (m-file flq), (B) podobnie jak w poprzednim przypadku, ale tym razem parametr q jest macierzą o dwóch wierszach, tzn. uwzględniamy histerezy komparatorów (m-file flh), (C) funkcja (1) jest niemonotoniczna ze względu na u, a parametr q jest wektorem (m-file flqs), (D) podobnie jak w poprzednim przypadku ale z uwzględnionymi histerezami komparatorów (m-file flhs). Takie modułowe i zarazem indukcyjne podejście ułatwia nie tylko zrozumienie wszystkich potrzebnych detali, ale również przyśpiesza proces symulacji ChK w prostszych zastosowaniach. Przypadek (a). Jednoczesne porównywanie wartości kolejnej próbki u(i) analogowego wejścia u ze wszystkimi naraz progami przełączania q=[q1,q2,...] jest istotą działania równoległego PAC. Zatem dla wyjścia n zapisanego w postaci liczby naturalnej mamy: function n=flq(q,u) I=length(u); for i=1:I L=(u(i)>=q); n(i)=sum(L); end % proces porównania % interpretacja wyniku Zauważmy, że dla każdej kolejnej próbki u(i) wynik jednoczesnego porównania jest zapisywany w binarnym wektorze L (w kodzie temperaturowym). M-funkcja flq operuje na dwóch argumentach. 2 Przypadek (b). Tutaj mamy do czynienia nie z jedną, ale z dwoma ChK. Jedna z nich obowiązuje dla narastających, a pozostała dla malejących wartości wejściowego sygnału analogowego u. Jeśli histerezy wszystkich komparatorów są ujemne, to w płaszczyźnie współrzędnych kartezjańskich pierwsza z nich będzie leżała bardziej na prawo od drugiej, rysunek 2. Jeśli natomiast histerezy wszystkich komparatorów są dodatnie (niestabilne progi przełączania), to będziemy mieli do czynienia z sytuacją odwrotną. Jeśli w końcu histerezy komparatorów przyjmują zarówno wartości dodatnie jak i ujemne, to obie omawiane ChK będą się wzajemnie przeplatać. 111111 011111 WY n Rozdzielczosc R = 7 Histereza ujemna h = −4Q Poprzednie wyjscie n0 = 2 001111 000111 n0 = 2 000011 000001 000000 MIN q1 q2 q3 q4 WE u q5 q6 MAX Skladowse ChK Wypadkowa ChK Rysunek 2. Wszystkie sześć komparatorów ma tę samą, ujemną histerezę h=-4Q, gdzie Q=(MAX-MIN)/R jest ziarnem kwantowania (dyskretyzacji osi amplitudy). Tak duża histereza nie występuje w rzeczywistych PAC. Tutaj ułatwia jedynie graficzną interpretację zjawiska. Znak “+” pokazuje początek układu współrzędnych. Należy w tym miejscu przypomnieć, że histereza wymaga zapamiętania wyniku ostatniego przetworzenia. Bieżąca wartość wyjścia cyfrowego n(i) zależy nie tylko od bieżącej wartości wejścia u(i), ale także od poprzedniej wartości wyjścia n(i-1). ChK przestaje być statyczną, a staje się charakterystyką dynamiczną! Dlatego potrzebujemy jeden parametr więcej, to znaczy — wartość początkową n0 określoną dla chwili i-1. Aktualna, wypadkowa ChK składa się bowiem w części z ChK obowiązującej dla sygnału wejściowego narastającego (q(1,:)) a w części z ChK obowiązującej dla sygnału wejściowego malejącego (q(2,:)). Zatem dla każdej chwili czasu wypadkowa ChK będzie inna, a jej ostateczny kształt zależy od pochodnej sygnału wejściowego u. Możemy więc napisać: function n=flh(q,u,n0) I=length(u); R=length(q(1,:))+1; % nominalna rozdzielczość <for i=1:I qq=[q(1,1:n0),q(2,n0+1:R-1)]; % <- <L=(u(i)-qq)>=0; n(i)=sum(L); n0=n(i); % <- <- <end 3 Kod funkcji flh, w porównaniu do kodu funkcji flq, posiada trzy nowe instrukcje (wyróżnione jedną, dwoma i trzema strzałkami). Potrzeba modyfikacji instrukcji wyznaczającej nominalną rozdzielczość ChK wynika z tego, że parametr q jest teraz dwuwierszową matrycą, zawierającą progi przełączania zależne od znaku pochodnej sygnału wejściowego u. Instrukcja oznaczona dwiema strzałkami kreuje wektor qq zawierający już progi przełączania wypadkowej ChK. Obowiązuje ona jedynie dla bieżącej chwili czasu. Instrukcja oznaczona trzema strzałkami uaktualnia wartość początkową n0, co pozwala modyfikować wypadkową ChK przy każdym kolejnym obiegu pętli (lub inaczej, dla każdej nowej wartości próbki sygnału wejściowego). M-funkcja flh operuje na trzech parametrach. Przypadek (c). Niemonotoniczność ChK jest, dla konstruktora elektronicznej aparatury pomiarowej, bardzo kłopotliwą cechą rzeczywistego PAC — w pewnych podzakresach przetwarzania sygnał wyjściowy (a dokładniej liczbowa interpretacja kodu binarnego) może maleć, gdy amplituda sygnału wejściowego wzrasta, rysunek 3. W krańcowych przypadkach niektóre z kodów nigdy nie pojawiają się na wyjściu! Z punktu widzenia naszego dotychczasowego modelu oznacza to, że elementy wektorowego parametru q (wartości progów przełączania ChK) funkcji (1) są niewłaściwie uporządkowane. Główną przyczyną takiego stanu rzeczy są zwykle nadmierne (większe od 0.5) wartości nieliniowości różnicowej dnl. 111111 WY n 011111 001111 000111 000011 000001 000000 MIN q1 q2 q3 q4 WE u q5 q6 MAX Rysunek 3. Niemonotoniczne ChK. W celu większej przejrzystości, aktualne ChK odsunięto w lewo i w prawo o 2Q w stosunku do idealnej, nasyconej ChK. Formalny opis niemonotoniczności ChK jest ryzykownym zajęciem ze względu na brak jednoznaczności pomiędzy wyjściem a wejściem. Bardzo pomocną okaże się w tym przypadku (zob. kod m-funkcji myquant) matlabowska funkcja sort działająca na elementach wektorowego parametru q, bo pozwala na wykorzystanie zaimplementowanej już wcześniej m-funkcji flq, i co przy tym najważniejsze, bez żadnych istotnych jej modyfikacji. M-funkcja [qs,k]=sort(q) porządkuje elementy wektora q w narastającym porządku i jednocześnie zwraca wektor indeksów k, który jest taką permutacją ciągu [1,...,n], że qs = q(k). Ten ślad pozwala odtworzyć pierwotnie istniejącą niemonotoniczność ChK: function n=flqs(qs,u,k) I=length(u); for i=1:I L=(u(i)-qs)>=0; 4 s=sum(L); if s==0 n(i)=0; else n(i)=k(s); end end % % % % % <<<<<- W wektorze L nie ma już na ogół kodu temperaturowego. Jego zawartość można teraz porównać do poprzerywanego słupka rtęci w termometrze. Instrukcja warunkowa if, wyróżniona pojedyńczymi strzałkami, odtwarza kod n(i) ze względu na pierwotnie (to znaczy niemonotonicznie) uporządkowane poziomy przełączania q(i). M-funkcja flqs operuje na trzech argumentach. Przypadek (d). Wprawdzie jest to najbardziej złożony przypadek ze wszystkich trzech dotychczas analizowanych, to jednak jego kod można otrzymać przez proste złożenie fragmentów kodów użytych już w m-funkcjach flh i flqs: function n=flhs(qs,u,n0,k) I=length(u); R=length(qs(1,:))+1; for i=1:I qq=[qs(1,1:n0),qs(2,n0+1:R-1)]; L=(u(i)-qq)>=0; s=sum(L); n0=s; if s==0 n(i)=0; else n(i)=k(s); end end M-funkcja flhs działa na czterech argumentach a jej szczególnymi przypadkami są m-funkcje flq, flh i flqs. 2.2. M-funkcja myquant Wszystkie dotychczas omówione m-funkcje są pomocniczymi dla m-funkcji myquant, którą należy traktować jako behawioralny model równoległego PAC. Jej pełny kod ma następującą postać: function [n,q]=myquant(MIN,MAX,R,d,u,Z,S,dnl,inl,h) % % % % % % % % % MYQUANT symuluje charakterystykę kwantowania przetwornika analogowocyfrowego o zakresie od MIN do MAX i nominalnej rozdzielczości R. Wektory d i u modelują odpowiednio dither i wejściowy sygnał ana logowy. Zwykle są one tej samej długości. W przeciwnym przypadku max(size(d))==1 i charakterystyka kwantowania jest przesunięta w stosunku do początku układu współrzędnych o wartość (MIN-MAX)*d/R w kierunku poziomym oraz o wartość -d w kierunku pionowym [zobacz również IEEE Tran. on I&M, Vol.45, No.1, pp.41-44, Feb. 1996]. 5 % % % % % % % % % % % % % % % % % % % % % % % % % Np.: jeśli R=8 i d=0, to MYQUANT obcina u, natomiast jeśli R=8 i abs(d)=0.5, to MYQUANT zaokrągla u i jednocześnie kreuje błąd systematyczny o wartości równej LSB/2. Skalary Z i S reprezentują odpowiednio błędy zera i wzmocnienia. Nieliniowości dnl, inl i histereza h mogą być zarówno skalarnymi jak i wektorami. Dither i parametry wejściowe od szóstego do ostatniego muszą być deklarowane w jednostkach LSB. Wektor n jest cyfrowym sygnałem wyjściowym. Jeśli h=0, to q jest wektorem o długości R-1 zawierającym wartości progów przełączania charakterystyki kwantowania. Jeśli h~=0 to q jest matrycą o wymiarach 2x(R-1) zawierającą progi przełączania odpowiednio dla narastającego i opadającego analogowego sygnału na wejściu. Funkcja przywołuje: FLQ, FLH, SYMADC, FLQS i FLHS. [n,q]=myquant(MIN,MAX,R,d,u) [n,q]=myquant(MIN,MAX,R,d,u,h) [n,q]=myquant(MIN,MAX,R,d,u,Z,S) [n,q]=myquant(MIN,MAX,R,d,u,Z,S,h) [n,q]=myquant(MIN,MAX,R,d,u,Z,S,dnl,inl] [n,q]=myquant(MIN,MAX,R,d,u,Z,S,dnl,inl,h] if MIN>=MAX, error(’MIN>=MAX ???’), end if (ceil(R)-floor(R))==1|R<1 error(’ROZDZIELCZOŚĆ NOMINALNA POWINNA BYĆ LICZBĄ NATURALNĄ !!!’) end Ld=max(size(d)); Lu=max(size(u)); if ((Ld==Lu)|(Ld==1))==0 error(’WYMIAR DITHERU NIEPRAWIDŁOWY !!!’); end u=u(:)’; d=d(:)’; RANGE=MAX-MIN; Q=RANGE/R; if any(d)==1, u=u-d*Q; end if (max(u)>MAX==1|min(u)<MIN==1)==1 %niezbyt użyteczne w ćwiczeniu disp(’PRZESTEROWANIE NA WEJŚCIU PAC’) end u=(u-MIN)/Q; %wejście w jednostkach równych ziarnu kwantowania Q if Lu==1 u0=u; elseif Lu==2 u0=2*u(1)-u(2); else u0=3*u(1)-3*u(2)+u(3); %ekstrapolacja do tyłu end %u0 jest niezbędne w przypadku komparatorów z histerezą q=1:R-1; % if nargin==5, n=flq(q,u); end % if nargin==6 6 h=-Z(:)’; Lh=max(size(h)); if (Lh~=1)&(Lh~=R-1)==1 error(’WYMIAR HISTEREZY NIEPRAWIDŁOWY !!!’) end if any(h)==0 n=flq(q,u); else n0=flq(q,u0); q=[q-h/2;q+h/2]; n=flh(q,u,n0); end end % if nargin==7 if R==2, q=q+Z; else, q=q-(q-1)/(R-2)*S+Z; end n=flq(q,u); end % if nargin==8 if R==2, q=q+Z; else, q=q-(q-1)/(R-2)*S+Z; end h=-dnl(:)’; Lh=max(size(h)); if (Lh~=1)&(Lh~=R-1)==1 error(’WYMIAR HISTEREZY NIEPRAWIDŁOWY !!!’) end if any(h)==0 n=flq(q,u); else n0=flq(q,u0); q=[q-h/2;q+h/2]; n=flh(q,u,n0); end end % if nargin==9 q=symadc(q,Z,S,dnl,inl); [qs,k]=sort(q); M=max(size(find(diff(qs)==0)))-1; if M~=0, disp(’LICZBA ZGUBIONYCH KODÓW = ’), M, end if any(qs-q)==1, disp(’ChK JEST NIEMONOTONICZNA’), end if qs(1)~=q(1), disp(’ZEROWANIE ChK JEST NIEMOŻLIWE’), end if qs(R-1)~=q(R-1), disp(’SKALOWANIE ChK JEST NIEMOŻLIWE’), end n=flqs(qs,u,k); end % if nargin==10 h=-h(:)’; Lh=max(size(h)); if (Lh~=1)&(Lh~=R-1)==1 error(’WYMIAR HISTEREZY NIEPRAWIDŁOWY !!!’) end if Lh==1, h=ones(1,max(size(q)))*h; end q=symadc(q,Z,S,dnl,inl); [qs,k]=sort(q); n0=flqs(qs,u0,k); q=q-h/2; [qs,k]=sort(q); qs=[qs;qs+h(k)]; q=[q;q+h]; 7 if any(h)==0, q=q(1,:); end n=flhs(qs,u,n0,k); end % q=MIN+Q*q; n=n-R/2+0.5; n=n+d; Zauważmy, że dane wejściowe do m-funkcji myquant są najpierw sprawdzane nie tylko ze względu na dopuszczalny zakres zmienności oraz poprawność formatu, ale także ze względu na ich fizyczny sens. Pozwala to uniknąć większości najczęściej pojawiających się błędów. Sposób przywołania m-funkcji myquant zależy od liczby parametrów zdefiniowanych w konkretnej aplikacji. Im więcej parametrów tym wolniejsze wykonanie m-funkcji myquant. Ze względu na długie rekordy symulowanych sygnałów (np. max(size(uu))=60000), m-funkcje flq (Przypadek (a)), flh (Przypadek (b)), flqs (Przypadek (c)) i flhs (Przypadek (d)) muszą korzystać z instrukcji pętli for, która jest względnie wolna. MATLAB jest interpreterem i stąd koszt wykonania pętli jest większy w porównaniu do kosztu wykonania jej wnętrza. Problem ten został rozwiązany przez zakodowanie wszystkich pętli w języku C a następnie przez wygenerowanie czterech dll-funkcji dla m-funkcji flq, flh, flqs, flhs. Z dotychczasowych doświadczeń wynika, że stosowanie dll-funkcji rzeczywiście zmniejsza czas symulacji. W nowej wersji języka MATLAB (dobrze już optymalizowanej) zmiana ta jest jednak niewielka, rzędu −10%. W trakcie symulacji, funkcje z rozszerzeniem dll, przywoływane są w pierwszej kolejności (domyślnie). W starszych wersjach MATLABA podobną rolę pełniły funkcje z rozszerzeniem mex, a przyśpieszenie symulacji było znacznie wyraźniejsze (np. dziesięciokrotne). Pamiętajmy, że do badania histerezy komparatorów musimy stosować wejściowy sygnał testujący, który na jednym fragmencie osi czasu narasta a na drugim fragmencie maleje. Sygnał o stałym znaku pochodnej nie wykrywa zjawiska histerezy! M-funkcja myquant przywołuje również m-funkcję symadc. Jest ona omówiona w następnym podpunkcie. Podobnie osobny podpunkt poświęcono sygnałowi wybielającemu d (ditherowi), jako szczególnie istotnemu we współczesnej technice przetwarzania analogowo-cyfrowego. 2.2.1. M-funkcja symadc M-funkcja symadc modyfikuje wartości progów przełączania ChK rzeczywistego PAC (parametr q) w zależności od zadeklarowanych przez użytkownika: błędów zera Z, wzmocnienia S, nieliniowości różnicowej dnl i nieliniowości sumacyjnej inl. Pełny kod m-funkcji symadc ma następującą postać: function q=symadc(q,Z,S,dnl,inl) % % % % % % SYMADC modyfikuje progi przełączania q charakterystyki kwantowania idealnego przetwornika analogowo-cyfrowego ze względu na deklarowane przez użytkownika: błędy zera Z i wzmocnienia S, oraz nieliniowości różnicowej dnl i sumacyjnej inl. q=symadc(q,Z,S,dnl,inl) R=max(size(q))+1; if (any(dnl)|any(inl))==0 if R==2, q=q+Z; else, q=q-(q-1)/(R-2)*S+Z; end return end AS=abs(S); AZ=abs(Z); 8 if (AS>0)&(AS<R)&(R>2)==1, q=q-(q-1)/(R-2)*S; end %błąd wzmocnienia if (AZ>0)&(AZ<R)==1, q=q+Z; end %błąd zera % Ld=max(size(dnl)); if Ld==1 q=q+dnl*(rand(size(q))-.5); else if R-Ld-1~=0 error(’NIEPRAWIDŁOWY WYMIAR NIELINIOWOŚCI RÓŻNICOWEJ !!!’) elseif abs(sum(dnl(:)))>10*log(R) error(’NIEPRAWIDŁOWE WARTOŚCI NIELINIOWOŚCI RÓŻNICOWYCH !!!’) else dnl=dnl(:)’; q=q+cumsum(dnl(1:R-1)); end end % Li=max(size(inl)); if Li==1 r=1:R-1; q=q-4*inl/(R-1)/(R-1)*((r-1).*(r-(R-1))); else if R-Li-1~=0 error(’NIEPRAWIDŁOWY WYMIAR NIELINIOWOŚCI SUMACYJNEJ !!!’) elseif abs(inl(1))>1/R error(’NIEPRAWIDŁOWE WARTOŚCI NIELINIOWOŚCI SUMACYJNYCH !!!’) else inl=inl(:)’; q=q+inl(2:R); end end % q=q+(1-q(1))+Z; %zerowanie, punkt (MIN+Q,1) q=1+(q-1)*(R-2+Z)/(q(R-1)-1); %skalowanie, punkt (MAX-Q,R-1) end Warto podkreślić, że jeśli istnieje potrzeba przystosowania m-funkcji myquant do specyficznego zadania (np. symulacji nieliniowych PAC), to m-funkcja symadc jest najlepszym miejscem, w którym można to zrobić bezpiecznie. Warto w tym miejscu podkreślić, że implementacja nieliniowości różnicowej dnl lub sumacyjnej inl powoduje na ogół rozkalibrowanie charakterystyki kwantowania. Zjawisku temu zapobiegają dwie ostatnie instrukcje, przywracające jej prawidłowe skalibrowanie. 2.2.2. Wybielanie szumu kwantowania W przetwornikach analogowo-cyfrowych z nadpróbkowaniem istnieje potencjalna możliwość zwiększenia ich efektywnej rozdzielczości za pomocą uśredniania na wyjściu kolejnych N wyników przetworzeń. Takie uśrednianie jest skuteczne, gdy kolejne wyniki przetwarzania są statystycznie niezależne. Stąd potrzeba wybielenie szumu kwantowania polegająca na wprowadzeniu na wejście analogowe dodatkowego sygnału nazywanego ditterem (nie mylić ze zjawiskiem jitteru). Dither d jest białym szumem (nieskorelowanym z analogowym wejściem u i o symetrycznym rozkładzie gęstości amplitudy) dodawanym do analogowego sygnału wejściowego u 9 i jednocześnie odejmowanym od cyfrowego sygnału wyjściowego n (lub odwrotnie). W sensie geometrycznym oznacza to (patrz rysunek 1), że początek układu współrzędnych “.” porusza się losowo w stosunku do ChK — mówiąc dokładniej wzdłuż najlepiej ją aproksymującej linii prostej. Jeśli rozkład gęstości amplitudy ditheru jest idealnie symetryczny (konkretne realizacje gwarantują to tylko w przybliżeniu!), można pominąć odejmowanie/dodawanie ditheru na wyjściu cyfrowym. d MIN−MAX R u P + PAC P − n Rysunek 4. Wtrącenie ditheru (sygnału wybielającego) w układ PAC. Symulacja ditheru — gdy mamy do dyspozycji generator liczb pseudolosowych — jest bardzo prosta i ogranicza się tylko do dodania jednego parametru (ditheru d oraz kilku instrukcji do kodu m-funkcji myquant: function [n,q]= : if any(d)==1 u=u-Q*d; end : n=n+d; myquant(MIN,MAX,R,d,u,Z,S,dnl,inl,h) % ciało m-funkcji myquant % Q=(MAX-MIN)/R jest nominalnym ziarnem ChK % ciało m-funkcji myquant % ostatnia instrukcja M-funkcji myquant Jeśli sygnał wybielający (dither) jest prawidłowo wybrany a czas przetwarzania nie jest krytycznym parametrem (duży współczynnik nadpróbkowania N), to teoretycznie możemy dowolnie zwiększyć skuteczną rozdzielczość PAC. Zauważmy jednak, że dither — a wielkosygnałowy dither w szczególności — wymaga większej dopuszczalnej dynamiki zmian sygnału na wejściu PAC. Obok wydłużenia czasu przetwarzania jest to cena jaką musimy zapłacić za zwiększenie skutecznej rozdzielczości PAC. Jeśli length(d)=1 (dither jest skalarem), to mamy do czynienia z pewnym szczególnym ale ważnym przypadkiem. M-funkcja myquant jest tak skonstruowana, że pozwala przesuwać początek układu współrzędnych “*” (analogowego sygnału wejściowego) równolegle do linii prostej najlepiej aproksymującej ChK. W przypadku idealnej ChK, będzie on do tej linii należał. Początek układu współrzędnych “*” znajdzie się w środku stopnia dla parzystych nominalnych rozdzielczości R i skalarnego ditheru d=0, albo dla nieparzystych nominalnych rozdzielczości R i abs(d)=0.5 (tzw. zaokrąglająca ChK). Z drugiej strony, początek układu współrzędnych “*” zostanie umiejscowiony w środku podstopnia dla nieparzystych nominalnych rozdzielczości R i skalarnego ditheru d=0 albo parzystych nominalnych rozdzielczości R i abs(d)=0.5 (tzw. ChK bez strefy martwej). Dla 0<abs(d)<0.5 można uzyskać dowolne położenie początku układu współrzędnych “*” na linii prostej najlepiej aproksymującej ChK [HEJN i PACUT ’96]. 10 3. Zadania do wykonania Każdy ze studentów powinien zasymulować w środowisku języka MATLAB kilka ChK rzeczywistego PAC. Wartości rozdzielczości nominalnej R jak i pozostałych parametrów należy uzgodnić z prowadzącym ćwiczenie. Zalecane jest sprawdzenie wpływu sygnału wybielającego na ChK. Należy przy tym pamiętać, że zwiększenie rozdzielczości możliwe jest jedynie przez uśrednianie próbek (na przykład dla N=32), czyli dla przetworników z nadpróbkowaniem! Kody m-funkcji myquant i przez nią przywoływanych m-funkcji symadc oraz 4-ech dll-funkcji (flq, flh, flqs, flhs) znajdują się w katalogu \\DIODA\SYS\SPOM. Poprawnie wykonane ćwiczenie powinno zakończyć się wykresami podobnymi do tych, jakie zostały przedstawione na Rys. 5. (a) (b) 8 8 6 6 4 4 2 2 0 0 −2 −2 −4 −4 −6 −6 −8 −1.5 −1 −0.5 0 0.5 1 1.5 −8 −1.5 −1 −0.5 (c) 8 6 6 4 4 2 2 0 0 −2 −2 −4 −4 −6 −6 −1 −0.5 0 0.5 1 1.5 −8 −1.5 −1 −0.5 (e) 8 6 6 4 4 2 2 0 0 −2 −2 −4 −4 −6 −6 −1 −0.5 1 1.5 0 0.5 1 1.5 0 0.5 1 1.5 (f) 8 −8 −1.5 0.5 (d) 8 −8 −1.5 0 0 0.5 1 1.5 −8 −1.5 −1 −0.5 Rysunek 5. ChK otrzymane w wyniku wywoływania przykładowego skryptu doeg95. Wartości parametrów m-funkcji myquant są następujące: (a) Z=[-3, 0, 3], dnl=[0.4, 0, 1.6]; (b) Z=[-2, 0, 2], S=[-2, 0, 2], inl=[-2, 0, 2]; (c) Z=[-3, 0, 3], d=a*randn(size(u)), a=[0.1, 0, 0.5], N=32; (d) Z=[-2, 0, 2], S=[-2, 0, 2], inl=[-2, 0, 2], h=[-0.25, 0, 0.25]; (e) Z=[-3, 0, 3], dnl=[0.4, 0, 1.6], d=a*(randn(size(u)), a=[0.5, 0, 0.5], N=32; (f) Z=[-2, 0, 2], S=[-2, 0, 2], inl=[-2, 0, 2], dnl=[0.4, 0, 1.6], h=[-0.25, 0, -0.25]. 11 Literatura [WINIECKI ’06] [HEJN ’05a] [HEJN i KONIECZNY ’95] [HEJN i PACUT ’96] [HEJN ’96] [MATLAB ’95] [SHEINGOLD ’86] [WINIECKI ’97] WINIECKI W.: Systemy Pomiarowo-Kontrolne. Wykład, ISE PW, Warszawa 2006. HEJN K.: Przetworniki emulowane a pomiarowe przyrządy wirtualne. Zeszyty Naukowe Politechniki Śląskiej, Elektryka z.195, str. 27–39, Maj 2005. HEJN K.: Przetworniki emulowane i przyrządy wirtualne. Prace PIE, Rok XXXVI, str. 18–44, Warszawa 1995. HEJN K., PACUT A.: Generalized Model of the Quantization Error — A Unified Approach. IEEE Trans. on I&M, Vol.45, No.1, pp.41–44, February 1996. HEJN K.: A Behavioural Model of a Fast AD Converter. Proceedings of International Workshop on ADC MODELLING, pp.28–37, IMEKO TC-4, House of Scientists, Smolenice Castle, Slovak Republic, May 7–9, 1996. MATLAB — The Student Edition, Prentice Hall, 1995. SHEINGOLD H.: Analog-Digital Conversion Handbook. Englewood Cliffs, Prentice Hall, 1986. WINIECKI W.: Organizacja komputerowych systemów pomiarowych, Oficyna Wydawnicza PW, 1997. 12