Synthèse FIR par échantillonnage fréquentiel

Par défaut, SCILAB ne contient pas de routine pour la synthèse FIR par échantillonage fréquentiel (équivalent de la fonction fir2 de MATLAB). Il existe une fonction appelée fsfirlin, mais elle ne fait que calculer la réponse fréquentielle continue, sans retourner les coefficients de filtrage. Pourtant, cette méthode est pratique car c'est une méthode très simple pour concevoir un filtre avec une réponse arbitraire, ce qui peut servir notamment pour réaliser des filtres de compensation.

Ce petit script est une implémentation (basique) de cette technique. Les remarques et les propositions d'améliorations sont donc les bienvenues !

Exemple 1 : filtre demi-bande, 32 coefficients

Dans cet example, on ne précise pas le nombre de coefficients souhaités. Il est alors automatiquement calculé à 2 fois la dimension du gabarit fréquentiel.

// Example : half-band filter
f = [ones(1,8) zeros(1,8)];
h = fsfir_plot(f);
// h = a + b * %z^-1 + ...

Exemple 2 : filtre demi-bande, 64 coefficients

Cet exemple permet d'illustrer le fait que si la dimension du gabarit fréquentiel n'est pas égal au nombre de coefficients, le gabarit est automatiquement interpolé (interpolation linéaire).

// Example : half-band filter, with automatic interpolation
f = [ones(1,8) zeros(1,8)];
h = fsfir_plot(f,64);

Exemple 3 : réponse arbitraire

Dans cet exemple, on conçoit un filtre de réponse arbitraire (rampe puis plateau constant) :

f = [0:10 10*ones(1,10)];
h = fsfir_plot(f);