Визуализация данных в реал. времени. Что выбрать на C++ для
От: prg1000  
Дата: 07.10.14 07:44
Оценка:
Привет.
Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.
Серьезно с C++ не работал, только C, т.е. на данном этапе мне не важно с чем разбираться (т.к. все равно придется) — Qt, WinAPI, MFC, WTL...
Как-то давно писал на чистом WinAPI (тогда Qt даже не было), механизм у WinAPI мне кажется очень прозрачным, а вот скорость разработки, как мне кажется, низкая.
Посоветуйте на чем остановиться.
Платформа — только Windows.
Отредактировано 07.10.2014 9:13 prg1000 . Предыдущая версия . Еще …
Отредактировано 07.10.2014 8:17 prg1000 . Предыдущая версия .
Re: Визуализация данных в реал. времени. Что выбрать на C++ для GUI.
От: saf_e  
Дата: 07.10.14 08:09
Оценка: -1
Здравствуйте, prg1000, Вы писали:

P>Привет.

P>Задача — визуализация данных в виде графиков в реальном времени с частотой 1 кГц.
P>Серьезно с C++ не работал, только C, т.е. на данном этапе мне не важно с чем разбираться (т.к. все равно придется) — Qt, WinAPI, MFC, WTL...
P>Как-то давно писал на чистом WinAPI (тогда Qt даже не было), механизм у WinAPI мне кажется очень прозрачным, а вот скорость разработки, как мне кажется, низкая.
P>Посоветуйте на чем остановиться.

Из предложенного, однозначно Qt.

Как альтернатива: гуи на WPF (C#) c C++ бекэндом.
Re: 1 кГц
От: Qbit86 Кипр
Дата: 07.10.14 08:10
Оценка: +1
Здравствуйте, prg1000, Вы писали:

P>Задача — визуализация данных в виде графиков в реальном времени с частотой 1 кГц.


Зачем визуализировать с частотой выше 60 Гц?
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: 1 кГц
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.10.14 08:11
Оценка: 1 (1) +1
Здравствуйте, Qbit86, Вы писали:

Q>Зачем визуализировать с частотой выше 60 Гц?

чтоб сохранять в файл или видеопоток?

а по сабжу: Qt + QWT.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: 1 кГц
От: prg1000  
Дата: 07.10.14 08:16
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, Qbit86, Вы писали:


Q>>Зачем визуализировать с частотой выше 60 Гц?

X>чтоб сохранять в файл или видеопоток?

X>а по сабжу: Qt + QWT.


Неправильно написал — данные приходят с такой частотой, их нужно отобразить на экране.
Re: Визуализация данных в реал. времени. Что выбрать на C++ для
От: B0FEE664  
Дата: 07.10.14 10:06
Оценка:
Здравствуйте, prg1000, Вы писали:

P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.


Я бы сказал, что это OpenGL в режиме 2D. В Qt для OpenGL есть специальные возможности.
И каждый день — без права на ошибку...
Re[4]: 1 кГц
От: slava_phirsov Россия  
Дата: 07.10.14 15:00
Оценка:
Здравствуйте, prg1000, Вы писали:

P>Неправильно написал — данные приходят с такой частотой, их нужно отобразить на экране.


Если хочется тупо использовать компьютер в качестве олдскульного электронно-лучевого осциллографа, то таки да, без OpenGL или DirectX какого-нибудь не обойтись. И не факт, что сработает. Впрочем, даже если и будет работать "немножко не так", например, с пропуском (возможно, существенной) части сигнала, то обнаружить это будет тяжело, а доказать — практически невозможно Но я бы так не делал, если честно, а попробовал бы что-нибудь типа стробоскопии или накопления ("быстрый", возможно даже, ассемблерный код набирает отсчеты, а "медленный", высокоуровневый — отображает накопленный, скажем, за 100мс массив данных). QwtPlot (Qwt тут кто-то выше советовал) — вариант, но лично мне он не нравится исключительно из эстетических соображений.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re: Визуализация данных в реал. времени. Что выбрать на C++
От: MTD https://github.com/mtrempoltsev
Дата: 07.10.14 16:43
Оценка:
Здравствуйте, prg1000, Вы писали:

P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.


Зачем? Оператор все равно разницы не увидит между 60 и 1000, а задачу ты усложняешь сильно.

Кстати, Windows и реальное время несовместимы. Так что не усложняй на ровном месте.
Отредактировано 07.10.2014 16:46 MTD . Предыдущая версия .
Re: Визуализация данных в реал. времени. Что выбрать на C++ для
От: ArtDenis Россия  
Дата: 07.10.14 16:57
Оценка:
Здравствуйте, prg1000, Вы писали:

P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.


А что из себя представляют эти данные? Их же не надо отображать с частотой 1 кГц?
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[2]: Визуализация данных в реал. времени. Что выбрать на C++
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 07.10.14 17:46
Оценка:
Здравствуйте, MTD, Вы писали:

MTD>Кстати, Windows и реальное время несовместимы.


Это другое значение реального времени.
Ce n'est que pour vous dire ce que je vous dis.
Re[5]: 1 кГц
От: prg1000  
Дата: 08.10.14 04:50
Оценка:
Здравствуйте, slava_phirsov, Вы писали:

_>Если хочется тупо использовать компьютер в качестве олдскульного электронно-лучевого осциллографа, то таки да, без OpenGL или DirectX какого-нибудь не обойтись. И не факт, что сработает. Впрочем, даже если и будет работать "немножко не так", например, с пропуском (возможно, существенной) части сигнала, то обнаружить это будет тяжело, а доказать — практически невозможно Но я бы так не делал, если честно, а попробовал бы что-нибудь типа стробоскопии или накопления ("быстрый", возможно даже, ассемблерный код набирает отсчеты, а "медленный", высокоуровневый — отображает накопленный, скажем, за 100мс массив данных). QwtPlot (Qwt тут кто-то выше советовал) — вариант, но лично мне он не нравится исключительно из эстетических соображений.


Спасибо. Вот тут меня как раз интересует насколько свободно я смогу пользоваться возможностями OpenGL в Qt. Хватит ли этого для задачи?
Re[2]: Визуализация данных в реал. времени. Что выбрать на C++ для
От: prg1000  
Дата: 08.10.14 04:56
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, prg1000, Вы писали:


P>>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.


AD>А что из себя представляют эти данные? Их же не надо отображать с частотой 1 кГц?


Конечно нет. У меня раз в секунду приходит 1000 точек, вот их мне каждую секунду и нужно видеть на экране. Тут уже дело реализации, конечно. Можно ведь их обновлять на экране каждую секунду, а можно и чаще, но не более чем частота обновления экрана монитора естественно (и уж точно не 1 кГц)))
Re: Визуализация данных в реал. времени. Что выбрать на C++ для
От: c-smile Канада http://terrainformatica.com
Дата: 08.10.14 04:58
Оценка: 3 (1)
Здравствуйте, prg1000, Вы писали:

P>Привет.

P>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.

Вот данные приходят в real time, интегрируются и отображаются.



Это все в Sciter (Кто про что а голый про баню).

1 кГц это одно событие в одну миллисекунду. Стандаратное значение FPS для экранных анимаций — 60, или одно обновление экрана каждые 16ms.
Windows кстати и WM_PAINT чаще слать не будет. Sciter тоже выодит анимации с 60 FPS max.

По любому нужно как-то твой сигнал усреднять, фильтровать — конвертирвать к виду удобному для восприятия человеком.

  Вот минимальное приложение на Sciter (C++)
#include "sciter-x-window.hpp"

class frame: public sciter::window {
public:
  frame() : window(SW_TITLEBAR | SW_RESIZEABLE | SW_CONTROLS | SW_MAIN) {}

  BEGIN_FUNCTION_MAP
    FUNCTION_0("helloWorld", helloWorld);
  END_FUNCTION_MAP

  sciter::string  helloWorld() { return WSTR("Hello World"); }

};

int uimain(int argc, WCHAR** argv, std::function<int()> run ) {

  frame *pwin = new frame();

  const char* html = 
    "<html>"
    "<script type='text/tiscript'>"
      "$(body).text = view.helloWorld();"
    "</script>"
    "<body>"
    "</body></html>";

  pwin->load( aux::chars_of(html) );

  pwin->expand();

  return run();

}


Здесь создается и показывается окно. Также описана native function (helloWorld()) для скрипта.
Например твоя native function предоставляет данные для скрипта. Скрипт скажем по таймеру опрашивает (вызывает) данную функцию и строит/рисует график.
Re[6]: 1 кГц
От: slava_phirsov Россия  
Дата: 08.10.14 12:11
Оценка: +1
Здравствуйте, prg1000, Вы писали:

P>Спасибо. Вот тут меня как раз интересует насколько свободно я смогу пользоваться возможностями OpenGL в Qt. Хватит ли этого для задачи?


Боюсь, что скорее нет. Вот если бы мы были пчелы и "частота мерцания" у нашего зрительного анализатора (глаз + зрительные отделы мозга) была килогерцовой, то OpenGL был бы "заточен" под такую частоту. А так — его писали люди, для людей, и делали это из расчета, что обновлять картинку чаще, чем 100 раз в секунду никому не потребуется. А ты хочешь — 1000 раз в секунду. Впрочем, попробуй, вдруг что получится. Было бы интересно узнать о результатах, но, повторюсь, я бы так делать не стал.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Отредактировано 08.10.2014 12:12 slava_phirsov . Предыдущая версия .
Re[3]: Визуализация данных в реал. времени. Что выбрать на C++ для
От: ArtDenis Россия  
Дата: 08.10.14 12:16
Оценка: 1 (1) +3
Здравствуйте, prg1000, Вы писали:

P>>>Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.


Для того, чтобы каждую секунду отображать график из 1000 точек, по скорости подойдёт всё что угодно. Поэтому что хорошо знаешь, то и используй.
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[7]: 1 кГц
От: watchmaker  
Дата: 08.10.14 13:21
Оценка: 2 (1) +1
Здравствуйте, slava_phirsov, Вы писали:

_> Вот если бы мы были пчелы и "частота мерцания" у нашего зрительного анализатора (глаз + зрительные отделы мозга) была килогерцовой, то OpenGL был бы "заточен" под такую частоту. А так — его писали люди, для людей, и делали это из расчета, что обновлять картинку чаще, чем 100 раз в секунду никому не потребуется.


Откуда такие познания об OpenGL и о людях его писавших? И как именно его «затачивали под такую частоту»? И зачем так делали? И почему «заточенный» OpenGL используется для gpgpu, где пресловутые тысячи кадров в секунду не редкость? И что ему мешает выдавать те же тысячи кадров в секунду при визуализации несчастного графика? Да, как библиотеке рендера, ничего не мешает. Задача OpenGL нарисовать что попросили и сам процесс рендера никто намеренно не тормозит. Если вычислительная мощность позволяет, то будет высокий fps.

Естественно ограничение на fps возникает совсем не в OpenGL, а в средствах вывода — в скорости работы монитора или проектора. Если обновлять изображение быстрее чем монитор его может отобразить, то это лишь отправит в утиль часть картинки и, возможно, приведёт к заметным артефактам в изображении. И если условных 60 fps достаточно, то можно просто ставить рендер на паузу, если он работает слишком быстро. И вот это вот действительно делается. Но обычно для всей графической подсистемы, а не только для OpenGL (хотя многие платформы и предоставляют расширения к API для этой цели).
Если же проектор может отобразить 5000 кадров в секунду, то тот же OpenGL вполне может выступать источником таких данных (пример).
Re[8]: 1 кГц
От: slava_phirsov Россия  
Дата: 08.10.14 14:42
Оценка: 3 (1) +1 :)
Здравствуйте, watchmaker, Вы писали:

W>Если вычислительная мощность позволяет, то будет высокий fps.


Ключевое слово — "если". И никто не обещал для какой-нибудь встроенной карточки, что она это позволяет. Может позволяет, может — нет Надо пробовать.


W>Естественно ограничение на fps возникает совсем не в OpenGL, а в средствах вывода — в скорости работы монитора или проектора.


Как насчет обмена между картой и процессором? Карточка будет получать данные от процессора. 1000 раз в секунду. А процессор, помимо подготовки данных (он ведь их, как я понял вопрос ТС, откуда-то читает, с внешнего устройства) и пересылки их карточке будет занят еще кучей других дел.


W>Если же проектор может отобразить 5000 кадров в секунду, то тот же OpenGL вполне может выступать источником таких данных (пример).


Вот с трудом представляю себе, зачем нужен проектор отображающий 5000 кадров в секунду — показывать порно пчелам? Никто из зрителей-людей и не заметит разницы между 5000, 1000, и 200 Гц. И сильно сомневаюсь, что у ТС именно такое устройство отображения. Хотя, кто знает...
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Отредактировано 08.10.2014 14:43 slava_phirsov . Предыдущая версия .
Re[9]: 1 кГц
От: watchmaker  
Дата: 08.10.14 15:13
Оценка: +1
Здравствуйте, slava_phirsov, Вы писали:


W>>Если вычислительная мощность позволяет, то будет высокий fps.

_>Ключевое слово — "если". И никто не обещал для какой-нибудь встроенной карточки, что она это позволяет. Может позволяет, может — нет Надо пробовать.
OMG. «Если» написано для того чтобы фраза включала и более ресурсоёмкие задачи, ибо они всегда существуют. Что же касается встроенных видеокарточек, то для объёмов, указанных автором темы, скорость рендеринга вполне достигает десятка тысяч кадров в секунду, glxgears как пример тому.

_>Как насчет обмена между картой и процессором? Карточка будет получать данные от процессора. 1000 раз в секунду.

Для указанных объёмов — это мелочи.

W>>Если же проектор может отобразить 5000 кадров в секунду, то тот же OpenGL вполне может выступать источником таких данных (пример).


_>Вот с трудом представляю себе, зачем нужен проектор отображающий 5000 кадров в секунду — показывать порно пчелам?

По ссылке есть и описание, и демонстрация.
_>Никто из зрителей-людей и не заметит разницы между 5000, 1000, и 200 Гц.
Отнюдь. Для вышепоказанного проектора это было бы очень заметно.

_>И сильно сомневаюсь, что у ТС именно такое устройство отображения. Хотя, кто знает...

У автора темы вообще не стоит задача показывать что-то чаще обновления монитора — прочти тему
Автор: prg1000
Дата: 08.10.14
.
Re[10]: 1 кГц
От: slava_phirsov Россия  
Дата: 08.10.14 15:41
Оценка:
Здравствуйте, watchmaker, Вы писали:

_>>Как насчет обмена между картой и процессором? Карточка будет получать данные от процессора. 1000 раз в секунду.

W>Для указанных объёмов — это мелочи.

Сила не в объеме. Для начала, процессор должен прочитать и обработать данные (неустановленным образом), а затем вызовом соответствующих функций API OpenGL (glDrawArrays ) отрисовать график. Он это будет успевать делать в реальном времени, 1000 раз в секунду, без перебоев? Почему-то думаю, что нет.


W>Отнюдь. Для вышепоказанного проектора это было бы очень заметно.


Я не видел, ты не видел, так что это уже из серии "сколько демонов уместится на кончике иглы"...


W>У автора темы вообще не стоит задача показывать что-то чаще обновления монитора — прочти тему
Автор: prg1000
Дата: 08.10.14
.


Задача — визуализация данных в виде графиков в реальном времени. Данные приходят с частотой 1 кГц их нужно отобразить на экране.


Автор, как я понял, хочет решить задачу "в лоб": пришли данные — перерисовал картинку. Вопрос: сработает ли такой подход с использованием аппаратного ускорения (OpenGL, DirectX). Я считаю — вряд ли.


P.S. "реальное время" отменяется — ТС написал ниже, что отображать данные достаточно 1 раз в секунду. 1000 точек. В таком случае применение OpenGL просто теряет смысл.
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Отредактировано 09.10.2014 9:35 slava_phirsov . Предыдущая версия .
Re[2]: Визуализация данных в реал. времени. Что выбрать на C++ для
От: alexdpp  
Дата: 08.10.14 20:02
Оценка: 1 (1)
зачем он нужен если есть бесплатный и мощный Qt?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.