summaryrefslogtreecommitdiff
path: root/macros/filter1.sci
blob: 3c32928f476759046667f464b740eac15483bb2e (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
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