J'enregistre les données d'un capteur dans un fichier csv. Le fichier est de type :
Code : Tout sélectionner
0.12 0.16 0.18 0.21 0.26 0.28
0.30 0.33 0.39 0.42 0.37 0.26
0.22 0.19 0.16 0.14 0.11 0.09
…
Les valeurs sont lues ligne par ligne et la fréquence d’acquisition est de 16Hz. Mon fichier contient des données sur 24H.
Je souhaite faire une boucle qui me permet de faire une transformée de Fourier toute les heures.
Voici le début de mon code (sans la boucle)
Code : Tout sélectionner
data <- read.csv("data.csv", header = FALSE)
#lecture ligne par ligne
concatRow <- as.vector(t(data))
fe <- 16 # frequence = 16Hz
T <- 1/fe
t <- T*seq(length(concatRow)) # temps
# exemple transformée de fourier sur 1H de données
a<-(4*3600)*fe
b<-(5*3600)*fe
# calculate fft of data
fourier <- fft((concatRow)[a:b])
# extract magnitudes and phases
magn <- Mod(fourier) # sqrt(Re(fourier)*Re(fourier)+Im(fourier)*Im(fourier))
phase <- Arg(fourier) # atan(Im(fourier)/Re(fourier))
# select only first half of vectors
magn.1 <- magn[1:(length(magn)/2)]
# generate x-axis with frequencies
x.axis <- 1:length(magn.1)/3600
# plot magnitudes against frequencies
plot(x=x.axis,y=magn.1,type="l", xlab='Frequencies (Hz)', ylab='Magnitude')
et le début de la boucle afin de faire une fft toute les heures sur le signal
Code : Tout sélectionner
for (i in seq(1/fe,length(concatRow),by=3600)){
}
cependant je suis coincé sur la construction de la boucle.. si quelqu'un pouvait m'aider !
Je vous remercie,
Pierre.