# 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
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.