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

 
 
> Отображение большого колличества точек на маленьком экране
Petrovich
сообщение Nov 26 2010, 20:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Господа, есть задача, помогите пожалуйста решить.
Есть выборка сигнала длинной 10000 семплов. Всю эту выборку нужно отобразить на экране длинной в 300 точек. Как это сделать так, что бы из исходной выборки не были выкинуты характерные максимумы и минимумы?
При этом алгоритм должен быть не ресурсоемким...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexPec
сообщение Nov 26 2010, 20:42
Сообщение #2


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Petrovich @ Nov 26 2010, 23:23) *
Господа, есть задача, помогите пожалуйста решить.
Есть выборка сигнала длинной 10000 семплов. Всю эту выборку нужно отобразить на экране длинной в 300 точек. Как это сделать так, что бы из исходной выборки не были выкинуты характерные максимумы и минимумы?
При этом алгоритм должен быть не ресурсоемким...

Вроде все логично, делал так: разбивал на блоки по 10000/300 семплов, в каждом искал min,max рисовал вертикальную линию от min до max, при этом х-координата линии равна номеру блока. В моем случае было быстрее, чем на каждый семпл ставить точку с координатой (trunc (x/(10000/300)),y) (здесь х-номер отсчета, у - значение)

Сообщение отредактировал alexPec - Nov 26 2010, 20:44
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Nov 27 2010, 17:07
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Хорошая идея, попробую так. Только наверное нужно проводить линию от предыдущего минимума, к текущему максимуму и уже от него к минимуму. Это позволить масштабировать.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Nov 27 2010, 22:53
Сообщение #4


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Petrovich @ Nov 27 2010, 20:07) *
Хорошая идея, попробую так. Только наверное нужно проводить линию от предыдущего минимума, к текущему максимуму и уже от него к минимуму. Это позволить масштабировать.

Как масштабировать? У Вас и так все плотно, если масштабируете, у вас блок просто меньше будет. Такое масштабирование нужно когда на экране больше точек чем семплов, а у вас наоборот. Да и когда на экране больше точек, то просто точки соединяем, min/max не при делах.
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Nov 28 2010, 15:23
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Я имею ввиду что тогда можно отображать при разных соотношениях точек/пикселей. От 1/1 до любого другого значения
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Jan 28 2011, 19:18
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



С отображением большого количества точек получилось все хорошо, Но сейчас задача немного изменилась. Как правильно отобразить например 350 или любое не кратное значение на экране размером 300. Как тут быть? Это вроде называется ресамплинг, но четкого описания алгоритма не нашел. Кто нибудь знает как это делается корректно?
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 28 2011, 20:31
Сообщение #7


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

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(Petrovich @ Jan 28 2011, 22:18) *
С отображением большого количества точек получилось все хорошо, Но сейчас задача немного изменилась. Как правильно отобразить например 350 или любое не кратное значение на экране размером 300. Как тут быть? Это вроде называется ресамплинг, но четкого описания алгоритма не нашел. Кто нибудь знает как это делается корректно?


А зачем Вам ресамплинг? У Вас точек на реальную горизонтальную координату по любому >1. Так эти 50 лишних точек равномерно распределить по 300. Получим такую картину: 5 точек ставим как они есть, 6-ю, 7-ю - колдонуть как нибудь (ну или тот же мин-макс или среднее или еще чего, то есть сделать из 2-х одну), затем снова 5 точек как есть, снова 2 точки в 1 слепленные. Получится 50 точек более-менее равномерно размазаны по графику. Конечно линейность представления результата пострадает, но если это не принципиально - гораздо менее затратно по ресурсам чем ресамплинг. Кстати если при слеплении мин-макс использовать, все мин и макс остаются на графике

Сообщение отредактировал alexPec - Jan 28 2011, 20:32
Go to the top of the page
 
+Quote Post
Petrovich
сообщение Jan 28 2011, 20:43
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 2-06-05
Из: Днепропетровск
Пользователь №: 5 658



Цитата(alexPec @ Jan 28 2011, 23:31) *
А зачем Вам ресамплинг? У Вас точек на реальную горизонтальную координату по любому >1. Так эти 50 лишних точек равномерно распределить по 300. Получим такую картину: 5 точек ставим как они есть, 6-ю, 7-ю - колдонуть как нибудь (ну или тот же мин-макс или среднее или еще чего, то есть сделать из 2-х одну), затем снова 5 точек как есть, снова 2 точки в 1 слепленные. Получится 50 точек более-менее равномерно размазаны по графику. Конечно линейность представления результата пострадает, но если это не принципиально - гораздо менее затратно по ресурсам чем ресамплинг. Кстати если при слеплении мин-макс использовать, все мин и макс остаются на графике

Это понятно, но мне нужен общий принцип, мне не только 350 точек нужно отобразить, а например 3323, 561, 305... в общем любое кратное и не кратное 300мстам точкам экрана
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:43
Рейтинг@Mail.ru


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