class D amplifier에 PWM 입력이 주어지면 어떨까?

Featured image

제목 그대로 생각해보면 어차피 class D amplifier의 출력이 PWM이니까 PWM을 입력으로 넣어줘도 상관없는 것 아닐까? 하는 생각을 해본다. 정말 그럴까? 하는 궁금증이 생긴다.

그냥 대충 생각해보면 어차피 PWM이라는 것이 원래의 신호성분을 주파수 영역에서 \(1/T_s\) 간격으로 복사본을 만들어내는 것과 같으니까 그게 다시 한번 반복되는 것이니까 다시 한번 반복되더라도 나중에 LPF 하면 원래 신호성분은 그대로 얻어낼 수 있으니까 아무 문제없는 것 아닐까 하는 생각을 하게 된다.

PWM 신호를 일반적인 class D amplifier에서 만드는 방법은 주기적인 톱니파를 입력과 같이 comparator 넣어주는 것이다.

일단 수식을 작성해보자. Jekyll에서 이게 제대로 나올지는 모르겠다만.

PWM 신호는 일반적으로 톱니파 (saw wave)와 입력의 진폭을 비교하여 그 결과를 이용하게 된다. 그러니까 saw wave generator 출력과 아날로그 입력을 comparator에 먹여서 그 결과를 얻는 것이다.

수식으로 전개하면

\[x_{PWM} (t) = {\rm sgn} ( x(t) - \sum_n s(nT_s)),\]

여기서, 톱니파 \(s(t) = t\) (for \(0 le t <T_s\)) 이다. 즉, 톱니파의 무한한 대열에 대해서 비교 결과를 얻게 되는 것이다. 대충 이것을 주파수 영역에서 해석해보면 입력 신호 \(x(t)\)의 주파수 응답을 \(1/T_s\) 주파수 간격으로 벌려놓은 것과 같은 결과를 얻게 된다. 톱니파도 어찌보면 일반적인 impulse (\(\delta (t)\))의 무한열과 유사하다고 볼 수 있으니까.

여기서 입력 x(t)를 또 다른 PWM 신호라고 치면, 여전히 PWM 신호가 주파수 영역에 좌우로 \(1/T_s\) 간격 만큼 벌려있는 것이라고 볼 수 있다.

즉, \(T_2 \le T_1\)라고 하면 아래와 같은 관계가 성립된다고 볼 수 있다.

\[x_{PWM^2} (t) = {\rm sgn} ( x_{PWM} (t) - \sum_n s(nT_1)) \\ = {\rm sgn} ( {\rm sgn} ( x (t) - \sum_n s(nT_2)) - \sum_n s(nT_1))\\ = {\rm sgn} ( x (t) - \sum_n s(nT_2)),\]

이 때 문제는

중요한 것은 LPF를 통해서 원래 신호를 회복시킬 수 있는 조건이 되느냐 아니냐인데, 입력의 톱니파 주기도 입력 아날로그 신호의 최대 주파수보다 충분히 높고 변환시의 톱니파 주기도 충분히 높은 지경이라면 귀에 들릴 정도의 차이는 없지 않을까 싶지만, 샘플링 주기가 달라지면 샘플링 시점의 위상에도 변화가 생기는 것이니까 이 때문에 음질의 변화가 생기지 않을까 하는 염려는 있을 수 있다. 그러나 분명히 \(T_2\)가 \(T_1\)에 비해 충분히 작다고 (충분히 촘촘히 샘플링 한다고) 보면 분명히 별 문제가 없다고 볼 수 있을 것이다.

여기서 문제는 톱니파와 PWM 입력의 전압관계인데 PWM입력이 0-3.3V를 오간다고 하고 PWM입력은 이를테면 (-1.0, +1.0) 구간을 스윙한다고 보면, 여기서 위상차가 발생할 수 있으니까 이것은 문제가 될 수 있다. 예를 들어 단순히 아주 작은 C를 하나 붙여서 (-1.6, 1.6) 구간을 스윙하도록 만들어주면 (즉, DC를 제거하면) 큰 왜곡없이도 전달이 가능하지 않을까 생각해 볼 수 있다.

왜 이런 일을 하느냐? Raspberry pi zero W에 airplay speaker를 하나 만들어보기 위해서다. 기왕이면 bluetooth receiver도 활용해서 upnp + airplay + bluetooth speaker를 만들어보는 것인데, raspberry pi zero W는 별도의 audio단자가 없어서 PWM 출력만을 얻을 수 있다.

추후 실험해보고 결과를 적어보기로 하겠다.