Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Восстановление угла вектора по проекциям
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
RHnd
Добрый день!

Есть некоторый вращающийся вектор с амплитудой A и фазой f: A*exp(f*i). Мне поступают измерения его проекций, т.е. x=Acos(f) и y=Asin(f), нужно по этим измерениям восстановить угол f. Так как измерения могут быть немного зашумленные, да и по другим причинам, нахождение в лоб арктангенса не приветствуется, хочется использовать некоторый динамический фильтр-наблюдатель. Нашел наводку, что для решения этой задачи на практике часто используется Phased Locked Loop, но беглый поиск не привел к конкретным схемам/формулам, хотя, по ощущениям, это должно быть что-то очень стандартное. Не хочется самому изобретать велосипед, может кто-то подскажет решение?
Mc_off
Можно решить с помощью 2-х таблиц и, если надо, фильтра. В таблицах хранить значения угла, соответствующие отношению x/y и y/x (т.к. есть проблемы с арктангенсом 90 град.)...

А насчет PLL... Делаете генератор, управляемый сигналом ошибки с фазового детектора, на один вход которого измеряемый сигнал, а на другой сам генератор. Сигнал ошибки фазового детектора фильтруют. Вот посмотрите: http://www.dsplib.ru/content/dpll/dpll.html
Но для получения значения именно угла, вам всё равно придется считать арктангенс.
Dr.Alex
Цитата(RHnd @ Jan 16 2015, 12:30) *
для решения этой задачи на практике часто используется Phased Locked Loop


Понятие PLL ничего конкретного не означает. Обычно PLL+VCO это аналоговая схема, эмулировать же её в цифре глупо, поскольку в конечном итоге она представляет собой некий фильтр.
Правильнее сразу и делать фильтр традиционными методами.
А какой — целиком и полностью зависит от двух факторов::
- статистики искажений фильтруемого сигнала
- выбранного критерия оценки результата
Fat Robot
1. Чтобы из проекций получить угол, так или иначе придется выполнять операцию арктангенс или арксинус. Что с PLL, что без.

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


Цитата(RHnd @ Jan 16 2015, 09:30) *
serjj
Еще, если есть какие либо априорные знания о характере фазы на выходе алгоритма, можно сделать фильтрацию и после арктангенса. Например: известно, что у исходного сигнала присутствует постойнный линейный набег фазы, следовательно из зашумлённой фазы можно найти линию наклона методом наименьших квадратов. Или, как в случае ФМ/ЧМ фаза переносит полезный сигнал, полоса которого как правило меньше полосы входного x/y сигнала. Тогда, поставив дополнительный ФНЧ после вычисления фазы, можно уменьшить влияние шума.
Fat Robot
Это хороший юмор, ага.
в качестве упражения для метода наименьших квадратов:
Диапазоном допустимых значений фазы -pi..pi
I(t) = -1 + wgn(t)
Q(t) = 0 + wgn(t)
т.е. фаза колышется около pi.

Цитата(serjj @ Jan 16 2015, 13:37) *
Еще, если есть какие либо априорные знания о характере фазы на выходе алгоритма, можно сделать фильтрацию и после арктангенса. Например: известно, что у исходного сигнала присутствует постойнный линейный набег фазы, следовательно из зашумлённой фазы можно найти линию наклона методом наименьших квадратов. Или, как в случае ФМ/ЧМ фаза переносит полезный сигнал, полоса которого как правило меньше полосы входного x/y сигнала. Тогда, поставив дополнительный ФНЧ после вычисления фазы, можно уменьшить влияние шума.
RHnd
Спасибо за ответы! Но, к сожалению, это не совсем то, что я ищу. Давайте на момент забудем про шумы измерений и предположим, что доступны измерению честные x и y. Как можно восстановить угол, не прибегая к алгебраической или табличной процедуре нахождения арктангенса? Мне представляется, что можно построить некоторую следящую систему, которая будет минимизировать вектор разности между поступающим вектором и его оценкой. Детали, я еще не прорабатывал и не знаю, получится ли.
stealth-coder
Ключевой вопрос - а зачем отказываться от использования алгебры или таблицы?
Поставьте ПРОБЛЕМУ, тогда есть шанс услышать от кого-нибудь подходящее решение.
Например: ресурсов вот столько, как вычислить фазу?
Возможно, что Вы и сами не знаете в чем собственно ПРОБЛЕМА, поэтому и не можете найти решение.
RHnd
Прикинул немного. Амплитуда нам не важна, она легко оценивается. Так что для простоты предположим, что амплитуда равна единице. Итак, путь x_0 и y_0 - измеряемые величины. Пусть phi_1 - оценка угла. Тогда сформируем x_1=cos(phi_1) и y_1=sin(phi_1). Повернем измеряемый вектор на pi/2 и найдем скалярное произведение повернутого вектора с нашей оценкой, получим косинус угла между ними. Так как вектор повернут на pi/2, то этот косинус совпадает с синусом угла между измерением и оценкой, правильно? А дальше как раз PLL - по измерению синуса разности угла свести эту разность к нулю.

Цитата(stealth-coder @ Jan 16 2015, 21:45) *
Ключевой вопрос - а зачем отказываться от использования алгебры или таблицы?

Никакой проблемной причины нет, хочется оценить палитру вариантов, посмотреть разные методы. Я, например, не знаю, как обычно решают эту задачу на практике.
Mc_off
Цитата(RHnd @ Jan 16 2015, 20:52) *
... Мне представляется, что можно построить некоторую следящую систему, которая будет минимизировать вектор разности между поступающим вектором и его оценкой...


Следящая система будет на выходе давать такие же квадратуры, которые будут оценками исходных квадратур. И снова встанет вопрос пересчета проекций вектора (квадратур) в полярную систему координат. Т.е. нет необходимости городить ФАПЧ. У Вас уже есть проекции вектора. Осталось только пересчитать.
Причем, если делать следящую систему цифровую (DPLL), то избавиться от джиттера или вандера практически невозможно, т.е. будет дрожание фазы сигнала-оценки. Т.е. лишнее уменьшение точности вычислений.

Цитата(RHnd @ Jan 16 2015, 21:56) *
... как обычно решают эту задачу на практике.


Сильно зависит от частоты, например. От исходных данных.
Если у вас вектор крутится с частотой 10ГГц, то в лоб, цифрой весьма проблематично wink.gif

А ещё интересно зачем именно угол. Для задач демодуляции, например, нужен не угол, а изменение угла... а это немного другая задача. Вот там PLL применяется во весь рост.
RHnd
Цитата(Mc_off @ Jan 16 2015, 22:03) *
А ещё интересно зачем именно угол. Для задач демодуляции, например, нужен не угол, а изменение угла... а это немного другая задача. Вот там PLL применяется во весь рост.

Угол то стоит на месте, то относительно медленно вращается. Задача, на сколько я понимаю, пришла из электрических машин, из бездатчикового управления. Я всех деталей не знаю, мне задачу коллеги подкинули. sm.gif
Fat Robot
Это многое объясняет, конечно

Цитата(RHnd @ Jan 16 2015, 20:15) *
Я всех деталей не знаю...

RHnd
Цитата(RHnd @ Jan 16 2015, 21:56) *
Прикинул немного. Амплитуда нам не важна, она легко оценивается. Так что для простоты предположим, что амплитуда равна единице. Итак, путь x_0 и y_0 - измеряемые величины. Пусть phi_1 - оценка угла. Тогда сформируем x_1=cos(phi_1) и y_1=sin(phi_1). Повернем измеряемый вектор на pi/2 и найдем скалярное произведение повернутого вектора с нашей оценкой, получим косинус угла между ними. Так как вектор повернут на pi/2, то этот косинус совпадает с синусом угла между измерением и оценкой, правильно? А дальше как раз PLL - по измерению синуса разности угла свести эту разность к нулю.


Собрал схему в симулинке, работает. Если кому-то интересно, то могу выложить или выслать. Идея, как я и писал, - на основе комбинаций измеренных x,y и их оценок получить синус разности углов, а дальше стандартная следящая система.
PS: Да, кстати, шумит меньше алгебраического метода. Что особо заметно, как отметил Fat Robot, при углах, близких к pi.
canny
Цитата(RHnd @ Jan 16 2015, 21:15) *
Угол то стоит на месте, то относительно медленно вращается. Задача, на сколько я понимаю, пришла из электрических машин, из бездатчикового управления. Я всех деталей не знаю, мне задачу коллеги подкинули. sm.gif


Для бездатчикового управления в электроприводе потом попросят еще и амплитуду посчитать rolleyes.gif
Есть подозрение, что это векторное управление приводом. Там считают угол из синуса и косинуса http://en.wikipedia.org/wiki/Dqo_transformation, которые получают с датчика на валу двигателя.

Резких бросков фазы в приводе быть не может, поэтому переходы

А поскольку частота поступления новых данных явно не мегагерцы, то возникает вопрос а на чем на практике вы будете считать угол? Т.е. аппаратная платформа.
И еще вопрос - а какая разрядность входных данных?
RHnd
Цитата(canny @ Jan 17 2015, 09:35) *
А поскольку частота поступления новых данных явно не мегагерцы, то возникает вопрос а на чем на практике вы будете считать угол? Т.е. аппаратная платформа.
И еще вопрос - а какая разрядность входных данных?

Без понятия, если честно. Я уже несколько лет гораздо меньше занимаюсь решением конкретных инженерных задач, а гораздо больше разработкой общих методов в системах управления, научными исследованиями. Коллеги спросили, как можно по измерениям проекций построить динамический наблюдатель угла вектора, без явного вычисления арктангенса. Далее они, зная специфику своей задачи, рассмотрят разнообразные варианты и выберут более подходящий для их задачи.
amaora
Если для двигателей, то сам угол может и не понадобится, все равно потом sin/cos от него считать. Квадратный корень тоже можно вычислять динамически, добавить в вектор состояния амплитуду. Невязку разлагаем на тангенциальную и нормальную части, ну и дальше думаю понятно. Или можно KF использовать, особенно если оцениваемых параметров на самом деле гораздо больше.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.