In[]:=
eqn=({vg0==vin-4khr^2vs2,vf0==vg0-2rvf1-vf2,0==-g(vf0)+vf1-icf1eq,0==-g(vf1)+vf2-icf2eq,vs0==vf2-2rvs1-vs2,0==-g(vs0)+vs1-ics1eq,0==-g(vs1)+vs2-ics2eq}/.{vf1tf1+icf1eq,vf2tf2+icf2eq,vs1ts1+ics1eq,vs2ts2+ics2eq})slnp=(Solve[eqn,{vg0,vf0,vs0,tf1,tf2,ts1,ts2}][[1]]//FullSimplify)
Out[]=
{vg0-4kh(ics2eq+ts2)+vin,vf0-icf2eq-2r(icf1eq+tf1)-tf2+vg0,0tf1-gvf0,0-g(icf1eq+tf1)+tf2,vs0icf2eq-ics2eq+tf2-2r(ics1eq+ts1)-ts2,0ts1-gvs0,0-g(ics1eq+ts1)+ts2}
2
r
Out[]=
vg0,vf0-,vs0-,tf1-,tf2,ts1,ts2
-4kh(ics2eq+g(ics1eq+4ics2eqr+(icf1eq+ics1eq+2(icf2eq+ics2eq)r)+g(icf2eq+ics2eq+2ics1eqr+4ics2eq)))+vin
2
r
2
g
2
r
2
(1++2gr)
2
g
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
icf2eq+2r(icf1eq+2ics2eqkhr)+(icf1eq+4icf1eqkh)+g(icf1eq+4icf1eq+2r(icf2eq+2khr(ics1eq+2ics2eqr)-vin))+(icf2eq+4icf1eqr+4icf2eqkh-vin)-vin
3
g
2
r
2
r
2
g
2
r
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
-icf2eq+ics2eq+2ics1eqr+g(-icf1eq+ics1eq-2icf2eqr+2ics2eqr+4ics1eq)+(ics1eq+4ics1eqkh)+(ics2eq+4ics1eqr+4ics2eqkh-vin)
2
r
3
g
2
r
2
g
2
r
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
(g+)(gicf1eq+icf2eq)+2g(icf1eq+2icf1eq+gicf2eq)r+4g(gicf1eq+(g(g(gicf1eq+icf2eq)+ics1eq)+ics2eq)kh)+8ics2eqkh-g(1++2gr)vin
3
g
2
g
2
r
2
g
3
r
2
g
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
g(icf1eq(1++2gr)+g(-4kh(gics1eq+ics2eq+2gics2eqr)-icf2eq(1+g(g+2r+4gkh))+vin+g(g+2r)vin))
2
g
2
r
2
r
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
g(icf2eq-ics2eq-g(-icf1eq+ics1eq+ics1eq+gics2eq)-2(ics1eq+g(-icf2eq+2gics1eq+ics2eq))r-4g(ics1eq+g(gics1eq+ics2eq)kh)+vin)
2
g
2
r
2
g
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
g(ics1eq+g(icf2eq-ics2eq+2ics1eqr+g(icf1eq+ics1eq+2icf2eqr-2ics2eqr)+(-ics2eq(1+4kh)+vin)))
2
g
2
r
1+g(4r+g(2++4gr+4(1+kh)))
2
g
2
g
2
r
In[]:=
coef=Table[Coefficient[{vg0,vf0,vs0,tf1,tf2,ts1,ts2}[[i]]/.slnp,{vin,icf1eq,icf2eq,ics1eq,ics2eq}],{i,1,7}]//Simplify;Style[TableForm[Prepend[MapThread[Prepend,{coef,{vg0,vf0,vs0,tf1,tf2,ts1,ts2}}],{" ",vin,icf1eq,icf2eq,ics1eq,ics2eq}]],FontSize18]
Out[]=
In[]:=
ClearAll["Global`*"];ClearState[]:=Block[{},icf1eq=0;icf2eq=0;ics1eq=0;ics2eq=0;];CalcCoeff[fc_,r_,kh_,fs_]:=Block[{w},g=Tan[π*fc/fs];gSq=g*g;gCb=g*gSq;gQr=g*gCb;rSq=r*r;twor=2*r;twogr=g*twor;fourgr=2*g*twor;gSqoneplusfourkhrSq=gSq*(1+4*kh*rSq);fourgSqrplusfourgrSq=fourgr*(g+r);gsum1=-g*(g+twor+fourgSqrplusfourgrSq+g*gSqoneplusfourkhrSq);D1=1/(1+g*(4*r+g*(2+gSq+fourgr+4*(1+gSq*kh)*rSq)));D2=1/(1+fourgr+4*gCb*r+gSq*(2+4*rSq)+gSq*gSqoneplusfourkhrSq);gtf10=g*(1+gSq+twogr)*D1;gtf11=gsum1*D1;gtf12=-g*(1+twogr+gSqoneplusfourkhrSq)*D1;gtf13=-fourgr*g*kh*D1;gtf14=-fourgr*kh*r*(1+twogr)*D2;gtf20=g*gtf10;gtf21=gtf10;gtf22=g*gtf12;gtf23=g*gtf13;gtf24=g*gtf14;gts10=gCb*D1;gts11=gSq*D1;gts12=g*(1+twogr)*D1;gts13=gsum1*D2;gts14=gtf12;gts20=g*gts10;gts21=g*gts11;gts22=g*gts12;gts23=gtf10;gts24=gtf22;];Tick[t_,vin_]:=Block[{},tf1=gtf10*vin+gtf11*icf1eq+gtf12*icf2eq+gtf13*ics1eq+gtf14*ics2eq;tf2=gtf20*vin+gtf21*icf1eq+gtf22*icf2eq+gtf23*ics1eq+gtf24*ics2eq;ts1=gts10*vin+gts11*icf1eq+gts12*icf2eq+gts13*ics1eq+gts14*ics2eq;ts2=gts20*vin+gts21*icf1eq+gts22*icf2eq+gts23*ics1eq+gts24*ics2eq;vg0=-4*kh*r^2*(ics2eq+ts2)+vin;vf0=-icf2eq-2*r*(icf1eq+tf1)-tf2+vg0;vf1=icf1eq+tf1;vf2=icf2eq+tf2;vs0=icf2eq-ics2eq+tf2-2*r*(ics1eq+ts1)-ts2;vs1=ics1eq+ts1;vs2=ics2eq+ts2;icf1eq=icf1eq+2*tf1;icf2eq=icf2eq+2*tf2;ics1eq=ics1eq+2*ts1;ics2eq=ics2eq+2*ts2;Return[{t,vin,vf2,vf1,vf0,vs2}]];sr=44100.0;h=1.0/sr;cutoff=200.0;r=0.01kh=0.1MySaw[x_]:=2(x-Floor[x]-0.5);MyOsc[x_]:=1MySaw[200x];CalcCoeff[cutoff,r,kh,sr];ClearState[];tp1=Table[Tick[t,MyOsc[t]],{t,0,0.01,h}];ListPlot[Table[tp1[[All,{1,i}]],{i,2,6}],JoinedTrue,PlotRangeAll,PlotLabel"Linear SVF =",PlotLegends{"input","LPF2","BPF2","HPF2","LPF4"}]
Out[]=
0.01
Out[]=
0.1