using Dew.Math;
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 H =
new Vector(0);
Vector Response =
new Vector(0);
//Assumed sampling frequency = 2
double FS = 2;
double TransBW = 0.02;
//transition bandwidth in Hz.
double Ripple = 0.001;
//Lowpass filter
OptimalFir.RemezImpulse(H,
new double[2] {0.3,0.3+TransBW},Ripple, TFilterType.ftLowpass,1,FS,
false);
//Highpass filter
OptimalFir.RemezImpulse(H,
new double[2] {0.3,0.3+TransBW},Ripple, TFilterType.ftHighpass,1,FS,
false);
//Bandpass filter
OptimalFir.RemezImpulse(H,
new double[4] {0.3,0.3+TransBW, 0.5-TransBW,0.5},Ripple, TFilterType.ftBandpass,1,FS,
false);
//Bandstop filter
OptimalFir.RemezImpulse(H,
new double[4] {0.3,0.3+TransBW, 0.5-TransBW,0.5},Ripple, TFilterType.ftBandstop, 1,FS,
false);
// Type III Hilbert transformer
OptimalFir.RemezImpulse(H,
new double[2] {TransBW,1-TransBW},Ripple, TFilterType.ftHilbertIII,1,FS,
false);
// Type IV Hilbert transformer
OptimalFir.RemezImpulse(H,
new double[2] {TransBW,1},Ripple, TFilterType.ftHilbertIV,1,FS,
false);
// Type III linear phase differentiator filter
SignalUtils.KaiserImpulse(H,
new double[2] {1-TransBW,1},Ripple, TFilterType.ftDifferentiatorIII,1,FS,
false);
H.Scale(FS);
//Scale by sampling frequency
// Type IV linear phase differentiator filter
SignalUtils.KaiserImpulse( H,
new double[2] {1-TransBW,1},Ripple, TFilterType.ftDifferentiatorIV,1,FS,
false);
H.Scale(FS);
//Scale by sampling frequency
// Type III differentiator filter
OptimalFir.RemezImpulse(H,
new double[2] {0,1-TransBW},Ripple, TFilterType.ftDifferentiatorIII,1,FS,
false);
H.Scale(FS);
//Scale by sampling frequency
// Type IV differentiator filter
OptimalFir.RemezImpulse( H,
new double[2] {0,1-TransBW},Ripple, TFilterType.ftDifferentiatorIV,1,FS,
false);
H.Scale(FS);
//Scale by sampling frequency
// Type III 2x differentiator filter (remez)
OptimalFir.RemezImpulse(H,
new double[2] {0,1-TransBW},Ripple, TFilterType.ftDoubleDifferentiatorIII,1,FS,
false);
H.Scale(FS*FS);
//Scale by sampling frequency
// Type IV 2x differentiator filter (remez)
OptimalFir.RemezImpulse(H,
new double[2] {0,1-TransBW},Ripple, TFilterType.ftDoubleDifferentiatorIV,1,FS,
false);
H.Scale(FS*FS);
//Scale by sampling frequency
// Type III integrator filter (remez).';
OptimalFir.RemezImpulse(H,
new double[2] {TransBW,1-TransBW},Ripple, TFilterType.ftIntegratorIII,1,FS,
false);
H.Scale(1/FS);
//Scale by sampling frequency
// Type IV integrator filter (remez).';
OptimalFir.RemezImpulse(H,
new double[2] {TransBW,1},Ripple, TFilterType.ftIntegratorIV,1,FS,
false);
H.Scale(1/FS);
//Scale by sampling frequency
// Type III 2x integrator filter (remez).';
OptimalFir.RemezImpulse(H,
new double[2] {TransBW,1-TransBW},Ripple, TFilterType.ftDoubleIntegratorIII,1,FS,
false);
H.Scale(Math.Sqrt(1/FS));
//Scale by sampling frequency
// Type IV 2x integrator filter (remez).';
OptimalFir.RemezImpulse(H,
new double[2] {TransBW,1},Ripple, TFilterType.ftDoubleIntegratorIV,1,FS,
false);
H.Scale(Math.Sqrt(1/FS));
//Scale by sampling frequency
SignalUtils.FrequencyResponse(H,
null,Response,16,
false,TSignalWindowType.wtRectangular,0);
MtxVecTee.DrawIt(Response,"",
false);