home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / octa21fb.zip / octave / SCRIPTS.ZIP / scripts.fat / signal / freqz.m < prev    next >
Text File  |  1999-12-24  |  3KB  |  108 lines

  1. ## Copyright (C) 1996, 1997 John W. Eaton
  2. ##
  3. ## This file is part of Octave.
  4. ##
  5. ## Octave is free software; you can redistribute it and/or modify it
  6. ## under the terms of the GNU General Public License as published by
  7. ## the Free Software Foundation; either version 2, or (at your option)
  8. ## any later version.
  9. ##
  10. ## Octave is distributed in the hope that it will be useful, but
  11. ## WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13. ## General Public License for more details.
  14. ##
  15. ## You should have received a copy of the GNU General Public License
  16. ## along with Octave; see the file COPYING.  If not, write to the Free
  17. ## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
  18. ## 02111-1307, USA.
  19.  
  20. ## -*- texinfo -*-
  21. ## @deftypefn {Function File} {[@var{h}, @var{w}] =} freqz (@var{b}, @var{a}, @var{n}, "whole")
  22. ## Return the complex frequency response @var{h} of the rational IIR filter
  23. ## whose numerator and denominator coefficients are @var{b} and @var{a},
  24. ## respectively.  The response is evaluated at @var{n} angular frequencies
  25. ## between 0 and
  26. ## @ifinfo
  27. ##  2*pi.
  28. ## @end ifinfo
  29. ## @iftex
  30. ## @tex
  31. ##  $2\pi$.
  32. ## @end tex
  33. ## @end iftex
  34. ## 
  35. ## @noindent
  36. ## The output value @var{w} is a vector of the frequencies.
  37. ## 
  38. ## If the fourth argument is omitted, the response is evaluated at
  39. ## frequencies between 0 and
  40. ## @ifinfo
  41. ##  pi.
  42. ## @end ifinfo
  43. ## @iftex
  44. ## @tex
  45. ##  $\pi$.
  46. ## @end tex
  47. ## @end iftex
  48. ## 
  49. ## If @var{n} is omitted, a value of 512 is assumed.
  50. ## 
  51. ## If @var{a} is omitted, the denominator is assumed to be 1 (this
  52. ## corresponds to a simple FIR filter).
  53. ## 
  54. ## For fastest computation, @var{n} should factor into a small number of
  55. ## small primes.
  56. ## @end deftypefn
  57.  
  58. ## Author: jwe ???
  59.  
  60. function [h, w] = freqz(b,...)
  61.  
  62.   if (nargin == 1)
  63.     ## Response of an FIR filter.
  64.     a = 1;
  65.     n = 512;
  66.     region = "half";
  67.   elseif (nargin == 2)
  68.     ## Response of an IIR filter
  69.     a = va_arg();
  70.     n = 512;
  71.     region = "half";
  72.   elseif (nargin == 3)
  73.     a = va_arg();
  74.     n = va_arg();
  75.     region = "half";
  76.   elseif (nargin == 4)
  77.     a = va_arg();
  78.     n = va_arg();
  79.     region = va_arg();
  80.   endif
  81.  
  82.   la = length(a);
  83.   a = reshape(a,1,la);
  84.   lb = length(b);
  85.   b = reshape(b,1,lb);
  86.  
  87.   k = max([la, lb]);
  88.  
  89.   if( n >= k)
  90.     if (strcmp(region,"whole"))
  91.       h = fft(postpad(b,n)) ./ fft(postpad(a,n));
  92.       w = 2*pi*[0:(n-1)]/n;
  93.     else
  94.       h = fft(postpad(b,2*n)) ./ fft(postpad(a,2*n));
  95.       h = h(1:n);
  96.       w = pi*[0:(n-1)]/n;
  97.     endif
  98.   else
  99.     if (strcmp(region,"whole"))
  100.       w = 2*pi*[0:(n-1)]/n;
  101.     else
  102.       w = pi*[0:(n-1)]/n;
  103.     endif
  104.     h = polyval(postpad(b,k),exp(j*w)) ./ polyval(postpad(a,k),exp(j*w));
  105.   endif
  106.  
  107. endfunction
  108.