Documentation

firpmord

Parks-McClellan optimal FIR filter order estimation

Syntax

[n,fo,ao,w] = firpmord(f,a,dev)
[n,fo,ao,w] = firpmord(f,a,dev,fs)
c = firpmord(f,a,dev,fs,'cell')

Description

[n,fo,ao,w] = firpmord(f,a,dev)finds the approximate order, normalized frequency band edges, frequency band amplitudes, and weights that meet input specificationsf,a, anddev

  • fis a vector of frequency band edges (between 0 andFs/2, whereFsis the sampling frequency), andais a vector specifying the desired amplitude on the bands defined byf。The length offis two less than twice the length ofa。The desired function is piecewise constant.

  • devis a vector the same size asathat specifies the maximum allowable deviation or ripples between the frequency response and the desired amplitude of the output filter for each band.

Usefirpmwith the resulting ordern, frequency vectorfo, amplitude response vectorao, and weightswto design the filterbwhich approximately meets the specifications given byfirpmordinput parametersf,a, anddev

b = firpm(n,fo,ao,w)

[n,fo,ao,w] = firpmord(f,a,dev,fs)specifies a sampling frequencyfsfs默认为2赫兹,暗示的奈奎斯特频率1 Hz. You can therefore specify band edges scaled to a particular application's sampling frequency.

c = firpmord(f,a,dev,fs,'cell')generates a cell-array whose elements are the parameters tofirpm

Note

In some cases,firpmordunderestimates or overestimates the ordern。If the filter does not meet the specifications, try a higher order such asn+1orn+2

Examples

collapse all

Design a minimum-order lowpass filter with a 500 Hz passband cutoff frequency and 600 Hz stopband cutoff frequency. Specify a sampling frequency of 2000 Hz. Require at least 40 dB of attenuation in the stopband and less than 3 dB of ripple in the passband.

rp = 3;% Passband ripplers = 40;% Stopband ripplefs = 2000;% Sampling frequencyf = [500 600];% Cutoff frequenciesa = [1 0];% Desired amplitudes

Convert the deviations to linear units. Design the filter and visualize its magnitude and phase responses.

dev = [(10^(rp/20)-1)/(10^(rp/20)+1) 10^(-rs/20)]; [n,fo,ao,w] = firpmord(f,a,dev,fs); b = firpm(n,fo,ao,w); freqz(b,1,1024,fs) title('Lowpass Filter Designed to Specifications')

Note that the filter falls slightly short of meeting the stopband attenuation and passband ripple specifications. Usingn+1in the call tofirpminstead ofnachieves the desired amplitude characteristics.

Design a lowpass filter with a 1500 Hz passband cutoff frequency and 2000 Hz stopband cutoff frequency. Specify a sampling frequency of 8000 Hz. Require a maximum stopband amplitude of 0.1 and a maximum passband error (ripple) of 0.01.

[n,fo,ao,w] = firpmord([1500 2000],[1 0],[0.01 0.1],8000); b = firpm(n,fo,ao,w);

Obtain an equivalent result by havingfirpmordgenerate a cell array. Visualize the frequency response of the filter.

c = firpmord([1500 2000],[1 0],[0.01 0.1],8000,'cell'); B = firpm(c{:}); freqz(B,1,1024,8000)

Algorithms

firpmorduses the algorithm suggested in[1]。这种冰毒od is inaccurate for band edges close to either 0 or the Nyquist frequency,fs/2

References

[1] Rabiner, Lawrence R., and Otto Herrmann. “The Predictability of Certain Optimum Finite-Impulse-Response Digital Filters.”IEEE®Transactions on Circuit Theory。Vol. 20, Number 4, 1973, pp. 401–408.

[2] Rabiner, Lawrence R., and Bernard Gold.Theory and Application of Digital Signal Processing.Englewood Cliffs, NJ: Prentice-Hall, 1975, pp. 156–157.

Extended Capabilities

Introduced before R2006a