Plate Follower Modeling (3)

두번째 포스팅에서 얻은 결론은 회로를 시뮬레이션 함에 있어서 선형회로의 경우는 대부분 간단한 필터로 시뮬레이션이 가능한 반면 비선형 소자가 존재하는 경우에는 방정식을 풀어야 하는 문제가 있는데, 이 또한 closed form의 해를 얻기가 쉽지 않아서 Newton Raphson과 같은 수치해석적인 방법을 이용해서 해를 찾는다고 하였다. Newton Raphson 방법은 오차, 그리고 오차의 도함수(미분값)을 이용하여 해를 찾아가는 방법이다. Iteration을 통해서 해를 찾아가는 방법들은 대개 이렇게 오차를 구하고 그것을 feedback하는 방법으로 문제를 풀어간다.

어떻게 하면 빨리 해를 찾을 수 있을까? 2배 oversampling을 한다면 1-2회 iteration에 마쳐야 하고, 4배면 4회안엔, 뭐 이런 식이다. 따라서 oversampling rate이 낮으면 그만큼 오차가 발생할 확률도 커지게 될 거다. oversampling을 하지 않으면 뭐 한방에 맞춰야 되는데 이럴 일은 없으므로 아예 오차 덩어리가 될 것이다. 입력 신호가 빠르게 변하면 그만큼 더 오차가 커지는 것이고. 따라서 이 방법을 택할 땐 아예 단순한 모델을 쓰는 것이 유리할 것이다. 실제 회로를 시뮬레이션하는 게 아니라 Axe Fx가 그렇게 하듯 pre-filter + clipper + post-filter의 형식으로 가는 것이다. 실제 회로와 같으냐라고 물어보면 다르다라고 해야겠지만, 진공관스럽냐 물어보면 이것은 어디까지나 주관적인 것이라 그렇다고 하는 사람도 있고 아닌 사람도 있을 것이다.

구태여 이렇게 복잡한 모델링을 하려는 이유는 실제의 앰프와 같기를 바라는 목적에서 비롯된 것이니까 똑같은 것을 추구해야겠지.

진공관을 어떻게 모델링하느냐에 따라 다른 것이겠지만 아무리 못해도 1개 정도의 capacitor는 있게 된다. 그것을 parasitic cap으로 하는 것이 가장 좋은 선택일 것이다. 왜냐하면 나머지 위치의 cap은 붙이는 경우도 있고 아닌 경우도 있기 때문에 그렇다.

다시 Newton Raphson의 식을 진공관에 맞춰 쓰자면 다음과 같다.

ip(n+1) = ip(n) - f(ip(n))/f’(ip(n))

여기서 error function f(x)는 다음과 같이 쓴다.

f(x) = g(Vin-xRc, Bplus-x(Rc+Rp)) - x

따라서, ip를 위 함수에 넣어주면 tube model로 얻어지는 ip와 미리 가정해놓은 ip와의 차이 = 오차가 구해진다. 여기서 f(x)의 도함수를 계산하면 모든 게 깔끔해지는데, tube model이 복잡한 함수라 쉽지 않다.

K-method라고 해서 타인들의 non-linear 회로 simulation 방법을 꺼내보면 다음과 같다.

1) 새로운 입력 (vin, b+ voltage)에 대해서, 현재의 state variable (voltages at capacitors)을 이용하여 tube model input을 계산한다.

2) Tube model input을 바탕으로 새로운 ip, ig를 얻는다.

3) 얻어진 ip, ig를 이용하여 state variable을 update한다.

여기서 적용한 방법은 비선형 회로를 드라이브하는 3단자의 전압값을 state variable을 통해서 얻고, 그렇게 변화된 결과를 state variable에 업데이트 하는 방향으로 진행된다. 과연 이 방법이 도움이 될까?

기본적으로 state variable이 없으면 이 식은 구동이 불가하다. 회로에서 state variable, 즉 memory의 역할을 하는 것은 L아니면 C이다. C라고 하면 state variable은 C 양단간의 전압이 된다. C양단간의 전압이 어떻게 변화하느냐가 C를 관통하여 흐르는 전류의 양을 결정하기 때문이다.

따라서, 초기 조건으로 C의 전압을 모두 0으로 가정했다면, 이것을 기준으로 tube에 작용하는 3단자 전압을 구할 수 있다. 그것을 바탕으로 ip, ig를 계산할 수 있다. 애초에 아무런 전류가 없었는데 갑자기 전류가 흐르게 되므로 이 시스템은 큰 충격을 받겠지만 C가 있어서 일종의 관성으로 작용을 하게 될 것이다. 이 과정에서 발생한 전류는 state variable의 변화를 일으킨다. 즉 C에 전하가 충전되어 전압이 증가하게 될 것이다. 그러면 그렇게 변화된 전압과 새로 받은 입력의 변화를 통해서 또 다른 ip, ig를 계산하는 과정을 반복하게 된다.

몹시 그럴싸하다. Sample rate이 올라가면 이 과정이 매우 빠르게 일어나게 될 것이다. 그런데 잘 될까?

다음에는 이 과정을 실험해보도록 한다.