2014 dxdy logo

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

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




На страницу 1, 2  След.
 
 Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 00:40 
Рискну спросить тут...
Имеется выходная характеристика фотодатчика (график 1), которая частично коррелируется с графиком идеального косинуса (2). Причём до 40 градусов, а потом различие становится весьма заметно.
Изображение
Применение известных ранее методов обработки сигнала, подразумевающих косинусоидальный выход, приводит к большим ошибкам за значением 40 градусов. Соответственно надо как-то привести характеристику к косинусу. Хотя бы до 60 градусов чтобы было похоже...
Выходную функцию я, в меру своих воспоминаний о 2 курсе, записал в виде:
$ U_{( a )} = K*cos( a ) + K*F_{( a )}. $
Где К - масштабный коэффициент, а - угол на источник излучения, $  F_{( a )} $ - искомая функция аппроксимации.
Перебить график 1 в таблицу я могу вручную (может можно как-то автоматом?), т.к. он есть только в графической форме. Но аппроксимировать вручную, ИМХО, изврат в настоящее время. Можно ли как-то заставить маткад/матлаб получить $  F_{( a )} $ исходя из двух графиков (косинуса и таблицы значений с опр. шагом)?

ПС. Имею матлаб 6,5 и 7, а также маткад 14.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 01:23 
manu в сообщении #320895 писал(а):
Перебить график 1 в таблицу я могу вручную (может можно как-то автоматом?), т.к. он есть только в графической форме.
Несколько лет назад пользовался для оцифровки программкой GetData: http://www.getdata.com.ru/ (там триальная лицензия на 21 день).

Предположим, найдёте Вы
$F_{(a)} = \dfrac {U_{(a)} - cos(a)} K$

(для этого никакой маткад/матлаб не нужен -- экселя за глаза хватит)

А дальше как $F_{(a)}$ будете использовать?

В такой постановке это вообще не задача аппроксимации; это задача оценки погрешности аппроксимации экспериментальных данных заранее заданной функцией (косинусом).

Вы, может быть, поподробнее свою проблему объясните?
(Тогда больше шансов будет что-нибудь полезное присоветовать).

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 02:41 
Гениальная программа! Оцифровал за 15 минут. Ещё 30 потратил на экспорт из-за кривых настроек проги и экселя, но в целом доволен как слон. Уже имею эксель файл с помянутым графиком! :lol: А то настроился его печатать и линейкой мерить... :oops:

Ексель, матлаб, маткад мне не важно :) Мне надо ехать. Просто пошарив по инету я пришёл к выводу, что нужен матлаб...

Задача прикладная. Есть датчики положения магнитного типа образца 60-х. Что то среднее между сельсинами и холлами. Имеют строго косинусоидальную зависимость выходного сигнала от угла. То есть, фактически, возвращают косинус угла, умноженный на некий масштабный коэффициент.
Есть буржуйские оптические датчики, которые ставятся взамен магнитных и стОят как самолёт.
И есть я, который делает аналог буржуйского датчика. Сама схемотехника проблем не вызывает, но датчик врёт. Как известно, освещённость площадки пропорциональна косинусу угла падения света и теоретически фотодатчик должен иметь выходной сигнал, пропорциональный косинусу угла на источник света. Практически имеем то, что под номером 1 на рисунке. Кстати я там ошибся - график 1 до 80 градусов, а косинус 2 до 90, то бишь не в масштабе получилось. Но не суть. Смысл отражает.
И вот график 1 надо привести к косинусу, чтобы мой датчик тоже выдавал косинус угла хотя бы в диапазоне +-60 градусов, а не этот косинусообразный график 1.
Как это лучше сделать?

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 09:03 
Ваш чёрненький график --- вполне приличный косинус, что-то вроде $A(1+\cos\omega t)$, т.е. приподнятый. А красная кривая (типа $2A\cos\omega' t$) --- не приподнятая. И не может моделировать приподнятый косинус.
Предлагаю МНК. Но предлагаю неуверенно, ибо в физику и прочие детали пока не вчитался.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 10:21 
До 40 он косинус. А потом начинаются ошибки на 8-12 градусов.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 11:31 
Другими словами, Вам надо подобрать такое преобразование данных, получаемых с Вашего датчика, чтобы на выходе получился косинус?

Тогда бы начал с того, что построил зависимость

$\cos(\alpha) = F(U(\alpha))$,

где $U(\alpha)$ -- Ваша выходная характеристика после нормировки на 1.

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

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 17:43 
Maslov в сообщении #320967 писал(а):
Другими словами, Вам надо подобрать такое преобразование данных, получаемых с Вашего датчика, чтобы на выходе получился косинус?

Так точно.

Maslov в сообщении #320967 писал(а):
Тогда бы начал с того, что построил зависимость

Чем это можно сделать? Автоматически. Или я чего-то не понял?...

Maslov в сообщении #320967 писал(а):
вот только с "подскоками" по краям надо будет как-то разобраться

Да не важно пока. Диапазон 60 градусов вполне устроит на данном этапе.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 18:23 
manu в сообщении #321123 писал(а):
Чем это можно сделать? Автоматически.
У Вас есть зависимость $U(\alpha)$, т. е. таблица, в первой колонке которой -- $\alpha$, а во второй -- $U(\alpha)$.

Дальше я бы взял половину этой таблицы, соответствующую одной ветке характеристики Вашего датчика, и пристроил к ней 3-ю колонку - $\cos \alpha$. Зависимость между значениями во втором и третьем столбцах таблицы -- это и есть та функцию, которую нам надо аппроксимировать.

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

У Вас аппроксимация где должна выполняться, прямо в приборе или снаружи?

-- Вт май 18, 2010 19:42:48 --

И ещё один момент.
Иногда не практике приходится снимать несколько кривых и их каким-то образом усреднять и/или тарировать каждый датчик индивидуально.
У Вас воспроизводимость выходной характеристики для одного датчика и от датчика к датчику хорошая?

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 22:25 
Maslov в сообщении #321147 писал(а):
это и есть та функцию, которую нам надо аппроксимировать.

А, ну так я себе это и представлял.
Таблица сейчас создана, но занимает много памяти. У меня всего 430 байт осталось, пришлось ужимать, записывая данные как прибавку к предыдущему значению. В итоге каждое значение влезло в 8 бит против 24. Благо косинус всегда больше выходного значения. Но разрешение получается фиговое - линейная аппроксимация между точками (шаг 1 градус) приводит к дёрганьям станка. Повышеный износ подшипников и т.д. Надо не только память сэкономить, но и сделать выходной сигнал плавным.

Maslov в сообщении #321147 писал(а):
У Вас аппроксимация где должна выполняться, прямо в приборе или снаружи?

Да, прям в МК. Входит значение в АЦП, выходит через ЦАП. На ЦАП инт. RC цепочка для сглаживания. Но, естественно, рывки таблицы она не сгладит, а если её увеличивать, то датчик начинает тормозить.

Maslov в сообщении #321147 писал(а):
Тут всё определяется зашумлённостью данных и требуемой точностью.

Шумов почти нет. Зависит от ситуации, но обычно не более 5% от величины сигнала.

Maslov в сообщении #321147 писал(а):
У Вас воспроизводимость выходной характеристики для одного датчика и от датчика к датчику хорошая?

Да.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение18.05.2010, 22:59 
manu в сообщении #321313 писал(а):
Но разрешение получается фиговое - линейная аппроксимация между точками (шаг 1 градус) приводит к дёрганьям станка.
А квадратичную интерполяцию или сплайны нет возможности впихнуть?

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение19.05.2010, 00:16 
Да можно попытаться, но я думал что будет проще каким-нибудь пакетом сгенерить функцию и огрубить до приемлемой точности.
Опять же, от таблицы в ПЗУ хочется избавиться.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение19.05.2010, 13:36 
Если приведете таблицу, можно попытаться подобрать функцию с помощью генетического программирования. Кроме таблицы нужен перечень разрешенных операций (сложение, умножение и т.д.), примерная допустимая погрешность и примерный допустимый размер формулы (в операндах, штук).

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение20.05.2010, 00:11 
Вот эксель со всеми графиками: http://narod.ru/disk/20937094000/FOV.zip.html (12 кБ).
Там выходная характеристика, косинус и их различие.
Ограничиться можно пределом в 70 градусов, чтобы с "подъёмами" не возиться.
Вычисления лучше ограничить арифметическими операциями (+-*/). На край корень и возведение в степень (хотя это равнозначно умножению). Тригонометрия и т.п. не имеют смысла - выигрыша в скорости не будет. Но если без них совсем никак, можно попытаться. Всё равно надо с чего-то начинать, а потом уже упрощать/удешевлять. Контроллеров сейчас много разных, в том числе и "числогрызов" DSP.
По числу операндов, насколько понимаю, получится нечто вроде ряда? А значит удалением элементов можно упрощать формулу за счёт потери точности, так? Ну так пусть будет большая, обрезать всегда можно.
Тут однозначно сказать трудно, сколько операндов. Надо конкретно у компилятора спрашивать, во сколько тактов он уложит эту формулу. И колдовать, сводя деления к сдвигам и т.п., можно, повышая производительность. Так что тут заранее не скажешь...
Погрешность в 5% устроит.

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение20.05.2010, 19:39 
manu в сообщении #321313 писал(а):
Но разрешение получается фиговое - линейная аппроксимация между точками (шаг 1 градус) приводит к дёрганьям станка.
Если по Вашим данным построить график зависимости $\cos(\alpha) = F(U(\alpha))$, то получается вполне себе гладкая кривая,
Изображение
и по картинке непохоже, что линейная интерполяция между узлами может привести к существенным погрешностям. У Вас точно именно линейная интерполяция используется, а не ступеньки?

 
 
 
 Re: Аппроксимация кривой. Как и чем? Желательно с помощью ПК.
Сообщение20.05.2010, 22:12 
Maslov в сообщении #321982 писал(а):
Если по Вашим данным построить график зависимости , то получается вполне себе гладкая кривая,

Простите за глупый вопрос (весь день в отладке), но что эта кривая означает с практической точки зрения?..

Maslov в сообщении #321982 писал(а):
У Вас точно именно линейная интерполяция используется, а не ступеньки?

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

 
 
 [ Сообщений: 28 ]  На страницу 1, 2  След.


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