Contents

ifir

Interpolated FIR filter from filter specification

Syntax

[h,g] = ifir(l,type,f,dev)
[h,g,d] = ifir(l,type,f,dev)
[...] = ifir(...,str)
hd = ifir(d)
hd = design(d,'ifir',designoption1,value1,designoption2,value2,...)

Description

[h,g] = ifir(l,type,f,dev) designs a periodic filter h(zl), where l is the interpolation factor. It also finds an image-suppressor filter g(z), such that the cascade of the two filters forms an efficient implementation that meets the desired response. This response is specified by type, with band edge frequencies contained in vector f. This is done while not exceeding the maximum deviations or ripples (linear) specified in vector dev.

type is a string with 'low' for lowpass designs or 'high' for highpass designs. f is a two-element vector with passband and stopband edge frequency values. For narrowband lowpass filters and wideband highpass filters, l×f(2) is less than 1. For wideband lowpass filters and narrowband highpass filters, specify f so that l×(1–f(1)) is less than 1.

dev is a two-element vector that contains the peak ripple or deviation (linear) allowed for both the passband and the stopband.

The ifir design algorithm achieves an efficient design in the sense that it reduces the total number of multipliers required. To do this, the design problem is broken into two stages. In the first stage, the filter is upsampled to achieve the stringent specifications without using many multipliers. In the second stage, the filter removes the images created when upsampling the previous filter.

[h,g,d] = ifir(l,type,f,dev) returns a delay d that is connected in parallel with the cascade of h(zl) and g(z) for both wideband lowpass and highpass filters. This is necessary to obtain the desired response.

[...] = ifir(...,str) uses the string specified in str to choose the algorithm level of optimization used. Possible values for str are 'simple', 'intermediate' (default) or 'advanced'. str provides for a tradeoff between design speed and filter order optimization. The 'advanced' option can result in substantial filter order reduction, especially for g(z).

hd = ifir(d) designs an FIR filter from design object d, using the interpolated FIR method. ifir returns hd as a cascade of two filters that act together to meet the specifications in d. The resulting filter is particularly efficient, having a low number of multipliers. However, if ifir determines that a single-stage filter is more efficient than the default two-stage design, it returns hd as a single-stage filter. ifir creates only linear phase filters. Generally, ifir uses an advanced optimization algorithm to create highly efficient FIR filters.

ifir returns hd as a single-rate dfilt object or a multirate mfilt object, based on the filter specifications you provide.

hd = design(d,'ifir',designoption1,value1,designoption2,value2,...) returns an interpolated FIR filter using the design options you specify.

To determine the available design options, use designopts with the specification object and the design method as input arguments:

designopts(d,'method')

Examples

expand all

Narrowband lowpass design using an interpolation factor of 6

This example shows how to use the function ifir to design a narrowband lowpass filter.

[h,g]=ifir(6,'low',[.12 .14],[.01 .001]);
H = dfilt.dffir(h); G = dfilt.dffir(g);
hfv = fvtool(H,G);
legend(hfv,'Periodic Filter','Image Suppressor Filter');
Hcas = cascade(H,G);
hfv2 = fvtool(Hcas);
legend(hfv2,'Overall Filter');

Wideband highpass design using an interpolation factor of 6

This example shows how to use ifir to design a wideband highpass filter.

[h,g,d]=ifir(6,'high',[.12 .14],[.001 .01]);
H = dfilt.dffir(h); G = dfilt.dffir(g);
Hb1 = cascade(H,G); % Branch 1
Hb2 = dfilt.dffir(d); % Branch 2
Hoverall = parallel(Hb1,Hb2); % Overall wideband highpass
hfv =  fvtool(Hoverall);
legend(hfv,'Overall Filter');

Design a lowpass and a wideband highpass filter

This example shows how to use fdesign.lowpass and fdesign.highpass to design a lowpass and a wideband highpass filter. After designing the filters, use FVTool to plot the response curves for both.

fpass = 0.2;
fstop = 0.24;
d1 = fdesign.lowpass(fpass, fstop);
hd1 = design(d1,'ifir');
fstop = 0.2;
fpass = 0.25;
astop = 40;
apass = 1;
d2 = fdesign.highpass(fstop,fpass,astop,apass);
hd2 = design(d2,'ifir');
fvtool(hd1,hd2)

See Also

| | | |

Was this topic helpful?