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
58
59
60
61
62
63
64
65
66
67
|
function [Y, SF] = filter1 (B, A, X, SI, DIM)
//Apply a 1-D digital filter to the data X.
//Calling Sequence
//Y = filter1(B, A, X)
//[Y, SF] = filter1(B, A, X, SI)
//[Y, SF] = filter1(B, A, X, [], DIM)
//[Y, SF] = filter1(B, A, X, SI, DIM)
//Parameters
//B: Matrix or Integer
//A: Matrix or Integer
//X: Matrix or Integer
//Description
//'filter' returns the solution to the following linear, time-invariant difference equation:
//
// N M
//
// SUM a(k+1) y(n-k) = SUM b(k+1) x(n-k) for 1<=n<=length(x)
//
// k=0 k=0
//
//where N=length(a)-1 and M=length(b)-1. The result is calculated over the first non-singleton dimension of X or over DIM if supplied.
//
//An equivalent form of the equation is:
//
// N M
//
// y(n) = - SUM c(k+1) y(n-k) + SUM d(k+1) x(n-k) for 1<=n<=length(x)
//
// k=1 k=0
//
// where c = a/a(1) and d = b/a(1).
//Examples
//filter([1,2,3], [3,4,5], [5,6,7])
//ans =
// 1.6666667 3.1111111 4.4074074
funcprot(0);
lhs = argn(1)
rhs = argn(2)
if (rhs < 3 | rhs > 5)
error("Wrong number of input arguments.")
end
select(rhs)
case 3 then
if(lhs==1)
Y=callOctave("filter",B,A,X)
elseif(lhs==2)
[Y, SF] = callOctave("filter",B,A,X)
else
error("Wrong number of output arguments.")
end
case 4 then
if(lhs==2)
[Y, SF] = callOctave("filter",B,A,X,SI)
else
error("Wrong number of output arguments.")
end
case 5 then
if(lhs==2)
[Y, SF] = callOctave("filter",B,A,X,SI,DIM)
else
error("Wrong number of output arguments.")
end
end
endfunction
|