Katedra Elektrotechniki Teoretycznej i Informatyki
Transkrypt
Katedra Elektrotechniki Teoretycznej i Informatyki
Katedra Elektrotechniki Teoretycznej i Informatyki Przedmiot: Zintegrowane Pakiety Obliczeniowe W Zastosowaniach InŜynierskich Numer ćwiczenia: 7 Temat: Wprowadzenie do Signal Processing Toolbox 1. PRÓBKOWANIE I KWANTYZACJA Sygnał analogowy o częstotliwości f: x ( t ) = A sin( 2 π ft ) jest próbkowany z częstotliwością fs (na rys. fs = 16*f; K = 16; f = 1 kHz; A = 1): x ( n ) = A sin( 2 π fnt s ) . Czas rzeczywisty (ciągły) został zamieniony na czas dyskretny, określany przez zmienną indeksową n: x (t ) → x ( n ) t → nts n = 0,1,2, K N − 1 Sygnał y(n) przedstawiony jest za pomocą prąŜków. Aby informacja mogła być poprawnie odtworzona, minimalna częstotliwość próbkowania sygnału musi być przynajmniej dwukrotnie większa od najwyŜszej częstotliwości składowej w sygnale: f s ≥ 2 f max f max - maksymalna częstotliwość w sygnale. 1 Wizualizacja procesu próbkowania przedstawiona jest w skrypcie probkowanie.m: clear all fs=16000; % częstotliwość próbkowania f=1000; % częstotliwość sygnału ts=1/fs; % odstęp próbkowania K=fs/f; % ilość próbek na okres K*ts = T lT=8; % liczba generowanych okresów pT=2; % liczba pokazywanych okresów pT <= lT n=1:K*lT; t=0:0.01/f:(1/f)*lT; % wygenerowanie lT okresów czasu (100 punktów/okres) x=sin(2*pi*f*t); % sygnał ciągły xs=sin(2*pi*f*n*ts); % sygnał próbkowany (K próbek/okres) figure hold on plot(t,x,'k') % wykres sygnału ciągłego w dziedzinie czasu stem(n*ts,xs,'r') % wykres sygnału próbkowanego w dziedzinie czasu axis([0,(1/f)*pT,-1.5,1.5]) xlabel('Czas t [s]'); hold off Sinusoida f=1kHz próbkowana jest częstotliwością fs=16kHz. Na podstawie skryptu naleŜy: 1. sprawdzić jak częstotliwość próbkowania fs wpływa na odwzorowanie sygnału podczas próbkowania (dla fs=550, 1050, 2000, 2050, 8000, 16000 Hz). 2. określić, dlaczego dla fs=2000 (fs równe dokładnie dwukrotnej częstotliwości sygnału) sygnał próbkowany nie występuje, co naleŜy zrobić aby to zmienić? Aby sygnał mógł być przetwarzany przez układy cyfrowe, oprócz dyskretyzacji w dziedzinie czasu, musi być dokonana dyskretyzacja wartości sygnału (sprowadzenie wartości sygnału do zbioru skończonego). W wyniku tego działania powstają błędy kwantyzacji, których wielkość zaleŜna jest od ilości przedziałów, na które podzielony został zakres sygnału. Przykładem procesu kwantyzacji jest funkcja kwantyzuj. Dzieli ona zakres wartości danego sygnału na 2^bit przedziały (bit – ilość bitów przetwornika AC). Wartości kaŜdej z próbek przyporządkowuje wartość środkową z przedziału, w którym się zawiera. Wywołanie tej funkcji wygląda następująco: sygnal_wyjsciowy = kwantyzuj (ilosc_bitów_przetwornika_AC, sygnal_wejsciowy). 2. DYSKRETNA TRANSFORMATA FOURIERA Analiza i przetwarzanie sygnałów wymaga znajomości reprezentacji sygnału nie tylko w dziedzinie czasu, ale i w dziedzinie częstotliwości. Przejście pomiędzy tymi dziedzinami moŜliwe jest dzięki transformacie Fouriera (t->f) i odwrotnej transformacie Fouriera (f->t). Transformata Fouriera dla funkcji ciągłych wyraŜa się następującą zaleŜnością: X ( f ) = ∞ ∫ x (t )e − jϖ t dt −∞ Dla sygnałów dyskretnych w dziedzinie czasu stosowana jest dyskretna transformata Fouriera, wyraŜająca się następującym wzorem: X (m ) = N −1 ∑ x (n )e − j 2 π nm N n=0 2 W wyniku powstaje dyskretny ciąg X(m) w dziedzinie częstotliwości, przy czym m jest indeksem próbek wyjściowych DFT w dziedzinie częstotliwości (m=0,1,2, … N-1). N to liczba próbek ciągu wejściowego oraz liczba punktów częstotliwości w ciągu wyjściowym DFT. Analiza częstotliwościowa sygnału x(n), wyznaczająca wartości X(m) DFT, zwane prąŜkami, jest dokonywana w punktach osi częstotliwości będących całkowitymi wielokrotnościami częstotliwości zdefiniowanej jako fs/N. Na podstawie tego moŜliwe jest wyliczenie podziałki częstotliwości: mf f an (m) = s . N Ogół zagadnień związanych z próbkowaniem, kwantyzacją i DFT przedstawiony jest w skrypcie prob_dft. Na początku uŜytkownik wprowadza podstawowe parametry sygnału (amplitudy i częstotliwość; sygnał x1 to suma dwóch sinusoid), częstotliwość próbkowania oraz ilość bitów przetwornika. Następnie przedstawiona jest róŜnica pomiędzy sygnałem kwantowanym, a nie kwantowanym. Po tym pokazane są błędy wynikające z procesu kwantyzacji. Na końcu wyliczona jest DFT. W skrypcie posłuŜono się zaleŜnością na DFT, po przekształceniu Eulera, tj: X (m ) = N −1 ∑ n=0 x ( n )[cos( 2 π nm 2 π nm ) − j sin( )] N N Wyświetlana jest tylko pierwsza połowa próbek, poniewaŜ przy wyliczaniu N punktowej transformaty DFT, jedynie pierwsze N/2 próbek jest niezaleŜnych. Druga połowa jest odbiciem symetrycznym pierwszej. Wykonana została równieŜ korekta wartości widma amplitudowego. clear all N = 32; % ilosc punktów DFT n = 1:N; m = 1:N; % definicja opisów wejściowych: opis = {'Czestotliwosc pierwszej skladowej f1 [Hz]:','Czestotliwosc drugiej skladowej f2 [Hz]:',... 'Amplituda pierwszej skladowej A1 [V]:','Amplituda drugiej skladowej A2 [V]:',... 'Czestotliwosc probkowania fs Hz]:','Liczba bitow przetwornika (1-12):'}; % definicja wartosci domyslnych: def = {'1000','2000','1','0','32000','3'}; % wygenerowanie okna dialogowego: odp = inputdlg(opis,'Parametry sygnalu',1,def); % przyporzadkowanie wartosci: temp = str2num(char(odp)); f1 = temp(1) f2 = temp(2) A1 = temp(3) A2 = temp(4) fs = temp(5) % czestotliwosc próbkowania = (ilosc próbek)/sek; najlepiej N*1000 ts = 1/fs; % odstep próbkowania bit = temp(6) % zdefiniowanie sygnalu wejsciowego x1(n) x1 = A1*sin(2*pi*f1*(n-1)*ts)+A2*sin(2*pi*f2*(n-1)*ts); % x1(n) % porównanie sygnalu przed i po kwantyzacji subplot(2,1,1) hold on plot(0:N-1,x1,'r') % wykres w dziedzinie czasu stem(0:N-1,x1,'g'); % sygnal spróbkowany title('Probkowanie sygnalu'); legend('x1-sygnal ciagly','probki bez kwantyzacji'); ylabel('[V]'); hold off 3 subplot(2,1,2) hold on plot(0:N-1,x1,'r') % wykres w dziedzinie czasu x=kwantyzuj(bit,x1); % wywolanie funkcji kwantyzujacej stem(0:N-1,x,'k'); % próbki po kwantyzacji title('Probkowanie z kwantyzacja sygnalu'); legend('x1-sygnal ciagly','probki po kwantyzacji'); ylabel('[V]'); hold off % przedstawienie bledów kwantyzacji figure stem(0:N-1,x1-x,'b'); title('Bledy spowodowane kwantyzacja sygnalu (zalezne od ilosci bitow przetwarzania)'); legend('(x1 - x)') % wyliczenie DFT fan = (m-1)*fs/N % wyliczenie podzialki czestotliwosci for m = 1:N X(m)=0; for n = 1:N X(m) = X(m) + x(n)*(cos(2*pi*(n-1)*(m-1)/N)-j*sin(2*pi*(n-1)*(m-1)/N)); end end X = X/(N/2); % korekta amplitudy X(1) = X(1)/2; % korekta poziomu skladowej stalej % przedstawienie wyników dzialania DFT figure stem(fan,sqrt(real(X).^2+imag(X).^2)) % wykres modulu w dziedzinie czestotliwosci axis([0,((N/2)+1)*fs/N,0,1.1*max(sqrt(real(X).^2+imag(X).^2))]); title('Dyskretna transformata Fouriera'); legend('Prazki reprezentuja skladowe czestotliwosci sygnalu'); xlabel('Czestotliwosc [Hz]'); ylabel('Modul [V]'); W programie MATLAB transformata Fouriera realizowana jest przez polecenie fft: X = fft(x,n); • • • x – sygnał cyfrowy w dziedzinie czasu n – liczba punktów transformaty X- widmo sygnału (sygnał w dziedzinie częstotliwości). Odwrotna transformata Fouriera realizowana jest przez polecenie ifft: x = ifft(X,n); • • • X- widmo sygnału (sygnał w dziedzinie częstotliwości) n – liczba punktów transformaty x – sygnał cyfrowy w dziedzinie czasu. 4 3. ĆWICZENIA Ćwiczenie 1 Zmieniając liczbę bitów przetwornika AC (np. bit = 1, 3, 4, 8, 10), zbadać: a) jak zmienia się obraz próbkowanego sygnału, b) poziom (rząd wielkości) błędów kwantyzacji, porównać maksymalny błąd kwantyzacji z połową przedziału kwantowania, c) jakie zniekształcenia się pojawiają (wyŜsze harmoniczne sygnału), dla bit=1, 2, 4, 8 wyznacz współczynnik zawartości harmonicznych, zdefiniowany następująco: kh = H 22 + H 32 + H 42 + K H1 , gdzie H n - n-ta harmoniczna Ćwiczenie 2 Zaobserwować, Ŝe dla sygnału prostokątnego (bit=1), występują jedynie nieparzyste harmoniczne sygnału. Ćwiczenie 3 Porównać wyniki (szczególnie w dziedzinie częstotliwości) dla dwóch przypadków: - fs= 8000 Hz, bit=8, pozostałe parametry domyślne - fs= 8600 Hz, bit=8, pozostałe parametry domyślne. W ostatnim przypadku fs nie jest całkowitą wielokrotnością częstotliwości składowej sygnału, a więc występuje zjawisko przecieku widma DFT. Energia składowej nie spełniającej tego warunku ujawnia się w pewnym stopniu we wszystkich prąŜkach: bez przecieku z przeciekiem Ćwiczenie 4 1. Wygenerować sygnał y składający się z 4 harmonicznych 2. Wyznaczyć jego postać częstotliwościową Y 3. Na podstawie Y stosując odwrotną transformatę Fouriera wyznacz ponownie sygnał w dziedzinie czasu. Zapisz go w zmiennej y1 4. Porównaj sygnały y i y1, wykreśl (y1 - y)/max(y) 5