1. A method of detecting a multi-level input signal using a Viterbi algorithm, in which the incoming signal has m levels, said method comprising the steps of sampling the incoming signal at regular predetermined intervals thereby to generate signal samples, expanding each signal sample of the received signal into nk expanded vectors where n is smaller than m, from the nk expanded vectors having a respective cost associated therewith, selecting k vectors with the smallest costs, storing said selected k vectors together with their associated costs, and calculating the most likely level of the received signal on the basis of said costs.