Instrukcja

Transkrypt

Instrukcja
Katedra Elektrotechniki Teoretycznej i Informatyki
Przedmiot: Zintegrowane Pakiety Obliczeniowe W
Zastosowaniach InŜynierskich
Numer ćwiczenia:
7,8
Temat: Signal Processing Toolbox - filtry cyfrowe,
transmitancja filtru, charakterystyka amplitudowa i
fazowa, stabilność filtru, odpowiedź na skok
jednostkowy, odpowiedź impulsowa
Wprowadzenie
Cyfrowe przetwarzanie sygnałów polega na przekształceniu danych wejściowych
(reprezentujących pewien ciąg liczb) w inne dane, tj. dane wyjściowe, reprezentujące ciąg
liczb na wyjściu układu. Pochodzenie przetwarzanych sygnałów nie jest istotne. Zakładamy,
Ŝe są one dane w postaci ciągów liczb i mogą one pochodzić z innego urządzenia cyfrowego,
bądź teŜ mogą to być próbki sygnału analogowego. Termin filtr (analogowy lub cyfrowy)
oznacza, w klasycznym rozumieniu tego słowa, układ liniowy (zwykle stacjonarny), dla
którego przy danym, zdeterminowanym sygnale wejściowym uzyskuje się poŜądany sygnał
wyjściowy o ściśle określonych właściwościach. Algorytm przetwarzania sygnału moŜna
zrealizować sprzętowo lub programowo, a w związku z tym „filtr cyfrowy" oznacza zarówno
urządzenie jak i program realizacji danego algorytmu.
WaŜnym elementem algorytmów projektowania filtrów cyfrowych jest przeprowadzenie
analizy częstotliwościowej sygnałów elektrycznych poddawanych filtracji. Badanie
częstotliwościowe sygnałów przeprowadza się wykorzystując przekształcenie całkowe
Fouriera (transformacja Fouriera). Przekształcenie to, umoŜliwia przeprowadzenie przejścia z
dziedziny czasu do dziedziny częstotliwości. Dzięki zastosowaniu transformacji dowolny
przebieg niesinusoidalny jest rozkładany na szereg przebiegów okresowych. UmoŜliwia to
określenie w jaki sposób poszczególne częstotliwości składają się na pierwotny przebieg
niesinusoidalny.
Zakładając, Ŝe dany przebieg sygnału elektrycznego wyraŜony jest funkcją f(t), to
przekształcenie
F ( jω ) =
∞
∫ f (t )e
− jωt
dt
−∞
jest przekształceniem prostym Fouriera, gdyŜ przekształca funkcję czasu t w funkcję
częstotliwości ω. Wielkość F(jω) nazywane jest transformatą Fouriera lub charakterystyką
widmową.
Analogicznie przekształcenie
1
f (t ) =
2π
∞
∫ F ( jω ) e
jωt
dω
−∞
1
jest nazywane odwrotnym przekształceniem Fouriera lub całką Fouriera i umoŜliwia
wyraŜenie funkcji częstotliwości ω funkcją czasy t.
JeŜeli dana funkcja przedstawiająca przebieg sygnału elektrycznego spełnia warunek
Dirichleta (wystarczający warunek aby funkcje okresową móc przedstawić w postaci szeregu
Fouriera oraz by istniała jej transformata Fouriera) oraz warunek bezwzględnej całkowalności
moŜe zostać zobrazowana w dziedzinie częstotliwości w postaci charakterystyk amplitudowofazowych obrazujących widmo funkcji.
Przedstawione zaleŜności dotyczą sygnałów ciągłych w czasie (sygnałów analogowych). W
przypadku sygnałów dyskretnych mówimy o dyskretnej transformacie Fouriera DFT (ang.
Discrete Fourier Transform). Wykonanie algorytmu DFT wymaga zazwyczaj wykonania
bardzo duŜej ilości obliczeń, przez co nie zawsze jest moŜliwe wykonanie operacji w czasie
rzeczywistym. Efektywnym algorytmem obliczania prostej i odwrotnej DFT jest algorytm
szybkiej transformaty Fouriera FFT (ang. Fast Fourier Transform). Algorytm FFT nie jest
przybliŜeniem DFT i jest równowaŜny DFT. Szybkość algorytmu FFT jest wykorzystywana
w układach elektronicznych do analizy częstotliwościowej (np. układy DSP). Obie metody,
FFT oraz DFT, posiadają jednak takie same właściwości.
FFT w Matlabie
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.
Przykład skryptu w Matlabie realizującego algorytm prostej FFT dla sygnału złoŜonego z
trzech składowych a następnie zaszumionego przedstawiono poniŜej. Wynikiem działania
skryptu jest prezentacja widma utworzonego sygnału.
fs = 25e3; % czestotliwosc probkowania sygnalu-okreslajaca krok czasu
delta_t
delata_t = 1/fs;
t = 0:delta_t:1; % generacja wektora czasu od 0 do 1 sekundy z krokiem
odpowiadajacym czestotliwosci probkowania
% suma sygnalow o czestotliwosci 900, 1800 i 2700 Hz
u = 10*sin(2*pi*900*t) + ... % pierwsza skladowa
1*sin(2*pi*1800*t) + ... % druga skladowa
2*sin(2*pi*2700*t); % trzecia skladowa
2
% zaszumienie utowrzonego przebiegu przez dodanie losowej wartosci z
% przedzialu 0-0.25 do kazdego punktu przebiegu u
u1 = u + 0.25*rand(size(t));
% obliczenie szybkiej transformaty Fouriera
ufft = fft(u);
f = fs*(0:length(t)/2)/length(t);
stem(f,abs(ufft(1:end/2+1))); % wykreslenie widma sygnalu
Rys. 1. Ilustracja widma sygnału uzyskanego w wyniku działania skryptu.
Filtracja w Matlabie
W celu przeprowadzenia filtracji w środowisku MATLAB naleŜy:
• określić parametry filtru: rodzaj filtru (dolnoprzepustowy DP, górnoprzepustowy GP,
pasmowoprzepustowy PP lub pasmowozaporowy PZ), częstotliwość graniczną (lub
częstotliwości graniczne) oraz rząd filtru,
• określić rodzaj aproksymacji wykorzystanej do realizacji filtru (np. butterwortha), a
następnie wyznaczyć współczynniki filtru,
• zbadać właściwości zaprojektowanego filtru cyfrowego (wyznaczenie odpowiedzi na
skok jednostkowy, na impuls, zbadanie stabilności filtru),
• wykonać obliczeń realizujących samą filtrację
Do określenia parametrów filtru wykorzystać moŜna widmo sygnału poddawanego filtracji.
Do obliczenia widma posłuŜą funkcję fft oraz ifft opisane we wcześniejszej części instrukcji.
Wyznaczenie współczynników transmitancji filtru cyfrowego w zaleŜności od poŜądanej
aproksymacji charakterystyki filtru jest realizowane funkcjami:
[b,a] = butter(filterOrder, Wn, type)
dla aproksymacji Butterwortha
[b,a] = cheby1(filterOrder, Rp, Wn, type)
dla aproksymacji Czebyszewa
[b,a] = ellip(filterOrder, Rp, Rs, Wn, type) dla aproksymacji eliptycznej
•
filterOrder – rząd filtru
3
•
Wn – pulsacja odcięcia, Wn∈(0;1), Wn=1 odpowiada połowie częstotliwości
próbkowania
•
Rp (ang. ripple) – falistość [dB] w paśmie przenoszenia
•
Rs – spadek wzmocnienia dla pasma tłumienia
•
type
określa
rodzaj
filtru
(dolnoprzepustowy,
górnoprzepustowy,
pasmowozaporowy) i moŜe przyjmować następujące wartości: ‘low’, ‘high’,
‘stop’. W przypadku filtru pasmowego, parametr Wn musi się składać z wektora
dwuelementowego Wn=[Wnlow Wnhigh].
Wyznaczanie odpowiedzi częstotliwościowej (charakterystyki amplitudowo-fazowej) filtrów
cyfrowych:
[H,W] = freqz(b, a, nPoint)
•
H – zespolona odpowiedź częstotliwościowa
•
W – wektor częstotliwości
•
b,a – współczynniki w transmitancji
•
nPoint – liczba punktów
Wyznaczanie odpowiedzi filtrów cyfrowych na skok jednostkowy:
[Ht] = stepz(b, a)
•
Ht – odpowiedź na skok jednostkowy
•
b,a – współczynniki w transmitancji
Wyznaczanie odpowiedzi impulsowej filtrów cyfrowych:
[Hi] = impz(b, a)
•
Hi – odpowiedź impulsowa
•
b, a – współczynniki w transmitancji
Wyznaczanie połoŜenia biegunów i zer filtrów cyfrowych na płaszczyźnie zmiennej
zespolonej z:
zplane(b, a)
•
b, a – współczynniki w transmitancji
Przykład projektowania filtrów oraz badania ich charakterystyk przedstawia poniŜszy skrypt
działający w środowisku MATLAB. Skrypt ten jest kontynuacją i stanowi rozwinięcie
skryptu przedstawiającego przeprowadzenie FFT w środowisku MATLAB.
% filtracja - filtr DP o cz. granicznej rownej 1350 Hz
% generacja wspolczynnikow aproksymacji butterwortha
[bb,ba]=butter(2,1350/(fs/2),'low');
% generacja wspolczynnikow aproksymacji czebyszewa
4
[cb,ca]=cheby1(2,2,1350/(fs/2),'low');
% generacja wspolczynnikow aproksymacji eliptycznej
[eb,ea]=ellip(2,2,25,1350/(fs/2),'low');
% badanie charakterystyk zaprojektowanych filtrow
[bh,bw]=freqz(bb,ba);
[ch,cw]=freqz(cb,ca);
[eh,ew]=freqz(eb,ea);
figure;
subplot(2,1,1) % podwykres amplitudy
hold on
plot(bw/pi*fs/2,abs(bh));
plot(cw/pi*fs/2,abs(ch),'r');
plot(ew/pi*fs/2,abs(eh),'k');
legend('butter','cheby1','ellip');
xlabel('f [Hz]');
ylabel('|H(jw)|');
title('porownanie charakterystyk')
subplot(2,1,2) % podwykres fazy
hold on
plot(bw/pi*fs/2,unwrap(angle(bh)));
plot(cw/pi*fs/2,unwrap(angle(ch)),'r');
plot(ew/pi*fs/2,unwrap(angle(eh)),'k');
legend('butter','cheby1','ellip');
xlabel('f [Hz]');
ylabel('fi(jw)');
Rys. 2. Porównanie charakterystyk trzech filtrów.
Proces filtracji przeprowadzić moŜna wykorzystując kilka wbudowanych w oprogramowanie
MATLAB funkcji. Jedną z funkcji jest funkcja filter:
[y] = filter(b, a, s)
•
y – sygnał wyjściowy (przefiltrowany)
•
b, a – współczynniki w transmitancji
•
s – sygnał wejściowy (filtrowany)
Pełna lista parametrów powyŜszych funkcji dostępna jest w pomocy programu MATLAB.
5
PoniŜej zaprezentowano przykład skryptu realizującego zadanie filtracji począwszy od
generacji sygnału aŜ do wykonania samej filtracji.
close all
clear all
fs=1000; % czestotliwosc probkowania
f1=100; % czestotliwosc pierwszej skladowej sygnalu
f2=10;
% czestotliwosc drugiej skladowej
t=1/fs:1/fs:2; % wektor czasu
y=sin(2*pi*f1*t) + sin(2*pi*f2*t); % obliczanie sygnalu y=f(t)
% wykreslanie sygnalu
figure(1)
plot(t,y)
title('sygnal oryginalny')
xlabel('t [s]')
% obliczanie wspolczynnikow filtru dolnoprzepustowego Butterwortha 2-ego
% rzedu o czestotliwosci granicznej fd=50Hz
[b,a]=butter(2,50/(fs./2),'low');
% b,a to obliczone wspolczynniki dla danej konfiguracji flitru
% pierwszy parametr rowny 2 odnosi sie do rzedu filtru
% drugi parametr odnosi sie do czestotliwosci granicznej filtru;
czestotliwosc ta miesci sie w przedziale
% od 0-1 i jest obliczana na podstawie zalezonosci:
% (czestotliwosc_graniczna)/(czestotliwosc_probkowania./2);
% wspolczynnik ten jest rowny 1 dla czestotliwosci Nyquista, czyli
% czestotliwosci rownej polowie czestotliwosci probkowania;
% w przypadku filtrow pasmowych nalezy podac dwie czestotliwosci graniczne
np [50, 100]./(fs./2)
% trzeci parametr odnosi sie do rodzaju filtru:
%'low' to dolnoprzepustowy; 'high' to gornoprzepustowy,
% 'stop' to pasmowozaporowy, a 'bandpass' to pasmowo przepustowy;
% wykreslenie odpowiedzi czestotliwosciowej filtru o wyznaczonych
% wspolczynnikach
figure(2)
freqz(b,a);
title('wyznaczenie odpowiedzi czestotliwosciowej filtru')
% wyznaczenie odpowiedzi na skok jednostkowy filtru
figure(3)
stepz(b,a)
title('wyznaczenie odpowiedzi na skok jednostkowy filtru')
% wyznaczenie odpowiedzi impuslowej filtru
figure(4)
impz(b,a)
title('wyznaczenie odpowiedzi impulsowej filtru')
% badanie stabilnosci filtru
figure(5)
zplane(b,a)
title('badanie stabilnosci filtru')
%filtracja sygnalu
6
y1=filter(b,a,y);
figure(6)
plot(t,y,'k')
hold on
plot(t,y1,'r','LineWidth',2)
legend('sygnal przed filtracja', 'sygnal po filtracji');
Korzystając z prostej oraz odwrotnej FFT zadanie filtracji moŜna przeprowadzić równieŜ w
dziedzinie częstotliwości. W takim przypadku w pierwszym kroku naleŜy wykonać obliczenia
widma sygnału, następnie dokonać jego modyfikacji, a następnie przeprowadzić odwrotną
FFT. Przykład realizacji tego typu filtracji został zobrazowany poniŜszym przykładem.
% przyklad filtracji sygnalu w dziedzinie czestotliwosci
close all
clear all
fs=10000; % czestotliwosc probkowania
f1=1000; % czestotliwosc pierwszej skladowej sygnalu
f2=50;
% czestotliwosc drugiej skladowej
t=0.0001:0.0001:2; % wektor czasu
y=sin(2*pi*f1*t) + sin(2*pi*f2*t); % obliczanie sygnalu y=f(t)
lt=length(t); % obliczanie dlugosci wektora czasu
% wykreslanie sygnalu
figure(1)
plot(t,y)
title('sygnal oryginalny')
xlabel('t [s]')
% szybka transformata fouriera sygnalu
yfft= fft(y);
pyfft = yfft.*conj(yfft);
f=fs*(0:lt/2)/lt;
figure(2);
plot(f,pyfft(1:(lt/2)+1))
title('gestosc widma sygnalu oryginalnego')
xlabel('f [Hz]')
R = abs(yfft);
theta = angle(yfft);
figure(4)
subplot(2,1,1)
hold on; plot(f,R(1:(lt/2)+1),'r')
title('gestosc widma sygnalu oryginalnego przed filtracja')
xlabel('f [Hz]')
% filtracja jednej skladowej sygnalu-> "zerowanie" wartosci widma w
% przedziale odpowiadajacym danej czestotliwosci sygnalu skladowego
yfft(25:end-25)=0;
R1 = abs(yfft);
theta1 = angle(yfft);
7
subplot(2,1,2)
plot(f,R1(1:(lt/2)+1),'k')
title('gestosc widma sygnalu po filtracji')
xlabel('t [s]')
% odwrotna szybka transformata foureira
yifft = yfft;
yi=ifft(yifft,length(t));
%wykreslenie sygnlau w dziedzinie czasu po filtracji
figure(3)
hold on;
plot(real(yi),'r')
title('sygnal po filtracji')
xlabel('t [s]')
ZADANIA I
1. Zaprojektować filtr cyfrowy 2-rzędu dolnoprzepustowy o częstotliwości granicznej fg
= 0.3 fN (fN = fS/2). Zastosuj aproksymację Butterwortha.
2. Wyznaczyć:
a. charakterystykę amplitudową i fazową, wykreślić ją w skali logarytmicznej i
liniowej,
b. połoŜenie biegunów i zer transmitancji, czy układ o tej transmitancji jest stabilny
c. odpowiedź na skok jednostkowy,
d. odpowiedź impulsową
e. odpowiedź na sygnał prostokątny o częstotliwości f = 0.2 fN
3. Wyznaczyć parametry określone w pkt. 2 dla następujących filtrów:
a. filtr NOI 2-rzędu dolnoprzepustowy, częstotliwość graniczna fg = 0.3 fN
aproksymacja Bessela
b. filtr NOI 2-rzędu dolnoprzepustowy, częstotliwość graniczna fg = 0.3 fN
aproksymacja Czebyszewa
4. Zaprojektować układ o takiej transmitancji 2-go rzędu, aby jeden z biegunów
znajdował się poza kołem jednostkowym. Wyznaczyć odpowiedź impulsową układu i
odpowiedź na skok jednostkowy. Czy taki układ jest stabilny ?
5. Zapoznać się z narzędziem fdatool
ZADANIA II
1. Dla zadanego sygnału przeprowadź analizę widma i wyznacz częstotliwości sygnałów
składowych.
2. Zaprojektuj filtry umoŜliwiające odfiltrowanie sygnału, tak by za kaŜdym razem
pozostawała wyłącznie jedna składowa sygnału: dobierz częstotliwość graniczną, rząd
filtru oraz typ aproksymacji.
3. Wykonaj ponownie analizę widma sygnału przefiltrowanego w celu weryfikacji
przeprowadzonej filtracji.
8

Podobne dokumenty