Análise de Coerência

Autocovariância: \(X_t\)

\[ \lambda(h) = cov(X_t, X_t-h) \]

Covariância cruzada:

\[ \lambda(h)_{XY} = cov(X_t, X_t-h) \] Estimador -

Estimador -

\[ \hat{\lambda}(h)_{XY} = \]

O espectro (ou densidade espectral) também pode ser obtido por meio da Transformada de Fourier da função de autocovariância.

O espectro cruzado é a TDF da função da covariância cruzada.

Calcularemos a coerência espectral usando os dados de eletrofisiologia:

##################### Analise Espectral - Olhos Fechados
#leitura dos sinais
sinais = read.table("./data/OlhosFechados.txt", header = FALSE)

#leitura do nome dos canais
nomescanais = scan("./data/NOMEScanais.txt",what = "string")

dim(sinais)
## [1] 45315    32
nomescanais 
##  [1] "Fp1"  "Fp2"  "F7"   "F3"   "Fz"   "F4"   "F8"   "FC5"  "FC1"  "FC2" 
## [11] "FC6"  "T7"   "C3"   "Cz"   "C4"   "T8"   "TP9"  "CP5"  "CP1"  "CP2" 
## [21] "CP6"  "TP10" "P7"   "P3"   "Pz"   "P4"   "P8"   "PO9"  "O1"   "Oz"  
## [31] "O2"   "PO10"
#Taxa de amostragem
HZ = 250

#Tamanho da epoca (janela) em segundos
TAMsegundos = 5

#Tamanho da epoca (janela) em caselas do vetor de sinais
TAM = TAMsegundos*HZ

#Numero de epocas
Nepocas = floor(nrow(sinais)/TAM)

#Numero de canais
Ncanais = ncol(sinais)

# Por motivos didático, primeiramente vamos calcular
# a coerencia entre dois canais sem dividir em epocas

Por questões didáticas, calculemos a coerência entre dois canais sem dividir em épocas: * F7 canal 3 * P7 canal 23 * O1 canal 29

Calculando a coerência entre O1 e F7 e vendo seu gráfico:

coerencia = spectrum(sinais[, c(29,3)], spans = c(100, 100))

#Grafico da coerencia
plot((HZ/2)*(1:nrow(coerencia$coh))/nrow(coerencia$coh), coerencia$coh,
 type="l", xlab="Frequencia (Hz)", ylab="Coerencia")

#Coerencia entre F7 e P7
coerencia = spectrum(sinais[, c(3, 23)], spans = c(100, 100))

#Grafico da coerencia
plot((HZ/2)*(1:nrow(coerencia$coh))/nrow(coerencia$coh),coerencia$coh,
 type ="l",xlab = "Frequencia (Hz)", ylab = "Coerencia")

#### Calculo da coerencia media entre epocas
#1-Coerencia entre O1 e F7
#2-Coerencia entre O1 e P7
#3-Coerencia entre F7 e P7

  y1 = 0
  y2 = 0
  y3 = 0
  #Calcula a media entre épocas
  for(epoca in 1:Nepocas){
    #Descobrir caselas de inicio e fim de cada epoca
    INICIO = TAM*(epoca-1)+1
    FIM = epoca*TAM
    y1 = y1 +spectrum(sinais[INICIO:FIM, c(29, 3)], spans = c(15, 15))$coh
    y2 = y2 +spectrum(sinais[INICIO:FIM, c(29, 23)], spans = c(15, 15))$coh
    y3 = y3 +spectrum(sinais[INICIO:FIM, c(23, 3)], spans = c(15, 15))$coh

  }#for da epoca

   y1 = y1/Nepocas
   y2 = y2/Nepocas
   y3 = y3/Nepocas

#Grafico da coerencia media
plot((HZ/2)*(1:nrow(y1))/nrow(y1), y1,
 type="l", xlab = "Frequencia (Hz)", ylab = "Coerencia media")
lines((HZ/2)*(1:nrow(y2))/nrow(y2), y2, col = 2)
lines((HZ/2)*(1:nrow(y3))/nrow(y3), y3, col = 4)
legend("topright", c("O1-F7","O1-P7","F7-P7"), lty = c(1, 1, 1), col = c(1, 2, 4))

#Grafico da coerencia media
plot((HZ/2)*(1:nrow(y1))/nrow(y1), y1,
 type = "l", xlab = "Frequencia (Hz)", ylab = "Coerencia media", ylim = c(0, 1))
lines((HZ/2)*(1:nrow(y2))/nrow(y2), y2, col = 2)
lines((HZ/2)*(1:nrow(y3))/nrow(y3), y3, col = 4)
legend("topright",c("O1-F7", "O1-P7", "F7-P7"), lty = c(1, 1, 1), col = c(1, 2, 4))

Previous
Next