Jump to content
    

Деление комплексных чисел в SystemVue

Используется моделирование dataflow.

Есть два набора данных с комплексными числами, нужно один поделить на другой. Есть стандартные блоки "Add" и "Multiply", а для деления ничего не нашёл.

Как так? Неужели нужно будет разбивать число на реальную и мнимую часть или вычислять модуль и аргумент, а потом проводить действия над ними раздельно? 

Share this post


Link to post
Share on other sites

Нет, для разности есть элемент Sub.

Первый вариант сделал через деление амплитуд и вычитание фаз, т.е. разложил число на амплитуду и фазу элементом CxToPolar, далее делаю обратную величину одной из амплитуд элементом Reciprocal, далее перемножаю со второй амплитудой элементом Mpy. Фазы вычитаю через Sub и объединяю с полученной амплитудой через PolarToCx.

Выглядит жутко...

Нашёл некий элемент MathCx, у которого в параметрах можно указать Recip. Это, по идее, должно сразу давать обратное комплексное число, которое можно (видимо) перемножить со вторым и получить искомое. Сделал - не совпадает с первым вариантом.

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

Жесть какая-то выходит... Попроще никак, что ли?

Share this post


Link to post
Share on other sites

On 9/26/2025 at 12:31 PM, vitan said:

Первый вариант сделал через деление амплитуд и вычитание фаз, т.е. разложил число на амплитуду и фазу...

Попроще никак, что ли?

Проще умножить числитель и знаменатель дроби на комплексно-сопряженный знаменатель.

Затем выделить в числителе действительную и мнимую части и поделить их на квадрат модуля делителя.

Share this post


Link to post
Share on other sites

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

Я имел ввиду какой-нибудь стандартный блок, выполняющий эту операцию. Я в теме новичок, но странно показалось, что этого нет.

Share this post


Link to post
Share on other sites

Проверил вычисления через эксель. Мой вариант 1 оказался правильным! А в варианте 2 интересная фигня: элемент MathCx с настройкой Recip выдаёт обратные комплексные числа с ошибкой! Неточность от пятого до третьего знака после запятой (меняется, в зависимости от чего - не изучал). УЖОС! Как с этим работать-то??

Share this post


Link to post
Share on other sites

Я очень надеюсь, что автор вопроса не в теме мс-21. Нунахер...

1 час назад, vitan сказал:

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

Я имел ввиду какой-нибудь стандартный блок, выполняющий эту операцию. Я в теме новичок, но странно показалось, что этого нет.

У меня есть карандаш. 0.7мм. И есть бумага. Не очень хорошего качества. Но я могу при помощи этих не  сложных инструментов проверить. Стандартный блок. зы у меня такое чувство, что я живу в каком-то зазеркалье. Ну ребят, я старый. Я точно знаю что летает, что падает. Нужно просто спросить. Не. Будут изобретать.  Деление комплексныхчисел. Школьная (ну первый курс вуз) программа. Успехов в поиске истины.  

Share this post


Link to post
Share on other sites

В 26.09.2025 в 15:13, looser сказал:

проверить

Прикиньте, мне тоже не 16 лет. И я тоже могу на клочке бумаги два числа поделить, даже комплексных.

Вы правда думаете, что мне для этого надо новые программные пакеты осваивать?

Довольно странно, что нет стандартного блока. В комплекте чего только нет, от констант до каких-то адских модуляторов 5G. У новичка вызывает удивление отсутствие блока для деления в таких условиях, что Вас так скривило?

Share this post


Link to post
Share on other sites

39 минут назад, vitan сказал:

Прикиньте, мне тоже не 16 лет. И я тоже могу на клочке бумаги два числа поделить, даже комплексных.

Вы правда думаете, что мне для этого надо новые программные пакеты осваивать?

Довольно странно, что нет стандартного блока. В комплекте чего только нет, от констант до каких-то адских модуляторов 5G. У новичка вызывает удивление отсутствие блока для деления в таких условиях, что Вас так скривило?

Да все есть. Тут главное типы грамотно определить. Просто определяете операцию. Комплексные поделятся на комплексные. Ну а иначе весь этот огород смысла не имеет. Будете делить как на бумажке. зы лично я так и делаю, не доверяя кубикам. На верилоге. Тем более, что в кубиках все будет то же самое. Только хуже. Кстати, а зачем делить комплексные числа? Это довольно экзотическая операция. Коррекция ачх?

Share this post


Link to post
Share on other sites

В 26.09.2025 в 16:38, looser сказал:

Да все есть. Тут главное типы грамотно определить. Просто определяете операцию.

Что есть? Где есть? Как "просто определить операцию"? Вы можете ответить конкретно по сути вопроса? 

Фактически, вопрос уже решён, результаты получены. Но способ получения меня несколько удивил.

Да, деление нужно для коррекции АЧХ, если можно так выразиться.  Я пытаюсь освоить т.н. нормализацию для TDR (по апликухам аджилента).

Share this post


Link to post
Share on other sites

Ну тут дело такое:если есть комплексные числа - будут делить как комплексные. Я не очень понимаю вопроса. Лично у меня таких вопросов вообще никогда и все такое. По крайней мере выпадать с этим в аудиторию... Да ладно победили - отлично. Успехов.

Share this post


Link to post
Share on other sites

Вы не читали заголовок, похоже. Как сделать это не на бумажке, и даже не в экселе? Сделать-то я сделал, но выглядит жутко. Помимо этого найдена проблема с одним из стандартных блоков. Думал, найдутся люди, владеющие SystemVue, подскажут... Нет, макнули в г... зачем-то... 

Кстати, раз пошла такая пьянка, сделаю уж и третий вариант, по схеме с домножением на сопряжённое, посмотрим, как оно будет.

Share this post


Link to post
Share on other sites

41 минуту назад, vitan сказал:

Вы не читали заголовок, похоже. Как сделать это не на бумажке, и даже не в экселе? Сделать-то я сделал, но выглядит жутко. Помимо этого найдена проблема с одним из стандартных блоков. Думал, найдутся люди, владеющие SystemVue, подскажут... Нет, макнули в г... зачем-то... 

Кстати, раз пошла такая пьянка, сделаю уж и третий вариант, по схеме с домножением на сопряжённое, посмотрим, как оно будет.

Конечно читал. Просто мне в голову не приходило спрашивать у коллег на электрониксе про деление комплексных чисел. Лютая деградация, ога. 3 варианта деления. Я просто... Да ладно. Делите как хотите.Тут ведь как? Главное частное не потерять.

Share this post


Link to post
Share on other sites

В 27.09.2025 в 19:37, looser сказал:

деградация

Ну ок, продвинутый Вы наш. Давайте, покажите класс. Ваше решение в студию! И оно должно быть круче моего. Напоминаю, его надо реализовать в указанном софте, а не на бумажке. Слабо?

 

all

Изначально я планировал всё это делать в ADS 2024 (далее этот симулятор уже убрали), но из-за других проблем перешёл на SystemVue и так пока и не вернулся. Есть смысл возвращаться, или там будет то же самое?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...