Gaussian noise: \(\mathcal{N}(\mu, \sigma^2)\)
Gaussian_noise_generator <- function(mu, sd, n.noise){
# generate n noise points
noise.points <- rnorm(n = n.noise, mean = mu, sd = sd)
noise.density <- dnorm(noise.points, mean = mu, sd = sd)
# plot Gaussian distribution
Gaussian.x <- seq(-5, 5, length=100)
Gaussian.y <- dnorm(x = Gaussian.x, mean = mu, sd = sd)
Gaussian.plot <- ggplot(data = data.frame('x' = Gaussian.x, 'y' = Gaussian.y), aes(x, y)) + geom_line() + scale_x_continuous(limits = c(-5, 5), breaks = seq(-5, 5)) + theme_bw()
noise.plot <- Gaussian.plot + geom_point(data=data.frame('x' = noise.points, 'y' = noise.density), aes(x, y), size = 3, alpha = 0.3)
return(list(noise = noise.points,
plot = noise.plot))
}
Generate Gaussian distributed noise data points Specifically, noise ~ \(\mathcal{N}(0, 1)\)
set.seed(1)
n = 300
Gaussian.noise <- Gaussian_noise_generator(mu = 0, sd = 1, n.noise = n)
#Gaussian.noise.points$noise
Plot noise
Gaussian.noise$plot + labs(x = 'x', y = 'p(x)')

Gaussian.noise$plot + scale_y_log10() + labs(x = 'x', y = 'log( p(x) )')

Laplace noise: \(Laplace(\mu, b)\)
rlaplace <- function (n = 1, m = 0, s = 1){
if (any(s <= 0))
stop("s must be positive")
q <- runif(n)
ifelse(q < 0.5, s * log(2 * q) + m, -s * log(2 * (1 - q)) + m)
}
dlaplace <- function (y, m = 0, s = 1, log = FALSE) {
if (any(s <= 0))
stop("s must be positive")
density <- -abs(y - m)/s - log(2 * s)
if (!log)
density <- exp(density)
density
}
Laplace_noise_generator <- function(mu, b, n.noise){
# generate n noise points
noise.points <- rlaplace(n = n.noise, m = mu, s = b)
noise.density <- dlaplace(noise.points, m = mu, s = b)
# plot distribution
background.distr.x <- seq(-5, 5, length=100)
background.distr.y <- rmutil::dlaplace(background.distr.x, m = mu, s = b)
background.plot <- ggplot(data = data.frame('x' = background.distr.x, 'y' = background.distr.y), aes(x, y)) + geom_line() + scale_x_continuous(limits = c(-5, 5), breaks = seq(-5, 5)) + theme_bw()
noise.plot <- background.plot + geom_point(data=data.frame('x' = noise.points, 'y' = noise.density), aes(x, y), size = 3, alpha = 0.3)
return(list(noise = noise.points,
plot = noise.plot))
}
Generate Laplace distributed noise data points Specifically, noise ~ \(Laplace(0, 1)\)
set.seed(1)
n <- 300
Laplace.noise <- Laplace_noise_generator(mu = 0, b = 1, n.noise = n)
#Laplace.noise$noise
Plot noise
Laplace.noise$plot + labs(x = 'x', y = 'p(x)')

Laplace.noise$plot + scale_y_log10() + labs(x = 'x', y = 'log( p(x) )')

LS0tCnRpdGxlOiAiVmlzdWFsaXphdGlvbiBvZiBHYXVzaWFuIGFuZCBMYXBsYWNlIG5vaXNlIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKR2F1c3NpYW4gbm9pc2U6ICRcbWF0aGNhbHtOfShcbXUsIFxzaWdtYV4yKSQKYGBge3J9CkdhdXNzaWFuX25vaXNlX2dlbmVyYXRvciA8LSBmdW5jdGlvbihtdSwgc2QsIG4ubm9pc2UpewogICMgZ2VuZXJhdGUgbiBub2lzZSBwb2ludHMKICBub2lzZS5wb2ludHMgPC0gcm5vcm0obiA9IG4ubm9pc2UsIG1lYW4gPSBtdSwgc2QgPSBzZCkKICBub2lzZS5kZW5zaXR5IDwtIGRub3JtKG5vaXNlLnBvaW50cywgbWVhbiA9IG11LCBzZCA9IHNkKQogIAogICMgcGxvdCBHYXVzc2lhbiBkaXN0cmlidXRpb24KICBHYXVzc2lhbi54IDwtIHNlcSgtNSwgNSwgbGVuZ3RoPTEwMCkKICBHYXVzc2lhbi55IDwtIGRub3JtKHggPSBHYXVzc2lhbi54LCBtZWFuID0gbXUsIHNkID0gc2QpCiAgCiAgR2F1c3NpYW4ucGxvdCA8LSBnZ3Bsb3QoZGF0YSA9IGRhdGEuZnJhbWUoJ3gnID0gR2F1c3NpYW4ueCwgJ3knID0gR2F1c3NpYW4ueSksIGFlcyh4LCB5KSkgKyBnZW9tX2xpbmUoKSArIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKC01LCA1KSwgYnJlYWtzID0gc2VxKC01LCA1KSkgKyB0aGVtZV9idygpCiAgbm9pc2UucGxvdCA8LSBHYXVzc2lhbi5wbG90ICsgZ2VvbV9wb2ludChkYXRhPWRhdGEuZnJhbWUoJ3gnID0gbm9pc2UucG9pbnRzLCAneScgPSBub2lzZS5kZW5zaXR5KSwgYWVzKHgsIHkpLCBzaXplID0gMywgYWxwaGEgPSAwLjMpCiAgCiAgcmV0dXJuKGxpc3Qobm9pc2UgPSBub2lzZS5wb2ludHMsCiAgICAgICAgICAgICAgcGxvdCA9IG5vaXNlLnBsb3QpKQoKfQoKYGBgCgoKR2VuZXJhdGUgR2F1c3NpYW4gZGlzdHJpYnV0ZWQgbm9pc2UgZGF0YSBwb2ludHMKU3BlY2lmaWNhbGx5LCBub2lzZSB+ICAkXG1hdGhjYWx7Tn0oMCwgMSkkCmBgYHtyfQpzZXQuc2VlZCgxKQpuID0gMzAwCkdhdXNzaWFuLm5vaXNlIDwtIEdhdXNzaWFuX25vaXNlX2dlbmVyYXRvcihtdSA9IDAsIHNkID0gMSwgbi5ub2lzZSA9IG4pCiNHYXVzc2lhbi5ub2lzZS5wb2ludHMkbm9pc2UKYGBgClBsb3Qgbm9pc2UKYGBge3J9CkdhdXNzaWFuLm5vaXNlJHBsb3QgKyBsYWJzKHggPSAneCcsIHkgPSAncCh4KScpCmBgYApgYGB7cn0KR2F1c3NpYW4ubm9pc2UkcGxvdCArIHNjYWxlX3lfbG9nMTAoKSArIGxhYnMoeCA9ICd4JywgeSA9ICdsb2coIHAoeCkgKScpCmBgYAoKCgoKCkxhcGxhY2Ugbm9pc2U6ICRMYXBsYWNlKFxtdSwgYikkCmBgYHtyfQpybGFwbGFjZSA8LSBmdW5jdGlvbiAobiA9IDEsIG0gPSAwLCBzID0gMSl7CiAgICBpZiAoYW55KHMgPD0gMCkpIAogICAgICAgIHN0b3AoInMgbXVzdCBiZSBwb3NpdGl2ZSIpCiAgICBxIDwtIHJ1bmlmKG4pCiAgICBpZmVsc2UocSA8IDAuNSwgcyAqIGxvZygyICogcSkgKyBtLCAtcyAqIGxvZygyICogKDEgLSBxKSkgKyBtKQp9CgpkbGFwbGFjZSA8LSBmdW5jdGlvbiAoeSwgbSA9IDAsIHMgPSAxLCBsb2cgPSBGQUxTRSkgewogICAgaWYgKGFueShzIDw9IDApKSAKICAgICAgICBzdG9wKCJzIG11c3QgYmUgcG9zaXRpdmUiKQogICAgZGVuc2l0eSA8LSAtYWJzKHkgLSBtKS9zIC0gbG9nKDIgKiBzKQogICAgaWYgKCFsb2cpIAogICAgICAgIGRlbnNpdHkgPC0gZXhwKGRlbnNpdHkpCiAgICBkZW5zaXR5Cn0KCkxhcGxhY2Vfbm9pc2VfZ2VuZXJhdG9yIDwtIGZ1bmN0aW9uKG11LCBiLCBuLm5vaXNlKXsKICAjIGdlbmVyYXRlIG4gbm9pc2UgcG9pbnRzCiAgbm9pc2UucG9pbnRzIDwtIHJsYXBsYWNlKG4gPSBuLm5vaXNlLCBtID0gbXUsIHMgPSBiKQogIG5vaXNlLmRlbnNpdHkgPC0gZGxhcGxhY2Uobm9pc2UucG9pbnRzLCBtID0gbXUsIHMgPSBiKQogIAogICMgcGxvdCBkaXN0cmlidXRpb24KICBiYWNrZ3JvdW5kLmRpc3RyLnggPC0gc2VxKC01LCA1LCBsZW5ndGg9MTAwKQogIGJhY2tncm91bmQuZGlzdHIueSA8LSBybXV0aWw6OmRsYXBsYWNlKGJhY2tncm91bmQuZGlzdHIueCwgbSA9IG11LCBzID0gYikKICAKICBiYWNrZ3JvdW5kLnBsb3QgPC0gZ2dwbG90KGRhdGEgPSBkYXRhLmZyYW1lKCd4JyA9IGJhY2tncm91bmQuZGlzdHIueCwgJ3knID0gYmFja2dyb3VuZC5kaXN0ci55KSwgYWVzKHgsIHkpKSArIGdlb21fbGluZSgpICsgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoLTUsIDUpLCBicmVha3MgPSBzZXEoLTUsIDUpKSArIHRoZW1lX2J3KCkKICBub2lzZS5wbG90IDwtIGJhY2tncm91bmQucGxvdCArIGdlb21fcG9pbnQoZGF0YT1kYXRhLmZyYW1lKCd4JyA9IG5vaXNlLnBvaW50cywgJ3knID0gbm9pc2UuZGVuc2l0eSksIGFlcyh4LCB5KSwgc2l6ZSA9IDMsIGFscGhhID0gMC4zKQogIAogIHJldHVybihsaXN0KG5vaXNlID0gbm9pc2UucG9pbnRzLAogICAgICAgICAgICAgIHBsb3QgPSBub2lzZS5wbG90KSkKCn0KYGBgCkdlbmVyYXRlIExhcGxhY2UgZGlzdHJpYnV0ZWQgbm9pc2UgZGF0YSBwb2ludHMKU3BlY2lmaWNhbGx5LCBub2lzZSB+ICAkTGFwbGFjZSgwLCAxKSQKYGBge3J9CnNldC5zZWVkKDEpCm4gPC0gMzAwCkxhcGxhY2Uubm9pc2UgPC0gTGFwbGFjZV9ub2lzZV9nZW5lcmF0b3IobXUgPSAwLCBiID0gMSwgbi5ub2lzZSA9IG4pCiNMYXBsYWNlLm5vaXNlJG5vaXNlCmBgYApQbG90IG5vaXNlCmBgYHtyfQpMYXBsYWNlLm5vaXNlJHBsb3QgKyBsYWJzKHggPSAneCcsIHkgPSAncCh4KScpCmBgYApgYGB7cn0KTGFwbGFjZS5ub2lzZSRwbG90ICsgc2NhbGVfeV9sb2cxMCgpICsgbGFicyh4ID0gJ3gnLCB5ID0gJ2xvZyggcCh4KSApJykKYGBgCgo=