Перейти к содержанию
    

Аппроксимация данных

Всем доброго времени суток,

 

Есть алгоритм, результаты которого хотелось бы улучшить.

 

Задача такова: Есть некоторый медленно меняющийся процесс, зашумленный белым шумом. Обработка в реальном времени, то есть в каждый момент времени появляется новый отсчет данных и по нему нужно построить линейную аппроксимацию последнего участка кривой (скажем последние 100 точек). Аппроксимация считает по методу наименьших квадратов. Выходным параметром является коэффициент наклона прямой (которой мы аппроксимируем кривую). Сразу скажу, что реальный процесс сильно низкочастотный по сравнению с интервалом аппроксимации (эти 100 точек), то есть из-за этого существенной ошибки не возникает. Причем ошибка получаемого коэффициента выглядит как гармонический процесс с периодом в 1.5 раза большим, чем интервал, по которому строится аппроксимация (100 точек). На картинке временная реализация ошибки коэффициента и ее спектр. Причем если построить частотную характеристику этого алгоритма, получается, что на этой частоте коэффициент передачи имеет максимум, то есть она выглядит как ЧХ колебательной системы.

Значит алгоритм усиливает шум в полосе, близкой к этой частоте, а как этого можно избежать?

 

*линейная аппроксимация берется, потому что известно что процесс действительно медленно меняющийся. А для проверки берется вообще не меняющийся процесс (то есть просто шум) и проходя по нему такой же обработкой, я получаю тот же результат.

post-55683-1412866207_thumb.jpg

post-55683-1412866227_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем доброго времени суток,

 

Есть алгоритм, результаты которого хотелось бы улучшить.

 

Задача такова: Есть некоторый медленно меняющийся процесс, зашумленный белым шумом. Обработка в реальном времени, то есть в каждый момент времени появляется новый отсчет данных и по нему нужно построить линейную аппроксимацию последнего участка кривой (скажем последние 100 точек). Аппроксимация считает по методу наименьших квадратов. Выходным параметром является коэффициент наклона прямой (которой мы аппроксимируем кривую). Сразу скажу, что реальный процесс сильно низкочастотный по сравнению с интервалом аппроксимации (эти 100 точек), то есть из-за этого существенной ошибки не возникает. Причем ошибка получаемого коэффициента выглядит как гармонический процесс с периодом в 1.5 раза большим, чем интервал, по которому строится аппроксимация (100 точек). На картинке временная реализация ошибки коэффициента и ее спектр. Причем если построить частотную характеристику этого алгоритма, получается, что на этой частоте коэффициент передачи имеет максимум, то есть она выглядит как ЧХ колебательной системы.

Значит алгоритм усиливает шум в полосе, близкой к этой частоте, а как этого можно избежать?

 

*линейная аппроксимация берется, потому что известно что процесс действительно медленно меняющийся. А для проверки берется вообще не меняющийся процесс (то есть просто шум) и проходя по нему такой же обработкой, я получаю тот же результат.

 

Ваш алгоритм реализуется КИХ-фильтром с линейной импульсной характеристикой -49.5,48.5 ... 49.5 (с точностью до постоянного множителя). Его АЧХ именно такая, какую вы привели на рисунке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если нужны частоты сильно меньше чем 1/100 выборок, сделайте лучше простой БИХ фильтр с какой угодно низкой полосой пропускания.

Y += (X-Y) / K.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваш алгоритм реализуется КИХ-фильтром с линейной импульсной характеристикой -49.5,48.5 ... 49.5 (с точностью до постоянного множителя). Его АЧХ именно такая, какую вы привели на рисунке.

да, я даже не сообразил :blink:

 

 

если нужны частоты сильно меньше чем 1/100 выборок, сделайте лучше простой БИХ фильтр с какой угодно низкой полосой пропускания.

Y += (X-Y) / K.

Вы имеете ввиду фильтровать полученные значения наклона прямой БИХ-фильтром или с помощью него можно получить наклон прямой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы имеете ввиду фильтровать полученные значения наклона прямой БИХ-фильтром или с помощью него можно получить наклон прямой?

АЧХ "линейного фита" по этим ста точкам мало чем отличается от простого скользящего среднего по этим же 100 точкам, если вам интересен сигнал с куда меньшей полосой чем 1/100, то БИХ фильтр можно сделать на сколь угодно малую частоту среза, КИХ же ограничен длиной фильтра в 100 точек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...