R/wavelet-Q-detection.R

# Teresa updated April 19th 2018

#' @importFrom assertthat assert_that
#' @importFrom magrittr %>%
#'
library("magrittr")
library("purrr")
library("assertthat")


#' Search for Q wave in ECG signals based on wavelet transform
#' Return a vector of index (based on processed ECG signal)
#'
#' TODO: Add details, perhaps better description
#'
#' @param R_peaks An index vector of R peaks
#' @param wavelets The n * 5 wavelet transform matrix of ECG signal
#' @param alignments An index vector for aligning indexes
#' @param sampling_frequency signal alignmentsling rate, in alignmentsles per second
#'
#' @export
#'

wavelet_Q_detection <-
  function(R_peaks, wavelets, alignments, sampling_frequency = 250) {
    scale1_wavelets <- wavelets[, 1]
    scale2_wavelets <- wavelets[, 2]

    R_peaks <-
      R_peaks - alignments[1] + 1

    Q <- c()

    qrs_window <- round(0.1 * sampling_frequency)

    off_set <- ceiling(0.02 * sampling_frequency)
    # to avoid the infulence of wavelets peaks before R peak
    alt_offset <- ceiling(0.03 * sampling_frequency)

    for (i in 1:length(R_peaks)) {
      r <- R_peaks[i]

      before_r <- slice_before(r, qrs_window)

      peak_before_r <- scale2_wavelets[before_r:r] %>% peak_before(r)

      # amp_peak_before_r <- scale2_wavelets[peak_before_r]
      # before_peak_r <- slice_before(peak_before_r, qrs_window)
      alt_before_r <- slice_before((r-off_set), qrs_window)
      alternative_q <- scale1_wavelets[alt_before_r:(r-off_set)] %>% peak_before(r-off_set)

      # temporary solution to deal with NAs -- Teresa April 11th 2019 ------>
      alternative_q <- ifelse(is.na(alternative_q), r - alt_offset, alternative_q)

      Q[i] <-
        scale1_wavelets %>%
        zerocross_search_before_(peak_before_r) %>%
        maybe_default(alternative_q)
    }

    Q + alignments[1] - 1
  }
Teresa00/hfmAnnotation documentation built on May 14, 2019, 12:51 a.m.