Ćwiczenie 6 Projektowanie filtrów cyfrowych o skończonej i

Transkrypt

Ćwiczenie 6 Projektowanie filtrów cyfrowych o skończonej i
Ć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:
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ł
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);

Podobne dokumenty