Technika cyfrowa - przetwarzanie analogowo-cyfrowe. Próbkowanie

2011-01-19
Technika cyfrowa - przetwarzanie analogowo-cyfrowe. Próbkowanie

Jak już pisałem w poprzednim, pierwszym artykule z cyklu „Technika cyfrowa”, innym językiem posługujemy się my, a innym komputer. Dla komputera istotnym i rozpoznawalnym jest ciąg zer i jedynek, czyli sygnał cyfrowy. Pierwszym krokiem do przetworzenia „zwykłego” sygnału ciągłego na sygnał cyfrowy jest proces, który nosi nazwę... próbkowanie.

PRÓBKOWANIE

Jest to proces odwracalny (to bardzo istotne stwierdzenie, o  czym powiemy sobie nieco dalej), polegający na zamianie sygnału ciągłego o czasie ciągłym na ciąg próbek odpowiadający wartościom sygnału ciągłego odczytywanych w określonych, z góry ustalonych chwilach czasu. Z matematycznego punktu widzenia sygnał spróbkowany fs(t) jest iloczynem sygnału oryginalnego f(t) i funkcji próbkującej s(t):


W idealnym przypadku pobieranie próbek odbywa się w nieskończenie krótkim okresie czasu. Wtedy funkcja próbkująca ma postać delty δ(t). Natomiast transformata Fouriera (czyli widmo) sygnału spróbkowanego wyraża się wzorem:


Dla tych, którym powyższy wzór mówi tyle, co testament Montezumy w oryginalnej wersji językowej podam, że podstawowemu widmu, które rozciąga się w zakresie od -ωM. do ωM., towarzyszą jego repliki wokół wielokrotności pulsacji próbkowania, co pokazuje rysunek 1. Na rysunku 1a mamy pokazane widmo sygnału ciągłego. Z chwilą kiedy taki sygnał jest reprezentowany poprzez ciąg wartości próbek dyskretnych, jego widmo przyjmuje postać powielaną, taką jak na rysunku 1b. I tak ma się cała sprawa z próbkowaniem, przynajmniej w teorii. Prawda, że proste?

ALIASING

Jak już wspomniałem sygnał spróbkowany jest w 100% odwracalny, pod warunkiem, że nie występują w trakcie przetwarzania błędy. A niestety występują i możemy je podzielić na takie, których możemy się ustrzec i takie, których do końca nie jesteśmy w stanie wyeliminować (możemy je jedynie minimalizować). Do tych pierwszych zaliczyć możemy zjawisko aliasingu. Jeśli zapytamy kogoś „z branży”, co to jest aliasing, to na 90% odpowie, że jest to nakładanie się widm. I jest to fakt bezsporny, co bardzo dobrze uwidacznia się jeśli narysujemy to sobie na wykresie częstotliwościowym. Wiemy już, że próbkowanie powoduje powstawanie kopii widma oddalonych od siebie o odległość równą częstotliwości próbkowania. Jeśli jednak będziemy zmniejszać częstotliwość próbkowania, to w pewnym momencie dojdziemy do takiej sytuacji, w której widma zaczną się stykać ze sobą. Dalsze zaś zmniejszanie tej częstotliwości spowoduje, że widma zaczną nachodzić na siebie, powodując, że w tym zakresie wspólnym nie jesteśmy w stanie określić jaką wartość przyjmie sygnał.

To jest właśnie aliasing, co doskonale widzimy na rysunku 2. Można też na to spojrzeć inaczej, od strony czasowej. Jeśli mamy dane próbki, jak na rysunku 3a, i ktoś poprosi nas o wykreślenie pomiędzy nimi przebiegu sinusoidalnego, to jeden wykreśli przebieg taki, jak narysowany grubszą linią na rysunku 3b, ale ktoś inny może narysować ten przebieg w taki sposób, jak ten linią cieńszą.

Oznacza to, że nie możemy bez niejednoznaczności określić częstotliwości tego przebiegu jedynie na podstawie wartości próbek, bez dodatkowych informacji. To tak jakby ktoś zapytał nas: „jeśli wynikiem dodawania dwóch liczb jest liczba cztery, to jakie są te dwie liczby?” Ile ludzi, tyle może być par tych liczb. Podobnie jest z próbkowaniem. Jeszcze jaśniejsze to się stanie, jeśli wrócimy znów do wykresów w funkcji częstotliwości (rysunek 4) i zobaczymy, że dany ciąg próbek może odpowiadać częstotliwości zarówno 1 kHz albo 7 kHz, ale też i 13 kHz, 19 kHz itd. Aby pozbyć się takich niejednoznaczności, a także uniknąć nakładania się widm, musimy określić jaki zakres częstotliwości nas interesuje, czyli zastosować filtrację dolnoprzepustową.

Filtr taki nosi nazwę filtru antyaliasingowego. Zgodnie więc z twierdzeniem o próbkowaniu, zwanym też twierdzeniem Shanona-Kotielnikowa, częstotliwość próbkowania powinna być co najmniej dwa razy większa od największej składowej widma sygnału przetwarzanego (często mówi się też o tzw. kryterium Nyquista, mówiącym dokładnie to samo). Jeśli więc mamy do przetworzenia sygnał audio w zakresie słyszalnym dla ludzi, czyli w paśmie od 20 Hz do 20 kHz, wystarczy że będziemy próbkować z częstotliwością 40 kHz (ale zawsze lepiej mieć ten margines, żeby widma nie stykały się ze sobą, stąd np. popularna częstotliwość próbkowania fs = 44,1 kHz), pod warunkiem wszakże, że wcześniej zastosujemy filtr antyaliasingowy, obcinający nam pasmo przy 20 kHz. Ktoś mógłby zapytać: po co ten filtr, skoro i tak powyżej tego pasma nie ma nic, co nas interesuje? Owszem, ale trzeba zwrócić uwagę, że próbkowanie powoduje powielanie widma, a więc to, co nawet jest daleko, daleko poza pasmem nas interesującym i tak znajdzie się w paśmie „roboczym”. Ilustruje to rysunek 5.

Aby więc temu zapobiec, należy wykorzystać układ jak na rysunku 6, co uchroni nas przed koniecznością „delektowania” się szumami i innymi nieużytecznymi sygnałami, których przed procesem przetwarzania w sygnale nie było.

INNE BŁĘDY PROCESU PRÓBKOWANIA

Cała teoria próbkowania doskonale się sprawdza jeśli wyjdziemy z  założenia, że czas pobierania próbki jest zerowy, co niestety nie jest zgodne z rzeczywistością. Zatem nie mamy do czynienia z ciągiem impulsów delta o zerowym czasie trwania, tylko z falą prostokątną o niezerowym współczynniku wypełnienia. Na powielenia widma sygnału będzie nakładać nam się widmo okna prostokątnego, które (o czym będzie jeszcze mowa) ma postać funkcji sinc x. To powoduje powstawanie zniekształceń w wynikowym sygnale cyfrowym. Zniekształcenia te nazywa się zniekształceniami apertury (niezerowego czasu pobierania próbki). Skutki tego są, niestety, trudne do wyeliminowania, ponieważ nawet jeśli ograniczymy czas pobierania próbki do minimum, to i tak konieczne jest „zamrożenie” sygnału w fazie pamiętania, co umożliwi prawidłową pracę kwantyzera. Należy więc minimalizować ten czas przetwarzania sygnału przez konwerter analogowo-cyfrowy, a poza tym skutkom tego błędu możemy przeciwdziałać, wprowadzając filtr korygujący zniekształcenia typu sinc x.

Powstawanie i „efekt końcowy” zniekształceń apertury przedstawia Rysunek 7. Innym rodzajem błędów próbkowania jest efekt niestabilności częstotliwości próbkowania, czyli tzw. jitter. W praktycznych układach proces próbkowania jest synchronizowany zegarem kwarcowym, jednakże mogą wystąpić takie sytuacje (jak np. stany przejściowe, związane z konwersją formatów), w których trzeba uwzględnić to zjawisko. Słyszalnym efektem jittera jest wzrost szumów, nawet o kilka dB.

PRÓBKOWANIE SYGNAŁÓW DYSKRETNYCH

Zasadniczo próbkowanie kojarzy się ze zjawiskiem pobierania próbek z sygnału ciągłego w celu przekształcenia go właśnie z sygnału ciągłego w dyskretny. Ale jest to tylko jedno z zastosowań próbkowania. Można, a nawet trzeba, niekiedy przeprowadzić proces próbkowania sygnałów dyskretnych, czyli już wcześniej spróbkowanych. Próbkowanie sygnałów dyskretnych wykorzystuje się np. w celu zwiększenia stosunku sygnał-szum w paśmie użytecznym czy w konwersji standardów (konwersji częstotliwości).

Mówiąc o próbkowaniu sygnałów dyskretnych mamy do czynienia z dwoma przypadkami: pierwszy – gdy nowa częstotliwość próbkująca jest mniejsza od częstotliwości próbkowania sygnału pierwotnego, oraz drugi – gdy nowa częstotliwość jest większa. W pierwszym przypadku mamy do czynienia ze zjawiskiem zwanym decymacją sygnału. Decymacja to nic innego jak zmniejszenie ilości próbek w  ciągu wynikowym. Osiągamy to poprzez próbkowanie sygnału pierwotnego z częstotliwością niższą od pierwotnej, a praktycznie wygląda to tak, że uzyskujemy sygnał w postaci próbek, które są równe próbkom oryginalnego sygnału w chwilach czasu będących wielokrotnościami okresu próbkowania Ts. W pozostałych chwilach czasu sygnał będzie przyjmował wartości zerowe (rysunek 8).

W przypadku decymacji mamy do czynienia ze zmniejszeniem fs, a to pociąga za sobą „przysuwanie” się widm. Musimy więc zwrócić uwagę, aby nie nastąpił aliasing, czyli nie nastąpiło nałożenie się widm. Drugi z omawianych wcześniej przypadków to

INTERPOLACJA SYGNAŁU

która jest wykorzystywana do zwiększenia częstotliwości próbkowania sygnału wynikowego w stosunku do pierwotnego. W praktyce osiąga się to poprzez wstawienie pomiędzy próbki oryginalne próbek zerowych w odstępach równych okresowi próbkowania Ts = 1/fs. Przedstawione jest to na rysunku 9.

Ze zjawiskiem interpolacji sygnału jest ściśle związane zagadnienie zwane

NADPRÓBKOWANIEM

lub, z angielska, oversamplingiem. Jest to taki proces próbkowania sygnałów dyskretnych, w wyniku którego fs >> 2fM, czyli częstotliwość próbkowania znacznie przewyższa górną granicę częstotliwości widma sygnału. Praktycznie wykonuje się to po przetworzeniu sygnału analogowego na cyfrowy (za pomocą standardowego konwertera, np. 44,1 kHz), a następnie poddaniu takiego sygnału dyskretnego interpolacji, czyli wstawieniu próbek zerowych z odpowiednim współczynnikiem interpolacji M. Współczynnik interpolacji mówi nam ile razy zwiększyła się częstotliwość próbkowania w stosunku do pierwotnej, czyli w praktyce liczba M-1 to ilość próbek zerowych wstawionych pomiędzy oryginalnymi. I

tak przykładowo: ośmiokrotny oversampling oznacza ośmiokrotne zwiększenie próbkowania, czyli wstawienie siedmiu próbek zerowych pomiędzy dwie już istniejące. Oczywiście, samo wstawienie próbek zerowych nic nie daje. Należy taki sygnał, ze wstawionymi próbkami zerowymi, „przepuścić” przez filtr interpolacyjny, który dokona właśnie interpolacji, czyli wyliczenia próbek pośrednich pomiędzy tymi, które mamy już dane. Czyli np. sygnał spróbkowany z częstotliwością 44,1 kHz z ośmiokrotnym oversamplingiem będzie miał końcową częstotliwość próbkowania równą 352,8 kHz. Rodzi się pytanie, po co aż tak duże wartości, skoro wystarczy nam spełnienie kryterium Nyquista, ewentualnie z małą nakładką? Jednym z powodów jest złagodzenie wymagań w stosunku do stromości zboczy filtrów dolnoprzepustowych. Jeśli stosujemy nadpróbkowanie widma „odsuwają” się od siebie, dzięki czemu nie musimy stosować trudnego do zrealizowania filtru o niemal prostopadłych zboczach, lecz zastosować taki, który ma o wiele łagodniejsze zbocza, a który nie przysporzy nam tyle problemów przy jego realizacji.

Na rysunku 10a mamy przedstawiony sygnał próbkowany z częstotliwością fs oraz wymagany w takim przypadku filtr dolnoprzepustowy, zaś na rysunku 10b sygnał próbkowany z częstotliwością 4fs (czyli przetworzony z postaci analogowej na cyfrową z częstotliwością fs i poddany czterokrotnemu oversamplingowi) i potrzebny w tym przypadku filtr.

STANDARDY PRÓBKOWANIA

Zasadniczo każdy może sobie próbkować sygnał analogowy z dowolną, odpowiadającą mu częstotliwością próbkowania. Jednakże, jak prawie w każdej dziedzinie, tak i w tej, żeby ułatwić (albo i utrudnić) życie innym wprowadzono pewne standardy dotyczące częstotliwości próbkowania sygnałów, które są respektowane na całym świecie. Na dobór częstotliwości próbkowania mają wpływ m.in. złożoność filtru antyaliasingowego i kompatybilność ze standardami telewizyjnymi i filmowymi Wciąż chyba do najpopularniejszych (co nie znaczy, że najlepszych) należy częstotliwość próbkowania 44,1 kHz. Umożliwia ona uzyskanie pasma użytecznego o szerokości do 20 kHz i daje ok. 10% margines na zbocze filtru antyaliasingowego.

Pytanie, skąd taka dziwna liczba, dlaczego nie np. 44 kHz albo 45 kHz? Otóż swoje źródło ma ona w kodowaniu sygnału TV, związane z wymogiem zgodności z tymi standardami. Obowiązujące na świecie standardy kodowania to NTSC (USA) oraz PAL/SECAM (Europa). Żeby obliczyć częstotliwość próbkowania, trzeba „wrzucić” do wzoru wartość częstotliwości odchylania poziomego, liczbę linii przypadających na ramkę obrazu i liczbę linii dodatkowych w ramce, odpowiednie dla danego standardu TV, a wtedy „wyciągniemy” z owego wzoru takie oto wyniki: częstotliwość próbkowania fs dla systemu NTSC wynoszącą 44,056 kHz, a dla PAL/SECAM – 44,1 kHz. I tak zrodził się nasz „dziwoląg”. Oprócz niej obecnie standardem staje się częstotliwość 48 kHz, coraz częściej wypierana przez standard 96 kHz, a czasem 88,2 kHz. Jadąc „w dół” napotkamy standard 32 kHz oraz niższe częstotliwości, jak np. 22 kHz, 16 kHz czy 8 kHz, dawnej stosowane w telefonii, a obecnie raczej już będące archaizmem.

REKONSTRUKCJA SYGNAŁU SPRÓBKOWANEGO

Teraz spróbujmy sobie odpowiedzieć, co zrobić, żeby sygnał będący ciągiem pojedynczych próbek znów przełożyć na bardziej „jadalny” język, czyli sygnał ciągły. Na początek trzeba dobitnie stwierdzić, że sygnał spróbkowany jest w 100% rekonstruowalny na postać ciągłą, pod tym wszakże warunkiem, że nie występowałyby opisane wcześniej błędy próbkowania. Aby zrekonstruować sygnał z ciągu próbek, wystarczyłoby teoretycznie odfiltrować spróbkowany sygnał za pomocą filtru o charakterystyce równej 1 w paśmie przepustowym oraz 0 poza nim (rysunek 11).

Niestety, taki „prostokątny” filtr nie jest realizowalny praktycznie. Operacja ta spowodowałaby interpolację przebiegu czasowego sygnału w obszarze między próbkami za pomocą funkcji sinc x. Funkcja sinc x jest bardzo ciekawą funkcją, zatrzymajmy się więc na moment nad nią. Funkcja sinc x wyraża się następującym wzorem: sinc x = (sin x)/x „Wygląd” tej funkcji, czyli jej przebieg w dziedzinie czasu, przedstawia rysunek 12a, a jej widmo rysunek 12b.

Zauważmy, że widmem funkcji sinc x jest funkcja prostokątna i odwrotnie, widmem funkcji prostokątnej jest funkcja sinc x. Powróćmy jednak do sedna sprawy, czyli do naszej metody interpolacji. Wykorzystuje ona fakt, że widmo funkcji sinc x jest oknem (inaczej funkcją) prostokątną. Jeśli więc dokonamy operacji splotu naszego przebiegu spróbkowanego z funkcją sinc x, otrzymamy zrekonstruowany sygnał, dokładnie odpowiadający sygnałowi przed próbkowaniem. Na czym polega operacja splotu?

W bardzo dużym skrócie – operacja splotu polega na dodawaniu przemnożonych przez wartość bieżącej próbki i przesuniętych o kolejne okresy próbkowania kopii funkcji sinc ?M, co pokazuje nam rysunek 13, a całą operację „odzyskiwania” sygnału za pomocą tej metody, w funkcji czasu i w funkcji częstotliwości – rysunek 14.

No, i wszystko wydawałoby się „cacy”, gdyby nie to, że funkcja sinc ? M jest funkcją nieprzyczynową, co oznacza, że w praktyce jest ona nierealizowalna (nieprzyczynowość oznacza, że funkcja jest określona przed chwilą t = 0, czyli dla czasu ujemnego, dlatego nie może być zrealizowana). W praktyce więc zastępuje się tę idealną funkcję sinc x funkcją, która jest określona dla czasu t => 0. Pociąga to za sobą powstawanie nieliniowości charakterystyki fazowej, która jednakże może być kompensowana za pomocą specjalnych filtrów wszechprzepustowych. Dodatkowo, na szczęście, te zniekształcenia fazowe nie są wyraźnie słyszalne. Innym „haczkiem”, który powoduje pewne zniekształcenia sygnału wyjściowego z przetwornika cyfrowo-analogowego (który poprzedza nasz filtr rekonstrukcyjny), jest to, że sygnał nie zmienia się skokowo, co powoduje powstawanie charakterystycznych zniekształceń, zwanych efektem Gibbsa. Przejawia się to zafalowaniami w chwili, gdy sygnał gwałtownie zmienia swoją wartość. Poza tym występuje opóźnienie narastania odpowiedzi (rysunek 15).

Efekty te mogą być już bardziej słyszalne, niż zniekształcenia wynikające z nieliniowej charakterystyki fazowej filtru. Aby temu zapobiec, bezpośrednio za konwerterem cyfrowo-analogowym stosuje się dodatkowy układ próbkująco-pamiętający, który pełni rolę bramki impulsowej. Na jego wyjściu otrzymuje się „zregenerowane” impulsy o kształcie prostokątnym.

PODSUMUJMY

Próbkowanie jest to (teoretycznie) odwracalny proces, polegający na pobieraniu w nieskończenie krótkim czasie (znów w teorii) próbek sygnału z określoną częstotliwością. Próbkowanie jest jedną z operacji mających na celu zamianę sygnału analogowego na cyfrowy. Jest ono często poprzedzane filtracją, mającą na celu uniknięcie nakładania się widm, co jest jednym z błędów próbkowania. Nakładanie się widm wynika z niezachowania kryterium Nyquista, mówiącego o tym, że aby sygnał analogowy był spróbkowany bez zniekształceń, wystarczy próbkować go z częstotliwością będącą podwojoną wartością częstotliwości górnej pasma sygnału przetwarzanego.

Inne błędy, jakie występują przy próbkowaniu to: jitter – wynikający z niestabilności zegara taktującego, oraz błąd apertury – spowodowany niezerowym czasem pobierania próbek. Jeśli weźmiemy pod uwagę występujące w procesie błędy, próbkowanie przestaje być w 100% odwracalne, gdyż sygnał „odzyskany”, czyli przetworzony z powrotem na analogowy, nie będzie dokładnie odpowiadał sygnałowi oryginalnemu. Rekonstrukcja sygnału spróbkowanego odbywa się (teoretycznie) poprzez przepuszczenie sygnału przez filtr dolnoprzepustowy, który odfiltruje nam repliki widma sygnału analogowego, powstałe w wyniku spróbkowania tego sygnału. Istnieje również możliwość próbkowania sygnałów dyskretnych oraz konwersja, czyli zamiana częstotliwości próbkowania.

Jan Erhard

 


Autor z wykształcenia jest informatykiem i specjalistą od sieci cyfrowych, zaś z zamiłowania muzykiem. Zajmuje się też realizacją dźwięku, stąd jego zainteresowania i duża wiedza na temat cyfrowego przetwarzania sygnałów.

Estrada i Studio Kursy
Produkcja muzyczna od podstaw
Produkcja muzyczna od podstaw
50.00 zł
Produkcja muzyczna w praktyce
Produkcja muzyczna w praktyce
120.00 zł
Bitwig Studio od podstaw
Bitwig Studio od podstaw
55.00 zł
Sound Forge od podstaw
Sound Forge od podstaw
40.00 zł
Kontakt 5 Kompedium
Kontakt 5 Kompedium
60.00 zł
Zobacz wszystkie
Live Sound & Instalation Newsletter
Krótko i na temat, zawsze najświeższe informacje