Remove noise and smoothen the ecg signal

1k Views Asked by At

I am processing Long term afib dataset - https://physionet.org/content/ltafdb/1.0.0/

When I test the 30s strips of this data, my model is not correcting predicting the signals. So I am trying to deal with noise in this dataset. Here how it looks

enter image description here

Here is the code to plot -

def plot_filter_graphs(data,xmin,xmax,order):
    from numpy import sin, cos, pi, linspace
    from numpy.random import randn
    from scipy import signal
    from scipy.signal import lfilter, lfilter_zi, filtfilt, butter
    

    from matplotlib.pyplot import plot, legend, show, grid, figure, savefig,xlim

    lowcut=1
    highcut=35
    nyq = 0.5 * 300
    low = lowcut / nyq
    high = highcut / nyq
    b, a = signal.butter(order, [low, high], btype='band')


    # Apply the filter to xn.  Use lfilter_zi to choose the initial condition
    # of the filter.
    z = lfilter(b, a,data)

    # Use filtfilt to apply the filter.
    y = filtfilt(b, a, data)
    y = np.flipud(y)
    y = signal.lfilter(b, a, y)
    y = np.flipud(y)

    # Make the plot.
    figure(figsize=(16,5))
    plot(data,'b',linewidth=1.75)
    plot(z, 'r--', linewidth=1.75)
    plot( y, 'k', linewidth=1.75)
    xlim(xmin,xmax)
    legend(('actual',
            'lfilter',
            'filtfilt'),
            loc='best')
    grid(True)
    show()

I am using butter band pass filter to filter the noise. I also checked with filtfilt and lfilt but that is also not giving good result.

Any suggestion, how noise can be removed so that signal accuracy is good and hense it can be used for model prediction

0

There are 0 best solutions below