통신 시스템
도 1은 디지털 통신 시스템(50)을 도시한 블록 다이어그램이다. 두 개의 접근 단말기(Access Terminal, ATs, 52, 58)가 기지국(Base Station, BS, 70)을 통하여 통신한다. AT(52) 내부에 있는 송신 처리 장치(Transmit Processing Unit, 64)은 음성 데이터를 인코더(60)에 송신하고, 인코더는 음성 데이터를 인코딩하고 패킷화하며, 패킷화된 데이터를 하위 계층 처리 장치(Low Layer Processing Unit, 58)로 보낸다. 전송을 위해서, 데이터를 BS(70)로 보낸다. BS(70)는 수신된 데이터를 처리하고 수신된 데이터를 AT(82)로 전송하며, 데이터는 하위 계층 처리 장치(88)에서 수신된다. 그 후에 데이터는 디-지터 버퍼(86)에 공급되고, 디-지터 버퍼에서는 지터의 충격을 나타나지 않게 하거나 감소시키기 위해서 데이터를 저장한다. 데이터는 디-지터 버퍼(86)로부터 디코더(Decoder,84)를 지나서 수신 처리 장치(Receive Processing Unit,92)로 전송된다.
AT(82)로부터의 전송을 위해, 데이터/음성은 송신 처리 장치(94)로부터 인코더(90)로 송신된다. 하위 계층 처리 장치(88)는 BS(70)로 전송하기 위한 데이터를 처리한다. AT(52)에서는 BS(70)로부터 오는 데이터의 수신을 위하여, 데이터는 하위 계층 처리 장치(58)에서 수신된다. 데이터 패킷은 그리고 나서 디-지터 버퍼(56)로 보내어지고, 요청되는 버퍼 길이 혹은 딜레이에 도달할 때까지 패킷 데이 터가 디-지터 버퍼에 저장된다. 일단 버퍼 길이 혹은 딜레이가 얻어지면, 디-지터 버퍼(56)는 데이터를 디코더(54)에 보내기 시작한다. 디코더(54)는 패킷화된 데이터를 음성 데이터 패킷으로 변환하고 패킷을 수신 처리 장치(62)로 보낸다. 현재 예에서, AT(52)의 작동은 AT(82)와 유사하다.
디-
지터
버퍼
AT에서 저장 장치(Storage) 혹은 디-지터 버퍼는, 위에서 언급한 대로, 지터의 효과를 나타나지 않게 하기 위해서 사용된다. 일례로, 적응성 디-지터 버퍼는 VoIP 통신과 같은 패킷 교환 통신에 사용된다. 디-지터 버퍼는 적응성 버퍼 메모리를 가지고 있고, 음성 타임 와핑을 이용하여 가변적인 딜레이와 지터를 추적하는 능력을 향상시킨다. 이 예에서 디-지터 버퍼의 처리는 디코더의 처리와 동등하며, 디코더에서 디-지터 버퍼는 패킷을 타임 와핑할 기회 혹은 필요성을 확인하고, 패킷을 타임 와핑할 것을 디코더에 명령한다. 디코더는 디-지터 버퍼에서 명령을 내린 것과 같이 패킷을 압축 혹은 신장함으로써 패킷을 타임 와핑한다.
도 2는 디-지터 버퍼의 실시예를 나타낸 도면이다. 입력되는 인코딩된 패킷들은 버퍼 내에 축적되고, 저장된다. 예를 들어, 버퍼가 FIFO(First In First Out) 버퍼라면, 데이터는 특정한 순서로 수신되고, 그 순서에 의해서 처리되며, 제 1 로 수신되는 데이터가 제 1 로 처리된다. 다른 예로, 디-지터 버퍼는 어느 패킷을 다음에 처리해야 하는지를 지속해서 관리하는 순서를 짠 리스트이다. 적응성 디-지터 버퍼 메모리 저장 장치일 수도 있는데, 디-지터 버퍼의 상태는 적응성 디-지터 버퍼에 저장된 데이터(혹은 패킷의 수)의 척도가 된다. 디-지터 버퍼에서 처리된 데 이터는 디-지터 버퍼로부터 디코더 혹은 다른 유틸리티(Utility)로 보내진다. 인코딩된 패킷은 음성 데이터의 고정된 양에 대응하는데, 예를 들어 8kHz의 샘플링 비율(Sampling Rate)에서는 20 msec가 음성 데이터의 160개의 샘플에 대응한다. 본 발명의 예로, 타임 와핑 기능이 있을 때 디코더에 의해 생산된 샘플의 수는 패킷이 타임 와핑 되었느냐 안되었느냐에 따라서 변하게 된다. 디-지터 버퍼가 디코더/타임 와핑에 패킷을 신장하라는 명령을 내리면, 디코더/시간 와퍼(Warper)는 160개 이상의 샘플을 만들어낸다. 반면에 디-지터 버퍼가 디코더/타임 와핑에 패킷을 압축하라는 명령을 내리면, 디코더/타임 와핑은 160개 이하의 샘플을 만들어낸다. 주목할 점은, 대체(Alternate) 시스템은 20ms로 보코딩(Vocoding)하는 것을 제외하는 것처럼, 다른 재생 방식을 가지고 있다는 점이다.
디-지터 버퍼에 도착하는 패킷들은 일정한 간격을 두고 도착하지 않는다. 그러므로 디-지터 버퍼의 설계 목표 중 하나는 들어오는 데이터의 불규칙함을 조정하는 것이다. 이 발명의 예로, 디-지터 버퍼는 타겟 디-지터 버퍼 길이를 가진다. 타겟 디-지터 버퍼 길이는 제 1 패킷의 재생을 시작하기 전에 디-지터 버퍼에서 축적된 데이터의 요청되는 양을 말한다. 다른 예로, 타겟 디-지터 버퍼 길이는 디-지터 버퍼에서 제 1 패킷이 재생되기 전에 딜레이 되는데 필요한 시간의 양을 말한다. 타겟 디-지터 버퍼 길이는 도 2에 도시되어 있다. 패킷 재생을 시작하기 전에 디-지터 버퍼에 충분한 패킷을 축적함으로써, 디-지터 버퍼는 패킷이 고갈될 가능성을 최소화하면서 일정한 간격으로 후속 패킷을 재생할 수 있다. 도 2는 디-지터 버퍼를 도시하는데, 디-지터 버퍼에 처음으로 수신되는 보코더(Vocoder) 패킷은 디-지터 버퍼로부터 나오는 출력으로 예정되어 있는 다음 패킷이다. 디-지터 버퍼는 요청되는 디-지터 버퍼 딜레이를 만족시키기 위해서 충분한 패킷을 포함한다. 이런 방식으로, 디-지터 버퍼는 패킷에 생기는 지터를 평활화하고(Smooth) 수신부의 패킷 도착 시간 변동이 나타나지 않게 한다.
도 3은 다양한 시나리오에서 전송, 수신 및 패킷의 재생 타임 라인(Timeline)을 도시한다. 제 1 패킷(PKT 1)은 시간 t0에서 전송되고 t₁에서 수신되어 재생된다. 이어지는 패킷들, PKT 2, PKT 3, PKT 4들은 PKT 1의 전송 이후에 20 ms의 간격을 두고 전송된다. 타임 와핑이 없다고 하면, 디코더는 제 1 패킷의 재생 시간부터 일정한 시간 간격(예를 들어 20 ms)을 두고 패킷을 재생한다. 예를 들어, 만약 디코더가 일정하게 20 ms 간격을 두고 패킷을 재생한다면, 처음으로 수신된 패킷은 시간 t₁에서 재생되고, 다음으로 도착하는 패킷들은 t₁부터 20 ms, 40 ms, 60 ms 후에 재생될 것이다. 도 3에 도시된 것처럼, PKT 2의 예상 재생 시간(디-지터 버퍼 딜레이가 없는 경우)은 t₂=t₁+20 ms이다. PKT 2는 예상 재생 시간 t₂ 전에 수신된다. 한편, PKT 3은 예상 재생 시간이 t₃=t₂+20 ms 이고, 그 후에 수신된다. 이러한 조건을 언더플로우(Underflow)라고 한다. 언더플로우는 재생 유틸리티가 패킷을 재생할 준비가 되어 있을 때 발생하지만, 디-지터 버퍼에는 패킷이 존재하지는 않는다. 언더플로우인 경우 전형적으로 디코더가 소거(Erasure) 작용을 하거나, 재생 품질이 저하된다.
도 3은 제 1 패킷의 재생 이전에 디-지터 버퍼가 만드는 딜레이, tdjb에 대한 제 2 시나리오를 도시한다. 이 시나리오에서 디-지터 버퍼 딜레이가 추가되어 매 20 ms 마다 재생 유틸리티에서 패킷(혹은 샘플)을 수신할 수 있게 한다. 이 시나리오에서, PKT 3이 예상 재생 시간 t₃ 이후에 수신되었다고 하더라도, 디-지터 버퍼 딜레이가 추가됨으로써 PKT 3은 PKT 2가 재생된 20 ms 후에 재생된다.
PKT 1은 t0에 전송되고, t₁에 수신되며, t₁에 재생되는 대신에, 앞에서 했던 것처럼, t₁+tdjb=t₁'에 재생된다. 재생 유틸리티는 PKT 1이 수신된 후에 미리 정해진 간격, 예를 들면 20 ms 후에 혹은 t₂'=t₁+tdjb+20=t₂+tdjb에 PKT 2를 재생하고, t₃'=t₃+tdjb에 PKT 3을 재생한다. tdjb에 의한 재생 딜레이로 인하여 제 3 패킷은 언더플로우가 발생하지 않고 재생된다. 따라서 도 3에 도시된 것처럼, 디-지터 버퍼 딜레이의 도입은 언더플로우를 감소시키고 음성 품질의 저하를 막아준다.
음성은 유음(Talkspurts, 통화 스퍼트) 구간과 무음 구간으로 구성된다. 무음 구간의 신장/압축은 음성 품질에 최소한도에서 영향을 미치거나 혹은 아예 영향을 미치지 않는다. 이로 인하여 디-지터 버퍼는 제 1 패킷의 재생을 각각의 유음에 대하여 다르게 딜레이시킬 수 있다.
도 4a와 4b는 서로 다른 유음에 대한 송신과 수신 타임 라인을 도시한다. 주목할 점은 디-지터 버퍼 딜레이의 양은 언더플로우를 막기 위해 결정된다는 점이다. 이를 "최적(Optimal) 디-지터 버퍼 딜레이"라고 한다. 최적 디-지터 버퍼 딜레이는 타겟 디-지터 버퍼 길이와 관련이 있다. 다시 말해서, 버퍼에 충분한 데이터를 저장하여 재생 유틸리티의 스펙(Specification)에 맞게 패킷이 재생되도록 타겟 디-지터 버퍼 길이가 결정된다. 최적 디-지터 버퍼 딜레이는 시스템에서 사용되는 가장 큰 단-대-단 딜레이에 의해서 결정된다. 대체방안으로(Alternately), 최적 디-지터 버퍼 딜레이는 시스템에서 사용되는 평균 딜레이에 기초할 수도 있다. 또한 최적 디-지터 버퍼 딜레이를 결정하는 다른 방법들은 주어진 기준 혹은 시스템 디자인에 따라서 구현될 수 있다. 더 나아가, 타겟 디-지터 버퍼 길이는 최적 디-지터 버퍼 딜레이에 영향을 미치도록 결정되며, 그러므로 타겟 디-지터 버퍼 길이는 수신된 패킷 비율, 패킷 에러 비율(Packet Error Rate, PER) 혹은 다른 작동 통계에 기초하여 연산된다.
도 4a와 4b는 두 가지 예에서 최적 디-지터 버퍼 딜레이를 도시한다. 도시된 대로, 순차적인 패킷의 송신과 수신 사이에 걸리는 시간간격은 시간에 따라 변화한다. PKT 3은 송신되고 수신되기까지 가장 긴 딜레이를 가지고, 이 차이는 디-지터 처리(Processing)을 위한 최적 딜레이 결정에 사용된다.
타겟 디-지터 버퍼 길이가 있는 디-지터 버퍼를 이용하여 최소한 약간의 언더플로우 상태를 피할 수 있다. 도 3을 다시 참고하면, 제 2 시나리오는 언더플로우를 제거하였다.(디코더에 패킷이 입력되려하고, 재생 유틸리티가 패킷의 재생을 준비하고 있지만, 패킷 저장 버퍼에 패킷이 존재하지 않는 경우에 발생한다.) 여기서, PKT 1의 재생 시간을 t₁이라 할 때, t₁ 다음에, 미리 정해진 간격인 20 ms 후에 PKT 2가 재생된다. PKT 3이 시간 t₃에서 재생을 예상 혹은 예측하고 있는 동안, PKT 3은 t₃가 경과 되기까지는 PKT 3은 수신되지 않는다. 다시 말해서, 재생 유틸리티는 PKT 3을 재생할 준비가 되어 있지만, 이 패킷은 저장 버퍼 내에 존재하지 않는다. PKT 3이 예상된 시간에 재생을 위해서 존재하지 않기 때문에, PKT 3은 재생될 수 없고, 그 결과 많은 양의 지터와 PKT 3에 대한 언더플로우가 발생한다. PKT 4는 PKT 4의 예상 재생 시간인 t₄에 재생된다. 주목할 점은 예상 시간 t₄가 t₃로부터 연산된다는 점이다. 각각의 패킷은 하나 이상의 음성 패킷을 포함하고 있기 때문에, 언더플로우로 인한 패킷의 손실은 음성 품질을 저하시킨다.
고려할 수 있는 또 다른 시나리오에는, 도 5에 도시된 바와 같이 "딜레이된 패킷으로 인한 언더플로우"의 실행(Run)이 포함되는데, 여기에는 패킷의 송신, 수신 및 예상되는 재생 시간이 시간에 맞추어 도시되어 있다. 이 시나리오의 경우, 각각의 패킷은 그것의 예상되는 재생 시간 보다 약간 늦게 수신된다. 예를 들어 PKT 50의 예상 재생 시간이 t0이지만, PKT 50은 t0 이후 t0'가 될 때까지 수신되지 않는다. 다음 패킷인 PKT 51이 시간 t₁에서 예정되어 있지만, t₁이후의 t₁'가 될 때까지 수신되지 않는다. 이 때문에, 딜레이된 패킷으로 인한 언더플로우, 즉 높은 비율의 "딜레이된 언더플로우" 및 그에 따른 더 높은 단-대-단 딜레이를 유발하는 언더플로우의 실행이 이루어진다.
명백하게, 재생을 대량으로 딜레이시키는 디-지터 버퍼는 언더플로우를 최소한으로 유지시키는데에 성공적일 것이다. 그러나, 그러한 디-지터 버퍼는 큰 디-지터 버퍼 딜레이를 패킷의 단-대-단 딜레이로 도입하게 된다. 큰 단-대-단 딜레이로 인하여 대화의 흐름을 유지하는 데에 어려움이 생길 수 있다. 100ms 보다 큰 딜레이는 듣는 사람으로 하여금 말하는 사람이 말을 마치지 않았다고 생각하도록 만들 수 있다. 그러므로, 이상적으로는 좋은 품질을 위해 언더플로우를 회피하는 것과 단-대-단 딜레이를 줄이는 것 양쪽을 고려한다. 문제는 한 문제를 해결하고 나면 다른 문제가 악화될 수 있다는 점에 있다. 다시 말해서, 더 작은 단-대-단 딜레이가 일반적으로 더 많은 언더플로우를 발생시키고, 그 역도 마찬가지이다. 따라서 이렇게 경합하는 목표들의 균형을 맞출 필요가 있다. 특히, 디-지터 버퍼가 단-대-단 딜레이를 감소시키는 한편, 언더플로우를 추적하여 회피할 필요성이 존재한다.
디-
지터
버퍼
타켓
길이
적응성 디-지터 버퍼의 설계 목표는, 작은 단-대-단 딜레이를 구현하면서도 그외 동시에 시스템이 음성 패킷의 특정한 "언더플로우 비율"을 타겟으로 할 수 있도록 하는 것이다. 인지되는 품질이 언더플로우 비율의 함수이기 때문에, 특정한 비율의 언더플로우를 타겟으로 하는 능력은 음성 품질의 제어를 가능하게 한다. 디-지터 버퍼에서의 패킷 언더플로우는 누락된(Missing) 패킷이 존재할 때 발생할 수 있다. 패킷은 그것이 손실되거나 딜레이될 때 누락될 수 있다. 액세스 망의 어딘가에서, 예컨대 물리적 계층이나 포워드 링크 스케줄러(Forward Link Scheduler) 상에서 손실된 패킷이 드롭되는 경우처럼, 손실된 패킷이 수신기에 도달하기 이전에 드롭될 때 손실된 패킷은 언더플로우를 유발한다. 이 시나리오에서, 디-지터 버퍼 딜레이를 사용함으로써 언더플로우를 수정할 수는 없는데, 이는 패킷이 아예 디-지터 버퍼에 도달하지 않기 때문이다. 선택적으로는, 언더플로우는 딜레이된 패킷의 결과물로서 발생할 수 있고, 그 재생 시간 이후에 도착한다. 딜레이된 패킷으로 인한 언더플로우를 추적하는 것 외에, 적응성 디-지터 버퍼는 손실된 패킷으로 인한 언더플로우도 추적할 수 있다.
딜레이된 패킷으로 인한 언더플로우의 수는 언더플로우를 디-지터 버퍼 딜레이와 맞교환(Trade Off)함으로써 제어할 수 있다. 딜레이된 패킷으로 인한 언더플로우의 목표 비율을 나타내는 값을 "언더플로우 타겟"이라고 한다. 이 값은 디-지터 버퍼의 동작을 위한 목표치이며, 합리적인 범위 내에서 단-대-단 딜레이를 유지하도록 선택된다. 일 예의 경우, 1%(0.01)의 값이 "언더플로우 타겟"으로 사용될 수 있다. 다른 예에서는 0.5%(0.005)의 값을 사용할 수 있다. "언더플로우 타겟"을 구현하기 위하여, 디-지터 버퍼 딜레이를 적응시킬 수 있다.
본 발명의 일 예에서, 딜레이된 패킷으로 인한 언더플로우(이하 "딜레이된 언더플로우"라고 함) 비율의 필터링된 값은 디-지터 버퍼 딜레이를 적응시키는데 사용될 수 있다. 각 무음 구간의 끝(혹은 각 유음 구간(Talkspurt: 통화 스퍼트)의 시작)에서, 상기 디-지터 버퍼 딜레이는 도 6에 도시된 바와 같이 업데이트된다. 도 6에 도시된 바와 같이, 알고리즘은 다음과 같이 특정된다.
1) If (PERdelay < TARGET_VALUE) then
DEJITTER_DELAY=DEJITTER_DELAY-CONSTANT;
2) If (PERdelay > TARGET_VALUE&&PERdelay >= last_PERdelay) then
DEJITTER_DELAY=DEJITTER_DELAY+CONSTANT;
3) Set DEJITTER_DELAY=MAX(MIN_JITTER,DEJITTER_DELAY);
AND
4) DEJITTER_DELAY=MIN(MAX_JITTER,DEJITTER_DELAY). (1)
본 발명에서, 최초의 디-지터 버퍼 딜레이는 40 ms 와 같은 상수 값으로 정해진다. TARGET_VALUE는 "딜레이된 언더플로우"의 목표치(예컨대, 1%)이다. PERdelay는 필터의 파라미터가 TARGET_VALUE가 얻어질 수 있도록 하는 경우에 패킷의 "딜레이된 언더플로우" 비율의 필터링된 값이다. 상기 last_PERdelay는 디-지터 버퍼 딜레이의 이전 업데이트에 있어서 PERdelay의 값이다. DEJITTER_DELAY는 앞서 정의했던 바와 같이 타겟 디-지터 버퍼 길이이다. 본 예에서, CONSTANT는 20 ms 이다. MIN_JITTER와 MAX_JITTER는 디-지터 버퍼 딜레이의 최소 및 최대의 값으로서, 일 예에 따르면 이들은 각각 20ms 및 80ms로 설정된다. MIN_JITTER와 MAX_JITTER는 시스템 시뮬레이션(Simulation)에 기초하여 평가될 수 있다. 상기 값들(MIN_JITTER, MAX_JITTER, CONSTANT)은 디-지터 버퍼가 배치되는 통신 시스템에 따라 최적화될 수 있다.
상기 PERdelay는 각 무음 구간의 끝 혹은 각 통화 스퍼트의 시작에서 업데이트 될 수 있으며, PERdelay은 다음과 같이 연산된다.
PER_CONSTANT는 PERdelay를 추정하기 위해 사용되는 필터를 위한 시간 상수이다. 이 상수의 값은 필터의 메모리를 결정하고, TARGET_VALUE를 만족시키도록 해야한다. Current_PERdelay는 PERdelay의 마지막 업데이트와 현재 업데이트 사이에 관찰된 "딜레이된 언더플로우"의 비율이다.
Current_PERdelay는 딜레이된 언더플로우 패킷의 수와 PERdelay의 마지막 업데 이트와 현재 업데이트 사이에 수신된 패킷의 전체 수의 비율로 정의된다.
도 6을 참고하면, 디-지터 버퍼 딜레이를 연산하고 업데이트하기 위한 본 프로세스(100)는 단계(101)에서 상기 DEJITTER_DELAY를 개시함으로써 시작한다. 단계(102)에서는 비교 단계에 의하여 PERdelay가 TARGET_VALUE와 비교된다. 만약 PERdelay가 TARGET_VALUE보다 작으면, 단계(104)에서 상기 CONSTANT 값을 DEJITTER_DELAY로부터 뺀다. 만약 단계(102)에서 PERdelay가 TARGET_VALUE보다 크고, 단계(103)에서 PERdelay가 TARGET_VALUE보다 크고 LAST_PERdelay보다 크거나 같고, 단계(102)에서 최종 PERdelay만큼 크다면, 프로세스는 결정 단계(108)로 계속된다. DEJITTER_DELAY는 단계(108)에서 DEJITTER_DELAY와 CONSTANT 값의 합으로 설정된다. 단계(103)에서부터 계속하면, 만약 PERdelay가 TARGET_VALUE보다 크지 않고 LAST_PERdelay보다 크지 않거나 같으면, 프로세스는 단계(110)으로 계속된다. 단계(104)에서부터 계속하면, 단계(110)에서 DEJITTER_DELAY는 DEJITTER_DELAY 및 MIN_JITTER의 최대값과 같게 설정된다. 프로세스는 단계(110)에서부터 단계(112)까지 계속하여, 단계(112)에서 DEJITTER_DELAY를 DEJITTER_DELAY 및 MAX_JITTER의 최소값과 같게 설정한다.
딜레이 추적
디-지터 버퍼는 (언더플로우 비율을 추적하는 대신에) 딜레이를 추적하는 모드로 들어갈 수 있다. 추적되는 딜레이는 단-대-단 딜레이 혹은 디-지터 버퍼 딜레이이다. 일 예의 경우, 디-지터 버퍼는 타겟 언더플로우 비율이 쉽게 충족될 때 "딜레이 추적" 모드로 들어간다. 이는 디-지터 버퍼가 어떤 구간의 시간 동안 타겟 언더플로우 비율보다 더 낮은 언더플로우 비율을 구현할 수 있음을 의미한다. 이러한 시간의 구간은 수백 밀리초에서 수 초 중 어느 구간일 수도 있다.
이 모드에서 디-지터 버퍼는 타겟 딜레이(Target Delay) 값(목표 지연값)을 가진다. 이는 상기하였던 언더플로우 타겟 값과 유사하다. 상술한 식 (1)은 언더플로우 비율을 타겟팅하는데 사용될 수 있으며, 유사한 방법으로 타겟 딜레이 값을 연산하는데 사용될 수 있다. 디-지터 버퍼가 타겟 딜레이 값을 목표로 하여 이 모드에 들어가는 경우, 타겟 딜레이가 유지되는 한 그 타겟 언더플로우 비율을 감소시키는 것이 가능하게 될 수 있다.
내재적인 버퍼 적응
일부 상황에서, 디코더는 아직 수신되지 않은 패킷을 재생해야 할 수 있다. 이러한 상황이 도 5에 도시되어 있는데, 여기서 PKT 50의 예상 재생 시간이 t0이지만, PKT 50은 이 시간 후에 수신된다. 마찬가지로, PKT 51은 예상 재생 시간인 t₁ 후에 수신되고, PKT 52는 예상 재생 시간인 t₂ 후에 수신되며, 나머지도 마찬가지이다. 여기서, 패킷들은 꽤 규칙적으로 도착하지만, PKT 50은 그것의 예정 재생 시간보다 조금 늦게 수신되었기 때문에, 후속의 패킷도 전부 재생 시간을 놓치게 된다는 점에 주목해야 한다. 한편, 만약 디코더가 t0에서 소실부(Erasure)를 삽입하여 PKT 50을 여전히 t₁에서 재생할 수 있다면, 패킷 전부가 재생 시간을 맞추는 것이 가능할 것이다. PKT 50 대신 소실부가 재생되고 난 이후에 PKT 50을 재생함으로써, 디-지터 버퍼 길이는 효율적으로 적응된다.
소실부 이후에 PKT 50을 재생하는 경우 불연속이 유발될 수 있는데, 이는 2005년 7월 7일에 제출되어 함께 계류 중인 "보코더에서의 위상 정합"이라는 제목의 출원번호 제11/192,231호에 개시된 위상 정합 기술을 이용함으로써 제거 가능하다는 점에도 주목한다.
도 7a에 도시된 바와 같이, PKT 3과 PKT 4 사이의 시간 간격(Gap)과 같이 패킷의 수신에는 간격이 존재할 수 있다. 패킷 도착 시의 딜레이는 각 패킷마다 다를 수 있다. 디-지터 버퍼는 딜레이를 보상하기 위한 조정(Adjustment)에 즉각적으로 반응한다. 도시된 바와 같이, PKT 1, PKT 2 및 PKT 3은 각각 시간 t₁, t₂, t₃에서 수신된다. 시간 t₄에서, PKT 4가 수신될 것으로 예상되지만, PKT 4는 아직 도착하지 않았다. 도 7a에서는 패킷들이 매 20 ms 마다 수신될 것으로 가정하고 있다. 본 도면에서, PKT 2는 PKT 1 이후 20 ms 에서 수신되고, PKT 3은 PKT 1 이후 40 ms 에서 수신된다. PKT 4는 PKT 1 이후 60 ms 에서 수신될 것으로 기대되지만, PKT 1 이후 80 ms에 이르기까지 도착하지 않는다.
도 7b에서 초기 딜레이(Initial Delay)는 수신된 첫번째 패킷, PKT 1의 재생 이전에 디-지터 버퍼에서 도입된다. 여기서 초기 딜레이는 Dinit이다. 이 경우, PKT 1은 시간 Dinit에서, PKT 2는 시간 Dinit+20 ms에서, PKT 3은 Dinit+40 ms에서 버퍼에 의해 재생될 것이다. 도 7b에서, PKT 4가 예상 시간인 Dinit+60 ms 에서 도착하는데 실패하는 경우, 디-지터 버퍼에 의하여 소실부가 재생될 수 있다. 패킷을 재생할 다음 시간에, 디-지터 버퍼는 PKT 4를 재생하려고 할 것이다. 만약 PKT 4가 여전히 도착하지 않았다면, 시간 Dinit+80 ms에서 또 다른 소실부를 송신할 수 있다. 소실부는 PKT 4가 디-지터 버퍼에 도착할 때까지 계속 재생된다. 일단 PKT 4가 디-지터 버퍼에 도착하면, PKT 4가 재생된다. PKT 4가 수신될 때까지는 어떤 다른 패킷도 재생되지 않기 때문에, 이와 같은 프로세스는 딜레이를 유발한다. 시스템이 회복할 수 없는 경우, 즉 PKT 4를 결코 수신할 수 없는 경우에, 본 시스템은 프로세스의 리셋을 적용하여, PKT 4의 재생 없이 PKT 4에 후속하는 패킷의 재생을 가능하게 할 수 있다. 상술한 시나리오에서, PKT 4가 도착하기 전 긴 구간의 시간 동안 소실부가 계속 전송될 수 있기 때문에, 상기 디-지터 버퍼의 단-대-단 딜레이가 증가할 가능성이 있다.
반면에, 도 7c에 도시된 예에서는, 만약 패킷이 도달하지 못하거나, 패킷의 수신이 딜레이될 경우에, PKT 4의 예상 재생 시간에서 소실부가 재생된다. 이는 도 7b와 관련하여 설명한 상기 시나리오와 유사한데, 여기서 본 시스템은 PKT 4를 위해 대기한다. 다음의 재생 시간에서, PKT 4가 여전히 도착하지 못하였지만 다음 패킷인 PKT 5가 도착하였다면, PKT 5가 재생된다. 추가적으로 설명하기 위하여, PKT 4의 수신이 딜레이되었고 디-지터 버퍼가 시간 Dinit+80 ms에서 PKT 4를 수신할 예정이라고 가정한다. PKT 4가 딜레이되는 경우, 소실부가 재생된다. 시간 Dinit+100 ms에서, 만약 PKT 4가 여전히 도착하지 않았다면, 또 다른 소실부를 재생하는 대신에 PKT 5가 재생된다. 이 두번째 시나리오에서는, 딜레이에 대한 조정이 즉시 이루어져서, 통신 네트워크에서의 과도한 단-대-단 딜레이가 회피된다. 재생에 앞서 버퍼에 저장된 데이터의 사이즈가 데이터의 수신에 따라 증가 및 감소하기 때문에, 이러한 프로세스를 IBA라고 할 수 있다.
도 8a의 순서도에는 내재적 버퍼 적응(IBA, Implicit Buffer Adaptation) 프로세스(200)가 도시되어 있다. 본 프로세스(200)는 출력 제어기(Output Controller, 760)에서 혹은 디-지터 버퍼 제어기(756)에서와 같은 적응성 디-지터 버퍼 내의 제어기에서 구현될 수 있다. 본 프로세스(200)는 적응성 디-지터 버퍼를 지원하는 시스템 내의 다른 부분에 존재할 수 있다. 단계(202)에서, 재생을 위한 다음 패킷을 제공하기 위한 요청이 적응성 디-지터 버퍼에서 수신된다. 다음 패킷은 순서상에서 인덱스(Index) i를 가지는 패킷, 구체적으로는 PKT[i]로서 식별된다. 단계(204)에서, 만약 IBA 모드가 인에이블된다면, 프로세스는 IBA 모드에 따라 동작하기 위하여 206까지 계속되고, 만약 IBA 모드가 디스에이블된다면 , 프로세스는 IBA 모드 없이 226까지 계속된다.
만약 PKT[i]가 단계(206)에서 수신되면, 상기 적응성 디-지터 버퍼는 단계(208)에서 재생을 위해 PKT[i]를 제공한다. IBA 모드는 단계(210)에서 디스에이블되고, 인덱스 i는 증가한다(즉, i=i+1). 나아가, 만약 PKT[i]가 단계(206)에서 수신되지 않고 단계(214)에서 PKT[i+1]이 수신된다면, 프로세스는 단계(216)까지 계속되어 PKT[i+1]을 재생한다. 단계(220)에서, IBA 모드는 디스에이블되고, 단계(218)에서 인덱스 i는 두 번 증가한다(즉, i=i+2).
만약 단계(214)에서 PKT[i]와 PKT[i+1]이 수신되지 않는다면, 단계(222)에서 제어기는 소실부의 재생을 시작하고, 단계(224)에서 인덱스 i는 증가한다. 이 예에서, IBA 모드인 경우에, 제어기는 단계(202)에서 수신된 것과 같은 다음 패킷에 대한 요청에 응답하여 2개의 패킷까지 체크한다는 점에 주목한다. 이로써 제어기가 수신된 패킷을 검색하는 패킷 윈도우(Packet Window)를 효과적으로 구현한다. 선택적인 예에서는, 본 예의 경우 패킷 시퀀스 번호가 i, i+1, i+2인 3개의 패킷을 검색하는 다른 윈도우 사이즈를 구현할 수 있다.
단계(204)로 돌아가서, 만약 IBA 모드가 인에이블되지 않으면, 프로세스는 단계(226)으로 계속되어 PKT[i]가 수신되는지 여부를 결정한다. 만약 수신되었다면, 단계(228)에서 PKT[i]가 재생을 위해 제공되고, 인덱스 i는 단계(230)에서 증가한다. 만약 PKT[i]가 단계(226)에서 수신되지 않는다면, 적응성 디-지터 버퍼는 단계(232)에서 재생을 위해 소실부를 제공한다. PKT[i]가 수신되지 않았고 그 대신 소실부가 재생되었기 때문에, IBA 모드가 인에이블된다.
도 8b는 IBA 모드와 관련된 상태(State) 다이어그램이다. 노말(Normal) 모드(242)인 경우에, 만약 적응성 디-지터 버퍼가 재생을 위해 PKT[i]를 제공한다면, 제어기는 노말 모드에 머물러 있는다. 제어기는 소실부가 재생될 때, 노말 모드(242)에서 IBA 모드(240)로 천이된다. 일단 IBA 모드(240)에서는, 제어기는 소실부의 재생 시 그대로 유지된다. 상기 제어기는 PKT[i] 혹은 PKT[i+1]의 재생 시 IBA 모드(240)에서 노말 모드(242)로 천이된다.
도 9는 도 8a 및 도 8b에 도시된 바와 같은 같은 IBA를 구현하는 디-지터 버퍼의 일 예이다. 이 도면에서, 재생 유틸리티는 디코더로부터 재생을 위한 샘플을 요청한다. 그러면 디코더는 재생 유틸리티에 의한 중단되지 않은 재생을 가능하게 하기에 충분한 패킷을 디-지터 버퍼로부터 요청한다. 이 도면에서 패킷은 음성 통신을 전달하고, 재생 유틸리티는 매 20 ms마다 샘플을 재생한다. 선택적인 시스템은 다른 구성을 통하여 디-지터 버퍼로부터 재생 유틸리티로 패킷화된 데이터를 제공할 수 있으며, 상기 패킷화된 데이터는 음성 통신 이외의 것일 수 있다.
도 9에서는 디-지터 버퍼가 패킷의 스택(Stack)으로 도시되어 있다. 이 도면에서, 디-지터 버퍼는 PKT 49를 처음으로 수신하고, 이후 PKT 50, PKT 51, PKT 52, PKT 53 등을 후속하여 수신한다. 도면에서 패킷 번호는 패킷의 순서를 나타낸다. 그러나, 패킷화된 시스템에서 패킷이 이 순서대로 수신될 것이라는 보장은 없다. 이해를 명확히 하기 위해서, 이 도면에서는 패킷이 송신되는 경우와 동일한 번호 순서로 수신되며, 이는 재생의 순서이기도 하다. 도 9에 있어서 설명을 위하여, 디-지터 버퍼에서 후속으로 수신되는 패킷들은 이전에 수신된 패킷들의 위에 스택되는데, 예를 들어 PKT 49는 PKT 50 위에 스택되고, PKT 51은 PKT 50 위에 스택되며, 나머지도 마찬가지이다. 디-지터 버퍼에서 스택의 바닥에 있는 패킷은 첫번째로 재생 유틸리티에 전송된다. 이 도면에서 타겟 디-지터 버퍼 길이는 도시되어 있지 않다는 점에 주의한다.
도 9에서, 패킷의 수신, 패킷의 예상 수신 시간 및 패킷의 재생 시간을 시간축에 대하여 그래프로 나타내었다. 업데이트된 버퍼의 상태는 패킷이 수신된 각각의 시간에 도시되어 있다. 예를 들어, PKT 49가 시간 t0에 수신되고, PKT 49의 예상 재생 시간이 t₁이라고 하자. PKT 49를 수신할 때, 버퍼의 상태는 PKT 49의 수신 시간인 t0에서 그래프의 가장 위쪽에 도시되어 있다. 디-지터 버퍼에서 수신된 각 패킷의 수신 시간은 RECEIVED에 그래프가 그려져 있다. ANTICIPATED PLAYBACK 시간은 RECEIVED 시간 바로 아래에 그래프가 그려져 있다. 재생 시간은 PLAYBACK으로 표시되어 있다.
이 예에서, 애초에 재생을 위한 다음 패킷은 PKT 49이고, PKT 49의 예상 재생 시간은 t0이다. 다음의 연속 패킷(Sequential Packet)은 예상 재생 시간이 t₁이고, 나머지도 마찬가지이다. 제 1 패킷인 PKT 49는 예상 재생 시간인 t0 이전에 수신된다. 그러므로 PKT 49는 예상대로 t0에서 재생된다. 다음 패킷인 PKT 50은 예상 재생 시간이 t₁이다. 하지만 PKT 50의 수신이 딜레이되고, 소실부가 PKT 50 대신에 소실부가 재생 유틸리티로 전송된다. PKT 50의 딜레이는 앞서 기술한대로 언더플로우를 발생시킨다. PKT 50은 예상 재생 시간인 t₁ 이후이지만, 다음 예상 재생 시간인 t₂보다는 이전에 수신된다. 일단 수신되면, PKT 50은 디-지터 버퍼에 저장된다. 그러므로 시간 t₂에서 재생할 패킷에 대한 다음 요청이 수신될 때에, 시스템은 디-지터 버퍼에서 가장 낮은 순서의 패킷을 찾게 되고; PKT 50은 시간 t₂에서 재생을 위해 재생 유틸리티에 공급된다. 주목할 점은, IBA를 사용하면, 비록 PKT 50이 예정된 재생을 위해서 제시간에 수신되지 못했다고 하더라도, PKT 50은 나중에 재생되고, 나머지 시퀀스(Sequence)가 그 지점에서부터 다시 시작한다는 점이다. 도시된 대로, 후속 패킷들, PKT 51, PKT 52 등은 추가적인 소거를 피하기 위하여 제시간에 수신 및 재생된다.
비록 IBA가 패킷의 단-대-단 딜레이를 증가시키는 것처럼 보여도, 실제로는 그렇지 않다. IBA는 더 적은 언더플로우를 발생시키기 때문에, 상기 식 (1)로부터 추정한 디-지터 버퍼 값은 작은 값으로 유지된다. 그러므로 IBA의 전체적인 영향은 전체 패킷의 평균 단-대-단 딜레이를 감소시킨다.
IBA는 유음 구간을 가진 통신 프로세스를 향상시킨다. 유음 구간(Talkspurt: 통화 스퍼트)이란 음성 통신에서 소리(Speech)가 있는 부분을 말하는데, 음성 통신은 소리 부분과 무음 구간을 포함하며, 이는 일반적인 소리 패턴과 일치한다. 소리 처리에 있어서, 보코더는 소리를 위한 패킷의 한 타입과, 무음을 위한 다른 타입을 만들어낸다. 소리 패킷은 하나의 인코딩 비율로 인코딩되고, 무음은 서로 다른 인코딩 비율로 인코딩된다. 인코딩된 패킷이 디-지터 버퍼에 수신될 때, 디-지터 버퍼는 인코딩 비율로부터 패킷의 타입을 확인한다. 디-지터 버퍼는 소리 프레임(Frame)을 유음 구간의 일부로 가정한다. 최초의 무음이 아닌 프레임은 유음 구간의 시작이다. 유음 구간은 무음 패킷이 수신되면 끝난다. 비연속적인 전송에서, 모든 무음 패킷이 전송되는 것은 아닌데, 이는 수신부가 통신의 무음 구간을 발생시키는 시뮬레이션된 노이즈(Simulated Noise)를 구현하기 때문이다. 연속적인 전송에서, 모든 무음 패킷이 전송되고, 수신된다. 일례로, 디-지터 버퍼는 수신된 패킷의 타입에 따라서 디-지터 버퍼 길이를 조정한다. 다시 말해서, 시스템은 통신의 무음 구간을 위해서 요청되는 디-지터 버퍼의 길이를 감소시키도록 결정한다. 주목할 점은 IBA 방식은 재생이 고정 비율 등과 같이 미리 정해진 타이밍 방식에 따라 이루어지는 어떠한 통신에도 적용이 가능하다는 것이다.
타임
와핑
통화 스퍼트는 일반적으로 복수의 데이터 패킷으로 구성되어 있다. 일 예에서, 통화 스퍼트의 제 1 패킷 재생은 디-지터 버퍼 딜레이와 동일한 길이만큼 딜레이될 수 있다. 디-지터 버퍼 딜레이는 다양한 방법으로 결정될 수 있다. 일 시나리오의 경우, 디-지터 버퍼 딜레이는 상기 식 (1)과 같은 알고리즘에 기초하여 연산된 디-지터 버퍼 딜레이일 수 있다. 다른 시나리오의 경우, 디-지터 버퍼 딜레이는 디-지터 버퍼 딜레이의 길이와 같은 음성 데이터를 수신하는데 걸리는 시간일 수 있다. 선택적으로, 상기 디-지터 버퍼 딜레이는 앞서 설명한 값들 중 더 작은 값으로서 선택될 수 있다. 이 예에서, 디-지터 버퍼 딜레이를 식 (1)을 사용하여 연산하면 60 ms이고, 통화 스퍼트의 제 1 패킷은 제 1 시간 ti에서 수신된다고 가정한다. 통화 스퍼트의 다음 패킷이 제 1 패킷 이후 50 ms에서 수신되는 경우, 적응성 디-지터 버퍼 데이터는 디-지터 딜레이인 60 ms와 같다. 다시 말해서, 적응성 디-지터 버퍼에서의 패킷 수신에서부터 재생까지의 시간은 60 ms이다. 주목할 점은, 적응성 디-지터 버퍼의 타겟 길이가 60 ms 딜레이를 구현하도록 설정 가능하다는 점이다. 이와 같은 연산은, 딜레이 시간을 만족하기 위하여 얼마나 많은 패킷이 저장되어야 하는지를 결정한다.
적응성 디-지터 버퍼는 버퍼로부터 데이터의 채우기(Filling)와 비우기(Emptying)를 감시하고, 해당 버퍼의 출력을 조정하여 그 버퍼를 타겟 딜레이 길이, 즉 타겟 딜레이 시간을 얻기 위한 데이터의 양에서 유지한다. 디-지터 버퍼가 통화 스퍼트의 제 1 패킷을 재생하기 위하여 전송하는 경우, Δ만큼의 딜레이가 존재하는데, 여기서 Δ=MIN(디-지터 버퍼 딜레이, 디-지터 딜레이와 동일한 음성 데이터를 수신하기 위해 걸리는 시간)이다. 통화 스퍼트의 후속 패킷들은 이전 패킷을 재생하는데 걸리는 시간에 Δ을 더한 만큼 딜레이된다. 따라서 동일한 통화 스퍼트의 후속 패킷의 디-지터 버퍼 딜레이는 일단 제 1 패킷의 디-지터 버퍼 딜레이가 정의되고 나면 내재적으로(Implicitly) 정의된다. 실제에서는, 디-지터 버퍼 딜레이의 이러한 정의는 도 10에 도시된 바와 같은 상황에 대하여 적응하기 위해 추가적인 고려사항들을 요구할 수 있다.
도 10은 통화 스퍼트에 있어서 음성 정보의 전송을 도시한다. 통화 스퍼트(유음 구간, 150)는 시간 t0에서 수신되고, 통화 스퍼트(154)는 시간 t₂에서 수신된다. 통화 스퍼트(150)와 통화 스퍼트(154) 사이에는 20 ms의 무음 구간(152)이 있다. 수신할 때에 적응성 디-지터 버퍼는 수신 데이터를 저장하고, 각각의 유음부분의 재생을 위한 딜레이를 결정한다. 이 예에서 통화 스퍼트(150)는 시간 t0에서 적응성 디-지터 버퍼에 수신되고, 여기서 적응성 디-지터 버퍼 딜레이 시간은 80 ms로 연산된다. 디-지터 버퍼 딜레이를 수신 시간에 더한 결과가 재생이다. 이런 식으로, 통화 스퍼트(150)는 재생 이전에 적응성 디-지터 버퍼에 의하여 80 ms가 딜레이된다. 통화 스퍼트(150)는 시간 t₁에서 재생이 시작되고, 여기서 t₁=t0+80 ms, 즉 통화 스퍼트(150)가 수신되고 80 ms 후이며, 시간 t₄에서 재생을 완료한다. 식 (1)과 같은 알고리즘을 사용하여 위에서처럼 타겟 디-지터 버퍼 길이를 연산하면, 통화 스퍼트(154)에 적용된 디-지터 버퍼 딜레이는 40 ms 이다. 이것이 의미하는 것은 통화 스퍼트(154)의 제 1 패킷이 시간 t₃에 재생되고, t₃는 t₃=t₂+40 ms 혹은 통화 스퍼트(154)이 수신되고 나서 40 ms 이후가 된다. 하지만 시간 t₃에서 패킷(154)을 재생하는 것은 시간 t₄에서 재생이 끝나는 통화 스퍼트(150)의 마지막 패킷을 재생하는 것과 충돌(Conflict)이 발생한다. 그러므로 패킷(154)을 위해 연산한 40 ms의 디-지터 버퍼 딜레이는 통화 스퍼트(150)의 재생을 끝마치기 위해서 충분한 시간이 아니다. 그러한 충돌을 피하고, 두 패킷이 올바르게 재생되도록 하기 위해서, 통화 스퍼트(150)의 마지막 패킷이 통화 스퍼트(154)의 제 1 패킷과의 사이에 무음 구간(Silence Period)을 두고 재생된 이후에 통화 스퍼트(154)의 제 1 패킷이 재생되어야 한다. 이 예에서 통화 스퍼트(150)와 통화 스퍼트(154)는 시간 t₃와 t₄ 사이에서 중첩된다. 그러므로 이 시나리오의 재생 방법은 바람직하지 않다. 앞에서 기술하였던 것처럼 패킷의 재생 사이에 생기는 중첩을 피하기 위해서는 이전 유음 구간의 마지막 패킷이 재생되는 시점을 탐지할 필요가 있다. 따라서 패킷의 디-지터 버퍼 딜레이를 연산할 때는 이전에 재생된 패킷의 재생 시간을 고려하여야 하고, 그렇게 함으로써 오버랩이나 충돌을 피할 수 있다.
상기 기술한 예에서, 유음 구간의 시작에서 디-지터 버퍼 딜레이를 연산하거나 업데이트 할 수 있다. 하지만, 유음 구간은 길이가 자주 바뀌고 작동 상태도 유음 구간동안 변화하기 때문에, 유음 구간의 시작에서 디-지터 버퍼 딜레이의 업데이트를 제한하는 것은 한계가 있다. 도 10의 예를 고려하면 된다. 따라서 유음 구간동안 디-지터 버퍼 딜레이를 업데이트할 필요가 있다.
주목할 점은, 타켓 딜레이 길이를 유지하기 위해서 적응성 디-지터 버퍼로부터 나오는 데이터의 유입을 제어하는 것이 바람직하다는 것이다. 이 방식에서, 만약 적응성 디-지터 버퍼가 가변 딜레이로 데이터를 수신하면, 적응성 디-지터 버퍼로부터 출력되는 데이터가 조정되어 타겟 디-지터 버퍼 길이를 만족시키기에 충분 한 데이터로 버퍼를 채우게 된다. 적응성 디-지터 버퍼가 타겟 딜레이 길이를 유지하기에 불충분한 패킷을 수신하고 있을 때 패킷을 신장하기 위하여 타임 와핑이 사용된다. 유사하게, 타임 와핑은 적응성 디-지터 버퍼가 너무 많은 패킷을 수신하거나 타겟 딜레이 길이를 넘어선 패킷을 저장하고 있을 때 패킷을 압축하기 위해서도 사용된다. 이상에서 살펴본 것처럼 적응성 디지퍼 버퍼는 디코더와 마찬가지로 패킷을 타임 와핑하는 작동을 한다.
도 11은 네트워크 요소를 통하여 통신하는 두 개의 수신장치를 포함하는 시스템의 블록 다이어그램이다. 수신장치는 AT(252)와 AT(282)이고; 도시된 대로 AT(252, 282)들은 BS(270)을 통하여 통신하도록 적응되었다. AT(252)에서 전송 처리 장치(Transmit Processing Unit, 262)은 음성 데이터를 디지털화하는 인코더(260)에 음성 데이터를 전송하고, 패킷화된 데이터를 하위 계층 처리 장치(258)에 보낸다. 그리고나서 패킷은 BS(270)로 전송된다. AT(252)가 BS(270)로부터 데이터를 전송받을 때, 데이터는 먼저 하위 계층 처리 장치(258)에서 처리되고, 하위 계층 처리 장치에서 적응성 디-지터 버퍼(256)에 데이터 패킷이 제공된다. 수신된 패킷은 타겟 디-지터 버퍼 길이가 될 때까지 적응성 디-지터 버퍼(256)에 저장된다. 일단 타겟 디-지터 버퍼 길이에 도달하면, 적응성 디-지터 버퍼(256)는 데이터를 디코더(254)로 보낸다. 도시된 예에서, 타임 와핑을 구현하기 위한 압축과 신장은 패킷화된 데이터를 음성데이터로 변환시키고 음성 데이터를 수신 처리 장치(262)로 보내는 디코더(254)에서 이루어진다. 이 발명의 다른 예에서, 시간 압축과 신장(타임 와핑)은 제어기(도시되지 않았음)에 의해 적응성 디-지터 버퍼 내에서 이루어지기도 한다. AT(282)의 작동은 AT(252)의 작동과 유사하다. AT(282)는 전송 처리 장치(294)로부터 인코더(290), 하위 계층 처리 장치(288)를 거쳐 마지막으로 BS(270)까지 이어지는 경로를 통해 데이터를 전송한다. AT(282)는 하위 계층 처리 장치(288)로부터 적응성 디-지터 버퍼(286), 디코더(284)를 거쳐 수신 처리 장치(292)까지 이어지는 경로를 통해 데이터를 수신한다. 더 자세한 프로세스가 도시되지는 않았지만, 프로세스는 음성과 같은 데이터의 재생에 영향을 미치고, 오디오 처리(Audio Processing)이나 스크린 디스플레이(Screen Display) 등에도 영향을 미친다.
식 (1)의 디-지터 버퍼 식으로 유음 구간의 시작에서 디-지터 버퍼 딜레이를 연산할 수 있다. 디-지터 버퍼 딜레이는 유음 구간에 의해 결정된 것과 같은 패킷의 특정 숫자를 나타내거나 혹은 음성 데이터와 같은 데이터의 재생에 상응하는 예상 시간을 나타낸다. 여기서 주목할 점은 디-지터 버퍼가 타겟 크기를 가지고 있고, 그에 따라서 모든 시간 시점에서 저장된 디-지터 버퍼가 예상할 수 있는 데이터의 양이 결정된다는 것이다.
채널 상태와 다른 작동 상태로 인한 패킷 딜레이의 변동은 적응성 디-지터 버퍼에서 패킷의 도착시간에 차이를 발생시킨다. 결과적으로, 적응성 디-지터 버퍼에서 데이터의 양(패킷의 수)은 연산된 디-지터 버퍼 딜레이 값, 즉 DEJITTER_DELAY 보다 작거나 커지게 된다. 예를 들어, 패킷은 인코더에서 원래 만들어질 때보다 느리거나 빠른 비율로 디-지터 버퍼에 도달한다. 패킷이 디-지터 버퍼에 예상했던 것보다 느린 비율로 도달하면, 디-지터 버퍼가 고갈되기 시작하는데 이는 입력되는 패킷이 출력되는 패킷과 같은 비율로 공급되지 못하기 때문이다. 한편, 만약 패킷이 인코더에서 발생되는 것보다 빠른 비율로 디-지터 버퍼에 도달하면, 디-지터 버퍼의 크기가 커지기 시작하는데 이는 패킷들이 들어오는 것만큼 빠르게 디-지터 버퍼에서 빠져나가지 못하기 때문이다. 전자의 상태에서는 언더플로우가 발생하고, 후자의 상황에서는 디-지터 버퍼에서 더 큰 버퍼링(Buffering) 시간때문에 생기는 높은 단-대-단 딜레이가 발생한다. 만약 패킷 데이터 시스템의 단-대-단 딜레이가 감소하면, 이 딜레이 감소를 음성 재생과 합치는 것이 바람직하기 때문에, 후자는 중요하다. 단-대-단 딜레이는 중요한 음성 품질 요소이고, 어떠한 재생 딜레이의 감소도 대화 즉, 음성 품질을 증가시키는 것으로 이해할 수 있다.
디-지터 버퍼에서 DEJITTER_DELAY와 디-지터 버퍼에 실제로 존재하는 데이터의 양 사이에 발생하는 불일치를 수정하기 위해서, 디-지터 버퍼의 일례로 타임 와핑을 이용한다. 타임 와핑은 음성 패킷의 지속시간을 신장 혹은 압축하는 것이다. 디-지터 버퍼는 적응성 디-지터 버퍼가 고갈되기 시작할 때 음성 패킷을 신장함으로써 그리고 적응성 디-지터 버퍼가 DEJITTER_DELAY보다 커질 때 음성 패킷을 압축함으로써 타임 와핑을 구현한다. 적응성 디-지터 버퍼는 패킷을 타임 와핑하는 디코더와 동등한 작동을 한다. 타임 와핑은 단-대-단 딜레이를 증가시키지 않으면서 음성 품질을 상당히 향상시킨다.
도 12는 타임 와핑을 구현하는 적응성 디-지터 버퍼의 예를 나타내는 블록 다이어그램이다. 물리적 계층 처리 장치(Physical Layer Processing Unit, 302)는 데이터를 데이터 스택(Data Stack, 304)에 제공한다. 데이터 스택(304)은 패킷을 적응성 디-지터 버퍼와 제어 장치(306)로 출력한다. FL(Forward Link) MAC(Medium Access Control) 처리 장치(300)는 디-지터 처리 장치(306)에 통화 채널 전환(Handoff) 지시를 한다. MAC 계층(Layer)은 예를 들어 공기와 같은 물리적 계층에서 데이터의 수신과 송신을 위한 프로토콜을 구현한다. MAC 계층은 보안(Security), 암호화(Encryption), 인증(Authentication) 및 연결 정보를 포함한다. IS-856을 지원하는 시스템에서, MAC 계층은 제어 채널(Control Channel), 접속 채널(Access Channel), 순방향 및 역방향 통화 채널(Forward and Reverse Traffic Channel)을 제어하는 규칙을 포함한다. 타겟 길이 추정장치(Target Length Estimator, 314)는 식 (1)에 주어진 연산방법을 이용하여 타겟 디-지터 버퍼 길이를 디-지터 버퍼에 제공한다. 타겟 길이 추정장치(314)의 입력은 패킷 도착 정보와 현재 패킷 에러 비율(Packet Error Rate, PER)을 포함한다. 주목할 점은, 대체 구성은 적응성 디-지터 버퍼 안에 타겟 길이 추정장치(314)와 제어 장치(306)를 포함한다는 것이다.
예를 들어, 적응성 디-지터 버퍼와 제어 장치(306)는 더 나아가 재생에 제공되는 데이터의 비율을 제어하는 재생 제어를 포함한다. 적응성 디-지터 버퍼와 제어 장치(306)으로부터, 패킷은 DTX 장치(Discontinuous Transmission Unit, 308)로 보내어지는데, DTX 장치(308)는 음성 데이터가 수신되지 않았을 때 디코더(310)에 배경 잡음(Background Noise) 정보를 제공한다. 주목할 점은, 적응성 디-지터 버퍼와 제어 장치(306)에 의해 제공된 패킷은 디코드 처리을 위한 준비가 되어 있으며, 이 패킷을 보코더 패킷이라고 한다. 디코더(310)는 패킷을 디코드하고 PCM(Pulse Code Modulated) 음성 샘플을 타임 와핑 장치(312)에 제공한다. 대체 예에서, 타임 와핑 장치(312)는 디코더(310) 안에 구현된다. 타임 와핑 장치(312)는 적응성 디-지터 버퍼와 제어 장치(306)로부터 타임 와핑 지시자(Indicator)를 수신한다. 타임 와핑 지시자는 제어 신호, 명령(Instruction) 신호 혹은 플래그(Flag)이다. 이 예에서, 타임 와핑 지시자는 예를 들어 압축, 신장 및 타임 와핑이 없는 상태를 가지는 다중상태(Multi-state) 지시자이다. 서로 다른 압축 레벨(Level) 그리고/혹은 신장 레벨을 위해 서로 다른 값이 존재한다. 이 예에서, 타임 와핑 지시자는 타임 와핑 장치(312)에 데이터를 신장 혹은 압축할 것을 명령한다. 타임 와핑 지시자는 신장, 압축 혹은 와핑을 하지 않음을 지시한다. 타임 와핑 지시자는 타임 와핑 장치(312)에서 제어 신호 개시 액션(Action)으로 고려된다. 타임 와핑 지시자는 어떻게 패킷을 신장 혹은 압축할 것인가를 상세히 설명하는 메세지이다. 타임 와핑 지시자는 신장 혹은 압축과 같은 어떤 액션을 취해야 할 것인지 뿐만 아니라 타임 와핑할 패킷을 식별하기도 한다. 훨씬 더 나아가, 타임 와핑 지시자는 타임 와핑 장치(312)에 옵션의 선택을 제공한다. 무음 구간 동안 DTX 모듈은 디-지터 버퍼에 의해 제공된 소실부의 스트림을, 해당 디코더가 더 정확하고 더 높은 품질의 배경 잡음을 재구성하기 위하여 사용하는 무음 프레임과 소실부의 스트림으로 변경한다. 선택적인 예에서, 타임 와핑 지시자는 타임 와핑을 켜고(Turn On) 끄기도(Turn Off) 한다. 다른 예에서, 타임 와핑 지시자는 재생을 위해 사용되는 압축과 신장의 양을 확인한다. 타임 와핑 장치(312)는 디코더로부터 나온 샘플을 수정하고 샘플을 오디오 처리(316)에 제공하며, 오디오 처리은 인터페이스, 변환(Conversion) 장치, 오디오 드라이버(Driver) 및 스피커를 포함한다.
타임 와핑 지시자가 언제 압축을 할 것인지 혹은 언제 신장을 할 것인지 확인하는 동안, 타임 와핑을 주어진 패킷에 적용하는 데 걸리는 시간을 결정할 필요가 있다. 구현에서, 타임 와핑의 양은 고정되어 있고, 거기서 패킷은 음성의 주기(Cycle) 혹은 피치(Pitch)에 따라서 타임 와핑된다.
실시예에서, 타임 와핑 지시자는 타겟 신장 혹은 타겟 압축 레벨의 비율에 따라 통신이 이루어진다. 다시 말해서, 타임 와핑 지시자는 주어진 비율에 따라 압축 혹은 신장할 것을 명령한다.
시나리오에서, 입력 데이터의 공지된 특징을 인식하는 것이 필요하다. 예를 들어, 인코더는 공지된 톤(Tone)의 데이터 혹은 길이의 명확한 특징을 예상한다. 이 상황에서는, 특정한 특징이 예상되기 때문에, 타임 와핑을 사용하여 수신된 데이터를 수정하는 것은 바람직하지 않다. 예를 들어, 인코더는 특정 톤 길이를 가지는 입력 데이터를 예상하게 된다. 하지만, 타임 와핑이 활성화(Enable, 인에이블)되면, 톤의 길이는 타임 와핑에 의해서 수정된다. 그러므로, 이 시나리오에서, 타임 와핑이 활성화되어서는 안 된다. 톤에 기초한 통신은 TTY/TDD(TeleTYpewriter/Telecommunications Device for the Deaf) 정보, 키패드 기입(Entry)을 사용한 어플리케이션 혹은 톤에 기반한 통신을 사용한 다른 어플리케이션을 포함하지만, 그에 한정되지는 않는다. 그러므로 그러한 통신에서, 톤 캐리어(Carrier) 정보의 길이와 재생시에 압축 혹은 신장같은 피치나 톤의 길이 수정은 그 정보의 손실을 가져온다. TTY, TDD 및 난청 수신자(Hearing-Impaired Recipients)에 의한 수신을 가능하게 하는 다른 어플리케이션에서, 디코더는 그러한 통신에서 디코더의 인밴드(Inband) 처리 상태를 제공한다. 이 지시(Indication)는 디-지터 버퍼에서 제공되는 타임 와핑 지시를 마스크(Mask)하는 데에 사용된다. 만약 디코더가 TTY/TDD 정보와 함께 있는 처리 패킷이라면, 타임 와핑은 불활성화 된다. 이는 두 가지 방식으로 실행된다; TTY/TDD 상태를 디-지터 버퍼 제어기에 제공하거나 혹은 TTY/TDD 상태를 타임 와핑 장치에 공급하는 것이다. 만약 디코더 TTY/TDD 상태가 디-지터 버퍼 제어기에 제공되면, 제어기는 보코더가 TTY/TDD 처리을 지시할 때 어떠한 신장 혹은 압축 지시도 하지 않는다. 만약 디코더 TTY/TDD 상태가 타임 와핑 장치에 제공되면, 이는 필터처럼 작동하고, 만약 디코더가 TTY/TDD 정보를 처리하고 있다면 타임 와핑 장치는 타임 와핑에 작용하지 않는다.
도 12에 도시된 시스템에서, 적응성 디-지터 버퍼와 제어 장치(306)는 입력 데이터 비율을 감시하여, 너무 많거나 적은 패킷이 이용가능하거나 버퍼링되었을 때 타임 와핑 지시자를 발생시킨다. 적응성 디-지터 버퍼와 제어 장치(306)는 언제 타임 와핑을 해야하는지와 어떠한 조치를 취해야 하는지를 결정한다. 도 13a는 압축과 신장 임계값을 사용하여 타임 와핑 결정을 하는 적응성 디-지터 버퍼의 예를 도시한다. 디-지터 버퍼는 불규칙한 시간 간격을 두고 수신되는 패킷들을 축적한다. 디-지터 타겟 길이 추정장치(314)는 타겟 디-지터 버퍼 길이를 발생시킨다; 그러면 타겟 디-지터 버퍼 길이는 디-지터 버퍼에 적용된다. 실제로는, 적응성 디-지터 버퍼와 제어 장치(306)가 디-지터 버퍼 길이 값을 사용하여 디-지터 버퍼의 작동에 관한 제어 결정과 재생 제어를 한다. 압축과 신장 임계치는 압축 혹은 신장이 각각 트리거(Trigger)될 때 지시를 한다. 이 임계치들은 디-지터 타겟 길이의 일부분으로 특정된다.
도 13a에 도시된대로, 타겟 디-지터 버퍼 길이는 LTarget으로 도시된다. 압축 임계치는 TCompress로 주어지고, 신장 임계치는 TExpand로 주어진다. 디-지터 버퍼 길이가 증가하여 압축 임계치인 TCompress를 넘어설 때, 디-지터 버퍼는 디코더에 패킷을 압축하라는 지시를 한다.
유사한 방식으로, 디-지터 버퍼 길이가 감소하여 신장 임계치인 TExpand 아래로 내려가면, 디-지터 버퍼는 디코더에 패킷을 신장하라는 지시를 하고, 더 느린 비율에서 효과적으로 재생된다.
신장과 압축 임계치 사이의 작용점은 단-대-단 딜레이의 과도한 증가와 함께 언더플로우를 막아준다. 그러므로 타겟 작동은 TCompress과 TExpand 사이에 있다. 예에서, 신장과 압축 임계치를 위한 값들은 각각 디-지터 버퍼의 타겟 값의 50%와 100%로 설정된다. 예에서, 타임 와핑은 디코더 내부에서 수행되지만, 대체 예에서는, 타임 와핑이 디코더 외부에서, 예를 들어 디코딩 다음 순서에 수행된다. 하지만 신호를 합성(Synthesize)하기 전에 타임 와핑하는 것이 보다 간단하다. 만약 그러한 타임 와핑 방법이 신호를 디코딩한 후에 적용되면, 신호의 피치 주기를 추정할 필요가 있다.
어떤 시나리오에서, 디-지터 버퍼 길이가 커지는 경우가 있는데, 예를 들면 W-CDMA시스템과 같은 경우이다. 타임 와핑 임계치 발생기(Generator)는 다중의 압축 및 신장 임계치를 발생시킨다. 이 임계치들은 작동 상태에 따라 연산할 수 있다. 멀티-레벨 임계치는 도 13b에 도시되어 있다. TC1은 제 1 압축 임계치, TC2는 제 2 압축 임계치 및 TC3는 제 3 압축 임계치이다. 또한 도시된대로 TE1, TE2 및 TE3은 신장 임계치의 세 가지 서로 다른 값을 나타낸다. 임계치는 타임 와핑의 비율(얼마나 많은 패킷이 타임 와핑 되었는가), 압축된 패킷, 신장된 패킷의 백분율 혹은 이 두 값의 비율에 기초하여 정해진다. 임계치의 수는 필요에 따라 변하는데, 다시 말해서 임계치가 필요에 따라 더 많아질 수도 있고 적어질 수도 있다. 임계치 각각은 서로 다른 압축 혹은 신장 비율과 관련되어 있는데, 예를 들어, 더 정밀한 입도(Granularity)를 요청하는 시스템을 위해서 더 많은 임계치가 사용되고, 덜 정확한 입도를 요청하는 시스템을 위해서는 더 적은 임계치가 사용된다. TE1, TE2 및TE3 등은 타겟 딜레이 길이의 함수이다. 임계치는 딜레이된 언더플로우를 추적함으로써 변화되고 PER과 같은 에러 통계에 기초한다.
도 14는 타임 와핑이 있는 경우와 없는 경우 패킷의 재생을 도시한다. 도 14에서, PKT 1은 시간 t₁에서 전송되고, PKT 2는 시간 t₂에서 전송되고, 나머지도 마찬가지이다. 패킷은 지시된 것처럼, PKT 1은 시간 t₂'에, PKT 2는 시간 t₂''에 수신부에 도달한다. 각각의 패킷에서, 타임 와핑을 사용하지 않은 재생 시간은 PLAYBACK WITHOUT WARPING으로 주어진다. 반대로, 타임 와핑을 사용한 재생 시간은 PLAYBACK WITH WARPING으로 주어진다. 본 예는 음성 통신과 같은 실시간 데이터에 대한 것이기 때문에, 패킷의 예상 재생 시간은 고정 시간 간격이다. 재생되는 동안 이상적으로는 각각의 패킷이 예상 재생 시간 이전에 도달한다. 만약 패킷이 예상 재생 시간보다 너무 늦게 도달하면, 재생 품질에 큰 영향을 주게 된다.
PKT 1과 PKT 2는 제 시간에 수신되고, 타임 와핑 없이 재생된다. PKT 3과 PKT 4는 둘 다 같은 시간 t₄'에 수신된다. 각각의 패킷은 예상 재생 시간, PKT 3은 시간 t₄'', PKT 4는 시간 t5' 이전에 수신되기 때문에, 두 패킷의 수신 시간이 만족된다. PKT 3과 PKT 4는 와핑없이 제 시간에 재생된다. PKT 5가 예상 재생 시간 이후인 시간 t6'에 수신될 때 문제가 발생한다. 예상 재생 시간에 PKT 5의 자리에서 소실부가 재생된다. PKT 5는 소실부의 재생이 시작된 후에 도달한다.
와핑이 없는 제 1 시나리오에서, PKT 5는 드롭되고, PKT 6은 수신되어 다음 예상 재생 시간에 재생된다. 주목할 점은, 이 시나리오에서 PKT 6은 재생을 위해 제시간에 수신된다는 점이다. 제 2 시나리오에서, 만약 PKT 5와 PKT 5 다음 패킷들이 딜레이되면, 각각의 패킷은 예상 재생 시간에 훨씬 늦게 도달하게 되고, 일련의 소실부를 발생시킨다. 이상의 두 시나리오에서, 정보가 손실되는데, 즉 제 1 시나리오에서 PKT 5가 드롭되고; 제 2 시나리오에서는 PKT 5와 그 다음의 패킷들이 손실된다.
대체로, IBA 기술을 이용하여 PKT 5를 다음 예상 재생 시간에 재생되도록 하고, 그 시점부터 다음 패킷들이 계속하여 재생된다. IBA는 데이터의 손실을 막아주지만, 일렬의 패킷을 딜레이시킨다.
타임 와핑이 없는 재생은 통신 시스템에서 전체적인 단-대-단 딜레이를 증가시킨다. 도 14에 도시된 것처럼, 패킷-상호간(Inter-packet) 딜레이는 정보의 손실을 가져오거나 혹은 재생을 딜레이시킨다.
PKT 5가 예상 재생 시간보다 늦게 도달할 때, 타임 와핑을 구현함으로써 패킷을 신장시키고 소실부를 피할 수 있다. 예를 들어 PKT 4를 신장하면 20 ms 대신에 23ms에서 재생이 이루어진다. PKT 5는 PKT 5가 수신되는 때에 재생된다. 이는 만약 소실부가 대신 전송되었다면 재생되었을 시간보다 일찍 재생된 것이다. (도 14의 IBA는 있지만 타임 와핑이 없는 재생을 위한 대체 예에서 도시된 것과 같다.) 소실부를 전송하는 대신 PKT 4를 신장하면 재생 품질의 저하가 적어진다. 그러므로 타임 와핑은 대기 시간의 감소뿐 아니라 전체적인 재생 품질도 향상시킨다. 도 14에서, PKT 5 다음의 패킷들은 타임 와핑 기술을 이용하지 않았을 때보다 타임 와핑 기술을 이용하였을 때 더 일찍 재생된다. 이 특정한 예에서, PKT 7은 타임 와핑이 사용되었을 때 시간 t9에서 재생되며, 타임 와핑을 사용하지 않았을 때보다 일찍 재생된다.
음성 송신에서 전송된 정보가 가지는 특징의 변화와 함께 변화하는 작동 상태를 고려하면서 재생 품질을 향상시키는 타임 와핑 어플리케이션이 있다. 유음과 무음 구간을 가지는 음성 특징은 변화하기 때문에, 타겟 디-지터 버퍼 딜레이 길이와 각각의 데이터 타입에 따른 압축과 신장 임계치는 서로 다르다.
도 15는 하나의 유음 구간에서 다른 유음 구간으로의 디-지터 딜레이 차이에서 발생하는 "무음 압축"과 "무음 신장"의 예를 도시한다. 도 15에서, 어두운 영역(120, 124, 128)은 수신된 정보의 유음 주기를 나타내고, 밝은 영역(122, 126)은 무음 구간을 나타낸다. 수신이 되면, 유음 구간(120)는 시간 t₁에서 시작하여 시간 t₂에서 끝난다. 수신부에 디-지터 딜레이가 도입되고, 그 로인해 유음 구간(120)의 재생이 시간 t₁'에서 시작된다. 디-지터 버퍼 딜레이는 시간 t₁'와 시간 t₁의 차이이다. 수신이 되면, 무음 구간(122)는 시간 t₂에서 시작하여 시간 t₃에서 끝난다. 무음 구간(122)는 압축되어, 시간 t₂'에서 시간 t₃'까지의 무음 구간(132)에서 재생되는데, 이는 수신된 무음 구간(122)의 원래 시간 간격보다 짧다. 유음 구간(124)는 시간 t₃에서 시작되어 소스에서 시간 t₄에 끝난다. 유음 구간(124)는 수신부에서 시간 t₃'부터 시간 t₄'까지 재생된다. 무음 구간(126, 시간 t₄에서 시간 t5까지)은 수신부에서 신장되어 무음 구간(136)에서 재생되는데, 여기에서 (t5'-t₄')가 (t5-t₄)보다 크다. 무음 구간은 디-지터 버퍼가 재생 패킷을 일찍 필요로 할 때 압축되고, 디-지터 버퍼가 패킷의 재생을 딜레이할 때 신장된다. 예에서, 무음 구간의 압축 혹은 신장은 음성 품질의 사소한 저하를 가져온다. 따라서, 적응성 디-지터 딜레이는 음성 품질의 저하 없이 달성된다. 도 15의 예에서, 적응성 디-지터 버퍼는 적응성 디-지터 버퍼에 의해서 식별되고 제어되는 무음 구간을 압축하고 신장한다.
주목할 점은, 여기서 사용된 것처럼, 타임 와핑은 수신 데이터의 도달 시간과 길이에 응하여 재생을 적응 제어하는 것이라는 점이다. 타임 와핑은 재생에서 데이터의 압축, 신장 혹은 양자를 모두 사용하여 구현된다. 예에서, 임계치는 압축을 트리거하기 위해서 사용된다. 다른 예에서, 임계치는 신장을 트리거하기 위해서 사용된다. 다른 예에서, 두 개의 트리거가 사용된다; 하나는 압축 그리고 하나는 신장을 위해서 사용된다. 또 다른 예에서는 다중의 트리거를 사용하고, 타임 와핑을 다양한 레벨로 지시하는데, 이를테면 서로 다른 비율로 빠르게 재생한다.
타임 와핑은 또한 디코더 내부에서도 수행된다. 디코더가 타임 와핑을 수행하는 기술은 2005년 5월 5일에 출원되고, "잔류 수정을 통한 보코더 내에서의 프레임 타임 와핑(Time Warping Frames Inside the Vocoder by Modifying the Residual)"으로 명명되어 공동 출원중인 미국 특허출원 제 11/123,467호에 기술되어 있다.
예에서, 타임 와핑은 음성 세그먼트(Segment)들을 "병합(Merging)"하는 방법을 포함한다. 음성 세그먼트 병합은 적어도 두 개의 연속적인 음성 세그먼트에서 음성 샘플을 비교하는 것과 관련되고, 만약 비교한 세그먼트들 사이에 상관 관계가 발견되면, 적어도 두 개의 연속적인 세그먼트들에서 하나의 세그먼트를 창조한다. 음성 병합은 음성 품질을 유지하기 위해서 이루어진다. 음성 품질 유지와 "클릭(Clicks)"과 "팝스(Pops)"를 포함하여 사용자를 위한 음성 품질을 저하시키는 소리와 같은, 가공물(Artifacts)이 출력 음성에 도입되는 것을 최소화하는 것은 병합될 세그먼트들을 신중하게 선택함으로써 달성된다. 음성 세그먼트의 선택은 세그먼트의 유사도 혹은 상관 관계에 기초한다. 음성 세그먼트의 유사도가 높을수록, 결과적인 음성 품질은 높아지고, 음성 가공물이 도입될 확률이 낮아진다.
도 16은 시간에 대한 음성 신호를 그래프로 도시한다. 수직 축은 신호의 크기를 나타내고; 수평 축은 시간을 나타낸다. 주목할 점은, 음성 신호는 특유의 패턴을 가지고 있으며, 음성 신호의 일부분이 시간에 대해 반복된다는 것이다. 예에서, 음성 신호는 시간 t₁부터 시간 t₂까지의 제 1 세그먼트를 포함하며, 제 1 세그먼트가 시간 t₂부터 t₃까지 제 2 세그먼트에도 반복된다. 그러한 세그먼트의 반복이 발견될 때, 샘플의 재생 품질에 거의 혹은 실질적으로 아무런 영향을 미치지 않으면서, 시간 t₂에서 시간 t₃까지의 경우와 같이 세그먼트 중 하나 혹은 그 이상 제거할 수 있다.
일 예에서, 아래에 주어진 바와 같은 식 (4)는 음성의 두 세그먼트 사이의 관계를 찾는데 사용될 수 있다. 상관 관계는 두 세그먼트 사이의 관계가 얼마나 강한지 나타내는 척도이다. 식 (4)에서 제공되는 절대적이고 제한된 크기의 상관계수(Correlation Factor, -1에서 1까지)를 상기 관계의 강도에 대한 측정치로서 제공하며, 여기에서 상관계수가 작은 음의 숫자이면 약한 관계를, 즉 상관 관계가 적음을, 큰 양의 숫자이면 강한 관계를, 즉 상관 관계가 크다는 것을 반영한다. 만약 식 (4)를 적용하여 "유사도가 높음"이라고 하면, 타임 와핑이 수행된다. 만약 식 (4)를 적용하여 유사도가 적다고 하면, 음성의 병합된 세그먼트에 가공물이 존재한다. 상관 관계는 다음과 같이 주어진다:
식 (4)에서, x와 y는 음성의 두 세그먼트를, m은 두 세그먼트 사이의 상관 관계를 연산하는 윈도우를, d는 상관 관계의 일부분을 나타내고, i는 인덱스이다. 만약 식 (4)를 적용하였는데 가공물이 도입되지 않고 세그먼트들이 병합된다고 하면, "애드-오버랩(Add-overlap, 가산 중첩)" 기술을 사용하여 병합이 이루어진다. 애드-오버랩 기술은 비교된 세그먼트들을 결합하고, 두 개의 개별적인 음성 세그먼트로부터 하나의 음성 세그먼트를 만들어낸다. 애드-오버랩을 이용한 결합은 식 (5)와 같은 식에 기초하며, 식 (5)는 다음과 같다:
결과 샘플은 PCM(Pulse Code Modulation) 샘플이다. 각각의 PCM 샘플은 비트(Bit) 길이와 PCM 샘플의 포맷(Format)을 정의하는 미리 정해진 포맷을 가진다. 예를 들어, 16비트 부호화된 숫자는 PCM 샘플을 나타내는 포맷이다. 식 (5)를 적용하여 만들어진 애드-오버랩 기술은 Segment1의 제 1 PCM 샘플과 Segment2의 마지막 PCM 샘플 사이에 부드러운 전이가 생기도록 가중치를 두는 것을 포함한다. 식 (5)에서, "RWindowSize"는 기준 윈도우에서 PCM 샘플의 수이고, "OutSegment"는 결과적으로 애드-오버랩된 세그먼트의 크기이다. "WindowSize"는 기준 윈도우 크기와 같고, "Segment"는 타겟 세그먼트의 크기와 같다. 이 변수들은 샘플링 비율, 음성의 주파수 컨텐츠(Contents) 및 품질과 연산의 복잡도(Computational Complexity) 사이의 바람직한 상보성(Tradeoff)에 의하여 결정된다.
상술된 애드-오버랩 기술은 도 17a와 17b에 도시되어 있다. 도 17a에서 도시된대로 음성 세그먼트는 160개의 PCM 샘플을 포함한다. 예에서, RWindowSize는 PCM 샘플 0∼47로 표현된다. 다시 말해서, PCM 샘플 0∼47은 기준 윈도우 크기인 WindowSize 안의 샘플 수에 해당한다. Segment는 타겟 검색 영역(Target Search Area)의 크기이고, PCM 샘플 10∼104로 표시된다. 예에서, PCM 샘플 0∼47은 샘플 10∼104와 한 번에 PCM 샘플 하나씩 비교하여, 기준 샘플과 타겟 검색 영역 사이의 가장 적절한 상관 관계를 찾는다. 최대 상관 관계를 가지는 타겟 검색 영역 내의 위치를 "오프셋(Offset)"이라고 한다. 오프셋 지점에서, RWindowSize의 크기에 대응하는 Segment의 일부분과 RWindowSize가 결합한다. PCM 샘플 104∼160에 대응하는 음성 세그먼트는 손대지 않은 채로 있게 된다.
도 17b에서, 음성 세그먼트의 제 1 RWindowSize 샘플은 음성 세그먼트의 다음 일부분과 한 번에 PCM 샘플 하나씩 비교한다. RWindowSize와 타겟 검색 영역(Segment) 내부의 샘플의 대응 길이 사이에서 최대 상관 관계를 가지는 위치를 "오프셋"이라고 한다. 오프셋의 길이는 음성 세그먼트의 시작 부분부터 RWindowSize와 Segment 사이의 가장 큰 상관 관계를 가지는 지점까지의 거리이다. 일단 최대 상관 관계를 찾고 나면, RWindowSize는 Segment의 대응하는 길이와 (오프셋 지점에서) 병합된다. 다시 말해서, 애드-오버랩은 RWindowSize를 같은 길이의 Segment 일부분에 더함으로써 수행된다. 이는 도시된 대로 오프셋 지점에서 이루어진다. 샘플의 나머지는 도시된 대로 원래의 세그먼트로부터 복제된다. 결과적인 음성 세그먼트는 원래 음성 세그먼트로부터 있는 그대로 복사된 남은 샘플을 포함하고, 도시된 것처럼 병합된 세그먼트에 덧붙여진다. 결과적인 패킷은 오프셋 길이에 의한 원래 길이보다 짧다. 이 프로세스를 음성 압축이라고 한다. 음성 세그먼트가 적게 압축될수록, 사람이 품질저하를 탐지할 확률이 낮아진다.
음성 신장은 디-지터 버퍼가 적은 수의 패킷을 포함할 때 수행된다. 만약 디-지터 버퍼가 적은 수의 패킷을 가지고 있으면, 언더플로우 확률이 증가한다. 언더플로우가 발생할 때, 디-지터 버퍼는 소실부를 디코더에 공급한다. 하지만, 이는 음성 품질의 저하를 가져온다. 그러한 음성 품질 저하를 막기 위해서, 디-지터 버퍼의 마지막 몇 개의 패킷 재생을 딜레이한다. 이는 패킷의 신장을 통해서 달성할 수 있다.
음성 신장은 음성 세그먼트의 다중 PCM 샘플을 반복하여 달성된다. 가공물 혹은 피치 저하(Flatness)를 피하기 위해 다중 PCM 샘플을 반복하는 것은 음성 시간 압축이 수행될 때보다 PCM 음성 샘플로 작업할 때 달성된다. 예를 들어, 음성 신장을 구현하는데 사용되는 PCM 샘플의 수가 음성 시간 압축에 사용되는 PCM 샘플의 수의 두 배이다. 추가적인 PCM 샘플들은 재생된 음성의 이전 패킷으로부터 얻는다.
도 18a는 음성 신장의 예를 도시하며, 거기서 각각의 패킷 혹은 음성 세그먼트는 160개의 PCM 샘플을 포함하고, "사전신장된(Pre-expanded)" 음성 세그먼트가 발생된다. 예에서, 음성의 두 세그먼트를 비교하는데; "현재" 음성 세그먼트와 "이전" 음성 세그먼트를 비교한다. 현재 음성 세그먼트의 제 1 RWindowSize PCM 샘플을 기준 샘플로 선택한다. 이 RWindowSize 샘플들은 음성의 이전 패킷의 Segment와 비교하는데, 거기서 가장 상관 관계가 큰 지점(혹은 오프셋)이 결정된다. RWindowSize PCM 샘플은 오프셋 지점에서 이전 패킷 안에 있는 Segment의 대응 크기에 애드-오버랩된다. 사전신장된 음성 세그먼트는 도 18a에 도시된 것처럼 이전 음성 세그먼트로부터 애드-오버랩된 세그먼트로 나머지 샘플을 복제하고 덧붙여서 만든다. 그러면 도 18a에 도시된 것처럼 신장 음성 세그먼트의 길이는 사전신장된 세그먼트의 길이에 현재 음성 세그먼트의 길이를 더한 것이 된다. 예에서, PCM 샘플은 음성 세그먼트의 시작부터 오프셋 된다.
다른 예에서, 현재 패킷 혹은 음성 샘플은 도 18b에 도시된 것처럼 신장된다. 기준 샘플, RWindowSize는 현재 음성 세그먼트의 시작부분에 위치한다. RWindowSize는 최대 상관 관계 지점(오프셋)에 위치할 때까지 나머지 현재 음성 패킷들과 비교한다. 기준 샘플은 현재 음성 세그먼트 내에서 최대 상관 관계를 가지는 해당 PCM 샘플들과 애드-오버랩된다. 그리고나서, 신장된 음성 세그먼트는 패킷의 시작부분에서 시작하여 오프셋 지점까지 PCM 샘플들을 복제하고, 이것에 애드-오버랩된 세그먼트를 덧붙이고, 현재 패킷으로부터 수정되지 않은 나머지 PCM 샘플들을 복사 및 덧붙여서 만든다. 신장된 음성 세그먼트의 길이는 오프셋과 원래 패킷 길이의 합과 같다.
다른 예에서 도 18c에 도시된 것처럼 음성이 신장되고, 거기서 RWindowSize는 현재 패킷 혹은 음성 세그먼트 안에 내장되며, 패킷의 시작 부분에서 발생하지 않는다. Roffset은 현재 패킷의 시작 부분에서부터 RWindowSize가 시작되는 지점까지의 거리에 해당하는 음성 세그먼트의 길이이다. RWindowSize는 최대 상관 관계 지점의 현재 패킷 안에 있는 해당 PCM 샘플의 크기에 애드-오버랩된다. 그러면, 신장된 음성 세그먼트는 원래 혹은 현재 패킷의 시작부분에서부터 오프셋까지의 PCM 샘플을 복제하고, 애드-오버랩된 세그먼트와 원래 패킷의 나머지 PCM 샘플을 덧붙여서 만든다. 결과적인 신장된 음성 세그먼트의 길이는 원래 패킷의 길이에 오프셋을 더하고 Roffset 샘플, 즉, 위에서 정의한 대로 Roffset에서 PCM 샘플의 수를 빼면 된다.
필터링된
타임
와핑
임계치
압축 혹은 신장의 결정이 오실레이션(Oscillation)되는 것을 피하기 위해서, 적응성 디-지터 버퍼에 저장된 패킷의 수가 빠르게 변할 때, 적응성 디-지터 버퍼의 상태, 즉, 적응성 디-지터 버퍼에 저장된 패킷의 수를 가늠하기 위해서 사용되는 변수가 있다고 하면, 이 예에서는 그러한 변수를 샘플링 윈도우 상에서 필터링한다. 적응성 디-지터 버퍼의 상태는 적응성 디-지터 버퍼에 저장된 패킷의 수 혹은 적응성 디-지터 버퍼에 저장된 데이터를 가늠하기 위해 사용되는 어떠한 변수라고 할 수 있다. 1xEV-DO라고도 하는 돌발 데이터 전달(Delivery)을 지원하는 시스템 IS-856에서, 순방향 링크에서는 주어진 수신기에 시분할 다중화로 패킷을 전달하고, 수신기는 한 번에 여러 개의 패킷을 수신하며, 그에 이어서 일정 시간 동안은 패킷을 수신하지 않는다. 이로 인해 수신기의 적응성 디-지터 버퍼에서 돌발 데이터가 수신된다. 수신된 데이터는 실제로 "번들링(Bundling)"이 되기 쉬운데, 번들링이란 두 개 이상의 패킷이 같은 시간에 거의 함께 도달하는 경우이다. 그러한 번들링에 의해서 패킷의 신장과 압축 사이에 동요가 쉽게 발생하고, 거기서 적응성 디-지터 버퍼는 수신된 데이터의 비율과 버퍼의 상태에 따라 타임 와핑 지시를 내린다. 예를 들어, 디-지터 버퍼의 연산된 값(딜레이 혹은 길이)이 유음 구간의 시작 부분에서 40 ms인 경우를 고려해보자. 시간이 지나면, 디-지터 버퍼의 부하는 신장 임계치 밑으로 떨어지고, 데이터 패킷을 신장하는 결정을 한다. 신장된 패킷의 재생을 한 직후에, 세 개의 패킷 번들이 도달한다; 도달하는 데이터는 디-지터 버퍼의 크기를 압축 임계치가 초과될 때까지 채운다. 이렇게 해서 패킷이 압축된다. 패킷 번들 도달된 후에 일정 시간 동안 패킷이 도달하지 않기 때문에, 디-지터 버퍼는 다시 고갈되며, 패킷이 신장된다. 신장과 압축 사이의 이러한 토글링(Toggling)으로 인해 패킷의 많은 부분이 타임 와핑된다. 이는 바람직하지 못한데, 왜냐하면 우리는 타임 와핑에 의해 신호 정보가 수정된 패킷의 비율을 작은 값으로 제한하려하기 때문이다.
번들링 효과를 약하게 함으로써 그러한 오실레이션를 피하는 예는 적응성 디-지터 버퍼의 적응 제어, 타임 와핑 및 데이터의 재생을 포함한다. 이 예에서는 언제 타임 와핑을 할 것인지 결정하기 위해 평균값을 사용한다. 평균은 그러한 연산에 사용된 변수들을 필터링해서 연산한다. 예에서, 압축과 신장 임계치는 필터링 혹은 디-지터 버퍼의 크기를 평균해서 결정한다. 주목할 점은 버퍼의 크기가 버퍼의 현재 상태라는 것이다.
버퍼 크기의 필터링 된 값을 신장 임계치와 비교하면 더 많은 수의 언더플로우가 생기는데, 왜냐하면 필터링 되지 않은 값을 사용하여 신장되어왔던 일부 패킷이 필터링 된 값을 사용하여 신장되지 않기 때문이다. 한편, 필터링 된 값을 압축 임계치와 비교하면 부정적인 영향을 최소로 혹은 사실상 아예 미치지 않고 대부분 의 오실레이션(혹은 타임 와핑 제어 사이의 토글링)을 감쇠시킨다. 그러므로, 압축과 신장 임계치는 서로 다르게 취급된다.
예에서, 적응성 디-지터 버퍼 크기의 순시(Instantaneous)값은 신장 임계치에 의해 억제된다. 반대로, 디-지터 버퍼의 필터링 된 값은 압축 임계치에 의해 억제된다. IIR(Infinite Impulse Response) 필터를 사용하여 적응성 디-지터 버퍼의 평균 크기를 결정하는 구성에서, 적응성 디-지터 버퍼는 매 60 ms 마다 한 번처럼, 주기적으로 재연산되는 필터링 된 값을 가진다. 필터 시간 상수는 번들링 통계로부터 유도되고, 이 경우 1xEV-DO Rev A을 예로 들면 60 ms이다. 번들링 통계는 순시 디-지터 버퍼 크기가 작동 중에 얼마나 오실레이트하는지와 강한 상관 관계를 가지기 때문에, 번들링 통계는 필터 시간 상수를 유도하기 위해 사용된다.
누락된 패킷에 의한 신장
지금까지 살펴본 것처럼, 적응성 디-지터 버퍼와, 적응성 디-지터 버퍼 및 수신된 데이터의 타임 와핑을 제어하는 다양한 방법은 특정한 시스템의 스펙과 작동 상태에 따라 적응된다. H-ARQ(Hybrid Automatic Repeat Request) 방식처럼, 성능을 향상시키기 위한 반복 요청 방식(Repeat Request Scheme)을 구현하는 통신 시스템에서, 그러한 반복 프로세스는 음성 패킷이 얼마나 신장되는지를 암시한다. 특히, H-ARQ는 패킷이 재정리되어(즉, 순서가 뒤바뀌어) 도달하게 한다. 도 19는 특정 길이의 디-지터 버퍼와 타겟 디-지터 버퍼 길이의 50%로 주어진 신장 임계치, TExpand를 도시한다. 재생되는 현재 패킷의 순서 번호는 20, 즉, PKT 20이다. 디-지터 버퍼는 순서 번호(Sequence Number)가 21, 23 및 24인 세 개의 패킷을 포함하며, 각각 PKT 21, PKT 23 및 PKT 24로 표시한다. 재생 유틸리티가 PKT 20을 재생한 후에 다음 패킷을 요청할 때, 디-지터 버퍼는 연산된 디-지터 버퍼 길이의 50%보다 큰 버퍼 길이를 유지하는 데 충분한 패킷을 포함하고 있기 때문에 신장 임계치는 트리거 하지 않는다. 그러므로 현재 예에서, PKT 21은 신장되지 않는다. 패킷이 순서에 따라 재생되고 그러므로 재생 유틸리티가 PKT 22보다 먼저 PKT 23을 재생하지 않기 때문에, 만약 PKT 22가 PKT 21의 재생이 끝날 때까지 도달하지 않으면 언더플로우가 발생한다. 신장 임계치가 트리거되지 않음에도 불구하고, 예에서 수신된 패킷에서 불연속이 생기고, PKT 21이 신장되어 도달할 PKT 22를 위해 더 많은 시간을 얻게 된다. 이런 식으로, PKT 21을 신장하여 누락된 패킷과 소실부를 피할 수 있다. 따라서 디-지터 버퍼 길이가 신장 임계치 TExpand를 넘어가도 패킷은 신장된다.
패킷이 신장되는 상태는 인핸스(Enhance, 강화)된다. 상기한대로, 만약 디-지터 버퍼 크기가 신장 임계치 아래이면, 패킷은 신장된다. 다른 시나리오에서, 만약 다음 연속 패킷이 디-지터 버퍼에 존재하지 않아도 패킷은 신장된다.
앞에서 언급한 대로, 디-지터 버퍼 딜레이는 유음 구간의 시작 부분에서 연산된다. 채널 상태와 부하 상태를 포함하지만 그에 한정되지는 않는 네트워크 상태는 유음 구간, 특히 긴 유음 구간에서 변하기 때문에, 예는 유음 구간동안 디-지터 버퍼 딜레이를 바꾸도록 설정되었다. 따라서 앞서 주어진 디-지터 버퍼 식은 유음 구간동안의 모든 CHANGE_JITTER_TIME에서 주기적으로 재연산된다. 대체로, 작동 상태, 부하, 무선 인터페이스 지시 혹은 다른 이벤트(Event)에서 중대한 변화와 같은 결정적인 이벤트에서는 변수가 다시 연산된다. 예를 들어, CHANGE_JITTER_TIME의 값을 0.2 sec(200ms)로 설정된다.
타임 와핑 임계치, 즉 압축 및 신장 임계치는 유음 구간 동안 값을 얼마나 바꿀 것인지에 대한 지침을 제공한다. 노말 동작이란 적응성 디-지터 버퍼의 상태가 압축 임계치와 신장 임계치 사이에 있고 적응성 디-지터 버퍼 길이 근처일 때, 수신기의 동작을 말한다. 각각의 임계치는 트리거처럼 작동한다. 임계치가 임계치에 도달하거나 혹은 넘었을 때, 적응성 디-지터 버퍼에 있는 패킷은 임계치에 따라 신장되거나 혹은 압축된다. 적응성 디-지터 버퍼의 크기는 패킷을 수신하면서 계속 신장되거나 혹은 압축된다. 적응성 디-지터 버퍼 크기의 이러한 일정한 변화는 신장과 압축 임계치가 통신을 하는 동안 계속해서 서로 접근하도록 지시한다. 일반적으로, 시스템은 안정 상태로 보는 신장과 압축 임계치 사이의 적응성 디-지터 버퍼 크기를 유지하려고 한다. 안정 상태에서 적응성 디-지터 버퍼의 크기는 변화하지 않는다; 패킷의 수신부에서 변화 그리고 적응성 디-지터 버퍼 크기의 변화는 새로운 적응성 디-지터 버퍼 딜레이가 달성될 때까지 각각 자동적으로 압축/신장 임계치를 트리거시키고 패킷을 압축/신장시킨다. 이 시나리오에서, 적응성 디-지터 버퍼 타겟 딜레이 길이는 CHANGE_JITTER_TIME에 따라서 업데이트 된다. 타임 와핑 신장/압축 임계치 둘 다에 도달한 결과로서 트리거될 때 자동적으로 디-지터 버퍼 크기가 변화하기 때문에, 실제 디-지터 버퍼의 크기를 반드시 연산할 필요는 없다. 일례로, CHANGE_JITTER_TIME의 값은 0.2 sec(200 ms)로 설정된다.
핸드오프 프리와핑
핸드오프(Handoff, 통화 채널 전환)는 일반적으로 짧은 시간 동안 커버리지(Coverage)의 손실을 수반한다. 핸드오프가 임박할 때, AT는 불량한 채널 상태와 증가하는 패킷 딜레이를 겪을 수 있다. 일 예에서는 타임 와핑을 음성 패킷에 적용하는 특별한 방식으로 핸드오프 조건을 처리한다. AT가 새로운 기지국으로의 핸드오프를 결정하자마자, 이러한 정보는 디-지터 버퍼를 제어하기 위해 사용 가능하다. 이러한 핸드오프 신호를 수신할 때, AT는 도 8b의 프리와핑 모드(244)에 도시된 것과 같이 "프리와핑(Pre-warping)" 모드로 들어간다. 이 모드에서, AT는 두 가지 조건 중 하나가 만족될 때까지 패킷을 신장한다. 제 1 조건 하에서, 디-지터 버퍼는 패킷을 계속해서 축적하고, 그 축적된 신장은 결과적으로 PRE_WARPING_EXPANSION의 디-지터 버퍼 사이즈를 만들게 된다. 다시 말해서, 패킷의 신장은 PRE_WARPING_EXPANSION이 도달될 때까지 수행된다. 선택적으로, 제 2 조건 하에서, 시간 주기인 WARPING_TIME이 만족되었다. 타이머는 핸드오프 신호 혹은 사용불능(Outage) 지시자의 수신 시에 시작하고, 이 타이머는 WARPING_TIME에서 만료한다. 일단 이들 두 가지 조건 중 하나가 만족되고 나면, AT는 프리와핑 모드를 종료한다. 프리와핑 모드 동안, End_Talkspurt 조건(후술함)이 만족되지 않으면 아무런 패킷도 압축되지 않는데, 왜냐하면 디-지터 버퍼가 일정한 간격으로 재생 유틸리티로 보낼 만큼의 충분한 패킷을 축적하려고 할 것이기 때문이다. 패킷이 일정한 간격마다, 예컨대 20 ms마다 예상되는 예에서, PRE_WARPING_EXPANSION의 값은 40 ms로 설정되고, WARPING_TIME의 값은 100 슬롯(166 ms)과 같게 설정될 수 있다.
핸드오프는 사용불능 이벤트의 단순한 일 형태일 뿐이다. 디-지터 버퍼는 통화 채널 전환 혹은 다른 타입의 사용불능을 처리하기 위한 메카니즘을 구현할 수 있다. 이를 위해 요청되는 정보는 사용불능을 처리하기 위해서 얼마나 많은 디-지터 초과분이 요청되는지(PRE_WARPING_EXPANSION)와 이러한 사용불능 회피 모드 상에서 디-지터 버퍼가 얼마나 오랫동안 계속해서 동작할 것인지(WARPING_TIME)이다.
딜레이된 언더플로우의 카운팅
상기 적응성 디-지터 버퍼 식은 딜레이된 언더플로우의 비율을 목표로하여 디자인되었기 때문에, 딜레이된 언더플로우의 숫자를 정확하게 측정하는 것이 바람직하다. 언더플로우가 발생했을 때, 언더플로우가 패킷 딜레이에 의해 발생된 것인지 혹은 네트워크 내부, 즉, 송신 경로의 어떤 지점에 드롭된 패킷에 의해 발생된 것인지 알 수 없다. 그러므로 언더플로우의 타입을 정확하게 살펴볼 필요가 있다.
일 예에서, RTP/UDP/IP를 사용한 통신의 경우 각 패킷은 RTP 순서 번호를 포함한다. 순서 번호는 패킷이 송신된 순서로 수신된 패킷을 나열할 때 사용된다. 언더플로우가 발생하는 경우에, 언더플로우를 유발하는 패킷의 RTP 순서 번호는 메모리 어레이와 같은 메모리에 저장될 수 있다. 만약 식별된 순서 번호를 가진 패킷이 나중에 도착하면, 이러한 언더플로우는 "딜레이 언더플로우"로서 여겨진다.
"딜레이된 언더플로우 비율"은 총 수신된 패킷 수에 대한 언더플로우 수의 비율이다. 언더플로우의 수와 수신된 패킷의 수는 둘 다 디-지터 버퍼 식이 업데이트될 때마다 0 으로 설정된다.
통화 스퍼트의 시작과 끝에 대한 인핸스먼트
도 20은 두 사용자 간 대화의 타임 라인을 나타내고 있다. 이 그래프에서, 수직축은 시간을 나타낸다. 각 사용자는 통화 스퍼트와 무음 구간을 전송하고, 이는 이후에 다른 사용자에 의해 수신된다. 명확하게 하기 위해서, 어두운 블록 세그먼트(411, 410)는 USER1에 대한 통화 스퍼트(음성 세그먼트)를 나타낸다. 밝은 블록 세그먼트(405)는 USER2에 대한 통화 스퍼트를 나타낸다. 타임 라인 상에서 통화 스퍼트의 외측 영역은 사용자가 말을 하지 않지만, 다른 사용자의 말을 듣거나 무음 구간을 수신하고 있을 수 있는 시간을 나타낸다. 세그먼트(400)는 USER2에서 재생된다. 일단 음성 세그먼트(400)가 USER2에서의 재생을 마치면, USER2는 말을 시작하기 전에 짧은 간격의 시간 동안 대기한다. 후속하여, USER2의 제 1 음성 세그먼트(405)의 시작은 USER1에 의해 들린다. USER1이 인지하는 대화형 RTD(Conversational Round Trip Delay)는 USER1이 말하기를 멈추는 때와 USER1이 USER2의 음성 세그먼트의 시작을 듣는 때 사이의 시간 간격이다. 대화형 RTD는 단방향 단-대-단 딜레이가 아니지만, 사용자 특정적이고 사용자의 관점에서는 중요하다. 예를 들어, 만약 대화형 RTD가 USER1에 대해 너무 크다면, USER1이 즉시 USER2의 음성 세그먼트가 재생되기를 기다리지 않고 말을 시작하게 한다. 이는 대화의 흐름을 방해하고 대화 품질 저하로서 인식된다.
USER1이 경험하는 대화형 RTD는 다른 방식으로 변경될 수 있다. 예를 들어, USER1의 음성 세그먼트의 끝(말단)이 USER2에게 재생되는 시간이 변할 수 있다. 두 번째 예로, USER2의 음성 세그먼트 시작이 USER1에게 재생되는 시간이 변한다. 주목할 점은, 오직 통화 스퍼트의 시작과 끝 부분에 대한 딜레이만이 대화에서 음성 품질에 영향을 미친다는 것이다. 설계의 목표는 통화 스퍼트의 시작과 끝에서 딜레이를 더욱 감소시키는 것이다.
일 예에서, 통화 스퍼트(유음 구간)의 시작 부분을 강화시키는 것이 목표이다. 이와 같은 강화는, 듣는 사람인 USER2가 디폴트 적응성 디-지터 버퍼 딜레이가 구현되었을 경우보다도 더 빨리 패킷을 수신하도록, USER1의 통화 스퍼트의 제 1 패킷을 조작함으로써 달성될 수 있다. 적응성 디-지터 버퍼에 적용되는 딜레이는 디폴트 적응성 디-지터 버퍼 딜레이, 연산된 값 혹은 특정 시간에 청취자가 패킷을 수신하도록 선택된 값이다. 일 예에서, 유음 구간의 제 1 패킷의 타이밍은 각각의 수신된 유음 구간의 시작 부분에서 적응성 디-지터 버퍼 딜레이를 다시 연산하는 것에 따라서 변한다. 유음 구간의 제 1 패킷에 적용된 적응성 디-지터 버퍼 딜레이가 감소할 때, 이 제 1 패킷은 청취자에게 신속하게 전송된다. 적용된 딜레이가 증가할 때, 제 1 패킷은 나중에 청취자에게 수신된다. 제 1 패킷에 대한 디폴트 디-지터 버퍼 딜레이는 연산된 디-지터 버퍼 딜레이보다 작고, 그 역도 마찬가지이다. 도시된 예에서, 각각의 유음 구간의 제 1 패킷의 디-지터 딜레이는 초 단위로 측정되는 MAX_BEGINNING_DELAY라고 하는 값에 의해서 제한된다. 이 값은 재연산된 디-지터 버퍼 딜레이 혹은 지정된 시간에 청취자가 패킷을 수신할 수 있도록 디자인된 딜레이이다. MAX_BEGINNING_DELAY 값은 실제 연산된 디-지터 버퍼 딜레이보다 작다. MAX_BEGINNING_DELAY가 연산된 디-지터 버퍼 딜레이 보다 작고 유음 구간의 제 1 패킷에 적용될 때, 유음 구간의 다음 패킷들은 자동으로 신장된다. 다음 패킷들의 자동 신장이 발생하는 이유는 디-지터 버퍼가 패킷을 재생하는 비율과 같은 비율로 패킷을 수신하지 않기 때문이다. 디-지터 버퍼가 패킷을 재생할수록, 디-지터 버퍼의 크기는 감소하고 신장 임계치에 근접한다. 일단 신장 임계치에 도달하면, 신장은 트리거되고 디-지터 버퍼가 신장 임계치를 넘어서기 위해 충분한 패킷을 수신할 때까지 유음 구간의 다음 패킷들이 신장된다. MAX_BEGINNING_DELAY 값을 구현함으로써, 다음 패킷들이 신장되는 동안 유음 구간의 제 1 패킷은 청취자에게 더 일찍 수신된다. 청취자는 최초의 패킷이 더 일찍 수신되어 만족한다. 유음 구간의 시작 부분을 인핸스먼트시키면 언더플로우의 수가 약간 증가할 가능성이 있다; 하지만, 적당한 MAX_BEGINNING_DELAY값은 이 효과를 완화한다. 예에서, MAX_BEGINNING_DELAY 값은 실제 디-지터 타겟의 분수로 연산된다; 예를 들어 MAX_BEGINNING_DELAY 값이 TARGET DE-JITTER BUFFER LENGTH의 0.7이라면 언더플로우가 미미하게 증가한다. 다른 예에서, MAX_BEGINNING_DELAY 값이 40 ms와 같은 고정된 값이어도, 앞의 예에서처럼 1xEV-DO Rev A를 지원하는 시스템에서 미미한 언더플로우의 증가를 가져온다.
유음 구간(통화 스퍼트)에서 다음 패킷의 신장은 전체 음성 품질을 저하시키지 않는다. 도 20에 도시된 대로, USER2는 USER1로부터 유음 구간의 제 1 패킷을 수신하고 시작 부분 혹은 "단방향 딜레이(One Way Delay)"는 Td1에 한정된다. 도시된 대로, 음성 세그먼트(400)는 어떠한 신장 혹은 압축 없이 USER2가 수신하지만, 음성 세그먼트(405)은 USER1이 수신할 때 압축된다.
도 21은 유음 구간 시작 부분의 인핸스먼트를 도시한 순서도이다. 가장 먼저 단계(510)에서 시스템이 무음 모드에 있는지 여부를 정한다. 무음 모드는 유음 구간 사이의 무음 구간 혹은 디-지터 버퍼에 의해 패킷이 수신되지 않는 시간에 해당한다. 만약 시스템이 무음 모드에 있지 않다면, 프로세스는 종료된다. 만약 시스템이 무음 모드에 있다면, 타겟 디-지터 길이 추정이 단계(520)에서 수행된다. 그리고나서, 시스템을 단계(530)에서 인핸스먼트시킬 것인지 여부를 결정한다. 인핸스먼트란, 예에 따라서 연산된 타겟 적응성 디-지터 길이가 주어진 값보다 커지도록 지시하는데, 이 예에서는 인핸스먼트가 MAX_BEGINNING_DELAY와 같은 인핸스먼트 요소로 주어진다; 시스템은 단계(540)에서 재생을 시작할 인핸스먼트 요소 혹은 타겟 길이의 일부분과 같은 주기 동안 대기한다. 만약 시스템이 인핸스먼트되지 않으면, 시스템은 단계(550)에서 재생을 시작할 새로운 타겟을 대기한다. 새로운 타겟 값은 연산된 타겟 디-지터 버퍼 길이 혹은 최대 디-지터 버퍼 길이와 같다.
도 22는 유음 구간 시작 부분의 인핸스먼트를 도시한다. 프로세스(580)는 유음 구간의 인식으로 시작한다고 도시되어 있다. 두 개의 시나리오를 고려할 수 있다.:i)타임 와핑 하는 경우;ii)타임 와핑을 하지 않는 경우. 이 예에서, 20 ms 길이의 음성 패킷이 사용되었다. 어떠한 길이의 음성 패킷이라도 구현된다. 여기서, 적응성 디-지터 버퍼는 패킷을 재생하기 전에 120 ms를 대기한다. 이 값은 적응 타겟 디-지터 버퍼 길이이고, 단계(582)에서 적응성 디-지터 버퍼 타겟 추정장치로부터 수신된다. 현재 예에서, 120 ms는 타임 와핑없이 각각 20ms 씩 6개의 패킷을 수신하는 것과 같다. 만약 타임 와핑이 단계(584)에서 사용되지 않았다면, 6개의 패킷이 120 ms 안에 공급된다. 제 1 시나리오에서, 그러므로 디-지터 버퍼는 6개의 패킷을 수신한 후에 패킷을 재생하기 시작한다. 이것은 딜레이 시간이 120 ms인 것과 같다. 제 2 시나리오에서, 타임 와핑을 구현한 경우에, 디-지터 버퍼는 수신된 처음 네 개의 패킷을 신장하고 4개의 패킷이 수신되면 패킷들을 재생한다. 따라서 비록 이 경우 80 ms의 디-지터 버퍼 딜레이가 예상된 120 ms의 디-지터 버퍼 딜레이보다 작다고 하더라도, 잠재 언더플로우는 처음의 몇 개 패킷을 신장함으로써 피할 수 있다. 다시 말해서, 패킷의 재생은 타임 와핑을 하지 않을 때보다 타임 와핑을 할 때 더 일찍 시작된다. 그러므로 타임 와핑은 언더플로우의 수에 영향을 미치지 않고 유음 구간 시작 부분을 인핸스먼트시키는데에 사용된다.
다른 예에서 통화 스퍼트의 끝이 강화된다. 이는 통화 스퍼트의 마지막 몇 개 패킷을 압축하여 이룰 수 있는데, 그리하여 단-대-단 딜레이를 감소시킨다. 다시 말해서, 통화 스퍼트의 끝에서 딜레이를 더 작게 만들 수 있고 제 2 사용자는 제 1 사용자로부터 더 빨리 듣게 된다. 통화 스퍼트의 말단에 대한 강화는 도 23에 도시되어 있다. 여기서 1/8 레이트 패킷(Rate Packet, 비율 패킷)은 통화 스퍼트의 끝을 지시한다. 이는 음성 데이터 송신에 사용 가능한 풀 레이트(Full Rate)(Rate 1), 하프 레이트(Half Rate)(Rate 1/2) 혹은 쿼터 레이트(Quarter Rate)(Rate 1/4) 패킷과 다르다. 다른 레이트의 패킷들도 무음 구간 동안 혹은 통화 스퍼트의 끝에서 송신용으로 사용 가능하다. 음성 통신에서 무음 지시자 패킷과 같은 1/8 레이트 패킷의 구현은 우선권 날짜가 2005년 2월 1일이고, 공동 출원한 "불연속적인 전송 방법과 배경 잡음 정보의 정확한 재생산 방법(Method for Discontinuous Transmission and Accurate Reproduction of Background Noise Information)"이라는 제목의 미국특허출원 제11/123,478호에 더 자세히 기술되어 있다.
도 23에 도시된 바와 같이, 타임 와핑 없이, 패킷 N 내지 N+4가 100ms 안에 재생된다. 통화 스퍼트의 마지막 몇 패킷을 압축함으로써, 동일한 패킷 N 내지 N+4가 100ms가 아니라 70ms 안에 재생된다. 시간 압축이 구현된 경우에 음성의 품질은 거의 혹은 실질적으로 전혀 저하되지 않을 수 있다. 통화 스퍼트의 끝에 대한 강화는 수신기가 통화 스퍼트의 끝을 확인하고 언제 그 끝 부분이 다가오는지를 예상하기 위한 지식을 가지고 있다는 점을 가정한다.
일 예에서, 음성 패킷을 RTP(Real-time Transport Protocol)를 거쳐서 전송하는 동안, "통화 스퍼트의 끝" 지시자는 각 통화 스퍼트의 최종 패킷에서 설정된다. 패킷이 재생에 제공될 때, 디-지터 버퍼의 패킷들을 "통화 스퍼트의 끝" 지시자에 대하여 체크한다. 만약 이 지시자가 패킷 중의 하나에 설정되어 있고 재생을 위해 제공되고 있는 현재의 패킷과 상기 "통화 스퍼트의 끝" 패킷 간에 누락된 시퀀스 번호가 존재하지 않는다면, 현재의 통화 스퍼트 중 미래의 패킷들 전부는 물론이고, 재생에 제공 중인 패킷도 압축된다.
다른 예에서, 시스템은 그것이 통화 스퍼트에 있고 SID(Silence Indicator Description) 비트 세트를 갖는 하나의 패킷이나 1/8 레이트 패킷이 재생 유틸리티로 전달되는 경우에 무음 구간으로 천이한다. 1/8 레이트 패킷은 그 사이즈를 체크함으로써 검출 가능하다. SID 비트는 RTP 헤더에서 전송된다. 시스템은 그것이 무음 구간에 있고 1/8 레이트도 아니고 SID 비트 세트도 갖지 않는 패킷이 재생으로 전달되는 경우에 통화 스퍼트로 천이한다. 주목할 점은, 일 예에서, 시스템이 통화 스퍼트 상태에 있는 경우 여기에 설명한 바와 같은 적응성 디-지터 버퍼링 방법이 수행될 수 있지만, 무음 구간에 있는 경우에는 무시될 수 있다.
주목할 점은, 이 방법은 늦게 도달하는 중복 패킷들은 정확하게 버린다. 만약 중복 패킷들이 도달하면, 패킷의 제 1 인스턴스(Instance)가 적절한 시간에 재 생되고 그 순서가 "딜레이 언더플로우" 후보(Candidate)를 포함하는 배열에 저장되지 않기 때문에 중복 패킷들은 단순히 버려진다.
예에서 음성 패킷을 RTP를 통해 전송하는 동안, "유음 구간 끝 부분" 지시자는 각 유음 구간의 마지막 패킷에 위치한다. 패킷이 재생에 제공될 때, 디-지터 버퍼의 패킷들을 "유음 구간 끝 부분" 지시자가 검사한다. 만약 이 지시자가 패킷 중의 하나에 위치하고 재생을 위해 현재 제공된 패킷과 "유음 구간 끝 부분" 패킷 사이에 누락된 순서 번호가 없다면, 현재 유음 구간의 모든 나중 패킷들과 마찬가지로 재생에 공급되는 패킷은 압축된다.
예에 따라서 유음 구간 끝 부분의 인핸스먼트를 도시한 순서도가 도 24에 있다. 새로운 패킷은 단계(600)에서 시작한다. 단계(605)에서, 만약 디-지터 버퍼 길이가 압축 임계치와 같거나 크면, 압축 지시가 단계(635)에서 내려지고 단계(600)에서 테일(Tail)이 새로운 패킷에 제공된다. 단계(605)에서, 만약 디-지터 버퍼 길이가 압축 임계치보다 작으면, 디-지터 버퍼 길이가 신장 임계치와 같거나 작은지 여부를 단계(610)에서 결정한다. 만약 디-지터 버퍼 길이가 신장 임계치와 같거나 작다면, 단계(615)에서 테일이 무음 구간 혹은 유음 구간의 끝 부분을 나타내는 패킷 비율과 동일한지 여부를 결정한다. 예에서, 1/8 레이트 패킷의 연속적인 열(Train)은 무음 구간 동안 혹은 유음 구간의 끝 부분에서, 예를 들어 20ms와 같은 일정한 간격으로 전송된다. 도 24에서, 만약 테일이 1/8 레이트 패킷과 동일하지 않다는 결정을 단계(615)에서 했다면, 세그먼트는 단계(620)에서 신장되고, 단계(600)에서 새로운 패킷으로 돌아간다. 단계(625)는 테일이 1/8과 동일한지 여부를 결정한다. 단계(625)에서 만약 테일이 1/8 레이트와 같다면, 압축 지시가 단계(635)에서 발생 된다. 만약 테일이 1/8 레이트와 같지 않다면, 그 경우 어떠한 타임 와핑도 없이 단계(630)에서 재생이 정상적으로 이루어진다.
타임 와핑 품질 옵티마이저
다수의 연속적인 패킷이 압축될 때(혹은 신장될 때), 이는 눈에 띄게 재생속도를 빠르게(혹은 느리게) 하고 품질 저하를 가져온다. 그러한 품질 저하는 타임 와핑된 패킷을 간격을 두고 배치하여, 예를 들어 타임 와핑되지 않은 패킷을 타임 와핑된 패킷 앞에 놓고 이들을 연속적으로 배치하는 식으로 하여 피할 수 있다.
만약 타임 와핑된 패킷을 간격을 두고 배치하는 것을 신장의 경우에 적용하면, 일부 패킷들이 신장되지 않아야 하는데 신장될 수가 있다. 이로 인해 언더플로우가 발생할 수 있는데, 패킷의 신장은 디-지터 버퍼에서 패킷이 고갈될 때 수행되기 때문이다. 그러므로, 예에서, 타임 와핑 패킷을 간격을 두고 배치하는 것은 압축된 패킷에만 적용되고, 즉, 압축가능한 다른 패킷 앞에 있는 압축되지 않은 몇 개의 패킷에 이어서 압축된 패킷이 따라나온다. 두 압축된 패킷 사이에서 압축되지 않은 그러한 패킷의 수는 전형적으로 2 혹은 3개이다.
타임 와핑을 트리거하기 위한 조건의 세트
여기서 기술한 것은 음성 패킷의 타임 와핑(신장/압축)을 트리거하기 위한 상태의 수이다. 다음은 패킷이 압축되었는지 혹은 신장 되었는지 아니면 둘 다 아닌지 여부를 결정하기 위한 일련의 규칙(의사코드(Pseudo-code) 형식)이다.
If (in PreWarping (HandoffDetected) Phase and no End of Talkspurt Detected)
and DEJITTER_TARGET+PRE_WARPING EXPANSION not reached)
Expand Packet
End If
Else
If(End of Talkspurt Detected)
Compress
End If
Else
If(Compress Threshold Triggered)
Compress
End If
Else If(Expand Threshold Triggered or Next Packet not in Queue)
Expand
End If
End If
End If
도 25는 디코더 기능과 결합된 전통적인 디-지터 버퍼의 구현물을 나타낸다. 도 25에서, 패킷들은 디-지터 버퍼에 20 ms 간격을 두고 도착할 것으로 예상된다. 이 예에서 패킷들은 불규칙한 간격, 즉, 지터를 가지고 도달한다. 디-지터 버퍼는 일단 디-지터 버퍼가 20 ms와 같은 일정한 간격으로 패킷을 전송하기 시작했을 때 디-지터 버퍼 길이가 디-지터 버퍼가 고갈되지 않을 정도에 이를 때까지 패킷을 축적한다. 요청되는 디-지터 버퍼 길이에서, 디-지터 버퍼는 20 ms의 일정한 간격으로 패킷을 재생하기 시작한다. 디코더는 이 패킷들을 일정한 간격으로 수신하고 각 패킷을 패킷 당 20 ms의 음성으로 변환한다. 다른 예에서는 다른 시간 간격을 선택한다.
이와 비교하여, 도 26은 타임 와핑을 지원하는 적응성 디-지터 버퍼의 예를 도시한다. 여기서, 패킷은 적응성 디-지터 버퍼에 불규칙한 시간 간격으로 도달한다. 하지만 이 경우, 타겟 디-지터 버퍼 길이는 훨씬 작다. 이는 만약 디-지터 버퍼가 고갈되기 시작하면 타임 와핑으로 패킷이 신장되기 때문에 적응성 디-지터 버퍼가 패킷을 채울 수 있는 시간을 주는 것이다. 만약 적응성 디-지터 버퍼가 고갈되기 시작하면 디코더는 패킷을 신장하고, 적응성 디-지터 버퍼가 너무 많은 패킷을 축적하기 시작하면 패킷을 압축한다. 음성 패킷의 불규칙한 전달은 적응성 디-지터 버퍼로부터 디코더와 타임 와핑 장치로의 입력으로 관측된다. 이 패킷들은 타임 와핑 때문에 불규칙한 간격으로 도달하고, 디코더는 각각의 패킷을 원래 패킷의 도달 시간에 따라 서로 다른 길이의 음성 패킷으로 변환한다. 예를 들어, 이 예에서, 디코더는 각 패킷을 패킷 당 15∼35 ms의 음성으로 변환한다. 패킷은 타임 와핑에 의해 더 일찍 재생되기 때문에, 요청되는 버퍼 크기는 작아지고, 결국 네트워크에서 대기 시간이 짧아진다.
도 27은 예와 일치하는 AT를 도시한 블록 다이어그램이다. 적응성 디-지터 버퍼(706), 타임 와핑 제어 장치(718), 수신 회로(Receive Circuitry, 714), 제어 처리장치(Control of Processor,722), 메모리(710), 송신 회로(712), 디코더(708), H-ARQ 제어(720), 인코더(716), 음성 처리(724), 유음 구간 ID(726) 및 오차 수정(Error Correction, 704)은 상기한 구현에서처럼 함께 결합 된다. 게다가 도 27에서는 통신 버스(Communication Bus, 702)를 경유하여 함께 결합 된다.
도 28은 패킷이 디-지터 버퍼에 의해 수신되고 결국 스피커에 의해 재생되는 예에서 패킷 처리을 도시한다. 도시된 대로, 패킷은 디-지터 버퍼에서 수신된다. 디-지터 버퍼는 패킷과 타임 와핑 정보를 디코더로부터의 패킷 요청에 따라 디코더에 전송한다. 디코더는 샘플을 출력 드라이버로부터의 요청에 따라 출력 드라이버에 전송한다.
디-지터 버퍼 안에 있는 입력 제어기는 입력 패킷을 파악하고 만약 입력 패킷에 오차가 있다면 이를 알려준다. 디-지터 버퍼는 순서 번호를 가지는 패킷을 수신한다. 예를 들어 입력 패킷이 이전 패킷의 순서 번호보다 낮은 순서 번호를 가질 때, 입력 제어기에 의해 오차가 검출된다. 도 28의 입력 제어기 안에 위치한 분류 장치(Classification Unit)는 입력 패킷을 분류한다. 분류 장치를 통해 정의된 서로 다른 카테고리는 "양호(Good) 패킷", "딜레이된 패킷" 및 "불량(Bad) 패킷" 등을 포함한다. 또한, 입력 제어 장치는 패킷들을 비교하여 이 정보를 디-지터 버퍼 제어기에 보낸다.
도 28에 도시된 디-지터 버퍼 제어기는 디-지터 버퍼의 입력과 출력 제어기로부터 양방향(Bi-directional) 입력을 수신한다. 디-지터 버퍼 제어기는 입력 제어기로부터 데이터를 수신하고, 거기서 그러한 데이터는 수신된 양호 데이터의 수, 수신된 불량 데이터의 수 등과 같은 입력 데이터의 특징을 나타낸다. 디-지터 버퍼는 이 정보를 사용해서 언제 디-지터 버퍼를 줄일지 혹은 키울지 결정하고, 그 결과 타임 와핑 제어기에 압축 혹은 신장하라는 신호를 보낸다. 디-지터 버퍼 제어 장치 내부의 PER 장치는 PER 딜레이를 연산한다. 디-지터 버퍼의 출력 제어기는 디-지터 버퍼로부터 패킷을 요청한다. 디-지터 버퍼의 출력 제어기는 또한 재생된 마지막 패킷이 무엇인지를 표시한다.
디코더는 디-지터 버퍼에 패킷 요청을 보내고 그러한 요청에 의해 디-지터 버퍼로부터 패킷을 수신한다. 디코더 내부의 타임 와핑 제어 장치는 디-지터 버퍼의 출력 제어기로부터 타임 와핑 제어 정보를 수신한다. 타임 와핑 제어 정보는 패킷이 압축되었는지, 신장되었는지 혹은 수정되지 않은 채로 있는지 여부를 표시한다. 디코더에 의해 수신된 패킷은 디코딩되고 음성 샘플로 변환된다; 출력 드라이버 내부 버퍼로부터의 요청에 의해, 샘플이 출력 드라이버로 전송된다. 출력 드라이버로부터의 샘플 요청은 디코더 내부의 출력 제어기에 의해 수신된다.
위상 정합
앞서 주목한대로, 패킷의 예상 재생 시간 이후에 패킷을 수신하면 딜레이된 패킷의 위치에서 소실부가 재생된다. 적응성 디-지터 버퍼에서 소실부 혹은 누락된 패킷의 수신으로 인해 디코딩된 음성에서 불연속이 발생한다. 적응성 디-지터 버퍼에 의해 잠재적인 불연속이 인식될 때, 적응성 디-지터 버퍼는 디코더에 위상 정합의 수행을 요청한다. 도 28에 도시된 대로, 적응성 디-지터 버퍼(750)는 출력 제어기(760)로부터 입력을 수신하는 위상 정합 제어기를 포함한다. 위상 정합 제어 정보는 디코더(762)에 위치한 위상 정합 장치로 전송된다. 예에서, 위상 정합 제어 정보는 "위상 오프셋(Phase Offset)", "런 렝스(Run Length)" 정보를 포함한다. 위상 오프셋은 디코더가 디코딩한 패킷의 수와 인코더가 인코딩한 패킷의 수 사이의 차이이다. 런 렝스는 디코더가 현재 패킷의 디코딩에 앞서 즉시 디코딩한 연속적인 소실부의 수를 말한다.
예에서, 위상 정합과 타임 와핑은 둘 다 공통 제어 코드 혹은 소프트웨어를 가진 디코더에서 구현된다. 예에서, 디코더는 파형 인터폴레이션(Waveform Interpolation)을 구현하며, 거기서:
a) 만약 타임 와핑이나 위상 정합이 사용되지 않으면, 160개의 샘플로 파형 인터폴레이션을 사용하여 보코딩한다;
b) 만약 타임 와핑이 사용되고 위상 정합이 사용되지 않으면, (160+-N* 피치 주기)개의 샘플로 디코딩한 파형 인터폴레이션을 사용하여 보코딩한다. 여기서 N은 1 혹은 2이다.
c) 만약 타임 와핑을 사용하지 않고 위상 정합이 사용되면, (160-Δ)개의 샘플로 디코딩한 파형 인터폴레이션을 사용하여 보코딩한다. 여기서 N은 위상 정합의 양이다.
d) 만약 위상 정합과 타임 와핑 모두를 사용하면, (160-Δ+-N* 피치 주기)개의 샘플로 디코딩한 파형 인터폴레이션을 사용하여 보코딩한다. 여기서 N은 위상 정합의 양이다.
출력 드라이버의 클록(Clock) 입력은 출력 드라이버 안의 버퍼에 의해 얼마나 자주 데이터가 요청되는지를 결정한다. 이는 시스템의 메인 클록이고 많은 서로 다른 방법으로 구현된다. 시스템의 기본(Dominant) 클록은 PCM 샘플의 샘플링 비율에서 유도된다. 예를 들어, 만약 협대역(Narrowband) 음성이 통신되는 경우, 시스템은 초당 8000개의 PCM 샘플을 재생한다.(8kHz) 이 클록은 시스템의 나머지를 구동한다. 하나의 접근 방법은 오디오 인터페이스(770)가 필요할 때 디코더로부터 더 많은 샘플을 요청하게 하는 것이다. 다른 접근 방법은 디코더/타임 와핑을 독립적으로 작동하게 하는 것인데, 왜냐하면 이 모듈(Module)은 얼마나 많은 PCM 샘플이 이전에 전달되었는지 알고 있고, 언제 더 많은 샘플을 다음으로 제공해야 하는지 알고 있기 때문이다.
스케줄러(Scheduler)는 디코더(762) 혹은 오디오 인터페이스 및 제어 장치(810) 내에 위치한다. 스케줄러가 오디오 인터페이스 제어 장치(810) 안에 위치할 때, 스케줄러는 수신된 PCM 샘플의 수에 기초하여 다음 패킷을 요청한다. 스케줄러가 디코더 안에 위치할 때, 스케줄러는 매 t ms마다 패킷을 요청한다. 예를 들어, 디코더 스케줄러는 적응성 디-지터 버퍼(750)로부터 매 2 ms마다 패킷을 요청한다. 만약 타임 와핑이 디코더 안에서 가능하지 않다면, 혹은 만약 타임 와핑 장치가 디코더(762) 안에 위치하고 있지 않다면, 스케줄러는 한 개의 패킷에 들어있는 정확한 샘플의 수에 대응하여 한 세트의 샘플을 오디오 인터페이스 및 제어 장치(770)에 보낸다. 예를 들어, 오디오 인터페이스 장치(770)가 매 2 ms 마다 샘플을 요청할 때, 디코더의 출력 제어기(766)는 16개의 PCM 샘플을 전송한다.(8kHz 샘 플링 비율에서, 1개의 패킷은 20ms, 음성 데이터 샘플 160개에 대응한다.) 다시 말해서, 타임 와핑 제어기가 디코더 밖에 있을 때, 디코더의 출력은 샘플 전환에 대해 정상 패킷이다. 샘플의 수를 수신되었어야 할 샘플의 수로 변환하는 오디오 인터페이스 장치(770)는 디코더가 타임 와핑을 수행하도록 한다.
다른 시나리오에서, 타임 와핑 제어기가 디코더 내에 있을 때 그리고 타임 와핑이 가능할 때, 압축 모드에서 디코더는 더 적은 샘플을 출력한다; 그리고 신장 모드에서 디코더는 더 많은 샘플을 출력한다.
도 30은 디코더에 의해 스케줄링 기능이 이루어지는 시나리오를 추가적으로 나타내고 있다. 단계(902)에서, 디코더는 디-지터 버퍼로부터 패킷을 요청한다. 단계(904)에서 패킷이 수신된다. 단계(906)에서 패킷은 "N"개의 샘플로 변환된다. "N"개의 생성된 샘플은 단계(908)에서 오디오 인터페이스 제어 장치로 전달되고, 단계(910)에서 다음의 패킷 요청이 N의 함수로서 스케줄링된다.
도 31은 오디오 인터페이스와 제어 장치에 있어서 디코더 외부에서 스케줄링하는 단계를 나타낸다. 먼저 오디오 인터페이스 장치는 단계(1002)에서 PCM 샘플의 세트를 요청한다. 요청된 PCM 샘플은 단계(1004)에서 수신되고, 단계(1006)에서 다음의 패킷 요청이 N의 함수로서 스케줄링된다.
타임 와핑 지시자는 타임 와핑 지시자가 없는 경우와 같이 적응성 디-지터 버퍼로부터의 명령 중 일부일 수 있다. 도 32는 스케줄링이 디코더의 외부, 예컨대 오디오 인터페이스 및 제어 장치에서 연산되는 타임 와핑 장치를 나타낸다. 패킷 타입, 타임 와핑 지시자 및 수행된 와핑의 양이 타임 와핑 장치에 입력된다.
도 33은 스케줄링이 디코더의 타임 와핑 장치에서 연산되는 타임 와핑 장치를 나타낸다. 타임 와핑 장치에 대한 입력에는, 패킷 타입, 타임 와핑 지시자 및 수행된 와핑의 양이 포함된다. 인에이블(Enable) 및 와핑의 양이 타임 와핑 장치의 품질 최적화 장치에 대한 입력이다. 타임 와핑 정보는 출력이다.