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