節点解析法について (2)

 投稿者:大熊 正メール  投稿日:2009年 2月 7日(土)11時32分28秒
  白石様 山中様 いつも御指導を頂き有難うございます。大熊です。

下記のごときプログラムを作り、山中様の回答を別解でなぞってみました。
答えは一致していると思ってます。
10進BASICは、マトリクスと複素数の計算が簡単に出来、初学修者にはとても
便利だと言うことを実感しています。

敬具


10 OPTION ARITHMETIC COMPLEX
   LET j=SQR(-1)
   OPTION BASE 1
   OPTION ANGLE DEGREES

   DIM FREQ(100,5)
   LET FREQ(1,1)=10
   LET FREQ(2,1)=12.25
   LET FREQ(3,1)=15
   LET FREQ(4,1)=17.32
   LET FREQ(5,1)=20
   LET FREQ(6,1)=24.5
   LET FREQ(7,1)=30
   LET FREQ(8,1)=34.6
   LET FREQ(9,1)=40
   LET FREQ(10,1)=50
   LET FREQ(11,1)=60
   LET FREQ(12,1)=70
   LET FREQ(13,1)=80
   LET FREQ(14,1)=90

   FOR I=1 TO 14
      LET P=I
      LET FREQ(I,1)=FREQ(P,1)
   NEXT I
   FOR I=15 TO 28
      LET P=I-14
      LET FREQ(I,1)=FREQ(P,1)*10
   NEXT I
   FOR I=29 TO 42
      LET P=I-28
      LET FREQ(I,1)=FREQ(P,1)*100
   NEXT I
   FOR I=43 TO 56
      LET P=I-42
      LET FREQ(I,1)=FREQ(P,1)*1000
   NEXT I
   LET FREQ(57,1)=100000

   ! FOR I=1 TO 57
   !    PRINT "FREQ(";I;",1)=";FREQ(I,1)
   ! NEXT I


   !                             ┌─C2─┬──────┐ 「注意」
   !                             │      │  ┌──┐  │  山中さんの回路と1番
   !                             │      └─┤-   │  │  端子番号が
   !                             │          │  K├─⑤─小さくなってます。
   !         ┌─①─R1─②─R2─③─R3─④─┤+   │  ↑ V5
   !         ↑  ↑V1    ↑V2    ↑V3    ↑V4└──┘  │
   !         Is  Rs      C1              C3            │
   !         ↑  │      │              │            │
   !         ┴─0───┴───────┴──────┴─
   !             │
   !             ≡アース
   !    GND=0 !アース
   !    V1=1V !入力端子① Rs=0.1オームに定電流源Is から10A流して1Vとする。
   !    V5=⑤ !出力端子⑤ V5=K*V4

20 ! CR 3段回路
   LET FF=1000             !Fの単位はヘルツ
   LET R1=51000            !Rの単位はオーム
   LET R2=82000
   LET R3=39000
   LET C1=0.00685/(10^6)   !Cの単位はuF,
   LET C2=0.022/(10^6)     !Cの単位はuF,
   LET C3=330/(10^12)      !Cの単位はPF,

   LET Y1=(2*PI*FF*C1)     !Yの単位はモー
   LET Y2=(2*PI*FF*C2)
   LET Y3=(2*PI*FF*C3)

   LET ω=(2*PI*FF)
   LET Rs=0.1    !Rsの単位はオーム      ①とアースに入れる。
   LET IS=10     !Isの単位はアムペア  Rsに加わる電流源で①とアースを1Vにする。

   LET NP=4
   DIM A(NP,NP)
   DIM T(NP,NP)

   DIM EOUT(NP,1)
   DIM B(NP,1)
   LET K=1

   !*********** データーと計算方法*****************
   !方法-1
   !  ミルマンの定理やキルヒホッフの法則なぞを多用、直接解く。

   !方法-2
   !  回路の①端子とアース間に0.1オームの抵抗、アドミッタンスGsをわざとつける。
   !  電流源 10A を入力にして①端子とアース間の(Gs)に加えて V1を約  1Vとする。
   !  以下は、想定の回路につなげ、端子間のアドミッタンスを考え節点方程式を作る。
   !  ①ー②にR1,②ー③にR2,②ーアースに容量C1,③ー④にR3,④ーアースに容量C3
   !  C3の電圧V4を増幅器に入力。⑤にはV5=K*V4の電圧がでる。
   !  ③に増幅器の出力V5を、⑤から容量C2で ③に正帰還,・・・ V5=K*V4
   !  ②端子の電圧をV2,③端子の電圧をV3,④端子の電圧をV4,⑤端子の電圧をV5
   !  総てアドミッタンスで計算。
   !  ①①,②②,③③,④④等 Gij(i=j)はその節点に接続されるアドミッタンスの和
   !  ①-②, ②-③ 等 Gij(i?j)は接続されてるアドミッタンスに-1を掛けて代入。
   !  Ampを除き、要素のみを考えると対称行列になり,ノードの数が行列の大きさ。
   !  行列は 5x5 だが V5=K*V4 を考えA(3,4)=-(1/R3)に A(3,5)=-ω*C2*jを加える
   !  Kは A(3,4)=-(1/R3)-K*ω*C2*j増幅器の出力 E5=K*E4の関係を入れA(3,5)を消す
   !  一方  A(4,3)=-(1/R3) とし非対称とした。A(4,3)=A(3,4)では不具合であった
   !  最終の行列は  4x4 の非対称に成るが、Kが直接指定できる利点があるようだ。
   !  結果はKの値に敏感で K=0.9875~1.0125までで、K=1 が最適。K= 1.0125でピーク


   !方法-3
   !文献や投稿を参照

   !***********************方法-2の計算  今回はこれで挑戦*****************

   FOR K=0.9875 TO 1.0125 STEP 0.0125       !KはAMPのゲイン。
      FOR P=1 TO 57
         LET FF=FREQ(P,1)
         LET ω=(2*PI*FF)

         LET A(1,1)=(1/Rs)+(1/R1)           !①①端子のアドミタンスの合計
         LET A(1,2)=-(1/R1)                 !①②端子のアドミタンスの -1

         LET A(1,3)=0
         LET A(1,4)=0

         LET A(2,1)=-(1/R1)
         LET A(2,2)=(1/R1)+(1/R2)+ω*C1*j  !②②端子のアドミタンスの合計
         LET A(2,3)=-(1/R2)
         LET A(2,4)=0

         LET A(3,1)=0
         LET A(3,2)=-(1/R2)
         LET A(3,3)=(1/R2)+(1/R3)+ω*C2*j  !③③端子のアドミタンスの合計
         LET A(3,4)=-(1/R3)-K*ω*C2*j   !ここにKの値を入れ V5=K*V4 を反映。
         !ミルマンの定理を適用。
         LET A(4,1)=0
         LET A(4,2)=0
         LET A(4,3)=-(1/R3)                !A(3,4)とは値が異なる。
         LET A(4,4)=(1/R3)+ω*C3*j         !④④端子のアドミタンスの合計

         LET B(1,1)=10   ! 電流源から10Aを流している。①端子は1Vになる。
         LET B(2,1)=0    ! キルヒホッフの法則から  ゼロである。
         LET B(3,1)=0    ! キルヒホッフの法則から  ゼロである。
         LET B(4,1)=0    ! キルヒホッフの法則から  ゼロである。
         MAT T=INV(A)
         MAT EOUT=T*B
         ! PRINT "FF=";FF
         ! MAT PRINT EOUT
         LET EE1=EOUT(1,1)
         LET EE2=EOUT(2,1)
         LET EE3=EOUT(3,1)
         LET EE4=EOUT(4,1)
         LET EE5=K*EOUT(4,1)
         PRINT
         LET FREQ(P,2)=20*LOG10(ABS(EE5))
         ! LET FREQ(P,3)=20*LOG10(ABS(EE3))
         LET  G5=(ATN(IM(EE5)/RE(EE5)))
         IF FF>750 THEN LET G5=G5-180
         IF G5>0 THEN LET G5=G5-180
         LET  FREQ(P,4)=G5
         ! LET  G3=(ATN(IM(EE3)/RE(EE3)))
         ! IF FF>750 THEN LET G3=G3-180
         ! LET  FREQ(P,5)=G3
      NEXT P
      PRINT "K=";K
      PRINT "番号   周波数      E5         E3         θ5         θ3"
      FOR I=1 TO 57
         PRINT USING "###": I;
         PRINT USING " ###,###.#"  : FREQ(I,1);
         PRINT USING " ####.### dB": FREQ(I,2);
         PRINT USING " ####.### dB": FREQ(I,3);
         PRINT USING " ####.### 度": FREQ(I,4);
         PRINT USING " ####.### 度": FREQ(I,5)
      NEXT I

      !ここからは、山中様のグラフプログラムを参照。
      SET WINDOW 0.5,5.5, -55,5      !表示領域
      DRAW grid(1,5)                  !左端の目盛り
      FOR f=1 TO 6   !x軸が対数目盛 f=1 TO 5 で100k まで目盛る。
         SET COLOR 1 !1は黒色
  PLOT TEXT ,AT f-0.1,+0.15: mid$("10  100 1k  10k 100k ",4*(f-1)+1,4)
      NEXT f

      FOR f=1 TO 6   !y軸が直線目盛り
         SET COLOR 1 !1は黒色
  PLOT TEXT ,AT 0.8,-10*(f-1)-2: mid$("  0 -25 -50 -75 -100-125 ",4*(f-1)+1,4)
      NEXT f

      FOR I=1 TO 57 STEP 1 !周波数[Hz]
         SET COLOR 1
     PLOT LINES:LOG10(FREQ(I,1)) ,FREQ(I,2)/2.5; !利得[dB]
      NEXT I
      PLOT LINES

      !  FOR I=1 TO 57 STEP 1 !周波数[Hz]
      !     SET COLOR 5    !5は水色
      !     PLOT LINES: LOG10(FREQ(I,1)) ,FREQ(I,3)/2; !利得[dB]
      !  NEXT I
      !  PLOT LINES

      FOR I=1 TO 57 STEP 1 !位相角度[度]
         SET COLOR 4  !4は赤色
         PLOT LINES:LOG10(FREQ(I,1)) ,0.125*FREQ(I,4); !角度[度]
      NEXT I
      PLOT LINES

      !  FOR I=1 TO 57 STEP 1 !位相角度[度]
      !     SET COLOR 3   !3は緑色
      !     PLOT LINES:LOG10(FREQ(I,1)) ,0.25*FREQ(I,5); !角度[度]
      !  NEXT I
      !  PLOT LINES
      FOR f=1 TO 6     !y軸が直線目盛り
         SET COLOR 4
   PLOT TEXT ,AT 5.1,-10*(f-1)-2: mid$(" 0  -80 -160-240-320-400 ",4*(f-1)+1,4)
      NEXT f
      PRINT

   NEXT K   ! ここで,利得 Kを変化させる。

   !*******************************************************************
   !100 LET FF=1000
   !    PRINT 1/R1
   !    PRINT 1/R2
   !    PRINT 1/R3
   !    PRINT  Y1
   !    PRINT  Y2
   !    PRINT  Y3
   !   FOR I=1 TO NP      ! 白石様の御助言を参照。マトリクスのチェックをした。
   !      FOR J=1 TO NP
   !         LET Z=A(I,J)
   !         PRINT USING "(##.######### ":RE(Z);
   !         PRINT USING "##.#########)  ":IM(Z);
   !      NEXT J
   !      PRINT
   !   NEXT I
   !**********************************************************************

END
 

戻る