Фильтр низких частот Баттерворта - PullRequest
1 голос
/ 23 мая 2019

Я не получаю желаемый вывод, он обрезает нижнюю частоту.не имеет значения, установлен ли он на «низкий» или «высокий».

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

def butter_filter(data, butterCutoffFreq, order=1):
    b, a = signal.butter(order, butterCutoffFreq, 'low', analog=True)
    y = signal.lfilter(b, a, data)
    return y

"""
    White noise
"""
N = 1024
dt = np.float64(1)
y = np.random.normal(loc=0.0, scale=1.0, size=N)
t = np.arange(start=0, stop=N, step=dt)
butterCutoffFreq = 0.5 * 1/dt

amps = np.fft.rfft(y)
freqs = np.fft.rfftfreq(y.size, dt)
#plt.plot(freqs, np.abs(amps), color='b')

ampsFiltered = butter_filter(y, butterCutoffFreq)
ampsFiltered = np.fft.rfft(ampsFiltered)

plt.plot(freqs, np.abs(ampsFiltered), color='g')
plt.show()

enter image description here

1 Ответ

0 голосов
/ 28 мая 2019

Ваша проблема с параметром analog=True удалите его, и он будет работать.

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

...