|
два сигнала разного разрешения объединить в один |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
May 12 2015, 19:29
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
никто не мешает домножить все на 16, а потом разделить. и тогда надо вычислять уже не 0.4 и 0.6, а 7 и 9, хотите больше знаков после запятой домножайте на 32, после получения результата его надо просто сдвинуть чтобы вернуть правильный порядок. Стандартные вычисления с фиксированной точкой.
Если бы я делал, я бы составил бюджет точности. То есть скорее всего я бы диапазон 5-100 мерил бы по одному датчику, а 0-5 по другому. Потому что обычно датчик с меньшим диапазоном точнее, но в своем диапазоне.
Если же точность 5 метрового не страдает, и вопрос только зацикленности, то я бы по датчику 100 определял бы только номер пятерки, а измерения опять же базировал на 5 метровом.
Вариант с суммой показаний с весом - я бы считал самым экзотическим, и пошел бы по нему если варианты выше не дали бы удовлетворительных результатов.
И я не знаю какая у вас там нагрузка на процессор и ПЛИС, но считать иногда реально удобнее в процессоре. То есть можно в ПЛИС сделать сбор показаний датчика 100 и датчика 5, можно с какой-то примитивной фильтрацией, дальше эти 2 числа передавать в процессор, а ему останется сделать минимум операций, все можно свести к целочисленным без деления.
|
|
|
|
|
May 26 2015, 16:59
|
Гуру
     
Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923

|
Исправил фазы от которых происходит захват. код захвата фронтов такой: Может что потправить? Еще мысль пришла если производить захват не в каждом периоде а через два например. По фронту первого сигнала запускать счетчик а вторым фронтом второго сигнала останавливать разрешение будет больше? Еще по поводу объединения если не вычислять а сделать таблицу с значениями в озу на 100к а адрес брать из этих двух значений, так правильнее будет? Код //----------------------------------------------------------------------// always @(posedge CLCK ) begin if (RESET) begin phasedetect <= 1'b0; casetrig <= 3'd0; end else begin //phasedetect <= in1^in2; case(casetrig) 3'd0: begin if(in1)begin phasedetect <= 1'b1; if(in2)begin casetrig <= 3'd1; end else begin casetrig <= 3'd2; end end end 3'd1: begin if(in2==0)begin casetrig <= 3'd2; end end 3'd2: begin if(in2)begin phasedetect <= 1'b0; casetrig <= 3'd3; end end 3'd3: begin if(in1==0)begin casetrig <= 3'd0; end end default: begin phasedetect <= 1'b0; casetrig <= 3'd0; end endcase
end//reset end//always //----------------------------------------------------------------------//
|
|
|
|
|
May 28 2015, 07:36
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
это звуковые датчики? То есть там передатчик и приемник? Откуда вы взяли методику измерения? Что-то мне кажется у вас оно вообще не правильно сделано... Кто набег фазы измеряет разницей времени регистрации фронта? надо перемножить сигналы cos(a)*cos(a+fi) = 1/2(cos(2a + fi) + cos(fi)) дальше вы отфильтровываете 2 частоту, и получаете 1/2*cos(fi), ну а дальше получаете значение fi. можно сделать фазовую подстройку через PID, то есть берете ваш cos(a) и возвратный cos(a+fi) и формируете еще один сигнал cos(a + fi1), а fi1 подбираете в PID регуляторе чтобы фазы не расходились. Эти методы значительно более точные, чем ваши +- лапоть. И многие ваши метания отпадут сами собой, когда сделаете правильно.... А в случае звуковых датчиков, сдвиг фазы никто вообще не меряют. Измеряют время между запросом и ответом алгоритм 1. включаем передатчик 2. фиксируем ответ на приемнике (если ответа нет, то расстояние больше рабочего) 3. выключаем передачик, и сразу запускаем счетчик времени 4. ждем когда пропадает ответ на приемнике, фиксируем время. дальше из времени и скорости звука, с коррекцией на влажность и температуру (если очень хочется) получается расстояние.... Изобретать велосипеды хорошо, но и на чужие смотреть тоже иногда надо
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|