У меня есть сигнал, который измеряется при 100 Гц, и мне нужно применить сглаживающий фильтр Савицкого-Голея к этому сигналу. Однако при ближайшем рассмотрении мой сигнал не измеряется с совершенно постоянной частотой, разница между измерениями составляет от 9,7 до 10,3 мс.
Есть ли способ использовать фильтр Савицкого-Голея для неравномерно распределенных данных? Есть ли другие методы, которые я мог бы применить?
Ответы:
Одним из методов будет повторная выборка ваших данных, чтобы они были равномерно распределены, тогда вы можете выполнять любую обработку по своему усмотрению. Ограниченная полоса передискретизации с использованием линейной фильтрации не будет хорошим вариантом, так как данные не распределены равномерно, поэтому вы можете использовать какую-то локальную полиномиальную интерполяцию (например, кубические сплайны), чтобы оценить, какие значения базового сигнала имеют «точное» 10-миллисекундные интервалы.
источник
Из-за того, как получен фильтр Савицкого-Голея (т. Е. В качестве локальных полиномов наименьших квадратов), существует естественное обобщение неравномерной выборки - она просто намного дороже в вычислительном отношении.
Савицкий-Голей Фильтры в целом
Для стандартного фильтра идея состоит в том, чтобы подогнать полином к локальному набору выборок [используя наименьшие квадраты], а затем заменить центральную выборку значением полинома в центральном индексе (т. Е. В 0). Это означает, что стандартные коэффициенты фильтра SG могут быть сгенерированы путем инвертирования матрицы Вандермонда выборочных признаков. Например, чтобы сгенерировать локальное параболическое соответствие для пяти выборок (с локальными показателями -2, -1,0,1,2), система уравнений расчета A c = y будет выглядеть следующим образом:Y0... у4 A c = y
Выше, - неизвестные коэффициенты полинома наименьших квадратов c 0 + c 1 x + c 2 x 2 . Поскольку значение полинома при x = 0 равно c 0 , вычисление псевдообратной матрицы проектирования (т. Е. C = ( A T A ) - 1 A T y ) даст коэффициенты фильтра SG в верхней строке. В этом случае они будутс0... с2 с0+ с1х + с2Икс2 х = 0 с0 с = ( АTА )- 1ATY
Неравномерный отбор проб
тогда каждая матрица дизайна будет иметь следующую форму:
источник
(вывод кого-нибудь?)
источник
Я обнаружил, что есть два способа использовать алгоритм Савицкого-Голея в Matlab. Один раз как фильтр, а другой как функция сглаживания, но в основном они должны делать то же самое.
источник
Если это поможет, я сделал реализацию C метода, описанного datageist. Бесплатное использование на свой страх и риск.
источник