4
4
import six
5
5
6
6
import tempfile
7
+ import warnings
7
8
8
9
from numpy .testing import (assert_allclose , assert_almost_equal ,
9
10
assert_array_equal )
@@ -359,46 +360,46 @@ def test_csv2rec_names_with_comments(self):
359
360
assert len (array .dtype ) == 3
360
361
361
362
def test_csv2rec_usdate (self ):
362
- self .fd .write ('01/11/14\n ' +
363
- '03/05/76 12:00:01 AM\n ' +
364
- '07/09/83 5:17:34 PM\n ' +
365
- '06/20/2054 2:31:45 PM\n ' +
366
- '10/31/00 11:50:23 AM\n ' )
363
+ self .fd .write ('01/11/14\n '
364
+ '03/05/76 12:00:01 AM\n '
365
+ '07/09/83 5:17:34 PM\n '
366
+ '06/20/2054 2:31:45 PM\n '
367
+ '10/31/00 11:50:23 AM\n ' )
367
368
expected = [datetime .datetime (2014 , 1 , 11 , 0 , 0 ),
368
- datetime .datetime (1976 , 3 , 5 , 0 , 0 , 1 ),
369
- datetime .datetime (1983 , 7 , 9 , 17 , 17 , 34 ),
370
- datetime .datetime (2054 , 6 , 20 , 14 , 31 , 45 ),
371
- datetime .datetime (2000 , 10 , 31 , 11 , 50 , 23 )]
369
+ datetime .datetime (1976 , 3 , 5 , 0 , 0 , 1 ),
370
+ datetime .datetime (1983 , 7 , 9 , 17 , 17 , 34 ),
371
+ datetime .datetime (2054 , 6 , 20 , 14 , 31 , 45 ),
372
+ datetime .datetime (2000 , 10 , 31 , 11 , 50 , 23 )]
372
373
self .fd .seek (0 )
373
374
array = mlab .csv2rec (self .fd , names = 'a' )
374
375
assert_array_equal (array ['a' ].tolist (), expected )
375
376
376
377
def test_csv2rec_dayfirst (self ):
377
378
self .fd .write ('11/01/14\n ' +
378
- '05/03/76 12:00:01 AM\n ' +
379
- '09/07/83 5:17:34 PM\n ' +
380
- '20/06/2054 2:31:45 PM\n ' +
381
- '31/10/00 11:50:23 AM\n ' )
379
+ '05/03/76 12:00:01 AM\n '
380
+ '09/07/83 5:17:34 PM\n '
381
+ '20/06/2054 2:31:45 PM\n '
382
+ '31/10/00 11:50:23 AM\n ' )
382
383
expected = [datetime .datetime (2014 , 1 , 11 , 0 , 0 ),
383
- datetime .datetime (1976 , 3 , 5 , 0 , 0 , 1 ),
384
- datetime .datetime (1983 , 7 , 9 , 17 , 17 , 34 ),
385
- datetime .datetime (2054 , 6 , 20 , 14 , 31 , 45 ),
386
- datetime .datetime (2000 , 10 , 31 , 11 , 50 , 23 )]
384
+ datetime .datetime (1976 , 3 , 5 , 0 , 0 , 1 ),
385
+ datetime .datetime (1983 , 7 , 9 , 17 , 17 , 34 ),
386
+ datetime .datetime (2054 , 6 , 20 , 14 , 31 , 45 ),
387
+ datetime .datetime (2000 , 10 , 31 , 11 , 50 , 23 )]
387
388
self .fd .seek (0 )
388
389
array = mlab .csv2rec (self .fd , names = 'a' , dayfirst = True )
389
390
assert_array_equal (array ['a' ].tolist (), expected )
390
391
391
392
def test_csv2rec_yearfirst (self ):
392
- self .fd .write ('14/01/11\n ' +
393
- '76/03/05 12:00:01 AM\n ' +
394
- '83/07/09 5:17:34 PM\n ' +
395
- '2054/06/20 2:31:45 PM\n ' +
396
- '00/10/31 11:50:23 AM\n ' )
393
+ self .fd .write ('14/01/11\n '
394
+ '76/03/05 12:00:01 AM\n '
395
+ '83/07/09 5:17:34 PM\n '
396
+ '2054/06/20 2:31:45 PM\n '
397
+ '00/10/31 11:50:23 AM\n ' )
397
398
expected = [datetime .datetime (2014 , 1 , 11 , 0 , 0 ),
398
- datetime .datetime (1976 , 3 , 5 , 0 , 0 , 1 ),
399
- datetime .datetime (1983 , 7 , 9 , 17 , 17 , 34 ),
400
- datetime .datetime (2054 , 6 , 20 , 14 , 31 , 45 ),
401
- datetime .datetime (2000 , 10 , 31 , 11 , 50 , 23 )]
399
+ datetime .datetime (1976 , 3 , 5 , 0 , 0 , 1 ),
400
+ datetime .datetime (1983 , 7 , 9 , 17 , 17 , 34 ),
401
+ datetime .datetime (2054 , 6 , 20 , 14 , 31 , 45 ),
402
+ datetime .datetime (2000 , 10 , 31 , 11 , 50 , 23 )]
402
403
self .fd .seek (0 )
403
404
array = mlab .csv2rec (self .fd , names = 'a' , yearfirst = True )
404
405
assert_array_equal (array ['a' ].tolist (), expected )
@@ -1629,6 +1630,18 @@ def test_csd(self):
1629
1630
assert_allclose (fsp , freqs , atol = 1e-06 )
1630
1631
assert spec .shape == freqs .shape
1631
1632
1633
+ def test_csd_padding (self ):
1634
+ """Test zero padding of csd(). """
1635
+ if self .NFFT_density is None : # for derived classes
1636
+ return
1637
+ sargs = dict (x = self .y , y = self .y + 1 , Fs = self .Fs , window = mlab .window_none ,
1638
+ sides = self .sides )
1639
+
1640
+ spec0 , _ = mlab .csd (NFFT = self .NFFT_density , ** sargs )
1641
+ spec1 , _ = mlab .csd (NFFT = self .NFFT_density * 2 , ** sargs )
1642
+ assert_almost_equal (np .sum (np .conjugate (spec0 )* spec0 ).real ,
1643
+ np .sum (np .conjugate (spec1 / 2 )* spec1 / 2 ).real )
1644
+
1632
1645
def test_psd (self ):
1633
1646
freqs = self .freqs_density
1634
1647
spec , fsp = mlab .psd (x = self .y ,
@@ -2103,6 +2116,15 @@ def test_specgram_phase(self):
2103
2116
assert spec .shape [0 ] == freqs .shape [0 ]
2104
2117
assert spec .shape [1 ] == self .t_specgram .shape [0 ]
2105
2118
2119
+ def test_specgram_warn_only1seg (self ):
2120
+ """Warning should be raised if len(x) <= NFFT. """
2121
+ with warnings .catch_warnings (record = True ) as w :
2122
+ warnings .simplefilter ("always" , category = UserWarning )
2123
+ mlab .specgram (x = self .y , NFFT = len (self .y ), Fs = self .Fs )
2124
+ assert len (w ) == 1
2125
+ assert issubclass (w [0 ].category , UserWarning )
2126
+ assert str (w [0 ].message ).startswith ("Only one segment is calculated" )
2127
+
2106
2128
def test_psd_csd_equal (self ):
2107
2129
freqs = self .freqs_density
2108
2130
Pxx , freqsxx = mlab .psd (x = self .y ,
@@ -2543,7 +2565,7 @@ class Test_spectral_nosig_real_onesided_trim(
2543
2565
Test_spectral_nosig_real_onesided ):
2544
2566
def setUp (self ):
2545
2567
self .createStim (fstims = [],
2546
- len_x = 256 ,
2568
+ len_x = 1024 ,
2547
2569
NFFT_density = 512 , pad_to_spectrum = 128 ,
2548
2570
iscomplex = False , sides = 'onesided' , nsides = 1 )
2549
2571
@@ -2552,7 +2574,7 @@ class Test_spectral_nosig_real_twosided_trim(
2552
2574
Test_spectral_nosig_real_onesided ):
2553
2575
def setUp (self ):
2554
2576
self .createStim (fstims = [],
2555
- len_x = 256 ,
2577
+ len_x = 1024 ,
2556
2578
NFFT_density = 512 , pad_to_spectrum = 128 ,
2557
2579
iscomplex = False , sides = 'twosided' , nsides = 2 )
2558
2580
@@ -2561,7 +2583,7 @@ class Test_spectral_nosig_real_defaultsided_trim(
2561
2583
Test_spectral_nosig_real_onesided ):
2562
2584
def setUp (self ):
2563
2585
self .createStim (fstims = [],
2564
- len_x = 256 ,
2586
+ len_x = 1024 ,
2565
2587
NFFT_density = 512 , pad_to_spectrum = 128 ,
2566
2588
iscomplex = False , sides = 'default' , nsides = 1 )
2567
2589
@@ -2570,7 +2592,7 @@ class Test_spectral_nosig_complex_onesided_trim(
2570
2592
Test_spectral_nosig_real_onesided ):
2571
2593
def setUp (self ):
2572
2594
self .createStim (fstims = [],
2573
- len_x = 256 ,
2595
+ len_x = 1024 ,
2574
2596
NFFT_density = 512 , pad_to_spectrum = 128 ,
2575
2597
iscomplex = True , sides = 'onesided' , nsides = 1 )
2576
2598
@@ -2579,7 +2601,7 @@ class Test_spectral_nosig_complex_twosided_trim(
2579
2601
Test_spectral_nosig_real_onesided ):
2580
2602
def setUp (self ):
2581
2603
self .createStim (fstims = [],
2582
- len_x = 256 ,
2604
+ len_x = 1024 ,
2583
2605
NFFT_density = 512 , pad_to_spectrum = 128 ,
2584
2606
iscomplex = True , sides = 'twosided' , nsides = 2 )
2585
2607
@@ -2705,7 +2727,7 @@ class Test_spectral_nosig_real_onesided_stretch(
2705
2727
Test_spectral_nosig_real_onesided ):
2706
2728
def setUp (self ):
2707
2729
self .createStim (fstims = [],
2708
- len_x = 128 ,
2730
+ len_x = 256 ,
2709
2731
NFFT_density = 128 ,
2710
2732
pad_to_density = 256 , pad_to_spectrum = 256 ,
2711
2733
iscomplex = False , sides = 'onesided' , nsides = 1 )
@@ -2715,7 +2737,7 @@ class Test_spectral_nosig_real_twosided_stretch(
2715
2737
Test_spectral_nosig_real_onesided ):
2716
2738
def setUp (self ):
2717
2739
self .createStim (fstims = [],
2718
- len_x = 128 ,
2740
+ len_x = 256 ,
2719
2741
NFFT_density = 128 ,
2720
2742
pad_to_density = 256 , pad_to_spectrum = 256 ,
2721
2743
iscomplex = False , sides = 'twosided' , nsides = 2 )
@@ -2725,7 +2747,7 @@ class Test_spectral_nosig_real_defaultsided_stretch(
2725
2747
Test_spectral_nosig_real_onesided ):
2726
2748
def setUp (self ):
2727
2749
self .createStim (fstims = [],
2728
- len_x = 128 ,
2750
+ len_x = 256 ,
2729
2751
NFFT_density = 128 ,
2730
2752
pad_to_density = 256 , pad_to_spectrum = 256 ,
2731
2753
iscomplex = False , sides = 'default' , nsides = 1 )
@@ -2735,7 +2757,7 @@ class Test_spectral_nosig_complex_onesided_stretch(
2735
2757
Test_spectral_nosig_real_onesided ):
2736
2758
def setUp (self ):
2737
2759
self .createStim (fstims = [],
2738
- len_x = 128 ,
2760
+ len_x = 256 ,
2739
2761
NFFT_density = 128 ,
2740
2762
pad_to_density = 256 , pad_to_spectrum = 256 ,
2741
2763
iscomplex = True , sides = 'onesided' , nsides = 1 )
@@ -2745,7 +2767,7 @@ class Test_spectral_nosig_complex_twosided_stretch(
2745
2767
Test_spectral_nosig_real_onesided ):
2746
2768
def setUp (self ):
2747
2769
self .createStim (fstims = [],
2748
- len_x = 128 ,
2770
+ len_x = 256 ,
2749
2771
NFFT_density = 128 ,
2750
2772
pad_to_density = 256 , pad_to_spectrum = 256 ,
2751
2773
iscomplex = True , sides = 'twosided' , nsides = 2 )
@@ -2755,7 +2777,7 @@ class Test_spectral_nosig_complex_defaultsided_stretch(
2755
2777
Test_spectral_nosig_real_onesided ):
2756
2778
def setUp (self ):
2757
2779
self .createStim (fstims = [],
2758
- len_x = 128 ,
2780
+ len_x = 256 ,
2759
2781
NFFT_density = 128 ,
2760
2782
pad_to_density = 256 , pad_to_spectrum = 256 ,
2761
2783
iscomplex = True , sides = 'default' , nsides = 2 )
@@ -3102,3 +3124,16 @@ def test_psd_onesided_norm():
3102
3124
sides = 'onesided' )
3103
3125
Su_1side = np .append ([Su [0 ]], Su [1 :4 ] + Su [4 :][::- 1 ])
3104
3126
assert_allclose (P , Su_1side , atol = 1e-06 )
3127
+
3128
+
3129
+ def test_psd_oversampling ():
3130
+ """Test the case len(x) < NFFT for psd(). """
3131
+ u = np .array ([0 , 1 , 2 , 3 , 1 , 2 , 1 ])
3132
+ dt = 1.0
3133
+ Su = np .abs (np .fft .fft (u ) * dt )** 2 / float (dt * u .size )
3134
+ P , f = mlab .psd (u , NFFT = u .size * 2 , Fs = 1 / dt , window = mlab .window_none ,
3135
+ detrend = mlab .detrend_none , noverlap = 0 , pad_to = None ,
3136
+ scale_by_freq = None ,
3137
+ sides = 'onesided' )
3138
+ Su_1side = np .append ([Su [0 ]], Su [1 :4 ] + Su [4 :][::- 1 ])
3139
+ assert_almost_equal (np .sum (P ), np .sum (Su_1side )) # same energy
0 commit comments