You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When writing a record (header + signal file) using Record.wrsamp, the signal data may either be single-frequency (d_signal) or multi-frequency (e_d_signal).
If expanded=True, then wrsamp takes the data from e_d_signal (ignoring d_signal) and writes one or more multi-frequency signal files. In this case the record must also have a samps_per_frame attribute, and this attribute is written to the header file.
If expanded=False (default), then wrsamp takes the data from d_signal (ignoring e_d_signal) and writes one or more single-frequency signal files. In this case the samps_per_frame attribute is still written to the header file, which is completely incorrect.
Why would you have a Record that is single-frequency yet has samps_per_frame not equal to 1? Because that's what rdrecord does by default when you read a multi-frequency record.
So:
>>> import wfdb
>>> r = wfdb.rdrecord('43700001', pn_dir='mimicdb/437', sampto=10, physical=0)
>>> r.wrsamp()
>>> wfdb.rdrecord('43700001')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/benjamin/wfdb-python/wfdb/io/record.py", line 3542, in rdrecord
return_res=return_res)
File "/home/benjamin/wfdb-python/wfdb/io/_signal.py", line 1010, in _rd_segment
sampfrom, sampto, smooth_frames)[:, r_w_channel[fn]]
File "/home/benjamin/wfdb-python/wfdb/io/_signal.py", line 1151, in _rd_dat_signals
sig_data = _blocks_to_samples(sig_data, total_process_samples, fmt)
File "/home/benjamin/wfdb-python/wfdb/io/_signal.py", line 1460, in _blocks_to_samples
sig[0::2] = sig_data[0::3] + 256 * np.bitwise_and(sig_data[1::3], 0x0f)
ValueError: could not broadcast input array from shape (30) into shape (75)
(Arguably it's wrong for rdrecord to set samps_per_frame when smooth_frames=True, but changing that behavior would be hard to reconcile with rdheader, and would prevent implementing automatic frame-smoothing as I suggested in #313 (comment))
The text was updated successfully, but these errors were encountered:
When writing a record (header + signal file) using
Record.wrsamp
, the signal data may either be single-frequency (d_signal
) or multi-frequency (e_d_signal
).If
expanded=True
, thenwrsamp
takes the data frome_d_signal
(ignoringd_signal
) and writes one or more multi-frequency signal files. In this case the record must also have asamps_per_frame
attribute, and this attribute is written to the header file.If
expanded=False
(default), thenwrsamp
takes the data fromd_signal
(ignoringe_d_signal
) and writes one or more single-frequency signal files. In this case thesamps_per_frame
attribute is still written to the header file, which is completely incorrect.Why would you have a Record that is single-frequency yet has
samps_per_frame
not equal to 1? Because that's whatrdrecord
does by default when you read a multi-frequency record.So:
(Arguably it's wrong for
rdrecord
to setsamps_per_frame
whensmooth_frames=True
, but changing that behavior would be hard to reconcile withrdheader
, and would prevent implementing automatic frame-smoothing as I suggested in #313 (comment))The text was updated successfully, but these errors were encountered: