Skip to content

Commit a7e5798

Browse files
committed
Merge branch 'sampsperframe'
2 parents 0badc1a + 1c7e37b commit a7e5798

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+14786
-1210
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
private_tests.ipynb
2+
13
# Byte-compiled / optimized / DLL files
24
__pycache__/
35
*.py[cod]

README.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ Input Arguments:
155155
- ``physical`` (default=True): Flag that specifies whether to return signals in physical (True) or digital (False) units.
156156
- ``pbdir`` (default=None): Option used to stream data from Physiobank. The Physiobank database directory from which to find the required record files. eg. For record '100' in 'http://physionet.org/physiobank/database/mitdb', pbdir = 'mitdb'.
157157
- ``m2s`` (default=True): Flag used only for multi-segment records. Specifies whether to convert the returned wfdb.MultiRecord object into a wfdb.Record object (True) or not (False).
158+
- ``smoothframes`` (default=True): Flag used when reading records with signals having multiple samples per frame. Specifies whether to smooth the samples in signals with more than one sample per frame and return an mxn uniform numpy array as the d_signals or p_signals field (True), or to return a list of 1d numpy arrays containing every expanded sample as the e_d_signals or e_p_signals field (False).
159+
- ``ignoreskew`` (default=False): Flag used when reading records with at least one skewed signal. Specifies whether to apply the skew to align the signals in the output variable (False), or to ignore the skew field and load in all values contained in the dat files unaligned (True).
158160

159161
Output Arguments:
160162

demo.ipynb

Lines changed: 98 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"cell_type": "markdown",
55
"metadata": {},
66
"source": [
7-
"## Demo Scripts for the wfdb-python package\n",
7+
"# Demo Scripts for the wfdb-python package\n",
88
"\n",
99
"Run this script from the base directory of the git repository to access the included demo files"
1010
]
@@ -23,11 +23,26 @@
2323
"from IPython.display import display"
2424
]
2525
},
26+
{
27+
"cell_type": "code",
28+
"execution_count": null,
29+
"metadata": {
30+
"collapsed": true
31+
},
32+
"outputs": [],
33+
"source": [
34+
"# See the help documentation for the read functions\n",
35+
"\n",
36+
"#help(wfdb.rdsamp)\n",
37+
"#help(wfdb.srdsamp)\n",
38+
"#help(wfdb.rdann)"
39+
]
40+
},
2641
{
2742
"cell_type": "markdown",
2843
"metadata": {},
2944
"source": [
30-
"### Reading Records and Annotations"
45+
"## Reading Records and Annotations"
3146
]
3247
},
3348
{
@@ -169,7 +184,32 @@
169184
"cell_type": "markdown",
170185
"metadata": {},
171186
"source": [
172-
"### Writing Records and Annotations"
187+
"### Multiple sample/frame examples\n",
188+
"\n",
189+
"Although there can only be one base sampling frequency per record, a single wfdb record can store multiple channels with different sampling frequencies, as long as their sampling frequencies can all be expressed by an integer multiple of a base value. This is done by using the `sampsperframe` attribute in each channel, which indicates the number of samples of each channel present in each frame.\n",
190+
"\n",
191+
"ie: To capture three signals with `fs = 120, 240, and 360 Hz` in a single record, they can be combined into a record with `fs = 120` and `sampsperframe = [1, 2, 3]`.\n",
192+
"\n",
193+
"#### Reading Options\n",
194+
"\n",
195+
"This package allows signals in records with multiple samples/frame to be read in two ways:\n",
196+
"1. smoothed - An uniform mxn numpy is returned as the d_signals or p_signals field. Channels with multiple samples/frame have their values averaged within each frame. This is like the behaviour of the `rdsamp` function of the original WFDB c package. Note that `wfdb.plotrec` only works if the record object has the `p_signals` field.\n",
197+
"2. expanded - A list of 1d numpy arrays is returned as the e_d_signals or e_p_signals field. All samples for each channel are returned in its respective numpy array. The arrays may have different lengths depending on their `sampsperframe` values. \n",
198+
"\n",
199+
"Set the `smoothframes` *(default=True)* option in `rdsamp` to return the desired signal type."
200+
]
201+
},
202+
{
203+
"cell_type": "code",
204+
"execution_count": null,
205+
"metadata": {
206+
"collapsed": false
207+
},
208+
"outputs": [],
209+
"source": [
210+
"# Demo 8 - Read a wfdb record in which one channel has multiple samples/frame. Return a smoothed uniform array.\n",
211+
"record = wfdb.rdsamp('sampledata/test01_00s_frame')\n",
212+
"wfdb.plotrec(record)"
173213
]
174214
},
175215
{
@@ -180,7 +220,32 @@
180220
},
181221
"outputs": [],
182222
"source": [
183-
"# Demo 8 - Read a WFDB record's digital samples and create a copy via the wrsamp() instance method \n",
223+
"# Demo 9 - Read a wfdb record in which one channel has multiple samples/frame. Return a list of all the expanded samples.\n",
224+
"record = wfdb.rdsamp('sampledata/test01_00s_frame', smoothframes = False)\n",
225+
"\n",
226+
"display(record.e_p_signals)\n",
227+
"# Show that different channels have different lengths. Channel 1 has 2 samples/frame, hence has 2x as many samples.\n",
228+
"print([len(s) for s in record.e_p_signals])\n",
229+
"\n",
230+
"# wfdb.plotrec doesn't work because the Record object is missing its p_signals field."
231+
]
232+
},
233+
{
234+
"cell_type": "markdown",
235+
"metadata": {},
236+
"source": [
237+
"## Writing Records and Annotations"
238+
]
239+
},
240+
{
241+
"cell_type": "code",
242+
"execution_count": null,
243+
"metadata": {
244+
"collapsed": false
245+
},
246+
"outputs": [],
247+
"source": [
248+
"# Demo 10 - Read a WFDB record's digital samples and create a copy via the wrsamp() instance method \n",
184249
"# of the Record object.\n",
185250
"\n",
186251
"# Read a record as a Record object.\n",
@@ -202,7 +267,7 @@
202267
},
203268
"outputs": [],
204269
"source": [
205-
"# Demo 9 - Write a WFDB record without using a Record object via the gateway wrsamp function.\n",
270+
"# Demo 11 - Write a WFDB record without using a Record object via the gateway wrsamp function.\n",
206271
"# This is the basic way to write physical signals to a WFDB file. \n",
207272
"\n",
208273
"# Read part of a record from Physiobank\n",
@@ -223,7 +288,28 @@
223288
},
224289
"outputs": [],
225290
"source": [
226-
"# Demo 10 - Read a WFDB annotation file and create a copy via the wrann() instance method\n",
291+
"# Demo 12 - Write a WFDB record with multiple samples/frame in a channel\n",
292+
"\n",
293+
"# Read a record as a Record object.\n",
294+
"record = wfdb.rdsamp('sampledata/test01_00s_frame', physical = False, smoothframes=False)\n",
295+
"record.recordname = 'test01_00s_framex'\n",
296+
"\n",
297+
"# Call the instance method of the object with expanded=True to write the record using the e_d_signals field\n",
298+
"record.wrsamp(expanded=True)\n",
299+
"\n",
300+
"# The new file can be read\n",
301+
"recordx = wfdb.rdsamp('test01_00s_framex')"
302+
]
303+
},
304+
{
305+
"cell_type": "code",
306+
"execution_count": null,
307+
"metadata": {
308+
"collapsed": false
309+
},
310+
"outputs": [],
311+
"source": [
312+
"# Demo 13 - Read a WFDB annotation file and create a copy via the wrann() instance method\n",
227313
"# of the Annotation object\n",
228314
"\n",
229315
"# Read an annotation from Physiobank\n",
@@ -245,7 +331,7 @@
245331
},
246332
"outputs": [],
247333
"source": [
248-
"# Demo 11 - Write a WFDB annotation file without using an Annotator object via the gateway wrann function.\n",
334+
"# Demo 14 - Write a WFDB annotation file without using an Annotator object via the gateway wrann function.\n",
249335
"\n",
250336
"# Read an annotation as an Annotation object\n",
251337
"annotation = wfdb.rdann('b001', 'atr', pbdir='cebsdb')\n",
@@ -265,15 +351,15 @@
265351
},
266352
"outputs": [],
267353
"source": [
268-
"# Demo 12 - View what the 'anntype' symbols mean in the standard WFDB library\n",
354+
"# Demo 15 - View what the 'anntype' symbols mean in the standard WFDB library\n",
269355
"wfdb.showanncodes()"
270356
]
271357
},
272358
{
273359
"cell_type": "markdown",
274360
"metadata": {},
275361
"source": [
276-
"### Downloading Content from Physiobank\n",
362+
"## Downloading Content from Physiobank\n",
277363
"\n",
278364
"- The downloads are made via http\n",
279365
"- See the above demos for examples on streaming WFDB files stored in Physiobank without downloading them to local disk\n",
@@ -288,7 +374,7 @@
288374
},
289375
"outputs": [],
290376
"source": [
291-
"# Demo 13 - List the Physiobank Databases\n",
377+
"# Demo 16 - List the Physiobank Databases\n",
292378
"\n",
293379
"dbs = wfdb.getdblist()\n",
294380
"display(dbs)"
@@ -302,7 +388,7 @@
302388
},
303389
"outputs": [],
304390
"source": [
305-
"# Demo 14 - Download all the WFDB records and annotations from a small Physiobank Database\n",
391+
"# Demo 17 - Download all the WFDB records and annotations from a small Physiobank Database\n",
306392
"\n",
307393
"# Make a temporary download directory in your current working directory\n",
308394
"cwd = os.getcwd()\n",
@@ -326,7 +412,7 @@
326412
},
327413
"outputs": [],
328414
"source": [
329-
"# Demo 15 - Download specified files from a Physiobank database\n",
415+
"# Demo 18 - Download specified files from a Physiobank database\n",
330416
"\n",
331417
"# The files to download\n",
332418
"filelist = ['STAFF-Studies-bibliography-2016.pdf', 'data/001a.hea', 'data/001a.dat', 'data/001b.hea', 'data/001b.dat']\n",

sampledata/100_3chan.dat

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
�3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3Ӹ3��3��3ij3��3��3ѥ3��3��3��3�
2+
4��C�3�(4��C>�CWDKDkKD|tD|�D_�D�*D��4�Dh�Ch"4�"4��3߷3ܷ3��3��3�3��3��3�3��3��3ܽ3��3��3߾3��3��3��3��3��3��3��3��3޼3��3��3�3��3��3پ3��3��3۾3��3��3ݾ3��3��3ڻ3��3��3߽3��3��3��3��3��3��3��3��3ܼ3��3��3ݼ3��3��3ع3��3��3ۼ3��3��3޾3��3��3ټ3��3��3ؿ3��3��3ܾ3��3��3׽3��3��3ܼ3��3��3ؼ3��3��3׹3��3��3ػ3��3��3��3��3��3־3��3��3۾3��3��3ؽ3��3��3ӻ3��3��3ؼ3��3��3ս3��3��3Ѻ3��3��3л3��3��3н3��3��3̺3��3��3˹3��3��3Ȼ3��3��3ź3��3��3ĸ3��3��3ķ3��3��3��3��3��3��3��3��3¹3��3��3��3��3��3��3��3��3ø3��3��3Ʒ3��3��3ʹ3��3��3п3��3��3ν3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3¿3ӿ3��3��3��3��3��3��3��3��3��3��3��3Կ3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3¾3Ӿ3��3��3ֿ3��3��3��3��3��3Ͽ3��3��3λ3��3��3Ҽ3��3��3л3��3��3Ѿ3��3��3Ҿ3��3��3л3��3��3Ӽ3��3��3ѿ3��3��3ʺ3��3��3Ƹ3��3��3��3��3��3��3��3��3ו3��3��C�3�4��C�3�&4�/D</DbRDb�Dc�D�aD��DH�D�D��4ߗDb�Cb!4�!4�3��3��3��3��3��3��3��3ť3��3��3Ų3��3��3ȳ3��3��3Ǵ3��3��3ƴ3��3��3ɳ3��3��3ʳ3��3��3ű3��3��3ɮ3��3��3˱3��3��3ů3��3��3dz3��3��3˲3��3��3ȯ3��3��3ʮ3��3��3ʲ3��3��3ȯ3��3��3˰3��3��3˯3��3��3ǭ3��3��3˰3��3��3ͱ3��3��3ɯ3��3��3ʲ3��3��3ɳ3��3��3Ȯ3��3��3ɱ3��3��3ɵ3��3��3ű3��3��3ɰ3��3��3Dz3��3��3��3��3��3í3��3��3±3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3Ů3��3��3ʶ3��3��3˸3��3��3ϼ3��3��3��3��3��3վ3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3ٽ3��3��3׽3��3��3ؾ3��3��3һ3��3��3׻3��3��3پ3��3��3ӻ3��3��3ջ3��3��3׾3��3��3Ӽ3��3��3ӽ3��3��3վ3��3��3չ3��3��3չ3��3��3ּ3��3��3һ3��3��3ֻ3��3��3ؾ3��3��3Ի3��3��3պ3��3��3ؾ3��3��3Ի3��3��3׺3��3��3׾3��3��3Լ3��3��3׾3��3��3ؾ3��3��3һ3��3��3ؼ3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3ؼ3��3��3׽3��3��3Թ3��3��3ָ3��3��3غ3��3��3Է3��3��3Դ3��3��3׷3��3��3Ӵ3��3��3մ3��3��3Թ3��3��3в3��3��3Ȯ3��3��3��3��3��3��3��3��3�3�4��C�3�44��CK�CeDRDRD��D��Dz�D�@D��4��Dh�Ch
3+
4�
4+
4��3��3М3��3��3ͧ3��3��3ϱ3��3��3ͱ3��3��3̱3��3��3ϱ3��3��3β3��3��3ʱ3��3��3˯3��3��3̰3��3��3ȯ3��3��3ʭ3��3��3˯3��3��3Ƭ3��3��3ˬ3��3��3̮3��3��3ȫ3��3��3ˬ3��3��3ͮ3��3��3ɫ3��3��3ɰ3��3��3˰3��3��3ȱ3��3��3ȯ3��3��3ʰ3��3��3ƭ3��3��3ʫ3��3��3ǭ3��3��3ī3��3��3Ŭ3��3��3Ű3��3��3®3��3��3��3��3��3±3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3²3��3��3ɸ3��3��3ν3��3��3Ͻ3��3��3׿3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3ؿ3��3��3��3��3��3��3��3��3��3��3��3��3��3¿3ֿ3��3��3��3��3��3��3��3��3Ӻ3��3��3ּ3��3��3վ3��3��3Ӽ3��3��3ֺ3��3��3ҹ3��3��3ι3��3��3ҹ3��3��3Ҽ3��3��3Ϻ3��3��3з3��3��3ӹ3��3��3ж3��3��3ж3��3��3ѷ3��3��3ҷ3��3��3Ӷ3��3��3Һ3��3��3κ3��3��3ҷ3��3��3ѻ3��3��3ѹ3��3��3Ӹ3��3��3չ3��3��3ѵ3��3��3ӹ3��3��3ӹ3��3��3Ҹ3��3��3ո3��3��3ӹ3��3��3ѻ3��3��3Ӽ3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3��3ո3��3��3ֳ3��3��3׶3��3��3ӳ3��3��3Ա3��3��3ֳ3��3��3ѱ3��3��3Ӱ3��3��3Ե3��3��3ұ3��3��3ԯ3��3��3Ѳ3��3��3ȫ3��3��3��3��3��3��3��3��3��3��3�3�3��3��3�3�4��C�3�04��CJ�CcDJDzJD�D�Dm�D�.D��4�D_�C_4�4��3Ü3͜3��3��3ҡ3��3��3ϲ3��3��3̰3��3��3ѯ3��3��3ϲ3��3��3˯3��3��3̯3��3��3ϲ3��3��3ʮ3��3��3ͮ3��3��3ί3��3��3ʯ3��3��3ˮ3��3��3ϳ3��3��3ʱ3��3��3Ͱ3��3��3α3��3��3ʯ3��3��3Ͱ3��3��3ͳ3��3��3ɳ3��3��3˲3��3��3̵

sampledata/100_3chan.hea

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
100_3chan 3 360.0 999
2+
100_3chan.dat 212 200(1024)/mV 11 1024 995 43172 0 I
3+
100_3chan.dat 212 200(1024)/mV 11 1024 1011 63954 0 II
4+
100_3chan.dat 212 200(1024)/mV 11 1024 995 43172 0 III
5+
# Made this to test fmt 212 with odd number of samples

sampledata/100skew.hea

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
100skew 2 360 650000
2+
100.dat 212 200 11 1024 995 -22131 0 MLII
3+
100.dat 212:3 200 11 1024 1011 20052 0 V5
4+
# This is just record 100 with a skew inserted in channel 1
5+
# 69 M 1085 1629 x1
6+
# Aldomet, Inderal

sampledata/310derive_2.dat

1.33 KB
Binary file not shown.

sampledata/310derive_2.hea

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
310derive_2 1 360 1020
2+
310derive_2.dat 310 200 10 0 -5 -3380 0 col 1
3+
# 1020 samples * 4/3 bytes/sample = 1360 bytes exactly.

sampledata/310derive_3.dat

1.33 KB
Binary file not shown.

sampledata/310derive_3.hea

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
310derive_3 1 360 1018
2+
310derive_3.dat 310 200 10 0 -5 62172 0 ch1
3+
# 1020 samples * 4/3 = 1360 bytes
4+
# 1019 samples would still need 1360 bytes since it extends. This file tests 1018.
5+
# 1018 samples * 4/3 bytes/sample = 1357+1/3 bytes. The last sample extends into 1358.
6+
# The dat file is 1358 bytes.
7+
# wfdb c CAN read this.

sampledata/311derive_2.dat

1.33 KB
Binary file not shown.

sampledata/311derive_2.hea

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
311derive_2 1 360 1020
2+
311derive_2.dat 311 200 10 0 -5 -3380 0 col 1

sampledata/311derive_3.dat

1.33 KB
Binary file not shown.

sampledata/311derive_3.hea

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
311derive_3 1 360 1019
2+
311derive_3.dat 311 200 10 0 -5 62164 0 ch1
3+
# The dat file is 1359 bytes. 1019*4/3 = 1358+2/3. Extends into 1359.
4+
# wfdb c rdsamp fails to read this!

sampledata/311derive_4.dat

1.33 KB
Binary file not shown.

sampledata/311derive_4.hea

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
311derive_4 1 360 1018
2+
311derive_4.dat 311 200 10 0 -5 62172 0 ch1
3+
# The dat file is 1358 bytes. 1018*4/3 = 1357+1/3. Extends into 1358.
4+
# wfdb c rdsamp CAN read this!

sampledata/p10143.dat

-37.4 MB
Binary file not shown.

sampledata/p10143.hea

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
p10143 2 500 10260010
2-
p10143.dat 61 200 16 0 0 0 0 FECG
3-
p10143.dat 61 200 16 0 0 0 0 UC
1+
p10143 2 500 450000
2+
p10143.dat 61 200 16 0 -20863 18173 0 FECG
3+
p10143.dat 61 200 16 0 12175 9780 0 UC

sampledata/test01_00s_frame.hea

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
test01_00s_frame 3 500 4000
2+
test01_00s.dat 16 100/mV 16 0 10 114 0 ECG_1
3+
test01_00s.dat 16x2 100/mV 16 0 -8 822 0 ECG_2
4+
test01_00s.dat 16 100/mV 16 0 -57 65135 0 ECG_3
5+
# <age>: 25 <sex>: M <diagnoses>: (none) <medications>: (none)
6+
# This is a copy of test01_00s with 2 samples/frame for channel 1, cutting out channel 3.

sampledata/test01_00s_skew.hea

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
test01_00s_skew 4 500 4000
2+
test01_00s.dat 16 100/mV 16 0 10 114 0 ECG_1
3+
test01_00s.dat 16:3 100/mV 16 0 -8 941 0 ECG_2
4+
test01_00s.dat 16 100/mV 16 0 -57 -119 0 ECG_3
5+
test01_00s.dat 16 100/mV 16 0 -66 -401 0 ECG_4
6+
# <age>: 25 <sex>: M <diagnoses>: (none) <medications>: (none)
7+
# This is a copy of test01_00s with a skew stated in channel 1.

sampledata/test01_00s_skewframe.hea

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
test01_00s_skewframe 3 500 4000
2+
test01_00s.dat 16:3 100/mV 16 0 10 114 0 ECG_1
3+
test01_00s.dat 16x2 100/mV 16 0 -8 822 0 ECG_2
4+
test01_00s.dat 16 100/mV 16 0 -57 65135 0 ECG_3
5+
# <age>: 25 <sex>: M <diagnoses>: (none) <medications>: (none)
6+
# This is a copy of test01_00s with 2 samples/frame for channel 1, cutting out channel 3. A skew is also stated in signal 0.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)