реклама на сайте
подробности

 
 
> Плавающее среднее., поиск коэффициентов.
_sv_
сообщение Sep 6 2013, 14:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-03-11
Пользователь №: 63 436



Добрый день всем.
Реализую простейший фильтр "скользящее среднее".
output = input + FILTER_CONST * (output – input);

Требуется адаптивно выбирать FILTER_CONST в процессе работы.
Не могу найти способ вычисления оной.

Мне, собственно, задают допустимое время накопления и порог.
Надо как-то вычислить FILTER_CONST.

Спасибо.


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
thermit
сообщение Sep 6 2013, 20:09
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730




Топикстартер, если хочешь внятных ответов, задавай вопрос внятно. Твой фильтр будет делать все. тока не усреднять.

y(n)=y(n-1)+(x(n)-y(n-1))*k
это распространенный фнч бих 1-го порядка для всяких усреднений.

k=1 - (1-L)^(1/T/sf)
L-уровень
sf-частота дискретизации
T-время достижения уровня



Сообщение отредактировал thermit - Sep 7 2013, 05:19
Go to the top of the page
 
+Quote Post
_sv_
сообщение Sep 7 2013, 07:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-03-11
Пользователь №: 63 436



Сразу - извиняюсь за долгое молчание.
Был в отъезде. Спасибо всем за быстрые ответы.

Теперь по делу: В первом посте досадная опечатка:
Следует читать "output = input + FILTER_CONST * (input - output)"
И это не "мой фильтр". В смысле, что я его не выдумывал.
Это первое попавшееся мне решение задачи "усреднение за время".
Мне всего-то надо усреднять данные от датчика света за некие интервалы времени.

Цитата(thermit @ Sep 6 2013, 22:09) *
y(n)=y(n-1)+(x(n)-y(n-1))*k
Да. Именно это и было реализовано (после устранения ошибки).

Цитата(thermit @ Sep 6 2013, 22:09) *
k=1 - (1-L)^(1/T/sf)
Вот. Именно эту формулу и не мог найти. Спасибо.


Цитата(andyp @ Sep 6 2013, 20:44) *
Вам бы надо
output(t) = alpha*input + (1-alpha)*output(t-1) , 0 < alpha < 1.
Тоже интересно. Насколько я понимаю, то это практически то же самое, что и у "thermit".
Надо бы разобраться как в этом случае считается коэффициент alpha.

Сижу с матлабом. Экспериментирую.

Еще раз - спасибо всем.
Мне кажется, что будут еще вопросы.
Go to the top of the page
 
+Quote Post
andyp
сообщение Sep 7 2013, 08:42
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(_sv_ @ Sep 7 2013, 11:51) *
Следует читать "output = input + FILTER_CONST * (input - output)"


Да все у Вас нормально было:

out(k) = in(k) + FILTER_CONST*(out(k-1) - in(k));

после перегруппировки слагаемых получаем

out(k) = (1 - FILTER_CONST) in(k) + FILTER_CONST*out(k-1)

если FILTER_CONST = 1 - alpha, то это та форма, что приведена в wiki. Таким образом, имеем два ФНЧ один - КИХ (скользящее среднее на N отсчетов) с АЧХ вида sin(Nx)/sin(x), второй - БИХ с АЧХ вида abs(alpha*exp(j*omega)/(exp(j*omega) + (1 - alpha))). Последнее выражение можно упростить, но мне сейчас лень. Чтобы оба фильтра интегрировали одинаково по крайней мере белый шум, нужно, чтобы были равны их шумовые полосы в полосе интегрируемого сигнала. Шумовая полоса - это интеграл АЧХ, нормированный на максимальный коэффициент передачи фильтра в некотором диапазоне частот. Отсюда и получается связь между alpha и N.
Go to the top of the page
 
+Quote Post
_sv_
сообщение Sep 7 2013, 10:44
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 6-03-11
Пользователь №: 63 436



При более детальном изучении оказалось, что:
1) существуют два подхода к вопросу:
output = input + FILTER_CONST * (output – input);
output = input + FILTER_CONST * (input - output);
При этом и тот и другой реализуют разные вещи.
(input - output) - фильтр
(output – input) - какой-то там интегратор.

В связи с чем:
Цитата(thermit @ Sep 6 2013, 22:09) *
Твой фильтр будет делать все. тока не усреднять.
Ваше утверждение поставлено под сомнение.
Изучаю предмет дальше.
Действительно - пока что полученные результаты ну никак не "плавающее среднее".




Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _sv_   Плавающее среднее.   Sep 6 2013, 14:11
- - _pv   это не скользящее среднее, это БИХ фильтр НЧ перво...   Sep 6 2013, 14:24
|- - demiurg_spb   http://en.wikipedia.org/wiki/Low-pass_filter   Sep 6 2013, 15:12
- - Corner   Практически цифровая RC-цепочка... Цитата(_pv ...   Sep 6 2013, 18:21
|- - andyp   Вам бы надо output(t) = alpha*input + (1-alpha)*o...   Sep 6 2013, 18:44
|- - thermit   [quote name='_sv_' date='Sep 7 2013, 1...   Sep 7 2013, 08:40
- - thermit   1 можете детально изучать/подвергать сомнению итд ...   Sep 7 2013, 15:36
|- - _sv_   Цитата(thermit @ Sep 7 2013, 17:36) если ...   Sep 7 2013, 19:06
- - thermit   вообще-то вы привели уравнение бих фильтра в 1 пос...   Sep 7 2013, 19:48
|- - _sv_   Цитата(thermit @ Sep 7 2013, 21:48) вообщ...   Sep 7 2013, 21:06
- - andyp   вот небольшой скрипт для матлаб - октав иллюстриру...   Sep 7 2013, 21:32
|- - _sv_   Цитата(andyp @ Sep 7 2013, 23:32) вот неб...   Sep 7 2013, 22:13
- - Corner   Использую функцию выход=(выход+вход)/2. Если ее ка...   Sep 9 2013, 06:40
- - _sv_   Цитата(Corner @ Sep 9 2013, 08:40) Правил...   Sep 10 2013, 08:04
- - _sv_   Цитата(_sv_ @ Sep 10 2013, 10:04) К теме ...   Sep 25 2013, 15:37


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 08:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016