[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
setifreq | Setting the input sampling frequency. | |
getifreq | Determining the input sampling frequency. | |
setgvmode | Setting the resolution for a multifrequency record and how invalid samples are represented. | |
getgvmode | Determining the getvec operating mode. | |
getspf | Determining the number of samples per frame. | |
setiafreq | Setting the time resolution of input annotations. | |
getiafreq | Determining the time resolution of input annotations. | |
getiaorigfreq | Determining the underlying time resolution of an annotation file. | |
setafreq | Setting the time resolution for output annotations. | |
getafreq | Determining the time resolution for output annotations. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
void setifreq(WFDB_Frequency frequency) |
This function sets the current input sampling frequency (in samples per
second per signal). It should be invoked after opening the input
signals (using isigopen
or wfdbinit
), and before using any
of getvec
, putann
, isigsettime
, isgsettime
,
timstr
, mstimstr
, or strtim
.
Note that the operation of getframe
is unaffected by
setifreq
.
Use setifreq
when your application requires input samples at a
specific frequency. After invoking setifreq
, getvec
resamples the digitized signals from the input signals at the desired
frequency (see section getvec), and all of the WFDB library functions that
accept or return times in sample intervals automatically convert between
the actual sampling intervals and those corresponding to the desired
frequency. This slightly elaborated version of the example program from
the previous chapter invokes setifreq
, passing it the desired sampling
frequency from the command line, then prints the samples in record 100s,
beginning 1 second (t0
) and ending 2 seconds (t1
) from the
beginning of the record:
#include <stdio.h> #include <wfdb/wfdb.h> main(int argc, char **argv) { WFDB_Frequency f = (WFDB_Frequency)0; WFDB_Sample v[2]; WFDB_Siginfo s[2]; WFDB_Time t, t0, t1; if (argc > 1) sscanf(argv[1], "%lf", &f); if (f <= (WFDB_Frequency)0) f = sampfreq("100s"); if (isigopen("100s", s, 2) < 1) exit(1); setifreq(f); t0 = strtim("1"); isigsettime(t0); t1 = strtim("2"); for (t = t0; t <= t1; t++) { if (getvec(v) < 0) break; printf("%d\t%d\n", v[0], v[1]); } exit(0); } |
(See http://physionet.org/physiotools/wfdb/examples/psamplex.c for a
copy of this program. Compile it as shown in the previous chapter, then run it
using a command such as ‘psamplex 100’.) The QRS detector in chapter 6
also illustrates the use of setifreq
(see section Example 10: A QRS Detector).
Avoid using wfdbinit
and setifreq
in the same program.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WFDB_Frequency getifreq(void) |
Return:
the input sampling frequency
This function returns the current input sampling frequency (in samples
per second per signal), which is either the raw sampling frequency for
the record (as would be returned by sampfreq
, see section sampfreq),
or the frequency chosen using a previous invocation of setifreq
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
void setgvmode(int *mode) |
This function sets the mode used by getvec
when reading a
multi-frequency record (see section Multi-Frequency Records). If mode is
WFDB_LOWRES
, getvec
decimates any signals sampled at multiples of
the frame rate, so that one sample is returned per signal per frame (i.e., the
oversampled signals are resampled by simple averaging of the samples for each
signal within each frame). If mode is WFDB_HIGHRES
, each sample
of any oversampled signal is returned by successive invocations of
getvec
, and each sample of any signal sampled at a lower frequency is
returned by two or more successive invocations of getvec
(i.e., the less
frequently sampled signals are resampled using zero-order interpolation).
getvec
operates in WFDB_LOWRES
mode by default.
WFDB_LOWRES
and WFDB_HIGHRES
are defined in ‘<wfdb/wfdb.h>’.
In WFDB library version 9.6 and later versions, setgvmode
also affects
how annotations are read and written. If setgvmode(WFDB_HIGHRES)
is
invoked before using annopen
, wfdbinit
, getvec
,
sampfreq
, strtim
, or timstr
, then all WFDB_Time
data (including the time
attributes of annotations read by getann
or written by putann
) visible to the application are in units of the
high-resolution sampling intervals. (Otherwise, WFDB_Time
data are in
units of frame intervals.)
Version 10.4 and later versions of the WFDB library support two modes
of handling invalid or missing samples. By default, getframe
,
getvec
, and sample
return the special value
WFDB_INVALID_SAMPLE
in such cases. If mode is
WFDB_GVPAD
+ WFDB_LOWRES
or
WFDB_GVPAD
+ WFDB_HIGHRES
,
however, these functions replicate the previous
valid sample whenever they encounter an invalid or missing sample,
which may simplify the design of applications such as digital filters.
The constant WFDB_GVPAD
is defined in ‘<wfdb/wfdb.h>’.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
int setgvmode(void) |
This function returns the operating mode used by getvec
. If the
returned value has the WFDB_HIGHRES
bit set, getvec
is operating
in high-resolution mode; if the returned value has the WFDB_GVPAD
bit
set, getvec
replicates the previous valid sample whenever it encounters
an invalid or missing sample, rather than returning the value
WFDB_INVALID_SAMPLE
. The constants WFDB_HIGHRES
,
WFDB_GVPAD
, and WFDB_INVALID_SAMPLE
are defined in
‘<wfdb/wfdb.h>’.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
int getspf(void) |
Return:
the number of samples per signal per frame
Unless the application is operating in WFDB_HIGHRES
mode
(see section setgvmode) and has then opened a multi-frequency record, this
function returns 1. For the case of a multi-frequency record being read
in high resolution mode, however, getspf
returns the number of
samples per signal per frame (hence sampfreq(NULL)/getspf()
is
the number of frames per second).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
void setiafreq(WFDB_Annotator an, WFDB_Frequency frequency) |
This function sets the time resolution (number of ticks per second) used by
getann
and ungetann
for the given input annotator. By default,
the time resolution equals the input sampling frequency (see section getifreq) at
the time annopen
is called. After calling this function, the time
fields of subsequent annotations will be scaled according to the new time
resolution.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WFDB_Frequency getiafreq(WFDB_Annotator an) |
Return:
Success: the annotation time resolution in Hz
Failure: incorrect annotator number specified
This function returns the current time resolution of the given input annotator. The time resolution equals the input sampling frequency by default, but may be changed (see section setiafreq).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WFDB_Frequency getiaorigfreq(WFDB_Annotator an) |
Return:
Success: the annotation time resolution in Hz
Failure: the annotation time resolution is not defined
Failure: incorrect annotator number specified
This function returns the original time resolution for the given input annotator, if it was specified by the application that created the annotation file (see section setafreq).
If the application that created the annotation file did not specify a time
resolution, getiaorigfreq
returns zero. (In this case, the time
resolution is assumed to equal the record’s frame frequency.)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
void setafreq(WFDB_Frequency frequency) |
This function sets the time resolution, in ticks per second, for any output
annotation files created after it has been invoked. By default, the time
resolution is equal to the input sampling frequency (and setifreq
invokes setafreq
to maintain this behavior if the input sampling
frequency is changed).
This function has no effect on output annotation files that are already open
when it is invoked, nor on annotations read from input annotation files
(for which the time
fields always are expressed in units equal to
the input sample intervals).
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
WFDB_Frequency getafreq(void) |
Return:
output annotation time resolution, if previously set by setafreq
otherwise
This function returns the current output annotation time resolution
in ticks per second if it has been set using getafreq
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
PhysioNet (wfdb@physionet.org)