PLL을 설명하기에 앞서 무선 통신에서 동기화(Synchronization)에 대해 알아보자.
앞선 포스팅에서 설명의 편의를 위해 무선 채널은 AWGN만 가정하고 ADC와 DAC의 샘플링 클럭은 동일하다고 가정했다.
또 송신부와 Local Oscilator와 수신부의 Local Oscilator에서 생성하는 반송파 주파수 역시 동일하다고 가정했다.
그러나 현실에서는 위 가정이 모두 성립하지 않는다.
현실에서 ADC와 DAC의 샘플링 클럭은 다르다. 이는 곧 송신 신호와 수신 신호의 샘플링 타이밍이 왜곡된다는 뜻이다.
결국 수신 신호에서 심볼 당 샘플이 정수배에서 이루어지지 않아 왜곡된다.
Local oscailtor에서 생성하는 주파수 차이는 Passband에서 baseband로 신호를 downconversion할 때 문제가 생긴다.
송신부에서 반송파 주파수를 생성해 baseband 신호를 passband 신호로 바꾸고 수신부에서는 반송파 주파수를 생성해 passband 신호를 baseband 신호로
바꾸기 때문에 신호의 중심 주파수에 미세한 오차가 발생한다.
따라서 수신부에서는 왜곡된 신호를 복구 하는 알고리즘이 필요하다. 이것이 동기화이다.
일반적으로 모뎀의 수신부에서 동기화를 하는 방법에는 크게 2가지 방법이 있다.
첫 번째로는 Data-aided 방식이다.
수신부에서 동기화를 하기 위해 송신부에서 데이터를 보낼 때 의도적으로 수신부도 알고 있는 정보를 보낸다.
그 중 송신부와 수신부 사이에 공유하는 정보를 Training Sequence 또는 Preamble 라고 한다.
아래 그림에서 Preamble을 활용한 신호 구조를 나타낸다.
신호는 크게 Preamble 부분과 Data 부분으로 나뉘고 Preamble은 수신부에서 동기화를 위해 사용된다.
일반적으로 Preamble은 Data 앞 부분에 배치하여 Preamble 부분에서 신호 동기화를 하여 Data 부분을 오류 없이 수신할 수 있게 한다.
Data Aided의 다른 방식으로는 pilot을 중간 중간에 삽입하는 방식이다 아래와 그림과 같다.
데이터 중간 중간에 송/수신부가 공유하는 정보인 pilot을 심어 동기화에 도움이 될 수 있도록 한다.
이러한 Data Aided 방식은 동기화를 잡는데 유효하지만, 데이터가 아닌 부가적인 정보이므로 스펙트럼 효율이 떨어진다.
이를 해결하기 위해 Non-Data Aided 방식이 적용된다.
Non-Data Aided 방식은 수신된 신호를 기반으로 위상의 변화 등을 추출하여 동기화를 수행하는 방식이다.
Data Aided 방식에 비해 스펙트럼은 효율적이나 무작위 잡음이 섞여 들어오는 수신 신호에서 신뢰성 있는 정보를 위해 루프 필터를 사용하는데 루프 필터의 수렴 속도가 느린 단점이 있다.
따라서 시스템에 맞게 적절한 동기화 알고리즘을 사용해야 한다.
PLL이란 일반적으로 클럭의 jitter를 감소시키는데 많이 활용된다. 클럭의 jitter란 클럭의 위상이 흔들리는 현상이다. 실제로 모든 디지털 로직은 클럭을 기반으로 움직인다. 클럭은 규칙적인 상승 엣지를 발생하면서 모든 디지털 로직은 상승 엣지마다 특정 연산을 수행한다.
그러나 실제 클럭은 구현의 문제로 인해 불규칙적인 상승 엣지를 발생한다. 이를 클럭의 jitter라고 한다.
PLL은 이러한 클럭의 jitter를 없애기 위해 존재하는 장치라고 생각하면 된다.
신호의 클럭 jitter 또는 위상 잡음을 없애기 위해서 PLL은 reference 신호와 내가 사용할 신호 두 개를 입력으로 받는다.
그리고 reference 신호를 기반으로 내가 사용할 신호의 jitter를 제거한다. 그 후 출력으로 jitter가 제거된 신호를 내보낸다.
위 그림은 PLL의 구조이다.
PLL의 input 신호와 output 신호는 아래와 같다.
PLL은 출력 신호의 를 input 신호의 와 최대한 동일하게 만들어 위상 잡음을 없애야 한다.
이 때 을 phase error라고 정의한다.
위 그림에서 Phase Error Dectector는 reference 신호와 내가 사용할 input신호를 비교하여 위상 차이 을 계산한다.
Loop Filter는 Phase Error Detector에서 계산된 위상 차이 을 입력으로 받아 루프를 돌면서 무작위로 발생하는 위상 차이 의 신뢰성을 높힌다.
만약 Loop Filter의 값이 수렴하면 신뢰성 있는 정보로 판단한다.
최종을 추정된 위상 차이 을 NCO에 입력한다.
NCO(Numericllay Controlled Oscillator)는 루프 필터에서 최종 추정된 위상 오차를 갖는 신호를 생성해 input 신호에 곱해 위상 오차를 보정한다.
이 때 목적은 reference 신호와 input 신호간 위상 오차를 최소화 하는 것이다.
이제 각 과정이 어떻게 이루어지는지 자세하게 살펴보자.
먼저 Input신호의 위상 과 NCO에서 생성하는 위상 를 서로 빼서 위상 오차 을 생성한다.
생성된 오차 을 phase error detection 함수 에 넣어 초기 위상 오차 을 만든다.
그럼 함수 는 어떻게 동작할까?
설명을 위해 임을 가정하여 아래 순서를 따라가보자.
위 과정을 통해 의 크기가 커져서 위상 오차가 0으로 수렴하게 된다.
인 경우에는 위 과정이 반대로 동작한다.
위 과정을 그래프로 표현하면 아래와 같다.
위 그래프를 S-curve라고 한다. x축은 위상 오차 이고 y축은 평균 위상 오차 추정 이다.
PLL이 안정상태에 이르면 위상 오차가 0이므로 S-curve의 원점 위치에 이 존재할 것이다.
위 S-curve를 보면 의 크기에 따라 위상 오차를 조정하는 힘이 결정된다. 가 클수록 더 빨리 위상 오차를 조정하려고 한다.
그러나 모양을 잘 보면 S-Curve는 비선형적인 모양을 띈다. 여기서 우리는 PLL의 상태를 결정할 수 있다.
이 때 해석을 쉽게 하기 위해 아주 작은 에서 s-curve를 관찰하면 비선형 함수를 선형 함수로 해석할 수 있다. 이를 식으로 나타내면 아래와 같다.
이 때 는 원점 근처에서 S-curve의 기울기이다. 그리고 phase error detector의 gain으로 정의한다.
비선형 함수가 선형 함수로 바뀌었기 때문에 하드웨어 적으로 곱셈기로 구현할 수 있다. 위 그림은 비선형 함수 를 의 Gain을 갖는 증폭기로 대체한 그림이다.
Loop Filter는 PLL에서 크게 2가지 역할을 수행한다.
PLL에서 Loop Filter는 대표적으로 Proportional+Integrator(PI) 루프 필터를 사용한다. 구조는 아래 그림과 같다.
위 그림에서 먼저 Proportional 구조를 살펴보자.
Proportional 구조는 단순히 Gain을 갖는 증폭기이다. Proportional을 통과한 신호는 아래 식과 같다.
다음으로 Integrator 구조를 통과한 신호는 아래 식과 같다.
Integrator 식을 잘 살펴보면 전방 차분 적분을 수행하는 것을 알 수 있다. 이러한 적분 항은 PLL의 정상 상태 오차를 0으로 수렴하는데 도움을 준다.
Proprotional 항과 Integrator 항을 더해 최종 Loop Filter의 출력인 이 만들어진다. 식은 아래와 같다.
는 샘플링 주기를 의미한다.
다음은 NCO에 대해 알아보자.
루프 필터에서 생성된 NCO 제어 신호 은 NCO로 입력된다. 의 크기는 NCO가 생성하는 phase에 영향을 준다.
NCO의 내부 구조는 아래 그림과 같다.
NCO는 크게 Phase Accumulator와 LUT(Look-Up Table)로 구성되어 있다.
먼저 Phase Accumulator에 대해 알아보자.
NCO는 루프 필터의 출력 의 크기에 따라 출력 phase 의 크기를 아래와 같이 조절한다.
는 Oscillator의 이득이고 일반적으로 1로 설정한다. n-1까지의 덧셈은 Phase error detector에서 나온 값을 누적하는 것이다.
즉 phase Accumulator란 loop filter에서 나온 위상 오차를 누적합을 한 후 특정 이득 만큼 곱하는 것이다. 위 식은 아래와 같이 다시 쓸 수 있다.
위에서 추정된 위상 오차 은 LUT로 이동한다.
LUT에 특정 위상에 따른 정현파 신호를 저장해놓고 을 입력으로 받아서 출력 신호를 내보낸다. 식은 아래와 같다.
따라서 PLL의 내부 구조를 모두 그린 그림은 아래와 같다.