fix_filter.m 865 B

12345678910111213141516171819202122232425262728293031323334
  1. function y = fix_filter(x)
  2. % fix_filter (in case signal processing toolbox is not available).
  3. % filters data x with an eliptic passband between [300 3000] Hz.
  4. a = [1.0000 -2.3930 2.0859 -0.9413 0.2502];
  5. b = [0.1966 -0.0167 -0.3598 -0.0167 0.1966];
  6. x = x(:);
  7. len = size(x,1);
  8. b = b(:).';
  9. a = a(:).';
  10. nb = length(b);
  11. na = length(a);
  12. nfilt = max(nb,na);
  13. nfact = 3*(nfilt-1); % length of edge transients
  14. rows = [1:nfilt-1 2:nfilt-1 1:nfilt-2];
  15. cols = [ones(1,nfilt-1) 2:nfilt-1 2:nfilt-1];
  16. data = [1+a(2) a(3:nfilt) ones(1,nfilt-2) -ones(1,nfilt-2)];
  17. sp = sparse(rows,cols,data);
  18. zi = sp \ ( b(2:nfilt).' - a(2:nfilt).'*b(1) );
  19. y = [2*x(1)-x((nfact+1):-1:2);x;2*x(len)-x((len-1):-1:len-nfact)];
  20. y = filter(b,a,y,[zi*y(1)]);
  21. y = y(length(y):-1:1);
  22. y = filter(b,a,y,[zi*y(1)]);
  23. y = y(length(y):-1:1);
  24. y([1:nfact len+nfact+(1:nfact)]) = [];
  25. y = y.';