Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Измерние сдвига фаз
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Zelepuk
Нужно измерить сдвига фаз между двумя сигналами, представленными 16-ти битными отсчётами.
Как это сделать максимально экономично к памяти?

Сигналы синусоидальные. Одинаковой часты
Xenia
Свёртка. Память совсем не нужна, но считать долго.
Т.е. прямой перебор скалярных произведений между двумя векторами (массивами данных) при циклическом сдвиге одного из них на единичный/дискретный шаг. Все результаты можно не запоминать, если память экономим, а только величину сдвига, где это произведение достигает максимума. Этот сдвиг, выраженный в единицах периода, и есть искомый сдвиг фаз.
Zelepuk
Спасибо, от несинусоидальности сигналов погрешность сильно будет зависеть?
lastpoint
Цитата(Zelepuk @ Oct 29 2012, 12:24) *
Спасибо, от несинусоидальности сигналов погрешность сильно будет зависеть?

Свёртка показывает «схожесть» двух функций, если оба сигнала одной природы(треугольные, прямоугольные и т. д.), то на погрешность их форма влияние не окажет
Xenia
Цитата(Zelepuk @ Oct 29 2012, 12:24) *
Спасибо, от несинусоидальности сигналов погрешность сильно будет зависеть?


Успех описанного мной корреляционного метода зависит не от правильности формы сигнала, а от того, насколько подобны по форме сигналы обоих каналов. Чем больше степень подобия и уже сигнал, тем лучше. Дело в том, что этот метод по своей сути есть наложение со сдвигом одного сигнала на другой, а кореляция (или скалярное произведение) есть мера такого сходства. Такая величина сдвига, при которой достигается максимальное наложение, и есть сдвиг фазы по определению, поскольку под сдвигом фазвы мы, как раз, подразумеваем существование такого сдвига, который делает обе картинки одинаковыми.

Тем не менее, это метод "робастый", т.е. работает даже при нарушении исходных посылок. Например, входной сигнал (на некое устройство) может быть чистым меандром (прямоугольными импульсами), а выходе сигнал может "испортиться" - острые фронты сгладиться или возле них возникнуть вигли. Все равно, и в этом случае, данный метод вполне приемлем для определения того, насколько устройство сдвигает фазу.

Метод удовлетворительно работает и в том случае, если сравнению подлежат синусоида и меандр. А это означает, что фазу синусоиды можно измерить, сравнением не с синусоидой, а с меадром (переходы между +1 и -1). А это еще большая экономия памяти (!), поскольку нет необходимости генерировать меадр в массиве, да и операция умножения в этом случае исключается, заменяясь на сложение или вычитание.
Zelepuk
как известно форма тока может сильно отличаться от формы напряжения.
Получается в таком случае свёртка не поможет.
Xenia
Цитата(Zelepuk @ Oct 29 2012, 13:23) *
как известно форма тока может сильно отличаться от формы напряжения. Получается в таком случае свёртка не поможет.


Если обе формы отличаются друг от друга до неузнаваемости, то не свёртка тому виной, а исчезает само понятие фазы! В самом деле, если между двумя формами сигнала нет ничего общего, то что тут имеется ввиду под термином "сдвиг фазы"? Какую фазу следует в этом случае считать нулевой?

Если ответ на последний вопрос вы знаете, то сдвиньте ваш причудливый сигнал вручную до совмещения с нулем координат той точки, которую в этом сигнале вы считаете началом. - И это будет для вас тем стандартом (каналом №2), с которым надо производить свёртку.
KalashKS
Можно сравнивать не сигналы, а меандры, полученные их ограничением.
Другой вопрос, каково у Вас соотношение между частотой дискретизации и частотой сигналов? Достаточно ли будет точности в один дискретный отсчет?
rloc
Цитата(Zelepuk @ Oct 29 2012, 10:42) *
Нужно измерить сдвига фаз между двумя сигналами, представленными 16-ти битными отсчётами.
Как это сделать максимально экономично к памяти?

Сигналы синусоидальные. Одинаковой часты


Цитата(Xenia @ Oct 29 2012, 11:30) *
Свёртка.


Автокорреляционной функцией для синуса является косинус. При свертке получим два косинуса с таким же фазовым сдвигом sm.gif
Xenia
Цитата(KalashKS @ Oct 29 2012, 13:45) *
Можно сравнивать не сигналы, а меандры, полученные их ограничением.

В вашем предложении есть тот недостаток, что два меандра могут плохо сравниваться, если один шире другого. Из-за того, что тогда возникает люфт, когда более узкий меандр ползает внутри большого. В этом случае скалярное произведение не дает предпочтения ни одному из возможных расположений. А это приведет к дополнительной погрешности определения фазы. Но если второй сигнал синусоида, то такой проблемы не возникает.

Цитата(rloc @ Oct 29 2012, 13:52) *
Автокорреляционной функцией для синуса является косинус. При свертке получим два косинуса с таким же фазовым сдвигом sm.gif

Это не страшно - берем расстояние от нуля до ближайшего максимума, будь хоть это косинус или другая периодическая функция. Периодичность свертки означает лишь то, что существует несколько вариантов наилучшего совмещения. Но поскольку разные периоды сигнала мы намеренно не различаем, то под фазой всегда подразумеваем минимальный сдвиг. Случаи, когда фазовая задерка превышает полный период, предлагаю вообще не рассматривать sm.gif. Такие вещи тестируются одиночными импульсами, а не синусоидой.
KalashKS
Цитата(Xenia @ Oct 29 2012, 13:52) *
В вашем предложении есть тот недостаток, что два меандра могут плохо сравниваться, если один шире другого. Из-за того, что тогда возникает люфт, когда более узкий меандр ползает внутри большого. В этом случае скалярное произведение не дает предпочтения ни одному из возможных расположений. Отсбда возникнет дополнительная погрешность определения фазы. Но если второй сигнал синусоида, то такой проблемы не возникает.

Согласен.
Интересно все-таки, что автор понимает под сильно отличающейся формой.
Zelepuk
когда я говорю о разноcти формы сигналов тока и напряжения я имею ввиду что сигнал тока как правило более насыщен гамрониками ввиду нелинейности нагрузки. Периоды сигналов как правило равны.
Посмотрите тут http://www.matic.ru/index.php?pages=735
Xenia
Цитата(Zelepuk @ Oct 29 2012, 13:57) *
когда я говорю о разноcти формы сигналов тока и напряжения я имею ввиду что сигнал тока как правило более насыщен гамрониками ввиду нелинейности нагрузки. Периоды сигналов как правило равны.
Посмотрите тут...


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

Если же, тем не менее, вас интересует только фаза основной синусоиды (50 Гц), а более мелкие гармоники считаете шумом, то свёртку надо делать с чистой синусоидой той частоты, фаза которой вас интересует. Мелкие гармоники при этом будут эффективно сглажены и на точность измерения фазы, скорее всего, не повлияют.

=======================================================

Еще идея. Вместо свёртки, вычислить всего два скалярных произведения: первое с чистой синусоидой, второе с чистой косинусоидой (раз уж частота вам точно известна). Из соотношения этих двух величин может быть вычислена фаза (как угол, катеты которого соответствуют этим двум величинам).

Фактически это аналог преобразования Фурье для отдельной частоты.
ivan219
Делаем ДПФ или Герцель на оба сигнала после чего в комплексной форме делим спектры друг на друга получаем Im, Re.
Фаза = ta(Im / Re).
По памяти и ресурсам Герцель самый экономичный и гибкий но есть проблема с точностью если алгоритм будет работать на МК
анатолий
Цитата(ivan219 @ Oct 29 2012, 15:54) *
Делаем ДПФ или Герцель на оба сигнала после чего в комплексной форме делим спектры друг на друга получаем Im, Re.
Фаза = ta(Im / Re).
По памяти и ресурсам Герцель самый экономичный и гибкий но есть проблема с точностью если алгоритм будет работать на МК

Если синусоида в сигнале одна, то еще проще - в ДПФ умножать не на синус-косинус, а на меандр, т.е. на ±1 с частотой синусоиды.
Результат будет такой же и лучше, чем с Герцелем.
Можно спектры не делить, а перевести в полярную форму и вычесть фазы.
avrsoft
Цитата(Xenia @ Oct 29 2012, 12:32) *
Еще идея. Вместо свёртки, вычислить всего два скалярных произведения: первое с чистой синусоидой, второе с чистой косинусоидой (раз уж частота вам точно известна). Из соотношения этих двух величин может быть вычислена фаза (как угол, катеты которого соответствуют этим двум величинам).
Фактически это аналог преобразования Фурье для отдельной частоты.

Пытался таким же образом определять период. Сделал свертку входного сигнала с одним периодом синусоиды и косинусоиды. Далее вычислил амплитуду "гармоники", как корень из суммы квадратов этих двух величин. Повторил те же вычисления для опорных sin и cos разных частот, нашел при какой частоте амплитуда "гармоники" максимальна.
Всё работает, но как-то странно, на идеальном входном сигнале дает погрешность. Если в качестве входного сигнала взять чистый синус 50Гц, то его частота, вычисленная таким методом, болтается в диапазоне примерно 46-54Гц, в зависимости от фазы входного сигнала относительно опорных.
Вы случайно не знаете, как объяснить этот эффект?
ivan219
Если смотреть на спектр вещественного сигнала, то ближе к краям, спектр больше искажается и влияние фазы становится всё больше.
Это можно спокойно увидеть если сделать спектр для синуса и косинуса при этом частота должна быть не кратна длинен БПФ
Минимум искажений наблюдается только в середине спектра либо при выборе подходящих окон.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.