Filter message from noisy voice signal
A few points:


Filtering in the frequency domain is complicated and needs a real algorithm like overlap add to avoid time domain aliasing. It's much easier to filter directly in the time domain: [b,a] = butter(1,100/(SampleRate/2); y_filtered = filter(b,a,y); is much better
You probably want to put notch filter on the drone frequency
For broad-band stationary noise a good method is Wiener filtering or spectral subtraction. Many papers have been published on this.