How to improve the FIR filter performance degradation when the amplitude of the input signal decreases?
A linear filter just attenuate some frequencies more and others less. If you alter the SNR, the output of the FIR filter should change accordingly.
Many applications use more elaborate noise reduction methods in stead of (or in addition to) linear filtering. If you know that your signal is going to be a sine of known frequency, you may estimate its phase and amplitude embedded in noise using a matched filter. If you know that your noise is shot-noise, you could try to exploit that.
You noise seems to be uniform (non-zero mean) noise. Did you intend to call the normal distributed randn()?
-k