Plate Follower Modeling (2)

Featured image

지난 번 포스팅에서는 plate follower model을 했을 때 어떤 특성을 얻을 수 있는지에 대해서 다뤘다. 기본적으로 아날로그 회로를 시뮬레이션할 때, 특히나 비선형 소자가 들어있으면 수치해석적인 방법을 사용해야 한다고 말했다. 그 이유는 비선형 소자 모델을 전부 풀어내어 closed form solution을 얻어내야 하는데 그 해가 간단하지 않기 때문에, 특정 변수 (전압 혹은 전류)를 조금씩 변화시켜서 선형 회로부와 비선형 소자의 조건을 일치시키는 방법을 생각해볼 수 있다. 여기서 나는 다음과 같은 방법을 사용하였다.

1) plate current를 서서히 증가시킴

2) 이 때의 plate/grid/cathode에 나타날 전압을 계산함

3) vgk, vpk를 적용하여 triode의 current (ig,ip)를 적용함

4) 1)에서의 plate current와의 차를 계산함 (err)

5) 4)의 error가 허용수준 이하가 될 때까지 1)~4) 과정을 반복함

다시 말해서 방정식의 해를 구하기 위해서 무수히 많은 해답을 가정하여 그것들을 각자의 수식에 적용해본 뒤에 결과를 비교해보는 것이다. 이 과정을 최대한 줄여서 합리적으로 해를 찾는 방법은 대학 수치해석과목에 보면 잘 나오고, 간단한 loop를 통해서 계산이 가능한데, 그중 하나가 Newton Raphson Method라는 것으로 도함수를 이용하는 방법이다. 이해하기 쉽게 무단으로 어딘가에서 그림을 가져왔다.

image

수식을 대충 보면 하나의 점화식인데, 그 식을 그대로 볼 게 아니라 다르게 해석을 하면 이해가 빠르다. 즉, 처음 x0위치에서 함수값을 계산해봤더니, 오차 f(x0)가 발견되었고, 이 오차바탕으로 를 다음 시도에서 줄여나가려면 x0에서 관찰한 오차의 기울기 (f(x0)/f’(x0))만큼 빼낸 위치에서 시도하는 것이다. 가지고 있는 정보는 해당 시점에서 볼 수 있는 기울기 뿐이므로, 함수가 되도록이면 선형함수이길 기대하며 iteration을 시도하는 것이다.

이 방법 역시 iteration의 수를 합리적으로 줄여서 해에 빠르게 접근할 수 있는 방법이지만, 매번 이 방법으로 해를 찾는다는 것은 쉬운 일이 아니다. 그런데, 입력신호의 샘플링 주파수보다 2 혹은 4배, 아니면 8배 정도 빠르게 샘플한다고 보면 실제로 회로 안에서 움직이는 신호의 변화폭이 매우 작으므로 신호가 변화하는 동안 빠르게 해에 수렴할 가능성이 높아진다.

특히 회로를 구성하는 요소 중, 도함수와 연관된 값, C 혹은 L 성분이 있을 때에는 전압의 시간에 관한 미분값(=capacitor 양단간을 통과하는 전류), 또는 전류의 시간에 관한 미분값(=coil 양단간의 전압)이 이 골치아픈 수식의 빠른 수렴을 돕게 된다. 즉, 우리가 구하려는 값을 C의 전압으로 놓으면 비선형 소자가 붙어있는 회로의 전압/전류값을 이 미분값을 이용하여 빠르게 접근할 수 있으므로, 단순히 샘플레이트를 높이는 것 만으로도 비선형 회로 시뮬레이션이 실시간으로 가능해지는 것이다.

더군다나 이미 여러 번 언급한 것처럼, 디지털 영역에서 비선형 연산을 적용하여 신호를 변형하는 것만으로도 원치 않는 하모닉이 발생하고 그 하모닉이 aliasing되어 원래 신호를 교란해야 하므로 어쩔 수 없이 oversample을 해야했던 것을 생각하면, 아니 기쁠 수 없는 일인 것이다 (수식을 통해 증명해보면 이 둘이 맞물려야 할 수 밖에 없음을 누군가 잘 설명해놓았다).

앰프 시뮬레이션을 하는 이펙트에는 필수적으로 oversample rate가 스위치로 달려있고 더러는 quality 혹은 HD 등으로 표기가 되어있는데, 이것은 다 이러한 사실에 근거하는 것이다. 단순한 비선형 모델로 뉘앙스만 살리는 이펙트라 할 지라도 oversampling이 필요하고, 회로를 제대로 시뮬레이션하는 이펙트의 경우에도 해에 빠르게 접근하기 위해서 oversampling을 해야 한다.

더욱 더 고마운 것은 수렴시에 발생하는 에러는 대부분 high frequency 성분으로서 앰프 시뮬레이션시 매 증폭단에서 cut되거나 출력단에서 cut되어 나타나지 않는다는 것이다.

아래는 44.1kHz의 4배로 sample했을 때의 plate follower (220k Rp, 1.8k Rc, 350V B+)를 시뮬한 것이다. 해를 추적하는 과정에서 미분값이 아닌 상수로 추적하게 하여 일부러 에러가 많이 발생하도록 조작한 것이다. 아래는 +/- 1v를 스윙하는 100 Hz의 sine wave를 입력했을 때의 결과이다. Current를 해로 추적하는 예제인데 입력의 변화가 작아서 error가 매우 작게 나타난다. image 아래 그림에서는 입력 신호의 주파수를 1kHz로 올려서 해를 추적할 때의 속도가 미치는 영향을 보았다. 4배 oversample을 했지만 오차가 크게 증가했다. 그림에서 보는 바와 같이 신호의 변화 폭이 가장 큰 지점 (sine wave의 값이 정 중앙을 지날 때)에서 가장 큰 error가 나타남을 알 수 있다.

image

다음 그림에서는 다시 주파수를 100Hz로 낮추고 진폭을 4배로 늘려서 얼마나 빠르게 해를 추적하는지 살펴보았다. 그림에서 보는 바와 같이 진폭이 늘어난 관계로 추적시 오차가 증가했음을 알 수 있다. 역시 마찬가지로 신호의 변화폭이 가장 작은 부분 (distortion이 일어나는 부분)에서 error가 가장 작고 신호의 변화폭이 큰 부분에서 error가 증가함을 알 수 있다.

image

아래에서는 주파수와 진폭 모두를 각각 1kHz, 4배(8V)로 증가시켰다. 실제 톤에 영향을 크게 미치는 수준으로 오차가 증가했음을 볼 수 있다.

image

실제의 기타 앰프 모델의 경우 증폭단이 늘어갈 수록 출력 전압 폭이 크게 증가하기 때문에 이러한 방법으로는 시뮬이 불가능하다. 다음에는 어떻게 더 효율적으로 시뮬레이션을 할 지에 대해서 살펴보기로 한다.