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