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

- Сообщения: 546
- Зарегистрирован: 30 июн 2016, 02:11
- Награды: 1
- Версия LabVIEW: 2020
- Благодарил (а): 107 раз
- Поблагодарили: 23 раза
- Контактная информация:
Определить сдвиг фаз
Проблема в следующем. Почему то Extract Single Tone Information vi странно определяет фазы.
Мне необходимо определить сдвиг между ними.
В смысле если за reference взять фазу А, то фаза В должна быть сдвинута около 120 градусов, а фаза С на 240. В реальности так не получается.
Что я делаю не правильно?
Для начала определяю точку перехода через ноль фазы A, обрезаю все фазы по этому индексу и вывожу на график чтобы убедится что все сделала правильно.
Потом применяю упомянутый vi и получаю совсем не то что ожидалось.
Посмотрите вложенный Vi В константах записаны реальные значения(Volts) трех фаз 400Гц с частотой сэмплирования 1500 Гц. Причем константы две, взятые в различный момент времени.
Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами... Что не так? Заранее спасибо.
Мне необходимо определить сдвиг между ними.
В смысле если за reference взять фазу А, то фаза В должна быть сдвинута около 120 градусов, а фаза С на 240. В реальности так не получается.
Что я делаю не правильно?
Для начала определяю точку перехода через ноль фазы A, обрезаю все фазы по этому индексу и вывожу на график чтобы убедится что все сделала правильно.
Потом применяю упомянутый vi и получаю совсем не то что ожидалось.
Посмотрите вложенный Vi В константах записаны реальные значения(Volts) трех фаз 400Гц с частотой сэмплирования 1500 Гц. Причем константы две, взятые в различный момент времени.
Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами... Что не так? Заранее спасибо.
- Вложения
-
- Test.vi
- LV2016
- (53.24 КБ) 49 скачиваний
Life is short. Smile while you still have teeth!
-
Borjomy_1
- doctor

- Сообщения: 2307
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 33 раза
- Поблагодарили: 36 раз
Re: Определить сдвиг фаз
Так как используется оцифрованное значение, то есть совершенно ненулевая вероятность, когда значение напряжения точно равно нулю. А у вас в циклах поиска перехода через ноль такая ситуация исключается
-
Юрий
- leader

- Сообщения: 569
- Зарегистрирован: 28 фев 2010, 18:04
- Версия LabVIEW: LV2018
- Благодарил (а): 14 раз
- Поблагодарили: 21 раз
- Контактная информация:
Re: Определить сдвиг фаз
1. Если идёт речь о более-менее точном определении точки перехода через ноль, то такой способ не очень хорош. Он опрделить начало с погрешностью дискретизации процесса. У вас кажется 36 точек на период, ну вот, погрешность уже может быть в пределах 10 градусов.
2. А зачем так парится. Заводите сигнал сразу на цикл, а затем из полученного результата вычитайте ту фазу, относительно которой хотите иметь результат по сдвигу фаз.
2. А зачем так парится. Заводите сигнал сразу на цикл, а затем из полученного результата вычитайте ту фазу, относительно которой хотите иметь результат по сдвигу фаз.
-
IvanLis
- guru

- Сообщения: 5665
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 124 раза
Re: Определить сдвиг фаз
Ну с гармоническими сигналами, и вообще с фазой сигнала всегда не просто.jane_wild писал(а): 31 июл 2025, 18:01 Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами... Что не так? Заранее спасибо.
На самом деле программа Вас не обманывает и показывает все правильно, результаты нужно только правильно интерпретировать
Если посмотреть на круг, то получается, что фаза периодически повторяется каждый оборот, а 240 = -120, т.к. 360 - 120 = 240.
Ну и в обратную сторону 240 - 360 = -120.
Для нормализации фазы (устранения разрывов) используйте Unwrap Phase
После нормализации, все нормально получается Тогда и получается, что "В" отстает от "А" на 120 градусов. И "С" от "В" тоже на 120 град.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
taras_33
- master

- Сообщения: 400
- Зарегистрирован: 31 окт 2009, 18:25
- Награды: 1
- Версия LabVIEW: 2019
- Поблагодарили: 16 раз
- Контактная информация:
Re: Определить сдвиг фаз
Jane посмотрите на конец графика, фазы идут в разных направлениях по знаку.
Попробуйте его обрезать. Поскольку имеется 1500 отсчетов, то скажем оставить 1400
Теперь конец графиков будет выглядеть одинаково по направлениям фаз. Разницу между фазами берете по модулю, не обращая внимания на знак. И будет вам счастье.
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!
So far, the Universe is winning!
-
IvanLis
- guru

- Сообщения: 5665
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 124 раза
Re: Определить сдвиг фаз
taras_33, не обижайтесь, но Вы вводите в заблуждение.taras_33 писал(а): 01 авг 2025, 14:54 Разницу между фазами берете по модулю, не обращая внимания на знак. И будет вам счастье.
Тем более пользователь jane_wild в принципе с этой проблемой и обратился:
Вывод сделан, как раз при условии взятия по модулю судя по всему.jane_wild писал(а): 31 июл 2025, 18:01 Причем ничего не менялось, а результат показывает как будто бы фазы поменяли местами...
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
jane_wild
- leader

- Сообщения: 546
- Зарегистрирован: 30 июн 2016, 02:11
- Награды: 1
- Версия LabVIEW: 2020
- Благодарил (а): 107 раз
- Поблагодарили: 23 раза
- Контактная информация:
Re: Определить сдвиг фаз
В первом посте я привела код где вычисляется сдвиг фаз. В реальной программе присутствует проблема, а именно. Сдвиг фазы "А" всегда равен нулю, "В" = -120, фаза "С" = 240, через несколько секунд "В" = 240, "С" = -120. Как бы меняются местами. Это и показано в посте. (один и тот же график с разницей в несколько секунд)
В последнем цикле For я от каждого элемента массива отнимаю первый элемент (фазу "А"). Что ожидаю три итерации - первая число близкое к нулю (я же обрезала все три массива по переходу через ноль фазы "А") отнимается само от себя - результат "0" Все правильно. Вторая от фазы "В" (которая сдвинута на 120 градусов отнимаю 0 результат должен быть 120 у меня же почему-то -120 и третья ожидается число 240.
Это меня сбивает с толку, как сказал IvanLis если представить круг и отмерить -120 градусов против часовой стрелки, поскольку знак минус, либо отмерить 240 градусов по часовой стрелке, то это по сути одно и тоже! Получается Фаза "С" совпадает с фазой "В" Это как?! На графике же явно видно что фазы сдвинуты относительно друг друга на 120 градусов. Завтра на работе попробую по совету Taras_33 обрезать хвост массивов, посмотрю что получится.... В любом случае этот vi как то странно вычисляет сдвиг.
P.S. Я где то на этом форуме видела способ вычисления угла сдвига синусоид, без использования этого vi...
В последнем цикле 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
- doctor

- Сообщения: 2307
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 33 раза
- Поблагодарили: 36 раз
Re: Определить сдвиг фаз
Попробуйте перейти в комплексную плоскость для дальнейших вычислений. Тогда знаки + и - в фазе не будут иметь значения.
А здесь основная проблема в том, что фаза вычисляется со знаком. Тогда как необходимо беззнаковое значение.
А здесь основная проблема в том, что фаза вычисляется со знаком. Тогда как необходимо беззнаковое значение.
-
jane_wild
- leader

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

- Сообщения: 2307
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 33 раза
- Поблагодарили: 36 раз
Re: Определить сдвиг фаз
1. переводим в радианы
2. закидываем в комплексные числа (с нормализацией по знаку)
3. получаем разность фаз, вычитая из одного комплексного числа другое
4. загоняем полученную фазу в гарантированный положительный диапазон
5. обрезаем по одному периоду
6. переводим обратно в градусы
Или совсем по-простому
2. закидываем в комплексные числа (с нормализацией по знаку)
3. получаем разность фаз, вычитая из одного комплексного числа другое
4. загоняем полученную фазу в гарантированный положительный диапазон
5. обрезаем по одному периоду
6. переводим обратно в градусы
Или совсем по-простому
- Вложения
-
- unwrap phase.png (17.58 КБ) 2033 просмотра
-
- unwrap phase lite.png (14.15 КБ) 2033 просмотра
-
IvanLis
- guru

- Сообщения: 5665
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 35 раз
- Поблагодарили: 124 раза
Re: Определить сдвиг фаз
Стандартная функция не работает?
Все, что предлагается, как раз и нацелена на нормализацию фаз
IvanLis писал(а): 01 авг 2025, 13:30 Для нормализации фазы (устранения разрывов) используйте Unwrap Phase
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение Картинку или Файл
Как добавить в сообщение Видео
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Borjomy_1
- doctor

- Сообщения: 2307
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 33 раза
- Поблагодарили: 36 раз
Re: Определить сдвиг фаз
Кстати, вдогонку. Для схожей задачи, на днях, я использовал "чудесную" функцию NI_AAIPro.lvlib:Cross Power Spectrum, которая прекрасно для этого подходит. Она автоматически выделяет коррелируемые гармоники. Достаточно найти максимальную по амплитуде гармонику и взять ее фазу. Не надо искать переходы через 0 и прочее.
- Вложения
-
- cps.png (20.42 КБ) 807 просмотров