Ć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) 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ω) 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 Zadanie 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. 6. 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: 1 Sygnal wejsciowy w dziedzinie czasu 8 Sygnal wejsciowy w dziedzinie czestotliwosci.5 6 4 -.5 2-1 1 2 3 4 5 6 7 8 9 1 5 1 15 2 25 3 35 4 45 5 2 Sygnal wysjciowy w dziedzinie czasu 8 Sygnal wysjciowy w dziedzinie czestotliwosci 1 6 4-1 2-2 2 4 6 8 1 12 14 16 18 2 1 2 3 4 5 6 7 8 9 1 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ł 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: 8-Jan-214 8:27:6 FIR Window Lowpass filter designed using the FIR1 function. All frequency values are in Hz. Fs = 1; Sampling Frequency N = 1; Order Fc = 15; 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);