A processor-implemented method for providing a final estimated channel impulse response, implementable by one or more data processors forming part of at least one computing system, the method comprising: receiving, by at least one data processor, a first signal transmitted in an orthogonal frequency-division multiplexing OFDM system by a transmitter with one or more transmit antennas through a wireless channel and received by a receiver with a plurality of receive antennas, the first signal comprising a plurality of pilot pulses; the method characterised by determining, using at least one data processor and the first signal, a final estimated time-domain channel impulse response of the wireless channel for each pair of transmitter and receiver antennas by: computing a frequency-domain least-squares channel estimate Y ( f p) for each pilot tone f p and expressing the frequency-domain least-squares channel estimate in compact matrix-vector form Y as a matrix product Fh + V where F is a matrix of complex exponentials, h is a vector of unknown channel impulse response, and V is a noise vector; computing an initial channel estimate h̃ 0 as a matrix product F Herm Y where F Herm is a Hermitian of the matrix of complex exponentials F, computing an initial error ε as h̃ 0 - ( F Herm F) h̃ 0; computing an intermediate channel estimate ĥ k by adding the initial error ε to h̃ 0; determining non-zero delay taps from the intermediate channel estimate ĥ k by comparing a plurality of entries in the intermediate channel impulse response estimate to a threshold; adding the determined non-zero delay taps to the error ε; computing an error between the initial channel estimate h̃ 0 and a most recent channel estimate ĥ k - 1 as h̃ 0 - ( F Herm F) h̃ k - 1; computing a second intermediate channel estimate ĥ k + 1 as h̃ 0 - ( F Herm F) h̃ k + ĥ k; computing an error between the initial estimate h̃ 0 and the second intermediate channel estimate ĥ k + 1 as ε + h̃ 0 - ( F Herm F) h̃ k; repeating the steps of computing intermediate channel estimates and errors until a stopping criterion is reached; and providing, using at least one data processor, a last computed intermediate channel estimate as the final estimated channel impulse response. receiving, by at least one data processor, a first signal transmitted in an orthogonal frequency-division multiplexing OFDM system by a transmitter with one or more transmit antennas through a wireless channel and received by a receiver with a plurality of receive antennas, the first signal comprising a plurality of pilot pulses; the method characterised by determining, using at least one data processor and the first signal, a final estimated time-domain channel impulse response of the wireless channel for each pair of transmitter and receiver antennas by: computing a frequency-domain least-squares channel estimate Y ( f p) for each pilot tone f p and expressing the frequency-domain least-squares channel estimate in compact matrix-vector form Y as a matrix product Fh + V where F is a matrix of complex exponentials, h is a vector of unknown channel impulse response, and V is a noise vector; computing an initial channel estimate h̃ 0 as a matrix product F Herm Y where F Herm is a Hermitian of the matrix of complex exponentials F, computing an initial error ε as h̃ 0 - ( F Herm F) h̃ 0; computing an intermediate channel estimate ĥ k by adding the initial error ε to h̃ 0; determining non-zero delay taps from the intermediate channel computing a frequency-domain least-squares channel estimate Y ( f p) for each pilot tone f p and expressing the frequency-domain least-squares channel estimate in compact matrix-vector form Y as a matrix product Fh + V where F is a matrix of complex exponentials, h is a vector of unknown channel impulse response, and V is a noise vector; computing an initial channel estimate h̃ 0 as a matrix product F Herm Y where F Herm is a Hermitian of the matrix of complex exponentials F, computing an initial error ε as h̃ 0 - ( F Herm F) h̃ 0; computing an intermediate channel estimate ĥ k by adding the initial error ε to h̃ 0; determining non-zero delay taps from the intermediate channel estimate ĥ k by comparing a plurality of entries in the intermediate channel impulse response estimate to a threshold; adding the determined non-zero delay taps to the error ε; computing an error between the initial channel estimate h̃ 0 and a most recent channel estimate ĥ k - 1 as h̃ 0 - ( F Herm F) h̃ k - 1; computing a second intermediate channel estimate ĥ k + 1 as h̃ 0 - ( F Herm F) h̃ k + ĥ k; computing an error between the initial estimate h̃ 0 and the second intermediate channel estimate ĥ k + 1 as ε + h̃ 0 - ( F Herm F) h̃ k; repeating the steps of computing intermediate channel estimates and errors until a stopping criterion is reached; and adding the determined non-zero delay taps to the error ε; computing an error between the initial channel estimate h̃ 0 and a most recent channel estimate ĥ k - 1 as h̃ 0 - ( F Herm F) h̃ k - 1; computing a second intermediate channel estimate ĥ k + 1 as h̃ 0 - ( F Herm F) h̃ k + ĥ k; computing an error between the initial estimate h̃ 0 and the second intermediate channel estimate ĥ k + 1 as ε + h̃ 0 - ( F Herm F) h̃ k; repeating the steps of computing intermediate channel estimates and errors until a stopping criterion is reached; and providing, using at least one data processor, a last computed intermediate channel estimate as the final estimated channel impulse response.