diff scripts/signal/freqz_plot.m @ 18518:694e8f0b3862 stable

freqz: Make frequency response plot visually compatible with Matlab (bug #41464) * freqz_plot.m: Eliminate the extraneous "pass band" subplot for visual compatibility with Matlab. Use y-axis labels instead of legends. Always autoscale the y-axis. Label the frequency axis in units of normalized radians or Hz depending on a new optional argument. * freqz.m: Tell freqz_plot whether the frequency vector is in normalized radians or Hz.
author Mike Miller <mtmiller@ieee.org>
date Thu, 13 Feb 2014 00:00:10 -0500
parents d63878346099
children 9d59bc3dc12d
line wrap: on
line diff
--- a/scripts/signal/freqz_plot.m
+++ b/scripts/signal/freqz_plot.m
@@ -17,15 +17,18 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
-## @deftypefn {Function File} {} freqz_plot (@var{w}, @var{h})
-## Plot the pass band, stop band and phase response of @var{h}.
+## @deftypefn  {Function File} {} freqz_plot (@var{w}, @var{h})
+## @deftypefnx {Function File} {} freqz_plot (@var{w}, @var{h}, @var{freq_hz})
+## Plot the pass band, stop band and phase response of @var{h}.  If the
+## optional @var{freq_norm} argument is true, the frequency vector @var{w}
+## is in units of normalized radians and the x-axis is labeled as such.
 ## @end deftypefn
 
 ## Author: Paul Kienzle <pkienzle@users.sf.net>
 
-function freqz_plot (w, h)
+function freqz_plot (w, h, freq_norm = false)
 
-  if (nargin != 2)
+  if (nargin < 2 || nargin > 3)
     print_usage ();
   endif
 
@@ -38,30 +41,26 @@
 
   mag = 20 * log10 (abs (h));
   phase = unwrap (arg (h));
-  maxmag = max (mag);
 
-  subplot (3, 1, 1);
-  plot (w, mag);
-  grid ("on");
-  legend ("Pass band (dB)");
-  axis ([w(1), w(n), maxmag-3, maxmag], "labely");
+  if (freq_norm)
+    x_label = "Normalized Frequency (\\times\\pi rad/sample)";
+  else
+    x_label = "Frequency (Hz)";
+  endif
 
-  subplot (3, 1, 2);
+  subplot (2, 1, 1);
   plot (w, mag);
   grid ("on");
-  legend ("Stop band (dB)");
-  if (maxmag - min (mag) > 100)
-    axis ([w(1), w(n), maxmag-100, maxmag], "labely");
-  else
-    axis ("autoy", "labely");
-  endif
+  axis ([w(1), w(n)], "autoy");
+  xlabel (x_label);
+  ylabel ("Magnitude (dB)");
 
-  subplot (3, 1, 3);
+  subplot (2, 1, 2);
   plot (w, phase*360/(2*pi));
   grid ("on");
-  legend ("Phase (degrees)");
-  xlabel ("Frequency");
-  axis ([w(1), w(n)], "autoy", "label");
+  axis ([w(1), w(n)], "autoy");
+  xlabel (x_label);
+  ylabel ("Phase (degrees)");
 
 endfunction