FIR synthesis by frequency sampling
By default, Scilab contains no routine for synthesis FIR
by sampling frequency (equivalent to
fir2 MATLAB function).
There is a function called
fsfirlin but it only computes the
continuous frequency response, without returning the filter coefficients.
However, this method is convenient because it is a very simple way to design
a filter with an arbitrary response, which can be used in particular
to make compensation filters.
This little script is a basic implementation of this technique. Any suggestions for improvements are welcome!
Example 1: half-band filter, 32 coefficients
In this example, we do not force the number of coefficients. It is then computed automatically to be 2 times the dimension of the frequential template.
// Example : half-band filter f = [ones(1,8) zeros(1,8)]; h = fsfir_plot(f); // h = a + b * %z^-1 + ...
Example 2: half-band filter, 64 coefficients
This example enables to illustrate the fact that if the dimension of the frequential template is not equal to the desired number of coefficients, then the frequencial template is automatically interpolated (linear interpolation).
// Example : half-band filter, with automatic interpolation f = [ones(1,8) zeros(1,8)]; h = fsfir_plot(f,64);
Example 3: arbitrary response
In this example, we designe a filter with arbitrary response:
f = [0:10 10*ones(1,10)]; h = fsfir_plot(f);