Почему мой питоновский фильтр Баттерворта сглаживает спектр сигнала (в частотном пространстве)?

Для флуктуирующих временных рядов я использую фильтр низких частот Баттерворта, чтобы исключить высокочастотный шум в моем анализе. Это реализовано с использованием функций масла scipy.signal и фильтрата.

def butter_lp(data, N, cutoff, df):
    b, a = butter(N, cutoff/(df*len(data)), btype='lowpass', output='ba')
    y = filtfilt(b, a, data)

    return y

def plot_response(N, cutoff, data, df):
    b, a = butter(N, cutoff/(df*len(data)), btype='lowpass', output='ba')
    w, h = freqz(b, a)
    plt.plot(w * (1/(2*dt)), 20 * log10(abs(h)), label='{0}, {1}'.format(forder,cutoff))
    plt.xscale('log')
    plt.xlabel('Frequency [radians / second]')
    plt.ylabel('Amplitude [dB]')
    plt.legend(loc='best')
    plt.margins(0, 0.1)
    plt.grid(which='both', axis='both')
    plt.axvline(100, color='green')  # cutoff frequency
    #plt.show()

для полноты входной код данных выглядит примерно так

filtered["channel{0:02d}".format(ch)] = butter_lp(noiseelim(transpose(xbt[0][6])[ch-1][opint:clint]), forder, lpfreq, df)

Принимая порядок 5 (имея в виду, что он применяется дважды) и срез 200 кГц, я вижу ожидаемое затухание сигнала выше этой частоты среза, НО ТАКЖЕ колебания сигнала (теперь в области минимального уровня спектра) сглаживаются. Зачем? Могу ли я / я должен избежать этого?

общий график y, показывающий слева исходный спектр, включая минимальный уровень шума, и смежный (справа) отфильтрованный спектр, показывающий сглаженный ослабляющий хвост вместо минимального уровня шума

0 ответов

Другие вопросы по тегам