# [Scipy-svn] r2227 - trunk/Lib/signal

scipy-svn at scipy.org scipy-svn at scipy.org
Sun Sep 24 02:11:24 CDT 2006

Author: rkern
Date: 2006-09-24 02:11:23 -0500 (Sun, 24 Sep 2006)
New Revision: 2227

Modified:
trunk/Lib/signal/waveforms.py
Log:
Fix #193.

Modified: trunk/Lib/signal/waveforms.py
===================================================================
--- trunk/Lib/signal/waveforms.py	2006-09-24 07:09:58 UTC (rev 2226)
+++ trunk/Lib/signal/waveforms.py	2006-09-24 07:11:23 UTC (rev 2227)
@@ -1,5 +1,3 @@
-## Automatically adapted for scipy Oct 21, 2005 by convertcode.py
-
# Author: Travis Oliphant
# 2003

@@ -143,16 +141,22 @@

t          --  array to evaluate waveform at
f0, f1, t1 --  frequency (in Hz) of waveform is f0 at t=0 and f1 at t=t1
+            Alternatively, if f0 is an array, then it forms the coefficients of
+            a polynomial (c.f. numpy.polval()) in t. The values in f1, t1,
+            method, and qshape are ignored.
method     --  linear, quadratic, or logarithmic frequency sweep
-        phi        --  optional phase
+        phi        --  optional phase in degrees
qshape     --  shape parameter for quadratic curve: concave or convex
"""
-    phi /= 360
-    if size(f0) > 1:   # Polynomial type
+
+    phi *= pi / 180
+    if size(f0) > 1:
+        # We were given a polynomial.
return cos(2*pi*polyval(polyint(f0),t)+phi)
if method in ['linear','lin','li']:
beta = (f1-f0)/t1
-        f = f0+beta*t
+        phase_angle = 2*pi * (f0*t + 0.5*beta*t*t)
if qshape == 'concave':
mxf = max(f0,f1)
@@ -162,14 +166,20 @@
mxf = max(f0,f1)
mnf = min(f0,f1)
f1,f0 = mnf, mxf
+        else:
+            raise ValueError("qshape must be either 'concave' or 'convex' but "
+                "a value of %r was given." % qshape)
beta = (f1-f0)/t1/t1
-        f = f0+beta*t*t
+        phase_angle = 2*pi * (f0*t + beta*t*t*t/3)
elif method in ['logarithmic','log','lo']:
if f1 <= f0:
-            raise ValueError, \
-                  "For a logarithmic sweep, f1=%f must be larger than f0=%f." \
-                  % (f1, f0)
+            raise ValueError(
+                "For a logarithmic sweep, f1=%f must be larger than f0=%f."
+                % (f1, f0))
beta = log10(f1-f0)/t1
-        f = f0+pow(10,beta*t)
+        phase_angle = 2*pi * (f0*t + pow(10,beta*t)/(beta*log(10)))
+    else:
+        raise ValueError("method must be 'linear', 'quadratic', or "
+            "'logarithmic' but a value of %r was given." % method)

-    return cos(2*pi*f*t+phi)
+    return cos(phase_angle + phi)