Skip to content

Commit fd02efd

Browse files
committed
expanded frames works for regular format
1 parent 6b5a3a8 commit fd02efd

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

wfdb/_signals.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -180,14 +180,16 @@ def dac(self, expanded):
180180
"""
181181
# The digital nan values for each channel
182182
dnans = digi_nan(self.fmt)
183-
183+
184184
if expanded:
185185
p_signal = []
186186
for ch in range(0, self.nsig):
187-
chnanloc = self.e_d_signals == dnans
187+
# nan locations for the channel
188+
chnanlocs = self.e_d_signals[ch] == dnans[ch]
188189
p_signal.append((self.e_d_signals[ch] - self.baseline[ch])/float(self.adcgain[ch]))
189190
p_signal[ch][chnanlocs] = np.nan
190191
else:
192+
# nan locations
191193
nanlocs = self.d_signals == dnans
192194
p_signal = (self.d_signals - self.baseline)/[float(g) for g in self.adcgain]
193195
p_signal[nanlocs] = np.nan
@@ -499,7 +501,7 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
499501
# Transfer over samples
500502
for ch in range(nsig):
501503
# Indices of the flat signal that belong to the channel
502-
ch_indices = np.concatenate(([np.array(range(sampsperframe[ch])) + tsampsperframe*framenum for framenum in range(int(len(sigflat)/tsampsperframe))]))
504+
ch_indices = np.concatenate(([np.array(range(sampsperframe[ch])) + sum([0]+sampsperframe[:ch]) + tsampsperframe*framenum for framenum in range(int(len(sigflat)/tsampsperframe))]))
503505
sig.append(sigflat[ch_indices])
504506

505507
# Skew the signal
@@ -519,6 +521,8 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
519521
elif fmt == '160':
520522
sigbytes = sigbytes - 32768
521523

524+
#print('sigbytes:', sigbytes)
525+
522526

523527
# No extra samples/frame. Obtain original uniform numpy array
524528
if tsampsperframe==nsig:
@@ -532,9 +536,6 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
532536

533537
# Extra frames present to be smoothed. Obtain averaged uniform numpy array
534538
elif smoothframes:
535-
536-
print('sigbytes:')
537-
print(sigbytes)
538539

539540
# Allocate memory for signal
540541
sig = np.empty([readlen, nsig], dtype='int')
@@ -549,8 +550,6 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
549550
sig[:, ch] += sigbytes[skew[ch]*tsampsperframe+sum(([0] + sampsperframe)[:ch + 1]) + frame::tsampsperframe]
550551
sig = (sig / sampsperframe)
551552

552-
print('sig after smoothing:')
553-
print(sig)
554553

555554
# Extra frames present without wanting smoothing. Return all expanded samples.
556555
else:
@@ -564,7 +563,9 @@ def rddat(filename, dirname, pbdir, fmt, nsig,
564563
# chansig[frame::sampsperframe[ch]] = sigbytes[skew[ch]*tsampsperframe+sum(([0] + sampsperframe)[:ch + 1]) + frame::tsampsperframe]
565564
# sig.append(chansig)
566565

567-
ch_indices = np.concatenate([np.array(range(sampsperframe[ch])) + tsampsperframe*framenum for framenum in range(int(len(sigbytes)/tsampsperframe))])
566+
# Get the sample indices of the channel samples to transfer over
567+
ch_indices = np.concatenate([np.array(range(sampsperframe[ch])) + sum([0]+sampsperframe[:ch]) + tsampsperframe*framenum for framenum in range(int(len(sigbytes)/tsampsperframe))])
568+
568569
sig.append(sigbytes[ch_indices])
569570

570571
# Skew the signal

wfdb/records.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -405,33 +405,39 @@ def wrsamp(self):
405405

406406
# Arrange/edit object fields to reflect user channel and/or signal range input
407407
# Account for case when signals are expanded
408-
def arrangefields(self, channels, expanded):
408+
def arrangefields(self, channels, expanded=False):
409409

410410
# Rearrange signal specification fields
411411
for field in _headers.sigfieldspecs:
412412
item = getattr(self, field)
413413
setattr(self, field, [item[c] for c in channels])
414414

415-
# Checksum and initvalue to be updated if present
416-
# unless the whole signal length was input
417-
if self.siglen != self.d_signals.shape[0]:
415+
# Expanded signals - multiple samples per frame.
416+
if expanded:
417+
# clear checksum and initvalue for now
418+
self.checksum = [None]*len(self.e_d_signals)
419+
self.initvalue = [None]*len(self.e_d_signals)
420+
421+
self.nsig = len(channels)
422+
self.siglen = min([len(sig) for sig in self.e_d_signals])
423+
424+
425+
# MxN numpy array d_signals
426+
else:
427+
# Checksum and initvalue to be updated if present
428+
# unless the whole signal length was input
429+
if self.siglen != self.d_signals.shape[0]:
418430

419-
# If the signals are expanded, initvalue and checksum
420-
# have no meaning, so just put None.
421-
if expanded:
422-
self.checksum = [None]*self.d_signals.shape[1]
423-
self.initvalue = [None]*self.d_signals.shape[1]
424-
else:
425431
if self.checksum is not None:
426432
self.checksum = self.calc_checksum()
427433
if self.initvalue is not None:
428434
ival = list(self.d_signals[0, :])
429435
self.initvalue = [int(i) for i in ival]
430436

431-
# Update record specification parameters
432-
# Important that these get updated after^^
433-
self.nsig = len(channels)
434-
self.siglen = self.d_signals.shape[0]
437+
# Update record specification parameters
438+
# Important that these get updated after^^
439+
self.nsig = len(channels)
440+
self.siglen = self.d_signals.shape[0]
435441

436442

437443

0 commit comments

Comments
 (0)