I'm trying to design a filter to restore the original signal from strong noise (low SNR). I have tried low pass FIR and it could work well as the amplitude of original signal is much higher than the background noise. My matlab code of a demo are as follows:
clear clc close all time = 1:10000; fre1 = 50; fs = 8000; amplitude = 100; % amplitude of the noise sin_signal1 = sin(2*pi*fre1*time/fs)*50; noise = rand(1,length(sin_signal1)); noise = amplitude * sqrt(10^(-3/10))*noise; %noise sin_signal = sin_signal1+ noise; figure() plot(sin_signal); fir_low = fir1(128,55/8000); sin_after_filter = filter(fir_low,1,sin_signal); figure() plot(sin_after_filter)
When the amplitude of noise is low (eg. amplitude = 0.5), namely a high SNR, the low pass FIR works very well. But when the amplitude of noise is high (eg. amplitude = 150), namely a low SNR, the low pass FIR works very bad. Using IIR low-pass filter also does not improve the situation as show in below picture.