-
Notifications
You must be signed in to change notification settings - Fork 54
/
clans5.m
executable file
·34 lines (32 loc) · 827 Bytes
/
clans5.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function NTF=clans5(order,OSR,Q,rmax,opt)
%Version of clans for MATLAB 5 or lower
% Create the initial guess
NTF = synthesizeNTF(order,OSR,opt,1+Q,0);
Hz = NTF.z{1};
x = zeros(1,order);
odd = rem(order,2);
poles = cplxpair(NTF.p{1}); poles=poles(end:-1:1);
if odd
z = poles(1)/rmax;
if any(abs(z))>1 %project poles outside rmax onto the circle
z = z./abs(z);
end
s = (z-1)./(z+1);
x(1)= sqrt(-s);
end
for i=odd+1:2:order
z = poles(i:i+1)/rmax;
if any(abs(z))>1 %project poles outside rmax onto the circle
z = z./abs(z);
end
s = (z-1)./(z+1);
coeffs=poly(s);
wn = sqrt(coeffs(3));
zeta = coeffs(2)/(2*wn);
x(i) = sqrt(zeta);
x(i+1) = sqrt(wn);
end
% Run the optimizer
x=constr('dsclansObj',x,[],[],[],[],order,OSR,Q,rmax,Hz);
NTF = dsclansNTF(x,order,rmax,Hz);
return