В установившемся режиме
Попробуем провести анализ электрических схем по переменному току с использованием системы символьных вычислений Maxima. Представим себе произвольную схему, после чего:
добавляем источник синусоидальной ЭДС в общем виде A•sin(2•π•f₀•t+ψ₀)
имеем в виду что 2•π•f₀•t+ψ₀ - это фаза, а ψ₀ - начальная фаза
что f₀ - циклическая частота [Гц], ω₀ - круговая [рад•с⁻¹],
выбираем необходимые переменные состояния, обозначаем токи и напряжения
рисуем контуры так, чтобы на каждом элементе подключённого к двум ветвям контуры проходили хотя бы пару раз, обозначаем узлы с охватом всех ветвей

Символический анализ
Используем систему компьютерной алгебры Maxima. Для этого составляем первую систему уравнений. По умолчанию при составлении системы уравнений предполагается, что каждое значение в списке равно нулю. Знак равенства можно не использовать. a=b записать как
a-b=0 или просто a-b. Таким образом, можно обойтись без знака равенства, полагая результатом каждого выражения в книге ноль (может быть, поэтому, на самом деле похожи
- и =).
eq:[
/*Правило Кирхгофа для напряжений контуров*/
-E1 + iR1*R1+iL*p*L+iC/(p*C), /*Уравнение по первому контуру I*/
+iL*p*L-iR2*R2, /*Уравнение по второму контуру II*/
-iC/(p*C)+iR3*R3, /*Уравнение по третьему контуру III*/
/*Правило Кирхгофа для токов узлов*/
iR1-iR2-iL, /*Уравнение по первому узлу (1)*/
iL-iC-iR3, /*Уравнение по второму узлу (2)*/
/*Вычисляемая переменная состояния - выход*/
Un=iR3*R3
];
далее производится решение и выделение необходимой переменной состояния Un. Небольшая заметка
Если в Maxima имеется выражение V1:[a=1,b=x,c=...], то для того чтобы это подставить в некоторое выражение V2:a+b можно использовать конструкцию с оператором "запятая" V3:V2,V1 которая эквивалентна subst(V1,V2). В основном subst используется внутри функций, циклов и условий
/*решаем систему уравнений eq относительно переменных
состояния с выбором Un в качестве ответа*/
sln:Un,solve(eq,[iR1,iR2,iR3,iC,iL,Un]);

Получается передаточная функция второго порядка. Следует уточнить, что в данном случае используется термин "передаточная функция" (как отношение выхода ко входу), несмотря на то что в выражении содержится входной сигнал E1. Для упрощения можно полагать этот сигнал как произвольный множитель, входящий в соотношение, в частности, равный единице или нормированный к номинальной величине. Переходная характеристика же содержит конкретный вид сигнала E1, в данном случае синусоидальную величину. Передаточная функция используется для частотного анализа, переходная характеристика - для последующего анализа во временной форме и для нахождения значения в установившемся режиме.

Запишем входные сигналы во времени для варианта постоянного (единичная ступенька) и переменного тока (синус, начинаемый с нуля), а также найдём их изображения по Лапласу:
/*Для постоянного тока - постоянный уровень U*/
V1:U;
/*Для переменного тока - синусоидальная величина с амплитудой A*/
V2:A*sin(2*%pi*f_0*t+ψ_0);
/*Преобразование Лапласа от постоянной*/
V3:laplace(V1,t,p);
/*Преобразование Лапласа от синуса*/
V4:laplace(V2,t,p);
В результате будет иметься следующее:

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

Код для получения формулы на рисунке выше
/*Магический коэффициент*/
V5:(p^2+4*%pi^2*f_0^2)/(2*%pi*f_0);
/*Произведение при заданной форме входного сигнала*/
V6:V5*V4;
Итак, необходимым для анализа коэффициентом является выражение, которое умножается на произведение заданной формы сигнала E1(p) в операторной форме на передаточную функцию системы W(p). Также коэффициент можно записать как (p²+ω₀²)/ω₀, ω₀ = 2•π•f₀

Запишем переходную характеристику как результат умножения входного сигнала на передаточную функцию, в данном случае выполняется подстановка вместо E1:
/*Переходная характеристика*/
V7:sln,E1=V4;
Результатом будет выражение V7

Далее переходная характеристика умножается на "Магический коэффициент":
/*Переходная характеристика с коэффициентом*/
V8:factor(V7*V5);
Получается следующее выражение V8, равное

Как видно, "магический коэффициент" предназначен для устранения сингулярности в знаменателе, образованной преобразованием Лапласа от синусоидального входного сигнала. Так как если в p² + (2•π•f₀)² подставить p = j•2•π•f₀, то получится (j•2•π•f₀)² +(2•π•f₀)² = -(2•π•f₀)² +(2•π•f₀)² = 0 деление на ноль. Далее можно подставить значение p для перехода в комплексно-частотную область для заданной точки.
/*Значение оператора p в заданной точке и переход в КЧХ*/
V9:p=%i*2*%pi*f_0;
/*Значение выходного сигнла в заданной комплексно-частотной точке*/
V10:V8,V9;
Получается значение в установившемся режиме как комплексно-частотная точка

Итак, общая схема для нахождения значения в установившемся режиме представлена на рисунке

Для нахождения амплитуды и фазы выходного сигнала достаточно взять модуль и аргумент. Перед этим, также задав предположение о положительном значении величин, чтобы система символических вычислений могла оптимизировать корни. √x² = |x|, но √x² = x если x≥0
/*Предположение о неотрицательности параметров*/
assume(A>0,R1>0,R2>0,R3>0,f_0>0,C>0,L>0);
V10A:cabs(V10); /*Амплитуда выходного сигнала в заданной частотной точке*/
V10P:carg(V10); /*Фаза выходного сигнала в заданной частотной точке*/
В итоге получается следующий ответ

Подставим численные параметры в данные выражения и рассчитаем получившуюся амплитуду и фазу выходного синусоидального сигнала, например, на частоте 2 кГц f₀=2e3 и фазой входного сигнала -40 эл. град. Кратко входной сигнал можно записать как 1∠-40°
Для перевода в радианы умножим на π/180, чтобы выразить %pi значением используется команда float. Следует отметить что %pi в Maxima выглядит как π, но при этом имеет численный атрибут.
/*Задание численных параметров*/
Num:[R1=1,R2=100,R3=30,L=1e-3, C=10e-6,ψ_0=float(-40/180*%pi),A=1,f_0=2e3];
/*Получение значения амплитуды*/
V11A:float(V10A),Num;
/*Получение значения фазы*/
V11P:float(V10P),Num;
/*из радиан в градусы*/
float((V11P)*180/%pi);
В итоге получаются следующие значения: амплитуда (выражение V11A) 1.2736 В, величина в радианах составляет (выражение V11P) -3.06591, что соответствует в градусах -175.66°. Таким образом, выходное напряжение можно записать как 1.27∠-176°, что и является искомым ответом. Данный метод можно использовать для любой схемы или произвольной передаточной функции.
В целях проверки значения проведём дополнительное сравнительное моделирование.
В KiCAD проведём моделирование схемы с использованием Spice-модели, собранной как показано выше. Следует отметить, что обязательно использование символа GND и общей точки для решения без расхождения.


Построим теперь те же самые характеристики в Maxima.
/*Подставить численные значения в переходную характеристику*/
V12:V7,Num;
ratprint:false;/*чтобы избежать предупреждение о преобразовании в рациональные числа*/
/*Найти обратное преобразование Лапласа от переходной характеристики*/
V13:float(ilt(V12,p,t));
/*полюса передаточной функции - корни знаменателя*/
rectform(float(solve(denom(V12),p)));
Выводом будут следующие выражения. Обратить внимание что 1/2.718...^t это exp(-t)

Важно отметить, что если если p[i] - произвольный корень знаменателя (полюс), то:
1/Re(p[i]) - постоянная времени составляющей переходного процесса (секунда) или величина обратная действительной части корня
Im(p[i]) - круговая частота переходного процесса (радиан•с⁻¹) или величина мнимой части корня, а Im(p[i])/(2π) - циклическая частота составляющей переходного процесса (Гц)
/*Подстановка численных значений во входной сигнал*/
V14:V2,Num;
/*Подстановка полученных значений амплитуды и начальной фазы в выходной сигнал*/
V15:V11A*sin(2*%pi*f_0*t+V11P),Num;
В итоге имеем два сигнала - входной 1∠-0.698 (радиан) и выходной 1.274∠-3.066, с подставленными и найденными ранее численными параметрами
1•sin(4000.0•π•t-0.6981317007977318) - вход, 1.2736•sin(4000.0•π•t-3.06591) - выход в установившемся режиме
/*построить график*/
wxplot2d([V13,V14,V15],[t,0,0.003],[legend,false]),wxplot_size=[480,320];

Далее построим частотные характеристики. Для этого необходимо подставить p = j•2•π•f в передаточную функцию для перехода к комплексно-частотной характеристики, содержащей мнимую и действительную части от варьируемой частоты.
/*Переход в комплексно-частотную область для любой частотной точки f*/
V16:p=%i*2*%pi*f;
/*Подстановка в подстановку: задаём ЭДС формально равное единице
для получения передаточной функции*/;
V17:sln,[E1=A,V16];
/*Подстановка численных параметров*/
V18:V17,Num;
/*Модуль */
V18A:float(cabs(V18));
/*Аргумент*/
V18P:float((carg(V18))/%pi*180);
/*Построение графика АЧХ*/
wxplot2d(V18A,[f,1,100e3],[legend,false],[logx,true],[logy,true]),wxplot_size=[480,320];
/*Построение графика ФЧХ*/
wxplot2d(V18P,[f,1,100e3],[legend,false],[logx,true]),wxplot_size=[480,320];
В результате получаются следующие графики, чуть отличающиеся от моделирования в SPICE. Обратить внимание на количество точек "перегиба" и наклона графиков, соответствующих производным, а также асимптоты. По всей видимости, численная модель имеет некоторые особенности, что требует дальнейших исследований.

Напоследок чтобы проверить схему можно рассмотреть установившийся режим для передаточной функции на постоянном токе, подставляя p=0 в выражение sln командой factor(sln),p=0 можно получить E1•R3/(R3+R1) - выражение по правилу делителя, при этом индуктивность становится закороткой а ёмкость уходит в разрыв.
Общий скрипт
Скрытый текст
kill(all);
eq:[
/*Правило Кирхгофа для напряжений контуров*/
-E1 + iR1*R1+iL*p*L+iC/(p*C), /*Уравнение по первому контуру I*/
+iL*p*L-iR2*R2, /*Уравнение по второму контуру II*/
-iC/(p*C)+iR3*R3, /*Уравнение по третьему контуру III*/
/*Правило Кирхгофа для токов узлов*/
iR1-iR2-iL, /*Уравнение по первому узлу (1)*/
iL-iC-iR3, /*Уравнение по первому узлу (2)*/
Un=iR3*R3 /*Вычисляемая переменная состояния - выход*/
];
/*решаем систему уравнений eq относительно выбранных переменных состояния*/
sln:Un,solve(eq,[iR1,iR2,iR3,iC,iL,Un]);
/*Для постоянного тока - постоянный уровень U*/
V1:U;
/*Для переменного тока - синусоидальная величина с амплитудой A*/
V2:A*sin(2*%pi*f_0*t+ψ_0);
/*Преобразование Лапласа от постоянной*/;
V3:laplace(V1,t,p);
/*Преобразование Лапласа от синуса*/
V4:laplace(V2,t,p);
/*Магический коэффициент*/
V5:(p^2+4*%pi^2*f_0^2)/(2*%pi*f_0);
/*Произведение при заданной форме входного сигнала*/
V6:V5*V4;
/*Переходная характеристика*/
V7:sln,E1=V4;
/*Переходная характеристика с коэффициентом*/
V8:factor(V7*V5);
/*Значение оператора p в заданной точке и переход в КЧХ*/
V9:p=%i*2*%pi*f_0;
/*Значение выходного сигнла в заданной комплексно-частотной точке*/
V10:V8,V9;
/*Предположение о неотрицательности параметров*/
assume(A>0,R1>0,R2>0,R3>0,f_0>0,C>0,L>0);
V10A:trigsimp(cabs(V10)); /*Амплитуда выходного сигнала в заданной частотной точке*/
V10P:carg(V10); /*Фаза выходного сигнала в заданной частотной точке*/
/*Задание численных параметров*/
Num:[R1=1,R2=100,R3=30,L=1e-3, C=10e-6,ψ_0=float(-40/180*%pi),A=1,f_0=2e3];
/*Получение значения амплитуды*/
V11A:float(V10A),Num;
/*Получение значения фазы*/
V11P:float(V10P),Num;
/*из радиан в градусы*/
float((V11P)*180/%pi);
/*Подставить численные значения в переходную характеристику*/
V12:V7,Num;
/*Найти обратное преобразование Лапласа от переходной характеристики*/
ratprint:false;/*чтобы избежать предупреждение о преобразовании в рациональные числа*/
V13:float(ilt(V12,p,t));
/*полюса передаточной функции - корни знаменателя*/
rectform(float(solve(denom(V12),p)));
/*Подстановка численных значений во входной сигнал*/
V14:V2,Num;
/*Подстановка полученных значений амплитуды и начальной фазы в выходной сигнал*/
V15:V11A*sin(2*%pi*f_0*t+V11P),Num;
wxplot2d([V13,V14,V15],[t,0,0.003],[legend,false]),wxplot_size=[480,320];
/*Переход в комплексно-частотную область для любой частотной точки f*/
V16:p=%i*2*%pi*f;
/*Подстановка в подстановку: задаём ЭДС формально равное единице
для получения передаточной функции*/;
V17:sln,[E1=A,V16];
/*Подстановка численных параметров*/
V18:V17,Num;
/*Модуль */
V18A:float(cabs(V18));
/*Аргумент*/
V18P:float((carg(V18))/%pi*180);
/*Построение графика АЧХ*/
wxplot2d(V18A,[f,1,100e3],[legend,false],[logx,true],[logy,true]),wxplot_size=[480,320];
/*Построение графика ФЧХ*/
wxplot2d(V18P,[f,1,100e3],[legend,false],[logx,true]),wxplot_size=[480,320];
Комментарии (8)
EvgenyVB
17.07.2025 06:20По всей видимости, численная модель имеет некоторые особенности, что требует дальнейших исследований.
Я получил уравнение цепи в программе Fastmean, и у меня результат не совпал с Вашим. Видимо у Вас ошибка на этапе составления и решения системы уравнения.
P.S. Последний раз руками считал, когда был студентом. Своим коллегам на работе я всегда говорю, что символьные вычисления по схеме необходимо делать в автоматическом режиме во избежание ошибок.
Получение уравнения в программе Fastmean Аналитический расчет в Mathcad EvgenyVB
17.07.2025 06:20Прощу прощения, возможно я ошибся. Завтра еще перепроверю. Только сейчас обратил внимание, что в Fastmean в знаменателе стоит U_1. Это не входное напряжение U1, а скорее всего потенциал узла 1, который здесь непонятно где.
TimurZhoraev Автор
17.07.2025 06:20Спасибо, Евгений! Совершенно верно. Пусть ошибка останется в публикации, как тренировка по составлению уравнений. Действительно, для второго узла необходимо было записать уравнение
Ошибка в системе - найдено Ну и конечно же всё получается как надо.
Тем не менее, метод подходит даже для "ошибочных схем". Для исправленного варианта получается предложенным методом амплитуда в точке 2 кГц 1.1484, фаза (результирующая!) -162°. SPICE модель даёт -121°, так как используется отношение выхода ко входу, при этом теряется фаза исходного сигнала, разница как раз составляет 40°. То есть при наличии параметра фазы во входном сигнале симулятор при анализе ФЧХ даст характеристику, как если бы начальная фаза входного сигнала была нулевой. Поправьте если это не так. Хотя лучше было бы если Probe в конкретной точке показывал полную фазу с учётом фазы входной ЭДС.
Схема нужна была для того чтобы сформировать некоторую передаточную функцию и сравнить это с моделью.
По символическому анализу также можно найти SNAP, SymPyCAP, Sapwin, ELABorate, и другие скрипты для вытаскивания схемы из нетлистов.EvgenyVB
17.07.2025 06:20То есть при наличии параметра фазы во входном сигнале симулятор при анализе ФЧХ даст характеристику, как если бы начальная фаза входного сигнала была нулевой.
Да, совершенно верно, во всех симуляторах так.
U235U235
Вообще-то циклическая и угловая частота это синонимы. В Гц измеряется просто частота.
TimurZhoraev Автор
Угловая - это скорость изменения угла в рад/с, циклическая - частота соответствующая одному циклу (периоду), поэтому в Гц. Ранее в книгах писали "Megacycles per second" MCps или тоже самое что МГц. Может быть circle и cycle в этом случае их сделали синонимами. Поэтому, чтобы не путаться, в данном случае явно было принято разделить круговую как рад/с и циклическую в Гц в пределах области видимости публикации. Кстати в SPICE-моделях m и M - это милли, meg, MEG - это мега, очень часто на этом возникают ошибки.
U235U235
Советую все-таки посмотреть определение циклической частоты в справочнике или энциклопедии.
TimurZhoraev Автор
Вы совершенно правы, что нужно использовать линейную частоту вместо синонимов круговая-циклическая. Однако, небольшой экскурс даёт повод для сомнений, зачем множить сущности, если достаточно круговой. И тут можно выяснить, что циклическая определяется как заданное количество циклов за определённое время, в частности, по умолчанию, за 2π секунд, если не оговорено особо, но никто не запрещает, по всей видимости, это время задать самостоятельно. На это подтолкнул прямой перевод и ключевая фраза "Cyclic frequency", что даёт "Cyclic frequency refers to the frequency at which a signal's statistical properties repeat themselves, also known as a cyclostationary signal" и даже обозначается как α, однако, имеет отношение скорее к статистике см. "Cyclic Frequency in Signal Processing". Вообщем это не баг а фича для размышлений.