- # (normalized) observations node with CWT
- Xcwt4 <- lapply(seq_len(n), function(i) {
- ts <- scale(ts(conso[i,]), center=TRUE, scale=scaled)
- totts.cwt = Rwave::cwt(ts,totnoct,nvoice,w0,plot=0)
- ts.cwt = totts.cwt[,s0log:(s0log+noctave*nvoice)]
- #Normalization
- sqs <- sqrt(2^(0:(noctave*nvoice)/nvoice)*s0)
- sqres <- sweep(ts.cwt,MARGIN=2,sqs,'*')
- sqres / max(Mod(sqres))
- })
-
- Xwer_dist <- matrix(0., n, n)
- fcoefs = rep(1/3, 3) #moving average on 3 values (TODO: very slow! correct?!)
- for (i in 1:(n-1))
- {
- for (j in (i+1):n)
- {
- #TODO: later, compute CWT here (because not enough storage space for 32M series)
- # 'circular=TRUE' is wrong, should just take values on the sides; to rewrite in C
- num <- filter(Mod(Xcwt4[[i]] * Conj(Xcwt4[[j]])), fcoefs, circular=TRUE)
- WX <- filter(Mod(Xcwt4[[i]] * Conj(Xcwt4[[i]])), fcoefs, circular=TRUE)
- WY <- filter(Mod(Xcwt4[[j]] * Conj(Xcwt4[[j]])), fcoefs, circular=TRUE)
- wer2 <- sum(colSums(num)^2) / sum( sum(colSums(WX) * colSums(WY)) )
- Xwer_dist[i,j] <- sqrt(delta * ncol(Xcwt4[[1]]) * (1 - wer2))
- Xwer_dist[j,i] <- Xwer_dist[i,j]
- }
- }
- diag(Xwer_dist) <- numeric(n)
- Xwer_dist
+ # B) Apply clustering algorithm 2 on the WER distances matrix
+ if (verbose)
+ cat(paste("*** algoClust2() on ",nrow(distances)," items\n", sep=""))
+ indices[ algoClust2(distances,K2) ]