blob: 59e6ef95f9e33d0941111fb8189e9c6c9e9598a0 (
plain)
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
35
36
37
|
// Splitting a polynomial B(z)
// 10.3
// Splits a polynomial B into good, nonminimum with
// positive real & with negative real parts.
// All are returned in polynomial form.
// Gain is returned in Kp and delay in k.
function [Kp,k,Bg,Bnmp,Bm] = imcsplit(B,polynomial)
k = 0;
Kp = 1;
if(polynomial)
rts = roots(B);
Kp = sum(B)/sum(coeff(poly(rts,'z')));
else
rts = B;
end
Bg = 1; Bnmp = 1; Bm = 1;
for i = 1:length(rts),
rt = rts(i);
if rt == 0,
k = k+1;
elseif (abs(rt)<1 & real(rt)>=0)
Bg = convol(Bg,[1 -rt]);
elseif (abs(rt)>=1 & real(rt)>=0)
Bnmp = convol(Bnmp,[1 -rt]);
else
Bm = convol(Bm,[1 -rt]);
end
end
|