Jump to content

    

Brains

Участник
  • Content Count

    8
  • Joined

  • Last visited

Community Reputation

0 Обычный
  1. Спасибо всем участникам обсуждения темы! В обсуждении появлялись фразы о том, что нужно закладываться на случаи разбега фазы по всем квадрантам, или погрешности измерения в 1 градус. Для того, чтобы прояснить детали задачи, я нарисовал две картинки, объясняющие процесс: Джиттер в 1 градус был указан мною только для примера. На самом деле достигается погрешность 0,1 градуса. Но дело не в этом: какой бы мизерной ни была бы погрешность, всегда в случайном процессе (шум) возникнут условия "гонки". Особая благодарность GetSmart! Ваш метод буду пробовать "в железе".
  2. Про это понял. А эту фразу нет. Вы имеете ввиду, что после каждого прибавления (и увеличения n на единицу) в аккумуляторе должно быть число не больше чем 360*n ? Этого, к сожалению, достичь нельзя, нет ресурсов для деления на любое число, а потому рассчитываю n как степень двойки, подбираю разрядность аккума для худшего случая, и после накопления 2^n отсчетов делю аккум сдвигами.
  3. Но, насколько я понимаю, это преобразование задействует тригонометрические функции, а они выполняются долго. GetSmart, спасибо, я попробую этот метод. Если переложить в псевдокод получится: if(|Xn - Xn-1| < |Xn - 360 - Xn-1|) Acc += Xn - 360; else Acc += Xn; Xn-1 = Xn; Понятно стало, что кроме аккумулятора и счетчика накопления потребуется еще переменная предыдущего отчета Xn-1, необходимая для предложенного вами кастинга. Но еще не понял как тогда ее инициализировать.
  4. GetSmart, извините, не уловил смысл того что нужно сделать. Можете пояснить на примере: что нужно сделать с цифрами, если сначала приходит значение 1, затем 359, чтобы получить результат 0?
  5. Доброго дня, форумчане! У меня есть периодическая величина, значение которой нужно усреднить средним арифметическим (X1+X2+..+Хn)/n - в простейшем случае (Х1+Х2)/2. Величина - это угол сдвига фаз, меняющийся от 0 до 359 градусов. Измерение ведется путем захвата таймером интервала времени между фронтами прямоугольных импульсов. При условии синфазности сигналов (должно измеряться значение 0 градусов), появляется неразрешимая пока мною проблема: из-за джиттера, являющегося следствием шума на входе, начинается гонка фронтов сигналов, при этом я получаю захваченные таймером интервалы, соответствующие углу в градусах, к примеру в такой последовательности: 1, 359, 1, 359.... Если попытаться усреднить эту последовательность, то получится значение 180 градусов, вместо ожидаемого нуля. Вариант перехода к формату -180->0->+180 уже рассматривался, и он имеет такую же проблему при усреднении, возникающую в окрестностях 180 градусов (-179,+179 после усреднения дает 0 вместо 180). Алгоритм нужен для целочисленного МК, желательно простой арифметическо-логический. Какие есть варианты решения этой проблемы?
  6. Если не сложно, можете и мне повторить в почту? :rolleyes: