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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как правильно фильтровать?
ViKo
сообщение Oct 28 2015, 14:23
Сообщение #16


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(inventor @ Oct 28 2015, 17:14) *
так у меня уже сделано - брал 2-й, 4-й и 8-й отсчет
просто не хочу нехороших эффектов с наложением.
мне кажется цифровой фильтр все таки должен быть.

Конечно. Зачем же игнорировать работу АЦП. Возьмите среднее арифметическое... disco.gif
Если хочется "фильтр", можно и целочисленной арифметикой обойтись. Можно даже без умножений. Пусть будет не идеальная АЧХ, подпадающая под известные фамилии. Но фильтровать все равно будет.
К примеру, для 4 выборок: взять с весом 0,5 1,5 1,5 0,5
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 28 2015, 14:34
Сообщение #17


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(inventor @ Oct 28 2015, 14:05) *
Код, который делает АРМ я так понимаю УЖЕ оптимизирован
по скорости, объему и прочему, сокращено количество циклов и всяких MAC операций.


Не видно чтобы там код был оптимизирован. Он же на C-и написан. Там оптимизацию еще делать и делать.

Сначала надо избавится от передачи аргументов по указателям. Лучше вообще аргументы сделать статическими переменными. Автоматные переменные тоже делаем статическими.
Потом развернуть циклы, длина фильтра известна заранее, значит убираем ее из аргументов.
Выравниваем функцию в памяти, выравниваем данные в памяти. Избавляемся от копирования коэффициентов.
Делаем функцию инлайновой.

Ну и наконец компилируем все в IAR. Получим еще с несколько десятков процентов приращения производительности.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 28 2015, 14:38
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(ViKo @ Oct 28 2015, 18:23) *
Конечно. Зачем же игнорировать работу АЦП. Возьмите среднее арифметическое... disco.gif
Если хочется "фильтр", можно и целочисленной арифметикой обойтись. Можно даже без умножений. Пусть будет не идеальная АЧХ, подпадающая под известные фамилии. Но фильтровать все равно будет.
К примеру, для 4 выборок: взять с весом 0,5 1,5 1,5 0,5


Moving average фильтр имеет прямоугольное окно, что порождает сильные боковые лепестки. Анти-алиасинг фильтр -- зверь потоньше. Там полиномы Чебышева или Якоби в ходу.

Если на то пошло, то можно и совсем не фильтровать. Тоже как-то будет работать.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 28 2015, 14:41
Сообщение #19


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Tarbal @ Oct 28 2015, 17:38) *
Moving average фильтр имеет прямоугольное окно, что порождает сильные боковые лепестки. Анти-алиасинг фильтр -- зверь потоньше. Там полиномы Чебышева или Якоби в ходу.

Да, боковые лепестки. В которые, если на входе сигнал был отфильтрован, уже ничего не попадет. Надо выбрать, что реально можно успеть сделать.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 28 2015, 14:46
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Все зависит от задачи. Но надо знать больше о проблеме. Что-то можно делать, а что-то не стоит.
Например если разница в спектральном разрешении между разными сериями (500, 250 и 125) не важна и спектра до 62 герц хватит для всех выборок, то можно сразу поставить на входе анти-аллиасинг на 62 герца и делать только децимацию. Фильтрация не нужна.

Цитата(ViKo @ Oct 28 2015, 18:41) *
Да, боковые лепестки. В которые, если на входе сигнал был отфильтрован, уже ничего не попадет. Надо выбрать, что реально можно успеть сделать.


Все зависит от деталей. Для чего-то да, а для другого нет.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Oct 29 2015, 06:34
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(AlexandrY @ Oct 28 2015, 17:34) *
Не видно чтобы там код был оптимизирован. Он же на C-и написан. Там оптимизацию еще делать и делать.
Сначала надо избавится от передачи аргументов по указателям. Лучше вообще аргументы сделать статическими переменными. Автоматные переменные тоже делаем статическими.
Потом развернуть циклы, длина фильтра известна заранее, значит убираем ее из аргументов.
Выравниваем функцию в памяти, выравниваем данные в памяти. Избавляемся от копирования коэффициентов.
Делаем функцию инлайновой.

Ну и наконец компилируем все в IAR. Получим еще с несколько десятков процентов приращения производительности.

Вот именно. Как по мне, проблема не в том, что "на С написано", а в том, что они данные под свою задачу оптимизировали. А в реальном проекте данные поступают в зависимости от способа их получения.
По поводу целочисленных фильтров - зависит от числа значащих разрядов, при обработке, от разрядности входных данных, от формы и зашумлённости входного сигнала.
Я себе делаю мат модель, имитирую входной сигнал, зашумляю его, потом дискретезирую его (имитирую АЦП) а потом прогоняю своей прогой и так вылизываю алгоритм. Порой, всё равно на реальном объекте нюансы возникают, но, тем не менее, удаётся сэкономить время на отладке в разы.
На мат моделе вылазят разные штуки, важные для понимания. Так, к примеру, столкнулся в последней задаче, что результат обработки (декодирование у меня было) сильно зависел от стабильности амплитуды полезного сигнала. Пришлось ввести АРУ. Сделал 2 варианта - программный и аппаратный. Результат практически идентичный, хотя, по идее аппаратный должен быть эффективнее, так как повышает число значащих разрядов.
И вообще. На таких задачах, как я убедился, самое главное - возможность максимально точно сымитировать входное воздествие.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:30
Рейтинг@Mail.ru


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