@@ -408,12 +408,53 @@ def wrdatfiles(self, expanded=False):
408
408
wrdatfile (fn , datfmts [fn ], dsig [:, datchannels [fn ][0 ]:datchannels [fn ][- 1 ]+ 1 ], datoffsets [fn ])
409
409
410
410
411
- def smoothframes (self , signal = 'physical' ):
411
+ def smoothframes (self , sigtype = 'physical' ):
412
412
"""
413
413
Convert expanded signals with different samples/frame into
414
- a uniform numpy array
414
+ a uniform numpy array.
415
+
416
+ Input parameters
417
+ - sigtype (default='physical'): Specifies whether to mooth
418
+ the e_p_signals field ('physical'), or the e_d_signals
419
+ field ('digital').
415
420
"""
421
+ spf = self .sampsperframe [:]
422
+ for ch in range (len (spf )):
423
+ if spf [ch ] is None :
424
+ spf [ch ] = 1
425
+
426
+ # Total samples per frame
427
+ tspf = sum (spf )
428
+
429
+ if sigtype == 'physical' :
430
+ nsig = len (self .e_p_signals )
431
+ siglen = int (len (self .e_p_signals [0 ])/ spf [0 ])
432
+ signal = np .zeros ((siglen , nsig ), dtype = 'float64' )
433
+
434
+ for ch in range (nsig ):
435
+ if spf [ch ] == 1 :
436
+ signal [:, ch ] = self .e_p_signals [ch ]
437
+ else :
438
+ for frame in range (spf [ch ]):
439
+ signal [:, ch ] += self .e_p_signals [ch ][frame ::spf [ch ]]
440
+ signal [:, ch ] = signal [:, ch ] / spf [ch ]
441
+
442
+ elif sigtype == 'digital' :
443
+ nsig = len (self .e_d_signals )
444
+ siglen = int (len (self .e_d_signals [0 ])/ spf [0 ])
445
+ signal = np .zeros ((siglen , nsig ), dtype = 'int64' )
446
+
447
+ for ch in range (nsig ):
448
+ if spf [ch ] == 1 :
449
+ signal [:, ch ] = self .e_d_signals [ch ]
450
+ else :
451
+ for frame in range (spf [ch ]):
452
+ signal [:, ch ] += self .e_d_signals [ch ][frame ::spf [ch ]]
453
+ signal [:, ch ] = signal [:, ch ] / spf [ch ]
454
+ else :
455
+ raise ValueError ("sigtype must be 'physical' or 'digital'" )
416
456
457
+ return signal
417
458
418
459
#------------------- Reading Signals -------------------#
419
460
0 commit comments