A method for acoustic source separation, the method comprising: inputting acoustic data from a plurality of acoustic sensors, said acoustic data comprising acoustic signals combined from a plurality of acoustic sources; converting said acoustic data to time-frequency domain data comprising a plurality of time-frequency data frames for a plurality of times and frequencies; and constructing a multichannel filter to operate on said time-frequency data frames to separate signals from said acoustic sources; wherein said constructing comprises: determining a set of de-mixing matrices ( W f ), one for each of said plurality of frequencies, to apply to each said time-frequency data frame to determine a vector of separated outputs ( y ft ), wherein said determining comprises modifying each of said de-mixing matrices by a respective gradient value (G;G') for a said frequency dependent upon a gradient of a cost function measuring a separation of said sources by the respective said de-mixing matrix; and wherein said respective gradient values for each frequency are each calculated from a stochastic selection of said time-frequency data frames ( x f R ( l ) ); characterised in that said stochastic selection of said time-frequency data frames comprises randomly selecting a plurality, L, of said time-frequency data frames for determining each of said de-mixing matrices ( W f ) . inputting acoustic data from a plurality of acoustic sensors, said acoustic data comprising acoustic signals combined from a plurality of acoustic sources; converting said acoustic data to time-frequency domain data comprising a plurality of time-frequency data frames for a plurality of times and frequencies; and constructing a multichannel filter to operate on said time-frequency data frames to separate signals from said acoustic sources; wherein said constructing comprises: determining a set of de-mixing matrices ( W f ), one for each of said plurality of frequencies, to apply to each said time-frequency data frame to determine a vector of separated outputs ( y ft ), wherein said determining comprises modifying each of said de-mixing matrices by a respective gradient value (G;G') for a said frequency dependent upon a gradient of a cost function measuring a separation of said sources by the respective said de-mixing matrix; and wherein said respective gradient values for each frequency are each calculated from a stochastic selection of said time-frequency data frames ( x f R ( l ) ); characterised in that said stochastic selection of said time-frequency data frames comprises randomly selecting a plurality, L, of said time-frequency data frames for determining each of said de-mixing matrices ( W f ) . determining a set of de-mixing matrices ( W f ), one for each of said plurality of frequencies, to apply to each said time-frequency data frame to determine a vector of separated outputs ( y ft ), wherein said determining comprises modifying each of said de-mixing matrices by a respective gradient value (G;G') for a said frequency dependent upon a gradient of a cost function measuring a separation of said sources by the respective said de-mixing matrix; and wherein said respective gradient values for each frequency are each calculated from a stochastic selection of said time-frequency data frames ( x f R ( l ) ); characterised in that said stochastic selection of said time-frequency data frames comprises randomly selecting a plurality, L, of said time-frequency data frames for determining each of said de-mixing matrices ( W f ) . <EOS>