2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 11:37 


20/04/13
3
При калибровке получен ряд точек:
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 


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

 Профиль  
                  
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 13:59 


20/04/13
3
_Ivana в сообщении #713119 писал(а):
Первое впечатление - непонятно ничего.

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

 Профиль  
                  
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение20.04.2013, 22:09 


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

 Профиль  
                  
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение23.04.2013, 00:08 


21/03/06
1545
Москва
Ваша задача понятна, стало интересно, подумаю на досуге. Пока одно банальное соображение: сменить микроконтроллер нельзя? :).
И еще вопрос - что действительно нужна такая огромная точность для весов (32 бит) - это для дальнейших расчетов удобнее? Ведь с АЦП вы реально получите максимум 16 значащих разрядов, и то это очень специальные АЦП, а классика - 8/10 бит, нет?

 Профиль  
                  
 
 Re: Кусочно-квадратичная интерполяция c минимумом памяти
Сообщение24.04.2013, 17:03 


20/04/13
3
e2e4 в сообщении #714339 писал(а):
Пока одно банальное соображение: сменить микроконтроллер нельзя? :).
И еще вопрос - что действительно нужна такая огромная точность для весов (32 бит)

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group