@@ -408,12 +408,53 @@ def wrdatfiles(self, expanded=False):
408408 wrdatfile (fn , datfmts [fn ], dsig [:, datchannels [fn ][0 ]:datchannels [fn ][- 1 ]+ 1 ], datoffsets [fn ])
409409
410410
411- def smoothframes (self , signal = 'physical' ):
411+ def smoothframes (self , sigtype = 'physical' ):
412412 """
413413 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').
415420 """
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'" )
416456
457+ return signal
417458
418459#------------------- Reading Signals -------------------#
419460
0 commit comments