Сезонные колебания
Имеется временной ряд навроде
6,631
8,457
8,456
9,1
10,586
10,593
10,479
9,044
7,837
7,855
8,115
7,206
6,934
9,099
9,11
10,038
10,491
9,83
10,392
8,947
8,312
8,096
8,331
7,772
7,287
8,744
9,334
10,162
10,27
11,482
10,987
b(i) = ( a(i) + a(i+1) + ... + a(i+m) ) / m,
где m - константа фильтра (например 5 или 10) или оставшееся количество чисел.
Для большей плавности надо применять двойной фильтр (тройной, и т.д.). То есть, аналогичным способом отфильтровывать полученную последовательность (из b(i) ).
Ну, ещё есть другой метод удаления шума, но надо знать период изменения сигнала. Там складываем числа через периоды. Второй метод позволяет лучше выделить картинку. Например, мне хватало 20 периодов для зашумленного сигнала, чтобы что-то достаточно ясное выделить.
Иногда лучше применить оба способа.
Добавлено позже:
Вообще, я стараюсь по возможности заменять слова на понятные - интеграл на площадь или сумму, производную на скорость и т.д. Это помогает яснее представить цель. Для иллюстрации профильтровал сигнал (2 по 5). Жирная линия - отфильтрованный сигнал.
b(i) = ( a(i) + a(i+1) + ... + a(i+m) ) / m,
где m - константа фильтра (например 5 или 10) или оставшееся количество чисел.
Наверное так:
b(i) = (a(i - m) + a(i - m + 1) + ... + a(i) + a(i + 1) + ... + a(i + m)) / 2*m
Это формула скользящей средней, она применяется для выявления тренда. Сглаженный ряд становится короче на 2*m, в нём могут образоваться автокорелированные колебания, которых не было в изначальном ряде и т. д, поэтому я применяю адаптивные методы сглаживания. Если вычесть из исходного ряда тренд, получим сезонные колебания + шум.
Объясню задачу яснее:
Есть, например, последовательность объёмов продаж товаров марки Durex в круглосуточной аптеке за пару лет, взятые с интервалом в 12 часов. Необходимо спрогнозировать объёмы продаж на следующую неделю с целью подготовки оптимального запаса товара. Классический прогноз подразумевает экстраполяцию основной тенденции, остальное считая случайным шумом. Я исхожу из соображений, что весной/летом товар продаётся лучше, что к пятнице-субботе, к новому году/14 февраля объёмы продаж возрастают - мне необходимо получить именно такие всплески/спады продаж в зависимости от календарных событий или даже времени суток.
Было бы, конечно, клёво, но там колебания не синусоидальные, а, скорее, трапецевидные или пилообразные. Их длина и интервал между ними не совпадают.
Если просто отсекать высокие частоты ДПФ - такая фигня получается (пробовал)! Получить какой-либо спектр, видимо, не удастся. Курю модель Уинтерса, вроде оно.
ещё можно ряд Тейлора попробовать .
b(i) = (a(i - m) + a(i - m + 1) + ... + a(i) + a(i + 1) + ... + a(i + m)) / 2*m
Это формула скользящей средней, она применяется для выявления тренда. Сглаженный ряд становится короче на 2*m, в нём могут образоваться автокорелированные колебания, которых не было в изначальном ряде и т. д, поэтому я применяю адаптивные методы сглаживания. Если вычесть из исходного ряда тренд, получим сезонные колебания + шум.
Спасибо за науку. Вероятно, .../(2*m + 1), но это мелочи.
Хотя у меня были другие задачи - мне не надо было оценивать шум, а только увидеть форму сигнала, потому недофильтрованность по краям была допустима.