Перейти к содержанию
    

Округление результатов измерения

Имеется N относительно точных измерений, скажем, в виде чисел с плавающей запятой. Необходимо "округлить" их (или, скажем, представить в виде чисел с фиксированной запятой). "Округление" надо произвести таким образом, чтобы относительное расположение результирующих точек изменилось как можно меньше. Абсолютная погрешность "окрyгления" роли не играет.

 

Например, возьмем 3 значения:

1.4

1.6

3.6

 

Обычное округление даст результат

1

2

4

 

Однако если я "округлю" 1.4 до 2, то результат будет

2

2

4

 

что гораздо точнее, поскольку "расстояние" между точками 1.4 и 1.6 равно всего 0.2, поэтомy их правильнее округлить до одного и того же значения 2, а не до 1 и 2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имеется N относительно точных измерений, скажем, в виде чисел с плавающей запятой. Необходимо "округлить" их (или, скажем, представить в виде чисел с фиксированной запятой). "Округление" надо произвести таким образом, чтобы относительное расположение результирующих точек изменилось как можно меньше. Абсолютная погрешность "окрегления" роли не играет.

 

Например, возьмем 3 значения:

1.4

1.6

3.6

 

Обычное округление даст результат

1

2

4

 

Однако если я "округлю" 1.4 до 2, то результат будет

2

2

4

 

что гораздо точнее, поскольку "расстояние" между точками 1.4 и 1.6 равно всего 0.2, поэтоме их правильнее округлить до одного и того же значения 2, а не до 1 и 2.

Не очень понятно, что Вы хотите получить...

Вот если к Вашему набору (или это последовательность?) добавить в начало(или в конец) еще 1.3, то что Вы желаете иметь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот если к Вашему набору (или это последовательность?) добавить в начало(или в конец) еще 1.3, то что Вы желаете иметь?

Тогда бы я "округлил" так

1.3 - 1

1.4 - 1

1.6 - 1

3.6 - 3

1.3 - 1

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имеется N относительно точных измерений, скажем, в виде чисел с плавающей запятой. Необходимо "округлить"

 

Округление выполняется по конечному массиву накопленных данных или является вариантом процедуры нелинейной фильтрации в реальном времени? От этих условий зависит насколько качество округления удовлетворяет Вашему правилу.

 

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

 

Если реч идет о нелинейной фильтрации - тут возможны варианты. Качество результата будет зависеть от размера скользящего окна, в котором выполняется округление. Известный аналог такой процедуры - медианная вильтрация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Округление выполняется по конечному массиву накопленных данных или является вариантом процедуры нелинейной фильтрации в реальном времени?

По конечному массиву накопленных данных.

 

Перебором трудно, точек может быть много.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Округление выполняется по конечному массиву накопленных данных или является вариантом процедуры нелинейной фильтрации в реальном времени?

По конечному массиву накопленных данных.

 

Перебором трудно, точек может быть много.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда бы я "округлил" так

1.3 - 1

1.4 - 1

1.6 - 1

3.6 - 3

1.3 - 1

А если такая последовательность задана:

1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 и так далее с увеличением на 0.1

До какого числа их нужно округлять?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если такая последовательность задана:

1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 и так далее с увеличением на 0.1

До какого числа их нужно округлять?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выгадывать удается если числа как-то коррелируют с сеткой, до которой их округляют.

Тут нужно определиться с терминами.

Изначально термин корреляция обозначаль количественную меру статистической связи между двумя случайными величинами. Далее, этим термином стали определять вообще любую связь двх любых понятий. В этом смысле любой набор чисел "коррелирует" с сеткой, до которой эти числа округляют, если задано единое правило округления.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Есть N выходов от устройства, способного генерировать произвольную последовательность цифровых сигналов (pattern генератор). Выходы соединены с нагрузками при помощи коаксиальных кабелей разной длины. Для компенсации разницы задержек распространения в кабелях на каждом выходе генератора стоит сдвиговый регистр - в качестве линии задержки. Сдвиговые регистры тактируется некой тактовой частотой, для определенности - с периодом 10 нс.

 

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

 

После того, как измерены времена задержки всех кабелей, необходимо выставить оптимальное время для каждой линии задержки таким образом, чтобы сигнал, одновременно поданный на все выходы ЛЗ, дошел бы до каждого приемника "одновременно". То есть, чтобы разница во времени между самым ранним и самым поздним дошедшим сигналом была минимальна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть, чтобы разница во времени между самым ранним и самым поздним дошедшим сигналом была минимальна.

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

 

Для каждого кабеля всего два варианта - если ni-число элеиментов при котором суммарная задержка в i-том кабеле меньше суммарной задержки медленного кабеля, а при ni+1 - больше суммарной задержки медленного кабеля, то выбирается такое ni или ni+1, которое меньше всего отличается от суммарной задержки медленного кабеля

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

"Настроить" задержку для каждого кабеля надо так, чтобы разность между макс и мин задержкой для всех кабелей была минимальна. Поэтому не получится брать за основу какой-то один кабель. Такой пример:

- самый длинный кабель 90 нс

- второй кабель 84 нс

- третий кабель 86 нс

 

Если настраивать задержки так, как Вы предлагаете:

- к длинному добавили 10 нс, в сумме 100 нс

- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс

- к третьему добавили 10 нс, в сумме 96 нс, разница с "длинным" 4 нс

Суммарная разница в группе 104 - 96 = 8 нс

 

Очевидно, что можно настроить лучше:

- к длинному добавили 10 нс, в сумме 100 нс

- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс

- к третьему добавили 20 нс, в сумме 106 нс, разница с "длинным" 6 нс

Суммарная разница в группе 106 - 100 = 6 нс, разброс получился на 2 нс меньше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В книжках по регрессионно-корреляционному анализу сие должно быть. Я копал бы в сторону мат. ожидания и среднеквадратического отклонения. Вся проблема правильно расставить веса. Если не получиться - вместо мат ождания можно поработать со средним геометрическим. Задача про треугольник наверняка классическая. Если меня не опередять - чуть разгружусь - попробую выдумать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

"Настроить" задержку для каждого кабеля надо так, чтобы разность между макс и мин задержкой для всех кабелей была минимальна. Поэтому не получится брать за основу какой-то один кабель. Такой пример:

- самый длинный кабель 90 нс

- второй кабель 84 нс

- третий кабель 86 нс

 

Если настраивать задержки так, как Вы предлагаете:

- к длинному добавили 10 нс, в сумме 100 нс

- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс

- к третьему добавили 10 нс, в сумме 96 нс, разница с "длинным" 4 нс

Суммарная разница в группе 104 - 96 = 8 нс

 

Очевидно, что можно настроить лучше:

- к длинному добавили 10 нс, в сумме 100 нс

- ко второму добавили 20 нс, в сумме 104 нс, разница с "длинным" 4 нс

- к третьему добавили 20 нс, в сумме 106 нс, разница с "длинным" 6 нс

Суммарная разница в группе 106 - 100 = 6 нс, разброс получился на 2 нс меньше.

Алгоритм.

1. Сначала все точки сводятся в интервал (X, X+10)

2. Находится левая крайняя. Сдвигается вправо на 10. Успех - повтор. Нет первого успеха - 3.

3. Находим правую крайнюю сдвигаем влево на 10. Успех - повтор. Нет успеха - выход.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Алгоритм.

1. Сначала все точки сводятся в интервал (X, X+10)

2. Находится левая крайняя. Сдвигается вправо на 10. Успех - повтор. Нет первого успеха - 3.

3. Находим правую крайнюю сдвигаем влево на 10. Успех - повтор. Нет успеха - выход.

Мне кажется, это не будет работать при определенных наборах. Например, возьмем такой набор:

1

1.1

9

9.1

Разница макс-мин 9.1-1=8.1 нс

 

Понятно, что оптимальный результат должен быть

11

11.1

9

9.1

Это даст разницу макс-мин всего в 2.1 нс

 

Если использовать Ваш алгоритм, то исходный набор не удастся привести к оптимальному, т.к. при сдвиге "левой крайней" точки 1 вправо на 10 получится "неуспех":

11

1.1

9

9.1

Получается макс-мин=11-1.1=9.9 нс, что хуже, чем исходные 8.1 нс

Если сдвинуть самую правую точку 9.1 влево на 10, то опять получится макс-мин=9.9 нс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...