빠르게 만들자..(1)

Featured image

Tube model에서 여태 골치가 아팠던 부분은 비선형 방정식을 numerical approach로 풀어내는 과정이었다. 이 과정이 경우에 따라 수십번도 걸리기도 하고 한다. Newton-Raphson을 써서 이 정도면 다른 접근 방식을 쓰면 더 오래걸릴 수도 있고, 실시간으로 방정식을 풀어내는데 매번 Newton-Raphson을 쓴다는 자체도 어찌보면 웃기는 일이기도 하다.

그러면, 이 과정을 확 줄여버려야 하는데, 그러려면 방법은 하나 뿐이다. 미리 해답지를 가지고 있는 것이다. 그러면 그 해답지는 어떻게 되어야 하는 것이냐 하는 것인데, 이미 여러 번 얘기했다 시피 우리의 tube model이란 게 vgk, vpk를 넣으면 ip, ig를 만들어주는 model이라고 했고, vgk, vpk를 풀어내려면 이미 회로에 저장되어있는 상태 - 즉 capacitor에 충전된 전압 -와 입력에 따라 결정되는 것이니까, 해답지는 이렇게 구성되어야 할 것이다.

이를 테면 parasitic cap만 고려한다고 하면,

parasitic cap의 voltage와 입력 단자의 전압을 넣어주면 vgk, vpk가 뽑혀주는 table이 필요한 것이다. 만일 cathode cap을 고려한다면 입력 변수는 3개가 될 것이다. 여기에 추가적으로 plate cap까지 고려하면 table은 4차원이 된다.

4차원으로 테이블을 만들자면 그 크기도 어마어마할 뿐더러 증폭단이 여러 개로 증가하면 사실상 만들어쓰기 매우 곤란한 지경에 이르게 될텐데, 일단 그 문제는 다음에 생각하기로 하고, 이번 포스팅에서는 10x10x10x100짜리 테이블을 쓴 plate follower 모델에 간략화를 적용해 본 결과를 보기로 하자. 회로의 구성은 다음과 같다.

Rg=68k, Rp=220k, Rk=1.8k, Cp=100pF, Cpg=2.4 pF, Ck=1uF, B+=350V

이 때 160 vpp인 3초짜리 Chirp Signal을 입력했을 때의 accurate C mode 대비 오차를 그래프로 그려보면 다음과 같다.

image

image

각각에서 확인하는 바와 같이 오차는 입출력 전압의 범위에 비해 매우 작게 얻어짐을 알 수 있다. 이 모델은 small signal model을 적용했을 때와는 비교할 수 없을 정도의 정확도를 가지고 있으므로, accurate model이라고 봐도 좋을 듯 하다.

아래는 3초짜리 Chirp signal을 만드는데 걸리는 시간을 측정한 것이다. 10x10x10x100짜리 테이블을 만들기 위해 accurate C model을 구동하는데 걸린 시간이 수행시간의 거의 대부분을 차지한다.

image

즉, 3초짜리 44.1kHz x 4 (4배 oversampling)한 신호를 만드는데 54 msec, 결국, 증폭단 1개에 i5 core한 개의 약 1.8%의 계산량으로 처리가 가능하다. 대부분 4-5단의 증폭단을 가지고 있으므로, 사실상 10% 정도의 CPU load를 잡아먹게 된다.

이 과정을 요약하면 다음과 같다.

1) 미리 accurate C model로state variable과 input에 대해 비선형 디바이스를 드라이브할 변수(Vgk, Vpk)를 table화 해놓는다.

2) 새로운 입력이 주어지면 입력과 현재 회로의 state variable (capacity에 충전된 voltage)를 주소로 하여 Vgk, Vpk를 가져온다. (table의 size를 줄이기 위해 interpolation을 쓰는 것은 불가피하다)

3) 2)에서 가져온 Vgk, Vpk를 이용하여 Ip, Ig를 계산하고 (accurate tube model을 사용함), 그 결과로 state variable (cap. voltages)를 업데이트 한다.

4) 출력 전압을 뽑아낸다.

이 과정에서 3)에서 복잡한 비선형 함수를 쓰는 tube model을 이용하게 되는데, 이 역시도 table화 하면 memory는 다소 증가하지만, 실행시간을 엄청나게 절약할 수 있다.

12AX7 triode 2개를 cascade로 이어붙이고 마지막단은 마샬 종지를 했을 때 얻어지는 사운드를 테스트해본다.

입력신호는 20에서 20kHz까지 진행하는 Chirp signal (44.1kHz x 4)이다.

이것은 accurate C model로 계산한 결과다.

Accurate tube model + Plate follower table로 계산한 결과

tube table (20x100) + plate follower table로 계산한 결과

전반적인 소리는 비슷하게 들릴 수 있으나 table로 구한 것은 속도는 매우 빠르나 오차가 제법있어서 비록 신호의 찌그러짐을 유도하나 음색이 탁하게 들린다. 두번째 모델은 비록 테이블을 쓰긴 했으나 테이블 크기를 늘려서 위 그래프에서 얻어지는 오차수준보다 낮은 결과로 accurate C model 대비 큰 차이를 느끼기 어렵다. 4배 oversampling을 했지만 chirp signal에서는 aliasing의 효과를 잘 느낄 수가 있다. 기타의 경우는 입력 신호 주파수가 10kHz 이내에 몰려있으므로 대략 4배면 찌그러짐에 의한 aliasing은 느끼기 어렵다고 알려져있다.