12345678910111213141516171819202122232425262728293031323334 |
- function y = fix_filter(x)
- % fix_filter (in case signal processing toolbox is not available).
- % filters data x with an eliptic passband between [300 3000] Hz.
- a = [1.0000 -2.3930 2.0859 -0.9413 0.2502];
- b = [0.1966 -0.0167 -0.3598 -0.0167 0.1966];
- x = x(:);
- len = size(x,1);
- b = b(:).';
- a = a(:).';
- nb = length(b);
- na = length(a);
- nfilt = max(nb,na);
- nfact = 3*(nfilt-1); % length of edge transients
- rows = [1:nfilt-1 2:nfilt-1 1:nfilt-2];
- cols = [ones(1,nfilt-1) 2:nfilt-1 2:nfilt-1];
- data = [1+a(2) a(3:nfilt) ones(1,nfilt-2) -ones(1,nfilt-2)];
- sp = sparse(rows,cols,data);
- zi = sp \ ( b(2:nfilt).' - a(2:nfilt).'*b(1) );
- y = [2*x(1)-x((nfact+1):-1:2);x;2*x(len)-x((len-1):-1:len-nfact)];
- y = filter(b,a,y,[zi*y(1)]);
- y = y(length(y):-1:1);
- y = filter(b,a,y,[zi*y(1)]);
- y = y(length(y):-1:1);
- y([1:nfact len+nfact+(1:nfact)]) = [];
- y = y.';
|