maximum likelihood decoding function