完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在研究spice传输线,spice中理想传输线是等效为延迟电路,众所周知,SPICE主要基于节点分析法。每个器件需要提供导纳矩阵。我看了ngspice源代码中的tra器件的导纳矩阵的求解过程,但是没有看懂。不知SPICE中无损传输线模型具体是怎样建立的。另外,感觉tra的导纳矩阵不是直接从传输线的节点的电压和电流关系得到。如有高手知道,还请详解一下。
|
|
相关推荐
1个回答
|
|
#include "cktdefs.h"
#include "tradefs.h" #include "sperror.h" #include "suffix.h" int TRAaccept(ckt,inModel) register CKTcircuit *ckt; GENmodel *inModel; { register TRAmodel *model = (TRAmodel *)inModel; register TRAinstance *here; register int i=0,j; double v1,v2,v3,v4; double v5,v6,d1,d2,d3,d4; double *from,*to; int error; /* loop through all the transmission line models */ for( ; model != NULL; model = model->TRAnextModel ) { /* loop through all the instances of the model */ for (here = model->TRAinstances; here != NULL ; here=here->TRAnextInstance) { if( (ckt->CKTtime - here->TRAtd) > *(here->TRAdelays+6)) { /* shift! */ for(i=2;i (ckt->CKTtime - here->TRAtd > *(here->TRAdelays+3*i));i++) { /* loop does it all */ ; } i -= 2; for(j=i;j<=here->TRAsizeDelay;j++) { from = here->TRAdelays + 3*j; to = here->TRAdelays + 3*(j-i); *(to) = *(from); *(to+1) = *(from+1); *(to+2) = *(from+2); } here->TRAsizeDelay -= i; } if(ckt->CKTtime - *(here->TRAdelays+3*here->TRAsizeDelay) > ckt->CKTminBreak) { if(here->TRAallocDelay <= here->TRAsizeDelay) { /* need to grab some more space */ here->TRAallocDelay += 5; here->TRAdelays = (double *)REALLOC((char *)here->TRAdelays, (here->TRAallocDelay+1)*3*sizeof(double)); } here->TRAsizeDelay ++; to = (here->TRAdelays +3*here->TRAsizeDelay); *to = ckt->CKTtime; to = (here->TRAdelays+1+3*here->TRAsizeDelay); *to = ( *(ckt->CKTrhsOld + here->TRAposNode2) -*(ckt->CKTrhsOld + here->TRAnegNode2)) + *(ckt->CKTrhsOld + here->TRAbrEq2)* here->TRAimped; *(here->TRAdelays+2+3*here->TRAsizeDelay) = ( *(ckt->CKTrhsOld + here->TRAposNode1) -*(ckt->CKTrhsOld + here->TRAnegNode1)) + *(ckt->CKTrhsOld + here->TRAbrEq1)* here->TRAimped; #ifdef NOTDEF v1 = *(here->TRAdelays+1+3*here->TRAsizeDelay); v2 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-1)); v3 = *(here->TRAdelays+2+3*here->TRAsizeDelay); v4 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-1)); if( (FABS(v1-v2) >= 50*ckt->CKTreltol* MAX(FABS(v1),FABS(v2))+50*ckt->CKTvoltTol) || (FABS(v3-v4) >= 50*ckt->CKTreltol* MAX(FABS(v3),FABS(v4))+50*ckt->CKTvoltTol) ) { /* changing - need to schedule after delay */ /*printf("%s: at %g set for %g and %gn",here->TRAname, ckt->CKTtime, ckt->CKTtime+here->TRAtd, *(here->TRAdelays+3*here->TRAsizeDelay-3)+ here->TRAtd);*/ error = CKTsetBreak(ckt,ckt->CKTtime+here->TRAtd); if(error) return(error); /* also set for break after PREVIOUS point */ error = CKTsetBreak(ckt, *(here->TRAdelays+3*here->TRAsizeDelay -3) + here->TRAtd); CKTbreakDump(ckt); if(error) return(error); } #else v1 = *(here->TRAdelays+1+3*here->TRAsizeDelay); v2 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-1)); v3 = *(here->TRAdelays+1+3*(here->TRAsizeDelay-2)); v4 = *(here->TRAdelays+2+3*here->TRAsizeDelay); v5 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-1)); v6 = *(here->TRAdelays+2+3*(here->TRAsizeDelay-2)); d1 = (v1-v2)/ckt->CKTdeltaOld[0]; d2 = (v2-v3)/ckt->CKTdeltaOld[1]; d3 = (v4-v5)/ckt->CKTdeltaOld[0]; d4 = (v5-v6)/ckt->CKTdeltaOld[1]; /*printf("%s: at %g derivs are %g, %g and %g, %gn", here->TRAname,ckt->CKTtime,d1,d2,d3,d4);*/ if( (FABS(d1-d2) >= here->TRAreltol*MAX(FABS(d1),FABS(d2))+ here->TRAabstol) || (FABS(d3-d4) >= here->TRAreltol*MAX(FABS(d3),FABS(d4))+ here->TRAabstol) ) { /* derivitive changing - need to schedule after delay */ /*printf("%s: at %g set for %gn",here->TRAname, ckt->CKTtime, *(here->TRAdelays+3*here->TRAsizeDelay-3)+here->TRAtd );*/ /*printf("%g, %g, %g -> %g, %g n",v1,v2,v3,d1,d2);*/ /*printf("%g, %g, %g -> %g, %g n",v4,v5,v6,d3,d4);*/ /* also set for break after PREVIOUS point */ /*printf("setting breakn");*/ error = CKTsetBreak(ckt, *(here->TRAdelays+3*here->TRAsizeDelay -3) + here->TRAtd); if(error) return(error); } #endif /*NOTDEF*/ } } } return(OK); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
LDO线性稳压器产生了模拟电源与数字电源,模拟电源去给运放供电,他们的地是不是同一个地?
2624 浏览 2 评论
2516 浏览 1 评论
1207 浏览 0 评论
3588 浏览 1 评论
ad把一个15mm*1.5mm的灯放到直径15mm的圆形pcb板上,可以实现吗
3322 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-2 13:31 , Processed in 0.476027 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号