KR20000071545A - 통신시스템의 인터리빙/디인터리빙 장치 및 방법 - Google Patents

통신시스템의 인터리빙/디인터리빙 장치 및 방법 Download PDF

Info

Publication number
KR20000071545A
KR20000071545A KR1020000017318A KR20000017318A KR20000071545A KR 20000071545 A KR20000071545 A KR 20000071545A KR 1020000017318 A KR1020000017318 A KR 1020000017318A KR 20000017318 A KR20000017318 A KR 20000017318A KR 20000071545 A KR20000071545 A KR 20000071545A
Authority
KR
South Korea
Prior art keywords
address
generators
selection
generator
value
Prior art date
Application number
KR1020000017318A
Other languages
English (en)
Other versions
KR100330238B1 (ko
Inventor
김민구
김병조
이영환
Original Assignee
윤종용
삼성전자 주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 윤종용, 삼성전자 주식회사 filed Critical 윤종용
Priority to KR1020000017318A priority Critical patent/KR100330238B1/ko
Publication of KR20000071545A publication Critical patent/KR20000071545A/ko
Application granted granted Critical
Publication of KR100330238B1 publication Critical patent/KR100330238B1/ko

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/27Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes using interleaving techniques

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)

Abstract

본 발명은 통신시스템의 터보부호기에 사용되는 내부 인터리빙 장치 및 방법에 관한 것이다. 본 발명에 따른 L개의 데이터가 저장된 인터리버 메모리로부터 상기 데이터를 독출하기 위하여 2m×NG개의 가상 어드레스들 보다 작은 L개의 어드레스를 발생하는 장치가, 상기 L개의 입력데이터를 순차로 저장하는 상기 인터리버 메모리와, 상기 입력데이터 크기에 오프셋 값을 더하여 가상 어드레스 크기가 2m의 정수배로 제공하고, 각각 2m의 크기를 가지는 상기 정수개의 어드레스 생성영역들을 가지고 상기 어드레스 생성영역들에서 상기 오프셋 값에 대응하는 어드레스들을 제외한 어드레스들을 발생하는 어드레스 생성기로 구성되어, 상기 어드레스 생성영역들로부터 발생된 상기 어드레스들을 가지고 상기 인터리버 메모리로부터 상기 입력데이터를 독출하는 것을 특징으로 한다.

Description

통신시스템의 인터리빙/디인터리빙 장치 및 방법{INTERLEAVING AND DEINTERLEAVING APPARATUS AND METHOD FOR A COMMUNICATION SYSTEM}
본 발명은 인터리빙/디인터리빙 장치 및 방법에 관한 것으로, 특히 통신시스템(위성시스템, ISDN, Digital cellular, W-CDMA, IMT-2000, W-ATM)에서 사용되는 터보코더를 위한 인터리빙/디인터리빙 장치 및 방법에 관한 것이다.
일반적으로 터보코더는 디지털 통신 시스템의 신뢰도 향상에 광범위하게 관련된 오류정정부호의 한 종류이다. 현재까지 공개되어 있는 터보코더는 병렬터보코더와 직렬터보코더로 구분될수 있다. 상기 병렬 터보코더(Turbo encoder)는 L개의 정보 비트열의 프레임(frame)으로 이루어진 입력을 두 개의 간단한 병렬 쇄상 부호를 이용하여 패리티 심볼(parity symbol)을 만드는 시스템으로서 구성 부호기(component coder)로는 RSC(Recursive Systematic Convolutional) 부호를 이용한다. 또한 상기 병렬터보코드는 상기 구성부호 사이에 내부 인터리버를 구비하고 있다.
상기 인터리버는 상기 터보코더 구성부호기에 일정크기(프레임) 단위로 입력되는 데이타열을 랜덤화(randomization)하고, 코드워드(Code word)의 디스턴스 성질(distance property)를 개선하고자 사용된다. 특히, 최근에 매우 많은 관심을 모으고 있는 IMT-2000(CDMA2000)의 에어 인터페이스(Air interface) 표준화 과정에서 데이터 전송 채널로서 사용되는 부가채널(Supplemental Channel)에 이용될 것으로 예상된다. 그리고 ETSI(European Telecommunication Standards Institute)에서 추진 중인 UMTS(Universal Mobile Telecommunication System)표준화 과정에서는 사용자 데이터가 전송되는 채널에서 터보코더가 사용될 것이 유력시 되고 있다. 따라서 터보코드를 위한 인터리버의 구체적 구현방식이 절실히 요구되고 있다.
도 1은 일반적인 병렬 터보 부호기의 구조를 도시한 도면으로, 터보부호에 대한 특허인 1995년 8월 29일 등록된 미합중국 특허(Patent Number: 5,446,747)에 자세히 개시되어 있다.
상기 도 1과 같은 구성을 갖는 터보 부호기는 입력 프레임 데이터 열을 부호화 하지 않고 출력하고, 상기 입력프레임을 부호화 하여 출력하는 제1구성 부호기111과, 상기 입력 프레임 데이터 열을 인터리빙 하여 제2구성 부호기 113로 출력하는 인터리버(interleaver) 112 및 상기 인터리버의 출력을 입력하여 부호화 하는 제2구성 부호기 113으로 구성된다. 상기 제1, 제2구성 부호기 112 및 113은 이미 기술 분야에서 잘 알려진 RSC(Recursive Systematic Convolutional)부호기 또는 NSC(NON-Recursive Systematic Convolutional)부호기를 사용할 수 있다. 이러한 구성부호기는 부호화율 이나 유한장 k값 및 생성다항식에 따라서 그 내부 구성이 달라질 수 있다. 그리고 상기 인터리버 112는 입력되는 최대 프레임 크기와 동일한 메모리 크기를 가지며, 상기 제2구성 부호기 113에 입력되는 정보 비트의 입력 순서를 바꿈으로써 정보 비트들 사이의 상관(correlation)을 줄여주게 된다.
종래에는 상기 터보코더의 내부 인터리버(internal interleaver) 112로서, PN 랜덤 인터리버(random interleaver), 랜덤 인터리버, 블록 인터리버(Block interleaver), 비선형 인터리버(Non linear interleaver), S-Random interleaver 등 다양한 방식이 제안되었다. 그러나 이러한 인터리버들은 아직까지 구현의 관점보다는 학문적인 연구분야로서 성능개선에 주안점을 두고 설계된 알고리즘들로 볼수 있다. 따라서 실제 시스템의 구현을 고려할 때 하드웨어 구현 복잡도라는 측면에서 재고가 필요한 방식들이라 할수 있다. 이하 종래 터보코더 인터리버에 대한 기술과 성질 그리고 문제점을 설명한다.
터보코더는 기본적으로 내부 인터리버의 역할에 의해서 성능이 좌우된다. 일반적으로 터보코더는 입력 프레임 크기(한 프레임이 포함하는 정보비트의 개수)가 커지면 성능이 증가한다. 그러나 인터리버 크기(size)의 증가에 따라 요구되는 계산량이 기하급수적으로 증가하기 때문에 프레임 크기가 매우 크다면 실제 구현이 불가능하다.
통상적으로, 실험결과에 의하면 랜덤 인터리버가 일반적으로 사용되는 블록인터리버보다 성능이 우수하다. 그러나 랜덤 인터리버를 설계할 때 발생되는 문제점의 하나는 프레임 크기가 다양하고 커질수록 인터리버의 인덱스(mapping rule, 또는 address)를 저장하기 위한 메모리의 크기가 너무 커진다는 것이다. 즉, 어드레싱을 위한 메모리 공간이 매우 증가하게 된다. 따라서, 하드웨어의 크기가 문제된다면, 인터리버의 인덱스를 저장하는 룩업 테이블(Look-Up Table)방식보다는 인덱스를 발생시키는 일정 규칙(rule)을 사용하여 매 심볼 클럭마다 어드레스를 발생시켜 해당되는 어드레스에 저장된 데이터를 읽어내는 어드레스 계산(enumeration)방식이 요구된다.
이를 종합해 볼 때, IMT-2000용이나 UTMS(Universal Telecommunication Mobile System)와 같이 다양한 인터리버 크기가 요구되고 하드웨어 구현의 복잡성이 제한받는 경우의 터보 인터리버를 구현하기 위해서는 이러한 제한적 여건들을 고려한 상태에서 최적의 성능이 보장되도록 인터리버가 설계되어야 한다. 즉, 일정 인터리빙 규칙에 의해 인터리빙/디인터리빙이 이루어지는 인터리버가 요구되는 실정이다. 또한, 터보 내부 인터리버에서 요구되는 다양한 인터리버 성질(예를들어, Distance Properity, Weight Properity, Random Properity 등)이 우수할 것이 요구된다.
CDMA-2000 표준화 과정이나 UMTS 표준화 과정에서 터보 인터리버로 설계가 간단하면서도 성능이 우수한 인터리버가 제안되지 못하였다. 현재 CDMA-2000 표준화 스팩에 주어진 순방향 링크(forward link)와 역방향 링크(reverse link)의 경우 논리채널(logical channel)의 종류가 매우 다양하며, 다양한 데이터 레이트에 따른 인터리버 크기 또한 여러 종류로 구성되어 이를 충실히 반영하기 위해서는 많은 양의 메모리가 요구된다. 예로서, CDMA2000 순방향 링크 전송모드의 경우 최소 144bits/frame부터 최대 36864bits/frame까지 매우 다양한 크기의 인터리버가 사용된다.
상술한 바와 같이 종래기술의 문제점은 다음과 같이 요약된다.
첫째, 기존의 터보코드를 위한 내부 인터리버로서 PN 랜덤 인터리버, 랜덤 인터리버, 블록 인터리버, 비선형 인터리버, S-R 랜덤 인터리버 등 다양한 방식이 제안되었다. 그러나 이러한 인터리버들은 아직까지 구현의 관점보다는 학문적인 연구분야로서 성능개선에 주안점을 두고 설계된 알고리즘들로 볼수 있다. 따라서 실제 시스템의 구현을 고려할 때 상기 명시한 조건과 더불어 하드웨어 구현 복잡도를 반드시 고려해야 하는데 이러한 인터리버가 제안되어 있지 못한 실정이다.
둘째, 기존의 인터리빙 방식의 대부분이 룩업 테이블 방식으로 각각의 인터리버 크기에 따른 인터리빙 규칙을 송수신기의 제어부(CPU, HOST)가 저장해 두어야 하므로 인터리버 버퍼 이외에 별도의 저장공간이 CPU 메모리 쪽에 필요하다. 즉, 설계 상의 문제점 중 하나는 프레임 사이즈가 다양하고 커질수록 인터리버의 인덱스(매핑 규칙 또는 어드레스)를 저장하기 위한 메모리의 크기가 너무 커진다는 것이다. 즉, 어드레싱을 위한 메모리 공간(하드웨어 공간)이 매우 증가하게 된다.
셋째, 거리 성질과 랜덤 성질을 동시에 만족하는 인터리버의 구현이 쉽지 않았다.
따라서 본 발명의 목적은 상기 종래기술의 문제점들을 해결할수 있는 인터리버를 구현할수 있는 장치 및 방법을 제공함에 있다.
본 발명의 다른 목적은 통신시스템에서 터보코더의 특성인 거리특성, 웨이트특성, 랜덤특성을 동시에 만족하는 인터리빙/디인터리빙 장치 및 방법을 제공함에 있다.
본 발명의 또 다른 목적은 통신시스템에서 입력 데이터에 특정값을 더하여 2m×N(정수) 크기를 가지는 가상 어드레스 영역을 가지고 인터리빙을 수행하는 장치 및 방법을 제공함에 있다.
본 발명의 또 다른 목적은 인터리빙을 위해 입력 데이터에 더해진 특정값에 의해 발생되는 무효한 어드레스를 당초 발생하지 않는 인터리빙 장치 및 방법을 제공함에 있다.
본 발명의 또 다른 목적은 터보부호기의 내부 인터리버의 어드레스를 부분영역별로 랜덤어드레스 구성(component)을 발생하는 PN시퀀스 발생기의 최적의 초기값을 찾는 방법을 제공함에 있다.
상기 목적들을 달성하기 위한 L개의 데이터가 저장된 인터리버 메모리로부터 상기 데이터를 독출하기 위하여 2m×NG개의 가상 어드레스들 보다 작은 L개의 어드레스를 발생하는 장치가, 상기 L개의 입력데이터를 순차로 저장하는 상기 인터리버 메모리와, 상기 입력데이터 크기에 오프셋 값을 더하여 가상 어드레스 크기가 2m의 정수배로 제공하고, 각각 2m의 크기를 가지는 상기 정수개의 어드레스 생성영역들을 가지고 상기 어드레스 생성영역들에서 상기 오프셋 값에 대응하는 어드레스들을 제외한 어드레스들을 발생하는 어드레스 생성기로 구성되어, 상기 어드레스 생성영역들로부터 발생된 상기 어드레스들을 가지고 상기 인터리버 메모리로부터 상기 입력데이터를 독출하는 것을 특징으로 한다.
도 1은 일반적인 터보부호기의 블록구성을 도시하는 도면.
도 2는 본 발명에 따른 통신시스템의 인터리빙 장치의 블록 구성을 도시한 도면.
도 3은 본 발명에 따른 통신시스템의 디인터리빙 장치의 블록 구성을 도시한 도면.
도 4는 본 발명에 따른, 입력 데이터의 크기에 오프셋값을 더한 가상 어드레스 영역을 가지고 인터리빙할 경우, 상기 오프셋값에 해당하는 데이터들이 인터리빙되어 인터리빙된 데이터 사이 사이에 존재하는 모습을 보여주는 도면.
도 5는 상기 도 4에서 무효심볼들을 제거하여 출력 데이타들을 연접시킨 모습을 도시하는 도면.
도 6은 생성다항식이 (1+x+x6)인 의사랜덤 생성기(PN generator)를 도시한 도면.
도 7은 본 발명의 제1실시 예에 따른 인터리빙 장치를 도시하는 도면.
도 8는 상기 도 7의 구성중 어드레스생성기의 상세 구성을 도시한 도면.
도 9은 본 발명의 제1실시 예에 따른 인터리빙 어드레스 생성과정을 도시하는 도면.
도 10은 본 발명의 제2실시 예에 따른 인터리빙 장치를 도시하는 도면.
도 11은 상기 도 10의 인터리빙 장치에 관련한 타이밍도를 도시하는 도면.
도 12는 마지막 PN생성기에서의 OSV 검출 예를 설명하기 위한 도면.
도 13은 본 발명의 제2실시 예에 따른 어드레스 생성과정을 도시하는 도면.
도 14는 본 발명의 제2실시 예에서 PN생성기들의 최적의 초기상태값을 구하기 위한 과정을 도시하는 도면.
다양한 프레임 크기에 최적의 성능을 발휘 할 수 있는 터보코더를 찾아내기 위해서는 터보코드의 구성부호기의 메모리 개수(유한장k)와 다수의 생성다항식 및 최적의 부호화율(code rate) 등 고려하여야 할 사항이 너무나 많다. 또한 이러한 모든 요소들이 성능에 어떠한 영향을 미치는지 이론적으로 검증되지 않은 상태에서는 최적의 성능을 발휘하는 터보코더를 실험적으로 찾기란 매우 많은 시간과 노력이 요구된다.
따라서 실제 구현을 위한 방법은 성능에 영향을 주는 몇 가지 기준을 마련하고 그 기준을 최대한 만족시키는 방법으로 인터리버을 구현해야 한다. 이러한 기준이 되는 특성들은 하기와 같다.
거리 성질(Distance Properity) : 인접한 코드워드 심볼들간의 거리를 어느 정도 이상 유지해야 한다. 이것은 길쌈부호(Convolutional code)의 코드워드 디스턴스 성질과 동일한 역할을 하므로 동일한 조건에서 가급적 디스턴스가 크도록 설계하는 것이 바람직하다.
웨이트 성질(Weight Properity) : 제로가 아닌 정보어(Non-zero information word)에 대응되는 코드워드의 웨이트가 어느정도 이상 되어야 한다. 이것은 길쌈부호의 최소거리(minimum distance) 성질과 동일한 역할을 하므로 동일한 조건에서 웨이트가 크도록 설계하는 것이 바람직하다.
랜덤 성질(Random Properity) : 인터리빙 이전의 원래 입력 정보 심볼(original input information symbol)들간의 상관 계수(correlation factor)에 비하여 인터리빙 이후의 출력 워드 심볼들간의 상관 계수가 매우 낮아야 한다. 즉, 출력 워드 심볼들간에 랜덤화가 충실히 이루어져야 한다. 이는 반복 디코딩에서 발생되는 외부정보 성질(Extrinction information quality)에 직접적인 영향을 주는 요인이다.
이하 본 발명의 바람직한 실시예를 첨부된 도면의 참조와 함께 상세히 설명한다.
본 발명은 상술한 터보코더의 인터리버 성질(거리성질, 웨이트 성질, 랜덤성질 등)을 만족할수 있는 최적의 인터리빙/디인터리빙 장치를 제안한다.
일반적으로 터보코드는 랜덤 인터리버가 성능이 우수하다. 또한 프레임 크기가 클수록 성능이 우수하다. 랜덤인터리버의 성능을 만족하면서 복잡도를 개선할수 있도록 인터리버를 설계하는 것이 바람직하다. 이를 위해 본 발명에서는 PN시퀀스를 생성하는 선형 피드백 쉬프트 레지스터(LFSR;Linear Feedback Shift Register)를 이용하며, 이로부터 생성되는 랜덤수(Random Number)를 어드레스로 사용한다. 그러나, 이와 같은 방식을 사용하고자 할 경우 다음과 같은 문제점이 고려해야 한다.
첫째, PN시퀀스는 주기가 2m-1이다.
둘째, 터보코드가 입력프레임 크기 단위로 처리하는데 대부분의 프레임 크기는 2의 거듭제곱으로 표현되지 않는다.
이를 해결하기 위해서, 본 발명에서 제안하는 터보코더 인터리버의 어드레스 발생기는 인터리빙할 입력 프레임 데이터의 크기(L)가 2의 거듭제곱으로 표시되지 않으면, 최소의 값(이하:오프셋값OSV라 칭함)을 프레임크기(L)에 더하여 가상의 인터리빙 크기(N=L+OSV)를 2m의 정수배가 되도록 만든다. 여기서 상기 오프셋값은 상기 프레임 크기를 2진수로 변환하여 그 최하위 비트에서 연속되는 '1'의 개수가 적어도 1개 이상이 되도록 더해주는 값이다. 그리고 이렇게 구해진 가상의 프레임 크기N을 영역수(NG)×2m으로 표현되도록 하는 영역수(NG)와 m의 조합들을 구한다. 상기 각각의 조합에 대하여 2m크기의 부분영역별로 의사랜덤 어드레스를 발생하고 각 부분영역에서 의사랜덤하게 발생된 어드레스를 순차적으로 또는 랜덤하게 선택하므로서 전체 입력프레임 데이터를 인터리빙한다. 여기서 상기 영역수NG와 m 값은 상기한 인터리버 성질들을 최적으로 만족할수 있도록 컴퓨터 시뮬레이션 및 서치 알고리즘(search algorithm)을 통해 구한다.
예를 들어, 프레임 크기가 376(101111000)인 경우 상기 오프셋값을 구하는 방법을 설명하면, 상기 프레임 크기인 376(101111000)을 이진수로 변환하여 그 최하위비트부터 0의 개수가 적어도 한 개 이상 나오도록 상기 프레임 크기에 오프셋 값을 더하는데, 일 예로 8(1000)이 될 수 있다. 따라서 상기 가상의 인터리빙크기(가상의 프레임크기)는 384이다. 상기 가상의 인터리빙 크기에 대하여 인터리빙 어드레스를 발생한다면 상기 추가된 오프셋값 만큼의 불필요한 읽기 어드레스들이 발생한다. 이러한 어드레스들을 "무효어드레스"라 칭한다. 만일, 상기 예에서 영역수로 나누지 않고 입력프레임을 2거듭제곱으로 표현되도록 오프셋 값을 추가한다면 가상의 인터리빙 크기는 512가 되고 상기 오프셋 값은 136이 된다. 만약 상기 입력프레임크기(4600)가 커지면 더해지는 오프셋 값(3592)이 매우 커지므로 무효어드레스의 처리가 복잡해진다. 따라서 가상 인터리빙 크기가 2m×NG가 되도록 적정한 오프셋 값을 추가한다.
또한, 상기 영역수(NG)를 적정하게 나눌 필요가 있는데 영역수가 매우 많아 진다면 영역크기가 작아지므로 랜덤성질이 나빠질수 있다. 또한 영역수가 너무 작으면 영역크기가 크므로 상기 인터리버 인덱스(mapping rule, 또는 address)를 저장하기 위한 메모리의 크기가 너무 커지기 때문에 시뮬레이션을 통해 적당한 값을 구한다.
본 발명에에 따른 터보 인터리버는 입력 정보 비트의 순서를 오프셋제어 의사랜덤 방식으로 치환(permutation))하여 제2구성부호기의 입력으로 제공한다. 따라서 본 발명의 실시 예에 따른 인터리버 구조는, 입력 정보 비트를 저장하는 인터리버 메모리(Input data buffer/Output data buffer)와, 입력데이타크기에 소정 오프셋값을 더한 가상 인터리버 크기를 몇 개의 영역으로 구분하여 각 영역별로 랜덤어드레스를 생성하며, 각 영역별로 생성된 랜덤어드레스를 순차적/랜덤하게 선택하여 인터리빙 어드레스를 발생하는 오프셋제어 의사랜덤 인터리빙 블록(Partial Reversal Interleaver + Comparator)를 포함한다. 또한 본 발명에서 예시하는 터보코드의 제1, 제2구성부호기는 상기 종래기술의 구성부호기로 구성될수 있을 뿐만 아니라 TIA에서 표준화하고 있는 CDMA2000에서 제시하는 구성부호기 및 ETSI에서 표준화 하고 있는 UMTS에서 제시하는 구성부호기를 사용할수 있는 등 특정구성부호기에 의하여 한정되지 않는다. 또한 본 발명의 인터리버는 직렬 터보코드의 내부 인터리버뿐만 아니라 채널인터리버 등에도 활용 가능하다.
이하 본 발명에서 사용하는 용어들을 정의하면, '영역'이란 가상의 인터리버 크기를 분할하였을 때 각각의 어드레스 영역을 의미하며, '그룹'이란 추가된 오프셋 값에 의해 발생된 무효어드레스들에 의해 구분되어지는 각각의 어드레스 영역을 의미한다. 또한, 본 발명에 따른 인터리버를 오프셋제어방식 의사랜덤 인터리버(OCPNI;Offset Controlled PN Interleaver)라 칭한다.
도 2 및 도 3은 본 발명에 따른 인터리버 및 디인터리버의 기본 구성을 보여준다.
상기 도 2를 참조하여 제1구성부호기에서 출력되는 프레임 데이터를 인터리빙하기 위한 인터리버의 구성을 살펴보면, 어드레스 생성부(211)는 입력 프레임 데이터 크기 L 및 입력 클럭(clock)에 따라 데이타의 순서를 바꾸기 위한 독출 어드레스를 생성하여 인터리버 메모리(212)로 출력한다. 상기 인터리버 메모리(212)는 쓰기모드시 입력데이타를 순서대로 저장하고, 독출모드시 상기 어드레스 생성부(211)에서 제공되는 어드레스에 따라 데이터를 출력한다. 카운터(213)는 클럭(Clock)을 입력하며, 상기 인터리버 메모리(212)의 쓰기 어드레스(Write address)으로 출력한다. 상기한 바와 같이 상기 인터리버는 쓰기모드시 입력데이타를 인터리버 메모리(212)에 순서대로 저장하고, 독출모드시 상기 어드레스 생성부(211)에서 발생된 독출 어드레스에 따라 상기 인터리버 메모리(212)에 저장되어 있는 데이터를 출력한다. 다른 예로, 쓰기 모드시 미리 데이터의 순서를 바꿔 인터리버 메모리에 저장하고, 독출모드시 순서대로 데이터를 읽어 제2구성부호기로 출력할 수도 있다.
상기 도 2를 참조하여 디인터리버의 구성을 살펴보면, 어드레스 생성부(211)는 입력 프레이 데이터 크기 L, 및 입력클럭에 의하여 데이터의 순서를 원래로 복원하기 위한 쓰기 어드레스를 생성하여 디인터리버 메모리(212)에 제공한다. 상기 디인터리버 메모리(212)는 쓰기모드시 상기 어드레스 생성부(211)에서 제공되는 쓰기 어드레스(write ADDR)에 따라 입력데이타를 저장하고, 독출모드시 저장 데이터를 순서대로 출력한다. 카운터(213)는 클럭(Clock)을 입력하며, 상기 디인터리버 메모리(212)에서 데이터를 독출하기 위한 독출 어드레스(Read ADDR)를 상기 메모리(212)로 제공한다.
상술한 바와 같이, 상기 디인터리버는 인터리버의 역과정으로 구조상 모든 부분이 완전히 동일하며, 단지 독출/기록 모드에서 입력되는 데이터의 순서가 다를 뿐이다. 따라서 이하 설명은 인터리버를 위주로 설명할 것이다.
이하 본 발명의 제1실시 예에 따른 인터리빙 장치를 설명한다.
본 발명의 제1실시 예에 따른 인터리빙 장치는 하기 수학식 1(C-program)과 같은 알고리즘에 의해 인터리빙을 수행한다.
{N=L+OSV;
i=0;
/*Find N=2m×NG*/
for(ADDRESS_WRITE=0;ADDRESS_WRITE<=2m-2;ADDRESS_WRITE++)
{for(g=0;g<=NG-1;g++)
{ADDRESS_READ[i]=[PNg(ADDRESS_WRITE)-1]+g*2m;
if(ADDRESS_READ<=L-1){
ADDRESS_READ[i]=ADDRESS_READ[i]-OFFSET(ADDERSS_READ[i],GTH);
i++;
}
}
/*Overwrite ADDRESS_READ with the same address as ADDRESS_WRITE*/
ADDRESS_WRITE=(2m-1);
for(g=0;g<=NG-1;g++)
{ADDRESS_READ[i]=ADDRESS_WRITE+g*2m-OFFSET(ADDRESS_WRITE,GTH);
i++;
}
}
/*OFFSET Generation Algorithm*/
function OFFSET(ADDRESS_READ,GTH){
if(ADDRESS_READ<GTH[0])OFFSET=0;
else if(GTH[0]<ADDRESS_READ<GTH[1])OFFSET=1;
else if(GTH[1]<ADDRESS_READ<GTH[2])OFFSET=2;
else if(GTH[2]<ADDRESS_READ<GTH[3])OFFSET=3;
else if(GTH[3]<ADDRESS_READ<GTH[4])OFFSET=4;
else if(GTH[4]<ADDRESS_READ<GTH[5])OFFSET=5;
else if(GTH[5]<ADDRESS_READ<GTH[6])OFFSET=6;
else OFFSET=7;
}
상기 수학식 1에서 생성되는 독출 어드레스(address_read)는 각기 NG개의 영역으로 구별되며, 각각의 영역에 속하는 독출 어드레스의 수는 2m개이며, 각각의 영역에 해당되는 의사랜덤 발생기(PN generator)에 의해 발생되는 랜덤 어드레스 성분의 수는 2m-1개이다.
상기 <수학식 1>과 같이 생성된 독출 어드레스(ADDRESS_READ)는 원래의 어드레스와 1대 1 매핑(mapping)되며, 이러한 인터리버는 PN 인터리버의 특성에다 거리특성을 함께 가진다. 여기서 OFFSET(I)는 주어진 기준값들로부터 해당되는 ADDRESS_READ가 어느 그룹에 속하는지를 파악하여 해당되는 오프셋만큼 어드레스를 쉬프트(shift)시키는 기능을 하는 함수이다.
만일, 상기 오프셋만큼 어드레스를 쉬프트시키지 않고 인터리버 메모리의 해당번지를 어드레싱하여 데이터를 독출하는 경우 오프셋값의 수 만큼 무효한 데이터가 읽혀지게 된다. 즉, [0..L-1]의 입력데이타들에 해당되는 ADDRESS_READ 이외에 오프셋[L..N-1]에 해당되는 8개의 무효 어드레스가 인터리빙 시퀀스 사이 사이에 존재하게 된다. 이에 대한 설명이 도 4에 도시되어 있다. 이것을 그대로 읽을 경우, 실제 전송해야 할 L심볼보다 OSV(=8)개 많은 N개의 데이타들이 전송되므로 사이에 존재하는 어드레스를 빼고 후속하는 어드레스를 연접시켜야 한다. 이에 대한 설명은 도 5에 도시되어 있다.
예를들어, 새로 구해진 가상의 인터리버 크기 N을 NG*2m으로 표현할수 있는 여러 가지 조합들중 적정한 하나를 선택하면 각 어드레스 생성영역의 크기가 정해진다. 그리고 osv에 의해서 발생하는 무효어드레스는 마지막 어드레스 생성영역에서 발생하는 PN생성기의 초기값에 의하여 정해진다. 그리고 상기 무효 어드레스의 위치(GTH: Group threshold)는 전체어드레스를 어떻게 생성하느냐에 있다. 다시말해, 각각의 어드레스 생성영역에 대응하여 PN생성기를 이용하여 어드레스를 발생한다면 그 각각의 PN생성기의 초기값과 각 어드레스 생성영역에서 생성된 어드레스를 어떤식으로 선택하는가(순서적으로 또는 규칙성 있는 랜덤하게)에 따라서 결정된다. 결국, 주어진 인터리빙 규칙을 안다면 추가된 오프셋값에 의해 발생되는 무효한 어드레스의 위치를 미리 알수 있다.
이는 상기한 무효어드레스에 대응하는 무효 데이타들을 제외하고 차례로 인터리빙된 저장 데이터들을 출력할수 있음을 의미한다. 상세히 설명하면, [L..N-1]에서 최종 8개의 저장 데이터에 해당되는 ADDRESS_READ는 항상 인터리빙 규칙에 의하여 일정하게 결정된다. 따라서 인터리빙된 무효 데이터들의 위치를 미리 알수 있다. 우선, 테일(tail) 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)이 된다. 여기서 상기 기준값들을 제외시키고 어드레스들을 연접시켜야 한다. 예를들어,, G0의 경우에는 ADDRESS_READ-0, G1의 경우에는 ADDERSS_READ-1,..., G7의 경우에는 ADDRESS_READ-7을 해주면 발생되는 모든 어드레스는 [0..L-1] 사이의 값을 가지게 된다.
상기 수학식 1과 같은 알고리즘을 하드웨어적으로 구현하면 첨부된 도면 도 7과 같다. 특히, 상기 도 7은 본 발명에 실시 예에 따른, 상기 인터리버 메모리112에 순차적으로 저장된 데이터를 인터리빙하여 독출하기 위한 어드레스 생성부의 구체적인 상세구성을 도시하고 있다.
상기 도 7을 참조하여 어드레스생성부(211)를 살펴보면, 랜덤어드레스 생성부221은 복수개의 의사랜덤 발생기(PN generator)들에 의해 랜덤 어드레스 구성들을 생성하여 출력한다. 비교부222는 상기 랜덤어드레스 생성부221에서 출력하는 랜덤 어드레스를 상기 오프셋값에 의해 미리 결정되는 상기 기준값들(GTH;어드레스 영역을 그룹핑하는 그룹 기준값들)과 비교하여 어느 그룹에 속하는지 판단하여 그룹값 선택신호와 상기 랜덤 어드레스를 출력한다. 또한, 상기 비교부222는 상기 랜덤 어드레스생성기(121)에서 출력되는 랜덤 어드레스를 상기 오프셋값에 의한 그룹 기준값들(GTH)과 비교하여 어느 하나라도 일치할 경우 그때의 랜덤 어드레스는 삭제(deletion)시켜 출력하지 않는다. 선택기[부]223은 상기 선택신호에 따라 해당 그룹값을 선택하여 출력한다. 감산기124는 상기 비교부(122)에서 출력되는 랜덤 어드레스에서 상기 선택부123에서 출력되는 특정 그룹값을 감하여 메모리(112)에서 데이터를 독출하기 위한 독출 어드레스를 생성한다.
상기 도 7의 구성중 상기 랜덤어드레스 생성부221의 상세구성을 도 8에 도시하였다.
상기 도 8을 참조하면, 의사랜덤 생성기들(PN generator)811-8N1은 각각 대응되는 어드레스 생성영역에 저장된 데이터의 순서를 바꾸기 위한 의사랜덤 시퀀스(어드레스 구성들 : address component) 생성하여 제1멀티플렉서812로 출력한다. 여기서 각각의 의사랜덤 생성기는 서로 다른 상태값들로 초기화한다. 카운터816은 상기 제1멀티플렉서812의 출력을 선택하기 위한 선택신호를 출력한다. 만일, 어드레스 영역 수가 Ng개라고 가정하면, 0..Ng-1의 선택신호를 출력한다. 여기서 상기 선택신호는 순차적 또는 랜덤하게 발생할수 있다. 상기 랜덤하게 발생하는 경우에는 소정 알고리즘에 의해 구해진 어떠한 패턴에 의해 상기 선택신호를 랜덤하게 발생한다. 상기 멀티플렉서812는 상기 카운터에서 제공되는 선택신호에 의해 해당 의사랜덤 생성기의 출력을 선택하여 출력한다. 여기서 상기 멀티플렉서812의 출력데이타는 감산기818에서 1만큼 감산되어 제2멀티플렉서로 입력된다. 이유인즉, 상기 의사랜덤 생성기들은 어드레스 0값을 생성하지 못하므로, 모든 생성값에서 1만큼 감하여 랜덤 어드레스를 0부터 매핑시키기 위함이다. 영역 카운터815는 상기 어드레스 생성영역의 크기에 해당하는 카운터를 발생하여 비교기814로 출력한다. 상기 비교기814는 상기 영역 카운터815에서 제공되는 카운터 값이 영역크기(2m)-1에 해당할 때 상기 제2멀티플렉서813으로 선택신호 "1"를 출력한다. 상기 제2멀티플렉서813은 상기 선택신호에 의해 상기 영역 카운터815에서 발생하는 카운터가 2m-1보다 같거나 작을 경우 상기 제1멀티플렉서712의 출력을 선택출력하고, 상기 2m-1일 경우 상기 비교기814에서 제공하는 2m-1(영역크기-1)을 선택출력한다. 어드레스 버퍼817은 상위 어드레스 영역에 상기 카운터816의 출력데이타를 저장하고, 하위 어드레스 영역에 상기 제2멀티플렉서813의 출력데이타를 저장한다. 이렇게 상기 어드레스 버퍼817에 저장된 어드레스는 상기 비교기222로 전달된다. 그러면, 상기 비교기222에서는 상기 어드레스가 어느 그룹에 속하는지 판단하여 이에 대한 그룹값 선택신호를 상기 선택기223로 제공한다. 그리고 상기 선택기223은 상기 선택신호에 따라 해당 그룹값을 선택 출력하고, 상기 감산기224는 상기 비교기222에서 출력되는 상기 어드레스에서 상기 선택된 그룹값을 감해 최종 독출[인터리빙을 위한 읽기] 어드레스를 상기 인터리버 메모리212로 제공하고, 상기 인터리버 메모리112에서 상기 독출 어드레스에 해당하는 데이터를 독출한다.
상기한 도 7 및 도 8의 구성에 따른 독출 어드레스 생성 과정을 살펴본다. 상기 의사랜덤 생성기811-8N1들은 클럭킹에 의해 저장된 상태값을 쉬프트시켜 의사랜덤 시퀀스를 생성하고, 상기 제1멀티플렉서812는 상기 카운터816에서 제공되는 선택신호에 의해 해당 의사랜덤 생성기811-8N1의 상태를 선택출력한다. 상기 선택신호에 의해 상기 의사랜덤 생성기들817-8N1의 상태들이 모두 선택되면 다시 상기 의사랜덤 생성기들811-8N1은 클럭킹에 의해 저장된 상태를 쉬프트시켜 의사래덤 시퀀스를 생성한다. 이렇게 상기 제1멀티플렉서812에서 출력되는 상기 의사랜덤 시퀀스는 1만큼 감해져서 상기 제2멀티플렉서813로 입력되며, 상기 의사랜덤 시퀀스는 상기 영역카운트가 상기 어드레스 생성영역의 크기(2m)-1 값에 도달되기 전까지 그대로 패스되어 상기 어드레스 버퍼817의 하위 영역으로 전달된다. 한편, 상기 영역카운트가 상기 어드레스 생성영역의 크기(2m)-1 값에 도달될 경우에는 상기 (2m)-1 값이 상기 어드레스 버퍼817의 하위영역에 전달된다. 한편, 상기 어드레스 버퍼817의 상위영역에는 상기 카운터816에서 출력되는 영역(현재 선택된 의사랜덤 생성기에 대응되는 어드레스 생성영역)을 지시하는 값들이 저장된다. 이렇게 상기 어드레스 버퍼817에 저장된 어드레스은 상기 비교기222로 전달되고, 상기 비교기222에서는 상기 어드레스가 어느 그룹에 속하는지를 판단하는 이에 대한 그룹값 선택신호를 상기 선택기223로 제공한다. 또한, 이때의 상기 어드레스를 상기 감산기224로 출력한다. 그러면, 상기 선택부223은 상기 선택신호에 따라 해당 그룹값을 선택 출력하고, 상기 감산기224는 상기 비교기222에서 출력되는 어드레스 값에서 상기 해당 그룹값을 감해 독출 어드레스를 상기 인터리버 메모리212로 제공한다. 한편, 상기 어드레스가 어느 그룹에도 속하지 않을 경우, 다시 말해 상기 오프셋값에 의한 기준값들에 해당할 경우, 상기 비교기222는 상기 어드레스를 무효어드레스로 간주하여 삭제(deletion)하여 출력하지 않는다. 그리고, 상기 인터리버 메모리212는 상기 제공되는 독출 어드레스에 따라 해당 번지에 저장되어 있는 데이터를 출력한다.
이하 상기 어드레스 생성부(221)의 인터리빙 어드레스 생성절차를 도 9을 참조하여 설명한다. 또한, 상기 도 9은 상기한 수학식 1의 알고리즘을 근거로 한다.
상기 도 9를 참조하면, 어드레스 생성부221(일반적인 CPU)는 911단계에서 인터리빙을 위한 각 파라미터 값들을 산출한다. 입력 프레임 크기를 L이라 할 때, 상기 프레임 크기를 2진수로 변환하여 그 최하위 비트부터 0의 개수가 적어도 한 개 이상 나오도록 하는 적당한 값(오프셋값)을 더해 가상 어드레스 크기 N을 구한다. 그리고, 상기 가상 어드레스 크기 N을 2의 제곱근(2m)×Ng로 표현했을 때, 상기 승수값(m)과 Ng(이하 영역번호라 칭함)을 후술되는 알고리즘에 의해 구한다. 상기한 파라미터들은 설계 당시 미리 정해지는 값들이며, 이러한 값들은 룩업테이블 형태로 저장되고, 실지로 인터리빙 수행시 상기 룩업테이블로부터 해당 값들을 읽어와서 사용하게 된다.
그리고 상기 어드레스 생성부221은 913단계에서 쓰기 어드레스(ADDRESS_WRITE)를 0으로 초기화하고, 815단계에서 영역인덱스(g)를 0으로 초기화한다.
상기 초기화가 이루어진후, 상기 어드레스 생성부221은 915단계에서 의사랜덤 시퀀스를 이용한 랜덤 어드레스를 하기 수학식에 의해 산출한다. "(ADDRESS_READ=[(PNg(ADDRESS_READ_WRITE)-1]+g*2m" 여기서 상기 PNg(ADDRESS_READ_WRITE)는 의사랜덤 시퀀스를 생성하는 함수를 나타내며, -1를 해준 것은 상기 생성된 의사랜덤 시퀀스를 0에서부터 매핑시키기 위함이다. 또한 +g*2m"는 상기 생성된 의사랜덤 시퀀스를 각 해당 영역에 매핑시키기 위한 것이다. 즉, 영역인덱스 g가 0이면 상기 생성된 의사랜덤 시퀀스는 영역0에 매핑되고, 상기 영역인덱스가 1이면 영역1에 매핑된다.
그리고 상기 어드레스 생성부221는 919단계에서 이렇게 산출된 랜덤 어드레스를 이용해 최종 독출[읽기] 어드레스를 하기 수학식에 의해 산출한다. "(ADDRESS_READ=ADDRESS_READ-OFFSET(ADDRESS_READ)" 여기서 상기 수학식은 상기 독출 어드레스가 어느 그룹에 속하는지를 판단하여 그 그룹에 해당하는 그룹값을 감하여 산출된 어드레스이다. 여기서 상기 그룹은 오프셋에 의해 그룹 기준값 (=무효어드레스)에 의해 구분 되어진다. 예를들어, 상기 독출 어드레스가 그룹1에 해당하면 상기 독출 어드레스에서 1를 감하고, 그룹2에 해당하면 2를 감한다.
이후, 상기 어드레스 생성부221은 921단계에서 상기 영역인덱스 g가 영역번호Ng-1에 도달했는지 검사한다. 이때 상기 영역인덱스가 Ng-1에 도달했다고 판단시 상기 어드레스 생성부221은 923단계로 진행하며, 상기 Ng-1에 도달되지 않았다고 판단시 상기 어드레스 생성부221은 925단계로 진행하여 상기 영역인덱스를 1만큼 증가시키고 상기 817단계로 되돌아간다.
한편, 상기 영역인덱스가 상기 영역번호-1에 도달했음을 감지한 상기 어드레스 생성부221은 상기 923단계에서 상기 쓰기 어드레스(ADDRESS_WRITE)가 상기 2m-2 값(하나의 의사랜덤 생성기가 생성할수 있는 어드레스 수)에 도달했는지 검사한다. 여기서 상기 쓰기 어드레스는 상기한 영역카운트에 대응된다. 이때 상기 쓰기 어드레스가 상기 2m-2 값에 도달했다고 판단시 상기 어드레스 생성부221은 929단계로 진행하며, 상기 쓰기 어드레스가 상기 2m-2 값에 도달하지 않았다고 판단시 상기 어드레스 생성부221은 927단계로 진행하여 상기 쓰기 어드레스를 1만큼 증가시키고 상기 915단계로 되돌아간다.
한편, 상기 쓰기 어드레스가 상기 2m-2 값에 도달했음을 감지한 상기 어드레스 생성부221은 상기 929단계에서 상기 쓰기 어드레스를 하기 수학식을 이용해 각 영역의 읽기 어드레스에 매핑시키고 본 프로그램을 종료한다. "ADDRESS_WRITE=2m-1,ADDRESS_READ=ADDRESS_WRITE+g*2m-OFFSET(ADDRESS_WRITE)" 즉, 맨 마지막에 해당하는 쓰기 어드레스는 그대로 독출 어드레스로 이용함을 의미한다.(즉, 각 어드레스 생성부는 전체 2m-1의 수만큼 밖에 생성하지 못하므로 마지막 남은 어드레스는 쓰기 어드레스의 값으로 독출 어드레스로 사용한다는 것이다)
하기 <표 1> 및 <표 2>는 본 발명에 따른 인터리빙 방식을 IMT-2000시스템에 적용할 경우 각 레이트셋에 해당하는 OCPNI 설계 파라미터들을 보여준다.
레이트셋1 @19.2kbps @38.4kbps @76.8kbps @153.6kbps @307.2kbps
인터리버 크기 L 376 760 1528 3064 6136
오프셋값(OSV) 8 8 8 8 8
N=L+OSV 384 768 1536 3072 6144
m 6 7 8 9 10
Ng 6 6 6 6 6
초기파라미터 101011 1010110 10101101 101011010 1010110101
010100 0101001 01010010 010100101 0101001010
111011 1110110 11101101 111011010 1110110101
101111 1011111 10111110 101111101 1011111010
011101 0111010 01110101 011101010 0111010101
011010 0110101 01101010 011010101 0110101010
GTH
{t0,t1,t2,
t3,t4,t5,t6,t7}
{23,41,65,
107,119,131,
269,383}
{47,77,191,
335,401,425,
641,767}
{491,599,737,
755,1187,1211,
1265,1535}
{659,1373,2027,
2447,2531,2825,
2861, 3071}
{881,2159,2429,
2807,4307,4559,
4931,6143}
PN생성다항식 p(x) [1100001] [10010001] [101110001] [1000100001] [10010000001]
레이트셋2 @28.8kbps @57.6kbps @115.2kbps @230.4kbps @460.8kbps
인터리버 크기 L 568 1144 2296 4600 9208
오프셋값(OSV) 8 8 8 8 8
N=L+OSV 576 1152 2304 4608 9216
m 6 7 8 9 10
Ng 9 9 9 9 9
초기파라미터 101011 1010110 10101101 101011010 1010110101
010100 0101001 01010010 010100101 0101001010
101010 1010100 10101001 101010010 1010100101
011011 0110111 01101110 011011101 0110111010
001011 0010110 00101101 001011010 0010110101
111100 1111001 11110010 111100101 1111001010
110111 1101110 11011101 110111010 1101110101
100011 1000111 10001110 100011101 1000111010
110000 1100000 11000001 110000010 1100000101
GTH
{t0,t1,t2,
t3,t4,t5,
t6,t7}
{107,305,332,
368,431,449,
467,575}
{179,224,395,
611,710,746,
1070,1151}
{485,647,854,
881,1529,1565,
1646,2303}
{197,323,764,
818,2144,3185,
4166,4607}
{2006,2384,2942,
6074,7991,8396,
8963,9215}
PN생성다항식 p(x) [1100001] [10010001] [101110001] [1000100001] [10010000001]
상기 <표 1> 및 <표 2>에서 p(x)는 GF(2) 상에서 구한 의사랜덤 생성기의 원시 다항식(primitive polynomial)으로서 가장 왼쪽의 비트가 p(x)의 0차항의 계수를 나타내며, 가장 오른쪽 비트가 최고차 항의 계수를 나타낸다. 즉, p(x)=[1100001]은 p(x)=1 + x + x6을 나타낸다. 여기서 상기 생성다항식 p(x)=1 + x + x6에 해당하는 의사랜덤 생성기는 도 6과 같이 도시된다.
일반적으로, 초기화 과정에서 m개의 쉬프트 레지스터 셀(shift register cell)에 각각의 영역에 해당하는 초기값들이 로딩(loading)된다. 이후, 매 클럭이 진행될 때마다 레지스터의 값들은 연결된 라인에 의해 업데이트(update)되며, 상기 업데이트후 레지스터에 저장된 값(O/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의 주기를 가지고 발생된다. 또한, 초기값들이 0이 아니므로 실질적으로 발생되는 모든 어드레스는 {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에서 인터리버 사이즈N이 376인 경우 OCPNI의 독출 어드레스의 예를 보여주면 하기 표 3과 같다.
36 73 172 230 317 332 33 68 165 226 286 373 16 113 146 224 318 346 55 88 184 223 302 27 123 171 207 294 365 13 149 199 290 342 6 78 138 195 288 50 118 180 193 287 364 40 106 169 192 271 357 35 100 148 239 262 338 17 97 185 215 259 8 80 156 203 257 363 51 119 189 197 256 341 25 91 158 194 303 330 12 77 190 240 279 372 53 70 174 231 267 361 26 114 166 211 261 340 60 104 162 201 258 45 99 160 196 304 348 22 81 159 241 295 58 72 143 216 275 350 44 115 135 251 265 37 89 131 221 260 366 18 76 129 206 305 358 56 117 128 246 280 354 43 90 175 234 315 352 21 124 151 228 285 351 10 109 139 225 270 335 52 86 133 208 310 327 41 122 130 247 298 323 20 108 176 219 292 321 57 101 167 205 289 320 28 82 147 198 272 367 61 120 137 243 311 343 30 107 132 232 283 331 62 85 177 227 269 325 46 74 152209 262 322 38 116 187 200 306 368 34 105 157 243 296 359 32 84 142 217 291 339 31 121 182 204 272 329 15 92 170 245 264 324 7 125 164 218 307 369 3 94 161 252 281 344 1 126 144 237 268 1 110 183 214 309 349 47 102 155 250 282 334 23 98 141 236 316 374 11 96 134 229 301 362 5 95 178 210 278 356 2 79 168 248 314 353 48 71 163 235 300 336 39 67 145 213 293 375 19 65 136 202 274 347 9 64 179 244 312 333 4 111 153 233 299 326 49 87 140 212 277 370 24 75 181 249 266 360 59 69 154 220 308 355 29 66 188 253 297 337 14 112 173 222 276 328 54 103 150 254 313 371 42 83 186 238 284 345 63 127 191 255 319
상술한 바와 같이 본 발명의 제1실시 예에 따른 OCPNI는 의사랜덤생성기들의 원시 다항식(Primitive polynomial)라든지, 초기 상태값들이 후술되는 알고리즘에 의해 구해진다. 또한 상기 제1실시 예는 오프셋값들에 의해 발생된 무효어드레스(GTH)를 상기 비교기222에서 삭제시키는 것으로 설명하였다. 하지만, 다른 예로서, 마지막 영역에 대응되는 의사랜덤 생성기8N1에서 오프셋값에 의한 무효의 어드레스(Low address(GTH))를 생성하므로 이러한 무효 어드레스를 근본적으로 생성시키지 않도록 하는 방법도 있다. 이럴 경우, 상술한 비교기222의 삭제기능은 불필요하다.
이하 상기 무효어드레스를 근본적으로 생성시키지 않는 본 발명의 제2실시 예에 따른 인터리빙 장치를 상세히 설명한다.
상기 OCPNI의 핵심 아이디어는 인터리버 사이즈 L에 OSV를 더하여 가상 인터리버 사이즈 N을 구하고, 이를 NG개의 영역으로 분할하여 각각의 그룹 요소들(Group elements)을 의사랜덤 생성기(PN Generator)를 사용하여 치환(Permutation)한다는 것이다. 이러한 의사랜덤 생성기들은 모두 2m개의 어드레스 구성들을 생성한다. 그런데 상기 의사랜덤 생성기들중 맨 마지막 의사랜덤 생성기(g=NG-1)는 OSV에 의한 무효한 어드레스를 발생시키므로 이를 제거(deletion)해야 한다. 그래야 어드레스 발생기(OCPNI Address Generator Block)에서 생성되는 총 어드레스 수가 L개가 되기 때문이다. 따라서 본 발명은 맨 마지막 의사랜덤생성기(g=NG-1)에서 발생한 어드레스를 감시하여 추가된 오프셋값에 의한 무효한 어드레스일 경우 상기 의사랜덤생성기의 선택을 스킵(skip)시키는 제어로직(control logic)을 구현한다.
우선, 일 예로서 프레임크기(L)=60, 오프셋값(OSV)=4, 인터리버크기(N)=64, 생성다항식차수(m)=4, 영역수(NG)=4인 경우를 가정하면 의사랜덤 생성기는 4개이며 각각의 주기는 15이다. 그리고 맨 마지막 의사랜덤 생성기에서 생성되는 시퀀스가 하기 <표 4>에 주어진 것과 같다고 가정한다.
Time k : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
PN3(k) : 5 1 13 2 7 15 14 3 6 4 8 12 9 11 10
PN3(k)-1: 4 0 12 1 6 14 13 2 5 3 7 11 8 10 9
상기 <표 4>에서와 같이 맨 마지막 의사랜덤 생성기(g=NG-1)에서 생성되는 PN발생기의 상태값 PN3(k)은 인터리버 메모리에 저장된 맨 마지막 그룹에 해당하는 프레임 데이터를 인터리빙하기 위한 독출 어드레스가 된다. 따라서 상기와 같이 OSV=4이고 m=4인 경우 맨 마지막 그룹의 12,13,14,15 번째 어드레스에 해당되는 것이 무효한 어드레스이므로, 이 경우 상기 맨 마지막 의사랜덤 생성기에서 발생되는 무효 어드레스는 스킵시키고 첫 번째 의사랜덤 생성기로 바로 이전하면 된다는 것을 알수 있다. 여기서 의사랜덤생성기를 0번째부터 순차적으로 선택한다면 실제 맨 마지막 의사랜덤 생성기에서 발생되는 어드레스에서 '1'을 감한 값을 독출 어드레스의 하위어드레스(low address)로 사용하므로, 맨 마지막 의사랜덤생성기가 13,14,15 중 하나를 발생 하는 경우에는 마지막 의사랜덤 생성기를 선택하지 않고 바로 0번째 의사랜덤 생성기를 선택한다. 그리고 상기 마지막 의사랜덤 생성기가 생성하지 못하는 15(PN3(K)-1)에 따른 무효 어드레스는 하드웨어적으로 클럭신호를 제공하지 않아 당초 생성하지 않거나 생성하더라도 사용하지 않으므로서 무시한다. 한편, 랜덤하게 의사랜덤생성기를 선택하는 경우라면 마지막 의사랜덤생성기가 한 프레임의 최종으로 선택되지 않을수 있으므로 이때는 마지막 어드레스(2m-1)를 사용하지 않고 다음 의사랜덤생성기로 스킵한다.
상기한 내용을 고려할 경우, 본 발명의 제2실시 예에 따른 OCPNI의 인터리빙 어드레스 생성 알고리즘은 하기 수학식 2로 표현할 수 있다.
/* OCPNI-2 Program*/
/* N:프레임길이(=L+OSV) GL:영역크기(=2m) NG:영역수*/
For (clk=0; clk<N-NG;clk++)
{ g=clk % NG;
READ_ADDRESS=PNg()-1 + g*GL;
active=(READ_ADDRESS<L) ? ON:OFF;
if (active==ON) {printf (%d\n,READ_ADDRESS);}
}
for (g=1; g<NG; g++)
{ READ_ADDRESS=GL*g-1;
printf (%d\n,READ_ADDRESS);
}
상기한 수학식 2를 하드웨어로 구현하면 도 10과 같다.
상기 도 10을 참조하면, 의사랜덤 생성기들(PN generator)11-14는 각각 대응되는 어드레스 생성영역에 저장된 데이터의 순서를 바꾸기 위한 의사랜덤 시퀀스를 생성하여 제1멀티플렉서14로 출력한다. 여기서 각각의 의사랜덤 생성기는 후술되는 알고리즘에 의해 구해진 최적의 상태값으로 초기화한다. 이에 대해서는 후술되는 의사랜덤생성기의 초기 상태값 결정방법에서 상세히 설명한다. 카운터19는 상기 제1멀티플렉서14의 출력을 선택하기 위한 선택신호를 출력한다. 만일, 어드레스 영역 수가 NG개라고 가정하면, 0..NG-1의 선택신호를 출력한다. 여기서 상기 선택신호는 순차적 또는 랜덤하게 발생할수 있다. 상기 랜덤하게 발생하는 경우에는 소정 알고리즘에 의해 구해진 어떠한 패턴에 의해 선택신호를 랜덤하게 발생한다. 상기 멀티플렉서14는 상기 카운터19에서 제공되는 선택신호에 의해 해당 의사랜덤 생성기의 출력을 선택하여 출력한다. 여기서 상기 멀티플렉서14의 출력데이타는 감산기23에서 '1'만큼 감산되어 제2멀티플렉서15로 입력된다. 이유인즉, 상기 의사랜덤 생성기들은 어드레스 '0'값을 생성하지 못하므로, 모든 생성값에서 1만큼 감하여 랜덤 어드레스를 0부터 매핑시키기 위함이다. 영역 카운터16은 어드레스 생성영역의 크기에 해당하는 카운터를 발생하여 비교기17로 출력한다. 상기 비교기17은 상기 영역 카운터16에서 제공되는 카운트가 영역크기(2m)-1에 해당할 때 상기 제2멀티플렉서15로 선택신호 "1"를 출력한다. 상기 제2멀티플렉서15는 상기 선택신호에 의해 상기 영역카운터16에서 발생하는 카운트가 영역크기-2 동안에는 상기 제1멀티플렉서14의 출력을 선택출력하고, 상기 영역크기-1에 도달시 상기 비교기17에서 제공하는 2m-1(영역크기-1)의 값을 선택출력한다. 어드레스 버퍼22는 상위 어드레스 영역에 상기 카운터19의 출력데이타를 저장하고, 하위 어드레스 영역에 상기 제2멀티플렉서15의 출력데이타를 저장한다. 이렇게 상기 어드레스 버퍼22에 저장된 어드레스는 바로 인터리버 메모리에서 데이터를 독출하기 위한 어드레스로 사용된다.
오프셋값검출기(OSV detector)18은 마지막 의사랜덤생성기14의 상태 및 상기 카운터19의 카운트신호을 입력하고, 상기 카운트신호에 의해 다음 선택될 의사랜덤생성기가 상기 마지막 의사랜덤생성기14이고, 상기 의사랜덤생성기14의 상태값이 추가된 오프셋값에 의한 무효한 상태값(이하 오프셋 상태값이라 함)이라고 판단될 때 리셋신호(Load Zero)를 상기 카운터19로 제공한다. 그러면, 상기 카운터19는 맨마지막 의사랜덤생성기14를 스킵하고 다음 의사랜덤생성기를 선택하기 위한 선택신호를 출력한다. 만일, 순차적으로 의사랜덤 생성기를 선택하도록 설계되어 있다면, 맨 처음 의사랜덤 생성기를 선택하기 위한 선택신호를 출력하고, 랜덤하게 의사랜덤 생성기를 선택하도록 설계되어 있다면, 결정된 패턴에 따라 다음 의사랜덤생성기를 선택할수 있는 선택신호를 출력한다. 여기서 상기 오프셋값 검출기18은 맨마지막 의사랜덤생성기의 AND-OR-Ring 연결에 의해 현재 저장되어 있는 상태값이 추가된 오프셋값에 의한 오프셋 상태값인지 판단하여 리셋신호(Load_Zero)를 출력한다. 여기서, 상기 맨마지막 의사랜덤생성기의 AND-OR-RIng 연결은 쉬프트레지스터 셀수(m)과 오프셋값(OSV)에 의해 결정된다.
상기 의사랜덤 생성기의 AND-OR-Ring 연결은 OSV가 상수인 경우 항상 일정한 규칙(Rule)을 가지므로 구현이 매우 간단하다. 예를들어, m=4, OSV=4라 가정할 경우, AND-OR-Ring 연결은 첨부된 도 12와 같다. 상기 도 12를 참조하면, 하위 두 개의 레지스터 셀들을 OR-Ring하고, 나머지 상위 두 개의 레지스터 셀들을 AND-Ring한다. 이는 m=4인 경우 의사랜덤생성기에서 발생되는 시퀀스는 1에서 15까지이며, 여기서 오프셋값이 4이기 때문에 상기 마지막 의사랜덤생성기에서 13,14,15에 해당되는 OSV-1개를 스킵할수 있도록 AND-OR-Ring 연결을 구성한 것이다. 그리고 AND게이트의 출력, OR게이트의 출력 및 상기 카운터19의 출력을 반전한 신호를 논리곱하여 상기 리셋신호(Load-Zero신호)를 생성한다. 랜덤하게 의사랜덤생성기를 선택하는 경우에 마지막 의사랜덤생성기가 한 프레임의 최종으로 선택되지 않을수 있으므로 강제로 만들어진 마지막 값 2m-1는 사용하지 않고 스킵한다.
제1논리연산기20은 상기 심볼클럭(SYM_CLK) 및 상기 카운터19에서 출력되는 카운트값을 입력하며, 상기 카운트값이 논리 0이고 상기 심볼클럭이 상승 에지(edge)일 때 상기 모든 의사랜덤생성기들11-14로 상태값을 갱신하기 위한 클럭을 발생한다. 제2논리연산기21은 상기 심볼클럭 및 상기 카운터19에서 출력되는 카운트값을 입력하며, 상기 카운트값이 논리 0이고 상기 심볼클럭이 하강 에지(edge)일 때 상기 영역카운터16으로 다음 카운팅을 위한 클럭을 제공한다.
상기한 도 10의 구성에 따른 독출 어드레스 생성과정을 살펴본다.
상기 의사랜덤 생성기들11-12은 상기 제1논리연산기20에서 클럭이 제공될때마다 저장된 레지스터 셀값을 쉬프트시켜 의사랜덤 시퀀스를 생성하고, 상기 제1멀티플렉서14는 상기 카운터19에서 제공되는 선택신호에 의해 해당 의사랜덤 생성기의 상태를 선택 출력한다. 이렇게 상기 제1멀티플렉서14에서 출력되는 상기 의사랜덤 시퀀스는 감산기23에서 1만큼 감소되어 상기 제2멀티플렉서15로 입력되며, 상기 '1'만큼 감해진 의사랜덤 시퀀스는 영역카운터16의 영역카운트 신호가 상기 어드레스 생성영역의 크기인 2m-1 값에 도달되기 전까지 그대로 패스되어 상기 어드레스 버퍼22의 하위영역으로 전달된다. 한편, 상기 영역카운트 신호가 상기 어드레스 생성영역의 크기 2m-1 값에 도달될 경우에는 상기 2m-1 값이 상기 어드레스 버퍼22의 하위영역에 전달된다. 그리고, 상기 어드레스 버퍼22의 상위영역에는 상기 카운터716에서 출력되는 카운트값이 저장된다. 이렇게 상기 어드레스 버퍼22에 저장된 값은 바로 메모리에 저장된 데이터를 독출하기 위한 어드레스로 사용된다. 여기서 상기 오프셋값 검출기18은 상기 마지막 의사랜덤 생성기14의 상태와 상기 카운터19의 카운트값을 입력하고, 상기 마지막 의사랜덤 생성기14로부터 오프셋 상태값을 검출하고 미리 결정된 순서에 관련하여 상기 카운터값이 상기 마지막 의사랜덤 생성기14의 바로전에 선택되는 의사랜덤 생성기13을 나타낼 경우, 상기 카운터19로 리셋신호(Load_Zero)를 출력한다. 그러면, 상기 카운터19는 상기 검출된 오프셋 상태가 상기 제1멀티플렉서14에 의해 출력되지 않도록 상기 마지막 의사랜덤생성기14의 선택을 생략하고 상기 의사랜덤생성기11을 선택하는 선택신호를 상기 제1멀티플렉서14로 출력한다. 한편, 상기 카운터19의 카운트값(상기 선택신호와 동일한 값임)은 제1논리연산기20 및 제2논리연산기21로 제공된다. 여기서, 상기 제1논리연산기20은 상기 카운터값과 상기 심볼클럭을 입력으로 하여, 상기 카운터값이 '0' 이고 상기 심볼클럭이 상승 에지일 때 상기 의사랜덤 생성기들로 클럭을 제공한다. 그러면 상기 의사랜덤 생성기들을 상기 클럭에 의해 상태를 갱신한다. 한편, 상기 제2논리연산기16은 상기 카운터값과 상기 심볼 클럭을 입력으로 하여 상기 카운터 신호가 '0'이고 상기 심볼클럭이 하강 에지일 때 상기 영역카운터16으로 클럭을 제공하고, 상기 영역카운터16은 상기 클럭에 의해 동작하여 카운터값을 비교기로 제공한다. 여기서 상기 영역카운터16는 상기 의사랜덤 생성기들의 선택주기를 카운터한다. 그리고, 상기 비교기17은 상기 영역카운터16에서 제공되는 카운터값과 미리 설정된 값 2m-1을 비교하고, 상기 카운터값이 2m-1일 때 제2멀티플렉서15로 선택신호를 출력하여 상기 2m-1가 어드레스 버퍼22의 하위 어드레스 영역으로 제공한다. 즉, 상기 제2멀티플렉서15는 상기 비교기17의 선택신호에 의해 상기 의사랜덤 생성기들의 선택주기의 수가 2m보다 작을 때는 '1'이 감해진 의사랜덤 시퀀스를 상기 어드레스 버퍼22의 하위 어드레스 영역으로 제공하고, 상기 의사랜덤생성기들의 선택주기의 수가 2m-1일때는 2m-1을 상기 하위 어드레스 영역으로 제공한다.
이상에서 살펴본 바와 같이, 제2실시 예는 마지막 의사랜덤 생성기14의 각 오프셋 상태의 선택을 생략할수 있는 간단한 제어로직을 구성하여 추가된 오프셋에 의한 무효한 어드레스가 당초 발생하지 않도록 하고 있다. 따라서 제1실시 예에서와 같이 이미 발생된 무효한 어드레스를 삭제하기 위한 로직(비교부222, 선택기223 및 연산기224)이 필효하지 않다.
첨부된 도면 도 7은 상기한 독출 어드레스 생성과정을 보다 상세히 살펴보기 위한 타이밍도를 도시하고 있다. 여기서 프레임크기(L)=60, 오프셋값(OSV)=4, 인터리버크기(N)=64, 생성다항식차수(m)=4, 영역수(NG)=4라 가정한다.
상기 도 7를 참조하면, SYM_CLK는 심볼클럭을 나타내고, SEL_MUX는 의사랜덤생성기를 선택하기 위한 선택신호를 나타내며, PN[0]는 첫 번째 의사랜덤생성기의 상태값을, PN[1]은 두 번째 의사랜덤생성기의 상태값을, P[2]는 세 번째 의사랜덤생성기의 상태값을, PN[3]은 마지막 의사랜덤생성기의 상태값을 나타내고, Load_Zero는 상기 SEL_MUX가 '2'이고 상기 PN[3]이 오프셋에 의한 무효한 값일 때 상기 마지막 의사랜덤생성기 PN[3]의 선택을 스킵하도록 상기 SEL_MUX를 리세트시키는 신호이다. 그리고 UP-Counter는 영역카운터를 나타내고, Address_Read는 독출 어드레스를 나타내고, 제1클럭은 PN발생기들이 상태값을 갱신하기 위한 클럭을 나타내고, 제2클럭은 PN발생기들의 선택주기의 수를 카운터하도록 상기 영역카운터16에 제공되는 클럭을 타나낸다.
도시된 바와 같이, 상기 Load_Zero신호가 인에이블 될 때, 상기 SEL_MUX가 리세트되고 이에 응답하여 제1클럭신호 및 제2클럭신호가 인에이블 되어 상기 의사랜덤생성기들이 모두 선택되지 않았음에도 불구하고 상기 제1클럭에 의해 상기 의사랜덤생성기들의 상태가 갱신되고, 상기 UP_Counter는 상기 제2클럭에 의해 카운팅된다. 즉, 상기 마지막 의사랜덤생성기는 스킵하고 상기 첫 번째 의사랜덤생성기의 레지스터값을 사용하여 독출 어드레스를 만든다. 결국, 최종적으로 발생되는 독출 어드레스는 0+a, 16+b, 32+c, 48+d, 0+e, 16+f, 32+g, (h를 스킵하고), 0+i, 16+j, 32+k...가 된다. 그리고 up-counter의 최종상태가 2m-1인 15인 경우 PN(0)~PN(3)의 상태에 무관하게 도출 어드레스는 0+15, 16+15, 32+15가 된다.
이하 본 발명의 제2실시 예에 따른 독출 어드레스 생성과정을 첨부된 도면 도 13의 참조와 함께 상세히 설명한다.
먼저, 1301단계에서 입력 프레임의 크기(L)에 오프셋값(OSV)을 더해 가상의 어드레스 영역(N)을 구하고, 1303단계에서 상기 가상의 어드레스 영역을 다수개(NG)의 어드레스 생성영역으로 분할한다. 이후, 1305단계에서 각 어드레스 생성영역별로 PN생성기를 이용해 랜덤어드레스를 발생시킨다. 그리고 1307단계에서 상기 각 어드레스 생성영역에서 발생되는 랜덤 어드레스를 랜덤하게 선택한다. 여기서 상기 각 영역에서 발생되는 랜덤 어드레스를 순차적으로 선택 할 수도 있다. 이 과정에서, 상기 OSV검출기18은 맨 마지막 영역에 대응되는 의사랜덤 생성기가 발생하는 랜덤 시퀀스가 상기 더해진 오프셋값에 의한 무효한 값인지 검사한다. 이때 상기 무효한 값이라 판단될 시 1311단계로 진행하여 상기 맨 마지막 영역에서 발생되는 랜덤어드레스는 선택하지 않고, 상기 무효한 값이 아닐 시 1313단계로 진행한다. 한편 상기 1313단계에서 현재 영역카운트가 2m-1(여기서 m은 상기 PN생성기의 상태수를 나타낸다)에 해당하는지 검사한다. 상기 영역카운트가 2m-1에 해당하지 않을 시 1315단계에서 독출 어드레스를 'READ_ADDRESS=PNg()-1+(g*GL)'에 의해 생성하고, 상기 영역카운트가 2m-1에 해당할 시 1317단계로 진행하여 상기 독출 어드레스를 'READ_ADDRESS=GL*g+(2m-1)'에 의해 생성한다.
이상에서 설명한 바와 같이, 본 발명의 제2실시 예 따른 OCPNI는 구현상의 복잡도를 크게 개선하였다. 따라서, CDMA2000 순방향 부가채널(F-SCH)의 각각의 레이트에 따른 파라미터들도 의사랜덤 생성다항식(PN generator polynomial)과 초기 상태값 그리고 OSV만 필요하며, 상기 수학식 1로 구현할 경우 요구되는 GTH(그룹 기준값)은 필요하지 않다.
이하, 제2실시 예에 따른 OCPNI를 설계함에 있어서 기본적으로 정하는 변수들에 대해 살펴본다. 기본적으로 정하는 변수들은 주어진 인터리버 깊이(interleaver Depth)에 따른 영역수(NG;Number of Grroup)와 생성다항식의 차수(m;Order of PN Generator Polynomial)이다. 초기 설계 당시 CDMA2000의 각각의 프레임 크기에 있어서 최적의 NG와 m을 구하기가 어려우므로 소정 알고리즘에 의해 결정한다. 이렇게 구해진 파라미터들은 상기 표 1과 표 2와 같다. 예를 들어, CDMA2000의 레이트셋1의 경우 모든 프레임 크기에 대해 NG=6으로 결정하고 이를 바탕으로 m값을 결정하였다. 이는 기본적으로 NG가 지나치게 클 경우 각 그룹내에서의 랜덤성질이 줄어드는 것을 막기 위함이다. 즉, NG=384=6×25에서 NG=6인 경우, m=5이 되기 때문에, 각 그룹당 25=32개의 어드레스에서 랜덤하게 데이터를 읽어오게 되며, 이를 최소의 그룹 크기로 설정하게 된 것이다. 또한, OCPNI는 2차원(2D) PN 인터리버이므로 거리성질 또한 어느정도 만족할수 있었다.
그러나, 상기 제1실시 예의 경우, 프레임크기(FL)이 작은 경우 Eb/No가 높아짐에 따라 BER/FER의 개선이 점차 완만해지며, 그 기울기가 K=9인 길쌈부호기의 BER/FER 커브(Curve)보다 작아지는 시뮬레이션(simulation) 결과를 보였다. 즉, Eb/No가 계속 증가할 경우 터보코더의 성능이 길쌈부호기보다 나빠지는 것이 예상된다. 이러한 현상은 터보코더의 웨이트 스펙트럼과 관련된 현상이며, 따라서 제2실시 예에서는 OCPNI의 최적화(Optimization)을 위해 3가지를 고려하게 된 것이다.
상기한 바와 같이 OCPNI는 NG, m 등의 변수를 가진다. 이와 함께 각각의 그룹에서의 PN생성기를 동작하기 위한 생성다항식이 사용되는데, 이들의 선택이 또 다른 변수가 될 수 있다. 마지막으로 각각의 PN생성기의 초기상태값과 관련된 변수로 이는 너무 많은 조합이 존재함으로 풀서치(full serch)로는 최적의 초기상태값을 발견하기가 어렵다.
결론적으로, 최소 웨이트와 전반적 웨이트 스펙트럼의 개선을 위해 1)NG를 결정하고, 2)생성다항식을 선택하고, 최소 웨이트가 만족스럽지 못하면, 3) 최소 웨이트에 해당하는 그룹에 속하는 PN생성기의 초기상태값을 조정한다. 일반적으로 이러한 방식으로 몇 번의 반복을 수행하면 성능이 더 좋은 터보 인터리버를 얻을 수 있다. 이는 파라미터들의 조합이 너무 많은 관계로 컴퓨터 서치(computer search)로는 효과적이지 않기 때문이다. 먼저 다음과 같은 함수와 변수를 정의하고, 하기와 같은 알고리즘을 이용해 최적의 인터리버를 찾는다.
W : Weight Distribution Vector
D(.):Decision Criteria Function
D(W)=1 if W is satisfactory
D(W)=0 if Wis not
1. Initialize PN generator PNi with initial seed vector Seedi ∈{0,1} for i=0,...,NG-1
Choose arvitrary primitive polynomial G(x) of order M
Choose information sequence I's that are expected to generate the minimum weight code
2. For a given Turbo Encoder E, computer W
3. If D(W)==1, go to 6
4. Find PN generator PNk associated with minimum weight of W
5. Change Seedk such that weight(Seedk, Seedi)==1 and go to 2
6. stop
상기 수학식 3과 같은 알고리즘에서 서치 시간을 줄이기 위해, 먼저 주어진 상태에서 최선의 G(x)를 선택한 후 위의 알고리즘을 사용한다. 일반적으로, 3-4번 정도의 반복 후 주어진 조건을 만족하는 인터리버를 찾을 수 있다. 물론, 최선의 G(x) 또한 초기상태(initial seed)에 의존하나, 상태의 종류보다는 생성다항식의 수가 훨씬 적으므로 G(x)를 먼저 선택하는 것이 바람직하다. 따라서, G(x)의 선택은 인터리버의 Coarse Estimation 과정이라 본다. 이렇게 설계된 OCPNI는 상기한 실험과 직관에 의한 방식보다는 나은 웨이트 성질을 가지며, 이는 일반적으로 보다 나은 BER/FER성능을 보장한다.
이하 상기 초기 레지스터값을 최적화하는 구체적인 예를 설명한다.
예를들어, PN생성기기가 4개인 경우의 초기상태값(seed)을 최적화한다고 가정한다. m=5라 하고 NG=4이므로 다음과 같이 Seed를 초기화한다.
영역 0 : 0 1 0 1 0
영역 1 : 1 0 1 0 1
영역 2 : 0 0 1 1 0
영역 3 : 1 1 0 0 1
이렇게 생성된 OCPNI 터보 인터리버의 웨이트를 계산해서 다음 표 5와 같은 웨이트 분포도가 생성된다고 가정한다.
weight 22 32 33 62 62 62 63
address 44 92 8 76 111 124 56
group 1 2 0 2 3 3 1
이 경우, 현재 요구되는 최소 거리(minimum distance)가 약 60인 경우, 웨이트가 22,32,33에 해당하는 그룹의 PN생성기의 초기상태값을 수정해야 한다. 즉, 영역 1, 2, 0에 대응되는 PN생성기의 초기상태값을 수정해햐 한다. 일반적으로 해당 PN생성기는 다른 영역에 해당하는 웨이트에 영향을 주지 않으므로 해당 초기상태값을 수정하면 웨이트가 60보다 적은 경우를 제거할 수 있다.
위의 경우 영역 1의 초기상태값을 다음과 같이 조정하여 표 6과 같은 웨이트 분포도를 얻었다고 가정한다.
영역 0 : 0 1 0 1 0
영역 1 : 1 0 1 1 1
영역 2 : 0 0 1 1 0
영역 3 : 1 1 0 0 1
weight 32 33 62 62 62 63
address 92 8 76 111 124 56
group 2 0 2 3 3 1
이 경우 최소 거리는 32이므로 이에 해당하는 영역 2의 초기 상태값을 조정한다. 이와 같은 과정을 반복하면 최소 거리가 62인 OCPNI 터보 인터리버를 얻을 수 있다. 결론적으로 얻어진 웨이트 분포는 하기 표 7과 같다.
영역 0 : 0 1 0 1 0
영역 1 : 1 0 1 1 1
영역 2 : 0 0 1 0 0
영역 3 : 0 1 0 0 1
weight 62 62 62 63
address 76 111 124 56
group 2 3 3 1
상기한 PN발생기들의 초기상태값 최적화 과정을 일련의 흐름도로 나타내면 첨부된 도면 도 14와 같다.
상기 도 14를 참조하면, 먼저 1401단계에서 각 영역의 PN생성기를 임의의 상태값을 사용하여 초기화하고, 각 PN생성기의 생성다항식을 구한 후 최소 웨이트를 결정하는 미리 결정된 입력 정보어(predetermined input word)를 선택한다. 이후, 1403단계에서 OCPNI 인터리버 동작시키고, 1405단계에서 출력된 터보 인코더의 코드워드 헤밍 웨이트(codeword hamming weight)를 구한다. 그리고 1407단계에서 웨이트의 분포를 구한후 최소 웨이트를 결정한다. 그리고 1409단계에서 상기 구해진 최소웨이트가 설정임계치를 만족하는지 검사한다. 이때 상기 최소웨이트가 상기 임계치를 만족할 경우, 1411단계로 진행하여 상기 미리 결정된 입력 정보어의 모든 경우에 대해 검색이 되었는지 검사한다. 이때 모든 경우에 대해 검색을 완료했을 경우 종료하며, 그렇지 않을 경우 다시 상기 1401단계로 되돌아가 최소 웨이트를 결정하는 다른 경우의 미리 결정된 입력 정보어를 선택한후 이하 과정을 재수행한다. 한편, 상기 1409단계에서 최소웨이트가 설정임계치를 만족하지 않을 경우, 1413단계에서 이에 해당하는 영역을 찾고, 1415단계에서 상기 영역에 대응되는 PN생성기의 초기상태값을 변경한후 다시 상기 1403단계로 되돌아가 이하 과정을 재수행한다. 여기서 상기 미리 결정된 입력 정보어라 함은 m-bit PN생성기의 경우 2m-1의 비트로 구성되는 정보열의 쉬프트형태를 말한다.
상기와 같이 구해진 제2실시 예에 따른 OCPNI의 파라미터들은 하기 표 8 및 표 9와 같다.
레이트셋1 @19.2kbps @38.4kbps @76.8kbps @153.6kbps @307.2kbps
인터리버 사이즈 L 376 760 1528 3064 6136
오프셋값(OSV) 8 8 8 8 8
N=L+OSV 384 768 1536 3072 6144
m 6 7 8 9 10
Ng 12 12 12 12 12











초기파라미터 11101 111000 1100101 01010111 100100110
00101 001010 1111010 01101001 101011010
11001 110000 1110101 01110111 11100110
11100 111010 1100001 01011111 110110110
00111 100111 1011011 00101011 101011110
10001 001101 1010100 00110100 111100000
10101 000101 1000100 00010101 100100010
11000 110010 1110001 01111111 111110110
00100 001000 1011110 01100001 111001010
00001 000010 1001010 00001001 110011010
11010 001011 1011000 00101101 111010110
01100 110101 1111111 01100011 100001110
PN생성기 p(x) [110111] [1011011] [10011101] [101100011] [1000010001]
[AND]-[OR]-ring
codition
For NG-1'th PN
Generator
[11]-[111] [111]-[111] [1111]-[111] [111111]-[111] [111111]-[111]
상기 [AND]-[OR]-Ring에서 [111]-[111]은 해당위치의 PN 생성기 셀인 PN[5:3]이 AND-Ring되고 PN{2:0]이 OR-Ring 연결된 것을 의미한다.
레이트셋2 @28.8kbps @57.6kbps @115.2kbps @230.4kbps @460.8kbps
인터리버 사이즈 L 568 1144 2296 4600 9208
오프셋값(OSV) 8 8 8 8 8
N=L+OSV 576 1152 2304 4608 9216
m 6 7 8 9 10
Ng 18 18 18 18 18
초기파라미터 01100 100110 0101011 11110101 001101101
01001 011010 1110001 00111001 101100100
11111 000101 0001010 01010100 000001001
11111 101110 1010110 01000111 101011000
11111 111010 0101011 11010101 010001101
11100 001110 1101101 00111001 101100100
11100 100000 0001111 11001101 000011101
10000 010001 1010110 01000111 100111000
01110 011100 0101000 10010011 011000001
11111 000101 0111011 11010011 001001101
11100 010011 0001111 00000111 100001110
11001 010001 0001010 10100111 001011001
10010 000111 1111000 00101111 1100001000
11111 011101 1111110 10101001 001101101
01110 011101 1110001 00111001 110000110
11001 010001 0001111 00101110 000011101
11111 010001 1010110 01100101 110001000
01100 001110 0000100 11010011 100111111
PN생성기 p(x) [111011] [1100111] [11001011] [111100111] [110110110]
[AND]-[OR]-ring
codition
For NG-1'th PN
Generator
[11]-[111] [111]-[111] [1111]-[111] [11111]-[111] [111111]-[111]
예를들어, 상기 표 8에서 인터리버 사이즈 L이 376인 경우 OCPNI의 독출 어드레스를 구하면 하기 표 10과 같다.
28 36 88 123 134 176 212 247 259 288 345 363 24 52 90 109 147 190 220 235 257 310 332 357 26 60 89 102 137 183 216 229 256 315 336 354 25 56 76 115 132 171 218 226 278 301 350 373 12 58 80 105 148 165 217 245 283 294 343 362 16 57 94 100 156 162 204 234 269 307 331 369 30 33 87 116 152 181 208 241 262 297 325 360 23 48 75 124 154 170 222 232 275 292 322 370 11 62 69 120 153 177 215 242 265 308 341 5 55 66 122 140 168 203 253 260 316 330 366 2 43 85 121 144 178 197 238 276 312 337 367 21 37 74 108 158 189 194 239 284 314 328 359 10 34 81 112 151 174 213 231 280 313 338 355 17 53 72 126 139 175 202 227 282 300 349 353 8 42 82 119 133 167 209 225 281 304 334 352 18 49 93 107 130 163 200 224 268 318 335 374 29 40 78 101 149 161 210 246 272 311 327 14 50 79 98 138 160 221 251 286 299 323 365 15 61 71 117 145 182 206 237 279 293 321 358 7 46 67 106 136 187 207 230 267 290 320 371 3 47 65 113 146 173 199 243 261 309 342 361 1 39 64 104 157 166 195 233 258 298 347 356 0 35 86 114 142 179 193 228 277 305 333 372 22 91 125 143 169 192 244 266 296 326 27 32 77 110 135 164 214 252 273 306 339 13 54 70 111 131 180 219 248 264 317 329 6 59 83 103 129 188 205 250 274 302 324 19 45 73 99 128 184 198 249 285 303 340 364 9 38 68 97 150 186 211 236 270 295 348 368 4 51 84 96 155 185 201 240 271 291 344 20 41 92 118 141 172 195 289 346 375 31 63 95 127 159 191 223 255 287 319 351
하기 설명되는 표 11a와 표 11b는 상기 제1실시 예에 따른 OCPNI와 제2실시 예에 따른 OCPNI의 웨이트 분포를 보여준다.
Rate set 1
L Weight Distribution
376 (1) 14 22 30 30 30 34 34 34 34 34 34 36 38 38 41 45 46 46 48 49...
(2) 26 30 30 30 30 34 35 38 41 42 42 42 43 44 44 47 50 50 50 50...
760 (1) 23 26 26 29 30 30 30 30 34 34 34 34 34 34 34 34 34 34 38 45...
(2) 50 52 52 58 59 61 63 69 70 71 78 78 78 78 78 78 78 78 78 78...
1528 (1) 34 34 34 34 34 34 34 34 34 34 40 46 50 54 54 58 58 58 58 58...
(2) 57 57 58 58 58 58 58 58 58 58 58 58 58 60 64 74 74 77 78 78...
3064 (1) 26 30 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 54...
(2) 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 58 69 78 98 98...
6136 (1) 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 51 58 58...
(2) 106 106 106 106 106 106 106 106 106 106 106 106 106 106 106...
Rate set 2
568 (1) 26 26 30 30 30 30 34 41 43 46 46 46 46 46 46 46 46 46 46 46...
(2) 77 82 82 82 87 88 90 94 97 100 100 101 102 102 102...
1144 (1) 21 30 30 30 30 46 46 46 46 46 46 46 46 46 46 50...
(2) 97 10 102 102 102 102 102 102 102 102 102 102 102...
2296 (1) 30 34 45 46 46 46 46 46 46 46 46 46 46 46 46 46 46...
(2) 107 112 116 119 121 122 127 131 132 135 139 140...
4600 (1) 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46...
(2) 154 154 154 154 154 154 154 154 154 154 154 154 174...
9208 (1) 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46...
(2) 174 220 226 226 226 226 226 226 226 226 226 226 226...
상기 <표 11>에서도 알수 있듯이, 제2실시 예에 따른 OCPNI가 제1실시 예에 따른 OCPNI보다 웨이트 분포 면에서 성능이 2배 이상 좋은 것을 알 수 있다.
결론적으로, OCPN(Offset Controlled PN Interleaver)는 NG의 수가 성능에 결정적인 영향을 미치며, 또한 원시 생성다항식(Primitive Polynomial)과도 관련을 가짐을 알수 있다. 여기서 상기 NG가 너무 크면 각 그룹의 크기가 줄어들기 때문에 랜덤성질(Random Properity)가 점차 줄어들게 되므로 적당한 NG의 결정이 요구된다. 예를들어, NG가 N이 될 경우는 이는 OCI(Offset Controlled Interleaver)의 성능을 보이며, 상기 OCI의 성능은 일반적으로 OCPNI의 성능에 미치지 못한다. 마지막으로 고려대상은 주어진 NG와 원시 생성다항식에서 최적의 초기상태값을 찾는 것이다.
앞서 상술한 내용는 CDMA2000을 기준으로 설명하였다. 가령, 본 발명에 따른 OCPNI를 UMTS용 터보인터리버를 적용하면 다음과 같은 파라미터들을 얻을수 있다. 이하 표 12(일예) 및 표 13(다른예)에서 설명되는 파라미터들을 가장 좋은 성능을 얻기 위한 파라미터들이다.





인터리버 사이즈 L 320 640 1280 2560 3840 5120
OSV 0 0 0 0 0 0
N=L+OSV 320 640 1280 2560 3840 5120
m 5 6 7 7 8 8
NG 10 10 10 20 15 20
seed for
PN generator
01100 010100 1000100 1010001 00100110 00100110
11001 001010 1110111 0011000 01101000 01101000
01100 010100 1111101 1010001 10100111 10100111
10000 001010 0000111 0100010 01001001 10011010
01100 011001 1111101 1001011 11100100 10100100
00110 100101 1000100 1001011 01100000 01000000
01010 000001 1001101 1001011 11000110 11000110
00011 110011 1010001 0101110 00111010 00111010
01100 110100 1000100 0011100 10110010 10010010
00001 110011 1101001 0001110 00101010 10111001
seed for
PN generator
0001110 10111001 01000010
1100010 00010101 01110101
0001100 01101000 00011100
1010011 01000000 01000000
0100010 10001000 11011000
0101111 11010111
0101110 00011010
0101100 10010111
0101111 00101111
0011110 01110100
PN generator P(x) 111011 1011011 11001011 11001011 1110011 111100111
인터리버 사이즈L 320 320 640 640 1280 2560 5120
Offset Value(OSV) 0 0 0 0 0 0 0
N=L+OSV 320 320 640 640 1280 1280 5120
m 6 4 7 5 6 8 9
NG 5 20 5 20 20 10 10
seed for
PN generato
111101 1011 0001010 01011 010110 11101110 110001101
110100 1011 0011110 00101 111001 01101000 111100110
011001 1111 10001101 10100 001100 10000100 101011001
110011 1001 1000011 01111 111111 10010110 011010011
110100 1011 1010110 01111 011100 01001110 101101010
1011 01111 101001 11001101 001101101
1011 01111 111010 01011001 000100010
1011 01010 011010 10101100 101000100
0001 00101 111010 10010101 101110011
1001 00001 000101 00001101 110101100
0110 11110 101011
0111 10011 111000
0100 01101 010010
0111 00111 010000
1011 10100 011111
0010 01010 100100
1011 00101 010100
0010 11110 000100
1010 01101 011111
0001 10001 11000
1011011 11001 11001011 110111 1011011 111100111 1101101101
PN generator
p(x)
상기와 같은 파라미터들을 사용할 경우에 발생되는 웨이트 분포는 하기 표 14과 같다.
인터리버 사이즈 Minimum Weight/NG(->number of gruop
320 48/5,50/10,36/20
640 50/5,78/10.78/10
1280 90/10,74/20
2560 90/10,102/20
3840 130/15
5120 130/10,170/20
상기한 바와 같이, UMTS용 터보인터리버는 프레임크기가 모두 2m으로 나누어 떨어지기 때문에 오프셋값(OSV)를 추가하지 않는다. 그러나, 현재 UMTS표준 진행과정에서 실질적으로 사용할 프레임크기가 결정되지 않았기 때문에, 다시말해 상기한 예들은 검증을 위해 정해놓은 프레임크기이므로, 실제로 프레임크기가 결정되면 상술한 본 발명에 따른 원리에 의해 OSV를 추가해야 한다.
상술한 바와 같이 본 발명에서는 입력데이타를 인터리빙할 때에 랜덤 성질, 거리성질 및 웨이트 성질을 만족하면서 랜덤 인터리빙시 필요한 메모리의 사용을 최소화하는 방법을 제시하였다. 또한 본 발명의 제안하는 오프셋제어 인터리버 방식은 기존의 PN인터리빙 방식이 인터리버 크기가 2의 거듭제곱 형태로 표현될수 없고, 인터리버의 크기가 큰 경우 메모리 활용면에서 매우 비효율적이라는 문제점을 해결하였다. 또한, IMT-2000을 위한 인터리버 설계에서 각 논리채널(logical channel)의 인터리버 크기가 2의 거듭제곱 형태로 표현되지 않으며, 인터리버의 크기 또한 매우 크다는 점을 고려할 때 이를 해결할수 있는 방식을 제안한다. 그리고 기존의 인터리빙 방식에서 각각의 인터리버 크기에 따른 인터리빙 룰을 송수신기의 제어부(CPU 또는 HOST)에 저장해 두어야 하므로 인터리버 버퍼 이외에 별도의 저장공간이 CPU(호스트) 메모리쪽에 필요했으나 이러한 문제점을 해결하였다. 즉, 셈(Enumeration)가 가능한 형태의 인터리버를 구현하므로서 하드웨어 구현의 복잡도를 매우 낮추었다. 또한, 송수신을 위한 인터리버/디인터리버 전송방식이 매우 간결하며, 최소의 메모리를 사용한다. 즉, 프레임 크기인 L비트만큼의 인터리버 메모리만 필요하다. 마지막으로, 터보코더 인터리버의 특성을 모두 만족하는 것으로, 랜덤 인터리버와 유사하거나 더 우수한 성능을 보여준다. 따라서 평균 성능(Average performance) 이상의 성능을 보장한다.

Claims (24)

  1. L개의 데이터가 저장된 인터리버 메모리로부터 상기 데이터를 독출하기 위하여 2m×NG개의 가상 어드레스들 보다 작은 L개의 어드레스들을 발생하는 장치에 있어서,
    각각 m개의 메모리를 포함하는 NG개의 PN생성기들을 포함하고, 제1클럭신호의 클럭펄스들에 응답하여 상기 PN생성기들중 하나는 OSV=2m×NG-L을 만족하는 OSV-1개의 주어진 오프셋 상태값들과 2m-OSV개의 영이 아닌 상태들을 발생하고, 나머지 PN생성기들의 각각은 2m-1개의 영이 아닌 상태들을 발생하며,
    선택신호에 응답하여 미리 결정된 순서에 따라 상기 PN생성기들을 주기적으로 선택하고, 선택된 PN생성기로부터 발생된 상태를 출력하는 선택회로와,
    상기 하나의 PN생성기로부터의 각 오프셋 상태를 검출한후 상기 검출된 오프셋 상태가 상기 선택회로에 의해 출력되지 않도록 상기 미리 예정된 순서중 상기 하나의 PN생성기에 선택을 생략하는 상기 선택신호를 발생하고, 상기 제1클럭 신호의 클럭펄스 주기보다 짧은 주기를 가지는 제2클럭신호의 클럭 펄스들에 응답하여 상기 PN생성기들의 각각의 선택과 관련된 상위 어드레스 비트들을 발생하는 수단과,
    상기 PN생성기들의 선택주기의 수가 2m보다 작을 때 상기 선택회로로부터 출력하는 각 상태에서 1을 감산한 하위 어드레스 비트들을 발생하고, 상기 선택주기의 수가 2m일 때 2m-1에 대응하는 하위 어드레스 비트들을 발생하는 수단과,
    상기 L개의 어드레스들의 각각은 상기 상의 어드레스 비트들과 이와 관련된 하위 어드레스 비트들로 구성되고, 상기 어드레스들을 저장하는 어드레스 버퍼를 포함함을 특징으로 하는 장치.

  2. 제1항에 있어서,
    상기 OSV는 상기 입력데이터의 크기를 2진수로 변환하여 그 최하위 비트에서 연속되는 '0'의 개수가 적어도 1개 이상이 되도록 더해주는 최소의 값임을 특징으로 하는 장치.

  3. 제1항에 있어서,
    상기 선택회로는 상기 PN생성기들을 순차로 선택하기 위한 선택신호를 출력하는 것을 특징으로 하는 장치.

  4. 제1항에 있어서,
    상기 선택회로는 상기 PN생성기들을 랜덤하게 선택하기 위한 선택신호를 출력하는 것을 특징으로 하는 장치.

  5. 제1항에 있어서,
    제1항에 있어서,
    상기 PN생성기들의 초기 상태값은 미리 결정되는 입력 정보어(predetermined input word)를 터보부호화하여 구해진 최소 웨이트(minimum weight)와 미리 정해진 임계치를 비교하여 만족하는 상태값으로 설정되어짐을 특징으로 하는 장치.


  6. L개의 데이터가 저장된 인터리버 메모리로부터 상기 데이터를 독출하기 위하여 2m×NG개의 가상 어드레스들 보다 작은 L개의 어드레스를 발생하는 장치에 있어서,
    상기 L개의 입력데이터를 순차로 저장하는 상기 인터리버 메모리와,
    상기 입력데이터 크기에 오프셋 값을 더하여 가상 어드레스 크기가 2m의 정수배로 제공하고, 각각 2m의 크기를 가지는 상기 정수개의 어드레스 생성영역들을 가지고 상기 어드레스 생성영역들에서 상기 오프셋 값에 대응하는 어드레스들을 제외한 어드레스들을 발생하는 어드레스 생성기로 구성되어,
    상기 어드레스 생성영역들로부터 발생된 상기 어드레스들을 가지고 상기 인터리버 메모리로부터 상기 입력데이터를 독출하는 것을 특징으로 하는 장치.

  7. 제6항에 있어서, 상기 어드레스 생성기는,
    각각 m개의 메모리를 포함하는 NG개의 PN생성기들을 포함하고, 상기 PN생성기들중 하나는 OSV=2m×NG-L을 만족하는 OSV-1개의 주어진 오프셋 상태값들과 2m-OSV개의 영이 아닌 상태들을 발생하고, 나머지 PN생성기들의 각각은 2m-1개의 영이 아닌 상태들을 발생하며,
    선택신호에 응답하여 미리 예정된 순서에 따라 상기 PN생성기들을 선택하고, 선택된 PN생성기로부터 발생된 상태를 출력하는 선택회로와,
    상기 하나의 PN생성기로부터의 각 오프셋 상태를 검출한후 상기 검출된 오프셋 상태가 상기 선택회로에 의해 출력되지 않도록 상기 미리 예정된 순서중 상기 하나의 PN생성기에 선택을 생략하는 상기 선택신호를 발생하고, 상기 PN생성기들의 각각의 선택과 관련된 상위 어드레스 비트들을 발생하는 수단과,
    상기 PN생성기들의 선택주기의 수가 2m보다 작을 때 상기 선택회로로부터 출력하는 각 상태에서 1을 감산한 하위 어드레스 비트들을 발생하고, 상기 선택주기의 수가 2m일 때 2m-1에 대응하는 하위 어드레스 비트들을 발생하는 수단과,
    상기 L개의 어드레스들의 각각은 상기 최상의 어드레스 비트들과 이와 관련된 하위 어드레스 비트들로 구성되고, 상기 어드레스들을 저장하는 어드레스 버퍼를 포함함을 특징으로 하는 장치.

  8. 제6항에 있어서,
    상기 OSV는 상기 입력데이터의 크기를 2진수로 변환하여 그 최하위 비트에서 연속되는 '0'의 개수가 적어도 1개 이상이 되도록 더해주는 최소의 값임을 특징으로 하는 장치.

  9. 제6항에 있어서,
    상기 선택회로는 상기 PN생성기들을 순차로 선택하기 위한 선택신호를 출력하는 것을 특징으로 하는 장치.

  10. 제6항에 있어서,
    상기 선택회로는 상기 PN생성기들을 랜덤하게 선택하기 위한 선택신호를 출력하는 것을 특징으로 하는 장치.

  11. 제6항에 있어서,
    상기 PN생성기들의 초기 상태값은 미리 결정된 정보어를 터보부호화하여 구해진 최소 웨이트(minimum weight)와 미리 정해진 임계치를 비교하여 만족하는 상태값으로 설정되어짐을 특징으로 하는 장치.

  12. L개의 데이터가 저장된 인터리버 메모리로부터 상기 데이터를 독출하기 위하여 2m×NG개의 가상 어드레스들보다 작은 L개의 어드레스들을 발생하는 방법에 있어서,
    NG개의 PN생성기들중 하나로부터 OSV=2m×NG-L을 만족하는 OSV-1개의 주어진 오프셋 상태들과 2m-OSV개의 영이 아닌 상태들을 발생하고, 나머지 PN생성기들의 각각으로부터 2m-1개의 영이 아닌 상태들을 발생하는 과정과,
    상기 하나의 PN생성기로부터의 각 오프셋 상태를 검출한후 상기 검출된 오프셋 상태가 선택되지 않도록 상기 PN생성기들에 대한 미리 예정된 선택순서중 상기 하나의 PN생성기의 선택을 생략하는 선택주기를 가지는 선택신호를 발생하는 과정과,
    상기 선택신호에 따라 상기 PN생성기들을 선택하고 상기 영이 아닌 상태들을 순차적으로 발생하는 과정과,
    상기 순차적으로 발생된 상기 영이 아닌 상태들의 각각으로부터 1을 감산하는 과정과,
    상기 선택주기의 수가 2m보다 작을 때 상기 감산된 상태들의 각각을 하위 어드레스 비트들로 제공하고, 상기 선택주기의 수가 2m일 때 상기 2m-1의 상태에 대응하는 하위 어드레스 비트들을 제공하며, 상기 각 하위 어드레스 비트들과 관련된 선택신호에 관련하는 상위 어드레스 비트들을 발생하는 과정과,
    상기 하위 어드레스 비트들과 상기 상위 어드레스 비트들로 구성된 상기 어드레스들을 가지고 상기 인터리버 메모리에로부터 상기 L개의 데이터를 독출하는 과정을 포함하는 것을 특징으로 하는 방법.

  13. 제12항에 있어서,
    상기 OSV는 상기 입력데이터의 크기를 2진수로 변환하여 그 최하위 비트에서 연속되는 '0'의 개수가 적어도 1개 이상이 되도록 더해주는 최소의 값임을 특징으로 하는 방법.

  14. 제12항에 있어서,
    상기 미리 예정된 선택순서는 상기 PN생성기들을 순차로 선택하는 순서임을 특징으로 하는 방법.

  15. 제12항에 있어서,
    상기 미리 예정된 선택순서는 상기 PN생성기들을 랜덤하게 선택하는 순서임을 특징으로 하는 방법.

  16. 제12항에 있어서,
    상기 PN생성기들의 초기 상태값은 미리 결정된 정보어를 터보부호화하여 구해진 최소 웨이트(minimum weight)와 미리 정해진 임계치를 비교하여 만족하는 상태값으로 설정되어짐을 특징으로 하는 방법.


  17. 2m(m>1)의 정수 배가 아닌 크기를 가지는 입력데이터를 인터리빙하는 방법에 있어서,
    상기 입력데이터를 메모리에 순차적으로 저장하는 과정과,
    상기 입력데이터 크기에 오프셋 값을 더하여 가상 어드레스 크기가 2m의 정수(NG)배로 제공하는 과정과,
    각각 2m의 크기를 가지는 상기 정수개의 어드레스 생성영역들을 가지고 상기 어드레스 생성영역들에서 상기 오프셋 값에 대응하는 어드레스들을 제외한 어드레스들을 발생하는 과정과,
    상기 어드레스 생성영역들로부터 발생된 상기 어드레스들을 가지고 상기 메모리로부터 상기 입력데이터를 독출하는 과정을 포함하는 것을 특징으로 하는 인터리빙 방법.


  18. 제17항에 있어서, 상기 어드레스 발생과정은,
    상기 어드레스 생성영역들의 각각에 대응하는 PM생성기들중 하나로부터 상기 오프셋값에 해당하는 오프셋 상태들을 포함하여 2m-1개의 영이 아닌 상태들을 발생하고, 나머지 PN생성기들의 각각으로부터 2m-1개의 영이 아닌 상태들을 발생하는 과정과,
    상기 하나의 PN생성기로부터의 각 오프셋 상태를 검출한후 상기 PN생성기들에 대한 미리 예정된 선택순서중 상기 하나의 PN생성기의 선택을 생략하는 선택주기를 가지는 선택신호에 의해 상기 PN생성기들의 영이 아닌 상태들을 선택하는 과정과,
    상기 선택된 상태에서 '1'을 감산하여 하위 어드레스 비트들로 제공하고, 상기 각 하위 어드레스 비트들과 관련된 선택신호에 해당하는 상위 어드레스 비트들을 발생하는 과정과,
    상기 하위 어드레스 비트들과 상기 상위 어드레스 비트들로 구성된 상기 어드레스들을 발생하는 과정을 포함하는 것을 특징으로 하는 방법.

  19. 제18항에 있어서, 상기 상위 어드레스 발생과정은,
    상기 선택주기의 수가 2m보다 작을 때 상기 감산된 상태들의 각각을 상기 하위 어드레스 비트들로 제공하고, 상기 선택주기의 수가 2m일대 상기 2m-1의 상태에 대응하여 상기 하위 어드레스 비트들을 제공하며, 상기 각 하위 어드레스 비트들과 관련된 선택신호에 해당하는 상위 어드레스 비트들을 발생하는 것으로 이루어짐을 특징으로 하는 방법.

  20. 제17항에 있어서,
    상기 OSV는 상기 입력데이터의 크기를 2진수로 변환하여 그 최하위 비트에서 연속되는 '0'의 개수가 적어도 1개 이상이 되도록 더해주는 최소의 값임을 특징으로 하는 방법.

  21. 제18항에 있어서,
    상기 미리 예정된 선택순서는 PN생성기들을 순차로 선택하는 순서임을 특징으로 하는 방법.

  22. 제18항에 있어서,
    상기 미리 예정된 선택순서는 PN생성기들을 랜덤하게 선택하는 순서임을 특징으로 하는 방법.

  23. 제18항에 있어서,
    상기 PN생성기들의 초기 상태값은 미리 결정된 정보어를 터보부호화하여 구해진 최소 웨이트(minimum weight)와 미리 정해진 임계치를 비교하여 만족하는 상태값으로 설정되어짐을 특징으로 하는 방법.

  24. 터보 부호화 장치에 있어서,
    2m(m>1)의 정수 배가 아닌 크기를 가지는 입력데이터를 부호화하는 제1구성부호기와,
    상기 입력데이터를 인터리버 메모리에 순차로 저장하고, 상기 입력데이터 크기에 오프셋 값을 더하여 가상 어드레스 크기가 2m의 정수배로 제공하고, 각각 2m의 크기를 가지는 상기 정수개의 어드레스 생성영역들을 가지고 상기 어드레스 생성영역들에서 상기 오프셋 값에 대응하는 어드레스들을 제외한 어드레스들을 생성하고, 상기 생성된 어드레스들을 가지고 상기 인터리버 메모리로부터 상기 입력 데이터를 독출하는 인터리버와,
    상기 인터리버로부터의 상기 독출 데이터를 부호화하는 제2구성부호기를 포함하는 것을 특징으로 하는 장치.
KR1020000017318A 1999-04-02 2000-04-03 통신시스템의 인터리빙/디인터리빙 장치 및 방법 KR100330238B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020000017318A KR100330238B1 (ko) 1999-04-02 2000-04-03 통신시스템의 인터리빙/디인터리빙 장치 및 방법

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
KR19990012858 1999-04-02
KR1019990012858 1999-04-02
KR1019990011798 1999-04-06
KR19990011798 1999-04-06
KR1020000017318A KR100330238B1 (ko) 1999-04-02 2000-04-03 통신시스템의 인터리빙/디인터리빙 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20000071545A true KR20000071545A (ko) 2000-11-25
KR100330238B1 KR100330238B1 (ko) 2002-03-25

Family

ID=27349929

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020000017318A KR100330238B1 (ko) 1999-04-02 2000-04-03 통신시스템의 인터리빙/디인터리빙 장치 및 방법

Country Status (1)

Country Link
KR (1) KR100330238B1 (ko)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030069431A (ko) * 2002-02-20 2003-08-27 삼성전자주식회사 통신 시스템에 적용되는 모뎀 에이직의 터보 부호화 장치및 그 부호화 방법
WO2009093865A3 (en) * 2008-01-25 2009-10-22 Samsung Electronics Co,. Ltd. System and method for pseudorandom permutation for interleaving in wireless communications
US7929918B2 (en) 2007-08-13 2011-04-19 Samsung Electronics Co., Ltd. System and method for training the same type of directional antennas that adapts the training sequence length to the number of antennas
US8165595B2 (en) 2008-01-25 2012-04-24 Samsung Electronics Co., Ltd. System and method for multi-stage antenna training of beamforming vectors
US8280445B2 (en) 2008-02-13 2012-10-02 Samsung Electronics Co., Ltd. System and method for antenna training of beamforming vectors by selective use of beam level training
US8478204B2 (en) 2008-07-14 2013-07-02 Samsung Electronics Co., Ltd. System and method for antenna training of beamforming vectors having reuse of directional information

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5537420A (en) * 1994-05-04 1996-07-16 General Instrument Corporation Of Delaware Convolutional interleaver with reduced memory requirements and address generator therefor
KR100255304B1 (ko) * 1997-04-08 2000-05-01 김영환 디지탈 통신기기의 컨벌루셔널 디인터리버
KR100248379B1 (ko) * 1997-06-16 2000-03-15 정선종 단일 콘케티네이티드 부호기를 이용한 통신 장치 및 이를 이용한 통신 방법
US6334197B1 (en) * 1998-08-17 2001-12-25 Hughes Electronics Corporation Turbo code interleaver with near optimal performance

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030069431A (ko) * 2002-02-20 2003-08-27 삼성전자주식회사 통신 시스템에 적용되는 모뎀 에이직의 터보 부호화 장치및 그 부호화 방법
US7929918B2 (en) 2007-08-13 2011-04-19 Samsung Electronics Co., Ltd. System and method for training the same type of directional antennas that adapts the training sequence length to the number of antennas
US7978134B2 (en) 2007-08-13 2011-07-12 Samsung Electronics Co., Ltd. System and method for efficient transmit and receive beamforming protocol with heterogeneous antenna configuration
US8249513B2 (en) 2007-08-13 2012-08-21 Samsung Electronics Co., Ltd. System and method for training different types of directional antennas that adapts the training sequence length to the number of antennas
US8917208B2 (en) 2007-08-13 2014-12-23 Samsung Electronics Co., Ltd. System and method for efficient transmit and receive beamforming protocol with heterogeneous antenna configuration
WO2009093865A3 (en) * 2008-01-25 2009-10-22 Samsung Electronics Co,. Ltd. System and method for pseudorandom permutation for interleaving in wireless communications
US8051037B2 (en) 2008-01-25 2011-11-01 Samsung Electronics Co., Ltd. System and method for pseudorandom permutation for interleaving in wireless communications
US8165595B2 (en) 2008-01-25 2012-04-24 Samsung Electronics Co., Ltd. System and method for multi-stage antenna training of beamforming vectors
US8280445B2 (en) 2008-02-13 2012-10-02 Samsung Electronics Co., Ltd. System and method for antenna training of beamforming vectors by selective use of beam level training
US8478204B2 (en) 2008-07-14 2013-07-02 Samsung Electronics Co., Ltd. System and method for antenna training of beamforming vectors having reuse of directional information

Also Published As

Publication number Publication date
KR100330238B1 (ko) 2002-03-25

Similar Documents

Publication Publication Date Title
AU745959B2 (en) Interleaving / deinterleaving apparatus and method for a communication system
KR100346170B1 (ko) 통신시스템의인터리빙/디인터리빙장치및방법
CA2390096C (en) High-performance low-memory interleaver banks for turbo-codes
KR100711326B1 (ko) 선형 합동 시퀀스들을 이용한 터보 코드 인터리버
KR100350459B1 (ko) 통신시스템의인터리빙/디인터리빙장치및방법
AU759580B2 (en) 2-dimensional interleaving apparatus and method
JP4191485B2 (ja) ランダムアクセスマルチ方向cdma2000のターボコードインターリーバ
US6353900B1 (en) Coding system having state machine based interleaver
US6304985B1 (en) Coding system having state machine based interleaver
KR100330238B1 (ko) 통신시스템의 인터리빙/디인터리빙 장치 및 방법
KR100362557B1 (ko) 이차원 인터리빙 장치 및 방법
KR20010059446A (ko) 매직 매트릭스를 이용한 인터리빙 방법

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130227

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20140227

Year of fee payment: 13

FPAY Annual fee payment

Payment date: 20150226

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20160226

Year of fee payment: 15

FPAY Annual fee payment

Payment date: 20170224

Year of fee payment: 16

FPAY Annual fee payment

Payment date: 20180227

Year of fee payment: 17

FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 18

FPAY Annual fee payment

Payment date: 20200218

Year of fee payment: 19