2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 11:37 
При калибровке получен ряд точек:
X 0 x1 x2 x3
Y 0 1000 3000 15000.....
Надо по измеренному значению X определить Y. Характеристика довольно линейна, но точности при кусочно-линейной интерполяции недостаточно. Раньше калибровочные точки( по Y) были равномерны и с кусочно-квадратичной интерполяцией не было проблем. Использовал такой алгоритм:
Сначала считается добавка типа
$$dx=(X-X_i)/(X_{i+1}-X_i)$$
$$ddX=(X_{i+2}-X_{i+1})-(X_{i+1}-X_i)$$
$$deltaX=(dx-dx^2)ddX/4 $$
Добавляется deltaX к X и считается линейная интерполяция.
Расход памяти минимальный: хранились 16(иногда 8) битные вторые разности(ddx), расчет добавки и интерполяция тоже 16битная, размер дополнительной памяти переменных минимален. Хотя окончательный результат - 32битный. Легко отключить расчет добавки и получить линейную интерполяцию.

Для неравномерной расстановки точек никак не могу получить подобный вариант!

 
 
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 13:20 
Первое впечатление - непонятно ничего. Начиная с того, что у вас аргумент, а что функция. Если Y(x), тогда как понимать
Цитата:
калибровочные точки( по Y) были равномерны
Далее, непонятно, зачем хранить в памяти что-то ещё кроме исходной таблицы аргументов-значений? Что, вторые разности и все остальное нельзя посчитать в процессе получения значения? Или надо максимизировать скорость? Тогда вообще проще заранее для каждого интервала рассчитать свои 3 коэффициента параболы (или многочлена большей степени), хранить не таблицу а эти коэффициенты и по ним сразу рассчитывать значение внутри любого интервала.

 
 
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 13:59 
_Ivana в сообщении #713119 писал(а):
Первое впечатление - непонятно ничего.

- Это весы, т.е в режиме калибровки поставили 1кг, запомнили показания АЦП или частоты, поставили 2кг,... В рабочем режиме считали значение - определяем массу.
- Критична память данных, а не время выполнения, поэтому хранятся только первая точка (x1) и вторые разности меньшей разрядности, по ним восстанавливается все остальное. Причем память под переменные сильно ограничена и при расчете. Кроме того, хранение разностей позволяло изменять только первую точку при изменении наклона характеристики, которое могло быть от времени или от переезда в другое место( изменилась гравитация - изменился вес).
- Сначала была сделана просто линейная интерполяция, потом, при увеличении точности, прилеплена такая добавка и все устраивало почти 15 лет. Но, как обычно, внезапно надо постараться переделать под переменный шаг калибровки, а память данных(256 байт) под завязку набита и ничего простого не получается и не гуглится.

 
 
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 22:09 
Уже понятнее, хотя детали вы знаете точнее - например, зачем вводится калибровка переменным шагом (для увеличения точности в диапазоне наиболее частых весов?), и т.д. Предложу следующие общие подходы, в порядке убывания личного предпочтения:
1) расширить аппаратные возможности: заменить контроллер, влепить внешнюю ОЗУ и т.п. И не делать из.... запорожца старше 15 лет конфетку.
2) придумать компромисс - например, калибровка тензодатчика осуществляется с каким угодно шагом и сколько угодно точек, но эти данные отправляются на комп, где серьезно интерполируются, и на их основе получаем данные калибровки с постоянным шагом веса, что и шьем в контроллер.
3) выжимать последние капли из того, что есть. Может можно часть данных хранить во флеш памяти, и прошивать туда часть таблицы калибровки. Может можно еще как уменьшить объем хранимой информации, сжать без потерь, или еще что выдумывать творческое - но надо знать всю задачу в деталях, чем можем поступиться ради чего и т.п.

 
 
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение23.04.2013, 00:08 
Ваша задача понятна, стало интересно, подумаю на досуге. Пока одно банальное соображение: сменить микроконтроллер нельзя? :).
И еще вопрос - что действительно нужна такая огромная точность для весов (32 бит) - это для дальнейших расчетов удобнее? Ведь с АЦП вы реально получите максимум 16 значащих разрядов, и то это очень специальные АЦП, а классика - 8/10 бит, нет?

 
 
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение24.04.2013, 17:03 
e2e4 в сообщении #714339 писал(а):
Пока одно банальное соображение: сменить микроконтроллер нельзя? :).
И еще вопрос - что действительно нужна такая огромная точность для весов (32 бит)

- Для простых решений не надо обращаться на форум...
- Весы многодиапазонные, с переключением дискретности. На больших весах точность сильно снижена, но по диапазонам считать крайне неудобно. АЦП 24битное, но значащих 15..16 разрядов. С учетом усреднения, запаса на стабильность результатов, смещения нуля и всякой обработки и надо 17..19 разрядов. Да и у другого типа датчика смещение нуля много больше диапазона. На ассемблере делал 24битную обработку, хватало с запасом, но на сях нет стандартных 24 бит. Вроде чуток не хватает, но при разделении на диапазоны на границах тяжко обрабатывать всякие фильтрации, тару, да и бит знака еще..

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group