☰
PSS分析参数手册:shooting与谐波平衡收敛调参及振荡器稳态验证
2026/11/3 19:50:55 网站建设 项目流程

简介:这份面向电路仿真研发人员的PDF文档,聚焦基于PSS的周期性稳态响应分析,适合具备一定仿真基础、尤其使用Spectre工具的技术人员。内容围绕谐波平衡与shooting两类方法展开,说明二者分别更适合弱非线性与强非线性电路,并覆盖放大器、滤波器、混频器等受驱动电路与振荡器类自治电路的分析差异。文档梳理PSS的初始瞬态与稳态求解两阶段流程,并对周期与基频、谐波数、稳定化时间、自动稳态检测、最小电容及输出类型等参数给出配置建议。压缩包仅含1个PDF文件,大小约623KB,便于随查随用。已有462人学习下载,可作为参数调试和收敛排错时的速查材料,帮助读者平衡仿真速度与精度,处理强非线性或快速跳变电路的收敛问题,并衔接后续周期性小信号分析。

1. PSS 分析到底在算什么:从放大器到振荡器的周期性稳态切入点

很多电路仿真卡在“跑了很久还没进入周期稳态”:放大器输出一直有启动拖尾,振荡器频率又对不上。PSS 分析(周期性稳态分析)解决的就是这类问题——它不靠长时间瞬态硬等,而是在频域用谐波平衡、或在时域用 shooting 方法,直接求周期稳态解。对受驱动的放大器、滤波器、混频器,PSS 给出周期工作点;对自治振荡器,它连振荡周期一起估。适合已经会用瞬态仿真、但被 tstab 和收敛折磨过的研发人员。

这份资源是一套 PSS 参数手册,真正有用的不是“知道有 PSS”,而是知道每个参数在什么场景下会翻车。它把仿真区间、时间步长、初始条件、收敛参数、输出参数、HB 专项参数拆成可查的条目,适合放在项目目录里当查表用。

我先给结论:PSS 不是“更快的瞬态”,它换了一套求解逻辑。瞬态仿真是从 0 时刻一步步推,PSS 是先找周期工作点,再把这个工作点交给 PAC、PXF、PNOISE、PSP、PSTB 这类周期性小信号分析。用错引擎,后面所有小信号结果都会带着一个错误的周期解。

2. 选 shooting 还是谐波平衡:两类引擎的适用边界与网表落点

2.1 时域 shooting 的迭代逻辑与强非线性场景

shooting 方法的核心在时域:它先把一个周期内的波形当作未知量,通过初始瞬态把电路“带”到接近周期工作的位置,然后在 shooting 区间里反复迭代,用牛顿法让周期起点和终点的波形残差收敛到容差内。PSS 分析包含两个阶段,第一阶段是初始瞬态,用来初始化电路;第二阶段才是 shooting 或谐波平衡,用来计算周期性稳态解。初始瞬态又分三个区间:从tstart到tonset,这是独立源自动进入周期性的最早时间;然后是用户可选的稳定化区间tstab;受驱动电路再走一个period,自治电路走四倍period,用来监控波形并给出更优的振荡周期估计。

shooting 更适合强非线性电路,典型场景是信号急剧上升、急剧下降的开关电路、开关电容滤波器、开关混频器。原因是它在时域直接处理波形跳变,牛顿迭代面对的是时间点上的残差,而不是把跳变强行展开成有限个谐波。代价是它对启动点敏感:如果 shooting 区间从强非线性行为阶段开始,运放可能进入压摆率限制,迭代会明显变慢。我一般会把tinit放在时钟跳变后的长稳定周期起点,而不是跳变沿附近。

参数上,shooting 要重点关注maxstep、step、method、maxperiods、finitediff和highorder。maxstep默认由errpreset推导,稳定化阶段常见默认是period/25;step只对 shooting 有效,默认0.001*period,它主要维持结果美观性,不是精度主开关;method可选euler、trap、traponly、gear2、gear2only,默认由errpreset推导。收敛后如果节点电压或电流分支还有偏差,可以把finitediff设为yes或refine,后者会尝试细化时间步;highorder=yes会在低阶收敛后做多区间切比雪夫多项式谱精修,数值噪声底至少降 30dB,但收敛困难时会回退。

场景建议引擎关键参数注意点
开关电容、开关混频器shootingmaxstep、finitediff=refine启动点避开跳变沿
强非线性、信号陡边shootingmethod=gear2、maxperiods加大先errpreset=liberal试跑
弱非线性放大器、滤波器HBharms、krylov_size谐波数不足会混叠
含延迟、传输线、S 参数数据HBfdharms、harmonicbalance=yes频率相关元件优势明显

2.2 频域谐波平衡的维度选择与频率相关元件优势

谐波平衡(HB)换到频域:它把周期波形展开成有限个谐波,未知量是各次谐波的系数,牛顿法在频域求解。HB 在弱非线性电路上效率极高,因为少量谐波就能描述波形;处理频率相关元件时也明显优于 shooting,比如延迟、传输线、S 参数数据,这些元件在频域有直接模型,在时域反而要卷积或额外处理。

HB 的“维度开关”是harms。对 shooting,harms在outputtype=freq或all时是要求解的输出谐波数;对 HB,它直接决定求解维度,影响精度和收敛性。HB 里谐波数过少会因混叠效应带来误差,所以harms要足够覆盖信号带宽。默认值常见是 shooting 9、HB 10,但这只是起点。我的做法是先按信号边沿估带宽:如果主要能量在 5 次谐波内,先设 10;如果看到频域底噪异常高,再翻倍到 20 试一次,看底噪是否下降。下降说明之前是被截断,不降才考虑其他原因。

HB 专项参数要分清:harmonicbalance=yes用谐波平衡引擎替代时域 shooting;flexbalance=yes功能相同;krylov_size是 HB 大信号分析中线性矩阵求解器的最小迭代次数,若仿真报告 GMRES 范数缩减不足,需要增大;hbprecond_solver选择预条件线性求解器,可选basicsolver、blocksolver、autoset、blockdense、blockolver2;lowmem是低内存模式,0关闭,1开启标准低内存,小于 10 的数会被解读为以 GB 为单位的内存请求量;oversamplefactor和oversample控制器件评估过采样,后者按频率分量覆盖前者;fdharms是为分布元件考虑的谐波数,只对 shooting 且模型未设Fmax时生效。

HB 收敛困难时,不要先盲目加harms。先看hbhomotopy:可选tstab、source、gsweep、tone、inctone、aggregation。gsweep用起始电导gstart、停止电导gstop和对数步长glog做同伦;backtracking默认yes,控制牛顿法回溯,可选no、yes、forced;excludeconvwithBK=yes决定是否排除带 BK 的收敛。我的血泪经验是:先hbhomotopy=source把激励源逐步加上去,比一上来调krylov_size更稳;如果日志明确提示 GMRES 范数缩减不足,再去加krylov_size和换预条件器。

2.3 受驱动与自治电路的判断:p/n 节点与周期估计

PSS 能处理自治和受驱动两类电路。自治电路即使没有时变激励也会产生非恒定波形,最常见的是振荡器;受驱动电路需要时变激励才有周期响应,常见的是放大器、滤波器、混频器。判断方式很直接:当 PSS 应用于自治电路时,要求指定一对节点p和n;如果提供了这对节点,PSS 会假定电路是自治的;如果没有,就按受驱动处理。这个规则要记牢,因为一旦把振荡器误当受驱动,后面周期怎么设都不对。

受驱动电路要指定period或对应基频sfund,而且分析必须使用驱动信号周期的正确倍数。比如驱动是 1MHz,period=1u;如果电路里有分频或两个周期信号,要取它们的最小公倍数,而不是随手填一个驱动周期。自治电路没有驱动信号,实际周期在分析前无法精确知晓,只能给估计值,PSS 会计算精确周期和周期解波形。估计值不要差太多,差一个数量级很容易收敛到另一个模式或直接停振。

初始瞬态阶段对自治电路有特殊用途:受驱动电路第三区间长度是period,自治电路是四倍period,PSS 会监控波形并得出更优的振荡周期估计。tstab是独立源进入周期性后的额外稳定化时间,默认0.0s;autotstab=yes会让仿真器决定是否运行tstab及运行时长,常见初始长度是 50 个周期,稳态接近达到时会提前终止;autosteady=no/0关闭自动稳态检测,yes/1激活,2用更低稳态公差运行,可能有助于收敛但增加tstab开销。振荡器初始化还要看oscic:default走瞬态初始化,lin基于直流解的线性分析估频率和幅度,适合 LC、晶体这类线性型振荡器;lin_ic是 shooting 旧版兼容项;fastic快但精度低;skip直接用你给的频率作初始猜测,仅适用于两级法。

电路类型周期参数初始化关键项常见误用
受驱动放大器/滤波器period或sfund,取驱动周期tstab按启动拖尾给填了信号周期但不是驱动周期倍数
混频器取输入周期相关的最小公倍数errpreset=moderate看交调只给一个输入周期导致拍频错
振荡器给周期估计值oscic=lin或default不指定p/n节点,被当受驱动

3. 把 PSS 分析写进网表:周期、谐波、初始瞬态和输出参数

3.1 最小可用 PSS 语句与周期/基频二选一

一条能跑起来的 PSS 语句不需要堆满参数,先保证周期、谐波数、精度档和稳定化时间这四项。常见写法是pss period=1u harms=9 errpreset=moderate tstab=20u outputtype=all。这里period=1u对应 1MHz 基频,harms=9是输出谐波数也是 shooting 的求解参考,errpreset=moderate给一组合理默认,tstab=20u让独立源进入周期性后再稳定 20 个周期,outputtype=all同时保留时域和频域结果。真正上线前,先把outputtype=time跑一遍看波形有没有进入周期,再切all看频谱。

period和fund是二选一,fund是基频,单位 Hz;autofund=no是默认,若设yes,程序忽略period/fund值,从源信息自动计算基频。自动基频适合源信息干净的单音电路,多音或分频电路不要偷懒,否则自动算出来的基频可能不是你想要的周期。harmsvec=[...]是harms的替代形式,用于选择特定谐波,仅对 shooting 有效;如果只关心 1、3、5 次,可以用它减少输出,但不要用它替代harms的求解维度。

时间步长参数要和周期一起看。maxstep默认由errpreset推导,稳定化阶段默认常见period/25;maxacfreq用于后续周期性小信号分析中要求的最大频率,默认由errpreset和harms推导,且只对 shooting 有效。若频域结果有混叠,先把maxacfreq设为所请求最大谐波频率的 4 倍,且不低于基频的 40 倍;step=0.001*period只影响结果美观性,不要拿它当精度旋钮。method和tstabmethod要分开:method是 shooting 积分方法,tstabmethod是稳定化时间所用方法,自治电路默认traponly,受驱动电路默认由errpreset推导。

参数作用常见取值什么时候改
period稳态周期或自治周期估计1u、10n受驱动取驱动周期倍数
fund基频替代period1Meg与period二选一
harms输出谐波数/HB 求解维度shooting 9,HB 10 起步频域底噪高时加倍
maxstep最大时间步长默认period/25波形跳变处太粗时收紧
maxacfreq小信号最大频率最大谐波频率 4 倍频域混叠时检查
tstab额外稳定化时间20u、50 个周期启动拖尾长时加大

3.2 初始瞬态 tstab、autotstab 与 autosteady 的配置

tstab是最容易被低估的参数。默认tstab=0.0s,意味着独立源进入周期性后不再额外稳定;但很多电路有偏置建立、运放压摆、振荡器起振拖尾,直接进 shooting 会让牛顿法在第一个周期就撞墙。我的做法是先给 20 到 50 个周期,看日志里稳态迭代范数是否在下降;如果不降,再翻倍。autotstab=yes让仿真器自己决定是否运行tstab及运行时长,常见初始长度是 50 个周期,稳态达到或接近达到时会提前终止。它适合不确定拖尾多长的电路,但不要把它当万能药,自治电路起振失败时,自动稳定化也可能提前停在一个非目标模式。

autosteady控制初始瞬态期间的自动稳态检测,仅在tstab>0或autotstab=yes时适用。no/0关闭,yes/1激活,2用更低稳态公差运行,可能有助于收敛但增加tstab开销。tstart是初始瞬态分析开始时间,默认0.0s;tstabenvlp=yes会让包络方法用于tstab,envlpname指定要执行的包络分析名称。稳定化阶段有默认设置:reltol=1e-3、maxstep=period/25、relref=sigglobal、tstabmethod=traponly;如果你在pss语句或选项语句里显式指定了reltol、relref或tstabmethod,这些默认会被覆盖。这条很关键,很多人一边加tstab一边把reltol收得很紧,结果稳定化阶段慢得离谱。

skipdc要单独说。skipdc=no是默认,用常规直流分析算初始解;skipdc=yes用readic文件或ic语句指定初始解;skipdc=sigrampup会让独立源从 0 斜坡上升到初始值,在瞬态第一阶段生成波形,若未指定tstart,默认tstart=-0.1*tstab。如果电路直流解里存在瞬态尖峰,且跟踪尖峰比找真实直流解更耗时,才考虑跳过直流;但skipdc也可能带来瞬态收敛问题,没指定初始条件的节点会从 0 开始。我的习惯是:先老老实实跑直流,只有直流收敛本身成为瓶颈时,才用readic加skipdc=yes做对照。

提示:稳定化阶段不是越长越好。先看日志里的稳态迭代范数,再决定加tstab;盲目加到几百个周期,只会把仿真时间拖长,收敛问题还在。

3.3 输出类型、谐波向量和 saveinit 的取舍

outputtype控制输出形态:all全输出,time只时域,freq只频域。默认仅 shooting 输出时域结果;若指定harms/harmsvec或设outputtype=freq/all,也会输出频域结果。若请求频域但未指定谐波数,默认 9。outputtype=freq可以抑制时域波形生成,适合只看频谱的回归测试。save控制要输出的信号,可选all、lvl、alpub、lvpub、selected、none、nooutput;nestlvl控制子电路输出层级;oppoint=no是默认,设yes可计算初始工作点信息,输出到屏幕、logfile或rawfile。

saveinit=no是默认,设yes会保存稳态前初始瞬态的波形。这个开关在调启动问题时非常有用:你想看振荡器从脉冲到起振的全过程,就打开它;只想看稳态结果,就关掉,避免波形文件膨胀。skipstart、skipstop、skipcount控制输出数据跳过区间和抽取比例,skipcount=1表示每个skipoutput点保存一个数据;strobeperiod是瞬态输出选通间隔,strobedelay是skipstart与第一个选通点之间的延迟。做长瞬态对照时,我会用skipstart跳过启动段,只留稳定段,减少后处理量。

状态文件参数决定能不能复用。write写初始瞬态解,writefinal写最终瞬态解且仅 shooting 有效,writepss写收敛后的稳态解,readpss读先前收敛的稳态解。shooting 和 HB 的文件不能互相复用,shooting QPSS 的结果也不能用于 HB QPSS。checkpss=yes是默认,会检查readpss文件,条件变化时重新运行;设no则假设无变化直接使用。swapfile让仿真器用常规文件而非虚拟内存保存周期工作点,内存不足时再开,仅 shooting 有效。use.previc=yes或ns会把上一次分析收敛的初始条件用作ic或ns,readns则是存储初始瞬态解估计值的文件。

输出/状态参数作用建议
outputtype全输出/时域/频域调试先time,回归用freq
harmsvec选择特定谐波只关心奇次谐波时用
saveinit保存稳态前瞬态调起振时开,平时关
writepss写稳态解收敛后写一份,供下次热启动
readpss读稳态解电路/温度/参数变了就配checkpss=yes
swapfile用文件存周期工作点内存不足时开,仅 shooting

4. 收敛与精度调参:errpreset、maxperiods、cmin 和 finitediff

4.1 errpreset 三档的噪声底与适用电路

errpreset是最值得先动的精度档,它选择一组合理参数:liberal宽松、moderate适中、conservative保守。受驱动电路用 shooting 时,如果电路只有一个周期性信号且只需要周期工作点,liberal给合理准确结果且最快;多个周期性信号、关注交调,用moderate;噪声底要求极低、精度优先,用conservative。弱非线性电路的估计数值噪声底大致是:liberal约 -70dB,moderate约 -90dB,conservative约 -120dB;线性电路噪声底更低。显式设highorder=yes会激活多区间切比雪夫,数值噪声底至少再降 30dB;收敛困难时 MIC 会回退,psaratio收紧可进一步降底噪。

HB 里errpreset的影响范围不同:只影响reltol,影响方式与 shooting 相同;对所有errpreset值,lteratio保持 3.5,steadyratio保持 1。受驱动和自治电路的errpreset选择逻辑类似:快速且精度合理用liberal,关注精度用moderate,精度最优先用conservative。但要注意,新的errpreset设置包含新的默认reltol,这是合理设置的强制上限;若你显式写的reltol超过默认值,仿真器会忽略这个增大。想增大reltol的唯一方式是放宽errpreset;想收紧,可以在选项语句里减小。除reltol和maxstep外,errpreset不会改变你显式设置的参数值,实际值会在日志里打印。

精度档适用场景噪声底参考代价
liberal单周期信号、先看能否收敛约 -70dB最快,精度够用
moderate多音、交调、常规回归约 -90dB中等
conservative噪声底敏感、小信号后级约 -120dB最慢
highorder=yes需要更低数值噪声底再降至少 30dB可能回退,需看日志

4.2 牛顿迭代卡住时先看 maxperiods 与 restart

maxperiods是 shooting 或 HB 牛顿迭代收敛前允许的最大迭代次数。受驱动 PSS 默认 20,振荡器默认 50;HB 默认 100。日志里如果反复看到残差下降很慢,不要第一反应把maxperiods加到几百,先看是不是启动点不对、tstab不够、或者周期填错。restart控制重启策略:yes重启 DC/PSS 解,no复用之前的解作为初始猜测,firstonly仅在扫描第一个点时重启;HB 默认no,shooting 默认yes。做参数扫描时,restart=yes每个点都重启,稳但慢;restart=no复用上一个点,快但可能把错误解带过去。我的做法是:单点调试用yes,扫描确认趋势后改no,并在关键点插一个yes对照。

牛顿相关参数还有itres、inexactNewton、max_innerkrylov_size、max_outerkrylov_size。itres控制牛顿迭代中线性化矩阵方程迭代解的残差,shooting 默认1e-4,HB 默认0.9,shooting APS 流程默认1e-3;收紧可加速收敛但不影响结果精度,值应在 [0,1]。inexactNewton=no是精确牛顿,每次严格求解线性化方程组,精度高但计算量大;yes是非精确牛顿,线性求解精度随迭代逐步收紧,减少计算量,强非线性电路可试。max_innerkrylov_size是两级 GMRES 内层最大迭代次数,大信号默认 12,小信号默认 20;max_outerkrylov_size外层默认 4。若日志提示线性求解器内层不够,再动这些,不要和maxperiods混为一谈。

steadyratio是从 LTE 公差计算稳态公差的比例,默认由errpreset推导;shooting 中它调整稳态周期内节点电压/电流分支的最大允许偏差,HB 中调整稳态最大允许误差,该值与iteration、reltol相乘共同决定收敛判据。每次迭代结束会打印相对收敛范数,这是判断“还在下降”还是“已经卡住”的主要依据。finitediff在 shooting 精修后启用有限差分,no关闭,yes应用 FD 并必要时优化初始小时间步,refine应用 FD 并尝试细化时间步;二阶方法下会用均匀二阶 Gear。若指定readpss和writepss复用结果,finitediff会自动从no改为yes。

注意:maxperiods加大只是给迭代更多机会,不解决“周期填错”和“启动点落在跳变沿”这两个根因。先看日志的相对收敛范数,再决定加次数。

4.3 无穷快跳变、cmin 和 skipdc 的边界

如果电路存在无穷快的跳变,比如节点没有寄生电容到地,仿真器可能遇到收敛问题。避免方式是防止电路瞬间响应:把cmin设为合理的非零值,给每个节点到地加最小电容。cmin=0是默认,实际项目里我一般从1fF到10fF量级试,具体看节点阻抗和频率;加太大伤带宽,加太小没效果。这个参数对含理想开关、无寄生节点的电路特别有用,通常能显著改善收敛。

初始条件参数要和cmin一起看。ic=all是默认,dc忽略ic语句用直流解,node用节点ic语句忽略器件ic参数,dev用电容电感ic参数忽略ic语句,all两者都用且器件参数覆盖ic语句。readic指定初始条件文件,文件中的初始条件会覆盖ic语句。指定初始条件后,仿真器会做直流分析计算实际初始状态,并通过串联电阻rforce的电压源把初始条件强制到节点上。这里有个坑:ic语句可能指定电抗元件无法维持的初始条件,比如设置节点电压但该节点没有到地电容路径,或设置电感支路电流但支路没有电感;不一致时仿真区间开始会跳变,收敛问题反而更多。

readns和use.previc是热启动工具。readns读初始瞬态解估计值文件,use.previc=yes或ns把上一次分析收敛的初始条件用作ic或ns。做振荡器或多工况扫描时,热启动能省时间,但前提是电路拓扑和偏置没大变;如果改了偏置或负载,旧初始条件可能把解带到另一个模式。我的习惯是:热启动只用于同一电路的温度/电压小步扫描,跨拓扑一定重新初始化。

5. 常见问题排查:五条血泪踩坑记录

5.1 现象:迭代到 maxperiods 仍不收敛

现象:日志里相对收敛范数上下摆动,maxperiods从 20 加到 100 还是不到容差,时域波形每个周期都在变。

原因:最常见的不是迭代次数不够,而是启动点落在强非线性阶段,或者tstab太短,电路还没进入周期工作。受驱动电路如果period填的不是驱动周期倍数,shooting 区间和激励对不上,残差永远不会收敛。另一个原因是restart=yes在扫描中每个点都重启,前一个点的好初值被丢掉。

解决:先把outputtype=time、saveinit=yes打开,看初始瞬态波形是否已经稳定;没稳定就加tstab或开autotstab=yes。检查period是否是驱动周期的正确倍数,多音电路取最小公倍数。扫描时把restart改为no,但保留一个restart=yes的对照点。最后才考虑加maxperiods,并且同时看steadyratio和reltol是否被errpreset限制住。

5.2 现象:频域结果出现混叠底噪

现象:频谱上底噪比预期高很多,conservative也压不下去,小信号后级分析结果跟着漂。

原因:HB 里harms不够,信号带宽被截断后混叠;shooting 里maxstep太大或maxacfreq没覆盖后续小信号频率。还有一种情况是outputtype=freq但没给harms,默认 9 对陡边信号不够。

解决:先把harms翻倍跑一次,看底噪是否下降;下降说明是截断,继续加到不再降为止。shooting 检查maxacfreq是否至少为最大谐波频率的 4 倍且不低于基频 40 倍,maxstep是否在跳变处足够细。需要更低底噪时设highorder=yes,并收紧psaratio;若 MIC 回退,日志里会有提示。HB 还要看oversamplefactor和oversample,器件评估过采样不足也会贡献底噪。

5.3 现象:振荡器周期估错导致解跑到另一个模式

现象:振荡器 PSS 收敛到一个非目标频率,或者直接停振,瞬态看明明能起振。

原因:自治电路没有指定p/n节点,被当受驱动处理;或者period估计值偏离太远,PSS 收敛到谐波或另一个振荡模式;oscic=default的脉冲激励太弱,没有强耦合到目标振荡模式;tstab太短,起振还没建立就进 shooting。

解决:先确认p/n节点成对出现,让 PSS 按自治处理。把period估计值改到目标频率附近,不要差一个数量级。线性型振荡器优先试oscic=lin,它会基于直流解估频率和幅度,可缩短或跳过tstab;用default时检查脉冲是否足够强。自治电路初始瞬态第三区间是四倍period,PSS 会监控波形给出更优周期估计,tstab要给够。HB 自治还可以用pinmode固定节点、pinnodemag估固定节点电压幅值(默认 0.01)、oscmethod选onetier或twotier。

5.4 现象:readpss 复用后结果漂移

现象:用readpss读上次稳态解,结果和重新跑一遍不一致,残差检查有时过有时不过。

原因:电路参数、温度、偏置或模型变了,checkpss=no让仿真器假设无变化直接使用旧解;shooting 和 HB 的稳态文件混用;QPSS 结果跨引擎复用。readpss对 shooting 会加载方程并检查残差,残差不满足时用有限差分重新收敛,但前提是checkpss没关。

解决:保持checkpss=yes,让仿真器在条件变化时重新运行;跨引擎绝不混用writepss/readpss,shooting 和 HB 文件分开存。复用后如果残差不过,设finitediff=refine让它细化时间步,或直接重新writepss覆盖旧文件。做参数扫描时,把readpss和restart=no分开评估:前者复用稳态解,后者复用初始猜测,别把两者当同一件事。

5.5 现象:HB 内存爆掉或 GMRES 范数缩减不足

现象:HB 跑到一半内存不足退出,或者日志提示 GMRES 范数缩减不足、收敛慢。

原因:谐波维度大、lowmem=0关闭低内存模式;krylov_size太小,线性求解器迭代不够;预条件器选择不适合当前矩阵结构;harms或oversamplefactor设得过高。

解决:先memoryestimate=yes做内存估计,它会先做短仿真打印估计后退出,不保存结果;确认量级后再开lowmem=1标准低内存模式,或设小于 10 的数为 GB 内存请求。GMRES 范数缩减不足时增大krylov_size,并试hbprecond_solver=blocksolver或autoset。harms不要盲目翻倍,先确认信号带宽;oversample按频率分量覆盖oversamplefactor,只对需要的 tone 加过采样。内存估计仅flexbalance=yes时生效,PSS 分析小于 500MB 时不推荐用。

6. 振荡器 PSS 的进阶验证:oscic、PPV 与调谐模式怎么收口

振荡器 PSS 最容易“看起来收敛了,其实周期不对”。我的验证顺序是:先看saveinit=yes的起振波形,确认不是停振或跑到谐波;再看自治四倍period监控给出的周期估计是否稳定;最后才看频域谐波幅度。初始化上,线性型振荡器优先oscic=lin,它基于直流解估频率和幅度,通常比default的脉冲激励更可控;fastic快但精度低,只适合先探路;skip直接用你给的频率作初始猜测,仅适用于两级法。ppv=yes会保存扰动投影向量,反映节点对电压/电流扰动的相位敏感度,做相位噪声或注入锁定前值得打开。

HB 自治还要盯固定节点。pinmode指定要固定的节点,pinnodeminus在差分节点存在时指定第二个固定节点,pinmoderank指定固定谐波阶次,pinnodemag估计固定节点电压幅值,默认 0.01。固定节点选得不对,HB 可能收敛到零解或另一个模式。调谐模式tuneparam用于自动调整电路参数,使振荡频率匹配fundfreqs指定值;tunedev指定器件实例名,tunerange给调谐范围,tunestep和tunelin定义离散点,tunevalues直接给具体值。它只适用于自治电路,别在受驱动电路上开。

验证项看什么通过标准
起振saveinit=yes波形幅度建立,不是停振
周期四倍period监控周期估计稳定,不跳模式
频域harms加倍后底噪底噪不再明显下降
复用readpss+checkpss=yes残差检查通过
相位ppv=yes输出PPV 非零且节点分布合理

从那以后我每次跑振荡器 PSS,都强制走一遍“起振波形—周期监控—谐波加倍—readpss 残差”四步,不再只看一条收敛日志就收工。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询