#python #numpy
Вопрос:
У меня есть набор данных из 15 497 наборов значений. На графике показан угол необработанных данных маятника по сравнению с номером образца, который, очевидно, выглядит ужасно. Это должно выглядеть так, как на втором рисунке отфильтрованы данные. Частью задания является введение фильтра среднего значения для «сглаживания» данных, чтобы они выглядели как данные на 2-м графике. Данные помещаются в np.массив в Python. Но, используя np.array, я, похоже, не могу понять, как ввести фильтр среднего значения. Я заинтересован в применении среднего фильтра к тэте на скриншоте кода кода Python, так как тэта — это значения по оси y на графиках. Код добавлен для того, чтобы вы могли легко увидеть, как файл данных вводится в код.
Комментарии:
1. Не могли бы вы предоставить нам воспроизводимые данные? И желательно код не в виде скриншота?
2. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Существует целый мир методов фильтрации. Не существует ни одного уникального «среднего фильтра». Кроме того, существуют причинные и не причинные фильтры (т. е. Разница между неиспользованием будущих значений в фильтре и использованием будущих значений в фильтре). Я собираюсь предположить, что вам нужен средний фильтр размера N, так как это довольно стандартно. Затем, чтобы применить этот фильтр, сверните свой вектор «тета» со средним ядром.
Я предлагаю распечатать среднее ядро и изучить, как оно выглядит с разными N. Тогда вы сможете понять, как оно усредняет значения в сигнале. Я также призываю вас подумать о том, почему свертка применяет этот фильтр к тета. Я помогу вам, посоветовав подумать об эквивалентном умножении в частотной области. Кроме того, изучите различные режимы в функции свертки, так как это может быть более подходящим для конкретного решения, которое вы хотите.
N=2 mean_kernel = np.ones(N)/N filtered_sig = np.convolve(sig, mean_kernel, mode='same')