void QRSDetection::transform_enter (ssi_stream_t &stream_in, ssi_stream_t &stream_out, ssi_size_t xtra_stream_in_num, ssi_stream_t xtra_stream_in[]) { //bandpass Butfilt *bandpass = ssi_pcast (Butfilt, Factory::Create (Butfilt::GetCreateName (), 0, false)); bandpass->getOptions()->type = Butfilt::BAND; bandpass->getOptions()->norm = false; bandpass->getOptions()->high = 15; bandpass->getOptions()->low = 5; bandpass->getOptions()->order = 13; _bandpass = bandpass; ssi_stream_init (_bandpass_stream, 0, _bandpass->getSampleDimensionOut (stream_in.dim), _bandpass->getSampleBytesOut (stream_in.byte), _bandpass->getSampleTypeOut (stream_in.type), stream_in.sr); _bandpass->transform_enter (stream_in, _bandpass_stream); //diff Derivative *diff = ssi_pcast(Derivative, Factory::Create (Derivative::GetCreateName (), 0, false)); ssi_strcpy (diff->getOptions()->names, "1st"); _diff = diff; ssi_stream_init (_diff_stream, 0, _diff->getSampleDimensionOut (_bandpass_stream.dim), _diff->getSampleBytesOut (_bandpass_stream.byte), _diff->getSampleTypeOut (_bandpass_stream.type), _bandpass_stream.sr); _diff->transform_enter (_bandpass_stream, _diff_stream); //qrs-pre-process QRSPreProcess *pre = ssi_pcast(QRSPreProcess, Factory::Create (QRSPreProcess::GetCreateName (), 0, false)); _pre = pre; ssi_stream_init (_pre_stream, 0, _pre->getSampleDimensionOut (_diff_stream.dim), _pre->getSampleBytesOut (_diff_stream.byte), _pre->getSampleTypeOut (_diff_stream.type), _diff_stream.sr); _pre->transform_enter(_diff_stream, _pre_stream); Butfilt *pre_low = ssi_create (Butfilt, 0, false); pre_low->getOptions()->zero = true; pre_low->getOptions()->norm = false; pre_low->getOptions ()->low = 6.4; pre_low->getOptions ()->order = 3; pre_low->getOptions ()->type = Butfilt::LOW; _pre_low = pre_low; ssi_stream_init (_pre_low_stream, 0, _pre_low->getSampleDimensionOut (_pre_stream.dim), _pre_low->getSampleBytesOut (_pre_stream.byte), _pre_low->getSampleTypeOut (_pre_stream.type), _pre_stream.sr); _pre_low->transform_enter(_pre_stream, _pre_low_stream); //qrs-detect ssi_size_t sample_dimension = _pre_low_stream.dim; _pulsed = false; _n_R = 0; _samples_since_last_R = 0; _sum_RR = 0; _average_RR = 0.0f; _history_RR = new ssi_size_t[_options.depthRR]; _last_R = 0; for (ssi_size_t k = 0; k < _options.depthRR; k++) { _history_RR[k] = 0; } _first_call = true; }
Chain::Chain (const ssi_char_t *file) : _n_filters (0), _filters (0), _n_features (0), _features (0), _feature_dim_out (0), _stream_tmp (0), //_file (0), _parsed (false), _meta_size (0), _meta_data (0) { _xmlpipe = ssi_create (XMLPipeline, 0, false); if (file && file[0] != '\0') { if (!parse (file)) { ssi_err ("could not parse chain '%s'", file); } } }