تحلیل AC مدارهای الکترونیکی با استفاده از NgSpice و بررسی عملی PySpice
تحلیل AC مدارهای الکترونیکی با استفاده از NgSpice و بررسی عملی PySpice
اطلاعات نویسنده
نام: نیایش اعظمی
وابستگی: گروه مهندسی کامپیوتر، دانشگاه فردوسی مشهد
تماس: niayesh.azami24@gmail.com
فهرست مطالب
- 1. مقدمه
- 3. تحلیل AC در Ngspice
- 4. تعریف بهره و فاز در تحلیل AC
- 5. استفاده از PySpice برای تحلیل AC در مدارها
- 6. نتیجهگیری
- فهرست منابع
1. مقدمه
در طراحی مدارات آنالوگ، شبیهسازی تنها زمانی ارزشمند است که به تصمیمگیری عملی منجر شود. یکی از مهمترین ابزارهای شبیهسازی در این حوزه، تحلیل AC است که امکان بررسی پاسخ فرکانسی، بهره، فاز، پایداری و نویز مدار را فراهم میکند. با وجود منابع متعدد تئوری، بسیاری در اجرای عملی این تحلیلها و تفسیر خروجیهای شبیهسازها با چالش مواجه هستند.
این پروژه با هدف ارائهی یک راهنمای عملی برای تحلیل AC در NgSpice تدوین شده است. تمرکز اصلی بر اجرای دستورات واقعی، مثالهای کاربردی و تفسیر نتایج شبیهسازی است.
در این پروژه NgSpice بهعنوان هستهی اصلی شبیهسازی انتخاب شده و در کنار آن، PySpice بهصورت کاربردی بررسی میشود تا میزان دسترسی آن به قابلیتهای تحلیل AC مشخص گردد. برای جلوگیری از پراکندگی مطالب و افزایش اثربخشی آموزشی، دامنهی پروژه تنها به تحلیل AC محدود شده است.
2. مسئله، ابزار و رویکرد پروژه
در طراحی مدارهای الکترونیکی، یکی از مهمترین نیازها، تحلیل رفتار مدار در حوزه فرکانس است. در بسیاری از مدارها مانند تقویتکنندهها، فیلترها و منابع تغذیه، عملکرد مدار به تغییرات فرکانس ورودی وابسته بوده و تحلیل زمانی بهتنهایی نمیتواند این رفتار را بهطور کامل نشان دهد. تحلیل AC بهطور خاص همانچیزی است که رفتار مدار نسبت به فرکانسهای مختلف را مشخص میکند و نمودارهایی مانند Bode Plot را به دست میدهد که برای طراحی و بهینهسازی مدار ضرورت دارد.
برای انجام این تحلیل در شبیهسازی، به ابزاری نیاز است که هم تحلیل فرکانسی دقیق ارائه دهد و هم در محیط واقعی مهندسی قابل اجرا باشد. NgSpice یکی از معتبرترین ابزارهای شبیهسازی مدار مبتنی بر SPICE است که قابلیتهای گستردهای در انواع تحلیلها از جمله تحلیل AC ارائه میدهد. این شبیهساز، نسخهای توسعهیافته از SPICE با پشتیبانی از تحلیل خطی در حوزه فرکانس، نویز، pole-zero و سایر تحلیلهای مرتبط است.
استفاده مستقیم از دستورات NgSpice برای اجرای پروژههای تحلیل AC باعث میشود خواننده بداند چگونه در سطح واقعی و مهندسی، رفتار مدار خود را بدون نیاز به رابطهای گرافیکی تحلیل کرده و نتایج را تفسیر کند. این رویکرد، یادگیری را از حالت صرفاً تئوری و آکادمیک خارج کرده و توانایی عملی کاربر را در اجرای تحلیلهای حرفهای افزایش میدهد.
در کنار NgSpice، PySpice یک کتابخانه در زبان برنامهنویسی Python است که بهعنوان لایهی واسط بین کاربر و شبیهساز عمل میکند. PySpice به کاربر امکان میدهد نتلیستهای SPICE را با ساختار شیءگرا تعریف کند، شبیهسازی را اجرا نموده و خروجیها را در محیط Python پردازش و ترسیم کند. با این حال، PySpice صرفاً رابطی برای مدیریت NgSpice است و بسیاری از قابلیتهای پیشرفتهی تحلیل AC در سطح NgSpice باید مستقیماً توسط دستورات SPICE فراخوانی شوند یا از طریق PySpice به NgSpice منتقل شوند.
2.1. نحوه نصب و استفاده از NgSpice در طول پروژه (با کمک VS Code)
برای اینکه تحلیلهای AC این پروژه بهصورت عملی و قابل تکرار انجام شوند، لازم است NgSpice بهدرستی نصب و اجرا شود. از آنجا که NgSpice یک شبیهساز مبتنی بر خط فرمان است و محیط گرافیکی اختصاصی ندارد، استفاده از یک ویرایشگر کد مناسب مانند Visual Studio Code (VS Code) باعث میشود فرآیند نوشتن نتلیست، اجرای شبیهسازی و بررسی خروجیها بسیار سادهتر و قابل فهمتر شود. در ادامه، مراحل نصب و استفاده از NgSpice توضیح داده میشود.
2.2. نصب NgSpice
در ویندوز (Windows):
به وبسایت رسمی NgSpice مراجعه کنید.
نسخه مناسب Windows (معمولاً فایل نصب با پسوند .exe) را دانلود کنید.
فایل نصب را اجرا کرده و مراحل نصب را با تنظیمات پیشفرض ادامه دهید.
پس از پایان نصب، مسیر نصب NgSpice (مثلاً C:\Spice\bin) معمولاً به متغیر محیطی PATH اضافه میشود.
برای اطمینان، میتوانید در Command Prompt دستور زیر را اجرا کنید:
ngspice -v
اگر نسخه NgSpice نمایش داده شود، نصب با موفقیت انجام شده است.
در لینوکس (Ubuntu/Debian):
در این حالت NgSpice معمولا از طریق مخازن رسمی قابل نصب است:
sudo apt update
sudo apt install ngspice
در macOS:
در صورت استفاده از Homebrew:
brew install ngspice
2.3. نصب و آمادهسازی VS Code
نرم افزار VS Code بهعنوان محیط ویرایش نتلیستها در این پروژه استفاده میشود: VS Code را از سایت رسمی Microsoft دانلود و نصب کنید. پس از اجرا، پیشنهاد میشود افزونههای زیر نصب شوند: Code Runner (برای اجرای دستورات ساده) Plain Text / Markdown Tools (برای خوانایی بهتر نتلیستها) در صورت تمایل، افزونه Spice syntax highlighting برای رنگبندی دستورات SPICE VS Code بهخودیخود شبیهساز نیست، اما محیطی بسیار مناسب برای نوشتن و مدیریت فایلهای .cir یا .sp فراهم میکند.
2.4. ساخت فایل Netlist در VS Code
برای اجرای NgSpice، مدار باید بهصورت یک فایل متنی (Netlist) تعریف شود:
در VS Code یک پوشه جدید برای پروژه بسازید (مثلاً AC_Analysis_Project).
داخل پوشه، یک فایل جدید با پسوند .cir یا .sp ایجاد کنید (مثلاً rc_ac.cir).
نتلیست مدار را مطابق مثالهای پروژه داخل فایل بنویسید، مثلاً:
V1 in 0 AC 1
R1 in out 10k
C1 out 0 100n
.ac DEC 10 1 100k
.control
plot vdb(out)
plot vp(out)
.endc
.end
2.5. اجرای NgSpice از داخل VS Code
برای اجرای شبیهسازی میتوان از ترمینال داخلی VS Code استفاده کرد:
ترمینال را باز کنید.
مطمئن شوید مسیر ترمینال روی پوشه پروژه قرار دارد.
دستور زیر را اجرا کنید:
ngspice rc_ac.cir
پس از اجرا NgSpice فایل Netlist را میخواند و تحلیل AC انجام میشود. در صورت وجود دستورات plot، نمودارهای Bode (بهره و فاز) نمایش داده میشوند. در صورت استفاده از print یا meas، خروجیها در ترمینال نشان داده میشوند.
با توجه به گستردگی تحلیلهای ممکن در شبیهسازی مدار، این پروژه صرفاً بر تحلیل AC در NgSpice متمرکز است؛ زیرا این تحلیل، کاربردیترین و در عین حال یکی از پیچیدهترین تحلیلهای حوزه فرکانس است و تسلط بر آن بهطور مستقیم مهارت عملی طراح را افزایش میدهد. سایر انواع تحلیل مانند DC، Transient یا تحلیل نویز در این پروژه بررسی نمیشوند تا تمرکز بر مهارت عملی تحلیل فرکانسی حفظ شود.
3. تحلیل AC در Ngspice
3.1. معرفی تحلیل AC و هدف از انجام آن
تحلیل AC (فرکانسی) روشی است برای بررسی رفتار مدارها در پاسخ به سیگنالهای متناوب سینوسی. در این تحلیل، پاسخ مدار به فرکانسهای مختلف بررسی میشود تا بفهیم که امپدانسهای اجزا و برداشت ولتاژ و جریان در نقاط مختلف مدار چگونه تغییر میکنند. به عبارت دیگر، با استفاده از تحلیل AC میتوان معیارهایی همچون بهره (gain) و تغییر فاز (phase shift) مدار را در حوزه فرکانس محاسبه کرد. این امر برای طراحی فیلترها، تقویتکنندهها و شبکههای مخابراتی و پردازش سیگنال ضروری است. بهطور خلاصه، تحلیل AC مهمترین روش در SPICE برای یافتن پاسخ فرکانسی مدار است که نشان میدهد مدار چگونه به سیگنالهای فرکانس متفاوت واکنش میدهد.
3.2. ساخت نتلیست واقعی برای تحلیل AC
در Ngspice مانند دیگر شبیهسازهای SPICE، مدار باید به صورت یک نتلیست متنی تعریف شود. در نتلیست، هر مؤلفه با یک حرف اول مشخص میشود (مثلاً R برای مقاومت، C برای خازن، L برای سلف، V و I برای منابع مستقل). مثلاً برای تعریف یک مقاومت از فرم زیر استفاده میشود:
R1 node+ node- <ارزش مقاومت>
که در آن node+ و node- دو پایانه مقاومت و <ارزش مقاومت=""> مقدار آن بر حسب اهم است.ارزش>
مشابه آن، خازن با دستور زیر تعریف میشود:
C1 node+ node- <ظرفیت> [IC=شرایطاولیه]
که مقدار ظرفیت به فاراد داده میشود.
مهمترین نکته در تحلیل AC این است که باید حداقل یک منبع مستقل دارای مولفه AC در مدار وجود داشته باشد؛ در غیر این صورت تحلیل بیمعنی خواهد بود. برای تعریف منبع ولتاژ AC مستقل، از عبارتی شبیه مثال زیر استفاده میکنیم:
V1 in 0 AC 1
که در اینجا منبع ولتاژ با نام V1 بین گره in و زمین (گره ۰) قرار دارد، دامنه AC آن ۱ ولت است. (در عمل میتوان از موجسازهای سینوسی یا پلهای نیز استفاده کرد و مقدار AC را به عنوان ضریب کوچک سیگنال وارد نمود.)
برای اندازهگیری پاسخ مدار در تحلیل AC، معمولاً گره یا المان خروجی را مشخص کرده و از دستوراتی مانند .
print ac v(<node>).
یا
plot ac v(<node>).
استفاده میکنیم. به عنوان نمونه، نتلیست مثال زیر، یک مدار ساده RC را نشان میدهد (منبع AC با دامنه 12 ولت) و تحلیل AC خطی بر آن اجرا میکند:
* مثال: مدار RC ساده
V1 1 0 AC 12 SIN(0 12 1k)
R1 1 2 30k
C1 2 0 100u
.ac LIN 100 10 10k
.print ac v(1,2) v(2)
.end
(این مثال از allaboutcircuits گرفته شده است.) در نتلیست بالا، پس از .ac میتوانیم با دستور .print یا .plot خروجیهای مورد نظر را مشاهده کنیم. به عنوان مثال، v(1,2) اختلاف ولتاژ بین دو گره را نمایش میدهد و v(2) ولتاژ گره 2 نسبت به زمین است. همچنین در Ngspice میتوان بخشهای تعاملی را در یک بلوک .
control … .endc
قرار داد تا تحلیل و دستور رسم نمودار درون نتلیست اجرا شود (مانند مثال در بخش بعدی).
(بلوک کنترلی در NgSpice که بین دستورات .control و .endc قرار میگیرد، برای اجرای دستورات تعاملی و کنترلی پس از انجام شبیهسازی استفاده میشود. این دستورات شامل رسم نمودارها (plot)، چاپ مقادیر عددی (print)، اندازهگیری پارامترها (meas) و حتی اجرای چندین تحلیل پشتسرهم است. برخلاف دستورات اصلی مدار که ساختار فیزیکی و نوع تحلیل را مشخص میکنند، بلوک کنترلی مستقیماً روی نحوه پردازش و نمایش نتایج اثر میگذارد. قرار دادن این دستورات درون نتلیست باعث میشود شبیهسازی بهصورت خودکار اجرا شده و نتایج موردنظر بدون نیاز به ورود دستی دستورات در محیط تعاملی NgSpice تولید شوند؛ موضوعی که بهویژه در پروژههای آموزشی و تحلیلهای تکرارشونده اهمیت زیادی دارد.)
3.3. دستور .ac و انواع سوئیپ (lin, dec, oct)
برای انجام تحلیل AC در Ngspice از دستور .ac استفاده میشود. قالب عمومی این دستور به شکل زیر است:
.ac [LIN|DEC|OCT] <فرکانس_پایان> <فرکانس_شروع> <تعداد نقاط>
که پارامتر اول نوع سوئیپ را تعیین میکند: DEC به معنی سوئیپ دهدهی (نقطه به نقطه در هر دهه)، OCT سوئیپ اکتوو (نقطه به نقطه در هر اکتاو) و LIN سوئیپ خطی (تعداد کل نقاط) است. مثلاً
.ac DEC 10 1 10K
یعنی ۱۰ نقطه در هر دهه، از ۱Hz تا ۱۰kHz. در مقابل،
.ac LIN 100 10 10k
یعنی ۱۰۰ نقطه خطی از ۱۰Hz تا ۱۰kHz. همانطور که مستند Ngspice بیان میکند، در سوئیپ دهدهی (DEC)، ND تعداد نقاط در هر دهه را مشخص میکند، در سوئیپ اکتاو NO تعداد نقاط در هر اکتاو و در خطی NP تعداد کل نقاط را تعیین میکند.
هر یک از این روشها مزایا و معایبی دارد:
سوئیپ دهدهی (DEC): معمولترین روش برای رسم نمودار Bode است؛ چون تغییرات لگاریتمی در فرکانس را پوشش میدهد و گسترهی وسیعی از فرکانس را بهطور متناسب نمایش میدهد. این روش برای مشاهدهی گذارهای پهنباند مناسب است.
سوئیپ اکتاو (OCT): کاربرد کمتری دارد؛ هر اکتاو معادل دو برابر شدن فرکانس است و برای بررسی تغییرات در نسبتهای دو برابر (1→2→4…) به کار میرود. مثلاً اگر در هر اکتاو ۲۰ نقطه قرار دهیم، از ۱Hz تا 2Hz ۲۰ نمونه خواهیم داشت. این روش بین سوئیپ دهدهی و خطی است.
سوئیپ خطی (LIN): نقاط بهصورت یکسان در فاصله خطی قرار میگیرند. اگر بازه فرکانس گسترده باشد، برای داشتن دقت مناسب باید تعداد نقاط زیادی انتخاب کرد که زمان محاسبه را زیاد میکند. این روش برای بازههای فرکانسی باریک یا تمرکز روی بخش مشخصی از طیف مناسب است.
در بخش Analysis Options آورده شده:
«فیلد
مثال: برای سوئیپ دهدهی از ۱Hz تا ۱MHz با ۱۰ نقطه در هر دهه، مینویسیم:
.ac DEC 10 1 1MEG
و برای سوئیپ خطی از ۱۰Hz تا 100kHz با 100 نقطه:
.ac LIN 100 10 100k
3.4.انتخاب بازه فرکانسی مناسب
انتخاب محدوده فرکانسی مناسب برای تحلیل AC بسیار مهم است. به طور کلی بازه باید شامل «باند مورد نظر» مدار باشد؛ یعنی حدود فرکانسهایی که تغییر رفتار مدار در آنها اتفاق میافتد (مانند فرکانس قطع فیلتر یا نقاط رزونانس). نکات زیر را در نظر بگیرید:
شروع از فرکانس غیرصفر: همانطور که گفته شد، در سوئیپ لگاریتمی (dec، oct) شروع از صفر مجاز نیست. معمولاً از چند هرتز (مثلاً ۱Hz) یا حداقل یک دهه زیر فرکانس عمل انتخاب میشود. در عمل یک یا چند نقطه در دهه اول (مثلاً ۱Hz تا 10Hz) قرار دهید تا رفتار در باند پایین مشخص شود.
پایان فرکانس فراتر از حد موردنظر: برای اینکه انتهای نمودار را هم داشته باشیم، فرکانس پایان باید چند ده برابر فرکانسهای بحرانی مدار باشد. مثلاً در یک فیلتر پایینگذر با فرکانس قطع ۱kHz، میتوان بازه را تا چند ده کیلوهرتز یا بالاتر (مثلاً 100kHz) ادامه داد تا شیب افت و تمام باند جذب پوشش داده شود.
عدم انتخاب بازه بسیار باریک: اگر بازه شروع خیلی نزدیک یا پایان خیلی نزدیک به فرکانس قطع انتخاب شود، ممکن رفتار کلی از دست برود. مثلاً صرفاً 100Hz تا 10kHz ممکن است کاملاً پهنایباند پایین یا بالا را نشان ندهد.
به عنوان مثال، اگر یک فیلتر پایینگذر RC دارای فرکانس قطع حدود ۱۶۰Hz باشد، یک انتخاب مناسب میتواند شروع از ۱۰Hz و پایان در 10kHz باشد. انتخاب نامناسب میتواند مثلاً شروع از 100Hz (از افت اولیه میگذرد) و پایان در 2kHz (در حد شروع افت اولیه) باشد، که نمودار کاملی نمیدهد. همچنین همانطور که اشاره شد، start را حتماً بزرگتر از صفر قرار دهید.
3.5. رسم و تفسیر نمودارهای Bode (بهره و فاز)
س از اجرای شبیهسازی، میتوان در Ngspice نمودار بهره و فاز (نمودار Bode) را رسم کرد. در Ngspice توابع آماده برای این کار وجود دارد: توابع vdb() و vp() (یا ph()) خروجی ولتاژ را در قالب دامنه (دسیبل) و فاز میدهند. به طور مثال دستور زیر نمودار بهره (بر حسب dB) و فاز (بر حسب رادیان) ولتاژ گره out را رسم میکند:
.control
plot vdb(out)
plot vp(out)
.endc
خروجی تابع vdb(out) برابر با log 10 (∣V(out)∣)20 و vp(out) فاز ولتاژ نسبت به زمین را بر حسب رادیان میدهد. توجه کنید که اگر به اشتباه از دستور ساده plot v(out) استفاده کنیم، SPICE تنها قسمت حقیقی (Real) مقدار ولتاژ پیچیده را نمایش میدهد که معمولاً مورد نظر نیست. برای رسم فاز بر حسب درجه نیز میتوان مقدار vp(out) را در 180/π ضرب کرد.
همانطور که در شکل بالا دیده میشود، نمودار Bode شامل دو محور است: بهره (یا ولتاژ خروجی) به صورت لگاریتمی (در دسیبل) و فاز بین ورودی و خروجی. در ناحیه پایین فرکانسها معمولاً بهره ثابت است و فاز نزدیک صفر (برای فیلتر پایینگذر)، سپس در فرکانسهای بالاتر بهره افت میکند و فاز منفی میشود. نحوه تفسیر نمودار Bode در تحلیل مدار بسیار مهم است: به کمک آن میتوانیم ثابت زمانی مدار، فرکانس قطع (نقطه 3dB)، مقدار بهره پهنباند و تغییر فاز در هر فرکانس را تعیین کنیم.
3.6. خطاهای رایج و نکات Debug
در تحلیل AC ممکن است با چند خطای متداول مواجه شویم که در زیر توضیح داده شده است:
منبع AC تعریف نشده یا با مقدار صفر: اگر منبع ولتاژ یا جریان مستقل را بدون مولفه AC تعریف کنیم، یا مقدار AC 0 بدهیم، شبیهساز برای تحلیل AC ورودی ندارد و خروجیها صفر یا بیمعنی خواهد بود. حتماً در تعریف منبع ولتاژ/جریان از بخش AC <مقدار> استفاده کنید.مقدار>
عدم تنظیم نقطه کاری DC مناسب: SPICE تحلیل AC را حول نقطه کاری DC مدار انجام میدهد. اگر مدار فعال (مانند ترانزیستور یا آپامپ) داشته باشیم و نقطه کاری روی ریل تغذیه یا خارج محدوده خطی باشد، نتایج نادرست میشود. مثلاً در یک تقویتکننده اگر منبع AC بدون آفست DC باشد (مثلاً SINE(0 10mV 1k))، نقطه کاری روی ۰ ولت است و ممکن است آپامپ یا ترانزیستور در ناحیه اشباع باشد. در چنین حالتی تحلیل AC خروجی «غلط» خواهد بود. راه حل این است که ولتاژ DC مناسب بدهیم (مثلاً منبع AC را با آفست DC برابر میانریز تغذیه تعریف کنیم) یا از منبع دو قطبی استفاده کنیم. به عنوان مثال، اگر آفست DC را تغییر دهیم (مثلاً SINE(1 10mV 1k))، مدار در ناحیه خطی قرار میگیرد و تحلیل AC معتبر خواهد شد.
استفاده از دستور رسم نامناسب: اگر در بخش کنترل از دستورات plot یا print اشتباه استفاده کنیم، خروجی قابل تفسیر نخواهد بود. به عنوان نمونه، دستور plot v(node) فقط مولفه حقیقی سیگنال را نمایش میدهد نه دامنه آن؛ برای نمایش در واحد دسیبل باید از vdb(node) یا vm(node) استفاده کرد. همچنین دقت کنید که تعداد خروجیها در یک .plot یا .print نباید بیش از ۸ عدد باشد (در صورت نیاز از چندین کارت استفاده کنید). ایراد در سوئیپ فرکانسی: انتخاب بازه یا نوع سوئیپ اشتباه (مثلاً قرار دادن start=0 در سوئیپ لگاریتمی) باعث خطا میشود. همچنین اگر تعداد نقاط بسیار کم باشد، نمودارها ناپیوسته و غیر دقیق خواهند بود.
با بررسی خطاهای لاگ و مشاهده نمودارهای اولیه، میتوان اغلب مشکلات فوق را شناسایی و برطرف کرد. استفاده از گزینههایی مانند xlog (برای مقیاس لگاریتمی محور x) و setlimits برای کنترل محدوده نمودار نیز کمککننده است.
3.7. مثالهای واقعی و کاربردی
در این بخش چند مثال عملی از تحلیل AC و نتلیستهای مربوط آورده شده است:
فیلتر پایینگذر RC: فرض کنید یک مقاومت ۱۰kΩ و خازن 100nF به صورت سری داشته باشیم (گذر پایین اول مرتبه) و منبع ولتاژ AC ورودی دامنه ۱V قرار دهیم. نتلیست نمونه به صورت زیر است:
V1 in 0 AC 1 ; منبع AC با دامنه 1V
R1 in out 10k ; مقاومت 10k بین ورودی و گره خروجی
C1 out 0 100n ; خازن 100nF بین خروجی و زمین
.ac DEC 100 1 100k
.control
plot vdb(out) ; بهره بر حسب dB در گره خروجی
plot vp(out) ; فاز (radian) در گره خروجی
.endc
.end
در این مثال فرکانس قطع نظری برابر 1/(2πRC)≈159 هرتز است. پس از شبیهسازی، نمودار Bode نشان میدهد در فرکانسهای زیر ۱۰۰Hz بهره تقریباً ۰dB (نزدیک ۱) است و پس از حدود ۱۰۰–۲۰۰Hz شروع به افت میکند. شیب افت در ناحیه بالا حدود ۲۰dB/دهه است. فاز خروجی در پایین فرکانس نزدیک صفر و در فرکانسهای بالا تا حدود −90 ∘ تغییر میکند. این پاسخ با نتایج تحلیلی و تجربی فیلتر پایینگذر اول مرتبه مطابقت دارد.
در پایان، با مرور نتایج فوق میتوانید به صورت مستقل مدارهای مختلف را با تحلیل AC شبیهسازی و عملکرد فرکانسی آنها را تفسیر کنید. همیشه خروجیهای بدستآمده را با انتظارات تئوری مقایسه کنید و در صورت نیاز، تنظیمات مانند محدوده فرکانس یا تعداد نقاط را تصحیح کنید تا پاسخهای دقیق و معناداری بدست آید.
4. تعریف بهره و فاز در تحلیل AC
در تحلیل AC، بهره مدار معیاری از نسبت دامنه سیگنال خروجی به ورودی است و معمولاً به صورت دسیبل (20·log₁₀|V_out/V_in|) گزارش میشود. فاز مدار نشانگر اختلاف زاویهای (زمانی) بین سیگنال خروجی و ورودی است. به عبارت دیگر، اگر سیگنال خروجی نسبت به ورودی مقداری تاخیر یا پیشروی داشته باشد، این مقدار بر حسب درجه بیان میشود. در خروجی تحلیل AC اسپایس، ولتاژها بهصورت اعداد مختلط (دامنه و فاز) ارائه میشوند؛ بنابراین برای رسم نمودار بود معمولاً از تابع vdb(node) برای نمایش بهره (در دسیبل) و vp(node) یا vm(node) برای نمایش فاز و دامنه استفاده میشود.
4.1. استخراج بهره و فاز در NgSpice
برای استخراج بهره و فاز از نتایج شبیهسازی AC در NgSpice میتوان از توابع داخلی زیر استفاده کرد: vdb(x) برابر با 20 log 10 (∣x∣) (بهره به دسیبل)، vm(x) برابر با بزرگی (مقدار مطلق) سیگنال x، و vp(x) برابر با فاز سیگنال x بر حسب رادیان. به طور مثال، فرمان
plot vdb(out)
plot vp(out)
ر ngspice نمودار بهره (در واحد دسیبل) و فاز (در رادیان) گره خروجی out را رسم میکند. اگر نیاز باشد فاز به درجه تبدیل شود، میتوان در .control چنین نوشت:
phase = 180/PI * vp(out)
که مقدار vp(out) را به درجه تبدیل کرده و در متغیر phase ذخیره میکند. در نتیجه، با استفاده از توابع vdb() و vp() میتوان نمودار Bode بهره و فاز را بهدست آورد و تحلیل فرکانسی مدار را بررسی کرد.
4.2. حاشیه فاز و حاشیه بهره (Phase/Gain Margin)
حاشیه فاز و حاشیه بهره معیاری از پایداری سیستم حلقه بسته هستند. «حاشیه فاز» برابر است با اختلاف فاز سیستم در فرکانس گذر بهره (جایی که نمودار بهره 0 دسیبل را قطع میکند) تا ۱۸۰- درجه. به عبارت دیگر، در فرکانس ω گیوت (جایی که |G(jω)|=1)، اختلاف بین ∠G(jω) و -180° برابر با Phase Margin است. «حاشیه بهره» برابر است با ضریب گینی که میتوان به تقویت مدار افزود تا در فرکانسی که فاز مدار -180° است، بهره به 0 دسیبل برسد. یعنی در فرکانس گذر فاز (Phase crossover) فاصله بین نمودار بهره و خط 0 دسیبل. هر چه حاشیههای فاز و بهره بزرگتر باشند، سیستم با ثباتتر است. به گفته منابع، هدف معمول داشتن حداقل حاشیه فاز حدود ۴۵° برای پاسخ مناسب است. به عنوان مثال، اگر در نمودار Bode سیستم، در فرکانس گذر بهره فاز -۱۳۵° باشد، آنگاه حاشیه فاز برابر ۴۵° است؛ و اگر در فرکانس ۱۸۰- درجه، بهره -۹ دسیبل باشد، آنگاه حاشیه بهره ۹ دسیبل خواهد بود (مدل پایدار). اگر حاشیه فاز یا بهره منفی باشد، سیستم در حالت حلقه بسته ناپایدار خواهد بود.
4.3. اندازهگیری با دستور .meas ac
فرمان .meas ac در NgSpice برای استخراج کمیّتهای مختلف از نتایج AC کاربرد دارد. مثلاً برای به دست آوردن بیشینه بهره در یک بازه فرکانسی مشخص میتوان نوشت:
.meas ac Gmax MAX vdb(v(out)) from=100 to=100k
که بیشترین مقدار بهره (دسیبل) گره out را از ۱۰۰ هرتز تا ۱۰۰ کیلوهرتز مییابد. برای یافتن فاز در یک فرکانس خاص، میتوان از حالت FIND … AT استفاده کرد، مانند:
.meas ac ph1k FIND vp(v(out)) AT=1k
که فاز گره out را در ۱ کیلوهرتز گزارش میکند. همچنین برای اندازهگیری حاشیهها معمولاً از ترکیب دستورات .meas و when بهره میگیرند. برای مثال یکی از روشها این است که ابتدا فاز را به درجه تبدیل کنیم (let phase=180/PI*vp(v(out))) و سپس بنویسیم:
.meas ac GM_DB FIND vdb(v(out)) WHEN phase=0
.meas ac PM_DEG FIND phase WHEN vdb(v(out))=0
که GM_DB حاشیه بهره (به دسیبل) و PM_DEG حاشیه فاز (به درجه) را محاسبه میکند. در عمل گاهی از دستورهای جایگزین هم استفاده میشود (برای مثال در برخی منابع برای تعریف حاشیه فاز، موقعیت ۷۰.۷% بهره یا زاویه فاز -۴۵ درجه را معیار قرار میدهند). ولی به طور کلی .meas ac ابزار قوی برای استخراج خودکار کمینه یا بیشینه بهره، فاز در فرکانسهای معین، نقطه قطع (دسیبل واحد) و سایر پارامترهای حائز اهمیت است.
4.4. مثال عملی: تقویتکننده مشترک-امیتر با فیدبک
به عنوان مثال واقعی، مدار مشترک-امیتر سادهای با مقاومتهایی برای تقسیمبنیاد و مقاومت امیتر در نظر میگیریم. کد نتلیست زیر این مدار را شبیهسازی AC میکند (ولتاژ تغذیه ۱۲V و منبع ورودی کوچک ۱V AC):
VCC Vcc 0 DC 12
Vin in 0 DC 0 AC 1
R1 in B 100k
R2 Vcc B 47k
Re B E 1k
Rc C Vcc 4.7k
Q1 C B E QX
.model QX NPN(BF=100)
.control
ac dec 10 10 1Meg
plot vdb(C) ; نمودار بهره در دسیبل
plot vp(C) ; نمودار فاز (رادیان)
.endc
.end
در این مدار گره B به پایهی ترانزیستور متصل است، مقاومتهای R1 و R2 برای قطببندی پایه و Re برای فیدبک محلی (امتر) استفاده شده و Rc نیز به کلکتور متصل است.
نمودار بهره فرکانسی (دسیبل) حاصل از تحلیل AC مدار تقویتکننده مشترک-امیتر: محور افقی فرکانس (هرتز) و محور عمودی بهره (دسیبل) است. حد بهره در باند میانی و نقطه قطع (عبور 0 dB) مشخص شده است. وضعیت شیب منفی بهره در فرکانسهای بالا نیز واضح است.
نمودار فاز فرکانسی (درجه) همان مدار مشترک-امیتر در خروجی تحلیل AC: محور افقی فرکانس (لگاریتمی) و محور عمودی فاز (درجه) است. در فرکانسهای پایینتر فاز تقریباً -۱۸۰° است (به دلیل تقویتکننده معکوس)، و به تدریج با افزایش فرکانس تغییر میکند. حاشیه فاز (فاصله تا ۱۸۰- درجه در نقطه بهره واحد) از این نمودار قابل اندازهگیری است.
در این مثال، با مشاهده نمودار بهره و فاز میتوان حاشیههای پایداری را تعیین کرد و وضعیت مدار را تحلیل نمود. مثلاً اگر در نمودار بهره نقطهای که مقدار بهره برابر ۰ دسیبل است را بیابیم و فاز متناظر آن را از نمودار فاز بخوانیم، میتوانیم Phase Margin را محاسبه کنیم. اگر این مقدار مثبت و کافی (مثلاً بالای ۴۵°) باشد، مدار حلقه بسته پایدار با پاسخ سریع است. همچنین با دیدن نقطهای که فاز به -۱۸۰° میرسد و مقدار بهره متناظر آن (Gain Margin) میتوان پایداری حلقه بسته را سنجید. در مثال فوق، در فرکانس گذر بهره (حودود چند کیلوهرتز) فاز مدار حدود -۱۳۵° است (پس PM≈45°) و در فرکانس -۱۸۰°، بهره حدود -9 dB است (GM≈9 dB)، که نشان میدهد مدار با حاشیهای مناسب پایدار است.
4.5. تفسیر نتایج و پایداری مدار
تفسیر خروجی تحلیل AC به زبان مهندسی به معنی پاسخ به این پرسشهاست: آیا مدار در حلقه بسته پایدار است و پاسخ زمانی (موقت) آن چگونه است. اگر حاشیههای فاز و بهره مثبت و بزرگ باشند، مداری پایدار و سریع خواهیم داشت؛ اگر حاشیه فاز خیلی کوچک یا منفی باشد، ممکن است مدار نوسانی یا کند عمل کند. بهطور مثال، اگر Phase Margin بیش از ۴۵° باشد معمولاً پاسخ تعدیل شده و بدون نویز (overshoot) خواهد بود، ولی اگر PM کمتر از ۲۰° شود به پاسخ دمدمی یا نامطلوب منتهی میشود. به همین ترتیب، حاشیه بهره منفی یا نزدیک صفر نشانه آن است که تغییر کوچک در بهره میتواند مدار را ناپایدار کند. در نهایت، با بررسی کامل نمودارهای بهره و فاز و کمیتهای اندازهگیری شده توسط .meas، دانشجویان میتوانند با اطمینان در مورد پایداری مدار قضاوت کنند و در صورت نیاز پارامترهای طراحی (مثل مقاومت فیدبک یا بهره کلی) را تغییر دهند.
5. استفاده از PySpice برای تحلیل AC در مدارها
ماژول PySpice یک ماژول متنباز پایتون است که رابطی پایتون-محور برای شبیهسازی با NgSpice (و شبیهساز Xyce) فراهم میکند. به عبارت دیگر، PySpice به شما اجازه میدهد مدارها را با کد پایتون تعریف کنید و از NgSpice بهعنوان هستهٔ محاسباتی استفاده کنید. با PySpice میتوان مدار را بهصورت یک شئ Circuit تعریف کرده و سپس با فراخوانی دستور simulator.ac() شبیهسازی تحلیل AC را اجرا کرد. خروجی شبیهسازی در اختیار کاربر به شکل آرایههای NumPy قرار میگیرد و با ابزارهای پایتون (مانند NumPy و Matplotlib) قابل تحلیل و نمایش است. PySpice هیچ رابط گرافیکی یا ویرایشگر شماتیک ندارد؛ بلکه با بهره از قدرت پایتون امکان پردازش مدرن دادهها و اتوماسیون را فراهم میکند.
5.1. مثال: تحلیل AC فیلتر RC ساده با PySpice
در مثال زیر یک فیلتر پایینگذر RC ساده را با PySpice تعریف و تحلیل AC آن را اجرا میکنیم. ابتدا کتابخانههای لازم را بارگذاری میکنیم و یک مدار جدید میسازیم:
from PySpice.Spice.Netlist import Circuit
from PySpice.Unit import *
import numpy as np
import matplotlib.pyplot as plt
import PySpice.Logging.Logging as Logging
Logging.setup_logging()
# تعریف مدار: فیلتر پایینگذر RC
circuit = Circuit('Low-Pass RC Filter')
circuit.SinusoidalVoltageSource('input', 'in', circuit.gnd, amplitude=1@u_V) # منبع AC ورودی 1V
R1 = circuit.R(1, 'in', 'out', 1@u_kΩ) # مقاومت 1kΩ بین in و out
C1 = circuit.C(1, 'out', circuit.gnd, 1@u_uF) # خازن 1µF بین out و زمین
# محاسبه فرکانس قطع تئوری
import math
break_freq = 1 / (2 * math.pi * float(R1.resistance * C1.capacitance))
print(f"Break frequency ≈ {break_freq:.1f} Hz")
در این کد، R1.resistance برابر 1e3 (اهم) و C1.capacitance برابر 1e-6 (فارنهایت) است. فرکانس شکست (Cutoff) محاسبهشده حدود 159.2 هرتز خواهد بود که در عمل به مقدار تئوری fc=1/(2πRC)≈159Hz نزدیک است. با ایجاد مدار به این شکل، میتوان تحلیل AC را با دستور .ac فراخوانی کرد:
simulator = circuit.simulator(temperature=25, nominal_temperature=25)
analysis = simulator.ac(start_frequency=1@u_Hz, stop_frequency=1@u_MHz, number_of_points=10, variation='dec')
در کد فوق، simulator.ac(…) یک تحلیل AC کوچکسیگنال را انجام میدهد. دقت کنید که برای تحلیل AC حداقل یکی از منابع مستقل باید مقدار AC تخصیص داده شده باشد (در مثال ما منبع Vinput یک ولتاژ سینوسی با دامنه 1V دارد). متغیر analysis یک شیء ACAnalysis است که نتایج ولتاژها و جریانها را بهصورت آرایههای اعداد مختلط فراهم میکند.
5.2. استخراج بهره و فاز با NumPy
پس از اجرای تحلیل AC، ولتاژ هر گره (یا جریان شاخه) بهصورت یک آرایهٔ مختلط در خروجی analysis موجود است. برای نمونه، در مثال فوق ولتاژ گره با نام out در analysis.out قرار دارد (این نام از نام نودی که مشخص کردهایم گرفته شده است). با استفاده از کتابخانه NumPy میتوان بهره (مقدار مطلق) و فاز این سیگنالها را محاسبه کرد. مثلاً:
frequency = np.array(analysis.frequency) # آرایه فرکانسها به هرتز
out_voltage = np.array(analysis.out) # آرایه ولتاژ گره 'out' (مقادیر مختلط)
gain = 20 * np.log10(np.abs(out_voltage)) # تبدیل به دسیبل: 20*log10(|V|)
phase = np.angle(out_voltage, deg=False) # فاز بر حسب رادیان
همانطور که در مثال رسمی PySpice نشان داده شده است، میتوان بهره و فاز را با استفاده از np.abs و np.angle محاسبه کرد. بدین ترتیب، آرایه gain شامل بهره به دسیبل و آرایه phase شامل فاز به رادیان برای هر فرکانس خواهد بود.
5.3. رسم نمودارهای Bode با Matplotlib
برای نمایش پاسخ فرکانسی مدار، نمودار بود بهره و فاز را میتوان با Matplotlib رسم کرد. PySpice توابع کمکی برای رسم نمودار Bode نیز ارائه میدهد (ماژول PySpice.Plot.BodeDiagram). به عنوان مثال:
from PySpice.Plot.BodeDiagram import bode_diagram
# رسم نمودار Bode (بهره و فاز) با استفاده از تابع کمکی PySpice
fig, axes = plt.subplots(2, 1, figsize=(8, 6))
bode_diagram(axes=axes,
frequency=frequency,
gain=gain,
phase=phase,
marker='.', color='blue', linestyle='-')
for ax in axes:
ax.axvline(x=break_freq, color='red', linestyle='--') # نشانگذاری فرکانس قطع
plt.show()
تابع bode_diagram فرکانس (بر حسب هرتز)، بهره (دسیبل) و فاز (رادیان) را دریافت میکند و دو نمودار زیرهم (بهره و فاز) رسم میکند. در تصویر زیر (محصول این کد) مشاهده میشود که بهره در فرکانسهای پایین حدود ۰ دسیبل است و پس از فرکانس شکست (~۱۶۰ هرتز) با شیب -۲۰ دسیبل بر دهگانده کاهش مییابد. نمودار فاز نیز از ۰ رادیان (در فرکانسهای پایین) شروع و تا حدود −π/2 (معادل -۹۰ درجه) کاهش مییابد که رفتار استاندارد یک فیلتر پسیو RC را نشان میدهد.
5.4. مزایا و محدودیتهای PySpice نسبت به NgSpice CLI
استفاده از PySpice در مقابل کار مستقیم با خط فرمان NgSpice دارای مزایا و معایبی است. از جمله مزایا میتوان به موارد زیر اشاره کرد:
اسکریپتپذیری و خودکارسازی: با PySpice میتوان کل فرایند شبیهسازی و تحلیل را با کد پایتون کنترل کرد، که کار تکرار شبیهسازیها و انجام شبیهسازیهای پارامتری یا مونتکارلو را ساده میکند. بهطور مثال میتوان پارامترها را در حلقه پایتون تغییر داد و نتایج را بهصورت آرایهای ذخیره و پردازش نمود.
تحلیل با ابزارهای علمی: خروجی شبیهسازی در قالب آرایههای NumPy در دسترس است، بنابراین میتوان از ابزارهای متنوع Python برای تحلیل (مانند Pandas، SciPy، یادگیری ماشین و…) بهره برد.
نسخهبندی و مستندسازی: کد پایتون قابل نگهداری در مخازن Git است و تاریخچه تغییرات قابل پیگیری است. همچنین میتوان همزمان یادداشتها و فرمولها را در Jupyter Notebook (یا Pyterate) وارد کرد تا فرایند شبیهسازی مستندسازی گردد.
ماژولار بودن: تعریف مدار بهصورت شئگرایانه امکان استفاده مجدد از زیرمدارها (Subcircuit) را میدهد و خوانایی کد بالاتر میرود.
از سوی دیگر، محدودیتهای عملی PySpice نیز وجود دارد:
وابستگی به NgSpice: PySpice در واقع یک «لایه نازک» بر روی NgSpice است. به عبارت دیگر، شبیهسازیها همچنان توسط هسته NgSpice انجام میشوند و تقریباً همه مشکلات و محدودیتهای NgSpice در آن نمایان است. برای مثال، بسیاری از دستورهای پیشرفته NgSpice در PySpice (بهصورت خودکار) فعال نشدهاند و در صورت نیاز باید به اسناد NgSpice مراجعه کرد.
نیاز به نصب محیط Python: استفاده از PySpice مستلزم نصب صحیح Python، کتابخانههای مورد نیاز و NgSpice است. این موضوع برای کاربرانی که محیط تجاری یا آماده در دست ندارند ممکن است چالش باشد، در حالی که کار با NgSpice در خط فرمان عموماً سادهتر آغاز میشود.
عدم وجود رابط گرافیکی: PySpice دارای محیط گرافیکی یا رسم شماتیک نیست (مانند LTspice یا برخی GUIهای تجاری). کاربر باید مدار را بهصورت کد وارد کند.
هزینه زمانی راهاندازی: برای انجام یک شبیهسازی ساده ممکن است راهاندازی محیط PySpice کمی بیش از اجرای مستقیم فایل نتلیست NgSpice زمان ببرد، به ویژه اگر فقط یکبار شبیهسازی ساده بخواهید انجام دهید.
5.5. کاربرد PySpice در پردازش عددی و خودکارسازی
یک کاربرد مهم PySpice امکان استفاده از «قدرت محاسبات علمی پایتون» در آنالیز مدارهاست. به عنوان مثال، میتوان با حلقههای پایتون متغیرهای پارامتری را تغییر داد و نتایج را به سرعت تحلیل کرد. مستند رسمی PySpice نیز به صراحت اشاره میکند که خروجی شبیهسازی قابل تحلیل با NumPy و Matplotlib است. این ویژگیها پردازش عددی را ساده میکند: برای مثال میتوان نویز مدار را محاسبه کرد، تبدیل فوریه را انجام داد یا حتی رگرسیون و بهینهسازی روی نتایج شبیهسازی انجام داد. از سوی دیگر، انجام شبیهسازیهای آماری مانند مونتکارلو نیز بسیار آسان میشود، چرا که میتوان هزاران بار شبیهسازی را با مقادیر تصادفی پارامترها اجرا کرد و نتایج را در آرایههای پایتون ذخیره نمود. به طور خلاصه، PySpice امکان تلفیق شبیهسازی مدار و پردازش داده در یک زبان یکپارچه را فراهم میسازد.
5.6. مقایسهی استفاده مستقیم از NgSpice و PySpice
در کاربردهای عملی، کار با NgSpice مستقیم و کار با PySpice تفاوتهایی دارد:
تخصیص و کنترل شبیهسازی: در NgSpice معمولاً مدار را در فایل نتلیست مینویسیم و دستورات شبیهسازی (مانند .ac) را به همراه آن وارد میکنیم. سپس در خط فرمان یا اسکریپت ngspice اجرا میشود. برای مثال در NgSpice باید پس از تحلیل AC از دستورات مخصوص رسم استفاده کنیم: مثلاً plot vdb(out) برای رسم بهره (دسیبل) و plot ph(out) برای فاز. اما در PySpice، فرایند شبیهسازی از داخل پایتون و با کد کنترل میشود. برای رسم نمودار Bode با PySpice نیازی به دستورات گرافیکی NgSpice نیست؛ کافی است خروجی analysis را در پایتون پردازش کرده و با Matplotlib رسم نمود.
پردازش خروجی: NgSpice نتایج را معمولاً در یک فایل RAW یا در خروجی متنی ذخیره میکند که باید به صورت دستی یا با اسکریپت خارجی پردازش شود. در PySpice، نتایج شبیهسازی فوراً به صورت آرایههای NumPy در دسترس است که میتوان بلافاصله محاسبات عددی روی آن انجام داد. به عنوان نمونه، برای نمایش پاسخ AC یک گره در NgSpice باید از دستورات plot vdb(v(node)) یا plot i(vsrc) استفاده کرد، در حالی که در PySpice با gain = 20*np.log10(np.abs(analysis.out)) و phase = np.angle(analysis.out) میتوان بهره و فاز را مستقیماً بهدست آورد.
قابلیت خودکارسازی: استفاده از PySpice اجازه میدهد کل روال شبیهسازی (و حتی تولید خودکار مدارها) را کدنویسی کرد. در مقابل، کار با NgSpice CLI برای موارد تکراری معمولاً نیازمند نوشتن اسکریپت خارجی یا تغییر دستی نتلیست است.
در نهایت، انتخاب بین NgSpice و PySpice به کاربرد و نیاز کاربر بستگی دارد. اگر فقط یک یا چند شبیهسازی ساده و سریع نیاز باشد و نیازی به پردازش پیچیده خروجی نداشته باشیم، NgSpice CLI ابزار سبکی است. اما اگر بخواهیم تحلیلهای عددی پیشرفته، اتوماسیون یا ادغام شبیهسازی در یک جریان کاری پایتونی را انجام دهیم، PySpice امکانات بسیار کاربردیتری ارائه میدهد.
6. نتیجهگیری
در این پروژه، تحلیل AC مدارها با تمرکز بر NgSpice و تجربه عملی با PySpice بررسی شد. هدف اصلی این بود که خواننده بتواند تحلیل AC را بهصورت کاربردی اجرا و نتایج آن را تفسیر کند.
در بخش اول اهمیت تحلیل AC، دلایل انتخاب NgSpice و نقش PySpice شرح داده شد و محدوده پروژه بهطور واضح مشخص گردید. بخش دوم با تمرکز بر اجرای عملی، ساخت Netlist، دستور .ac، sweep فرکانسی و رسم Bode Plot همراه با نکات debug، به خواننده توانایی اجرای شبیهسازی AC را داد. بخش سوم به استخراج بهره، فاز و تحلیل پایداری اختصاص یافت و با استفاده از توابع vdb()، vp() و دستور .meas، خواننده یاد گرفت چگونه نتایج شبیهسازی را به تصمیمات مهندسی تبدیل کند.
در نهایت، بخش چهارم تجربه عملی PySpice را نشان داد و محدوده امکانات آن را در اجرای AC Simulation مشخص کرد، ضمن اینکه نقاط قوت و محدودیتهای آن در مقایسه با NgSpice روشن شد.
نتیجه کلی پروژه این است که خواننده پس از مطالعه میتواند مدارهای ساده تا متوسط را تحلیل AC کرده، پاسخ فرکانسی و پایداری آنها را بررسی کند و از ابزارهای مختلف برای اتوماسیون و تحلیل دادهها بهطور مؤثر بهره ببرد. تمرکز اصلی بر دقت و کنترل NgSpice بود، و PySpice بهعنوان مکمل برای پردازش دادهها و اتوماسیون معرفی شد، بدون اینکه جایگزین اصلی تحلیلهای مهندسی شود.
فهرست منابع
Ngspice User’s Manual – Version 41
Ngspice Developers, Ngspice Reference Manual, 2023. Available at:
https://ngspice.sourceforge.io/docs/ngspice-41-manual.pdf
Ngspice Tutorial (Official)
Ngspice Project, Ngspice Tutorial and Examples.
Available at:
https://ngspice.sourceforge.io/ngspice-tutorial.html
AC Analysis in Ngspice (Official Tutorial Section)
Ngspice Project, AC Analysis.
Available at:
https://ngspice.sourceforge.io/ngspice-tutorial.html#ac
AC Stability Analysis Using Ngspice
Ingenazure Education, AC Stability Analysis with Ngspice.
Available at:
http://education.ingenazure.com/ac-stability-analysis-ngspice/
Guide to SPICE Simulation – Part 7: AC Analysis
Power Electronics News, Guide to SPICE Simulation for Circuit Analysis and Design.
Available at:
https://www.powerelectronicsnews.com/
guide-to-spice-simulation-for-circuit-analysis-and-design-part-7-the-ac-analysis/
Qucs-S Documentation – AC and Small-Signal Analysis
Qucs-S Project, Basic Simulation Methods.
Available at:
https://qucs-s-help.readthedocs.io/en/legacy/BasSim.html
PySpice Documentation (Official)
Fabrice Salvaire, PySpice – A Python Interface to Ngspice.
Available at:
https://pyspice.fabrice-salvaire.fr/
PySpice GitHub Repository
Salvaire, F., PySpice Source Code and Examples.
Available at:
https://github.com/FabriceSalvaire/PySpice