Filter Design Results

Generated by:   http://www-users.cs.york.ac.uk/~fisher/mkfilter

Summary

You specified the following parameters:

Results

Command line: /www/usr/fisher/helpers/mkfilter -Bu -Bp -o 4 -a 2.4943310658e-03 8.3900226757e-02
raw alpha1    =   0.0024943311
raw alpha2    =   0.0839002268
warped alpha1 =   0.0024943821
warped alpha2 =   0.0858987622
gain at dc    :   mag = 0.000000000e+00
gain at centre:   mag = 4.206315673e+02   phase =  -0.3975185333 pi
gain at hf    :   mag = 0.000000000e+00

S-plane zeros:
	  0.0000000000 + j   0.0000000000	4 times

S-plane poles:
	 -0.1947983665 + j   0.4988673263
	 -0.4690657446 + j   0.2072088844
	 -0.4690657446 + j  -0.2072088844
	 -0.1947983665 + j  -0.4988673263
	 -0.0057450400 + j  -0.0147127145
	 -0.0150888672 + j  -0.0066654779
	 -0.0150888672 + j   0.0066654779
	 -0.0057450400 + j   0.0147127145

Z-plane zeros:
	  1.0000000000 + j   0.0000000000	4 times
	 -1.0000000000 + j   0.0000000000	4 times

Z-plane poles:
	  0.7329606736 + j   0.3938937950
	  0.6087159430 + j   0.1350066261
	  0.6087159430 + j  -0.1350066261
	  0.7329606736 + j  -0.3938937950
	  0.9941641166 + j  -0.0146277651
	  0.9850023986 + j  -0.0065659583
	  0.9850023986 + j   0.0065659583
	  0.9941641166 + j   0.0146277651

Recurrence relation:
y[n] = (  1 * x[n- 8])
     + (  0 * x[n- 7])
     + ( -4 * x[n- 6])
     + (  0 * x[n- 5])
     + (  6 * x[n- 4])
     + (  0 * x[n- 3])
     + ( -4 * x[n- 2])
     + (  0 * x[n- 1])
     + (  1 * x[n- 0])

     + ( -0.2581871070 * y[n- 8])
     + (  2.3986712969 * y[n- 7])
     + ( -9.8075938280 * y[n- 6])
     + ( 23.0508071081 * y[n- 5])
     + (-34.0624853847 * y[n- 4])
     + ( 32.4003775904 * y[n- 3])
     + (-19.3632759419 * y[n- 2])
     + (  6.6416862636 * y[n- 1])

Ansi ``C'' Code

/* Digital filter designed by mkfilter/mkshape/gencode   A.J. Fisher
   Command line: /www/usr/fisher/helpers/mkfilter -Bu -Bp -o 4 -a 2.4943310658e-03 8.3900226757e-02 -l */

#define NZEROS 8
#define NPOLES 8
#define GAIN   4.206315673e+02

static float xv[NZEROS+1], yv[NPOLES+1];

static void filterloop()
  { for (;;)
      { xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4]; xv[4] = xv[5]; xv[5] = xv[6]; xv[6] = xv[7]; xv[7] = xv[8]; 
        xv[8] = next input value / GAIN;
        yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3]; yv[3] = yv[4]; yv[4] = yv[5]; yv[5] = yv[6]; yv[6] = yv[7]; yv[7] = yv[8]; 
        yv[8] =   (xv[0] + xv[8]) - 4 * (xv[2] + xv[6]) + 6 * xv[4]
                     + ( -0.2581871070 * yv[0]) + (  2.3986712969 * yv[1])
                     + ( -9.8075938280 * yv[2]) + ( 23.0508071080 * yv[3])
                     + (-34.0624853850 * yv[4]) + ( 32.4003775900 * yv[5])
                     + (-19.3632759420 * yv[6]) + (  6.6416862636 * yv[7]);
        next output value = yv[8];
      }
  }

Download code and/or coefficients:

Magnitude (red) and phase (blue) vs. frequency

For an expanded view, enter frequency limits (as a fraction of the sampling rate) here:

Lower limit: Upper limit:

Impulse response

Step response

For a view on a different scale, enter upper time limit (integer number of samples) here:

Upper limit:

Tony Fisher fisher@minster.york.ac.uk