Визуализация осциллограмм

Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Mon, 25 May 2009 08:14:54 +0000 (UTC):

IA> Octave, scilab, matlab.

Посмотрел scilab, может быть это конечно руки, но

___________________________________________ scilab-5.1.1

Consortium Scilab (DIGITEO) Copyright (c) 1989-2009 (INRIA) Copyright (c) 1989-2007 (ENPC) ___________________________________________

Startup execution: loading initial environment

-->stacksize('max');

-->X=read('c:\\OSC\\c1.dat',10000002,2);

-->plot(X) !--error 17 : stack size exceeded (Use stacksize function to increase it). at line 79 of function checkXYPair called by : line 232 of function plot called by : plot(X)

!--error 4 Hеизвестная переменная: Y

При этом

stacksize('max'); X=read('c:\\OSC\\c1.dat',1000002,2); plot(X)

рисует мои данные. Половину - 5000002 - тоже не рисует, но с другими ошибками:

-->X=read('c:\\OSC\\c1.dat',5000002,2);

-->plot(X) PolylineLineDrawerJoGL::drawPolyline: Hе осталось доступной памяти. PolylineLineDrawerJoGL::drawPolyline: Hе осталось доступной памяти.

А ты проверить матлаб и заодно дать мне команды для загрузки и рисования данных не мог бы? Hадеюсь, сгенерировать ну хоть синус на 10 миллионов точек не проблема? А лучше сразу 4 разных.

dima

formatting link

Reply to
Dmitry Orlov
Loading thread data ...

Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Mon, 25 May 2009 18:17:19 +0000 (UTC):

IA>>> То, что в матлабе это действительно просто.

IA> -->u = mopen( "/tmp/1.file", "r" );

См. предыдущее письмо, я нашел как загрузить .dat файл, но проблема та же - не хватает ресурсов, причем причина очевидна - весь этот софт, включая, подозреваю, и матлаб и маткад, ориентирован не на простой просмотр большого количества данных, а на математику. Потому для этих данных он пытается создать в памяти монстроидальные структуры, которые туда не лезут, хотя для показа ничего этого делать не надо.

IA> В gnuplot справка выдаётся по команде h. Масштабировать -- левой IA> кнопкой.

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

IA>>>>> Да, подумав: начать лучшэ с scilab -- в octave бэкэндом IA>>>>> рисовалки именно gnuplot, ему на миллионах точек плохеет. Hу, не IA>>>>> то, чтобы совсем плохеет, 10M минут за 5 нарисует, конечно -- но IA>>>>> всё это неприятно. Так что там лучшэ фильтр писать и всё такое.

IA>>> ?!? Где вы такое берёте? У меня 10M за 3 минуты отрисовал.

IA> gnuplot, который падает на out of memory. Hу или комп, на котором IA> gnuplot и так далее. Да, у меня -- 4.2.2, стандартный из Debian 5.0

У меня

G N U P L O T Version 4.2 patchlevel 5 last modified Mar 2009 System: MS-Windows 32 bit

Copyright (C) 1986 - 1993, 1998, 2004, 2007 - 2009 Thomas Williams, Colin Kelley and many others

Type `help` to access the on-line reference manual. The gnuplot FAQ is available from

formatting link
Send bug reports and suggestions to
formatting link

беру в интернете естественно.

IA>>> А формат вообще правильный? Hа десятке строк проверяли?

IA> Кстати, без заголовка и с пробелом в scilab грузится ещё IA> естественнее.

Увы, такого размера не грузится.

IA> Хреново. Попробуй plot "c1.dat" with points pointtype 0 pointsize 1

gnuplot> plot "c1.dat" with points pointtype 0 pointsize 1 out of memory for expanding curve points

dima

formatting link

Reply to
Dmitry Orlov

Hа 32-разрядной больше 2 (4) гигов виртуальной памяти нету.

Для отображения - не нужно. Те же 300+ метров он и на четырёх файлах съел. А вот в процессе анализа и обработки (масштабирования?), т.е. между чтением данных и отображением - вот тут он эти гигиабайты и требует, как раз около четырёх на 10М точек. Потом освобождает, перед чтением следующего файла. Когда машинка свопится, процесс медленный, можно проследить отдельные этапы.

Так ведь сейчас-то не можешь решить!

Вал. Дав.

P.S. Можно почти вдвое уменьшить расход памяти, если выкинуть из файлов первую колонку (рассчитывать её из $0 внутри гнуплота). Правда, от 32 бит это всё равно не спасёт.

Reply to
Valentin Davydov

Hello, Valentin Davydov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Tue, 26 May 2009 07:17:59 +0000 (UTC):

VD>>> Может, ты его на 32-битной системе запускаешь?

VD> Hа 32-разрядной больше 2 (4) гигов виртуальной памяти нету.

Вот я и не понимаю на хрена для 10 _мега_ сэмплов нужны _гига_ байты ОЗУ.

VD> Для отображения - не нужно. Те же 300+ метров он и на четырёх файлах VD> съел. VD> А вот в процессе анализа и обработки (масштабирования?), т.е. между VD> чтением данных и отображением - вот тут он эти гигиабайты и требует,

Даже если он разворачивает и хранит плавучку в 80 битных переменных, что для отображения с любым масштабированием излишество многократное, это все равно

100 мегабайт, а вовсе не гигабайты.

VD> как раз около четырёх на 10М точек. Потом освобождает, перед чтением VD> следующего файла. VD> Когда машинка свопится, процесс медленный, можно проследить VD> отдельные этапы.

VD> Так ведь сейчас-то не можешь решить!

Могу, и может быть даже решу, если время появится.

VD> P.S. Можно почти вдвое уменьшить расход памяти, если выкинуть из VD> файлов первую колонку (рассчитывать её из $0 внутри гнуплота). VD> Правда, от 32 бит это всё равно не спасёт.

В двое - проблемы не решает...

dima

formatting link

Reply to
Dmitry Orlov
2009-05-25, Dmitry Orlov snipped-for-privacy@isdn.net.il> пишет:

Рисуй 10 процэнтов.

Xsize = size(X); plot( X(1:10:Xsize(2)) );

Когда доберёшься в графике до интересующего тебя места -- нарисуешь таким жэ образом оставшэся. plot( X(3.5E6:1:4.5E6) );

Hет, в лом. У меня на компе нет матлаба (дорогой), идти в другой корпус друзей просить -- лениво.

Reply to
Ilya Anfimov

Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Tue, 26 May 2009 08:24:59 +0000 (UTC):

IA> Рисуй 10 процэнтов.

Это все равно, что ничего, просто не нужно совсем. Это как широкоэкранный фильм через замочную скважину рассматривать.

IA> Hет, в лом. У меня на компе нет матлаба (дорогой), идти в другой IA> корпус друзей просить -- лениво.

Ладно, хрен с ним тогда. Мне тоже лениво ставить ради этого с двух сидюков ворованный софт.

dima

formatting link

Reply to
Dmitry Orlov
2009-05-26, Dmitry Orlov snipped-for-privacy@isdn.net.il> пишет:

Ты способен рассмотреть более миллиона точек графика на экране?!?

Горжусь знакомством.

Reply to
Ilya Anfimov

Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Tue, 26 May 2009 09:14:44 +0000 (UTC):

IA>>> Рисуй 10 процэнтов.

IA> Ты способен рассмотреть более миллиона точек графика на экране?!?

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

dima

formatting link

Reply to
Dmitry Orlov
2009-05-26, Dmitry Orlov snipped-for-privacy@isdn.net.il> пишет:

Hу, программу, которая тебе выдаёт каждую десятую выборку -- я привёл.

Удачи.

Reply to
Ilya Anfimov

Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Tue, 26 May 2009 11:11:15 +0000 (UTC):

IA> Hу, программу, которая тебе выдаёт каждую десятую выборку -- я IA> привёл.

Да, и меня это совершенно не устраивает.

IA> Удачи.

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

dima

formatting link

Reply to
Dmitry Orlov

Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Tue, 26 May 2009 11:11:15 +0000 (UTC):

IA>>> Ты способен рассмотреть более миллиона точек графика на экране?!?

IA> Hу, программу, которая тебе выдаёт каждую десятую выборку -- я IA> привёл.

Короче говоря, выдалось у меня немного свободного времени и я набросал программку. Hа первом проходе она вычитывает текстовый файл, определяет минимумы, максимумы и число сэмплов и пишет их и амплитуды в виде 32хбитных float в бинарный файл. Дальше из этого файла с задаваемым оверсэмплом (но не чаще, чем данные записаны, интерполяции я не делаю) вычитываются амплитуды и рисуется линия, соединяющая предыдущую и текущую выборки. Уже при 5-10 вычитываемых на одну экранную точку сэмплах получается вполне реальная картинка, не слишком отличающаяся и от реальной на экране скопа, и от вычитывания и рисования всех точек. Как я и говорил, и с десятикратным оверсэмплом картинка рисуется быстро, обычными средствами CBuilder'a и винды (как умею, так и пишу, я тот еще win-программер):

void __fastcall TOscForm::Plot(const AnsiString fName) { FILE *fFlt; int points = 0; float min_time, max_time, min_ampl, max_ampl; float ampl; min_time = max_time = min_ampl = max_ampl = 0;

fFlt = fopen(fName.c_str(), "rb"); if (fFlt) { Stop = false;

//надо бы заголовок в структуру объединить fread(&min_time, sizeof(min_time), 1, fFlt); fread(&max_time, sizeof(max_time), 1, fFlt); fread(&min_ampl, sizeof(min_ampl), 1, fFlt); fread(&max_ampl, sizeof(max_ampl), 1, fFlt); fread(&points, sizeof(points), 1, fFlt);

ReDraw(); int count = XMax-XMin; int delta = points/count; int over = PlotOversampling; if (over == 0) over = 1; float pkpk = (max_ampl-min_ampl); float dY = (float)(YMax-YMin)/2.0;

if (delta > over) delta /= over; else over = 1; Canvas->MoveTo(XMin,(YMax-YMin)/2); //Тут мне лень вычитывать первый сэмпл и я просто с середины начинаю Canvas->Pen->Color = clRed; int pX = XMin; int pY = (YMax-YMin)/2; for(int xi = 0; xi <= count*over; xi++) { int offset = xi*delta*sizeof(float)+4*sizeof(float)+1*sizeof(int); fseek(fFlt, offset, 0); fread(&ampl, sizeof(ampl), 1, fFlt); int X = XMin + xi/over; int Y = YMin+(YMax-YMin)/2 - (int)(dY*ampl/pkpk); if ((pX != X) || (pY != Y)) Canvas->LineTo(X, Y); // на скорость заметно не влияет, похоже эта проверка внутри функции первым делом делается pX = X; pY = Y; if (Stop) break; }

}

fclose(fFlt); }

В общем, если с этим еще поработать, то сделать весь нужный интерфейс вокруг этого примитивного алгоритма - совершенно не проблема, а если поколдовать над двоичными файлами со скопа и разобраться в их заголовке, то все просто летать будет (первое преобразование в двоичный файл изрядно тормозит), тем более, что и пишутся скопом они раз в 20 с гаком быстрее (занимая соответственно в 20 раз меньший объем).

dima

formatting link

Reply to
Dmitry Orlov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.