diff options
Diffstat (limited to 'macros/filter1.sci')
-rw-r--r-- | macros/filter1.sci | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/macros/filter1.sci b/macros/filter1.sci new file mode 100644 index 0000000..3c32928 --- /dev/null +++ b/macros/filter1.sci @@ -0,0 +1,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 |