реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> два сигнала разного разрешения объединить в один
Golikov A.
сообщение May 28 2015, 08:29
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



надо лазером моделировать ПСП, и потом интегратором получать сдвиг фазы, будет точнее и правильнее...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 28 2015, 08:54
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Вот это псп Можно и такой способ использовать, только вычисление будет занимать наверно секунду..
попробую потом. Сейчас хотелось бы запустить то что уже работает и испытать что получится. На картинке те сигналы которые приходят они уже измерены и находятся в трех регистрах )) в один регистр их нужно поместить.
Пробовал к 100м прибавлять измеренную разницу между 100м и 5м и поделить 20. что то не то считаю.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение May 28 2015, 09:15
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



надо взять расстояние по 100 метровому X
и по 5 метровому Y

и посчитать X - X%5 + Y, а лучше X - X%5 + (Y + X%5)/2, так поглаже будет...


Цитата
Вот это псп Можно и такой способ использовать, только вычисление будет занимать наверно секунду..

Почему? оно будет непрерывно давать значение, прям каждый такт... Да время выхода на режим будет какое-то, но секунда - это много...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 28 2015, 09:23
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Сейчас попробую, есть еще третий он с смещением получается и это смещение растет с увеличением расстояния . Если 5м проходит каждый раз от 0 до максимума всегда одинаково то третий(100-5) сдвигает этот переход с увеличением расстояния. его тоже как то можно добавить для повышения точности.
С псп в будущем попробую разобраться.
Здесь тоже стабильно получилось, если использовать внешний фапч , результат будет лучше.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение May 30 2015, 18:38
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Изменил схему для 10м и 100м дистанции, так точнее. по вашей формуле работает, но есть в момент перехода 360-0гр небольшой скачок (зеленная линия).
10м и 100м это условно. Сильно зависит от частоты pll. например 10м или 5м туда обратно, реально получается 7,4 или по 3,7м. туда обратно. Основная цель сейчас сделать переменную которая будет иметь пропорциональную зависимость от расстояния. А расстояние потом можно будет привязать калибровкой.
Наверно буду вычислять зависимость двух переменных. Мысль такая: устанавливаю объект нажимаю кнопку, передвигаю на 2м и снова нажимаю кнопку. Когда нажимаю вторую кнопку рассчитается множитель.
Цитата
uint32t tempA10,tempA100;
float mulA;
if(button1)
{
tempA10 = A10;
tempA100=A100;

}else if(button2){

mulA = (A10 - tempA10)/(A100 - tempA100);
}

а потом вот так, как вы порекомендовали.
DBRAM.StructurData.reservuint32[3]% только вместо 10 использовать mulA.
Если еще есть мысли у кого, как еще можно сделать скажите плз.

По вашей формуле, только рассчитываю в мк.
Код
//DBRAM.StructurData.reservuint32[3] 100м // DBRAM.StructurData.reservuint32[1] 10м
DBRAM.StructurData.reservfloat[1] = (float) ((DBRAM.StructurData.reservuint32[3]*10) - (DBRAM.StructurData.reservuint32[3]*10) %10)+(DBRAM.StructurData.reservuint32[3]%10 + DBRAM.StructurData.reservuint32[1])/2;

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 1 2015, 05:56
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Вопрос слабо связан с плис. Изначально хотел сделать измерение в плис. Но порекомендовали все вычисления делать в мк. Теперь тоже так считаю. спасибо за то то что указали правильный путь )). Вопрос еще полностью не решен, а создавать похожие темы не хочется.Осталась математическая часть, как реализовать это объединение сигналов с разным разрешением. С усреднением как порекомендовали выше работает только как видно на тренде есть перепад в момент перехода (зеленая линия) выше не указал ссори. Синий сигнал младший, красный старший они на тренде от 0 до 10 000 а зеленый рассчитан усреднением и он от 0 до 100 000 меняется.
Сейчас еще одна мысль возникла если использовать калибровку. Например в процессе калибровки передвинуть мишень от самого близкого до максимального расстояния и запомнить все значения старшего в моменты перехода младшего через 0/360градусов. Потом в процессе движения мишени младшее значение умножать на коэффициент который зависит от номера запомненной точки старшего около которого находится фактическое измеренное значение. Но будет один момент когда фактическое значение почти одинаково с запомненной точкой может быть перескок коэффициента.
PS Ошибок в железе нет работает правильно, весь вопрос как правильнее соединить два сигнала с разным разрешением без снижения точности.
Благодарю за любую информацию.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 1 2015, 07:28
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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


то есть считать Z = K1(x) * x + k2 * y; z - расстояние, x - 10 метровый, y - 100 метровый. 100 - метров без скачка, его берем линейно
то есть получаем базис функций X, Y, X^2, тогда имеем

z = k1*x^2 + k2 *x + k3 * y + k4;

теперь проводить измерения, чем больше тем лучше, получаете тройки (Zi , Xi, Yi)

дальше метод наименьших квадратов

sum(zi - (k1*xi^2 + k2 *xi + k3 * yi + k4))^2 - сумма по всем i, чем больше точек тем лучше

минимизируем, то есть приравниваем производную 0, берете частные производные по коэффициентам и ровняете 0, сумма выродиться в систему уравнений, решив которую вы получите
K1, K2, K3, K4 - дальше измеряя X и Y и подставляя их в k1*x^2 + k2 *x + k3 * y + k4 вы будите получать значение расстояния.

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

как то так...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 1 2015, 07:43
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Благодарю сейчас обдумаю. По поводу расстояния они линейные, но схема позволяет генерировать разные сигналы от 5м до 500м дальше фотодиод не чувствует и полоса пропускания падает. Можно сделать например 5м и 75м или еще как то, но калибровать придется метры это условно.. если это как то может помочь в расчете.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 1 2015, 13:30
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Можно я еще поспрашиваю ))
Здесь измеряем. Коэффициенты пока ==1
Цитата
z = k1*x^2 + k2 *x + k3 * y + k4;
к примеру подвинули мишень 5 раз по 2м, взяли 5 точек.
поместили их в эти массивы Z[0-4] X[0-4] Y[0-4].
Цитата
дальше метод наименьших квадратов
sum(zi - (k1*xi^2 + k2 *xi + k3 * yi + k4))^2

Код
uint32 summ = 0;
for(int i = 0; i< 5; i++)
{
summ = pow (z[i] - (k1*pow(x[i],2) + k2 *x[i] + k3 * y[i] + k4),2); // всегда будет равен нулю?
}



Цитата
K1, K2, K3, K4 - дальше измеряя X и Y и подставляя их в k1*x^2 + k2 *x + k3 * y + k4 вы будите получать значение расстояния.

K1 K2 K3 K4 вычисляются один раз при калибровке ?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 1 2015, 18:28
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Да вы решаете задачу, найти такие к1, к2, и т.д
При которых вычисленное значение х*х*к1 + х*к2 и т.д (пишу с телефона одним пальцем, дико не удобно) так вот это значение должно максимально близко ложиться к измеренному

Во время калибровки вы не знаете чемумравны к1, к2... Потому сумма не может быть равной нулю. Более того всегда есть погрешность съема данных, потому опять сумма не будет ноль, мы стримим значение суммы к минимому. Для нахождения экстремума производную ровняем нулю. У нас 4 коэффициента, потому берем 4 частные производные и получаем 4 уравнения системы

Коэффициенты нельзя ничемуиравнять для начала.
Вы снимаете только показания ставите z измеряете x, y
Много раз в разных местах, чем плотнее помериете тем лучше пойдет.
А потом получаете большую сумму квадратов отклонения с неизвестными коэффициентами. Возьмите частные производные в общем виде, там сразу видна закономерность, я не готов с телефона ее описать)

Это обобщенный ряд, кажеться лагранжа, уже стал забывать. Метод дико удобный когда есть многомерные измерения. Температура и вольтаж, показания по 2 датчикам и так далее. Сложность одна, система что получиться плохообусловленная, и решать ее в лоб не выйдет. Метод ньютона, только с выбором главеого элемента, а лучше псевдоинверсией. Я в свое время взял решение из матлаба, pinv очень удобно даете матрицу, получаете такую, умножив на которую матрица уйдет в 1 с минимальеой нормой. Фактически это итеррационное обращение матрицы, в 1 шаг получаете решение
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 1 2015, 18:36
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Благодарю вас. попробую в матлабе изобразить для начала, напишу что получиться.
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 7 2015, 17:39
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Пробовал, для вычисления нужно много точек >10. После всех усреднений в плиз максимум что получается передавать в контроллер 10-15 гц. Сделал совсем просто но результат правильный, проверил рулеткой +-5мм.
Подсчитываю так :
Код
//------------------------------------------------------------------------------------//
void getdistancefrommeter(void){
    uint32_t low1temp,low2temp,hight1temp,hight2temp;
    float calculatehight;

    spi_upd_data(datafromfpga,datatofpga,FPGABUFSIZE);

    low1temp = (((256*datafromfpga[1])+datafromfpga[2])&0xffff);  //mixer 1
    low2temp = (((256*datafromfpga[4])+datafromfpga[5])&0xffff);  //mixer 2
    DistenceCounterStruct.DistanceLow = (low1temp+low2temp)/2;

    hight1temp = (((256*datafromfpga[7])+datafromfpga[8])&0xffff);
    hight2temp = (((256*datafromfpga[10])+datafromfpga[11])&0xffff);
    DistenceCounterStruct.DistanceHight = (hight1temp+hight2temp)/2;

    DistenceCounterStruct.TimeGetVal = SYS_GetTick();//for calculate velos.

    if(DistenceCounterStruct.DistanceHight < POINT_5M){
        calculatehight = 0.5 * DistenceCounterStruct.DistanceLow;

    }else if((DistenceCounterStruct.DistanceHight > POINT_5M)&&(DistenceCounterStruct.DistanceHight < (POINT_5M+POINT_DELTA) )){
        calculatehight = 3.28 * DistenceCounterStruct.DistanceHight * 0.5;


    }else if((DistenceCounterStruct.DistanceHight >= (POINT_5M+POINT_DELTA)&&(DistenceCounterStruct.DistanceHight<POINT_10M))){
        calculatehight = 0.5 * DistenceCounterStruct.DistanceLow + 5000.0;

    }

    DistenceCounterStruct.Distance_mm = calculatehight;

}
//------------------------------------------------------------------------------------//

Не очень удобно нужно точки вносить, и вместе перехода 360-0 градусов точность меньше. Что можно еще сделать?
Результат
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jun 7 2015, 18:28
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Пробовал, для вычисления нужно много точек >10

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




можно сделать мертвые зоны в районе перехода 5 метрового через 0. По 100 метровому оценивать где находитесь, если далеко от перехода брать данные от 5 метрового, если близко то оставлять 100 метровые... то есть что-то типа того можно попробовать...
Go to the top of the page
 
+Quote Post
sergey sva
сообщение Jun 7 2015, 18:45
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Так сделал выше код. Точки вносить для каждого перехода придется это десять точек измерить и внести как то неудобно. И точность в мертвых зонах будет меньше. Метод работает, но не нравится ((
Сделать бы как уравнение которое само вычисляла коэффициенты.
Go to the top of the page
 
+Quote Post
krux
сообщение Jun 7 2015, 20:13
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



мне одному кажется, что у вас слишком жирная мертвая зона, чтобы получать достоверные результаты по формулам, не обращая внимания на корректность исходных сигналов?


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


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 18:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01488 секунд с 7
ELECTRONIX ©2004-2016