Определить сдвиг фаз

Простейшие вопросы в области инженерной разработки
Ответить
Аватара пользователя
jane_wild

Gold
leader
leader
Сообщения: 546
Зарегистрирован: 30 июн 2016, 02:11
Награды: 1
Версия LabVIEW: 2020
Благодарил (а): 107 раз
Поблагодарили: 23 раза
Контактная информация:

Определить сдвиг фаз

Сообщение jane_wild »

Проблема в следующем. Почему то Extract Single Tone Information vi странно определяет фазы.
Мне необходимо определить сдвиг между ними.
В смысле если за reference взять фазу А, то фаза В должна быть сдвинута около 120 градусов, а фаза С на 240. В реальности так не получается.
Что я делаю не правильно?
Для начала определяю точку перехода через ноль фазы A, обрезаю все фазы по этому индексу и вывожу на график чтобы убедится что все сделала правильно.
Потом применяю упомянутый vi и получаю совсем не то что ожидалось.
Посмотрите вложенный Vi В константах записаны реальные значения(Volts) трех фаз 400Гц с частотой сэмплирования 1500 Гц. Причем константы две, взятые в различный момент времени.
Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами... Что не так? Заранее спасибо.
FP Phase Angle.png
Phase angle.png
Вложения
Test.vi
LV2016
(53.24 КБ) 49 скачиваний
Life is short. Smile while you still have teeth!
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2307
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 33 раза
Поблагодарили: 36 раз

Re: Определить сдвиг фаз

Сообщение Borjomy_1 »

Так как используется оцифрованное значение, то есть совершенно ненулевая вероятность, когда значение напряжения точно равно нулю. А у вас в циклах поиска перехода через ноль такая ситуация исключается
Юрий
leader
leader
Сообщения: 569
Зарегистрирован: 28 фев 2010, 18:04
Версия LabVIEW: LV2018
Благодарил (а): 14 раз
Поблагодарили: 21 раз
Контактная информация:

Re: Определить сдвиг фаз

Сообщение Юрий »

1. Если идёт речь о более-менее точном определении точки перехода через ноль, то такой способ не очень хорош. Он опрделить начало с погрешностью дискретизации процесса. У вас кажется 36 точек на период, ну вот, погрешность уже может быть в пределах 10 градусов.
2. А зачем так парится. Заводите сигнал сразу на цикл, а затем из полученного результата вычитайте ту фазу, относительно которой хотите иметь результат по сдвигу фаз.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5665
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 35 раз
Поблагодарили: 124 раза

Re: Определить сдвиг фаз

Сообщение IvanLis »

jane_wild писал(а): 31 июл 2025, 18:01 Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами... Что не так? Заранее спасибо.
Ну с гармоническими сигналами, и вообще с фазой сигнала всегда не просто.
На самом деле программа Вас не обманывает и показывает все правильно, результаты нужно только правильно интерпретировать :think: .
Если посмотреть на круг, то получается, что фаза периодически повторяется каждый оборот, а 240 = -120, т.к. 360 - 120 = 240.
Ну и в обратную сторону 240 - 360 = -120.

Для нормализации фазы (устранения разрывов) используйте Unwrap Phase
После нормализации, все нормально получается
Снимок экрана от 2025-08-01 13-20-54.png
Тогда и получается, что "В" отстает от "А" на 120 градусов. И "С" от "В" тоже на 120 град.
Аватара пользователя
taras_33

Activity
master
master
Сообщения: 400
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 16 раз
Контактная информация:

Re: Определить сдвиг фаз

Сообщение taras_33 »

Jane посмотрите на конец графика, фазы идут в разных направлениях по знаку.
IMG_2837.jpeg
Попробуйте его обрезать. Поскольку имеется 1500 отсчетов, то скажем оставить 1400
IMG_2838.jpeg
IMG_2838.jpeg (11.49 КБ) 2292 просмотра
Теперь конец графиков будет выглядеть одинаково по направлениям фаз. Разницу между фазами берете по модулю, не обращая внимания на знак. И будет вам счастье.
Вложения
IMG_2836.jpeg
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5665
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 35 раз
Поблагодарили: 124 раза

Re: Определить сдвиг фаз

Сообщение IvanLis »

taras_33 писал(а): 01 авг 2025, 14:54 Разницу между фазами берете по модулю, не обращая внимания на знак. И будет вам счастье.
taras_33, не обижайтесь, но Вы вводите в заблуждение.
Тем более пользователь jane_wild в принципе с этой проблемой и обратился:
jane_wild писал(а): 31 июл 2025, 18:01 Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами...
Вывод сделан, как раз при условии взятия по модулю судя по всему.
Аватара пользователя
jane_wild

Gold
leader
leader
Сообщения: 546
Зарегистрирован: 30 июн 2016, 02:11
Награды: 1
Версия LabVIEW: 2020
Благодарил (а): 107 раз
Поблагодарили: 23 раза
Контактная информация:

Re: Определить сдвиг фаз

Сообщение jane_wild »

В первом посте я привела код где вычисляется сдвиг фаз. В реальной программе присутствует проблема, а именно. Сдвиг фазы "А" всегда равен нулю, "В" = -120, фаза "С" = 240, через несколько секунд "В" = 240, "С" = -120. Как бы меняются местами. Это и показано в посте. (один и тот же график с разницей в несколько секунд)
В последнем цикле For я от каждого элемента массива отнимаю первый элемент (фазу "А"). Что ожидаю три итерации - первая число близкое к нулю (я же обрезала все три массива по переходу через ноль фазы "А") отнимается само от себя - результат "0" Все правильно. Вторая от фазы "В" (которая сдвинута на 120 градусов отнимаю 0 результат должен быть 120 у меня же почему-то -120 и третья ожидается число 240.
Это меня сбивает с толку, как сказал IvanLis если представить круг и отмерить -120 градусов против часовой стрелки, поскольку знак минус, либо отмерить 240 градусов по часовой стрелке, то это по сути одно и тоже! Получается Фаза "С" совпадает с фазой "В" Это как?! На графике же явно видно что фазы сдвинуты относительно друг друга на 120 градусов. Завтра на работе попробую по совету Taras_33 обрезать хвост массивов, посмотрю что получится.... В любом случае этот vi как то странно вычисляет сдвиг.

P.S. Я где то на этом форуме видела способ вычисления угла сдвига синусоид, без использования этого vi...
Life is short. Smile while you still have teeth!
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2307
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 33 раза
Поблагодарили: 36 раз

Re: Определить сдвиг фаз

Сообщение Borjomy_1 »

Попробуйте перейти в комплексную плоскость для дальнейших вычислений. Тогда знаки + и - в фазе не будут иметь значения.
А здесь основная проблема в том, что фаза вычисляется со знаком. Тогда как необходимо беззнаковое значение.
Аватара пользователя
jane_wild

Gold
leader
leader
Сообщения: 546
Зарегистрирован: 30 июн 2016, 02:11
Награды: 1
Версия LabVIEW: 2020
Благодарил (а): 107 раз
Поблагодарили: 23 раза
Контактная информация:

Re: Определить сдвиг фаз

Сообщение jane_wild »

jane_wild писал(а): 04 авг 2025, 02:00 Завтра на работе попробую по совету Taras_33 обрезать хвост массивов, посмотрю что получится....
Ну что могу сказать помогло! Теперь во всяком случае всё остается стабильным, с течением времени значения не меняются, меняется только знак.
Я же вижу что фазы "B" и "C" сдвинуты относительно фазы "A" на 120 одна в отрицательную сторону, другая в положительную.
Phases.png
Phases.png (7.52 КБ) 2042 просмотра
Поэтому применила Absolute value в цикле for
Shift.png
Shift.png (8.02 КБ) 2042 просмотра
и на этом успокоилась, может что то и не правильно - но работает же! У блока питания два режима работы: Первый нормальный А=0, В=120, С=240 и второй А=0, В=90, С=210. В обоих режимах отображение сдвига фаз происходит корректно. Всем спасибо.
Life is short. Smile while you still have teeth!
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2307
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 33 раза
Поблагодарили: 36 раз

Re: Определить сдвиг фаз

Сообщение Borjomy_1 »

1. переводим в радианы
2. закидываем в комплексные числа (с нормализацией по знаку)
3. получаем разность фаз, вычитая из одного комплексного числа другое
4. загоняем полученную фазу в гарантированный положительный диапазон
5. обрезаем по одному периоду
6. переводим обратно в градусы

Или совсем по-простому
Вложения
unwrap phase.png
unwrap phase.png (17.58 КБ) 2033 просмотра
unwrap phase lite.png
unwrap phase lite.png (14.15 КБ) 2033 просмотра
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5665
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 35 раз
Поблагодарили: 124 раза

Re: Определить сдвиг фаз

Сообщение IvanLis »

jane_wild писал(а): 04 авг 2025, 02:00 Это меня сбивает с толку
Стандартная функция не работает?
Все, что предлагается, как раз и нацелена на нормализацию фаз :D
IvanLis писал(а): 01 авг 2025, 13:30 Для нормализации фазы (устранения разрывов) используйте Unwrap Phase
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2307
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 33 раза
Поблагодарили: 36 раз

Re: Определить сдвиг фаз

Сообщение Borjomy_1 »

Кстати, вдогонку. Для схожей задачи, на днях, я использовал "чудесную" функцию NI_AAIPro.lvlib:Cross Power Spectrum, которая прекрасно для этого подходит. Она автоматически выделяет коррелируемые гармоники. Достаточно найти максимальную по амплитуде гармонику и взять ее фазу. Не надо искать переходы через 0 и прочее.
Вложения
cps.png
cps.png (20.42 КБ) 807 просмотров
Ответить

Вернуться в «Для чайников»