Расчеты непрерывного потока по блокам данных

Каков рекомендуемый метод (ы) для доступа к данным из предыдущего или будущего блока данных из входного потока объемных данных? Изменить: я использую с ++.

Например, если бы я хотел выполнить свертку в потоке входящих данных, где каждое вычисление зависит от некоторого числа значений вперед / назад в потоке, как бы я попал в «следующий» блок данных или «предыдущий» блок данных выполнить сверточные расчеты на границах блоков? Или временно сохранить эту информацию где-то внутри компонента, чтобы ее можно было использовать от одного блока к другому?

Или более простой пример: если я отправляю повторяющийся вектор с 8-октетными значениями в свой компонент, я хочу, чтобы компонент просто переключался с 0 на 1 или наоборот при получении 1 (зависит от последнего индекса предыдущего блока данных в рассчитать первый индекс следующего блока данных).

Желаемая:


в: [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] ->

out: [1,1,1,0,0,0,0] [0,0,0,1,1,1,1] [1,1,1,0,0,0,0]

Чего мне удалось добиться:


в: [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] ->

out: [1,1,1,0,0,0,0] [1,1,1,0,0,0,0] [1,1,1,0,0,0,0]

Я думал сохранить соответствующую информацию из ранее обработанного блока в переменной где-то внутри кода компонента serviceFunction (), хотя я не нашел способа сделать это без повторной инициализации значения (каждый блок данных — новый вызов к serviceFunction ()?).

В качестве альтернативы я подумал создать свойство «только для чтения» для хранения значений, которые меня интересуют, но я подозреваю, что может быть лучший подход, о котором я не знаю.

Спасибо,

-отметка

1

Решение

Если вам нужно сохранить некоторое количество выборок между операциями чтения, входные потоки BulkIO поддерживают перекрытие данных. Вы предоставляете как количество выборок для чтения, так и количество выборок для потребления (которое обязательно меньше или равно размеру чтения), и следующее чтение начнется с первой выборки, которая не была использована. Обратитесь к разделу руководства REDHAWK в BulkIO Stream API (5.7.3 в руководстве 2.0.8) для получения дополнительной информации. Вы также можете поддерживать историю, просто сохраняя последний прочитанный блок данных как переменную-член класса вашего компонента.

Ваш простой пример предлагает конечный автомат, а не содержимое последнего чтения. В общем, если есть информация, которую вы хотите сохранить между итерациями вашего serviceFunction (), вы можете свободно добавлять свои собственные переменные-члены в класс компонента (например, «MyComponent_i»). Нет необходимости объявлять свойство для добавления членов. Только базовый класс (например, «MyComponent_base») предназначен для регенерации при изменении свойств или портов компонента, поэтому любые изменения, внесенные в класс компонента, сохраняются.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]