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);