| [ < ] | [ > ] | [ << ] | [ 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)