Twój filtr jest bardzo niedostatecznie zdefiniowany, więc zakładam, że Twój projekt powinien być bardzo prosty. Bardzo podstawową metodą byłoby po prostu obcięcie i przesunięcie odpowiedzi impulsowej idealnego filtra dolnoprzepustowego o częstotliwości odcięcia $ \ omega_c = 2 \ pi f_c / f_s = 0,4 \ pi $ (gdzie $ f_s $ to częstotliwość próbkowania):
$$ h_ {ideal} (n) = \ frac {\ sin (\ omega_c n)} {\ pi n} $$
Pamiętaj, że ponieważ twój filtr musi być przyczynowy trzeba przesunąć i obciąć idealną odpowiedź impulsową tak, aby była symetryczna w odniesieniu do jej maksimum:
$$ h (n) = \ frac {\ sin (\ omega_c (n-10))} { \ pi (n-10)}, \ quad n = 0,1, \ ldots, 20 \ tag {1} $$
Równanie (1) daje 21 współczynników filtra $ h (n) $ przyczynowego filtra FIR aproksymującego idealną odpowiedź filtra dolnoprzepustowego. Zwróć uwagę, że kolejność filtrów to 20.
Prosty kod Matlab / Octave mógłby wyglądać następująco:
n = -10:10; omc = 0.4*pi; % normalized cut-off frequency in rad h = sin(omc*n)./(pi*n); % impulse response h(11) = omc/pi; % correct NaN value at n=0 H = fft(h,1024); % complex frequency response f = 1000/1024*(0:512); % FFT frequency grid up to fs/2 plot(f,abs(H(1:513))); % plot magnitude of frequency response
Komentarze