iiv 27 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба Пусть у вас искомые массивы из 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\). 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 75 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба я всё-таки математически туповат немного для честного решения наименьших квадратов в таком виде с линейной интерполяцией. но смогу заставить 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\), вроде бы то же самое получится только численно и небыстро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 27 15 февраля, 2023 Опубликовано 15 февраля, 2023 · Жалоба Не, ресемплинг по исходным данным пойдет юзом, нельзя так. Ньютон сядет в локальный минимум сразу и навека, если нет Тихонова!!! Я сам много раз велся на то, что так должно работать и ни разу не получилось. Но с Ньютоном всяко оно будет веками сходиться даже с Тихоновским регуляризатором, ибо у задачи на границах участков особенности и они очень плохо сходятся Ньютоном. Не пугайтесь, наименьшие квадраты там простые, там реально формулы простые, просто длинные и занудные, иногда проще сразу в виде программы писать. Итак, первый шаг. Фиксируем g. Значит, у нас есть набор координат для первого и второго набора, в которых надо фиттить нашу линейную интерполяцию. Что мы имеем: по набору g выискиваем куда на какой отрезок в линейной интерполяции для \(a\) по f мы попали (пусть это был отрезок \( (f_i, f_{i+1})\) ), и с соответствующим коэффициентом аппроксимируем эти \( f_i \) и \( f_{i+1} \) и записываем матричные коэффициенты и правую часть. Теперь то же самое для \( b \). Да, тут матрица может слегка расползтись из трехдиагональной, но, то, что она все равно останется положительно определенной - это факт, то есть всяко ее решать не сложно. Далее. Фиксируем f, и четные g. То, что в члене у Тихоновской регуляризации - вроде все просто - берете производную и вуаля, на диагонали стоит альфа, а правая часть только от соседей зависит. Вот с основной частью - немного сложнее. Пишем явно аппроксимацию g - и она требует поиска в какой сегмент мы попали и от этого с каким наклоном у нас f получается, но снова только на диагонали что-то вылазит и в правой части. Наверное непонятно написал..., если так, то постараюсь выложить на днях код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vervs 31 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба 16 часов назад, _pv сказал: от точности измерений зависит Теперь понятнее, т.е. если точки две, тогда вроде как точность вычисления частоты ограничена с/ш измерения амплитуды, как в соседей теме про определение частоты. А сколько выборок на период (между датчиками), если достаточно и есть возможность измерять скорость, то можно считать расстояние между датчиками за эталон и проити по линейке при этом считая корреляцию между датчиками и тем самым откалибровать линейку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 75 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба 13 hours ago, iiv said: Не, ресемплинг по исходным данным пойдет юзом, нельзя так. Ньютон сядет в локальный минимум сразу и навека. Я сам много раз велся на то, что так должно работать и ни разу не получилось. Наверное непонятно написал..., по этим граблям надо пройтись самому 🙂 а так впринципе понятно. 6 hours ago, vervs said: А сколько выборок на период (между датчиками), если достаточно и есть возможность измерять скорость, то можно считать расстояние между датчиками за эталон и проити по линейке при этом считая корреляцию между датчиками и тем самым откалибровать линейку? для этой "калибровки" можно проехать очень медленно и точек на период сделать сколько угодно много. и не совсем корреляцию (так как это не просто сдвиг двух функций относительно друг друга на постоянное смещение, так как сами датчики при измерении едут тоже не равномерно, т.е. нужна некая "скользящая корреляция"), но да, идея именно в том чтобы самооткалибровать линейку без дополнительного абсолютного рефенса, используя только сэмплы с двух датчиков расстояние между которыми постоянно и точно известно, соответственно на корявость линейки и корявость их передвижения во время этой "калибровки" они в паре будут реагировать немного по разному. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 42 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба Только ральные ошибки энкодеров без всякой математики обрабатываются, по таблицам. Там никакая интерполяция не справится. То штрихи криво нарисовали, то цетральное отверстие диска смещено, то маски синуса- косинуса криво приклеили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 206 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба Физический принцип датчика не озвучен, может задача решится его модулированием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 75 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба 2 hours ago, khach said: Только ральные ошибки энкодеров без всякой математики обрабатываются, по таблицам. вопрос собственно про построение этой таблицы (только энкодер линейный, "многооборотный") используя только известное откалиброванное расстояние между датчиками (то что Pi/4) по самим измерениям, без возможности прицепить дополнительный референсный измеритель положения снаружи. 1 hour ago, Plain said: Физический принцип датчика не озвучен, может задача решится его модулированием. пусть будет магнитный а можно по-подробнее что именно надо модулировать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 206 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба 7 минут назад, _pv сказал: что именно надо модулировать? Вам надо определить источник погрешности системы, измерения с другим коэффициентом(и) датчика может позволить исключить его, как неизвестное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
НЕХ 6 16 февраля, 2023 Опубликовано 16 февраля, 2023 · Жалоба Эта задача похожа на "электронный кулачок" или ECAM servo driver. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться