R/wavelet-S-detection.R

# Teresa updated April 19th 2018

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


slice_search_after_ <- function(w_scale, index, sampling_frequency = 250) {
  after_overlap <- round(0.13 * sampling_frequency)

  slice_end <- slice_after(index, after_overlap, w_scale)

  signal_slice <- w_scale[(index + 1):slice_end]
}

zerocross_search_after_ <- function(scale1_wavelets, peak_index) {
  scale1_wavelets %>%
    slice_search_after_(peak_index) %>%
    zerocross() %>%
    maybe_map(partial(add, peak_index))
}

#' Search for S 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 sampling rate, in samples per second
#'
#' @export
#'

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

    R_peaks <-
      R_peaks - alignments[1] + 1

    S <-
      c()

    qrs_window <- round(0.1 * sampling_frequency)


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

      after_r <- slice_after(r, qrs_window, scale2_wavelets)

      peak_after_r <- scale2_wavelets[r:after_r] %>% peak_after(r)

      amp_peak_after_r <- scale2_wavelets[peak_after_r]


      S[i] <-
        scale1_wavelets %>%
        zerocross_search_after_(peak_after_r) %>%
        maybe_default(NaN)
    }

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