Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Во первых это не скользящее среднее, а БИХ ФНЧ первого порядка, являющийся цифровым аналогом RC-цепи, полученным методом инвариантной импульсной характеристики. К скользящему среднему никакого отношения не имеет, так как скользящее среднее это КИХ-фильтр с ИХ=const, и ничто другое.
Во вторых:
y - (y>>3) это y-1/8*y = 0.875*y
таким образом передаточная хар-ка данного фильтра H(z) = 1/(1-0.875*z^-1)
в общем виде БИХ ФНЧ этого типа для G=1 в нуле таков:
y(n)=A*y(n-1) + (1-A)*x(n), т.е. H(z)=(1-A)/(1-A*Z^-1)
где A находится в интервале 0..1, и чем больше А, тем больше постоянная времени фильтра, есть формула, связывающая тау RC-прототипа и коэффициент A.
в данном случае A=0.875, следовательно для получения G=1 надо входное значение домножить на 0.125, или на столько же домножить выходное, что эквивалентно. В этом Л.И. абсолютно прав, и его алгоритм верен.
Как я заметил, этот фильтр был получен из RC-цепочки методом инвариантной импульсной характеристики. Отсюда следует, что отсчеты импульсной хар-ки полностью повторяют дискретизированную импульсную хар-ку соотв. RC-цепи, однако АЧХ получается в результате бесконечного числа наложений сдвинутых копий кусков АЧХ аналоговой RC-цепи, что приводит к ненулевому коэффициенту передачи фильтра на частоте Найквиста.
Теперь подскажу другой фильтр. Который тоже является БИХ фильтром первого порядка, именуется фильтром Баттерворта, и получается из той же аналоговой RC-цепочки, но другим методом преобразования - билинейным преобразованием.
его H(z) = ( (1-A)/2 + (1-A)/2*Z^-1 ) / (1 - A*Z^-1)
соответственно разностное уравнение:
y(n) = (1-A)/2*(x(n)+x(n-1))+A*y(n-1)
Тут A может может быть уже в диапазоне -1...+1. При этом A=0 соответствует частоте среза фильтра (точка -3дБ) в 0.5 от частоты Найквиста, при стремлении A к -1 частота среза стремится к нулю, при стремлении к +1 - к Найквисту. Заодно видно, что при A=0 фильтр вырождается в обычное скользящее среднее двух отсчетов.
отсюда видно, что единственным отличием является использование в качестве входной выборки скользящего среднего двух соседних выборок, что дает ноль на частоте найквиста, который дает нулевой коэффициент передачи на этой частоте. В результате в частотной области АЧХ такого фильтра ПОЛНОСТЬЮ соответствут АЧХ Баттерворта (RC-цепи), однако импульсная характеристика фильтра уже не повторяет отсчеты ИХ RC-прототипа.
Ну и последнее. Запустите матлаб. И сами изучите свойства обоих реализаций в fvtool.
Для первой:
A=xxxxx;
num=[1-A 0];
den=[1 -A];
fvtool(num,den);
Для второй:
A=xxxxx;
num=[(1-A)/2 (1-A)/2];
den=[1 -A];
fvtool(num,den);
Составить ответ | Вернуться на конференцию
Ответы
- На самом деле меня ввели в заблуждение рассуждения про "фильтр Баттерворда". — Oldring (29.02.2008 13:25:43 91.77.101.116, 1723 байт)
- я на прошлой странице спрашавал про реализацию экспоненциального скользящего, что и есть БИХ ФНЧ 1-го порядка. Леонид Иванович заметил что в моей реализации этого фильтра будет ошибка ввиду потери значащих битов при делении. — eXeC001er (29.02.2008 11:33:19 81.26.142.208, пустое)
- вот >>>> — eXeC001er (29.02.2008 11:35:48 81.26.142.208, пустое, ссылка)
- абалдеть :о) — LordN (29.02.2008 11:22:30 217.29.89.98, пустое)
- SM - ты на самом деле SM? — Oldring (29.02.2008 11:21:46 91.77.101.116, пустое)
- А кто же еще? — SM (29.02.2008 11:22:32 80.92.255.53, пустое)
- И эт-та, не вижу причин вдруг переходить на "ты" — SM (29.02.2008 11:25:47 80.92.255.53, пустое)
- Да просто обсуждается "самый простой фильтр без умножений для сглаживания последовательных измерений". — Oldring (29.02.2008 11:25:46 91.77.101.116, 192 байт)
- Нет, то обсуждение давно закончено. Но после этого на форуме уже дважды поднимался тот же вопрос. Вот и вчера снова всплыл. Пора написать FAQ по moving average :) А я признаю глупость своего вопроса, который был задан от лени подумать самому. — Леонид Иванович (29.02.2008 12:32:13 87.252.227.59, пустое)
- тогда уж не по MA, а по цифровой фильтрации в целом :) — SM (29.02.2008 12:47:32 80.92.255.53, пустое)
- Не проканает. Усреднение - интуитивно понятная операция, поэтому и такой интерес. Достаточно сказать "FIR" вместо "усреднение", как у людей тухнет огонь в глазах... :) — Леонид Иванович (29.02.2008 13:08:48 87.252.227.59, пустое)
- так первым пунктом фака - должно быть, что скользящее среднее это лишь один единственный частный случай ЦФ, который КИХ, и который с равными коэффициентами, и с довольно поганой АЧХ в виде sinc. И что этим фильтрация не ограничивается, а можно еще так, так, и сяк, и наперекосяк :) Чтобы дать народу понять, где на самом деле интерес. Уже давно ЦФ стала рядовым дейсвтием в обычных не ЦОС-ориентированных программах. — SM (29.02.2008 13:16:18 80.92.255.53, пустое)
- Да дело в том, что поднялся вопрос про коэффициент передачи фильтра при подаче на его вход постоянного числа (7). Вот я и описал все в подробностях, откуда он берется. — SM (29.02.2008 11:27:10 80.92.255.53, пустое)