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

 
 
> Плавающее среднее., поиск коэффициентов.
_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
Ответов
andyp
сообщение Sep 7 2013, 21:32
Сообщение #2


Местный
***

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



вот небольшой скрипт для матлаб - октав иллюстрирующий выравнивание шумовых полос для значения alpha = 2/M (т.е. фильтр скользящего среднего на М отсчетов и экспоненциальный ФНЧ при этом значении alpha имеют примерно равные шумовые полосы.) Все становится не очень хорошо при малом M = 5 (ошибка до 20%), но уже для М = 36 она не превышает одного процента. Для малых M можно еще пошаманить с подбором alpha.

Код
Ms = [5, 36, 360, 3600];  %количество отсчетов, участвующее в усреднении
show_plot = 1;
for  ii = 1 : length(Ms)
    M = Ms(ii);
    freq_ananlysis_len = 4096;
    f = linspace(0,freq_ananlysis_len-1,freq_ananlysis_len) * pi/(freq_ananlysis_len-1) * min(1, 20/M);
    s1 = abs(freqz(1/M*ones(1,M),1,f));
    alpha = 2/(M);
    s2 =  abs(freqz(alpha,[1 , -(1 -alpha)],f));
    ss(ii) = sum(s1.^2)/sum(s2.^2);
    aa = ss(ii)
    if show_plot
        mm = 10*log10(s1);
        ix = find(mm < -30); mm(ix) = -30;    
        plot(mm,'r');
        hold on;
        mm = 10*log10(s2);
        ix = find(mm < -30); mm(ix) = -30;    
        plot(mm,'g');
        hold off
        grid on
        pause(5)
    end
end

err = abs(ss - 1)
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   Топикстартер, если хочешь внятных ответов, задавай...   Sep 6 2013, 20:09
|- - _sv_   Сразу - извиняюсь за долгое молчание. Был в отъезд...   Sep 7 2013, 07:51
|- - thermit   [quote name='_sv_' date='Sep 7 2013, 1...   Sep 7 2013, 08:40
|- - andyp   Цитата(_sv_ @ Sep 7 2013, 11:51) Следует ...   Sep 7 2013, 08:42
|- - _sv_   При более детальном изучении оказалось, что: 1) су...   Sep 7 2013, 10:44
- - 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
|- - _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 Текстовая версия Сейчас: 23rd June 2025 - 23:15
Рейтинг@Mail.ru


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