From 1e7712c64ed96f3f1660c397a20700328b64f5b9 Mon Sep 17 00:00:00 2001 From: mcrucifix <michel.crucifix@uclouvain.be> Date: Wed, 16 Oct 2024 15:29:09 +0200 Subject: [PATCH] introduce develop method + changed data --- NAMESPACE | 11 +++--- R/data_description.R | 6 +-- R/mfft_complex.R | 6 +-- R/mfft_real.R | 8 ++-- R/mfft_support.R | 67 ++++++++++++++++++++++---------- data-raw/harmonic_sample.R | 15 +++---- data-raw/pseudo_log.R | 6 +-- data/harmonic_sample.rda | Bin 8648 -> 8669 bytes data/harmonic_sample_noisy.rda | Bin 8669 -> 8688 bytes data/pseudo_log.rda | Bin 655 -> 442 bytes man/harmonic_sample.Rd | 2 +- man/harmonic_sample_noisy.Rd | 2 +- man/mfft.Rd | 2 +- man/mfft_complex.Rd | 2 +- man/mfft_deco.Rd | 44 --------------------- man/mfft_real.Rd | 6 +-- man/pseudo_log.Rd | 2 +- notebook/mfft_random_test.ipynb | 8 ++-- 18 files changed, 84 insertions(+), 103 deletions(-) delete mode 100644 man/mfft_deco.Rd diff --git a/NAMESPACE b/NAMESPACE index 072919d..54a74e7 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,17 +1,19 @@ # Generated by roxygen2: do not edit by hand -S3method(as.data.frame,mfft_deco) -S3method(lines,mfft_deco) +S3method(as.data.frame,discreteSpectrum) +S3method(develop,discreteSpectrum) +S3method(lines,discreteSpectrum) S3method(plot,SSAObject) +S3method(plot,discreteSpectrum) S3method(plot,memObject) -S3method(plot,mfft_deco) S3method(plot,periodogram) S3method(plot,wavelet) -S3method(print,mfft_deco) +S3method(print,discreteSpectrum) export(approx_ts) export(arspec) export(attributeTones) export(cwt_morlet) +export(develop) export(hilbert_extension) export(mem) export(mfft) @@ -21,7 +23,6 @@ export(mfft_real) export(mmfft) export(periodogram) export(powerspectrum.wavelet) -export(reconstruct_mfft) export(reconstruct_morlet) export(ssa) export(toneCombinations) diff --git a/R/data_description.R b/R/data_description.R index 787a357..1255adf 100644 --- a/R/data_description.R +++ b/R/data_description.R @@ -2,7 +2,7 @@ #' #' A simple time series for testing purposes #' cos(t*0.13423167+0.00) + 1.3 * cos(t*0.119432+2.314) + 0.134994 + 0.4*cos(t*0.653167) + 0.11 * cos(t*0.78913498) -#' for t from 0 to 1023. It is coded as a `mfft_deco` objcet and self-describes its spectral decomposition. +#' for t from 0 to 1023. It is coded as a `discreteSpectrum` objcet and self-describes its spectral decomposition. #' #' @docType data #' @keywords datasets @@ -14,7 +14,7 @@ NULL #' #' Same has harmonic sample but with an added random time series #' cos(t*0.13423167+0.00) + 1.3 * cos(t*0.119432+2.314) + 0.134994 + 0.4*cos(t*0.653167) + 0.11 * cos(t*0.78913498) + rnorm(1024)*0.12 -#' for t from 0 to 1023. It is coded as a `mfft_deco` objcet and self-describes its spectral decomposition. +#' for t from 0 to 1023. It is coded as a `discreteSpectrum` objcet and self-describes its spectral decomposition. #' #' @docType data #' @keywords datasets @@ -26,7 +26,7 @@ NULL #' #' A truncated version (squared-shape) version of a harmonic signal for mimicking a sedimentary log #' sign( cos(t*0.13423167+0.00) + 1.3 * cos(t*0.119432+2.314) + 0.134994 + 0.4*cos(t*0.653167) + 0.11 * cos(t*0.78913498) + 0.8)) -#' for t from 0 to 8191. It is coded as a `mfft_deco` objcet and self-describes its spectral decomposition. +#' for t from 0 to 8191. It is coded as a `discreteSpectrum` objcet and self-describes its spectral decomposition. #' @docType data #' @keywords datasets #' @name pseudo_log diff --git a/R/mfft_complex.R b/R/mfft_complex.R index d8fedd7..78a3305 100644 --- a/R/mfft_complex.R +++ b/R/mfft_complex.R @@ -22,7 +22,7 @@ #' not documented for real time series #' @param nfreq is the number of frequencies returned, must be smaller that the length of xdata. #' @param force_complex : use the complex number implementation even if the time series is real. -#' @return a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". +#' @return a `discreteSpectrum` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". #' note that because of a language glitch (to be fixed), "Freq" actually means "Rate" #' @author Michel Crucifix for the R code, and David Nesvorny for most of the supporting C code doing the #' Frequency Modified Fourier transform for Complex Numbers @@ -56,7 +56,7 @@ mfft <- function(xdata, nfreq=15, minfreq=NULL, maxfreq=NULL, correction=1, forc #' the third algorithm should be in general much more precise). #' The computed frequencies are in the range given by minfreq and maxfreq. #' @param nfreq is the number of frequencies returned, must be smaller that the length of xdata. -#' @return a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". +#' @return a `discreteSpectrum` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". #' note that because of a language glitch (to be fixed), "Freq" actually means "Rate" #' @author Michel Crucifix for the R code, and David Nesvorny for most of the supporting C code doing the #' actual computations @@ -104,7 +104,7 @@ mfft_complex <- function(xdata, nfreq=30, minfreq=NULL, maxfreq=NULL, correctio # corresponding to the same amplitude OUT <- data.frame(Freq=Freq, Amp=Ampl, Phases=Phase) - class(OUT) <- c("mfft_deco", "data.frame") + class(OUT) <- c("discreteSpectrum", "data.frame") attr(OUT,"nfreq") <- nfreq attr(OUT,"data") <- xdata diff --git a/R/mfft_real.R b/R/mfft_real.R index b8f60c3..2f9fc87 100644 --- a/R/mfft_real.R +++ b/R/mfft_real.R @@ -342,15 +342,15 @@ mfft_analyse <- function(xdata, nfreq, fast = TRUE, nu = NULL, minfreq=NULL, max #' @param nfreq is the number of frequencies returned, must be smaller that the length of xdata. #' @param fast (default = TRUE) uses analytical formulations for the crossproducts involving sines and cosines. #' note: this is not really faster because the bottleneck is actually the goden section search. But more elegant. -#' @return a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". +#' @return a `discreteSpectrum` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". #' @author Michel Crucifix #' @references #' \insertRef{sidlichovsky97aa}{gtseries} #' @examples #' #' data(harmonic_sample) -#' spectrum <- mfft_real(harmonic_sample$data) -#' print(spectrum) +#' spec <- mfft_real(harmonic_sample$data) +#' print(spec) #' #' @export mfft_real mfft_real <- function(xdata, nfreq=5, minfreq=NULL, maxfreq=NULL, correction = 1 , fast=TRUE){ @@ -430,7 +430,7 @@ mfft_real <- function(xdata, nfreq=5, minfreq=NULL, maxfreq=NULL, correction = # rename for class compatibility names(OUT) <- c("Freq","Amp","Phases") - class(OUT) <- c("mfft_deco", "data.frame") + class(OUT) <- c("discreteSpectrum", "data.frame") attr(OUT, "data") <- xdata attr(OUT, "nfreq") <- nfreq return(OUT) diff --git a/R/mfft_support.R b/R/mfft_support.R index cb8dfc7..b468684 100644 --- a/R/mfft_support.R +++ b/R/mfft_support.R @@ -1,27 +1,54 @@ #' MFFT reconstruction #' @importFrom stats deltat start -#' @rdname mfft_deco -#' @param M : mfft_deco object -#' @param sum : TRUE if user wants to sum components in the reconstruction -#' @export reconstruct_mfft +#' @param M : discreteSpectrum object +#' @param times: if supplied, times of the decomposition +#' @param start: if supplied, overrides time and will generate a time series with start and deltat, which must then +#' be supplied as well +#' @param deltat : see start. +#' @param sum : TRUE if user wants to sum components %in% the reconstruction +#' @note if none if times, start and deltat are supplied, will reconstruct based on the attribute `xdata` +#' which must then be present. If no `xdata` is availble, return an error. #' @return list of reconstructed components if sum=FALSE, full #' reconstructed time series otherwise -reconstruct_mfft <- function(M, sum=TRUE){ - if (!(attr(M,"class")=="mfft_deco")) stop ("object is not a MFFT decomposition") +#' @method develop discreteSpectrum +#' @export +develop.discreteSpectrum <- function(M, times=NULL, start=NULL, end=NULL, deltat=NULL, sum=TRUE){ + if (!("discreteSpectrum" %in% class(M))) stop ("object is not a discreteSpectrum decomposition") + + timesIsATseries = FALSE + if (!is.null(start)){ + if (is.null(deltat) || is.null(end)) stop ("if you supply start, you must also supply deltat and end"); + times <- start + seq((end - start) %/% deltat) * deltat + timesIsATseries = TRUE + } + + if (is.null(times)){ + if (is.null(attr(M,"data"))) stop ("if you do not supply any time argument (times, or (start, end, deltat)), then object must have a valid data attribute") xdata <- attr(M,"data") + start <- stats::start(xdata) + deltat <- stats::deltat(deltat) + times <- (seq(length(xdata))-1) * stats::deltat(xdata) + stats::start(xdata)[1] + timesIsATseries = TRUE + } + nfreq <- attr(M,"nfreq") - times <- seq(length(xdata))*stats::deltat(xdata) + stats::start(xdata)[1] - reconstructed <- lapply(seq(nfreq), function(i) ts( M$Amp[i]*cos(M$Freq[i]*times + M$Phase[i]), start=stats::start(xdata), deltat=stats::deltat(xdata)) ) + if (is.null(nfreq)) nfreq <- length(M$Amp) + if (timesIsATseries){ + reconstructed <- lapply(seq(nfreq), function(i) ts( M$Amp[i] * cos(M$Freq[i] * times + M$Phase[i]), start=start, deltat=deltat) )} + else { + reconstructed <- lapply(seq(nfreq), function(i) M$Amp[i] * cos(M$Freq[i] * times + M$Phase[i])) + } if ( sum ) reconstructed <- ts(apply(simplify2array(reconstructed), 1 , sum), start=stats::start(xdata), deltat=stats::deltat(xdata)) + return(reconstructed) } #' MFFT ANOVA #' not ready. do not use. -#' @rdname mfft_deco +#' @rdname discreteSpectrum #' @export mfft_anova mfft_anova <- function(M){ - if (!(attr(M,"class")=="mfft_deco")) stop ("object is not a MFFT decomposition") + if (!("discreteSpectrum" %in% class(M))) stop ("object is not a discreteSpectrum decomposition") xdata <- attr(M,"xdata") nfreq <- attr(M,"nfreq") N <- length(xdata) @@ -37,17 +64,17 @@ mfft_anova <- function(M){ } -#' @rdname mfft_deco +#' @rdname discreteSpectrum #' @export -as.data.frame.mfft_deco <- function(x) {data.frame(Freq=x$Freq, Amp=x$Amp, Phases=x$Phases)} +as.data.frame.discreteSpectrum <- function(x) {data.frame(Freq=x$Freq, Amp=x$Amp, Phases=x$Phases)} -#' @rdname mfft_deco -#' @param a `mfft_deco` object, typically the output of a `mfft` call. +#' @rdname discreteSpectrum +#' @param a `discreteSpectrum` object, typically the output of a `mfft` call. #' @param labels to be set above the frequency peaks. Can be the output of `attributeTone` #' @param periods if TRUE will add a lower axis with period labels #' @export -plot.mfft_deco <- function (M,periods=FALSE,labels=NULL,...){ +plot.discreteSpectrum <- function (M,periods=FALSE,labels=NULL,...){ # O <- order(M$Freq) plot(abs(M$Freq), abs(M$Amp),'h',ylab="Amplitudes", xlab="", ...) if (periods) { @@ -60,25 +87,25 @@ plot.mfft_deco <- function (M,periods=FALSE,labels=NULL,...){ } else { mtext("Rate", 1, 3) } - points(abs(M$Freq), abs(M$Amp),'p',...) + # points(abs(M$Freq), abs(M$Amp),'p',...) if (!is.null(labels)) { yshift <- 0.05*diff(range(M$Amp)) text(M$Freq, M$Amp, labels, srt=90, , adj=-0.4) } } -#' @rdname mfft_deco +#' @rdname discreteSpectrum #' @export -lines.mfft_deco <- function (M,...){ +lines.discreteSpectrum <- function (M,...){ # O <- order(M$Freq) lines(abs(M$Freq), abs(M$Amp),'h',...) points(abs(M$Freq), abs(M$Amp),'p',...) } -#' @rdname mfft_deco +#' @rdname discreteSpectrum #' @export -print.mfft_deco <- function (M,...){ +print.discreteSpectrum <- function (M,...){ print.data.frame(cbind(as.data.frame(M), Period=2*pi/M$Freq)) } diff --git a/data-raw/harmonic_sample.R b/data-raw/harmonic_sample.R index bebfb49..4c2eaff 100644 --- a/data-raw/harmonic_sample.R +++ b/data-raw/harmonic_sample.R @@ -10,12 +10,10 @@ harmonic_sample_spectrum <- list( Freq = c(0.13423167, 0.119432, 0, 0.653167, 0.78913498), Phases = c(0, 2.314, 0, 0.653167, 0)) -attr(harmonic_sample_spectrum,"class") <- 'mfft_deco' - -harmonic_sample_noisy$data <- harmonic_sample_data -harmonic_sample_noisy$spectrum <- harmonic_sample_spectrum - +class(harmonic_sample_spectrum) <- 'discreteSpectrum' +harmonic_sample_noisy <- harmonic_sample_spectrum +attr(harmonic_sample_noisy,"data") <- harmonic_sample_data usethis::use_data(harmonic_sample_noisy, overwrite = TRUE) @@ -29,10 +27,9 @@ harmonic_sample_spectrum <- list( Freq = c(0.13423167, 0.119432, 0, 0.653167, 0.78913498), Phases = c(0, 2.314, 0, 0.653167, 0)) -attr(harmonic_sample_spectrum,"class") <- 'mfft_deco' - -harmonic_sample$data <- harmonic_sample_data -harmonic_sample$spectrum <- harmonic_sample_spectrum +class(harmonic_sample_spectrum) <- 'discreteSpectrum' +harmonic_sample <- harmonic_sample_spectrum +attr(harmonic_sample,"data") <- harmonic_sample_data usethis::use_data(harmonic_sample, overwrite = TRUE) diff --git a/data-raw/pseudo_log.R b/data-raw/pseudo_log.R index 87bfda7..b9af3bb 100644 --- a/data-raw/pseudo_log.R +++ b/data-raw/pseudo_log.R @@ -13,10 +13,10 @@ pseudo_log_spectrum <- list( Phases = c(0, 2.314, 0, 0.653167, 0)) -attr(pseudo_log_spectrum,"class") <- 'mfft_deco' +class(pseudo_log_spectrum) <- 'discreteSpectrum' -pseudo_log$data <- pseudo_log_data -pseudo_log$spectrum <- pseudo_log_spectrum +pseudo_log_spectrum <- pseudo_log_spectrum +attr(pseudo_log,"data") <- pseudo_log_data usethis::use_data(pseudo_log, overwrite = TRUE) diff --git a/data/harmonic_sample.rda b/data/harmonic_sample.rda index aef1bb47e236ae0c4327aa3f946e5de953cbf3a7..9ed91e93363079b3f9c90940999733c0fe462705 100644 GIT binary patch literal 8669 zcmV<3AtK&FT4*^jL0KkKS+8}ZS^x#QfB*mg|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0 z|NsC0|Nr0>UjfeMefM2#yrsSGZ+7!;Zr=6orS0DBFB-kQ=e%p#?cKe1uU_tZbG<9Q zyI$J6>bKte@2{ikfB*mh>Zj(Ko~NdOo|6D-XwxT@U?Vh1>Yu6Y6#XWeU{T>3hm#s6 znKa1q2BS@)n@mTf$%*P{%3~?wo&uhkO@f}Mgr3OJGZRxXnWB1SFbz|BG|*~#YKK(u zrl!+V4HIb6dT5vcnqx@Op`oXg(^FuW(5K}xX_Ey!nl#YBnWW7|Oh#x8Gz}&)XblOB zfu@5*!f8D<Jg2oZn8-GbO*DF#YEKk8rr8FjG|8meo`p6{n5OhYY8gk31bS*QH69bx zdYPotO+6`|rfI4AO$><5G)<AIr=tX!85&|@7@3sXLro1&Y96WR(Hqe{A*P;6Y5Gi) z)XDmqnWXWm9aDM@G$zrY(qd_YK{RB>fYT<LC!v#5(8^|1{R2UeO`}GpnV^_WPt`G$ z^wUh5c_*S`Wj|2V%ru!NrX=w_HBSklHkve=c$#{NnoXvIO;5^tpz5E56#Y+0vU-fE z=F~MFspgCUCz5S6ru9!oMpM-B9-)m>)6$=+W@$YWQ^cN)skKi}N`92}J*awOYMw|u zNY7JAo}}|s^gT^6Cz_|J>JLY$r1d?eG}FoGnLQGCll3(-NdHwmAVkDM37|}gvI(YW zPZ3WBjS1+dv}BtjQ)HPiX^~Cg8k<8(dnTDQX_1kjQ`!mXp`bL;JyY}pBPoWd;%!Y& z6!TLV3U5G~p4B{Pj4AkmOnr~;5YCL*JTU6f03_lrE|#SjFr)zjkRU^xE3%XE&jAm_ z76c+MFhJR(^n(fj1W1Si8i;d504-)N0*N66pc)7v4&Z>r0U!a4mgJ2#Pb>9OvIIH1 ze;q27ELFx^dXobXwhAT;n+>Gu1i)a+t7t(A5u;InQ1<W1;A?IyxLn1vIFb(b#kG}= zVJlpzKPCY%LKfK<3!2%n4?_HxkVB{|EGiIV|78~U=GQ{_S!KPN>V<$3A#P^K&_h0_ z(R&q~gq9wsTVEL|OtRq*6)0(FLE!l9Puev$MMaF{deYShL`d318$c`4DC^N(7XV0( z{+P}$MG#>wEzQ|~ELHPKm=@+*F}}RmE1EEK>zE0J%VzQ!_%zpEE{_O5>gn?cAun_4 zeVkueGl7AoD8$YRkBy(_eH#IXkQ<={4aOSDr>|bylenF_Zg;Nz90C)TKnt}=b^h@* zav(*@M-P5yT%{SQ;<Dzsn?nYniz0QS?QDp`%EChy*aP+eigTDeYj!#871b=3o-Gz- za9)^}-K%quRVkEVL~6P<Q0E48@Mmwm^Y@K4Ih#3?$bDyn_s6z!cKbD(Oa8O8jx36g z)`5rX*=E8ucH+faqk{4l0RdYL)}P}xqLFE)_EFaT2cY{4plCCRT45Jr#Owsy@BkD* zuo#$7js$pI$J9QTqOL8#2E@hfy-SNc+lvlG%<&gfYT8_oqF#-!?2>47f$X*3251OO zEgH^?O6Bi)+ic!{A4`Max}@FEINW(qZCN(Q^IwfdP0zuB`&;~|x~lAJ6GYF%5z&np z^+PtuquhViCkG_0s7Ovq78$(S7q!fbq{BQfy7Y6(pw$2CZ@>nlZ4kP+&g;DP(_<Hp z`9(+3bZFdeq@v>wFMANBSnjL*kKmNiP8;1(n+cgAdT^}}P?dse{`icCgrOy(#cx(p zy5uC~DRfZFsu}4shAG&@6^}+Ki!sP?fwT-74n{JzLcAix_hZ`B32?RQ{p!_L0%VLf z3gbgLX(ohG=1zt~(5b$gU;MkpiIcnVJ%Ap8Ld3D;2p$)V-A9ai<CqC-eVx&tR^{q? z*Cf7n%});o<($tODABbbVyMWm-)e8zd_PfH>6{4&Nbm!s+nKJ$tWLQ*Dt4@;(j{d$ z3Z94iuji_oFq|dcL0U37>roPj_z_`Ag^ou%Ftzny|2voGK`~L}FsWwSgSTFTVIguN zALgQp&Zg8Poxg0?Rvfs(imaS!mjM0UQI{gsgdN`U2%qG?fvLsmD@(bVV+rd_(iS;X zijC(KV^Ga?A#|(y-49_OE!du&Fz9+Q5+6C!hk|qf<%sD(${p989w)rJ4Vrj5&_nEU z7DA^9fGy`JuN$vs7kN=PEoJPGuZxT8qS_hVPi&uY+TkYQmNE>A_OY)p^Qp*q0A?Df zpt7mKj6HXsT=$IAOGt)T=eo&A9JgsI49bwLeI`pB-RNeA_F&CUIM!?sKxP=1eUvUV zTN=BN$8nUxLV2{|8u%j&X^uONb@pu0%#+1$oImSLpQ8{Oyjf5}tJB=*jliU75t|^x z^7QeY=2IRTCaqNWSl*Y<c2V27mC~gaMs3yc*-kMq6kEmb_$6j+VL`B2t`XyZwbk5z z8&Qx3B>fo|$a0&f0QVH{vhKT};BO1Q06%E0w`322tgfcoW_gJL>SilHd1wZ~aW_Dp zt?+#|!76KPp=}HPi=%Vc#L~yPke8d|HJH`0ua<d@n5x~mQbpFuOwe2z>((FSj%!-P z1V&3|Tz{M)%E4B?rHY64DW{cj@}KTpozIQy_NIt(4TJqC9(N`euG*hC{{*hXT$DY4 z<s*4LMH!rf%S%0KvjxxNE`r(3O9h(4_Z!2k@q?98Pem*Sja#tJ?)=>o--JlLM0Mn< z0G+3gruD!ng;Yy3pKCSt?6G1H)s6P0ysW*0mR&0NTf;mY+U)ZE41jL&86Qvm7KvLs zqsniUKL^fza&i*d4ej`>UFDG9)x9>tf1i`KGGmlmoD0&QkwSWArWeb2;OF79-k#jI z1z+cZ)##9(H=;G`*Wn6CW@wgA!e;S1(|7s)2h<Mte#Ih@1wx<bBl&zZ#5lb3;bl|% z_93}@J^3n;-A*~Tgf$MGN18nX$0Yo1d1yT!7$%bTpbSC$+i>dr*qI3$rH~yl9T!=3 za~d;IJI+9=n~20Dz42pleAP*=a{wZ0TgTJKUJwCNem1qY>#7FtdDWt+LD={~h<xRI zhe2S7H{TVUHSRUuId)$u8vZ|rv?sq3zWnrG<y_W)8#S!+c9kj0xWW*H)yOl99#)Yf zK2{Oe4T8GXmG#O$S<6GXQ-i*if|(t(;yLpif#EQ~iC-!F_Hk}UuD3%18m3S4{#0I} z`1<Jhbj1SZDQpT}WeVp<Ht^0~$K+=k;yF56tA|*g-h3cE{X!c?R9Ix8%p>ycm&nWA z##D`rc{{Yw$1RCC>2DRN@M|Qj8Ld^)`VpV_PvE`+@5qws%yLd&uRaziGr8M%*4tZ? zBB0F}^3-Xj0RhY9+AB-!_ZsSo8x-;z>2dboqgU6|QahwL!mK&>$jqVmWRB-$&{`Km zXMC)Hh9g-i=5FQk1htwYoYr{E#HK&@E3?OR@nl6VeEr60#4!;)(r$v>dGPCOpZyq? z6L<CM(>l@<vpId84Yk}%dTHH}2iz0k)h<B!y^8-7jz2J6q=VlGxAh#=*_3qlo4s)x z4deTkrGw!OfI1$>`%kK`fJsB6%c&K6g_W$xUsFB|9;J@mo*AT`au>%<97xqklXywN z{X7}N5Ea-5cs`VGVM*=H!1~ybne`u9+LWoeOT+NH=~1}wcu<n!2p%_Slg_Kttf5b) zEJfOY1m@UOw_eVwIAHMV+Q@zrSLX3UOkGslmB|Q|*-e<MVEd!8&y_x}H#0-D@MY<9 z-+3d0ug~R;>Yc^nukkGVozF(0ITEdxXCq=(1s&nCKg*{dK0VXKDkP#Hl76qt7zc<9 zmOMO$$sGfBkEVDf1{Ju6Mxb5nbl%NUuq-TF_$AsR1PvT+x9C8?a(=YkJn4=f{UKw| ze5mFXN^Ymf2%~~7%H?#w8r#kHhfu$Bz@>yxNN2TK$nk57uyPbX3hyPo50R+bWR?jZ zVR@Z&*duFFcy6%D2w{Y{9{9GQ&iZ9TGkGn|fZd8#+x-m?r}24(t4LQv3*>-y1?=O= zhgD2elh|QN8$T@^S;w#`xpk6<--W-l;xC+t)7;dvkLU2`K{mI@c(lB80Q)#r>{y5x zjxll!q_B`Ba$l2VaBj)$yw(DBV<+UjIg=0ec}>SjY5tO?Dbd3WGumr!QHet%I3haX zY~n}Wo@jPrRZ{|JRiH3$l%~Z3z%!yxXr6%*63aK&U{fg<Tg(Y06rl)K_+0P1^2S*C zTXz4l{{v}xPwv%~gS+3vYv|^AR4-B5+i^V!&QKgYDw<Dju@b^539*5($1<sI!Z)%o z2L`^QH`@-i6NWDvJ(3=b!EAYkD(d%wtN2lZx|xJi(jw847xKw}V189W{EpxPv1`Q< znA+n6SX%ZJWak1>y2-P;#0hRU$Onncd;f3ncv<X)g?24OL2@~9P0(iPbPiozvr(B| z^<U`b_mt`iup(*3GIxS5yG@s6!vvGYXf{i1t62AV79Av)dV;u|)R6*!bVEO_4Tz=b z-`Iam(SjSQ#z-6VUUodNsA&N(YoS*%yTXeL*;Ji3bzs{}E~$Mrh;CPk0A+SB!OyT# z(aK*rO=J&apomQ40!<!fx<{~4-1Tf;Rvu#%D|esb{^r=Fizl6}Hf#$WJV{>tu3)NY zTnHR#54S(jhOvH%K-j7|gu;;A3mWqQEF~^XJcGWZfYEeh0#$rZi8IX|Ls2u)*DHW7 z{`Q`orIPOjnOApz@h_CCG`C6%>t;dVjk6txw{InusKlb)9YAf0L#9$GWejOWn_2>t zEP4xWW^*v}id>!EO>(yo_{Z>Wa+!4yP#_Il<iPtb39+wq>4D~s*Y}>>WW7FliYng1 zuuKq;tXs<TnIhblLaE!q5yug;M6{la)$O;q&<SG<8ekz4l4yfnWA-(51m;y%;q#!| zq6yEBod<FDZJ&GSo{vNy{wbLL)(XTu6E&L#tbJ5b^Qv0~L#mp_6A;^4X^9?lPxJM% zTW(S=LzYepg(xUDdz#cw>r)v8?s)>5#+z@za+t4;qZ>gbtc}<{fG-|DNXe1REBK|_ zwb|fN*qWiLz^N8U#Wn{`2`tHC+}1N9afnV_uTFS}%Y-T+Jj)W|%hqRxUVTYL9QDIK zZoJnq@VosswJlXUYyQaYsNe6?$VBV8xIIsZni=CgJWN9YC0<}jC%fjOt)LYL=gOck z&+C|XBRc#0I`HP0_gB68l&&gXDc@ue_Lp0haAEp^K)`X<jmq5Iv~dUsqLsZYJS$s> zHt!RC^ne1~{XA363cJ4UK)KjDmKVFJXKKA_Ej@N4FL36sMW*!DDvm_ID|S*GbqEGn zgV}jGIEwrgwSHwr6<9Y`VwBtr@R!(3YPEXhVKrACU(RN*A7~-td$C^490yqed(7b5 zxezK0ANm4~`PMOZ{w|9sxfOwAWna$8$4stIw0D3S-dn@Ib2(L=o`@Q;M|<Y3x>LD} zV5vYUZGE;y?o3C&hshyrL#1!s>GE-t(O`Yh!$aj=%<H)usur)%nI;joV)Z^`U|0`| zn4~q_#ofA(>)l(jj9h3?by4X&KuRPlP_)_zO#t0}bU}mQzIa(|`;^jwCk$4MSIMVn z6Hw(_6D%>y3=3M+F1u3;M4!Q(Zs%^pq!@QvpTD`potB$toSk}^rlNA<MSx1Jhcq+e zuvJ*MdA@o~LQvjo1BZap_QK#sm<jo5sCKe~zO`bs85V+E>UXN|bYor_Chw4OVN_im zIldXEWrTvZc!yJ7r}OGqH-N_sXK6A|)g&x}@)-tMfFvLcWevY~0Hx;Ak6E7ep4Se+ zaJzQY)9E>ibiJIqOT-g{`dv<j6nPB#I=(5TK;?`j=W*@Mkkx|X?#Ru_HN{dmZ{gRx zO61q%|AJ$>yz7~De)Kiffx(?<0GgldH&Cs^>Xf)O@9x-BKTSSP_iBOC9<W9m=F)T8 zq#NB#_!s3Dq6M_LmCviTu=ka)5J51W>N$gvsC=;KeU{oVG66kZzml%3<Mm+$X4hWD zysb-?Le68EqasysI`6LRvAY@y-3C^;i(Uyv0Gc1fnSNN()6KK&s`>eFEc$Yu@P@}= z8wYgIi*O?I*&SO~!kISN3f_!8KB)9iWakpMOK|Fb`W5UE^OYoPz4CZYbwxM4Gs8od z@w4Wx7NBjnZV<`neco3?kz9+5VW%19-Qo9%@<nS$d;!dT>7tw!W?SgVaq;KTS3IwY zzKE&4s;c8$?|E(wFf~WGT2f2p*sN3G;Hi;tA_CLYIi9Km^VOehbqrd1p!uX?=wH4Q zF(0=Gp=~$Ov|3JN!LI6YNJ!7vAJb&OU&$CvGi@|@jF&=}#J9nyN%Z&~fr%Zc^ZM1S zA7NQvU<!QzqdZl1D}2#{Gw)o#pzMJzTUmN}%bU4Vqx6E!AobUFlg04;zYsgQE^HZ% zIT!pF`Pa$0^?l0pX85JPdUXuRind+ss6HVA@pE46l7}S~d0Yq&KG`Ov5zylCDxh!z zT{q|BIoU`6nzf)3t${@?8W0;pveRw0vDmJuY6L}FQSpQc{I^olwNTsSxDckE4$UMr zgJwsNFk9~k7QpW(zUvhB&uwgn{;R^iRs(SxQgBsHBm7#z&y%<AK4J@G;nuHz9yYwg z8%SQlgc)I(pv5>dIuV6)M1U2(Z}z!_;<N=6ibJ{7q2!jr$6^Z~iSde>{2lKrmi0Hq zt&}@XwFG8qX%)o>(E44M3VBxT#V`Zer|=h=oM;6%ca4mv_VDrA0s$q0joNp8YSe8V zld?tL$()s4Tf~y8Uj=_UCmSO2t+5w+8i}DEn-895xa=u*$v0(&)^Q%Aq^GXhXE%&X z&aLg@lBTqN1LCOor^v>Z%=SSA6X5<HmcIAx{>eSd@?#eEuo_t@m>u~SFj9cIagg{C z1tHmH+Ex@X?f0E`!s)HBvg=s6L397k79$G(wC&Cv?TKL)v~<4#!Ky!hQclsFQ1OyX zv@<Mhq^@j$m(=sRMo^U;*|pJlt4Axc_<3)Qq_?NzB_{lcwC<wgj)Gyo=saN0kwRA# zog50`)aqn<h2D*d>3hSZ&rd>Bd?_$)8m2(ub_g}S!z6%wW-B|1x@dEnK}jmys@WL@ zo&WJ2S;na{watGO(JA4V1EHA6OQ>=$*O}|?A_=Lagh3-6KrhV$$E%qo1yk>4H)L(H zH995D`S8Qdgr}(e8ti=p59d;s+qf!DpXu3Z%f{!Z5`l=Ob-!a|`oGcV;`(~C-OwSA zNd8Z_(slc1To`+C%vOhp7mFmqlv_b=5V^Dar)g&)?~#FYt+A5n*dn;3)~U7Rg_lj% zki?}nH1K0BKL~1mc0fngfhN_nsw-&|joYq?OsHDy_1ff6*zrYAUvfJ%dSN7>>RQ(~ zO^6&6>`2_XjoZ6}A?uk<Q5III-4!cWnMp>d#s|iyAFOnAT8|3yzeGEe|30e%@(>jL z9|~W|VBaQX`6;G_%RH30gr7oxTv=<_1zw~M>E9k{$65%w+s$g<v<uth>2~MYig?Ml z5aZuy$`Je@&g?!vE$BR?(1)<-yRoWx>I@SvSO~b3^rg&TVb_XLe4c{MmM{CVY-R-) zs<{h9H_8%DEsvx)vN|#=JkFk;FhJkUd8Ix+g8T&+=_I(%OSeL!v$S(!8Y<j#7PMOB z3}B~LTlPOPRn{p>F@%cQ(2i5rIn^bQ^Jm|cc8;v(S#PD=IIAN^NRz+LRt7k#f*R8= z?Op;JqIoePCa+uUv|ly3mwv*rs1&z$;#PKpeIHSXQJ_4pJ~1qa6GuZMuh^8VdF2}m z-GKZm55ZZou1Y|qko2%ss5<j&eu7HyjA?VB0Q=-hMksT2{&FumQz<WQ<_`!v%iqa4 zV0AF$;cf*#K2oYh9?={ejtRQcEq!dp-G)|l2n{TO4gl+JU)GyaY88B~p8%CQyJ*X> zJP<kqsR`H9{`>J^lA2)C6J823FNdc2KUNO%{WooYI))4b?>XpwOFz6g0m`!VZ9m)| zBHONrfy7OO-Ys5FEV0<o+H#_dK1wed*nCsCwb+8uF+quz%4rWIw}}HCjANzTpXy%& z!ed}gbHui8EZ+Fgs4uD~WhiPWqn|5IP&T2q-*i9XnenXj@m4)+M7D&=OB6~p6P#}5 ze{<@!w6O<pmZcp9&?z=>+=)gQ?Ti!i7GKd%Yy|`Ev}iw#3`s!piqQUxaOl=Pt-5+M zu2xIyWuAkM={u^F>-`8>`lTNZKWo<1JeBa9O1toVkKpp~n80ry1_J~fL&})NVZ47V zt%Ybq4w!4KTZ!&8GVKi=ljKuT7I?2&6(3ry{NhZ=54g%>8JTzBL=>qwa8=xA#=(Ds zE%-bhl!f<jsWcs|WO7_4EL*tkslP-nCCt2Oj5A?+sNrvUlbE@_4XyUO%<q-@FHqA9 zV`ogtw)}o7@vbO}K#}I6;|aUE+)rbnw|+01=-<ZX7RB$#CC26uC<%V!u`k~h*Zt9q zowS4EM9#u^QBAYq$LiaWV?K|DnpQVc#gXMJb+q@y3dp5!Z#Mk!)FN~jr(Nn9T4vd4 zu_qW{Exk$GkLoN#XRiM`<L_Nm5Vze&?-3ugFW~~8zd(_q%@M#NE$0Tbk>Ox~EdTl5 zJmjFF<h_U`uZ`Zk$k<w_P6V72x<Wmgx?Wq)!L~Z@La~5Nb?C{ZPbsnR)V#XIJQUQ# zslcrR9VwlVgk<8(J2_gjZfUBa@TtN@s}s%(BOt8t{}ddPt%AZcyhJS1fm^prs*+RE z33f4bk8HTTXtQtYsoin*i;vI6D7?dWe6f1G7q!|Fvs?jNonr^Y6(pI0L?YIIba}3` zKf=!InXlzHcIv7f;Tz!Gu!i5}?=X0>R;%HWsI9(R7z^K_p3ORONZyhv>c&U|GuoA7 z2E7wR)&(>>f)UZL7gJ2h7pvuibPVm<bniaXbi8M3eTqJ;l;QO%`K{Ky62d{V$)Zt- zP*N99bOZy$aQZbDIMYFVu_FADdI-=9^y%>RRdVT#)m`98*V8-RzBmeNGsy|*hK3Ap z%%{#L1?)DHGxLh+NI~8#Mp$HZl)^_@YDVp0H>5Z0klPZurv|vgcLlOv#t4}ZI_Xp} zA182|ZdSe{Id^ld-D;(A5_A_2X{Ubz$&qNV!U&Fd_9C*-hoRKK1MIJ(G7{aYmV<uZ z)jAt&JHsnqS4mnTI7Wpqab_OBAAI)!>+ecqXTf@#zus;cxpSMNbL3Av1}JUYH=brP zoj?(*l<d(M#0f{?E|*$pZx5?zj=*jp)bj{B&Ls~5c%9)54-^On*cT+Ew2j0`Kr;?4 zYO?7T$D|j1Q58%HJSsqlqA(n^lZI7Y@mt0&0r|>{`>#6(#H_r@Y+oDOX0rZs1mkOu ziyo-I6#Cw);{XvcXV+k+)qE7HAQ8Bp+lEGkV30r(pJ6-q!}+@N!;?4l)zzxLZQxS^ z8`PwJ2YBq0&nuYKqy$?>YLD{j#4a?ix!c6MX;HXFV$WeDUT--fhX>GlT~c><uS#_P zJ#nwS)LPOrQiTukQMd_N*|~eN@tIyz-M1YH0^0Y`adCtg_$U@4My365lo$I?GIfh3 zEE!$NIXb%CudM$`C=-FJAbP7H=s~xg0O~yObPn+k%$O0-h<oq)x<uZM#>R;-89`|E z$KK7=cMUqd9x7xlt!~_&cZK~0Y-zSS19!<V1)zEiAf76xFCE3JCSP}0<w>`6;Y+1O zeV|W>eT?mMc$wNY<oqQWH=j0vsUYKfbXW{nt~Jv0E;z5$!SrSDgocwGJ~LXW?t;-N zot9F&i8_I2`MV22LxX{=5Fqy*+W}80=dlU*RkZtIZmU`as?i#0oiw7Cz*v-nzZ1QZ z#4XwTJnd4})^vZ8wQ1FT38~b?O0TVk*g~dia_rTl^31b^`s^1s*y`$Zs~#Xh)FKa1 zwlFUjMgRL{AMz}0s5aEC6xQTg!88lz`wv@R)`wgepB(Asj>OC65)MXY%Z8N*WXZVa z#3po3+Do4eW>}2@&kSg*PcCOFPkSx7=tqr8PvfP}6&;0pXl%ux*VG9QfNBRPp#A64 zx&%9<f^Lc<>i7#jJ4PsetS*lX(kYP$XJ4K-7X9|V()!FK+E^dgNeFwjxLz2og&aej zgB+HG0yg1Cx-mBFADZ-)@p`At!d!J_w7O4E-kSA2Iu=;B<*@Fn;upUQ_NP{0(jBKD zQmY!t1!PB9Fv<sbjr2xwyFTL;fTwZQX<RvM?Spr?=P8$_lI=5@l4&}_Q@n_L)*bT> z!<=!;GnO5g!72#wT}r1J_43P*Q~S*5zrov6R(+<@bP1r&lxY2P+m|@*ir>%mCb(z* zQ(kXNThZGeme3E*(r#qwtKplN<9!}F+ne*c;K0P~NIYEyIEZ3hR;3h(hhrfyYpTp| z=?w2#C!U*aGN-|S8yMIF0D8j|^iei$g|pH|Ev?Eh0AmhbO!|F^0s+(9X5muh(&4a> z5g$kTzgm<RSVEX$zBHTFN4D>%Eg8J|_w<FqW>N6P+w_vB0E?zQAv}2yiaqws3!-sS zE9|P2c_Q#`itUVpUs|F7xs)EUIRC*<90I)yf5St2XXMJSxD><=HKI-EU@yhRxK*y2 z{bm!4o%5ReK5kLZD(7!shq!8ksURWt2z~qVZxE{M{?R`b12jh$JWOrGLBt}J609gu zksik*pQK1IAT^=|_ZLgIS>Q?*5tk4o2n8ktfW#)e`^58v6?npz9zUjkBH&Y!`=c=g ziavZt{j-x$a4HP#EUX9ph-8IM!_61YpW~}^V_%J4U63rbE)J~cWM)l)5Ll2~zvN-d zzZ0vv;mJu)O&v;iwrL9#lx-Q*3y|!4Yk`2#mFjZa>r0@5?t}UXfasSrMyAT@Sfvsr zri>1(K!9)Xl+>6df&f<$9(#mI!YG6ze)6P+R$kSd*GKoInTGY31k1ZhXY`G~T$fI~ zonMvWZJHa#@+{^m3VkFZJ3j9XAfJ?qU)E+6{kY_UL?5Vl8NMVU!Ppi)Pi}g?GS>-i zW&OrrWm?Q|k|JUklIo3I5kc{Zu!LNTJPl!S#cCpQK2=G6A_|Zj!Tm?Ii%WV#9ws0j zB3w-Z_F1oDc{7zTpDKZY@|I}BI0N<!fQFT8)XX}aF614k67RACnz-{EzmBrqJUbxY z&nj~75#+zkE!qy_OXV>zx7;u30z{U8gXwd}8o(%l{*Q?a##n;8$wbIHki1?JSVg}Q zRH*_CzD$h|vp+$>cyRm8XDyv07|Q51I6ja!`fksu_%yy;lPW0=xdnvdZMsmh2XsAs z*&!hS1Wg458^_}Ey!oz{l{4ZHJxfrxC!b<kTxkQ|33I0){l40%3DqLh#1`4x*W6YA voXGF-I&HV-$6MEIEQal%9{iDU8PwYyp3WY5aHENP|KjdQrwS4k?zD?QH<=EF literal 8648 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 aW)o?6dN^5?!gd|&{ugpZI8czGN+u$)=)0K! diff --git a/data/harmonic_sample_noisy.rda b/data/harmonic_sample_noisy.rda index 7c8b13fda68bcc9b72f28963720e56a215cc48a7..5e41cdae53d231f3a67cd6bfede311246d95af15 100644 GIT binary patch literal 8688 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 O@pmLsg$W0{AWpDS<nCVp literal 8669 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 diff --git a/data/pseudo_log.rda b/data/pseudo_log.rda index 8c9055c8e5cc584113d980757aca23b3183f6f7a..e3c8be88bda306321c36b06b10da5bb57b7027ec 100644 GIT binary patch delta 433 zcmV;i0Z#sp1-b)&LRx4!F+o`-Q(1uJ5c>dJfPaYoF-QPF01yDg01!Z~gw6l}0Kfsz z1719y5-N%eX^6r!zyJY_F&IXe000tts;IyK000RTqtx_G88Anv(Xv3Ps-~p$N2JIM zgV36L^#5Q0=il0M>1=I-bhBZ$@8!>p%XRd7y9ZkU2kvKobk6HA0ppiTKA9hD9E&gk z$HR^`xVZwJkRsywz(5Hh5MT)imr3^VJ?TyUTU}*JO32*$&H6FYutGp2tH8Km+ii^k z2DT_GX4#a+Wiu!!tSBVOY@=3I*+Ug8V!@({GzP3~h$2l4MAnMMgpGojn5|}}rHCMn zhEXk}RgI~CViBY^En6cPtSfD)w$c`>U{KkyO|xy1&4q1Rg&A8_jbkNHYb9F7#)8ro z$*pW{sI3?^s~clj4N<l<XthSF#<dtL0@&1Tl*W~9t1E42(SV{h(TSRfHB(Vq)){D# zq-hB@nlVvU#;DmNWQ@{~v14f3sVRkmqOrB84M=SgZ5B2)8*M?D)XkL5gtbbU5EYYN b0u~iUlD0Dm7`5lW-@@)lrwS4f9HJj!f)2pF delta 647 zcmV;20(kwp1CIrNLRx4!F+o`-Q(1k>SL^^>+5hkVad<#cVGs!AfKX+x$Nv~e3W)Fk z1+WGHBn2Qw5zqtP1h^6?1VlnK88QrpngO5y8Vvv&O%T%{9B9drgkk}N&|nimpk&FT zCPN4eB=uEPWEf2vU=V20p_2dvXwjh2ki;>@jF}ilAQ(-51_3l0227eVWH5lj6-d+( zqX^K@4FRBN$j|`Mqd)^{Z07z5000|0oNXO_4PHA~a<XdVP*efckw8~l9CDf%js`4Y z2JRae?`jt1<ISEX<Ol!&Y2?7d$0h(|gfyXaVGsZVnT4f}2KL?tbCy8ZQd6h#!A=jp zA(9{!Kpm)mR0VVGD=YyWOb`ve-U*Bw`}!GpJ=xyFp~JoQ<a)lFyI+mXbGxh{3W=vE zs^>_GbZmdOFVbR8ti~p;y#ts=;T$51gtp2^xvetD45`)JR1nh9CUiYH$s{$@`~_Me z#tu@Z_BBzXa@=Yyz7INi&%qW3IP(-a-}nQC5degL04tx6&GK_-W#Wv*$r=i(BoK*0 zijA$cqSdVyv{e*pilnrgMPo+VD%2IRV9`Yy16DS~5hjKrYeizhM!`%>R<l!5#1KZq zD3;Nx#?-M0(i;}7lGUg{rCJqY0%}kKfKft)MN%YCDQTc65|jp!GF1k$Rjh1iEg@{0 z*2damiqV5wv9>jU)f;0*i&Sc?Yf-9;07?x4r3f)nw3MinlL16+qZ2g{YAjKis?#Ye zC1j~BjToq_V^nOBvPNl0Sh2KiRFuNOQCQm42BbE&iyIn^wxHImTG}mbQeg{9RZ)|V h0Tvrnkpj~-5ltz@nA;4z{mviwyOJrwgoEx{zhDGk5w`#U diff --git a/man/harmonic_sample.Rd b/man/harmonic_sample.Rd index beaa588..21e0e93 100644 --- a/man/harmonic_sample.Rd +++ b/man/harmonic_sample.Rd @@ -10,6 +10,6 @@ data(harmonic_sample) \description{ A simple time series for testing purposes cos(t*0.13423167+0.00) + 1.3 * cos(t*0.119432+2.314) + 0.134994 + 0.4*cos(t*0.653167) + 0.11 * cos(t*0.78913498) -for t from 0 to 1023. It is coded as a `mfft_deco` objcet and self-describes its spectral decomposition. +for t from 0 to 1023. It is coded as a `discreteSpectrum` objcet and self-describes its spectral decomposition. } \keyword{datasets} diff --git a/man/harmonic_sample_noisy.Rd b/man/harmonic_sample_noisy.Rd index cc57b10..adda2d5 100644 --- a/man/harmonic_sample_noisy.Rd +++ b/man/harmonic_sample_noisy.Rd @@ -10,6 +10,6 @@ data(harmonic_sample_noisy) \description{ Same has harmonic sample but with an added random time series cos(t*0.13423167+0.00) + 1.3 * cos(t*0.119432+2.314) + 0.134994 + 0.4*cos(t*0.653167) + 0.11 * cos(t*0.78913498) + rnorm(1024)*0.12 -for t from 0 to 1023. It is coded as a `mfft_deco` objcet and self-describes its spectral decomposition. +for t from 0 to 1023. It is coded as a `discreteSpectrum` objcet and self-describes its spectral decomposition. } \keyword{datasets} diff --git a/man/mfft.Rd b/man/mfft.Rd index 5d229ac..6ab12cd 100644 --- a/man/mfft.Rd +++ b/man/mfft.Rd @@ -31,7 +31,7 @@ The computed frequencies are in the range given by minfreq and maxfreq.} not documented for real time series} } \value{ -a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". +a `discreteSpectrum` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". note that because of a language glitch (to be fixed), "Freq" actually means "Rate" } \description{ diff --git a/man/mfft_complex.Rd b/man/mfft_complex.Rd index 0afdc3b..92d9201 100644 --- a/man/mfft_complex.Rd +++ b/man/mfft_complex.Rd @@ -25,7 +25,7 @@ the third algorithm should be in general much more precise). The computed frequencies are in the range given by minfreq and maxfreq.} } \value{ -a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". +a `discreteSpectrum` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". note that because of a language glitch (to be fixed), "Freq" actually means "Rate" } \description{ diff --git a/man/mfft_deco.Rd b/man/mfft_deco.Rd deleted file mode 100644 index b85616c..0000000 --- a/man/mfft_deco.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/mfft_support.R -\name{reconstruct_mfft} -\alias{reconstruct_mfft} -\alias{mfft_anova} -\alias{as.data.frame.mfft_deco} -\alias{plot.mfft_deco} -\alias{lines.mfft_deco} -\alias{print.mfft_deco} -\title{MFFT reconstruction} -\usage{ -reconstruct_mfft(M, sum = TRUE) - -mfft_anova(M) - -\method{as.data.frame}{mfft_deco}(x) - -\method{plot}{mfft_deco}(M, periods = FALSE, labels = NULL, ...) - -\method{lines}{mfft_deco}(M, ...) - -\method{print}{mfft_deco}(M, ...) -} -\arguments{ -\item{M}{: mfft_deco object} - -\item{sum}{: TRUE if user wants to sum components in the reconstruction} - -\item{periods}{if TRUE will add a lower axis with period labels} - -\item{labels}{to be set above the frequency peaks. Can be the output of `attributeTone`} - -\item{a}{`mfft_deco` object, typically the output of a `mfft` call.} -} -\value{ -list of reconstructed components if sum=FALSE, full - reconstructed time series otherwise -} -\description{ -MFFT reconstruction - -MFFT ANOVA -not ready. do not use. -} diff --git a/man/mfft_real.Rd b/man/mfft_real.Rd index 791d76b..4a61373 100644 --- a/man/mfft_real.Rd +++ b/man/mfft_real.Rd @@ -29,7 +29,7 @@ note: this is not really faster because the bottleneck is actually the goden sec 3: second order-correction using synthetic data (all documented in the Sidlichovsky and Nesvorny reference)} } \value{ -a `mfft_deco` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". +a `discreteSpectrum` object, based on a data.frame with columns "Freq", "Ampl" and "Phases". } \description{ R-coded version of the Modified Fourier Transform @@ -43,8 +43,8 @@ A C-version should be supplied one day. \examples{ data(harmonic_sample) -spectrum <- mfft_real(harmonic_sample$data) -print(spectrum) +spec <- mfft_real(harmonic_sample$data) +print(spec) } \references{ diff --git a/man/pseudo_log.Rd b/man/pseudo_log.Rd index 590aef4..83842a9 100644 --- a/man/pseudo_log.Rd +++ b/man/pseudo_log.Rd @@ -10,6 +10,6 @@ data(pseudo_log) \description{ A truncated version (squared-shape) version of a harmonic signal for mimicking a sedimentary log sign( cos(t*0.13423167+0.00) + 1.3 * cos(t*0.119432+2.314) + 0.134994 + 0.4*cos(t*0.653167) + 0.11 * cos(t*0.78913498) + 0.8)) -for t from 0 to 8191. It is coded as a `mfft_deco` objcet and self-describes its spectral decomposition. +for t from 0 to 8191. It is coded as a `discreteSpectrum` objcet and self-describes its spectral decomposition. } \keyword{datasets} diff --git a/notebook/mfft_random_test.ipynb b/notebook/mfft_random_test.ipynb index c11aad1..9b54a3b 100644 --- a/notebook/mfft_random_test.ipynb +++ b/notebook/mfft_random_test.ipynb @@ -259,7 +259,7 @@ "[1] 0.000000 2.314000 0.000000 0.653167 0.000000\n", "\n", "attr(,\"class\")\n", - "[1] \"mfft_deco\"\n" + "[1] \"spectrum\"\n" ] }, "metadata": {}, @@ -3832,7 +3832,7 @@ "[1] -5.4832704 0.4030191 -1.6431082 2.3957822 -1.1782940 0.0000000\n", "\n", "attr(,\"class\")\n", - "[1] \"mfft_deco\"\n", + "[1] \"spectrum\"\n", "attr(,\"row.names\")\n", "[1] 1 2 3 4 5 6\n", "attr(,\"nfreq\")\n", @@ -4269,7 +4269,7 @@ "[1] -0.6804843 -1.4340620 -2.6011862 0.2136524 0.0000000 -5.6976628 0.5740075\n", "\n", "attr(,\"class\")\n", - "[1] \"mfft_deco\"\n", + "[1] \"spectrum\"\n", "attr(,\"row.names\")\n", "[1] 1 2 3 4 5 6 7\n", "attr(,\"nfreq\")\n", @@ -4481,7 +4481,7 @@ "[1] 0.0000000 -1.6515515 -1.5786453 -1.4144484 2.8983504 -0.8902084\n", "\n", "attr(,\"class\")\n", - "[1] \"mfft_deco\"\n", + "[1] \"spectrum\"\n", "attr(,\"row.names\")\n", "[1] 1 2 3 4 5 6\n", "attr(,\"nfreq\")\n", -- GitLab