Я пытаюсь реализовать алгоритм из исследовательской работы, в котором мы используем акселерометры для обнаружения моделей активности. Авторы упоминают в статье, что используют фильтр верхних частот с частотой среза 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])
plt.plot(frequency, y)
plt.title('Frequency domain Signal')
Это всего лишь один пример для каждого fft, в котором я пытаюсь получить амплитуду 0 Гц, всегда наибольшую порядка 50-100x чем другие амплитуды.