Jump to content
    

коррекция корявого sin/cos энкодера, самокалибровка

Пусть у вас искомые массивы из n точек
\(f_i, i=1,...,n\)
\(g_i, i=1,...,n\)

Пусть сдвиг d, и сами измеренные значения
с несдвинутого сенсора \(a_i, i=1,...,n\)
со сдвинутого сенсора \(b_i, i=1,...,n\)

Пусть f(x) - линейная интерполяция по \(f_i, i=1,...,n\), тогда

\( \displaystyle \min_{f,g} \sum_i ||f(g_i) - a_i||_2^2 + ||f(g_i + d) - b_i||_2^2 + \alpha \sum_i ||g_{i+1}-g_i-h||_2^2 \)

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

Чтобы решить такую минимизацию надо использовать покомпонентную минимизацию, то есть у вас есть три шага
1. фиксируем \(g_i\) и записываем формулы для наименьших квадратов по \(f_i\), они однозначно определяются и надо решить систему уравнений с трехдиагональной матри
цей методом прогонки,
2. фиксируем \(f_i\) и четные \(g_i\), и записываем формулы для наименьших квадратов по нечетным \(g_i\) - формулы с ифами, но простые и однозначные,
3. фиксируем \(f_i\) и нечетные \(g_i\), и записываем формулы для наименьших квадратов по четным \(g_i\) - формулы с ифами, но простые и однозначные.

Повторяем эти три шага попеременно до наступления сходимости.

Метод будет сходиться, если между любыми \(f_i\) и \(f_{i+1}\) будет существенно меньше четверти периода.

 

EDIT: h - шаг сетки, можно положить единицей. Для первой итерации выбрать \(g_i=i\).

Share this post


Link to post
Share on other sites

я всё-таки математически туповат немного для честного решения наименьших квадратов в таком виде с линейной интерполяцией.

но смогу заставить mathematica сделать интерполяцию сплайнами \(S_a = S(a_i==f(g_i))\) и \(S_b=S(b_i==f(g_i+d))\), для ресэмплирования \(a_i\) в точках \(g_i + d\) и начать просто численно подкручивать потихоньку методом Ньютона все значения \(a_i\) и \(g_i\) при вычислении \(A_i=S_a(g_i+d)\) и \(B_i=S_b(g_i)\) (\(S_a\) каждый раз заново интерполировать из подкрученных \(a_i\)) так, чтобы минимизировать разницу \(A_i\) и \(B_i\), вроде бы то же самое получится только численно и небыстро.

Share this post


Link to post
Share on other sites

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

 

Не пугайтесь, наименьшие квадраты там простые, там реально формулы простые, просто длинные и занудные, иногда проще сразу в виде программы писать.

 

Итак, первый шаг. Фиксируем g. Значит, у нас есть набор координат для первого и второго набора, в которых надо фиттить нашу линейную интерполяцию. Что мы имеем:

по набору g выискиваем куда на какой отрезок в линейной интерполяции для \(a\) по f мы попали (пусть это был отрезок \( (f_i, f_{i+1})\) ), и с соответствующим коэффициентом аппроксимируем эти \( f_i \) и \( f_{i+1} \) и записываем матричные коэффициенты и правую часть. Теперь то же самое для \( b \). Да, тут матрица может слегка расползтись из трехдиагональной, но, то, что она все равно останется положительно определенной - это факт, то есть всяко ее решать не сложно.

Далее.

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

 

Наверное непонятно написал..., если так, то постараюсь выложить на днях код.

Share this post


Link to post
Share on other sites

16 часов назад, _pv сказал:

от точности измерений зависит

Теперь понятнее, т.е. если точки две, тогда вроде как точность вычисления частоты ограничена с/ш измерения амплитуды, как в соседей теме про определение частоты.

А сколько выборок на период (между датчиками), если достаточно и есть возможность измерять скорость, то можно считать расстояние между датчиками за эталон и проити по линейке при этом считая корреляцию между датчиками и тем самым откалибровать линейку?

Share this post


Link to post
Share on other sites

13 hours ago, iiv said:

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

Наверное непонятно написал...,

по этим граблям надо пройтись самому 🙂

а так впринципе понятно.

 

6 hours ago, vervs said:

А сколько выборок на период (между датчиками), если достаточно и есть возможность измерять скорость, то можно считать расстояние между датчиками за эталон и проити по линейке при этом считая корреляцию между датчиками и тем самым откалибровать линейку?

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

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

Share this post


Link to post
Share on other sites

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

Enc Acc reni.png

A2_Circulo_encoder_angle_errors2.png

Share this post


Link to post
Share on other sites

Физический принцип датчика не озвучен, может задача решится его модулированием.

Share this post


Link to post
Share on other sites

2 hours ago, khach said:

Только ральные ошибки энкодеров  без всякой математики обрабатываются, по таблицам. 

вопрос собственно про построение этой таблицы (только энкодер линейный, "многооборотный") используя только известное откалиброванное расстояние между датчиками (то что Pi/4) по самим измерениям, без возможности прицепить дополнительный референсный измеритель положения снаружи.

1 hour ago, Plain said:

Физический принцип датчика не озвучен, может задача решится его модулированием.

пусть будет магнитный

а можно по-подробнее что именно надо модулировать?

Share this post


Link to post
Share on other sites

7 минут назад, _pv сказал:

что именно надо модулировать?

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...