Фазирование синусоид

Простейшие вопросы в области инженерной разработки
Аватара пользователя
jane_wild
master
master
Сообщения: 400
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 64 раза
Поблагодарили: 5 раз
Контактная информация:

Фазирование синусоид

Сообщение jane_wild »

Всех форумчан с Новым годом!
Есть 2D массив синусоид одинаковой частоты, сдвинутых на определенный угол. Выбираю две. Мне нужно определить сколько элементов нужно удалить из массива одной из них (начиная с нуля) чтобы они "синхронизировались". т.е. начиналить с одного угла. В приаттаченом VI опытным путем я определила что нужно удалить 71 элемент. Как можно это вычислить автоматически?
Phase Shift.png
В идеале я бы хотела указав определенный угол, например 90, а vi удалил необходимое количество элементов в одной из синусоид, для получения этого сдвига. Ну а если указать ноль градусов, то получится "синхронизация".
Направьте в нужном направлении... Спасибо
Вложения
Phase Shift.vi
(256.78 КБ) 10 скачиваний
Юрий
master
master
Сообщения: 461
Зарегистрирован: 28 фев 2010, 18:04
Версия LabVIEW: LV2018
Благодарил (а): 9 раз
Поблагодарили: 7 раз
Контактная информация:

Re: Фазирование синусоид

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

Сохраните в LV2018. Чтобы найти смещение в точках, сначала надо найти среднюю линию сигнала и после этого определить в каких местах она будет пересекаться сигналом, скажем, по возрастающей части. И так для обоих сигналов, разность и будет равняться смещению. Чтобы определить это смещение в долях периода или в градусах, надо ещё определить и период. Для этого указанную ранее процедуру следует провести не только для возрастающей части, но и для ниспадающей. Лучше это делать на максимально возможном периоде выборки, что бы получить поточнее результаты.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3043
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 27 раз
Поблагодарили: 124 раза
Контактная информация:

Re: Фазирование синусоид

Сообщение Artem.spb »

jane_wild писал(а): 29 дек 2022, 22:56 Как можно это вычислить автоматически?
У вас практически всё сделано, осталась пара шагов.
Если синусы идеальные, то можно и пересечение нулей искать, но вы используете готовые функции, которые вам и частоты выдают.
Но нужна ещё частота сэмплирования, которая из вашего кода не очевидна.
С направлением усечения (из какой wf удалять начало), уверен, разберётесь :)
phase.png
phaseUI.png
Аватара пользователя
taras_33

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

Re: Фазирование синусоид

Сообщение taras_33 »

Вставлю и я свои 5 копеек.
Artem.spb писал(а): 30 дек 2022, 02:39 Но нужна ещё частота сэмплирования, которая из вашего кода не очевидна.
Почему не очевидна? 1/dt - вот вам и частота. Вы же сами это делаете в вашем коде.
jane_wild писал(а): 29 дек 2022, 22:56 В идеале я бы хотела указав определенный угол, например 90, а vi удалил необходимое количество элементов в одной из синусоид, для получения этого сдвига. Ну а если указать ноль градусов, то получится "синхронизация".
Направьте в нужном направлении... Спасибо
Так просто же все. Как сказал Артем вы практически все сделали и он показал простейшую математику, как вычислить необходимое количество элементов. Я​ лишь применил ее в вашем коде, добавив вашу хотелку "с градусами" и в качестве бонуса обрезал вторую синусоиду, чтобы "красивше" было.
Phase Shift V2.png
Вложения
Phase Shift V2.vi
LV2016
(136.87 КБ) 8 скачиваний
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!
Artem.spb

Activity Автор
professor
professor
Сообщения: 3043
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 27 раз
Поблагодарили: 124 раза
Контактная информация:

Re: Фазирование синусоид

Сообщение Artem.spb »

taras_33 писал(а): 30 дек 2022, 18:00
Artem.spb писал(а): 30 дек 2022, 02:39 Но нужна ещё частота сэмплирования, которая из вашего кода не очевидна.
Почему не очевидна? 1/dt - вот вам и частота. Вы же сами это делаете в вашем коде.
Вангую, в вашей доработке частота будет 1 :)
Не очевидна, потому что в исходном коде нет никакой частоты, только массив, который собирается в WF. А по дефолту там единица.
Может быть, кластер-константа и подправлен, но у меня нет двадцатки, чтобы посмотреть, поэтому собирал свой код с нуля
Аватара пользователя
taras_33

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

Re: Фазирование синусоид

Сообщение taras_33 »

Приатаченный VI 16 версии
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!
Аватара пользователя
jane_wild
master
master
Сообщения: 400
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 64 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Фазирование синусоид

Сообщение jane_wild »

Артем, Taras - Спасибо огромное! Это массив реальных синусоид с рабочей установки с частотой сэмплирования 15 кГц, записанный в текстовый файл и скопированный на мою девелоперскую машину. После преобразования в 2D double он получился очень большой и чтобы его уменьшить, я оставила только две синусоиды и удалила четные элементы из массива, причем сделала это несколько раз. Поэтому dt при построении я взяла наугад. Мне нужно было понять принцип. :thank:
PS. Почему то "палец вверх" на сайте перестал работать (поблагодарить за сообщения автора), делаю это словесно СПАСИБО!
Аватара пользователя
jane_wild
master
master
Сообщения: 400
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 64 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Фазирование синусоид

Сообщение jane_wild »

Чтобы не плодить новые темы, спрошу здесь, поскольку вопросы похожи.
Представим ситуацию, на 10 входов модуля NI-9205 подаестя одна и таже синусоида, (впрочем это может быть любой сигнал все входы соеденены в одну точку) . Если потом вывести эти сигналы на график, мы должны увидеть некоторую задержку чтения между ними. Я правильно рассуждаю? От чего зависит эта задержка, от частоты сэмплирования? От количества каналов в задаче? И самое интересное - как его вычислить эту задержку? Спасибо.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3043
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 27 раз
Поблагодарили: 124 раза
Контактная информация:

Re: Фазирование синусоид

Сообщение Artem.spb »

jane_wild писал(а): 30 дек 2022, 21:39Если потом вывести эти сигналы на график, мы должны увидеть некоторую задержку чтения между ними.
Не совсем задержку, а точнее, смотре как вывести
Ваш модуль с одним АЦП, так что он мультиплексором бегает по всем каналам по очереди, каждый следующий канал читается немного позже. Эта пауза зависит от частоты опроса (если быть точным, то dt/N, где dt - заданная "частота", а N - количество каналов.
daq1.png
daq1.png (4.25 КБ) 706 просмотров
Если нарисовать всё "топорно", то будет казаться, то есть задержка, но если учесть сдвиг, то будет видно, что сигнал один и тот же
daq2.png
daq3.PNG
Аватара пользователя
Andrew Lunev

Activity Professionalism
leader
leader
Сообщения: 933
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2020
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 5 раз

Re: Фазирование синусоид

Сообщение Andrew Lunev »

Artem.spb писал(а): 30 дек 2022, 23:11 Ваш модуль с одним АЦП, так что он мультиплексором бегает по всем каналам по очереди, каждый следующий канал читается немного позже. Эта пауза зависит от частоты опроса (если быть точным, то dt/N, где dt - заданная "частота", а N - количество каналов.
Существует два варианта работы мультиплексора. В первом, самом простом, именно так, как вы описали. Но есть и более сложный. В нем мультиплексор с максимальной скоростью обегает все каналы и потом ожидает время до следующей оцифровки. Это сделано для уменьшения сдвига фазы между каналами. Так точно работают все мультиплексоры в PXI платах NI по умолчанию, но, при желании, можно переключиться на простой вариант. В продвинутом варианте получается, что задержка между соседними каналами константа и не зависит от частоты опроса и количества каналов в задаче. Думаю модуль NI 9205 использует подобный метод, но точно сказать не могу, не проверял.
У модуля NI 9205 время опроса одного канала 4 мс. Думаю, задержка между каналами равна этому времени независимо от частоты опроса.
На картинках примеры временных диаграмм для двух вариантов работы мультиплексора.
Простой вариант
Простой вариант
basic.png (3.94 КБ) 682 просмотра
Улучшенный вариант
Улучшенный вариант
advanced.png (4.8 КБ) 682 просмотра
Artem.spb

Activity Автор
professor
professor
Сообщения: 3043
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 27 раз
Поблагодарили: 124 раза
Контактная информация:

Re: Фазирование синусоид

Сообщение Artem.spb »

Andrew Lunev писал(а): 31 дек 2022, 12:00Так точно работают все мультиплексоры в PXI платах NI по умолчанию
Я, когда писал свой ответ усомнился в частотах и специально проверил, нашёл эту статью . Но там про PCI ответ, так что PXI могут быть и более продвинутыми.
Аватара пользователя
jane_wild
master
master
Сообщения: 400
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 64 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Фазирование синусоид

Сообщение jane_wild »

Выходные прошли, пора возвращаться к работе. Andrew, Artem - Спасибо за разъяснения. Базируясь на них, я попытаюсь порассуждать. Сначала я хочу объяснить, зачем мне это нужно. Есть некое устройство - чтобы было проще - гидравлический цилиндр. Проводиться тест, определение скорости реакции положения цилиндра при воздействии управляющего сигнала. Этот тест по английски называется "frequency response". Суть самого теста проста: На управляющее устройство подается синусоидальный сигнал определенной амплитуды и частоты, (параметры типа давления, сечение шлангов не учитываем - все в норме). Далее измеряется амплитуда движения и сдвиг фаз положения, относительно сигнала команды. Так вот вопрос в том, что этот сдвиг превышает допустимые параметры буквально на пару градусов, в то время как амплитуда в допустимых пределах. Вот я и озадачилась, правильно ли установка производит замеры.
Мои умозаключения: Поправьте меня, если я ошибаюсь. Исходные параметры: Частота сэмплирования 15 кГц, управляющий сигнал 11 Гц. В модуле 9205 задействованы 16 каналов.
15х16=240 kS/S, что ниже максимально допустимой 250 kS/S модуля 9205. Когда я создавала задачу то добавляла каналы ai0, ai1, ai2.... ai14, ai15. т.е поочередно. Управляющий сигнал подключен к ai2, "ответ" к ai14. Получается между ними 12 каналов. Вычисляем. Допустим что время опроса максимально и равно 1/15000000 = 6.6uS (а не 4, как предположил Andrew Lunev, пусть нам будет хуже :brows: ) Значит задержка между чтениями сигнала и ответа составляет 6.6uS * 12 = 79.2uS Выясняем сколько это в градусах. Период сигнала 1/11 = 90.9 mS Итого 360 * 0.000792 / 0.0909 = 3.13 градуса! Если мои рассуждения верны то это все объясняет! Осталось выяснить маленький вопросик. Если я переделаю задачу и укажу последовательность ai2,ai14,ai0.....ai15, то как будет работать мультиплексор? Будет следовать моей последовательности или поочередно с a0... ai15? Спасибо что выслушали :)
P.S. всеже плохо, что палец вверх не работает....
Artem.spb

Activity Автор
professor
professor
Сообщения: 3043
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 27 раз
Поблагодарили: 124 раза
Контактная информация:

Re: Фазирование синусоид

Сообщение Artem.spb »

jane_wild писал(а): 03 янв 2023, 15:32 Допустим что время опроса максимально и равно 1/15000000 = 6.6uS
Я что-то упустил, как 15 кГц превратились в 15 МГц?
Если я переделаю задачу и укажу последовательность ai2,ai14,ai0.....ai15, то как будет работать мультиплексор?
Вот так и будет честно бегать в заданном порядке.
Есть даже ход конём. a1-a2-a1 для двойной скорости чтения одного из каналов.
Аватара пользователя
jane_wild
master
master
Сообщения: 400
Зарегистрирован: 30 июн 2016, 02:11
Версия LabVIEW: 2020
Благодарил (а): 64 раза
Поблагодарили: 5 раз
Контактная информация:

Re: Фазирование синусоид

Сообщение jane_wild »

Artem.spb писал(а): 03 янв 2023, 15:44 Я что-то упустил, как 15 кГц превратились в 15 МГц?
Ну да, согласна лишних три нолика написала и будет 66uS, но конечный результат то верный? 66 * 12 = 792uS и далее 360 * 0.000792 / 0.0909 = 3.13
Аватара пользователя
taras_33

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

Re: Фазирование синусоид

Сообщение taras_33 »

Я так думаю, что 4 микросекунды у NI9205 - это минимальное время, которое возможно при опросе одного канала на максимально возможной частоте в 250кГц. ( 1/250000 = 0.000004 )
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!
Ответить

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