Ćwiczenie 3 - Teleinformatyk
Transkrypt
Ćwiczenie 3 - Teleinformatyk
Zespół Szkół Technicznych w Suwałkach Pracownia Sieci Teleinformatycznych Ćwiczenie Nr 3 PRZETWARZANIE ANALOGOWO-CYFROWE I CYFROWOANALOGOWE Opracował Sławomir Zieliński Suwałki 2012 Cel ćwiczenia Utrwalanie wiadomości na temat przetwarzania analogowo-cyfrowego i cyfrowo-analogowego. Niniejsze ćwiczenie oparte jest na darmowym środowisku programistycznym GNU Octave [1]. Zadania 1. Korzystając z notatek z przedmiotu przetwarzanie i obróbka sygnałów, biblioteczki zawodowej lub z zasobów internetowych wykonaj następujące polecenia: a. Naszkicuj schemat blokowy typowego przetwornika A/C zawierający takie podzespoły jak filtr anty-aliasingowy, koder, kwantyzer i układ próbkująco-pamiętający. b. Wskaż, który z wyżej wymienionych podzespołów jest podzespołem stratnym, a który bezstratnym. Odpowiedź uzasadnij. 2. Wyjaśnij, na czym polega warunek Nyquista i jakie są jego techniczne konsekwencje przy doborze parametrów pracy przetwornika A/C. 3. Wyjaśnij, do jakiego celu używany jest filtr anty-aliasingowy. Naszkicuj przykład jego charakterystyki częstotliwościowej. 4. Korzystając z notatek z przedmiotu przetwarzanie dźwięku i obrazu wyjaśnij, na czym polega zjawisko aliasingu, a następnie sporządź wykres ilustrujący zjawisko niejednoznaczności próbkowania (aliasingu) w dziedzinie czasu. 5. Zainstaluj, a następnie uruchom program GNU Octave, zgodnie ze wskazówkami zawartymi w ćwiczeniu na temat modulacji AM oraz FM. Następnie uruchom program o następującym kodzie: Fs = 48000; Fs2 = 550; % Czestotliwosc probkowania [Hz] t = 0: 1/Fs: 0.02; t2 = 0: 1/Fs2: 0.02; f1 = 440; % Czestotliwosc sygnalu probkowanego [Hz] f2 = 110; y1 = sin(2*pi*f1*t); y2 = -sin(2*pi*f2*t); y12 = sin(2*pi*f1*t2); plot(t, y1,’b’,t,y2,’r’,’linewidth’,3); hold on stem(t2,y12,’r’); hold off xlabel(‘Czas [sek.]’); ylabel(‘Amplituda’) Program ten wygeneruje wykres ilustrujący zjawisko aliasignu w dziedzinie czasu. Wygenerowany wykres (patrz Rys. 1) przedstawia kolorem niebieskim przebieg czasowy analogowego sygnału sinusoidalnego o częstotliwości 440 Hz. Sygnał ten po spróbkowaniu z częstotliwością 550 Hz może być niejednoznacznie odtworzony jako sygnał sinusoidalny o częstotliwości 110 Hz, co przedstawia wykres czerwony. str. 2 Rys. 1. Ilustracja zjawiska niejednoznaczności próbkowania (aliasingu) w dziedzinie czasu. Dokonaj zrzutu z ekranu uzyskanego wykresu, a następnie zapisz go w pliku tekstowym w edytorze tekstu (np. MS Word). Następnie opatrz go odpowiednim komentarzem. Na przykład napisz, co oznacza krzywa niebieska, krzywa czerwona, pionowe kreski z czerwonymi kółkami. Swoimi słowami wyjaśnij, co ilustruje niniejszy wykres. 6. Pewien sygnał zawierający dwie składowe sinusoidalne o jednakowej amplitudzie oraz o częstotliwościach wynoszących odpowiednio 1 i 3 kHz został spróbkowany z częstotliwością wynoszącą 5 kHz. Korzystając z notatek z przedmiotu przetwarzanie i obróbka sygnałów sporządź wykresy przedstawiające: a. widmo częstotliwościowe sygnału oryginalnego, b. widmo częstotliwościowe sygnału spróbkowanego, c. charakterystykę częstotliwościową filtru rekonstrukcyjnego, d. widmo sygnału zrekonstruowanego. W zadaniu tym należy założyć, że filtr rekonstrukcyjny posiada idealną charakterystykę dolnoprzepustową o częstotliwości odcięcia równej częstotliwości Nyquista oraz o jednostkowym wzmocnieniu. Opisz podobieństwa i ewentualne różnice pomiędzy widmami sygnału oryginalnego i zrekonstruowanego. W przypadku wystąpienia różnic podaj, co mogło być ich przyczyną. 7. Dany jest sygnał sinusoidalny o częstotliwości 10 kHz. Sygnał ten został spróbkowany, a następnie zrekonstruowany przy użyciu filtru posiadającego idealną charakterystykę dolnoprzepustową o częstotliwości odcięcia równej częstotliwości Nyquista oraz o jednostkowym str. 3 wzmocnieniu. Naszkicuj w sprawozdaniu widma sygnału zrekonstruowanego dla przypadków, gdy częstotliwość próbkowania wynosiła: a. fp = 48000 Hz b. fp = 22000 Hz c. fp = 18000Hz d. fp = 12000 Hz Napisz, w którym przypadku można zaobserwować zjawisko aliasingu oraz w jaki sposób zjawisko to się zamanifestowało. 8. Wykorzystując program o poniższym kodzie zweryfikuj poprawność wykresów sporządzonych ręcznie w zadaniu poprzednim. Fs = 48000; % Czestotliwosc probkowania [Hz] f = 10000; % Czestotliwosc sygnalu [Hz] t = 0: 1/Fs: 2^16/f; y = sin(2*pi*f*t); N = length(y) w = window(@kaiser,N); Widmo = fft(y.*w'); f=Fs*(0:(N/2))/N; n=length(f); M = 20*log10(abs(Widmo)); plot(f,abs(M(1:n))) xlabel('Czestotliwosc [Hz]'); ylabel('Magnituda [dB]'); grid on Powyższy program umożliwia wykreślenie zrekonstruowanego widma sygnału sinusoidalnego, co przedstawia rysunek 2. Rysunek ten przedstawia zrekonstruowane widmo sygnału sinusoidalnego o częstotliwości 10 kHz spróbkowanego z częstotliwości 48 kHz. W celu zmiany częstotliwości próbkowania i częstotliwości sygnału próbkowanego należy odpowiednio zmodyfikować pierwszą i drugą linię powyższego kodu. Uzyskane widma częstotliwościowe dla częstotliwości próbkowania z poprzedniego zadania należy dołączyć w postaci zrzutów z ekranu do wcześniej utworzonego pliku tekstowego. Każdy ze zrzutów powinien być opisany tak, aby wiadomo było, co on przedstawia. Opisz w sprawozdaniu podobieństwa i różnice widm częstotliwościowych wykreślonych ręcznie w poprzednim zadaniu oraz wygenerowanych komputerowo w zadaniu bieżącym. str. 4 Rys. 2. Przykład widma częstotliwościowego sygnału sinusoidalnego o częstotliwości 10 kHz spróbkowanego z częstotliwością 48 kHz. 9. Zjawisko aliasingu w dziedzinie częstotliwości może również być zilustrowane przy pomocy programu o poniższym kodzie: Fs = 48000; t = 0: 1/Fs: 1; fmax = 10000; % Czestotliwosc maksymalna [Hz] y = chirp(t,0,1,fmax); specgram(y,512,Fs,kaiser(256,5),220) Program ten generuje sygnał kosinusoidalny o częstotliwości płynnie zmieniającej się w czasie, począwszy od 0 Hz, a skończywszy na częstotliwości maksymalnej fmax. Następnie program dokonuje widmowej analizy spektrograficznej wygenerowanego sygnału. Czas generowanego sygnału wynosi 1 sekundę. Przy poprawnym uruchomieniu programu na ekranie komputera powinien pojawić się wykres przedstawiony na rysunku 3. Rysunek ten przedstawia spektrogram sygnału kosinusoidalnego, którego częstotliwość płynnie zmienia się od 0 do 10 kHz wciągu 1 sekundy. Oś pozioma wykresu reprezentuje czas w sekundach, oś pionowa częstotliwość w hercach, natomiast kolor reprezentuje energię sygnału. str. 5 Rys.3. Spektrogram sygnału kosinusoidalnego, którego częstotliwość wciągu 1 sekundy zmienia się od 0 do 10 kHz. Zmodyfikuj powyższy program zmieniając częstotliwość maksymalną z 10 do 15 kHz, a następnie uruchom program. Wygenerowany rysunek w postaci zrzutu z ekranu dodaj do uprzednio utworzonego dokumentu tekstowego, opatrując go odpowiednimi komentarzami. 10. Zmodyfikuj powyższy program w ten sposób, aby częstotliwość maksymalna na końcu generowanego sygnału wynosiła odpowiednio: a. fmax = 20 kHz, b. fmax = 25 kHz, c. fmax = 30 kHz, d. fmax = 40 kHz. Dla każdego z powyższych przypadków wygeneruj spektrogram i dołącz go do uprzednio utworzonego dokumentu, dodając do każdego z wykresów odpowiednie opisy. Zapisz sprawozdaniu, który z wykresów ilustruje zjawisko aliasingu. Zapisz również, w jaki sposób zjawisko to się zamanifestowało. 11. Wyjaśnij w sprawozdaniu, co jest zadaniem kwantyzera. 12. Sporządź charakterystykę wejściowo-wyjściową kwantyzera o rozdzielczości: a. 2-bitowej, b. 3-bitowej. str. 6 Oś pozioma powinna przedstawiać wartości sygnału na wejściu kwantyzera, natomiast oś pionowa powinna reprezentować wartości na jego wyjściu. 13. Przy użyciu poniższego kodu zweryfikuj poprawność wykresów kwantyzera sporządzonych w zadaniu poprzednim. Kod ten umożliwia wygenerowanie charakterystyki przejściowej kwantyzera o zadanej rozdzielczości bitowej. Dla przykładu, rysunek 4 przedstawia charakterystykę kwantyzera o rozdzielczości 4-bitowej. x = -1: 0.0001: 1; y = q(x, 4); plot(x, y, 'LineWidth', 2); xlabel('Sygnal wejsciowy') ylabel('Sygnal wyjsciowy') grid on Rys. 4. Charakterystyka przejściowa 4-bitowego kwantyzera. Uwaga! Dla poprawnej pracy powyższego programu należy w katalogu roboczym zapisać funkcję o nazwie q.m zawierającą następujący kod: function y = q(x, bits) x = x / 2 + 0.5; str. 7 b = 2^bits-1; y = round(x*b)/b; y = 2 * (y - 0.5); W tym celu należy w edytorze tekstu skopiować powyższy kod do nowego pliku i zapisać go w katalogu roboczym programu Octave pod nazwą q.m Uzyskane w niniejszym zadaniu wykresy reprezentujące charakterystyki przejściowe 2-bitowego i 3-bitowego kwantyzera należy w postaci odpowiednich zrzutów z ekranu zapisać w uprzednio utworzonym dokumencie, opatrując je odpowiednimi informacjami. Opisać w sprawozdaniu podobieństwa i różnice pomiędzy charakterystykami kwantyzerów naszkicowanymi ręcznie w zadaniu poprzednim i charakterystykami uzyskanymi w zadaniu niniejszym. 14. Poniższy kod programu umożliwia symulację pracy kwantyzera o zadanej rozdzielczości bitowej. Przykładowo, rysunek 5 przedstawia działanie kwantyzera o rozdzielczości 2-bitowej. Wykres górny reprezentuje analogowy sygnał podany na wejście kwantyzera x, wykres środkowy przedstawia sygnał na wyjściu kwantyzera y, natomiast wykres dolny reprezentuje sygnał błędu, czyli różnicę (x – y) pomiędzy sygnałem analogowym a sygnałem skwantowanym. Błędy te pojawiające się w czasie trwania sygnału określane są mianem szumów kwantyzacji. B = 2; % Rozdzielczosc bitowa kwantyzera [bit] Fs = 50000; % Czestotliwosc probkowania [Hz] t = 0: 1/Fs: 0.002; f = 1000; % Czesotliwosc sygnalu [Hz] y = sin(2*pi*f*t); yq = q(y, B); e = y - yq; subplot(3,1,1); fplot (@sin, [0, 4*pi]); axis ([0 4*pi -1 1]); legend (''); axis("labely","tic"); ylabel('Sygnal analogowy') subplot(3,1,2); stem(t,yq,'markersize',3); ylabel('Sygnal skwantowany') subplot(3,1,3); stem(t,e,'markersize',3); ylabel('Szum kwantyzacji') axis ([0 0.002 -1 1]); xlabel('Czas [sek.]') str. 8 Rys. 5. Przykład działania 2-bitowego kwantyzera. Przy użyciu powyższego kodu dokonaj symulacji pracy kwantyzera o rozdzielczości: a. 2-bitowej, b. 3-bitowej, c. 4-bitowej, d. 16-bitowej. Pozostałe parametry symulacji, czyli częstotliwość sygnału (1000 Hz) oraz częstotliwość próbkowania (50 kHz), pozostawić niezmienione zgodnie z oryginalnymi wartościami w kodzie programu. Wykonać zrzuty z ekranu dla każdego z badanych przypadków i dołączyć do uprzednio sporządzonego dokumentu. W sprawozdaniu zapisać wniosek płynący z przeprowadzonych symulacji. str. 9 15. Korzystając z kodu programu z poprzedniego zadania dla kwantyzera posiadającego 2-bitową rozdzielczość wygenerować sygnały dla następujących częstotliwości próbkowania: a. fp = 10 kHz, b. fp = 100 kHz, c. fp = 500 kHz, d. fp = 1 MHz. Częstotliwość kwantowanego sygnału powinna w każdym przypadku wynosić 1000 Hz (oryginalna wartość w kodzie programu). Uzyskane wykresy w postaci zrzutów z ekranu dołączyć do uprzednio utworzonego dokumentu opatrując je odpowiednimi informacjami. W sprawozdaniu zapisać na podstawie uzyskanych wykresów, czy prawdziwe jest następujące stwierdzenie: „Zwiększanie częstotliwości próbkowania polepsza dokładność kwantowanego sygnału”. 16. Dokument zawierający zrzuty z ekranu uzyskane podczas dzisiejszych zajęć zademonstrować nauczycielowi prowadzącemu zajęcia. 17. Korzystając z notatek z przedmiotu przetwarzanie i obróbka sygnałów, biblioteczki zawodowej lub z zasobów internetowych zapisz w sprawozdaniu wzór określający stosunek sygnału do szumu kwantyzacji SNR w zależności od rozdzielczości bitowej kwantyzera. Podać źródło informacji. Na podstawie zapisanego wzoru określ stosunek sygnału do szumu dla kwantyzerów o rozdzielczości bitowej wynoszącej odpowiednio: a) b) c) d) 4 bity, 8 bitów, 16 bitów, 24 bity. Napisz w sprawozdaniu, który z powyższych kwantyzerów jest lepszy i dlaczego. Opracowanie Odpowiedzi do powyższych pytań oraz wyniki badań wraz z ich opisem należy przekazać prowadzącemu w postaci pisemnego sprawozdania na zakończenie danego ćwiczenia. Literatura [1] GNU Octave, http://www.gnu.org/software/octave/ , data dostępu: wrzesień 2012. str. 10