[Scipy-svn] r6338 - in trunk/scipy/signal: . tests

scipy-svn at scipy.org scipy-svn at scipy.org
Thu Apr 22 20:21:58 EDT 2010


Author: warren.weckesser
Date: 2010-04-22 19:21:57 -0500 (Thu, 22 Apr 2010)
New Revision: 6338

Modified:
   trunk/scipy/signal/tests/test_waveforms.py
   trunk/scipy/signal/waveforms.py
Log:
BUG: signal: Handle integer arguments in chirp() and gausspulse() correctly (ticket #1156).

Modified: trunk/scipy/signal/tests/test_waveforms.py
===================================================================
--- trunk/scipy/signal/tests/test_waveforms.py	2010-04-22 13:41:25 UTC (rev 6337)
+++ trunk/scipy/signal/tests/test_waveforms.py	2010-04-23 00:21:57 UTC (rev 6338)
@@ -174,7 +174,49 @@
         t = np.linspace(0, t1, 10)        
         assert_raises(ValueError, waveforms.chirp, t, f0, t1, f1, method)
 
+    def test_integer_t1(self): 
+        f0 = 10.0
+        f1 = 20.0
+        t = np.linspace(-1, 1, 11)
+        t1 = 3.0
+        float_result = waveforms.chirp(t, f0, t1, f1)
+        t1 = 3
+        int_result = waveforms.chirp(t, f0, t1, f1)
+        err_msg = "Integer input 't1=3' gives wrong result" 
+        assert_equal(int_result, float_result, err_msg=err_msg)
 
+    def test_integer_f0(self): 
+        f1 = 20.0
+        t1 = 3.0
+        t = np.linspace(-1, 1, 11)
+        f0 = 10.0
+        float_result = waveforms.chirp(t, f0, t1, f1)
+        f0 = 10
+        int_result = waveforms.chirp(t, f0, t1, f1)
+        err_msg = "Integer input 'f0=10' gives wrong result" 
+        assert_equal(int_result, float_result, err_msg=err_msg) 
+
+    def test_integer_f1(self):
+        f0 = 10.0
+        t1 = 3.0
+        t = np.linspace(-1, 1, 11)
+        f1 = 20.0
+        float_result = waveforms.chirp(t, f0, t1, f1)
+        f1 = 20
+        int_result = waveforms.chirp(t, f0, t1, f1)
+        err_msg = "Integer input 'f1=20' gives wrong result" 
+        assert_equal(int_result, float_result, err_msg=err_msg) 
+
+    def test_integer_all(self):
+        f0 = 10
+        t1 = 3
+        f1 = 20
+        t = np.linspace(-1, 1, 11)
+        float_result = waveforms.chirp(t, float(f0), float(t1), float(f1))
+        int_result = waveforms.chirp(t, f0, t1, f1)
+        err_msg = "Integer input 'f0=10, t1=3, f1=20' gives wrong result" 
+        assert_equal(int_result, float_result, err_msg=err_msg) 
+
 class TestSweepPoly(TestCase):
 
     def test_sweep_poly_quad1(self):
@@ -242,5 +284,33 @@
         abserr = np.max(np.abs(f - expected))
         assert_(abserr < 1e-6)
 
+
+class TestGaussPulse(TestCase):
+    
+    def test_integer_fc(self):
+        float_result = waveforms.gausspulse('cutoff', fc=1000.0)
+        int_result = waveforms.gausspulse('cutoff', fc=1000)
+        err_msg = "Integer input 'fc=1000' gives wrong result"
+        assert_equal(int_result, float_result, err_msg=err_msg)
+
+    def test_integer_bw(self):
+        float_result = waveforms.gausspulse('cutoff', bw=1.0)
+        int_result = waveforms.gausspulse('cutoff', bw=1)
+        err_msg = "Integer input 'bw=1' gives wrong result"
+        assert_equal(int_result, float_result, err_msg=err_msg)
+
+    def test_integer_bwr(self):
+        float_result = waveforms.gausspulse('cutoff', bwr=-6.0)
+        int_result = waveforms.gausspulse('cutoff', bwr=-6)
+        err_msg = "Integer input 'bwr=-6' gives wrong result"
+        assert_equal(int_result, float_result, err_msg=err_msg)
+
+    def test_integer_tpr(self):
+        float_result = waveforms.gausspulse('cutoff', tpr=-60.0)
+        int_result = waveforms.gausspulse('cutoff', tpr=-60)
+        err_msg = "Integer input 'tpr=-60' gives wrong result"
+        assert_equal(int_result, float_result, err_msg=err_msg)
+
+
 if __name__ == "__main__":
     run_module_suite()

Modified: trunk/scipy/signal/waveforms.py
===================================================================
--- trunk/scipy/signal/waveforms.py	2010-04-22 13:41:25 UTC (rev 6337)
+++ trunk/scipy/signal/waveforms.py	2010-04-23 00:21:57 UTC (rev 6338)
@@ -116,18 +116,18 @@
 
     # exp(-a t^2) <->  sqrt(pi/a) exp(-pi^2/a * f^2)  = g(f)
 
-    ref = pow(10, bwr/ 20)
+    ref = pow(10.0, bwr / 20.0)
     # fdel = fc*bw/2:  g(fdel) = ref --- solve this for a
     #
     # pi^2/a * fc^2 * bw^2 /4=-log(ref)
-    a = -(pi*fc*bw)**2 / (4*log(ref))
+    a = -(pi*fc*bw)**2 / (4.0*log(ref))
 
     if t == 'cutoff': # compute cut_off point
         #  Solve exp(-a tc**2) = tref  for tc
         #   tc = sqrt(-log(tref) / a) where tref = 10^(tpr/20)
         if tpr >= 0:
             raise ValueError, "Reference level for time cutoff must be < 0 dB"
-        tref = pow(10, tpr / 20)
+        tref = pow(10.0, tpr / 20.0)
         return sqrt(-log(tref)/a)
 
     yenv = exp(-a*t*t)
@@ -242,6 +242,9 @@
     chirp_phase for a description of the arguments.
 
     """
+    f0 = float(f0)
+    t1 = float(t1)
+    f1 = float(f1)
     if method in ['linear', 'lin', 'li']:
         beta = (f1 - f0) / t1
         phase = 2*pi * (f0*t + 0.5*beta*t*t)




More information about the Scipy-svn mailing list