[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