blob: f674c853a8bcaebb83f3bbac476cb10f46c551af (
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
function [A,B] = sos2tf(sos, g)
//This function converts series second-order sections to direct H(z) = B(z)/A(z) form.
//Calling Sequence
//[B] = sos2tf(sos)
//[B] = sos2tf(sos, g)
//[B,A] = sos2tf(...)
//Parameters
//sos: matrix of real or complex numbers
//g: real or complex value, default value is 1
//Description
//This function converts series second-order sections to direct H(z) = B(z)/A(z) form.
//The input is the sos matrix and the second parameter is the overall gain, default value of which is 1.
//The output is a vector.
//Examples
//sos = [1 1 1 1 0 -1; -2 3 1 1 10 1];
////[b,a] = sos2tf(sos)
//a =
// -2 1 2 4 1
//b =
// 1 10 0 -10 -1
if(argn(2)<1 | argn(2)>2)
error("Wrong number of input arguments.")
end
if argn(2)==1 then
g=1;
end
[N,M] = size(sos);
if M~=6
error('sos matrix must be N by 6');
end
A = 1;
B = 1;
for i=1:N
A = conv(A, sos(i,1:3));
B = conv(B, sos(i,4:6));
end
nB = length(A);
while nB & A(nB)==0
A=A(1:nB-1);
nB=length(A);
end
nA = length(B);
while nA & B(nA)==0
B=B(1:nA-1);
nA=length(B);
end
A = A * g;
endfunction
|