Filtrul dvs. este foarte puțin specificat, așa că presupun că proiectul dvs. ar trebui să fie foarte simplu. O metodă foarte de bază ar fi simpla trunchiere și deplasare a răspunsului la impuls al unui filtru ideal de trecere joasă cu frecvență de întrerupere $ \ omega_c = 2 \ pi f_c / f_s = 0,4 \ pi $ (unde $ f_s $ este frecvența de eșantionare):
$$ h_ {ideal} (n) = \ frac {\ sin (\ omega_c n)} {\ pi n} $$
Rețineți că, deoarece filtrul dvs. trebuie să fie cauzal, trebuie să schimbați și să trunchiați răspunsul de impuls ideal astfel încât să fie simetric față de maximul său:
$$ h (n) = \ frac {\ sin (\ omega_c (n-10))} { \ pi (n-10)}, \ quad n = 0,1, \ ldots, 20 \ tag {1} $$
Ecuația (1) vă oferă cei 21 de coeficienți de filtrare $ h (n) $ a unui filtru FIR cauzal care aproximează un răspuns ideal al filtrului trece jos. Rețineți că ordinea filtrului este 20.
Un cod Matlab / Octave simplu ar putea arăta astfel:
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
Comentarii