A signal precoder for use with a signal transmitter comprising a plurality of antennas for transmitting a plurality of signal components to a receiver over a communications channel in which one or more properties of the communications channel are described by a plurality of values which scale the components of the signal in a plurality of dimensions during transmission, the precoder arranged to perform non-linear precoding on a source signal S, prior to signal transmission, the precoder comprising: a balancer for determining a plurality of optimised amounts of signal perturbation required to be applied to one or more source signal components to minimise the energy of the signal transmission, when respectively scaled by each of the values describing one or more properties of the communications channel; a selector for selecting which of the optimised amounts of signal perturbations results in signal transmission having the least energy when scaled by the values describing the one or more properties of the communications channel, wherein the one or more properties of the communications channel are contained in a channel matrix H; and a feature extractor for selecting a subset, L of the plurality of M singular values λ obtained by singular value decomposition of channel matrix H, for 1 ≤ L < M, which, when applied to the signal, perform a predetermined proportion of the scaling of the signal components; wherein the precoder is arranged to perform non-linear precoding on the source signal by applying the selected optimised signal perturbation to the source signal and to output the precoded signal; wherein: the amount of perturbation is represented by an auxiliary vector A having integer components, scaled by a coefficient α which is dependent on the modulation of S, and the balancer is arranged to perform the optimisation by optimising one or more components of A which minimise the quantity | λ l v l ( S + a A)| 2 for each l th singular value λ l and l th right-singular vector, v l, of H where 1 ≤ l ≤ L. a balancer for determining a plurality of optimised amounts of signal perturbation required to be applied to one or more source signal components to minimise the energy of the signal transmission, when respectively scaled by each of the values describing one or more properties of the communications channel; a selector for selecting which of the optimised amounts of signal perturbations results in signal transmission having the least energy when scaled by the values describing the one or more properties of the communications channel, wherein the one or more properties of the communications channel are contained in a channel matrix H; and a feature extractor for selecting a subset, L of the plurality of M singular values λ obtained by singular value decomposition of channel matrix H, for 1 ≤ L < M, which, when applied to the signal, perform a predetermined proportion of the scaling of the signal components; wherein the precoder is arranged to perform non-linear precoding on the source signal by applying the selected optimised signal perturbation to the source signal and to output the precoded signal; wherein: the amount of perturbation is represented by an auxiliary vector A having integer components, scaled by a coefficient α which is dependent on the modulation of S, and the balancer is arranged to perform the optimisation by optimising one or more components of A which minimise the quantity | λ l v l ( S + a A)| 2 for each l th singular value λ l and l th right-singular vector, v l, of H where 1 ≤ l ≤ L. the amount of perturbation is represented by an auxiliary vector A having integer components, scaled by a coefficient α which is dependent on the modulation of S, and the balancer is arranged to perform the optimisation by optimising one or more components of A which minimise the quantity | λ l v l ( S + a A)| 2 for each l th singular value λ l and l th right-singular vector, v l, of H where 1 ≤ l ≤ L.