Фильтрация низких частот с использованием фильтра высоких частот не работает - PullRequest
3 голосов
/ 30 марта 2020

Я пытаюсь реализовать алгоритм из исследовательской работы, в котором мы используем акселерометры для обнаружения моделей активности. Авторы упоминают в статье, что используют фильтр верхних частот с частотой среза 1 Гц, чтобы устранить влияние низкочастотных гравитационных компонентов, которые я применил к своему набору данных с такими значениями акселерометра x, y, z, как это

sos = signal.butter(1, 1, 'highpass', output='sos', fs=12.5, analog=False)
filtered = signal.sosfilt(sos, segments)

где сегменты - это массив numpy с фрагментами из 50 значений (4-х секундные значения x, y, z, выбранные на частоте 12,5 Гц). Затем я делаю новые сегменты, где каждое из значений на отдельных осях сегментируется вместе, например, 50 значений для x, 50 значений для y и так далее. Затем я продолжаю применять быстрое преобразование Фурье к этим отфильтрованным значениям, но независимо от того, какой сегмент я выбираю, наибольшая амплитуда всегда равна 0 Гц, что наводит меня на мысль, что фильтр верхних частот не реализован правильно.

Вот пример:

freq_data = np.fft.fft(features_segments[0][0])
y = 2/N * np.abs(freq_data[0:np.int(N/2)])

features_segments[0][0] подразумевает только первый сегмент и значения оси x, что дает результат

time_signal = np.linspace(0,4,50)
plt.plot(time_signal, features_segments[0][0])

enter image description here

plt.plot(frequency, y)
plt.title('Frequency domain Signal')

enter image description here

Это всего лишь один пример для каждого fft, в котором я пытаюсь получить амплитуду 0 Гц, всегда наибольшую порядка 50-100x чем другие амплитуды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...