# firceqrip

Constrained equiripple FIR filter

## Syntax

```B = firceqrip(n,Fo,DEV) B = firceqrip(...,'slope',r) B = firceqrip('minorder',[Fp Fst],DEV) B = firceqrip(...,'passedge') B = firceqrip(...,'stopedge') B = firceqrip(...,'high') B = firceqrip(...,'min') B = firceqrip(...,'invsinc',C) B = firceqrip(...,'invdiric',C) ```

## Description

`B = firceqrip(n,Fo,DEV)` designs an order `n` filter (filter length equal `n` + 1) lowpass FIR filter with linear phase.

`firceqrip` produces the same equiripple lowpass filters that `firpm` produces using the Parks-McClellan algorithm. The difference is how you specify the filter characteristics for the function.

The input argument `Fo` specifies the frequency at the upper edge of the passband in normalized frequency (0<`Fo`<1). The two-element vector `dev` specifies the peak or maximum error allowed in the passband and stopbands. Enter ```[d1 d2]``` for `dev` where `d1` sets the passband error and `d2` sets the stopband error.

`B = firceqrip(...,'slope',r)` uses the input keyword '`slope`' and input argument `r` to design a filter with a nonequiripple stopband. `r` is specified as a positive constant and determines the slope of the stopband attenuation in dB/normalized frequency. Greater values of `r` result in increased stopband attenuation in dB/normalized frequency.

`B = firceqrip('minorder',[Fp Fst],DEV)` designs filter with the minimum number of coefficients required to meet the deviations in `DEV` = [d1 d2] while having a transition width no greater than `Fst``Fp`, the difference between the stopband and passband edge frequencies. You can specify `'mineven'` or `'minodd'` instead of `'minorder'` to design minimum even order (odd length) or minimum odd order (even length) filters, respectively. The `'minorder'` option does not apply when you specify the `'min'` (minimum-phase), `'invsinc'`, or the `'invdiric'` options.

`B = firceqrip(...,'passedge')` designs a filter where `Fo` specifies the frequency at which the passband starts to rolloff.

`B = firceqrip(...,'stopedge')` designs a filter where `Fo` specifies the frequency at which the stopband begins.

`B = firceqrip(...,'high')` designs a high pass FIR filter instead of a lowpass filter.

`B = firceqrip(...,'min')` designs a minimum-phase filter.

`B = firceqrip(...,'invsinc',C)` designs a lowpass filter whose magnitude response has the shape of an inverse sinc function. This may be used to compensate for sinc-like responses in the frequency domain such as the effect of the zero-order hold in a D/A converter. The amount of compensation in the passband is controlled by `C`, which is specified as a scalar or two-element vector. The elements of `C` are specified as follows:

• If `C` is supplied as a real-valued scalar or the first element of a two-element vector, `firceqrip` constructs a filter with a magnitude response of 1/sinc(`C`*`pi`*`F`) where `F` is the normalized frequency.

• If `C` is supplied as a two-element vector, the inverse-sinc shaped magnitude response is raised to the positive power `C(2)`. If we set `P=C(2)`, `firceqrip` constructs a filter with a magnitude response 1/sinc(`C`*`pi`*`F`)P.

If this FIR filter is used with a cascaded integrator-comb (CIC) filter, setting `C(2)` equal to the number of stages compensates for the multiplicative effect of the successive sinc-like responses of the CIC filters.

Note

Since the value of the inverse sinc function becomes unbounded at `C=1/F`, the value of `C` should be greater the reciprocal of the passband edge frequency. This can be expressed as `Fo<1/C`. For users familiar with CIC decimators, `C` is equal to 1/2 the product of the differential delay and decimation factor.

`B = firceqrip(...,'invdiric',C)` designs a lowpass filter with a passband that has the shape of an inverse Dirichlet sinc function. The frequency response of the inverse Dirichlet sinc function is given by $\left\{rC{\left(\frac{\mathrm{sin}\left(f/2r\right)}{\mathrm{sin}\left(Cf/2\right)}\right\}}^{p}$where C, r, and p are scalars. The input `C` can be a scalar or vector containing 2 or 3 elements. If `C` is a scalar, `p` and `r` equal 1. If `C` is a two-element vector, the first element is `C` and the second element is `p`, `[C p]`. If `C` is a three-element vector, the third element is `r`, ```[C p r]```.

## Examples

To introduce a few of the variations on FIR filters that you design with `firceqrip`, these five examples cover both the default syntax `b = firceqrip(n,wo,del)` and some of the optional input arguments. For each example, the input arguments `n`, `wo`, and `del` remain the same.

### Filter design using `firceqrip`

Design a 30th order FIR filter using `firceqrip`.

`b = firceqrip(30,0.4,[0.05 0.03]); fvtool(b)` Design a minimum order FIR filter using `firceqrip`. The passband edge and stopband edge frequencies are 0.35$\pi$ and 0.45$\pi$ rad/sample. The allowed deviations are 0.02 and 1e-4.

`b = firceqrip('minorder',[0.35 0.45],[0.02 1e-4]); fvtool(b)` Design a 30th order FIR filter with the `stopedge` keyword to define the response at the edge of the filter stopband.

`b = firceqrip(30,0.4,[0.05 0.03],'stopedge'); fvtool(b)` Design a 30th order FIR filter with the `slope` keyword and r = 20.

`b = firceqrip(30,0.4,[0.05 0.03],'slope',20,'stopedge'); fvtool(b)` Design a 30th order FIR filter defining the stopband and specifying that the resulting filter is minimum phase with the `min` keyword.

`b = firceqrip(30,0.4,[0.05 0.03],'stopedge','min'); fvtool(b)` Comparing this filter to the filter in Figure 1. The cutoff frequency `wo = 0.4` now applies to the edge of the stopband rather than the point at which the frequency response magnitude is 0.5.

Viewing the zero-pole plot shown here reveals this is a minimum phase FIR filter - the zeros lie on or inside the unit circle, z = 1

`fvtool(b,'polezero')` Design a 30th order FIR filter with the `invsinc` keyword to shape the filter passband with an inverse sinc function.

`b = firceqrip(30,0.4,[0.05 0.03],'invsinc',[2 1.5]); fvtool(b)` The inverse sinc function being applied is defined as 1/sinc(2*w)^1.5.

### Inverse-Dirichlet-Sinc-Shaped Passband

Design two order 30 constrained equiripple FIR filters with inverse-Dirichlet-sinc-shaped passbands. The cutoff frequency in both designs is pi/4 radians/sample. Set `C=1` in one design `C=2` in the second design. The maximum passband and stopband ripple is 0.05. Set `p=1` in one design and `p=2` in the second design.

Design the filters.

```b1 = firceqrip(30,0.25,[0.05 0.05],'invdiric',[1 1]); b2 = firceqrip(30,0.25,[0.05 0.05],'invdiric',[2 2]);```

Obtain the filter frequency responses using `freqz`. Plot the magnitude responses.

``` [h1,~] = freqz(b1,1); [h2,w] = freqz(b2,1); plot(w,abs(h1)); hold on; plot(w,abs(h2),'r'); axis([0 pi 0 1.5]); xlabel('Radians/sample'); ylabel('Magnitude'); legend('C=1 p=1','C=2 p=2');``` Inspect the stopband ripple in the design with `C=1` and `p=1`. The constrained design sets the maximum ripple to be 0.05. Zoom in on the stopband from the cutoff frequency of pi/4 radians/sample to 3pi/4 radians/sample.

``` figure; plot(w,abs(h1)); set(gca,'xlim',[pi/4 3*pi/4]); grid on;```
{"ft_lang_label":"__label__en","ft_lang_prob":0.69333506,"math_prob":0.9948553,"size":6869,"snap":"2020-45-2020-50","text_gpt3_token_len":2064,"char_repetition_ratio":0.16504006,"word_repetition_ratio":0.048552755,"special_character_ratio":0.27092737,"punctuation_ratio":0.1691678,"nsfw_num_words":0,"has_unicode_error":false,"math_prob_llama3":0.99342644,"pos_list":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"im_url_duplicate_count":[null,2,null,2,null,2,null,2,null,2,null,2,null,2,null,2,null,2,null],"WARC_HEADER":"{\"WARC-Type\":\"response\",\"WARC-Date\":\"2020-10-19T17:28:28Z\",\"WARC-Record-ID\":\"<urn:uuid:73c12b12-76de-4447-8299-8982eb8c5277>\",\"Content-Length\":\"84793\",\"Content-Type\":\"application/http; msgtype=response\",\"WARC-Warcinfo-ID\":\"<urn:uuid:ed0854d6-cbd8-41d3-821e-5c8ff1ad32d4>\",\"WARC-Concurrent-To\":\"<urn:uuid:c27bd11d-430a-45d3-93bb-420619aaa5c1>\",\"WARC-IP-Address\":\"23.212.144.59\",\"WARC-Target-URI\":\"https://ch.mathworks.com/help/dsp/ref/firceqrip.html\",\"WARC-Payload-Digest\":\"sha1:DOQYLH2AM5MOZRXRV3NKYKBVGFGVDMJ4\",\"WARC-Block-Digest\":\"sha1:RCP6B4WC5VSLTGORVRLIVNADHSIM5YHV\",\"WARC-Identified-Payload-Type\":\"text/html\",\"warc_filename\":\"/cc_download/warc_2020/CC-MAIN-2020-45/CC-MAIN-2020-45_segments_1603107863364.0_warc_CC-MAIN-20201019145901-20201019175901-00605.warc.gz\"}"}