Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE)
## ----old_par, include = FALSE-------------------------------------------------
old.par <- par("mfrow", "mai", "pty")
## ----R_version, include = TRUE, echo = FALSE----------------------------------
out <- version
cat(
"R version: ",
out$major, ".",
out$minor,
"\n",
"Generated on: ",
format(Sys.time(), "%d-%B-%Y"),
sep = ""
)
## ----load_library-------------------------------------------------------------
library(MatchingPursuit)
## ----empi_install, include = TRUE, echo = TRUE--------------------------------
# empi.install()
## ----empi_find, include = TRUE, echo = TRUE-----------------------------------
empi.check()
## ----7_non_stationary, include = TRUE, echo = TRUE, warning = FALSE-----------
fs <- 1024
T <- 1
t <- seq(0, T - 1 / fs, 1 / fs)
N <- length(t)
# 7 non-stationary signals.
x1 <- sin(2 * pi * (10 + 40 * t) * t) # linear chirp
x2 <- sin(2 * pi * (20 * t^2) * t) # nonlinear chirp
x3 <- (1 + 0.5 * sin(2 * pi * 2 * t)) * sin(2 * pi * 30 * t) # AM
x4 <- sin(2 * pi * 50 * t + 5 * sin(2 * pi * 3 * t)) # FM
x5 <- exp(-2 * t) * sin(2 * pi * 60 * t) # decreasing amplitude
x6 <- sin(2 * pi * (5 + 20 * sin(2 * pi * t)) * t) # frequency modulated sine wave
x7 <- t * sin(2 * pi * 40 * t) # increasing amplitude
signal <- data.frame(x = x1 + x2 + x3 + x4 + x5 + x6 + x7)
## ----7_non_stationary_plot, include = TRUE, echo = FALSE, warning = FALSE, fig.width = 7, fig.height = 7----
range <- range(signal)
par(mfrow = c(8, 1), pty = "m", mai = c(0.2, 0.4, 0.2, 0.1))
plot(t, signal$x, type = "l", col = "blue", main = "", xlab = "", ylab = "")
plot(t, x1, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "Linear chirp")
plot(t, x2, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "Nonlinear chirp")
plot(t, x3, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "AM")
plot(t, x4, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "FM")
plot(t, x5, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "Decreasing amplitude")
plot(t, x6, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "Frequency modulated sine wave")
plot(t, x7, type = "l", ylab = "", xlab = "", xaxt = "n", yaxt = "s", main = "Increasing amplitude")
par(old.par)
## ----signal, include = TRUE, echo = TRUE, warning = FALSE---------------------
file <- system.file("extdata", "sample1.csv", package = "MatchingPursuit")
out <- read.csv(file, header = FALSE)
head(out)
out <- read.csv.signals(file)
str(out)
head(out$signal)
out$sampling.rate
## ----empi_execute, include = TRUE, echo = TRUE, warning = FALSE---------------
# file <- system.file("extdata", "sample1.csv", package = "MatchingPursuit")
# signal <- read.csv.signals(file)
# empi.out <- empi.execute (
# signal = signal,
# empi.options = "-o local --gabor -i 25",
# write.to.file = TRUE,
# file.dest = NULL,
# file.name = "sample1.db"
# )
## ----sample1, include = TRUE, echo = TRUE, warning = FALSE, fig.width = 7, fig.height = 7----
# Reading a SQLite file in which all generated atom parameters are stored.
file <- system.file("extdata", "sample1.db", package = "MatchingPursuit")
# Create time-frequency map based on MP atoms.
out <- empi2tf(
db.file = file,
channel = 1,
mode = "sqrt",
freq.divide = 4,
increase.factor = 4,
display.crosses = FALSE,
display.atom.numbers = TRUE,
out.mode = "plot"
)
## ----eeg_edf_reading, include = TRUE, echo = TRUE, warning = FALSE------------
file <- system.file("extdata", "EEG.edf", package = "MatchingPursuit")
# Read signal parameters and display them in a tabular form.
read.edf.params(file)
## ----eeg_edf_reading_resampling, include = TRUE, echo = TRUE, warning = FALSE----
# Original signal
out1 <- read.edf.signals(file, resampling = FALSE, from = 0, to = 10)
signal <- out1$signals
sampling.rate <- out1$sampling.rate
sampling.rate
# Resampled signal
out2 <- read.edf.signals(file, resampling = TRUE, f.new = 64, from = 0, to = 10)
signal.resampled <- out2$signals
sampling.rate.resampled <- out2$sampling.rate
sampling.rate.resampled
## ----sampling, include = TRUE, echo = FALSE, warning = FALSE, fig.width = 7, fig.height = 4----
par(mfrow = c(2, 1), pty = "m", mai = c(0.8, 0.5, 0.5, 0.5))
# Not-filtered signal (raw signal).
plot(
signal[, 1],
type = "l",
panel.first = grid(),
main = "Original signal (256 Hz), channel #1",
xlab = "sample points",
ylab = "",
col = "blue"
)
# Signal after filtering.
plot(
signal.resampled[, 1],
type = "l",
panel.first = grid(),
main = "Signal after downsampling (64 Hz), channel #1",
xlab = "sample points",
ylab = "",
col = "blue"
)
par(old.par)
## ----montage, include = TRUE, echo = TRUE, warning = FALSE--------------------
# Pairs of signals for bipolar montage (so called "double banana").
pairs <- list(
c("Fp2", "F4"), c("F4", "C4"), c("C4", "P4"), c("P4", "O2"), c("Fp1", "F3"), c("F3", "C3"),
c("C3", "P3"), c("P3", "O1"), c("Fp2", "F8"), c("F8", "T4"), c("T4", "T6"), c("T6", "O2"),
c("Fp1", "F7"), c("F7", "T3"), c("T3", "T5"), c("T5", "O1"), c("Fz", "Cz"), c("Cz", "Pz")
)
# Make the bipolar montage.
bip.montage <- eeg.montage(signal, montage.type = c("bipolar"), bipolar.pairs = pairs)
# Original signal.
head(signal[, 1:5])
# Signal after banana montage.
head(bip.montage[, 1:5])
## ----filtering, include = TRUE, echo = TRUE, warning = FALSE------------------
# Filter parameters that will be used (quite typical in filtering EEG signals).
fc <- filters.coeff(
fs = sampling.rate,
notch = c(49, 51),
lowpass = 40,
highpass = 1,
)
# Filtering input signals.
bip.montage.filt <- bip.montage
for (m in 1:ncol(bip.montage)) {
bip.montage.filt[, m] = signal::filtfilt(fc$notch, bip.montage[, m]) # 50Hz notch filter
bip.montage.filt[, m] = signal::filtfilt(fc$lowpass, bip.montage.filt[, m]) # Low pass IIR Butterworth
bip.montage.filt[, m] = signal::filtfilt(fc$highpass, bip.montage.filt[, m]) # High pass IIR Butterwoth
}
## ----no_filtering_and_filtering_plot, include = TRUE, echo = FALSE, warning = FALSE, fig.width = 7, fig.height = 4----
ch <- 1
par(mfrow = c(2, 1), pty = "m", mai = c(0.8, 0.5, 0.5, 0.5))
# Not-filtered signal (raw signal).
plot(
bip.montage[, ch],
type = "l",
panel.first = grid(),
main = paste(colnames(bip.montage)[ch], " (raw signal, channel #1)", sep = ""),
xlab = "sample points",
ylab = "",
col = "blue"
)
# Signal after filtering.
plot(
bip.montage.filt[, ch],
type = "l",
panel.first = grid(),
main = paste(colnames(bip.montage)[ch], " (filtered signal, channel #1)", sep = ""),
xlab = "sample points",
ylab = "",
col = "blue"
)
par(old.par)
## ----eeg_empi_execute, include = TRUE, echo = TRUE, warning = FALSE, fig.width = 7, fig.height = 7----
# The empi.options parameter is NULL, so the EMPI program is
# run with the parameters "-o local --gabor -i 50"
# sig <- list(bip.montage.filt, out1$sampling.rate)
# empi.out <- empi.execute (
# signal = sig,
# empi.options = NULL,
# write.to.file = TRUE,
# path = NULL,
# file.name = "EEG_bipolar_filtered.db"
# )
## ----eeg_TF, include = TRUE, echo = TRUE, warning = FALSE, fig.width = 7, fig.height = 7----
# Reading a SQLite file where all the generated atom's parameters are stored.
file <- system.file("extdata", "EEG_bipolar_filtered.db", package = "MatchingPursuit")
# Generate time-frequency map based on MP atoms.
out <- empi2tf(
db.file = file,
channel = 1,
mode = "sqrt",
freq.divide = 6,
increase.factor= 4,
display.crosses = TRUE,
display.atom.numbers = FALSE,
out.mode = "plot"
)
## ----atom_params, include = TRUE, echo = TRUE, warning = FALSE----------------
file <- system.file("extdata", "sample1.db", package = "MatchingPursuit")
atom.params(file)
## ----eeg_atom_params, include = TRUE, echo = TRUE, warning = FALSE------------
file <- system.file("extdata", "EEG_bipolar_filtered.db", package = "MatchingPursuit")
ap <- atom.params(file)
head(ap, 5)
tail(ap, 5)
## ----sig_2_bin, include = TRUE, echo = TRUE, warning = FALSE------------------
file <- system.file("extdata", "sample3.csv", package = "MatchingPursuit")
out <- read.csv.signals(file)
signal.bin <- sig2bin(data = out$signal, write.to.file = FALSE)
# We have 3 channels. The first 4 time points.
head(out$signal, 4)
# The same elements of the signal in binary (floats are stored in 4 bytes).
head(signal.bin, 48)
## ----read_empi_db_file, include = TRUE, echo = TRUE, warning = FALSE----------
file <- system.file("extdata", "sample1.db", package = "MatchingPursuit")
out <- read.empi.db.file(file)
str(out)
## ----display_original_and_reconstrction, include = TRUE, echo = FALSE, warning = FALSE, fig.width = 7, fig.height = 4----
n.channnels <- ncol(out$original.signal)
original.signal <- out$original.signal
reconstruction <- out$reconstruction
t <- out$t
f <- out$f
len <- length(original.signal[, 1])
lab <- seq(t[1], t[len] + 1 / f, length.out = 11)
par(mfrow = c(2, 1), pty = "m", mai = c(0.8, 0.5, 0.5, 0.5))
plot(
original.signal[,1], type = "l", col = "blue",
main = "Original signal",
xaxt = "n", ylab = "", xlab = "time [sec]"
)
axis(side = 1, las = 1, cex.axis = 0.9, at = seq(0, len, length.out = 11), labels = lab)
plot(
reconstruction[,1], type = "l", col = "blue",
main = "Rconstructed signal",
xaxt = "n", ylab = "", xlab = "time [sec]"
)
axis(side = 1, las = 1, cex.axis = 0.9, at = seq(0, len, length.out = 11), labels = lab)
par(old.par)
## ----chirp_def, include = TRUE, echo = FALSE, warning = FALSE-----------------
n <- 1280
f <- 128
t1 = n / f
t <- seq(from = 0, to = n - 1, by = 1) / f
g1 <- gabor.fun(n, f, mean = 2, phase = 0, sigma = 1, frequency = 50, normalization = F)
g2 <- gabor.fun(n, f, mean = 8, phase = 0, sigma = 1.5, frequency = 25, normalization = F)
g3 <- gabor.fun(n, f, mean = 2, phase = 0, sigma = 2, frequency = 30, normalization = F)
g4 <- gabor.fun(n, f, mean = 7, phase = 0, sigma = 0.5, frequency = 15, normalization = F)
imp <- rep(0, n)
imp[n / 2] <- 4
sine <- 0.2 * sin(2 * pi * 3 * t)
chirp <- signal::chirp(t = t, f0 = 0, t1 = t1, f1 = 50, form = c("linear"), phase = 0)
signal <- g1$gabor + g2$gabor + g3$gabor + g4$gabor + imp + chirp + sine
## ----chirp_plot, include = TRUE, echo = FALSE, warning = FALSE, fig.width = 7, fig.height = 7----
par(mfcol = c(8, 1), pty = "m", mai = c(0.2, 0.1, 0.2, 0.1))
ylim <- c(-2, 2)
plot(t, signal, ylim = ylim, xaxt = "s", yaxt = "n", bty = "o", col = "blue", type = "l", xlab = "", ylab = "", main = "The sum of the below functions")
plot(t, g1$gabor, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Gabor: f = 50Hz, mean = 2, sigma = 1, phase = 0")
plot(t, g2$gabor, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Gabor: f = 25Hz, mean = 8, sigma = 1.5, phase = 0")
plot(t, g3$gabor, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Gabor: f = 30Hz, mean = 2, sigma = 2, phase = 0")
plot(t, g4$gabor, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Gabor: f = 15Hz, mean = 7, sigma = 0.5, phase = 0")
plot(t, imp, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Unit impulse")
plot(t, sine, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Sine wave: 3 Hz")
plot(t, chirp, ylim = ylim, xaxt = "n", yaxt = "n", bty = "o", col = "brown", type = "l", xlab = "", ylab = "", main = "Linear-frequency chirp (0Hz - 50Hz)")
par(old.par)
## ----chirp_plot_tf, include = TRUE, echo = FALSE, warning = FALSE, fig.width = 7, fig.height = 6----
file <- system.file("extdata", "sample2.db", package = "MatchingPursuit")
out <- empi2tf(
db.file = file,
channel = 1,
mode = "sqrt",
freq.divide = 1,
increase.factor= 4,
display.crosses = TRUE,
display.atom.numbers = FALSE,
out.mode = "plot",
plot.signals = FALSE
)
## ----Gabor_fun, include = TRUE, echo = FALSE, fig.width = 7, fig.height = 5, fig.align = 'center'----
N <- 512
fs <- 256
# normalization = T --> signal's norm = 1
par(mfrow = c(2,2), pty = "m", mai = c(0.4, 0.4, 0.3, 0.2))
n <- 4
sigmas <- c(0.5, 0.2, 0.8, 0.5)
frequencies <- c(14, 8, 4, 1)
phases <- c(0, 1, 1.5, -2)
means = c(0.5, 0.8, 1, 1.5)
s <- rep(0, N)
for (i in c(1:n)) {
sigma <- sigmas[i]
frequency <- frequencies[i]
phase <- phases[i]
mean <- means[i]
main <- latex2exp::TeX(paste(
"$\\mu=$", means[i], ", ",
"$\\sigma=$", sigmas[i], ", ",
"$\\f=$", frequencies[i], ", ",
"$\\phi=$", phases[i],
sep = ""
)
)
gb <- gabor.fun(N, fs, mean, phase, sigma, frequency, normalization = F)
plot(
gb$t,
gb$gauss, type="l", ylim = c(-1, 1), col = "red",
xlab= "", ylab= "",
xaxt = "t", yaxt = "t", bty = "or",
cex.axis = 1, lwd = 2,
main = main)
lines(gb$t, gb$cosinus, type = "l", col = "grey")
lines(gb$t, gb$gabor, col="blue", lwd = 2)
s <- s + gb$gabor
}
par(old.par)
## ----restore_par, include = FALSE---------------------------------------------
par(old.par)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.