GBPhone / logitdisplay.r
mhuckvale's picture
Upload logitdisplay.r
6fa2a99 verified
# display a logits csv file as a graph
#
library("tuneR")
#
# load waveform
wv=readWave("six16000.wav")
sig = wv@left / 2^(wv@bit -1)
tim = (1:length(sig))/wv@samp.rate
#
# load logits from GBPhone
df=read.csv("six16000.csv",check.names = FALSE)
print(summary(df))
#
# swap BLANK indicator with last known phone
transcript=""
lastmax=0;
for (i in 1:nrow(df)) {
# find max value
jmax=0;
vmax=-100;
for (j in 2:ncol(df)) {
if (df[i,j]>vmax) {
vmax=df[i,j];
jmax=j;
}
}
#cat(sprintf("row %d jmax=%d name=%s\n",i,jmax,colnames(df)[jmax]));
if (colnames(df)[jmax]=="blk") {
tmp=df[i,lastmax];
df[i,lastmax]=df[i,jmax];
df[i,jmax]=tmp;
}
else {
if ((jmax!=lastmax)&&(colnames(df)[jmax]!='unk')) transcript=paste(transcript,colnames(df)[jmax]);
lastmax=jmax;
}
}
#
# convert to image
tab=as.matrix(df[,1:46])
tab[which(tab < 0)] = 0
#
# plot logits against waveform
layout(matrix(c(1,2,2,2),nrow=4,ncol=1, byrow = TRUE))
par(cex=1,mar=c(0,4,2,2));
plot(tim, sig, type="l", col="darkblue", xlab="", ylab="Amp",xaxt="n")
par(cex=1,mar=c(5,4,2,2));
image(tab[,1],1:46,tab[,-1],xlab="Time (s)", ylab="Phone",col=gray.colors(256,start=0,end=1,rev=T),cex=1,main=transcript)
box()