이하 본 발명의 바람직한 실시예를 첨부된 도면의 참조와 함께 상세히 설명한다.
본 발명은 상술한 터보코더 인터리버 성질(거리성질, 가중치 성질, 랜덤성질 등)을 만족할수 있는 최적의 인터리빙/디인터리빙 장치를 제안한다.
이를 위해 본 발명에서 제안하는 터보코더 인터리버의 어드레스 발생기는 입력 프레임 데이터의 크기가 2m(m>1)의 정수 배가 아니면, 상기 프레임 크기를 2진수로 변환하여 그 최하위 비트로부터 최소한 연속되는 0 개수가 1∼64개중 1개가 되도록 임의의 값(이하 오프셋값이라 칭함)을 더해 가상의 어드레스 크기 N을 구한다. 그리고 이렇게 구해진 상기 가상의 어드레스 크기 N을 영역수(Ng)×2m으로 표현되도록 하는 영역수Ng와 m을 구한다. 여기서 상기 영역수Ng와 m은 상기한 인터리버 성질들을 최적으로 만족할수 있도록 실험적으로 구한다. 그 다음 2m크기의 부분 어드레스 생성영역별로 의사랜덤 어드레스를 발생하여 전체 입력프레임 데이터를 인터리빙한다. 예들들어, 프레임 크기가 376(101111000)이라 할 때, 최하위비트부터0의 개수가 가장 많이 나오도록 더해질수 있는 상기 오프셋값은 8(1000)이 된다.
여기서 상기 추가된 오프셋값에 의해 불필요한 독출 어드레스들이 발생하는데, 이때의 어드레스들을 상대전파지연차라 칭한다. 만일, 2거듭제곱으로 표현되도록 상기 입력 데이터의 크기에 오프셋값을 추가한다면 상기 입력 프레임이 커지면오프셋값이 매우 커지므로 상대전파지연차의 처리가 복잡해진다. 또한 상기 영역수가 매우 커진다면 랜덤성질이 나빠질수 있다.
본 발명은 기본적으로 입력 정보 비트의 순서를 의사랜덤 오프셋제어방식으로 치환(permutation))하여 제2구성부호기의 입력으로 제공한다. 따라서 본 발명에따른 인터리버 구조는, 입력 정보 비트를 저장하는 인터리버 메모리(Input data buffer/Output data buffer)와, 입력 정보 데이터의 순서를 최적으로 바꾸기 위한 오프셋 제어 의사랜덤 인터리빙 블록(Partial Reversal Interleaver + Comparator)과, 부수적인 업/다운 카운터(Up-Down counter) 등이 필요하다. 또한 본 발명에서 예시하는 터보코드의 제1, 제2구성부호기는 상기 종래기술의 구성부호기로 구성될수 있을 뿐만아니라 TIA에서 표준화하고 있는 CDMA2000에서 제시하는 구성부호기 및 ETSI에서 표준화 하고 있는 UMTS에서 제시하는 구성부호기를 사용할수 있는 등 특정구성부호기에 의하여 한정되지 않는다. 또한 본 발명의 인터리버는 직렬 터보 코드의 내부 인터리버뿐만 아니라 채널인터리버 등에도 활용 가능하다.
본 발명에서 사용하는 용어들을 정의하면, '영역'은 인터리빙 어드레스 영역을 균등 분할하였을 때 각각의 어드레스 생성영역을 의미하며, '그룹'은 상기 오프셋값에 의해 그룹핑되는 어드레스 영역을 의미한다.
도 1 및 도 2는 본 발명에 따른 인터리버 및 디인터리버의 블록 구성을 보여준다.
상기 도 1를 참조하여 제1구성부호기에서 출력되는 프레임 데이터를 인터리빙하기 위한 인터리버의 구성을 살펴보면, 어드레스 생성부(111)는 입력 프레임 데이터 크기 L 및 입력 클럭(clock)에 따라 데이타의 순서를 바꾸기 위한 독출 어드레스를 생성하여 인터리버 메모리(112)로 출력한다. 상기 인터리버 메모리(112)는 쓰기모드시 입력데이타를 순서대로 저장하고, 독출모드시 상기 어드레스 생성부(111)에서 제공되는 어드레스에 따라 데이터를 출력한다. 카운터(113)는 클럭(Clock)을 입력하며, 상기 인터리버 메모리(112)의 쓰기 어드레스(Write address)으로 출력한다. 상기한 바와 같이 상기 인터리버는 쓰기모드시 입력데이타를 인터리버 메모리(112)에 순서대로 저장하고, 독출모드시 상기 어드레스 생성부(111)에서 발생된 독출 어드레스에 따라 상기 인터리버 메모리(112)에 저장되어 있는 데이터를 출력한다. 다른 예로, 쓰기 모드시 미리 데이터의 순서를 바꿔 인터리버 메모리에 저장하고, 독출모드시 순서대로 데이터를 읽어 제2구성부호기로 출력할 수도 있다.
상기 도 2를 참조하여 디인터리버의 구성을 살펴보면, 어드레스 생성부(211)는 입력 프레이 데이터 크기 L, 및 입력클럭에 의하여 데이터의 순서를 원래로 복원하기 위한 쓰기 어드레스를 생성하여 디인터리버 메모리(212)에 제공한다. 상기 디인터리버 메모리(212)는 쓰기모드시 상기 어드레스 생성부(211)에서 제공되는 쓰기 어드레스(write ADDR)에 따라 입력데이타를 저장하고, 독출모드시 저장 데이터를 순서대로 출력한다. 카운터(213)는 클럭(C1ock)을 입력하며, 상기 디인터리버 메모리(212)에서 데이터를 독출하기 위한 독출 어드레스(Read ADDR)를 상기 메모리(212)로 제공한다.
상술한 바와 같이, 상기 디인터리버는 인터리버의 역과정으로 구조상 모든 부분이 완전히 동일하며, 단지 독출/쓰기 모드에서 입력되는 데이터의 순서가 다를뿐이다. 따라서 이하 설명은 인터리버를 위주로 설명할 것이다.
일반적으로, 좋은 구조적 특성을 가진 인터리버를 구현하기 위해서는 수많은 시뮬레이션(simulation)에 의한 결론을 도출하는 것이 바람직하다. 일반적으로 일정한 프레임 크기 이상이면, 랜덤 인터리버의 성능은 평균적 성능을 보인다. 따라서, 랜덤 인터리버와 비슷한 성능을 지닌 인터리버를 설계하는 것이 바람직하다. 이를 위해 본 발명에서는 PN 시퀀스를 생성하는 선형 피드백 쉬프트 레지스터(LFSR;Linear Feedback Shift Register)를 이용하며, 이로부터 생성되는 랜덤 어드레스를 사용한다. 그러나, 이와 같은 방식을 사용하고자 할 경우 다음과 같은 문제점을 고려해야 한다.
첫째, PN시퀀스는 주기가 2m-1이다.
둘째, 대분분의 프레임 크기는 Z의 거듭제곱으로 표현되지 않는다.
상기한 두가지 문제를 해결하기 위해, 입력 데이터 L의 크기가 2m(m>1)의 정수배가 아닌 경우, 상기 입력 데이터의 크기 N에 상기 오프셋값(OSV)를 더하여 가상의 어드레스 크기N을 구하고, 하기[상기] 수학식 1과 같은 알고리즘에 의해 독출어드레스(ADDRESS_READ}를 생성한다.
본 발명에 따른 실시 예에 따른 인터리빙 방식을 소프웨어적으로 설명하면 다음과 같다.
우선, 입력 데이터 L의 크기가 2m(m>1)의 정수배가 아닌 경우, 상기 입력 데이터의 크기 N에 상기 오프셋값(OSV)를 더하여 가상의 어드레스 크기N을 구하고, 하기 수학식 1과 같이 주어진 오프셋제어 PN 인터리빙 알고리즘1(Offset Controlled PN Interleaving algorithm)에 의해 인터리빙을 수행한다.
[수학식 1]
}
}
상기 수학식 1과 같은 알고리즘을 통해 생성된 ADDRESS_READ는 원래의 어드레스와 1대 1 매핑(mapping)되며, 이러한 인터리버는 PN 터리버의 특성에다 거리특성을 함께 가진다. 또한 상기 수학식 1에서 OFFSET(I)는 상기 오프셋값에 의해 결정되는 기준값들로부터 상기 ADDRESS_READ가 어느 그룹에 속하는지를 파악하여 해당되는 특정값만큼 어드레스를 쉬프트시키는 기능을 하는 함수이다.
만일, 상기 특정값만큼 어드레스를 쉬프트시키지 않고 인터리버 메모리의 해당번지를 어드레싱하여 "DATA READ"하는 경우 오프셋값에 의한 무효한 데이터가 읽혀지게 된다. 즉, [O..L-1]의 입력데이타들에 해당되는 ADDRESS-READ 이외에 오프셋[L..N-1]에 해당되는 8개의 ADDRESS_READ가 인터리빙 시퀀스 사이 사이에 존재하게 된다. 이에 대한 설명이 도 3에 도시되어 있다. 이것을 그대로 읽을 경우, 실제 전송해야 할 L심볼보다 8개 많은 N개의 심볼들이 전송되므로 사이에 존재하는 어드레스를 빼고 후속하는 어드레스를 연접시켜야 한다. 이에 대한 설명은 도 4에 도시되어 있다. 상기 도 4에 도시된 바와 같이, L에서 N-1까지의 무효심볼들이 인터리빙후 사이 사이에 존재하게 된다. 따라서 이러한 무효심볼들을 부분을 제외하고 차례로 인터리빙된 심볼들을 출력해야 한다. 이를 위한 방법으로 오프셋 제어방식을 사용한다. 즉, [L..N-1]에서 최종 8 심볼에 해당되는 ADDRESS-READ는 항상 인터리빙 규칙에 의하여 일정하게 결정된다. 따라서 인터리빙된 무효심볼들의 위치를 미리 알수 있다. 우선, 테일(tai1) 8심볼들의 어드레스를 D1, D2, D3,...,D8(즉, L..N-1)이라 하자. 그리고 각각의 Di(i=1..8)에 해당되는 인터리빙 어드레스를 Tk=PIRB(Di), k=1..8,라 하자. 물론 D1<D2라 해서 반드시 T1<T2는 아니며 임의의순서에 의해 배치된다. 따라서, 편의상 T1<T2<..<T8의 순서로 배치되도록 조정한 인덱스를 j라 하고, 이를 사용한 어드레스를 Tj(j=1..8)로 정의한다. 그러면 상기 어드레스를 기준으로 N개의 인터리버 공간은 8개의 그룹으로 분할되며, 각각의 Ti가 그 경계를 구분하는 기준값들(Threshold)이 된다. 여기서 상기 기준값들을 제외시키고 어드레스들을 연접시켜야 한다. 예를들어,, GO의 경우에는 ADDRESS_READ-O, G1의 경우에는 ADDERSS-READ-1,..., G7의 경우에는 ADDRESS_READ-7을 해주면 발생되는 모든 어드레스는 [0..L-1] 사이의 값을 가지게 된다.
또한, 상기 수학식 1과 같은 알고리즘을 적용하기 위해서는 여러 가지 파라미터들이 미리 결정되어야 한다. 이하 설명되는 파라미터들은 실험적으로 결정된 파라미터들이다. 이러한 파라미터들은 상기 의사랜덤 시퀀스를 새성하는 의사랜덤생성기(PN generator)의 초기값(initial seed)들에 의해 바뀌지만 인터리버의 성능에는 거의 무관하기 때문에, 먼저 초기값은 임의로 고정시킨다. 하기 <표 1> 및 <표 2>에서 p(x)는 GF(2) 상에서 구한 의사랜덤 생성기의 원시 다항식(primitive polynomial)으로서 가장 왼쪽의 비트가 p(x)의 0차항의 계수를 나타내며, 가장 오른쪽 비트가 최고차 항의 계수를 나타낸다. 즉, p(x)=[110000]은 p(x)=1 + x + x6을 나타낸다. 예를들어, 상기 생성다항식 p(x)=1 + x + x6에 해당하는 의사랜덤 생성기는 도 5와 같이 도시된다.
일반적으로, 초기화 과정에서 m개의 쉬프트 레지스터 셀(shift register cell)에 각각의 영역에 해당하는 초기값들이 로딩(loading)된다. 이후, 매 클럭이진행될 때마다 레지스터의 값들은 연결된 라인에 의해 업데이트(update)되며, 상기 업데이트후 레지스터에 저장된 값(0/I)의 조합에 의해 6비트 어드레스가 발생한다. 즉, 최저차 항 셀의 내용을 p[I]라 하고 최고차 항의 내용을 p[m]이라 할 때 PNg(ADDRESS_WRITE)는 초기 시간(inital time)에서 ADDRESS_WRITE만큼 클럭킹(clocking) 되었을때 쉬프트 레지스터의 값(이진(binary)로 표시한 (p[1]p[2]...p[m-1]p[m]))을 십진수(Decimal)로 바꾼 어드레스(=p[1]2m-1+...+p[m]20)이다. 또한 상기 의사랜덤 발생기에서 생성되는 어드레스는 2m-1의 주기를 가지고 발생된다. 또한, 초기값들이 O이 아니므로 실질적으로 발생되는 모든 어드레스는 {1≤k≤2m-1} 범위 내의 값을 가진다. 따라서 상기 수학식 1에서 [PNg(ADDRESS_WRITE)-1]은 {0≤k≤2m-2} 범위 내의 값을 가진다. 이 경우 필요한 어드레스 수 2m보다 의사랜덤 생성기에 의해 발생되는 어드레스의 수가 2m-1로 하나적으므로 매 영역의 마지막 어드레스는 그대로 오버라이트((Overwrite)하여 그대로 독출 어드레스(ADDRESS_READ)로 사용한다. 이에 해당하는 내용은 상기한 수학식 1에서 ADDRESS_WRITE=ADDRESS_WRITE+g*2m-OFFSET(ADDRESS_WRITE)로 표현된다.
상기 수학식 1과 같은 알고리즘을 하드웨어적으로 구현한 예를 설명하면 다음과 같다.
도 6은 본 발명에 실시예에 따른, 상기 인터리버 메모리112에 순차적으로 저장된 데이터를 인터리빙하여 독출하기 위한 어드레스 생성부의 구체적인 상세구성을 도시하고 있다.
상기 도 6을 참조하여 어드레스생성부(111)를 살펴보면, 랜덤어드레스 생성부121은 복수개의 의사랜덤 발생기(PN generator)들에 의해 랜덤 어드레스들을 생성하여 출력한다. 비교부122는 상기 랜덤어드레스 생성부121에서 출력하는 랜덤 어드레스를 상기 오프셋값에 의해 미리 결정되는 상기 기준값들(GTH;어드레스 영역을 그룹핑하는 그룹 기준값들)과 비교하여 어느 그룹에 속하는지 판단하여 그룹값 선택신호와 상기 랜덤 어드레스를 출력한다. 또한, 상기 비교부122는 상기 랜덤 어드레스생성기(121)에서 출력되는 랜덤 어드레스를 상기 오프셋값에 의한 그룹 기준값들(GTH)과 비교하여 어느 하나라도 일치할 경우 그때의 랜덤 어드레스는 삭제(deletion)시켜 출력하지 않는다. 선택기[부]123은 상기 선택신호에 따라 해당 그룹값을 선택하여 출력한다. 감산기124는 상기 비교부(122)에서 출력되는 랜덤 어드레스에서 상기 선택부123에서 출력되는 특정 그룹값을 감하여 메모리(112)에서 데이터를 독출하기 위한 독출 어드레스를 생성한다.
상기 도 6의 구성중 상기 랜덤어드레스 생성부121의 상세구성을 도 7a에서 도시하고 있다.
상기 도 7a를 참조하면, 의사랜덤 생성기들(PN generator)711-7N1은 각각 대응되는 어드레스 생성영역에 저장된 데이터의 순서를 바꾸기 위한 의사랜덤 시퀀스 생성하여 제1멀티플렉서(712)로 출력한다. 여기서 각각의 의사랜덤 생성기는 서로 다른 상태값들로 초기화한다. 카운터716은 상기 제1멀티플렉서(712)의 출력을 선택하기 위한 선택신호를 출력한다. 만일, 어드레스 영역 수가 Ng개라고 가정하면, O..Ng-1의 선택신호를 출력한다. 여기서 상기 선택신호는 순차적 또는 랜덤하게 발생할수 있다. 상기 랜덤하게 발생하는 경우에는 실험적으로 구해진 어떠한 패턴에 의해 상기 선택신호를 랜덤하게 발생한다. 상기 멀티플렉서(712)는 상기 카운터에서 제공되는 선택신호에 의해 해당 의사랜덤 생성기의 출력을 선택하여 출력한다. 여기서 상기 멀티플렉서(712)의 출럭데이타는 감산기718에서 1만큼 감산되어 제2멀티플렉서로 입력된다. 이유인즉, 상기 의사랜덤 생성기들은 어드레스 0값을 생성하지 못하므로, 모든 생성값에서 1만큼 감하여 랜덤 어드레스를 0부터 매핑시키기 위함이다. 영역 카운터715는 상기 어드레스 생성영역의 크기에 해당하는 카운터를 발생하여 비교기714로 출력한다. 상기 비교기714는 상기 영역 카운터715에서 제공되는 카운터가 영역크기(2m)-1에 해당할 때 상기 제2멀티플렉서713으로 선택신호 "1"를 출력한다. 상기 제2멀티플렉서713은 상기 선택신호에 의해 상기 영역 카운터715에서 발생하는 카운터가 영역크기-2 동안에는 상기 제1멀티플렉서712의 출력을 선택출력하고, 상기 영역크기-1에 도달할 시 상기 비교기714에서 제공하는 2m-1(영역 크기-1)를 선택출력한다. 어드레스 버퍼717은 상위 어드레스 영역에 상기 카운터716의 출력데이타를 저장하고, 하위 어드레스 영역에 상기 제2멀티플렉서713의 출력데이타를 저장한다. 이렇게 상기 읽기 어드레스 버퍼717에 저장된 어드레스는 상기 비교기122로 전달된다. 그러면, 상기 비교기122에서는 상기 어드레스가 어느 그룹에 속하는지 판단하여 이에 대한 그룹값 선택신호를 상기 선택기123로 제공한다. 그리고 상기 선택기123은 상기 선택신호에 따라 해당 그룹값을 선택 출력하고, 상기 감산기124는 상기 비교기122에서 출력되는 상기 어드레스에서 상기 선택된 그룹값을 감해 최종 독출[인터리빙을 위한 읽기] 어드레스를 상기 인터리버 메모리112로 제공하고, 상기 인터리버 메모리112에서 상기 독출 어드레스에 해당하는 데이터를 독출한다.
상기한 도 6 및 도 7a의 구성에 따른 독출 어드레스 생성 과정을 살펴본다. 상기 의사랜덤 생성기711-7N1들은 클럭킹에 의해 저장된 상태값들을 쉬프트시켜 의사랜덤 시퀀스를 생성하고, 상기 제1밀티플렉서712는 상기 카운터716에서 제공되는 선택신호에 의해 해당 의사랜덤 생성기711-7N1의 상태값을 선택출력한다. 상기 선택신호에 의해 상기 의사랜덤 생성기들717-7N1의 상태값들이 선택되면, 다시 상기 의사랜덤 생성기들711-7N1은 클럭킹에 의해 저장된 상태값들을 쉬프트시켜 의사래덤 시퀀스를 생성한다. 이렇게 상기 제1멀티플렉서712에서 출력되는 상기 의사랜덤시퀀스는 1만큼 감해져서 상기 제2멀티플렉서713로 입력되며, 상기 의사랜덤 시퀀스는 상기 영역카운트(1/Ng)x CLK가 상기 어드레스 생성영역의 크기(2m)-1 값에 도달되기 전까지 그대로 패스되어 상기 어드레스 버퍼717의 하위 영역으로 전달된다. 한편, 상기 영역카운트가 상기 어드레스 생성영역의 크기(2m)-1 값에 도달될 경우에는 상기 (2m)-1 값이 상기 어드레스 버퍼717의 하위영역에 전달된다. 한편, 상기 어드레스 버퍼717의 상위영역에는 상기 카운터716에서 출력되는 영역(현재 선택된 의사랜덤 생성기에 대응되는 어드레스 생성영역을 지시하는 값들이 저장된다. 이렇게 상기 어드레스 버퍼717에 저장된 어드레스는 상기 비교기122로 전달되고, 상기 비교기122에서는 상기 어드레스가 어느 그룹에 속하는지를 판단하여 이에 대한 그룹값 선택신호를 상기 선택기123로 제공한다. 또한, 이때의 상기 어드레스를 상기 감산기124로 출력한다. 그러면, 상기 선택부123은 상기 선택신호에 따라 해당 그룹값을 선택 출력하고, 상기 감산기124는 상기 비교기(122)에서 출력되는 어드레스값에서 상기 해당 그룹값을 감해 독출 어드레스를 상기 인터리버 메모리112로 제공한다. 한편, 상기 어드레스가 어느 그룹에도 속하지 않을 경우, 다시 말해 상기 오프셋값에 의한 기준값들에 해당할 경우, 상기 비교기(122)는 상기 어드레스를 무효어드레스로 간주하여 삭제(deletion)하여 출력하지 않는다. 그리고, 상기 인터리버 메모리112는 상기 제공되는 독출 어드레스에 따라 해당 번지에 저장되어 있는 데이터를 출력한다.
상기한 실시 예는 오프셋값에 의해 발생된 무효어드레스(GTH)를 상기 비교기(122)에서 삭제시키는 것으로 설명하였지만, 다른 실시예로 마지막 의사랜덤생성기7N1에서 생성되는 오프셋값에 해당하는 의사랜덤 시퀀스를 당초 선택하지 않는 방법도 있다. 이럴 경우, 상술한 비교기(122)에서의 삭제기능은 필요하지 않다.
도 7b를 참조하면, 카운터(720)는 상기 마지막 의사랜덤 생성기의 상태값을 모니터링하고, 상기 상태값이 오프셋값에 의한 무효한 값이라 판단되며, 상기 카운터(720)는 선택기(721)로 인에이블 신호를 출력한다. 그러면 선택기(721)는 첫 번째 의사랜덤 생성기를 선택하기 위한 선택신호(s=0)을 상기 선택기712로 제공한다. 여기서 상기 의사랜덤 생성기들을 순차적으로 선택하는 경우에는 상기와 같이 상기 선택기(721)는 선택신호 "0"을 출력하지만, 상기 의사랜덤 생성기들을 랜덤하게 선택하는 경우에는 다음 차례의 의사랜덤 생성기를 선택할수 있는 선택신호를 출력한다. 즉, 상기 마지막 의사렌덤 생성기에서 생성되는 오프셋값에 의한 무효한 값을 당초 선택하지 않으므로서 무호한 어드레스가 생성되지 않도록 한다.
이하 본 발명의 실시 예에 따른 인터리빙을 위한 어드레스 생성과정을 도 8을 참조하여 설명한다. 상기 도 8의 과정은 상기한 수학식 1의 알고리즘에 의한 것이다.
상기 도 8을 참조하면, 어드레스 생성부(121)(일반적인 CPU)는 811단계에서 인터리빙을 위한 각 파라미터 값들을 산출한다. 입력 프레임 크기를 L이라 할 때, 상기 프레임 크기를 2진수로 표현했을 때, 최하위 비트부터 0의 개수가 적어도 한개 이상 되도록 임의의 값(오프셋값)을 더해 가상 어드레스 크기N을 구한다. 그리고, 상기 가상 어드레스 크기 N을 2의 제곱근(2m)×Ng로 표현했을 때, 상기 승수값(m)과 Ng(이하 영역번호라 칭함)을 실험적으로 구한다. 상기한 파라미터들은 설계 당시 미리 정해지는 값들이며, 이러한 값들은 룩업테이블 형태로 저장되고, 실지로 인터리빙 수행시 상기 룩업테이블로부터 해당 값들을 읽어와서 사용하게 된다.
그리고 상기 어드레스 생성부(121)는 813단계에서 쓰기어드레스(ADDRESS_WRITE)를 0으로 초기화하고, 815단계에서 영역인덱스(g)를 0으로 초기화한다.
상기 초기화가 이루어진후, 상기 어드레스 생성부(121)는 815단계에서 의사랜덤 시퀀스를 이용한 랜덤 어드레스를 하기 수학식에 의해 산출한다."(ADDRESS_READ=[(PNg(ADDRESS_READ_WRITE)-1]+g*2m" 여기서 상기 PNg(ADDRESS_READ_WRITE)는 의사랜덤 시퀀스를 생성하는 함수를 나타내며, -1를 해준 것은 상기 생성된 의사랜덤 시퀀스를 0에서부터 매핑시키기 위함이다. 또한 +g*2m"는 상기 생성된 의사랜덤 시퀀스를 각 해당 영역에 매핑시키기 위한 것이다. 즉, 영역인덱스 g가 0이면 상기 생성된 의사랜덤 시퀀스는 영역0에 매핑되고, 상기 영역인덱스가 1이면 영역1에 매핑된다.
그리고 상기 어드레스 생성부(121)는 819단계에서 이렇게 산출된 랜덤 어드레스를 이용해 최종 독출[읽기] 어드레스를 하기 수학식에 의해 산출한다."(ADDRESS_READ=ADDRESS_READ-OFFSET(ADDRESS-READ)" 여기서 상기 수학식은 상기 독출 어드레스가 어느 그룹에 속하는지를 판단하여 그 그룹에 해당하는 그룹값을 감하여 산출된 어드레스이다. 여기서 상기 그룹은 오프셋에 의해 그룹 기준값(=무효어드레스)에 의해 구분 되어진다. 예를들어, 상기 독출 어드레스가 그룹1에 해당하면 상기 독출 어드레스에서 1를 감하고, 그룹2에 해당하면 2를 감한다.
이후, 상기 어드레스 생성부(121)는 821단계에서 상기 영역인덱스 g가 영역번호Ng-1에 도달했는지 검사한다. 이때 상기 영역인덱스가 Ng-1에 도달했다고 판단시 상기 어드레스 생성부(121)는 823단계로 진행하며, 상기 Ng-1에 도달되지 않았다고 판단시 상기 어드레스 생성부(121)는 825단계로 진행하여 상기 영역인덱스를 1만큼 증가시키고 상기 817단계로 되돌아간다.
한편, 상기 영역인덱스가 상기 영역변호-1에 도달했음을 감지한 상기 어드레스 생성부(121)는 상기 823단계에서 상기 쓰기 어드레스(ADDRESS_WRITE)가 상기 2m-2 값(하나의 의사랜덤 생성기가 생성할수 있는 어드레스 수)에 도달했는지 검사한다. 여기서 상기 쓰기 어드레스는 상기한 영역카운트에 대응된다. 이때 상기 쓰기 어드레스가 상기 2m-2 값에 도달했다고 판단시 상기 어드레스 생성부(121)는 829단계로 진행하며, 상기 쓰기 어드레스가 상기 2m-2 값에 도달하지 않았다고 판단시 상기 어드레스 생성부(121)는 827단계로 진행하여 상기 쓰기 어드레스를 1만큼 증가시키고 상기 815단계로 되돌아간다.
한편, 상기 쓰기 어드레스가 상기 2-2 값에 도달했음을 감지한 상기 어드레스 생성부(121)는 상기 829단계에서 상기 쓰기 어드레스를 하기 수학식을 이용해 각 영역의 읽기 어드레스에 매핑시키고 본 프로그램을 종료한다. "ADDRESS_WRITE=2m-1,ADDRESS_READ=ADDRESS_WRITE+g*2m-OFFSET(ADDRESS-WRITE)" 즉, 맨 마지막에 해당하는 쓰기 어드레스는 그대로 읽기 어드레스로 이용함을 의미한다.
하기 표 1 및 표 2는 본 발명에 따른 인터리빙 방식을 IMT-2000시스템에 적용할 경우 각 레이트셋에 해당하는 OCPNI 설계 파라미터들을 보여준다.
[표 1]
[표 2]
여기서 상기 표 1에서 인터리버 사이즈N이 376인 경우 0CPNI의 읽기 어드레스의 예를 보여주면 하기 표 3과 같다.
[표 3]