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 Response =
new Vector(0);
Vector Weights =
new Vector(0);
int n;
double err;
double FS = 2;
//Sampling frequency
//Design a lowpass
n = OptimalFir.RemezLength(
new double[4] {0, 1500, 2000, 4000},
new double[2] {1, 0},
new double[2] {0.001, 0.001} ,Weights, 8000);
z.Size(n);
OptimalFir.remez( z,
new double[4] { 0, 1500, 2000, 4000 },
new double[2] { 1, 0 }, (
double []) Weights, TRemezType.rmtBandPass,
out err, 8000,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Lowpass",
false);
//Design a highpass
n = OptimalFir.RemezLength(
new double[4] { 0, 1500, 2000, 4000 },
new double[2] { 0, 1 },
new double[2] { 0.001, 0.001 }, Weights, 8000);
z.Size(n);
OptimalFir.remez(z,
new double[4] { 0, 1500, 2000, 4000 },
new double[2] { 0, 1 }, (
double[])Weights, TRemezType.rmtBandPass,
out err, 8000,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Highpass",
false);
//Design a bandpass (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0.15, 0.25, 0.45, 0.55, 1},
new double[3] {0, 1, 0},
new double[3] {0.001, 0.001, 0.001},Weights,FS);
z.Size(n);
OptimalFir.remez(z,
new double[6] {0, 0.15, 0.25, 0.45, 0.55, 1},
new double[3] {0, 1, 0}, (
double []) Weights, TRemezType.rmtBandPass,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Bandpass",
false);
//Design a bandstop (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] { 0, 0.15, 0.25, 0.45, 0.55, 1 },
new double[3] { 1, 0, 1 },
new double[3] { 0.001, 0.001, 0.001 }, Weights,FS) ;
z.Size(n);
OptimalFir.remez(z,
new double[6] { 0, 0.15, 0.25, 0.45, 0.55, 1 },
new double[3] { 1, 0, 1 }, (
double[]) Weights, TRemezType.rmtBandPass,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Bandstop",
false);
//Design a multiband (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[10] {0.00, 0.10, 0.20, 0.30, 0.40, 0.45, 0.55, 0.60, 0.70, 1.00},
new double[5] { 1, 0, 1, 0, 1 },
new double[5] { 0.001, 0.001, 0.001, 0.001, 0.001 }, Weights, FS);
z.Size(n);
OptimalFir.remez(z,
new double[10] {0.00, 0.10, 0.20, 0.30, 0.40,0.45, 0.55, 0.60, 0.70, 1.00},
new double[5] { 1, 0, 1, 0, 1 }, (
double[]) Weights, TRemezType.rmtBandPass,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Multibandpass",
false);
// Design a hilbert (type III) transformer (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.1, 0.9, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01},Weights,FS);
if (n % 2 == 0) n++;
//odd length type III filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.1, 0.9},
new double[1] {1},
new double[1] {1}, TRemezType.rmtHilbert,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Hilbert III",
false);
//Design a hilbert (type IV) transformer (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.1, 0.9, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01},Weights,FS);
if (n % 2 != 0) n++;
//even length type IV filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.1, 1},
new double[1] {1},
new double[1] {1}, TRemezType.rmtHilbert,
out err, 2,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Hilbert IV",
false);
//Design a differentiator (type III) (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.1, 0.9, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01},Weights,FS);
if (n % 2 == 0) n++;
//odd length type III filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.1, 0.9},
new double[1] {1},
new double[1] {1}, TRemezType.rmtDifferentiator,
out err, 2,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Differentiator III",
false);
//Design a differentiator (type IV) (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.1, 0.9, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01},Weights, FS);
if (n % 2 != 0) n++;
//even length type IV filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.1, 1},
new double[1] {1},
new double[1] {1}, TRemezType.rmtDifferentiator,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Differentiator IV",
false);
//Design a double differentiator (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.05, 0.95, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01},Weights, FS);
if (n %2 != 0) n++;
//even length type IV filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.05, 1},
new double[1] {1},
new double[1] {1}, TRemezType.rmtDoubleDifferentiator,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Double differentiator IV",
false);
//Design an integrator (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.05, 0.95, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01}, Weights, FS);
if (n %2 != 0) n++;
//even length type IV filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.05, 1},
new double[1] {1},
new double[1] {1}, TRemezType.rmtIntegrator,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null, Response, 8,
false, TSignalWindowType.wtRectangular, 0);
MtxVecTee.DrawIt(Response, "Integrator IV",
false);
//Design a double integrator (Sampling frequency = 2)
n = OptimalFir.RemezLength(
new double[6] {0, 0, 0.05, 0.95, 1, 1},
new double[3] {0,1,0},
new double[3] {0.01,0.01,0.01},Weights,FS);
if (n %2 != 0) n++;
//even length type IV filter
z.Size(n);
OptimalFir.remez(z,
new double[2] {0.05, 1},
new double[1] {1},
new double[1] {1}, TRemezType.rmtDoubleIntegrator,
out err, FS,
false);
SignalUtils.FrequencyResponse(z,
null,Response,8,
false,TSignalWindowType.wtRectangular,0);
MtxVecTee.DrawIt(Response,"Double integrator IV",
false);
}