Filtry cyfrowe FIR i IIR

Transkrypt

Filtry cyfrowe FIR i IIR
Ćwiczenie 6
Projektowanie filtrów cyfrowych o skończonej i nieskończonej odpowiedzi impulsowej
1. Filtry FIR o skończonej odpowiedzi impulsowej (SOI)
Filtracja FIR polega na tym, że sygnał wyjściowy powstaje jako splot sygnału wejściowego i odpowiedzi
impulsowej filtru.
y(t) = x(t)*h(t)
(1.1)
gdzie: x(t) – sygnał wejściowy,
y(t) – sygnał wyjściowy ,
h(t) – odpowiedź impulsowa filtru.
Z uwagi na to, że w dziedzinie częstotliwości splot odpowiada mnożeniu operację filtracji można
ogólnie zapisać jako:
Y(jω) = X(jω)·H(jω)
(1.2)
gdzie: Y(jω) – widmo częstotliwościowe sygnału wyjściowego,
X(jω) – widmo częstotliwościowe sygnału wejściowego,
H(jω) – charakterystyka częstotliwościowa filtru.
Projektowany filtr będzie filtrem z okienkowaniem funkcją SINC , co oznacza, że jego odpowiedź
impulsowa przemnożona zostanie przez wybraną funkcję okna.
1.1. Projektowanie filtru dolnoprzepustowego FIR (SOI) w środowisku MatLab
Przykład 1
Dysponując sygnałem prostokątnym o częstotliwości podstawowej 1kHz wygenerować przebieg
sinusoidalny o częstotliwości 1kHz.
1. Uruchomienie narzędzia Filter Design & Analysis Tool (można wybrać z menu start programu
MatLab lub uruchomić z konsoli wpisując fdatool)
Powinno pojawić się okno jak poniżej lub podobne w zależności od wersji MatLab’a:
2. Wybieramy rodzaj filtru , w naszym przypadku dolnoprzepustowy filtr FIR okienkowany funkcją
SINC:
3. Kolejnym etapem jest określenie: rzędu filtru (ilości punktów, z których składa się jego odpowiedź
impulsowa, częstotliwości próbkowania - zgodnej z częstotliwością z jaką próbkowany jest sygnał
wejściowy oraz częstotliwości odcięcia.
4. Klikając przycisk ‘Design Filter’ zostanie wyświetlona jego charakterystyka częstotliwościowa
Klikając w ikony paska narzędzi można wyświetlić pozostałe wyznaczone parametry filtru: m.in. odpowiedź
impulsową, odpowiedź skokową, charakterystykę fazową, położenie zer i biegunów na płaszczyźnie zmiennej
Z.
5. Ostatnim etapem jest wyeksportowanie współczynników filtru do workspace, zapisanie jej do pliku
lub wygenerowanie m-pliku opisującego projektowany filtr.
Po zapisaniu współczynników filtru do pliku można go będzie używać w skryptach. Sygnał jest splotem
współczynników filtru z sygnałem wejściowym (w tym przypadku z sygnałem prostokątnym).
Splot w programie MatLab realizowany jest funkcją conv(). Zauważmy, że liczba próbek wyjściowych po
operacji splotu jest sumą próbek sygnały wejściowego i odpowiedzi impulsowej.
Efekt działania filtru w dziedzinie czasu i częstotliwości:
Sygnal wejsciowy w dziedzinie czestotliwosci
Sygnal wejsciowy w dziedzinie czasu
1
80
0.5
60
0
40
-0.5
20
-1
0
0
10
20
30
40
50
60
70
80
90
100
0
5
Sygnal wysjciowy w dziedzinie czasu
80
1
60
0
40
-1
20
0
20
40
60
80
100
120
140
15
20
25
30
35
40
45
50
90
100
Sygnal wysjciowy w dziedzinie czestotliwosci
2
-2
10
160
180
200
0
0
10
20
30
40
50
60
70
80
Bardzo wygodną metodą projektowania filtrów jest wykorzystanie narzędzia fdatools do tworzenia funkcji (mpliku), która wywołana zwraca współczynniki filtru (z paska narzędzi File należy wybrać Generate M-file).
Funkcja generująca współczynniki projektowanego filtru (plik zapisany pod nazwą filtry_fir.m) będzie miała
postać:
function Hd = filtry_fir
%FILTRY_FIR Returns a discrete-time filter object.
%
% M-File generated by MATLAB(R) 7.6 and the Signal Processing Toolbox 6.9.
%
% Generated on: 08-Jan-2014 08:27:06
%
% FIR Window Lowpass filter designed using the FIR1 function.
% All frequency values are in Hz.
Fs = 10000; % Sampling Frequency
N
= 100;
% Order
Fc
= 1500;
% Cutoff Frequency
flag = 'noscale'; % Sampling Flag
% Create the window vector for the design algorithm.
win = blackman(N+1);
% Calculate the coefficients using the FIR1 function.
b = fir1(N, Fc/(Fs/2), 'low', win, flag);
Hd = dfilt.dffir(b);
% [EOF]
Powyższą funkcję wywołujemy w skrypcie np.:
wsp = filtry_fir;
Teraz wystarczy tylko wykorzystać funkcję MatLab’a filter(), której argumentami są: współczynniki
zwrócone przez funkcję filtry_fir i wektor sygnału wejściowego:
syg_wy = filter(wsp, syg_we);
2. Filtry IIR o nieskończonej odpowiedzi impulsowej
W uproszczeniu, dla filtrów o nieskończonej odpowiedzi impulsowej wartość próbki wyjściowej wyznaczana
jest na podstawie przemnożenia wartości sygnału wejściowego przez współczynnik ‘a’ oraz wymnożenie
poprzednio obliczonych wartości sygnału wyjściowego przez współczynnik ‘b’ i następnie zsumowanie
wszystkich iloczynów.
y[n] = a0x[n] + a1x[n-1] + a2x[n-2] + a3x[n-3] + .... +
+ b1y[n-1] + b2x[n-2] + b3x[n-3]
(2.1)
Współczynniki a i b , które określają filtr nazywane są współczynnikami rekursywnymi. W praktyce stosuje się
nie więcej niż kilkanaście współczynników rekursywnych.
Zależność pomiędzy współczynnikami rekursywnymi a odpowiedzią impulsową filtru (która najczęściej swoim
kształtem przypomina gasnącą sinusoidę) określona jest przez przekształcenie Z .
Filtry o nieskończonej odpowiedzi impulsowej mogą być niestabilne z uwagi na obecność pętli sprzężenia
zwrotnego (wartości sygnału wyjściowego mogą ). Aby sprawdzić stabilność filtru IIR należy zbadać położenie
biegunów transmitancji na płaszczyźnie zmiennej zespolonej Z. Filtr jest stabilny gdy wszystkie bieguny funkcji
transmitancji filtru znajdują się wewnątrz koła jednostkowego na płaszczyźnie Z.
2.1. Projektowanie filtru IIR w środowisku MatLab
Procedura projektowania filtru o nieskończonej odpowiedzi impulsowej jest zasadniczo bardzo podobna
do procedury opisanej w pkt. 1.1. i opiera się na następujących krokach:
1. Wybór rodzaju filtru IIR
2. Określenie częstotliwości próbkowania, częstotliwości odcięcia (ew. szerokości pasma
przepustowego lub zaporowego), rzędu filtru (ilości biegunów), innych parametrów np. dla filtru
Czebyszewa – tętnień w paśmie przepustowym (Czebyszew I) lub zaporowym (Czebyszew II)
3. Wygenerowanie skryptu realizującego filtr o zadanych parametrach.
Uwaga: Filtry rekursywne w dziedzinie czasu realizowane są za pomocą tzw. równania różnicowego
(wz. 2.1) a nie splotu
Przykład 2 projektowanie filtru IIR
Dysponując sygnałem prostokątnym o częstotliwości podstawowej 1kHz wygenerować przebieg
sinusoidalny o częstotliwości 1kHz.
Parametry filtru:
Efekt działania filtru IIR w dziedzinie czasu i częstotliwości:
Sygnal wejsciowy w dziedzinie czestotliwosci
Sygnal wejsciowy w dziedzinie czasu
1
80
0.5
60
0
40
-0.5
20
-1
0
10
20
30
40
50
60
70
80
90
100
0
0
5
10
15
20
25
30
35
40
45
50
45
50
Sygnal wysjciowy w dziedzinie czestotliwosci
Sygnal wysjciowy w dziedzinie czasu
60
2
1
40
0
20
-1
-2
0
10
20
30
40
50
60
70
80
90
100
0
0
5
10
15
20
25
30
35
40
Proszę porównać efekt działania filtru IIR z analogicznym filtrem FIR (przykład 1)
Zadania do wykonania
Celem ćwiczenia jest implementacja wybranego algorytmu filtracji w środowisku
programistycznym MatLab.
Odfiltrować zadane przez prowadzącego sygnały:
a) sygnał audio,
b) sygnał elektryczny (wysterowany mostkiem tyrystorowym ) o częstotliwości podstawowej 50Hz,
c) sygnał piłokształtny o częstotliwości 1 kHz,
d) sygnał z termopary*,
- Dokonać analizy widmowej (FFT) zadanych sygnałów.
- Wykorzystując Filter Design & Analysis Tool metodą okien zaprojektować filtry FIR i IIR o
odpowiednich charakterystykach częstotliwościowych.
- Zbadać wpływ:
- rzędu filtru,
- funkcji okna,
- częstotliwości próbkowania,
na charakterystykę częstotliwościową, jego odpowiedź impulsową i skokową.
- Dokonać analizy widmowej FFT przefiltrowanych sygnałów. Wykreślić widmo amplitudowe i
fazowe odfiltrowanych sygnałów oraz w przypadku sygnałów b i c przebiegi czasowe.
- W wnioskach uwzględnić:
- jakie parametry wpływają na jakość filtracji,
- dlaczego uzyskane charakterystyki różnią się od idealnych,
- porównać odpowiedzi impulsowe filtrów dolnoprzepustowych i górnoprzepustowych,
- jaka jest zależność między kształtem odpowiedzi impulsowej filtru a częstotliwością odcięcia?
Wykorzystać następujące funkcje matlaba: wavread(), wavwrite(), load, save, importdata(), fft(), conv() ,
mean().
*nieobowiązkowe
Przebieg czasowy sygnału a)
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0
5
10
15
20
25
30
35
40
Przebieg czasowy sygnału b)
Przebieg czasowy sygnału c)
45