- #1

Xatax

- 1

- 0

I want to design a digital butterworth lowpass filter of nth order, with only freedom of choice to user being order of the filter and the cut off frequency, i already have a 1st order low pass.

Code:

Code:

Code:

```
T = 1/(2*pi*this.fc);
this.A = -1/T;
this.B = 1/T;
this.C = 1;
this.D = 0;
```

This is a very basic lowpass PT1 filter, i take the state space matrix, descrtize it and apply it to my signal. now i want to extend my library to butterworth. I am trying to use as many minimal MATLAB commands as possible. So i thought it's better to derive in hand before implementing it. i wanted to know how to deal with damping ratio as the order is progressed.

When i was searching for answer, i came across wiki of butter worth filter:

I can just hard code this, but have they considered damping ratio and how do i covert this to state space.Or, i found another way, where i find zeros and poles based on the order of the filter.

Code:

```
% Poles are on the unit circle in the left-half plane.
n = varargin{1} % order of the filter
fc = varargin{2} % cut off frequency
Wn = (fc*2)/Fs % Fs is sampling frequency, normalizing the cut off frequency
z = [];
p = exp(1i*(pi*(1:2:n-1)/(2*n) + pi/2)); %n is the order of the filter
p = [p; conj(p)];
k = real(prod(-p)); %product of an array element´
%When we get zpk, we just convert them to state space.
[a,b,c,d] = zp2ss(z,p,k);
%Now transforming the abcd matrix to the given cut off frequency
[a,b,c,d] = lp2lp(a,b,c,d,Wn);
```

The only problem is while applying the cut off frequency, '[a,b,c,d] = lp2lp(a,b,c,d,Wn);' should apply normalized one or in rads/sec or just in Hz. Even though i tried all of them still would like i to ask where i am going wrong