You are here: Symbol Reference > Dew Namespace > Dew.Signal Namespace > Dew.Signal.Units Namespace > Classes > IIRFilters Class > IIRFilters Methods > ButterFilter Method > IIRFilters.ButterFilter Method (int, [In] double[], TFilterType, bool, [In] TMtx, [In] TVec, [In] TVec, out double)
Dew Signal for .NET
ContentsIndexHome
PreviousUpNext
IIRFilters.ButterFilter Method (int, [In] double[], TFilterType, bool, [In] TMtx, [In] TVec, [In] TVec, out double)

The resulting transfer function is returned in the state-space form with A,B,C,D variables.

Syntax
C#
Visual Basic
public static double ButterFilter(int Order, [In] double[] CutoffFreq, TFilterType FilterType, bool Analog, [In] TMtx A, [In] TVec B, [In] TVec C, out double d);

Design a digital bandstop filter with transition band between 0.2..0.3 and 0.6..0.7 Hz and with at least 50dB attenuation in the stopband. The passband should not have more then 0.2dB ripple. The sampling frequency is 2Hz. 

 

using Dew.Math; using Dew.Math.Editors; using Dew.Math.Units; using Dew.Signal; using Dew.Signal.Units; using Dew.Math.Tee; using Dew.Signal.Tee; private void button1_Click(object sender, EventArgs e) { Vector z = new Vector(0); Vector p = new Vector(0); Vector num = new Vector(0); Vector den = new Vector(0); Vector Response = new Vector(0); Vector FreqFr = new Vector(0); double[] WcArray = new double[2]; int Order; //design a fifth order filter. Order = IIRFilters.ButterOrder(new double[4] { 0.2, 0.3, 0.6, 0.7 }, 0.2, 50, TFilterType.ftBandstop, ref WcArray, true); //design analog protype IIRFilters.ButterFilter(Order, WcArray, TFilterType.ftBandstop, false, num, den, TIirFrequencyTransform.ftStateSpaceAnalog); // Alternative 1. Specify the order and the 3 dB frequencies explicitely: // // IIRFilters.ButterFilter(5, new double[2] {0.2,0.7}, TFilterType.ftBandstop,false,num,den,TIirFrequencyTransform.ftStateSpaceAnalog); // Alternative 2. Specifying the 3 dB frequencies explicitely // will result in 3 dB ripple (and not 0.2 as requested) in the passband, // but one coulde always move the 3 dB frequencies a little: // // IIRFilters.ButterFilter(5, new double[2] { 0.22, 0.68 }, TFilterType.ftBandstop, false, num, den, TIirFrequencyTransform.ftStateSpaceAnalog); // Alternative 3. Specifying the order explicitely // will not ensure 50 dB attenuation in the edges of the stopband, // but one can increase filter order: // // IIRFilters.ButterFilter(10, new double[2] { 0.22, 0.68 }, TFilterType.ftBandstop, false, num, den, TIirFrequencyTransform.ftStateSpaceAnalog); SignalUtils.FrequencyResponse(num, den, Response, 32, false, TSignalWindowType.wtRectangular, 0); MtxVecTee.DrawIt(Response, "Frequency response", false);
Copyright (c) 1999-2024 by Dew Research. All rights reserved.
What do you think about this topic? Send feedback!