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

 
 
> Как правильно фильтровать?
inventor
сообщение Oct 28 2015, 12:05
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Задача такая - у меня АЦП может работать только на минимальной частоте 1000 Гц.
мне нужны кратные частоты: 125, 250 и 500.
Получить их можно проведя децимацию, предварительно перед которой
отфильтровав все что выше чстоты найквиста.
т.е. для получения данных на частоте 500,
я запускаю измерения на 1000 Гц,
фильтрую все что выше 250
и беру каждый второй отсчет.
Не стал заморачиваться с фильтрами - смотрю они уже есть в армовсеом коде
(те у кого STM в папке SMSIS)
у меня процессор СС3200 - не нашел примеров именно для него,
пока взял библиотечку у STM - она подходит к техасу (ф-я void arm_fir_decimate_fast_q31(///)).
Есть несколько вопросов, у меня может быть от 1-го канала до 8-ми,
вот как их всех одновременно фильтровать?
Код, который делает АРМ я так понимаю УЖЕ оптимизирован
по скорости, объему и прочему, сокращено количество циклов и всяких MAC операций.
как сделать "нормальную" фильтрацию одновременно всех 8-ми каналов,
и сколько навскидку времени уйдет на вызов функции фильтрации
т.е. переписать саму функцию фильтрации, чтобы использовать только 1 функцию
вместо идкущих подряд 8 и что то другое.
у кого какие мысли?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AlexandrY
сообщение Oct 28 2015, 14:34
Сообщение #2


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
SasaVitebsk
сообщение Oct 29 2015, 06:34
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- inventor   Как правильно фильтровать?   Oct 28 2015, 12:05
- - TSerg   Поставить 8 CPU.   Oct 28 2015, 12:52
|- - kovigor   Цитата(TSerg @ Oct 28 2015, 15:52) Постав...   Oct 28 2015, 12:59
- - ViKo   Зачем "одновременно"? Обрабатывайте блок...   Oct 28 2015, 13:17
|- - inventor   Цитата(ViKo @ Oct 28 2015, 16:17) Зачем ...   Oct 28 2015, 13:24
||- - Tarbal   Цитата(inventor @ Oct 28 2015, 17:24) то ...   Oct 28 2015, 13:28
||- - ViKo   Цитата(inventor @ Oct 28 2015, 16:24) то ...   Oct 28 2015, 13:35
|||- - Tarbal   Цитата(ViKo @ Oct 28 2015, 17:35) Вообще,...   Oct 28 2015, 13:58
|||- - ViKo   Цитата(Tarbal @ Oct 28 2015, 16:58) Децим...   Oct 28 2015, 14:05
||||- - inventor   Цитата(ViKo @ Oct 28 2015, 17:05) Простей...   Oct 28 2015, 14:14
||||- - ViKo   Цитата(inventor @ Oct 28 2015, 17:14) так...   Oct 28 2015, 14:23
||||- - Tarbal   Цитата(ViKo @ Oct 28 2015, 18:23) Конечно...   Oct 28 2015, 14:38
||||- - ViKo   Цитата(Tarbal @ Oct 28 2015, 17:38) Movin...   Oct 28 2015, 14:41
|||- - TSerg   Цитата(Tarbal @ Oct 28 2015, 16:58) Д обы...   Oct 28 2015, 14:07
||- - TSerg   Цитата(inventor @ Oct 28 2015, 16:24) то ...   Oct 28 2015, 13:38
|- - Tarbal   Цитата(ViKo @ Oct 28 2015, 17:17) Зачем ...   Oct 28 2015, 13:26
|- - kovigor   Цитата(Tarbal @ Oct 28 2015, 16:26) Я та...   Oct 28 2015, 13:27
- - Tarbal   Если вам не нужно 1000 герцовых измерений, то на в...   Oct 28 2015, 13:23
- - Tarbal   Все зависит от задачи. Но надо знать больше о проб...   Oct 28 2015, 14:46


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

 


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


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