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

Podobne dokumenty