Mercurial > hg > pitch-accuracy-and-interaction-in-unaccompanied-duet-singing
view latex/scripts/simulation.R @ 1:6531169e6866
latex files
author | Jiajie Dai <daijiajie1@gmail.com> |
---|---|
date | Tue, 21 Feb 2017 11:43:03 +0000 |
parents | |
children |
line wrap: on
line source
mu <- 0.85 N <- 75 # number of simulated notes per "song" nSong <- 1500 # number of songs n <- 50 # distance between note samples, i.e. we want Var[p_{i+n}-p_i] burnin <- 0 sig2 <- 0.0786 endnotes <- mat.or.vec(nSong,1) # simulate performance according to model for (iSong in 1:nSong) { track <- mat.or.vec(N,1) track[1] <- c(rnorm(1, 0, sqrt(sig2))) for (ii in 2:N) { track[ii] <- track[ii-1] + rnorm(1, 0, sqrt(sig2)) * (1-mu) } # trackdiff <- track[(n+1+burnin):N]-track[(1+burnin):(N-n)] endnotes[iSong] <- mean(track[n+1]) } # calculate lots of differences between notes spaced n notes apart # -- I start after burnin notes, so that I don't have to assume deterministic starting note # observed variance of the difference, i.e. Var[p_50-p_0] vd <- var(endnotes) # try to recover mu mu.est.1 <- 1-sqrt((vd-sig2)/((n-1)*sig2)) mu.est.2 <- 1-sqrt(vd/((n-1)*sig2)) cat(sprintf("True mu: %0.3f.\n", mu)) cat(sprintf("Number of notes simulated: %i (burn-in is %i notes).\n", N, burnin)) cat(sprintf("Estimate mu as derived from intonation_model-5.pdf: %0.3f.\n", mu.est.1)) cat(sprintf("Without additional variance term: %0.3f\n", mu.est.2))