Почему мой питоновский фильтр Баттерворта сглаживает спектр сигнала (в частотном пространстве)?
Для флуктуирующих временных рядов я использую фильтр низких частот Баттерворта, чтобы исключить высокочастотный шум в моем анализе. Это реализовано с использованием функций масла 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 кГц, я вижу ожидаемое затухание сигнала выше этой частоты среза, НО ТАКЖЕ колебания сигнала (теперь в области минимального уровня спектра) сглаживаются. Зачем? Могу ли я / я должен избежать этого?