KR20020028639A - 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템 - Google Patents

주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템 Download PDF

Info

Publication number
KR20020028639A
KR20020028639A KR1020000059749A KR20000059749A KR20020028639A KR 20020028639 A KR20020028639 A KR 20020028639A KR 1020000059749 A KR1020000059749 A KR 1020000059749A KR 20000059749 A KR20000059749 A KR 20000059749A KR 20020028639 A KR20020028639 A KR 20020028639A
Authority
KR
South Korea
Prior art keywords
read
interleaving
memory
address
deinterleaving
Prior art date
Application number
KR1020000059749A
Other languages
English (en)
Other versions
KR100430567B1 (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 KR10-2000-0059749A priority Critical patent/KR100430567B1/ko
Priority to US09/750,186 priority patent/US6735723B2/en
Priority to JP2001110088A priority patent/JP4728500B2/ja
Publication of KR20020028639A publication Critical patent/KR20020028639A/ko
Application granted granted Critical
Publication of KR100430567B1 publication Critical patent/KR100430567B1/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
    • 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
    • H03M13/2782Interleaver implementations, which reduce the amount of required interleaving memory
    • 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
    • H03M13/2703Coding, 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 the interleaver involving at least two directions
    • H03M13/2707Simple row-column interleaver, i.e. pure block interleaving
    • 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
    • H03M13/2703Coding, 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 the interleaver involving at least two directions
    • H03M13/271Row-column interleaver with permutations, e.g. block interleaving with inter-row, inter-column, intra-row or intra-column permutations
    • 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
    • H03M13/276Interleaving address generation
    • 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
    • H03M13/276Interleaving address generation
    • H03M13/2764Circuits therefore

Landscapes

  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Error Detection And Correction (AREA)
  • Transmission Systems Not Characterized By The Medium Used For Transmission (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

본 발명은 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및 그 방법과 그를 이용한 채널 부호화 시스템에 관한 것으로, 데이터의 연집 오류를 정정하기 위해 사용되는 인터리빙/디인터리빙을 수행함에 있어, 기본적으로 읽혀진 위치에 데이터를 쓰도록 주소를 발생시켜 열간 치환을 복원하고 한 개의 메모리를 사용하여 인터리빙/디인터리빙의 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및 그 방법과 그를 이용한 채널 부호화 시스템과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하기 위하여 인터리빙과 디인터리빙을 위한 효율적인 주소 발생기를 사용하게 되면 다양한 서비스를 지원하는 IMT-2000용 모뎀에 있어서 요구되는 메모리의 크기를 약 40% 정도 줄일 수 있고, 한개의 메모리만으로 인터리빙과 디인터리빙을 수행하게 하여 메모리의 크기를 줄임으로서 높은 데이터 율을 요구하는 서비스가 지원 가능한 모뎀의 원칩화가 가능하도록 하며, 인터리빙/디인터리빙 수행 장치 등에 이용됨.

Description

주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및 그 방법과 그를 이용한 채널 부호화 시스템{Apparatus and method for processing interleaving/de-interleaving with address generator and channel encoder system using it}
본 발명은 무선통신시스템에서 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및 그 방법과 그를 이용한 채널 부호화 시스템과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것으로, 특히 이동통신의 채널 환경에서 발생하는 데이터의 연집 오류를 정정하기 위해 사용되는 인터리빙/디인터리빙의 운용에 있어서, 한개의 메모리를 사용하여 기본적으로 읽혀진 위치에 데이터를 쓰도록 주소를 발생시켜 열간 치환을 포함한 인터리빙/디인터리빙 수행 장치 및 그 방법과 그를 이용한 채널 부호화 시스템과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체에 관한 것이다.
즉, 본 발명은, 코드분할 다중접속 방식(CDMA)의 이동통신 시스템을 구현하는데 필수적인 인터리빙과 디인터리빙을 구현하여 효율적이고 정확한 신호 전송을 위해서 주어진 환경에 강한 응용 기술을 사용한다. 특히, 이동 통신에서는 다경로에 의한 멀티 페이딩에 의해 연집 에러가 발생하므로 성능 저하를 막기 위해 부호화와 인터리빙을 사용하면 연집 에러를 랜덤 에러로 바꿔주는 효율적인 전송이 가능하다.
차세대 이동통신 시스템(IMT(International Mobile Telecommunication)-2000)에서 인터리빙/디인터리빙 수행 장치는 전송 시간간격(TTI)으로 취해지고 최대 전송율은 2Mbps에 이른다. 이때, 전송 시간간격은 10~80ms로 구성되므로, 데이터 율(Data Rate)이 384Kbps라고 가정하더라도 전송시간간격이 80ms라면 1차 디인터리빙을 위한 메모리의 크기는 약 553Kbits에 이르고, 만약 종래에 사용되던 방식으로 읽기와 쓰기용으로 램(RAM)을 2개 사용하게 된다면 디인터리빙을 수행하기 위해 요구되는 메모리의 크기는 1Mbits를 초과하게 되어 칩 면적의 대부분을 차지하게 됨을 알 수 있다. 또한, 여기에 2차 디인터리빙과 1, 2차 인터리빙을 위한 메모리까지 필요하므로 높은 데이터 율을 지원하는 모뎀을 원칩화하기 위해서는 메모리의 크기를 줄이는 것이 필수적이라 할 수 있다.
또 한가지의 특징은 블록 인터리빙이 수행되기 전에 열간 치환을 수행한다는 것으로서 그간 단순 블록 인터리빙을 한 개의 메모리를 사용하여 구현하는 것에 대한 논의는 있어 왔으나, 이와 같이 열간 치환을 선행하고 블록 인터리빙을 수행하는 구조에 대한 논의는 없었다.
여기서, 종래의 인터리빙/디인터리빙 구조에 대한 내용을 살펴보면 다음과 같다.
첫번째는 3개의 메모리를 사용하는 구조로서, 입력되는 데이터를 저장하기 위해 하나의 메모리를 사용하고, 인터리빙/디인터리빙의 순서, 즉 첫번째 메모리를 읽기 위한 주소들을 저장하기 위해 두번째의 메모리를 사용하며, 인터리빙/디인터리빙한 결과를 저장하기 위해서 세번째 메모리를 사용하는 구조이다.
두번째는 첫번째의 구조를 개선한 것으로, 인터리빙/디인터리빙의 순서를 메모리에 저장하는 대신에 계수기와 적절한 연산을 통해 주소를 발생시키는 구조이다. 따라서, 이 구조는 2개의 메모리를 사용하는데 메모리의 용도에 따라 크게 2가지의 구조로 구분할 수 있다. 그 첫째는 입력 데이터를 저장하기 위해 그리고 인터리빙/디인터리빙한 결과를 저장하기 위해 2개의 메모리를 사용하는 것이고, 둘째는 먼저 한개의 메모리에 입력 데이터를 모두 쓰고 나서 인터리빙/디인터리빙의 순서로 읽는다. 이때, 입력되는 데이터 블록은 다른 메모리에 쓴다. 즉, 한 개의 메모리가 쓰기 위해 사용될 때 나머지는 읽기 위해 사용되는데 이러한 동작이 번갈아가며 이루어지는 구조이다.
세번째는 한개의 메모리만을 사용하는 구조로서, 입력된 소스 데이터의 메모리를 2차원으로 접근하여 한번은 행 방향으로 쓰고 열 방향으로 읽으며, 또 한번은 열 방향으로 쓰고 행 방향으로 읽도록 하는 구조이다.
상기와 같은 내용 중에 첫번째와 두번째의 구조는 기능 구현은 쉬우나 384kbps에서 2Mbps에 이르는 높은 데이터 율이 요구되는 응용에서 요구되는 메모리의 크기가 절대적이어서 크기와 전력 소모가 가장 중요한 요소인 단말기와 같은 응용에서는 적절하지 못하지만, 세번째의 구조는 효율적인 구조라 할 수 있다.
그러나, 차세대 이동통신 시스템(IMT-2000)에서의 인터리빙 수행 방법은 단순 블록 인터리빙을 수행하기 전에 열간 치환을 수행하므로 단순히 행과 열을 번갈아가며 쓰고 읽는 방식으로 한개의 메모리를 사용하여 그 동작을 완성할 수 없다. 왜냐하면, 열간 치환이 발생하므로 종래의 단순 블록 인터리빙과 같이 행과 열의 2차원적인 구조가 아닌 행과 열의 구조에 하나의 행을 읽고 쓰는 비선형적인 순서를 따라야 하기 때문이다.
종래의 인터리빙과 디인터리빙의 방법은 프로세싱 타이밍을 고려하여 2개의 메모리를 사용하여 한쪽 메모리에 입력 데이터를 기록하는 동안에 다른 한쪽 메모리에서 기록된 데이터를 읽어내는 방법을 사용하였다. 이 방법은 데이터 율이 낮을 때는 메모리의 크기가 작으므로 면적이나 전력소모의 증가량에 비해 충분한 프로세싱 타이밍을 얻을 수 있는 장점이 강조될 수 있었다. 그러나, 서비스가 다양해지고 그에 따라 전송할 데이터가 늘어남에 따라 이와 비례하여 커지는 메모리의 크기를 고려할 때 2개의 메모리를 사용한다는 것은 더 이상 장점이 될 수 없다. 더구나, IMT-2000 비동기식 모뎀의 규격상 1차 인터리버는 전송 시간간격으로 동작하는데 최대 80ms까지 지원하도록 되어 있어서, 이를 수용하기 위해서는 메모리의 크기가 데이터 율과 전송 시간간격에 비례하여 커져야 하고, 2개의 메모리를 사용한다는 것은 칩을 여러 개로 만들거나 외부의 메모리를 사용할 수 밖에 없다는 결론에 이른다. 그러므로, 모뎀을 한 개의 칩으로 구현할 수 있도록 인터리빙과 디인터리빙을 위한 메모리의 크기를 줄이는 것이 대단히 중요하다. 또한, 이 방법은 종래의 인터리빙 수행 방법과 달리 열간 치환을 선행하므로, 메모리를 한 개만 사용하여 한번은 행을 중심으로 쓰고 열을 중심으로 읽을 때, 다음은 열을 중심으로 쓰는 구조는 IMT-2000 시스템에 적용할 수 없다.
따라서, 이러한 사항을 토대로 볼 때, 한개의 메모리를 사용하여 인터리빙과 디인터리빙을 수행하게 하여 메모리의 크기를 줄임으로써, 높은 데이터 율을 요구하는 서비스가 지원 가능한 모뎀의 원칩화가 가능하도록 하는 방안이 필수적으로 요구된다.
본 발명은, 상기한 바와 같은 요구에 부응하기 위하여 안출된 것으로, 데이터의 연집 오류를 정정하기 위해 사용되는 인터리빙/디인터리빙을 수행함에 있어, 기본적으로 읽혀진 위치에 데이터를 쓰도록 주소를 발생시켜 열간 치환을 복원하고 한 개의 메모리를 사용하여 인터리빙/디인터리빙의 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및 그 방법과 그를 이용한 채널 부호화 시스템과 상기 방법을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는데 그 목적이 있다.
도 1 은 본 발명에 따른 인터리빙을 사용하는 채널 부호화 시스템의 구성예시도.
도 2 는 본 발명에 이용되는 단순 블록 인터리빙 수행 방법의 설명도.
도 3 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치중 인터리빙 수행 장치에 대한 일실시예 구성도.
도 4a 및 도 4b 는 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 쓰기 주소 발생 방법에 대한 일실시예 흐름도.
도 5 는 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 오프셋 발생 방법에 대한 일실시예 흐름도.
도 6 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 읽기 주소 발생 방법에 대한 일실시예 흐름도.
도 7 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 열간 치환을 포함한 블록 인터리빙 수행 방법에 대한 일실시예 설명도.
도 8 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 중 디인터리빙 수행 장치에 대한 일실시예 구성도.
도 9a 및 도 9b 는 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 쓰기 주소 발생 방법에 대한 일실시예 흐름도.
도 10 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 오프셋 발생 방법에 대한 일실시예 흐름도.
도 11 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 읽기 주소 발생 방법에 대한 일실시예 흐름도.
도 12 는 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 열간 치환을 포함한 블록 인터리빙된 데이터의 디인터리빙 수행 과정에 대한 일실시예 설명도.
도 13 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 중 디인터리빙 수행시 읽기/쓰기 동작에 대한 타이밍도.
* 도면의 주요 부분에 대한 부호의 설명
310 : 인터리버 램320,820 : 쓰기 주소 발생기
330,830 : 주소 오프셋 발생기340,840 : 읽기 주소 발생기
350~370, 850~870 : 다중화기810 : 디인터리버 램
상기 목적을 달성하기 위한 본 발명은, 데이터의 연집 오류를 정정하기 위한 인터리빙 수행 장치에 있어서, 쓰기 주소 발생수단 및 제1 및 제2 선택수단으로부터 입력되는 입력 시퀀스를 저장하기 위한 인터리빙 저장수단; 상기 인터리빙 저장수단의 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 상기 쓰기 주소 발생수단; 상기 쓰기 주소 발생수단으로부터 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하기 위한 주소 오프셋 발생수단; 상기 주소 오프셋 발생수단으로부터 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 인터리빙 저장수단을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하기 위한 읽기 주소 발생수단; 상기 쓰기 주소 발생수단 및 읽기 주소 발생수단으로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 선택하기 위한 상기 제1 및 제2 선택수단; 및 상기 읽기 주소 발생수단으로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하기 위한 제3 선택수단을 포함하여 이루어진 것을 특징으로 한다.
또한, 본 발명은,데이터의 연집 오류를 정정하기 위한 디인터리빙 수행 장치에 있어서, 쓰기 주소 발생수단 및 제1 및 제2 선택수단으로부터 입력되는 프레임의 심벌을 저장하기 위한 디인터리빙 저장수단; 상기 디인터리빙 저장수단의 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 상기 쓰기 주소 발생수단; 상기 쓰기 주소 발생수단으로부터 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하기 위한 주소 오프셋 발생수단; 상기 주소 오프셋 발생수단으로부터 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의오프셋(RD_OFF)만큼씩 증가시키고, 상기 디인터리빙 저장수단을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하기 위한 읽기 주소 발생수단; 상기 쓰기 주소 발생수단 및 읽기 주소 발생수단으로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하기 위한 상기 제1 및 제2 선택수단; 및 상기 읽기 주소 발생수단으로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하기 위한 제3 선택수단을 포함하여 이루어진 것을 특징으로 한다.
또한, 본 발명은, 데이터의 연집 오류를 정정하기 위해 사용되는 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템에 있어서, 외부로부터 입력되는 소스의 데이터 열을 부호화하기 위한 부호화수단; 상기 부호화수단으로부터 전달되는 데이터에 대하여 열간 치환을 포함한 블록 인터리빙을 수행하기 위한 인터리빙 수단; 상기 인터리빙 수단을 통해 블록 인터리빙된 데이터를 변조하여 채널을 통해 송신하는 변조수단; 상기 변조수단을 통해 변조된 블록 인터리빙된 데이터를 수신하여 복조하기 위한 복조수단; 상기 복조수단을 통해 복조된 상기 블록 인터리빙된 데이터에 대하여 열간 치환을 포함한 블록 디인터리빙을 수행하기 위한 디인터리빙 수단; 및 상기 디인터리빙 수단을 통해 디인터리빙된 데이터를 복호화하기 위한 복호화수단을 포함하여 이루어진 것을 특징으로 한다.
또한, 본 발명은, 데이터의 연집 오류를 정정하기 위한 인터리빙 수행 장치에 적용되는 인터리빙 수행 방법에 있어서, 쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 입력 시퀀스를 저장하는 제 1 단계; 상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 단계; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하는 제 3 단계; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 단계; 상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 각각 선택하는 제 5 단계; 및 상기 읽기 주소 발생기로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하는 제 6 단계를 포함하여 이루어진 것을 특징으로 한다.
또한, 본 발명은, 데이터의 연집 오류를 정정하기 위한 디인터리빙 수행 장치에 적용되는 디인터리빙 수행 방법에 있어서, 쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 프레임의 심벌을 저장하는 제 1 단계; 상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 단계; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하는 제 3 단계; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 디인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 단계; 상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하는 제 5 단계; 및 상기 읽기 주소 발생기로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하는 제 6 단계를 포함하여 이루어진 것을 특징으로 한다.
또한, 본 발명은, 데이터의 연집 오류를 정정하기 위한 인터리빙/디인터리빙 수행 장치에 적용되는 인터리빙/디인터리빙 수행 방법에 있어서, 인터리빙/디인터리빙을 수행하기 위한 소스데이터(인터리빙)의 프레임(블록) 또는 인터리빙된 데이터(디인터리빙) 프레임(블록)을 처리하기 위해 인터리빙/디인터리빙 처리 단위별로 메모리에 저장하고, 저장된 프레임을 이전 프레임이라고 하면, 이전 프레임을 인터리빙/디인터리빙하는 동안에 다시 다음 프레임에 해당하는 심벌이 입력되어 이를 저장할 수 있도록 하는 상기 메모리를 필요로 하며, 다음 프레임에 해당하는 심벌을 위해 상기 메모리를 추가하지 않고, 이전 프레임의 심벌이 읽혀진 위치를 따라기록하는 것을 특징으로 한다.
또한, 본 발명은, 데이터의 연집 오류를 정정하고, 하나의 메모리만을 사용하여 인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록할 수 있도록 하기 위하여, 프로세서를 구비한 인터리빙 수행 장치에, 쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 입력 시퀀스를 저장하는 제 1 기능; 상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 기능; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하는 제 3 기능; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 기능; 상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 각각 선택하는 제 5 기능; 및 상기 읽기 주소 발생기로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하는 제 6 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
또한, 본 발명은, 데이터의 연집 오류를 정정하고, 하나의 메모리만을 사용하여 디인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록할 수 있도록 하기 위하여, 프로세서를 구비한 디인터리빙 수행 장치에, 쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 프레임의 심벌을 저장하는 제 1 기능; 상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 기능; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하는 제 3 기능; 상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 디인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 기능; 상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하는 제 5 기능; 및 상기 읽기 주소 발생기로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하는 제 6 기능을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
본 발명에서 열간 치환을 복원하며 한개의 메모리를 사용하는 구조는 기본적으로 한 개의 메모리를 사용하여 인터리빙/디인터리빙의 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 방법을 사용하는데, 다음의 세가지 내용에 주안점을 두어 살펴보면, 첫째로 읽혀져 나가는 순서에 따라 그 위치에 쓰기 동작이 이루어지므로 다음에 읽는 순서와 변위에 대한 연산이 필요하며, 또한 열간 치환을 복원하기 위한 오프셋을 계산하는 연산이 필요하고, 둘째로 프로세싱 타이밍을 최대한 확보하는 방법으로, 첫번째에서 오프셋을 계산하기 위해 필요한 연산을 빠르게 수행할 수 있는 하드웨어의 구조와 동시에 수행할 수 있는 연산을 병렬로 수행하게 하는 구조가 필요하며, 셋째로 데이터 율이 변하게 되는 경우, 즉 입력되는 데이터 블록의 크기가 변하는 경우에 대한 고려가 필요한 것을 특징으로 한다.
상술한 목적, 특징들 및 장점은 첨부된 도면과 관련한 다음의 상세한 설명을 통하여 보다 분명해 질 것이다. 이하, 첨부된 도면을 참조하여 본 발명에 따른 바람직한 일실시예를 상세히 설명한다.
도 1 은 본 발명에 따른 인터리빙을 사용하는 채널 부호화 시스템의 구성예시도이다.
도 1에 도시된 바와 같이, 이동통신 채널을 통해 진행되는 신호는 페이딩의 영향을 받게 된다. 에러 정정 알고리즘을 사용하게 되면 적정 신호전력을 사용하여 페이딩에 의한 에러를 복원할 수 있다. 즉, 대부분의 에러 정정 알고리즘은 랜덤 오류에 강하다. 그러나, 연집 에러 발생시 에러 정정의 효율은 크게 떨어진다. 이러한 특징을 고려하여 채널에 의해 발생할 연집 에러를 막기위해 부호화된 데이터열을 받아서 그것을 미리 혼화시키고, 수신측에서는 디코딩하기 전에 수신한 데이터 열을 역혼화시키는 동작을 수행하여 랜덤 에러화시키도록 하는 것이 인터리빙과 디인터리빙의 주된 기능이다.
따라서, 인터리빙과 디인터리빙을 사용한 채널 부호화 시스템은 도 1에서 보여주듯이 입력되는 소스의 데이터 열이 길쌈 부호화나 터보 부호화를 사용하는 부호화기(110)를 통해 부호화되고, 인터리버(120)를 통하여 인터리빙이 수행되며, 변조기(130)를 통해 적절한 방법으로 변조되어 채널(140)을 통해 송신된다. 그러면, 송신된 데이터를 수신하여 복조기(150)를 통하여 복조되고, 디인터리버(160)에서 디인터리빙을 수행한 후에 복호화기(170)를 통해 송신쪽의 소스 데이터를 복원한다.
도 2 는 본 발명에 이용되는 단순 블록 인터리빙 수행 방법의 설명도이다.
도 2에 도시된 바와 같이, 소스심벌(210)에서는 인터리빙 전의 심벌들을 S0, S1, S2, S3,… SN-1로 나타낸다. 그리고, 쓰기 오퍼레이션(Write Operation)(220)에서는 소스 심벌(210)을 행을 기준으로 기록한 동작을 화살표를 통해 나타내었고, 그 결과 소스 심벌(210)을 2차원의 배열로 나타내었다. 이때, 열의 수를 C로, 행의 수를 B로 가정하면 "N = C * B"의 관계가 성립된다. 그런 다음 인터리빙을 수행하는데 열을 중심으로 읽으면 된다. 읽는 순서를 읽기 오퍼레이션(Read Operation)(230)에 화살표를 통해 나타내었고, 인터리빙을 수행한 후에 심벌의 순서를 인터리빙된 심벌(240)에 나타낸다.
전술한 바와 같이, 차세대 이동통신 시스템(IMT-2000)에서는 이러한 블록 인터리빙을 수행하기에 앞서 열간 치환을 수행한다. 즉, 인터리빙을 위해 열을 중심으로 읽는데 읽혀나가는 열의 순서가 순차적이지 않고 미리 정의된 순서를 따른다.
이에 대한 보다 자세한 설명을 위해 차세대 이동통신 시스템(IMT-2000)에서 사용되는 인터리빙을 수행하는 방법에 대해 살펴보면 다음과 같다.
IMT-2000에서는 두 가지의 인터리빙 수행 방법을 사용하지만 본 발명에서는 그 중에서 1차 인터리버의 특징을 살펴보기로 한다.
1) TTI에 따라 다음의 표 1에서 열의 수를 선택
2) 행의 수는 입력되는 전체 비트 수를 열의 수로 나눈다.
3) 결정된 행과 열에 맞춰 행을 기준으로 입력시퀀스를 기록한다.
4) 하기에 도시된 [표1]의 1차 인터리빙을 위한 열간 치환패턴을 나타낸 바와 같이 열간 치환을 수행한 순서로 읽는다.
상기의 [표1]에 도시된 바와 같이, 일반적인 블록 인터리빙의 방법을 수행하기 전에 열간 치환을 수행한다. 즉, TTI가 40ms인 경우에 인터리빙을 위해 읽혀지는 열의 순서는 0번째 열, 2번째 열, 1번째 열, 그리고 마지막으로 3번째 열이 된다.
한편, 본 발명에서 사용되는 용어와 매개변수들을 정의하면 다음과 같다.
- 프레임 : 한번의 인터리빙/디인터리빙을 수행하기 위한 데이터 블록의 단위.
- N : 한 프레임에 포함된 심벌 수, 표 1에서는 TTI당 심벌의 수.
- C : 열의 수, 상기의 [표1]에서는 TTI에 의하여 결정됨.
- B : 하나의 열에 포함되는 심벌의 수, N/C.
- MAX_B : 하나의 열에 포함되는 최대 심벌의 수, 초기값은 0이고 이후에B의 값과 비교하여 갱신됨.
- WR_IDX : 현재 입력되는 심벌이 쓰여질 메모리의 위치.
- WR_OFF : 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간의 오프셋.
- JMP_OFF : 데이터 율이 줄어드는 경우에 쓰이지 않는 영역을 건너 뛰도록 하는 매개변수.
- MID_OFF : RD_OFF를 구하기 위해 사용되는 중간값으로 N과 비교하여 크거나 같은 경우에 "modulo" 연산을 취하고 작은 경우에는 그 값이 바로 RD_OFF가 됨.
- RD_IDX : 현재 읽어질 심벌의 메모리 위치.
- RD_OFF : 연속하여 읽어질 심벌의 메모리 위치간의 오프셋.
- COL_OFF : 열간 치환을 위해 사용되는 매개변수.
- DIFF_COL_IDX : COL_OFF를 계산하기 위해 필요한 열 인덱스간의 차이 값.
위의 정의에 의하여 한 프레임에 입력되는 심벌의 인덱스를 0, 1, 2, …, N-1로 나타낼 수 있고, 첫번째 입력 심벌의 인덱스가 0이고 마지막 심벌의 인덱스를 N-1이라 하면 이들은 순차적으로 인터리버 메모리에 쓰여진다.i번째 인터리버의 출력을 "DOUT(i)"이라 하면 다음의 [수학식1]과 같이 나타낸다.
))(0 ≤ i ≤ N-1)
단, 여기서 2M은 앞에서 정의한 열의 수인 C와 같고,는 x보다 작거나 같은 가장 큰 정수를 의미하며, BROM(y)는 y를 M비트로 확장하여 비트의 순서를 바꾸는 연산이다. 상기의 [수학식1]은 1차 인터리빙과 같이 열의 수가 2의 지수승으로 나타낼 수 있는 경우에만 적용 가능하다. 그러나, 2차 인터리버의 경우에는 열의 수가 30으로 고정되어 있으므로 상기의 [수학식1]로 정의할 수 없다. 그러므로, 보다 나은 일반화를 위해 다음의 수식과 같이 나타내보자.
for i in 0 to (N-1) loop
if i = 0 then
j <= 0;
elsif (i mod B) /= 0 then
j <= j + C; (1)
else
j <= j + C + DIFF_COL_IDX;(2)
end if;
if j>N-1 then
j <= j - (N-1);
end if;
DOUT(i) <= SOURCE(j);
end loop;
여기서, (1)와 (2)"의 식을 통해 열의 수인 C가 오프셋으로 작용하며, 열이 바뀔 때 열간 치환이 발생하기 때문에 DIFF_COL_IDX값이 더해짐을 알 수 있다. 이때 DIFF_COL_IDX는 다음의 [수학식2]와 같이 구해진다.
DIFF_COL_IDX = REAL_COL_IDX - (PRE_COL_IDX + 1);
여기서, PRE_COL_IDX는 이전에 기록한 열의 인덱스를 나타내고 REAL_COL_IDX는 열간 치환 후에 열의 인덱스를 나타낸다. 즉, 상기 [표1]의 예에서 만약 TTI가40ms라면 열의 수는 4가 되고, 열간 치환을 수행하고 난 후의 열의 순서는 0 -> 2 -> 1 -> 3열이 된다. 그래서, 첫번째 열인 0-열이 입력된 후에 1-열이 아니라 2-열이 입력된다. 이때, DIFF_COL_IDX는 "2 - (0 + 1) = 1"이 된다. 이러한 방법으로 인터리빙된 후의 심벌 인덱스와 인터리빙 전의 심벌 인덱스간의 관계를 알 수 있다.
본 발명을 통해 인터리빙과 디인터리빙을 위한 효율적인 주소 발생기를 사용하게 되면 다양한 서비스를 지원하는 IMT-2000용 모뎀에 있어서 요구되는 메모리의 크기를 약 40% 정도 줄일 수 있다. 왜냐하면 1차 인터리버와 디인터리버의 메모리 크기가 80ms의 TTI를 지원할 경우 요구되는 다른 메모리들과 비교하여 절대적인 크기를 갖기 때문이다.
다음의 [표2]는 3G TS 25.101 규격 문서를 참고로 데이터 율이 384kbps이고 TTI가 80ms일 때 제안한 구조와 종래의 방법을 사용한 경우에 메모리 크기를 비교한 것이다.
상기의 [표2]를 통해 알 수 있듯이, IMT-2000의 1차 디인터리버에서 요구되는 메모리의 크기를 크게 줄임으로 인하여 단말기측 모뎀은 원 칩화를 이룰 수 있고 기지국 쪽은 보다 많은 채널을 하나의 칩에 수용할 수 있다.
도 3 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치중 인터리빙 수행 장치에 대한 일실시예 구성도로서, 열간 치환을 포함한 블록 인터리빙을 수행하기 위한 것이다.
도 3에 도시된 바와 같이, 열간 치환을 포함한 블록 인터리빙 수행 장치는, 입력 시퀀스를 저장하기 위한 인터리버 램(310)과, 인터리버 램(310)의 메모리 블록에 쓰기 동작을 수행하기 위해 필요한 WR_OFF를 구하고 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 쓰기 주소 발생기(320)와, 쓰기 주소 발생기(320)로부터 MID_OFF 및 cal_start 신호를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 RD_OFF와 열간 치환을 위해 필요한 COL_OFF를 발생하기 위한 주소 오프셋 발생기(330)와, 주소 오프셋 발생기(330)로부터 발생된 신호를 RD_OFF 만큼씩 증가시키고 인터리버 램(310)을 읽기 위해 주소를 만들고 메모리 제어 신호를 발생하기 위한 읽기 주소 발생기(340)와, 쓰기 주소 발생기(320) 및 읽기 주소 발생기(340)로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 선택하기 위한 다중화기(350,360)와, 읽기 주소 발생기(340)로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하기 위한 다중화기(370)를 구비한다.
상기한 바와 같은 구조를 갖는 본 발명의 열간 치환을 포함한 블록 인터리빙 수행 장치의 동작을 상세하게 설명하면 다음과 같다.
먼저, 쓰기 주소 발생기(320)는 이는 후술되는 도 4a 및 도 4b의 흐름도에 나타낸 동작을 수행하는 블록으로서, 마이크로프로세서나 또는 다른 외부의 인터페이스를 통해 현재 입력되는 프레임에 대한 정보를 입력받아 저장하는 레지스터 집합이 필요하다. 이 레지스터 집합에 프레임 크기나 열의 수 또는 여기의 예에서는 TTI등이 기록된 후에 매개변수를 초기화시키고, RD_OFF과 COL_OFF을 구하기 위해 주소 오프셋 발생기(330)로 MID_OFF과 cal_start 신호를 전송한다. 그리고, 첫번째 열의 시작을 알리는 frame_sync 신호를 입력받고 첫 심벌을 기록하기 위해 인터리버 램(310)으로부터 해당 주소인 0번지를 읽어 온다. 물론, 이때 다중화기(350,360)는 메모리 제어 신호인 wr_rdb와 wr_adr 신호를 선택하고, 인터리버 램(310)으부터 읽어온 데이터와 wr_strobe 신호를 확인 후에 입력받은 입력(input)신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해 입력신호에 따라 논리합 또는 논리곱을 수행한 후에 다시 메모리 블록의 0번지에 기록한다. 이후, 두번째의 심벌을 기록하기 위해서 먼저 해당 주소를 읽어오고 wr_strobe 신호를 확인한 후에 입력받은 두번째 입력(input)신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해 입력신호에 따라 논리합 또는 논리곱을 수행하고 다시 인터리버 램(310)에 기록한다. 쓰기 주소 발생기(320)에서는 이와 같은 동작이 반복적으로 발생하여 한 프레임의 심벌을 모두 기록하고 나면 읽기 주소 발생기(340)로 인터리빙을 수행해도 된다는 신호인 rd_start 신호를 발생시킨다.
그리고, 주소 오프셋 발생기(330)는 후술되는 도 5의 흐름도와 같은 동작을 수행하는 블록으로서, 전술한 바와 같이, MID_OFF을 받아서 이 값이 N보다 크거나 같으면 "modulo" 연산을 취하여 RD_OFF을 만들고 N보다 작으면 MID_OFF이 바로 RD_OFF이 된다. 이렇게, RD_OFF이 구해지면 열간 치환을 위한 COL_OFF을 구한다. RD_OFF과 COL_OFF이 모두 구해지면 읽기 주소 발생기(340)에 해당 값을 넘겨주기 위해 cal_done 신호를 전송한다.
그리고, 읽기 주소 발생기(340)는 후술되는 도 6의 흐름도에 나타낸 동작을 수행하는 블록으로서, 쓰기 주소 발생기(320)로부터 인터리빙을 수행해도 된다는 rd_start 신호를 입력받아 RD_OFF과 COL_OFF를 전송받으면 바로 인터리빙을 위한 메모리 읽기 동작이 시작된다. 전술한 바와 같이, RD_IDX를 RD_OFF 만큼씩 선형적으로 증가시키며, 디인터리버 메모리를 읽어서 인터리빙을 수행하는데, 단 열이 변할 때 열간 치환을 위해 COL_OFF이 더해져야 하고, 또한 데이터 율이 감소할 때는 실제 쓰여지지 않은 영역은 건너뛰도록 RD_IDX에 JMP_OFF을 더해준다. 이와 같은 읽기 동작모드에서는 다중화기(350,360)를 통해 메모리 제어신호를 rd_rdb와 rd_adr을 선택한다. 만약, 쓰기 동작과 동시에 읽기가 수행된다면 읽기 동작은 rd_strobe 신호를 확인하고 동작을 수행해야 한다.
또한, 쓰기 주소 발생기(320)와 주소 오프셋 발생기(330) 및 읽기 주소 발생기(340)의 구체적인 동작에 대한 설명은 후술되는 도 4a 및 도 4b 내지 도 6에서 자세하게 설명하도록 한다.
이러한 사항을 바탕으로 하는 인터리빙 수행 장치는, 종래의 두개의 메모리를 사용하는 구조와는 달리 한개의 메모리만을 사용하며, 또한 종래의 한개의 메모리만을 사용하는 구조가 단순 블록 인터리빙만을 지원하는 것과 달리 단순 블록 인터리빙뿐만 아니라 열간 치환을 선행하는 블록인터리빙도 동일한 구조로 수행할 수 있다.
도 4a 및 도 4b 는 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 인터리빙을 위한 쓰기 주소 발생 방법에 대한 일실시예 흐름도로서, 첫번째 프레임이 어떻게 쓰여지고 읽혀지는지에 대해 살펴보도록 한다.
도 4a 및 도 4b에 도시된 바와 같이, 먼저 5개의 매개변수를 초기화한다(410). 첫번째 프레임이 쓰여질 때 인터리버 램(310)은 의미없는 데이터들로 채워져 있으므로 어느 위치이건 쓸 수 있다. 상기에서도 정의했듯이 연속하여 입력되는 두 심벌들을 인터리버 램(310)에 쓰기 위한 메모리의 위치간 오프셋을 WR_OFF이라 하면, 처음 프레임을 위한 WR_OFF은 임의의 값을 가질 수 있으나 구현상 용이하게 하기 위하여 (410)과정에 나타낸 바와 같이 1로 초기화한다. 그리고, i는 입력되는 심벌의 수를 계수하기 위한 매개변수로서 0으로 초기화된다. 나머지 MID_OFF과 MAX_B 그리고 JMP_OFF를 이용하여 서브_오프셋(Sub_offset)을 계산(calculation)하여 cal_start를 1로 나타내면, RD_OFF과 COL_OFF이 구해지는데 이들은 읽기 동작을 위해 사용되는 매개변수이므로 읽기 동작의 설명인 도 5에서 다루도록 한다.
이상과 같이 매개변수가 초기화되면 첫번째 프레임에 대한 frame_sync 신호가 1인지를 확인하여(421) 1이 아니면 frame_sync 신호가 1이 될 때까지 반복 수행하고, frame_sync 신호가 1이면 해당 메모리를 읽는다(430).
여기서, frame_sync 신호란 인터리빙을 위한 한 프레임의 데이터가 입력됨을 나타내는 일종의 동기를 맞추는 신호라고 볼 수 있다. 기본적으로 메모리를 하나만 사용하므로 현재 입력되는 심벌이 쓰여질 위치를 포함한 주소를 먼저 읽어와서 그 위치의 데이터만 현재 입력된 심벌로 덮어써야 한다. 따라서, 이를 위해 해당 메모리를 읽은 후(430)에 wr_strobe 신호가 1인지를 확인하여(431) 1이 아니면 wr_strobe 신호가 1이 될 때까지 기다리고, wr_strobe 신호가 1이면 입력된 심벌만 쓰여지도록 마스크를 만든다(440). 즉, 입력된 심벌이 쓰여질 위치의 데이터만 덮어쓰기 위하여 마스크를 만든다. 여기서, wr_strobe 신호는 입력 심벌이 유효한지를 나타내주는 제어 신호라고 볼 수 있다. 그리고, 마스크는 입력 심벌이 0이면 그 심벌이 쓰여질 위치만 0으로 하고 나머지는 1로 만들어 해당 메모리를 읽는 과정(430)에서 읽어온 데이터와 논리곱을 수행시키고, 입력 심벌이 1이면 그 심벌이 쓰여질 위치만 1로 하고 나머지는 0으로 하여 해당 메모리를 읽는 과정(430)에서 읽어온 데이터와 논리합을 수행하는 방법으로 해당 위치의 심벌만 덮어쓰도록 한다.
여기서, 고려해야할 사항은 입력되는 심벌들을 메모리에 쓰는 동작과 이미 쓰여진 즉, 이전 프레임의 심벌을 읽는 동작이 겹치는가 하는 것으로서 2가지의 사항을 생각해 볼 수 있다. 그 첫번째는 메모리를 듀얼 포트 램(Dual Port RAM)을 사용할 것인가에 대한 고려이고, 두번째는 싱글 포트 램(Single Port RAM)을 사용하는 경우에 읽기와 쓰기 동작 간의 관계에 대한 고려이다. 여기서, 듀얼 포트램(Dual Port RAM)을 사용하게 되면 읽기와 쓰기가 각각 독립적으로 동작하기 때문에 제어가 용이하고 보다 큰 타이밍 마진을 얻을 수 있지만 면적이 커지고 전력소모량이 많아지는 단점이 있다. 그러므로, 타이밍이 부족하지 않다면 싱글 포트 램(Single Port RAM)을 사용하는 것이 더욱 효율적이라 할 수 있다.
먼저, 메모리를 읽는 동작과 쓰는 동작이 분리될 수 있는 경우에는 하나의 프레임을 모두 기록한 후에 그 프레임을 인터리빙하기 위해 읽고 읽혀진 자리에 다음 프레임의 데이터를 기록하면 되므로 이 경우에는 싱글 포트 램(Single Port RAM)을 사용하여 쉽게 구현 가능하다.
둘째로 메모리를 읽는 동작과 쓰는 동작이 분리될 수 없는 경우인데 이는 2차 인터리버의 경우에는 필연적이라 할 수 있다. 왜냐하면 변조기에 넘겨주는 타이밍이 전송할 데이터가 있는 동안에는 전구간에 걸쳐 규칙적으로 발생해야 하므로 이전 프레임의 데이터를 빠른 시간에 읽어 낼 수 없다. 즉, 이전 프레임을 인터리빙하기 위한 읽기 동작 수행 중에 다음 프레임의 데이터가 입력될 때 어떻게 처리할 것인가에 관한 문제이다. 일반적으로 내부적으로 수행되는 동작의 수행 속도가 빠르다고 가정할 수 있으나 최악의 경우에 읽기와 쓰기의 동작 속도가 동일하다면 2개의 동작을 번갈아가며 수행하도록 해야 한다. 이러한 경우에는 프로세싱 타이밍에 따라 듀얼 포트 램(Dual Port RAM)을 사용하거나 싱글 포트 램(Single Port RAM)을 사용하기 위해서는 쓰는 동작과 읽는 동작이 번갈아 일어나도록 타이밍을 분할하는 제어가 필요하다.
후술되는 도 4a 및 도 4b는 이러한 동작을 고려한 것이다. 따라서, 입력된심벌만 쓰여지도록 마스크를 만드는 과정(440)에서 rd_strobe 신호가 1이 되는 것은 이 때에 읽기 동작이 가능함을 나타내는 신호라고 볼 수 있다. 결국, 해당 메모리를 읽는 과정(430)에서 쓰기 동작을 수행하기 위해 해당 주소를 한번 읽고, (440)과정에서 입력된 심벌만 쓰여지도록 마스크를 만들면서 실제 인터리빙을 위한 읽기 동작이 동시에 수행되도록 하고, (450)과정에서는 상기에서 만들어진 마스크와 해당 메모리를 읽는 과정(430)에서 읽어온 데이터간에 논리합이나 논리곱을 수행하여 그 결과를 메모리에 쓰고, 다음 심벌을 기록하기 위한 위치 정보인 WR_IDX를 WR_OFF 만큼 증가시킨다. 그리고, 프레임에 해당하는 심벌 전체를 메모리에 기록했는지를 확인하여 한 프레임의 심벌을 모두 기록하지 못한 경우, 즉 i가 N-1보다 작은 경우에는 해당 메모리를 읽는 과정(430)부터 반복 수행하고, i가 N-1보다 크거나 같을 경우에는 두번째 프레임을 위한 매개 변수를 구하는 과정에서 설명하도록 한다.
지금까지 살펴본 첫번째 프레임의 기록을 위해 필요한 매개변수의 수식을 요약하면 다음과 같다.
Initial value:
WR_OFF <= 1;
WR_IDX <= 0;
Computed value:
for i in 0 to (N-1) loop
if i=0 then
WR_IDX <= 0;
else
WR_IDX <= WR_IDX + WR_OFF;
end if;
if WR_IDX ≥N then
WR_IDX <= WR_IDX - (N-1);
end if;
end loop;
한편, 첫번째 프레임이 쓰여지는 실시예는 도 7의 (740)과정과 같다. 여기서, "src index"는 소스 데이터(720)의 인덱스를 나타내고, "mem index"는 인터리버 램(310)의 인덱스를 나타내는데, 여기서 인터리버 램(310)의 데이터 폭을 8비트로 가정하면 "mem index"의 최하위 3비트가 그 8비트 중에 한 비트를 선택하기 위한 인덱스(index)가 되고, 나머지는 실제 메모리의 주소가 된다. WR_OFF이 1이므로 WR_IDX가 선형적으로 1만큼씩 증가하면서 입력되는 소스 심벌을 인터리버 램(310)에 기록한다.
이제, 첫번째 프레임을 위한 매개변수가 어떻게 구해지고 첫번째 프레임이 어떻게 읽혀지는지를 살펴보도록 한다. 먼저, 읽기 동작을 위해 필요한 매개변수는 다음과 같이 초기화된다. 도 4a 및 도 4b의 (410)과정에서 초기화된 MID_OFF란 연속으로 읽혀져 나갈 두 심벌의 메모리 위치간의 오프셋을 나타내는 RD_OFF을 구하기 위해 사용되는 값으로서, 도 5에 나타낸 것과 같이 필요에 따라 "modulo" 연산을 취하여 RD_OFF가 되는데, 실제로는 (491)과정에서 보여지듯이 WR_OFF와 열의 수인 C의 곱으로 나타낼 수 있다. WR_OFF의 초기값이 1이므로 MID_OFF은 C가 되며 N보다 작은 값이므로 이 값이 곧 RD_OFF가 된다. 이때, 만약 TTI가 10ms라면 [표1]을 통해 알 수 있듯이 인터리빙이 수행되지 않으므로 이 경우는 MID_OFF가 1이 된다. 데이터 율이 변하는 경우를 고려하기 위한 변수로서 MAX_B와 JMP_OFF가 있는데, 이들 모두 초기값은 0이고 프레임 단위로 갱신된다. MAX_B의 값은 B의 값과 비교하여 큰 값으로 갱신되며, JMP_OFF는 B가 큰 값에서 작은 값으로 변할 때, 즉 데이터 율이 감소할 때 이전 프레임에 비해 심벌의 수가 줄어들므로 실제 쓰여지지 않는 영역이 발생하는데 읽기 동작 수행시에 이 영역을 건너뛰도록 하기 위해 이 오프셋만큼 인덱스를 증가시켜서 데이터 율이 변하더라도 동일한 흐름으로 제어가 가능하게 만들어준다. 따라서, (420)과정에서는 크게 2가지의 동작을 수행하는데 이에 대한 동작의 흐름도는 후술되는 도 5와 같다.
첫번째는, MID_OFF가 프레임내의 심벌 수인 N보다 작은지를 확인하여(510) MID_OFF가 N보다 크거나 같으면 필요에 따라 "modulo"연산을 취하여 RD_OFF을 구하고(520), MID_OFF가 N보다 작으면 MID_OFF가 바로 RD_OFF가 된다. 이것을 수식으로 나타내면 다음과 같다.
MID_OFF <= WR_OFF ⅹ C;
if MID_OFF < N then
RD_OFF <= MID_OFF;
else
RD_OFF <= MID_OFF mod (N-1);
end if;
두번째는, COL_OFF를 구하는데, COL_OFF는 열간 치환을 수행하기 위해 필요하고 다음의 수식과 같이 구해진다.
COL_OFF <= DIFF_COL_IDX ⅹ WR_OFF; (3)
if COL_OFF≥N then
COL_OFF <= COL_OFF mod (N-1); (4)
end if;
이어서, [표1]에서 TTI가 10ms나 20ms인 경우와 같이 열간 치환을 수행할지를 판단하여(540) 수행하지 않을 경우에는 COL_OFF가 0이 되고(550), 열간 치환이 수행될 경우에는 상기의 수식(3) 또는 (560)과정에 나타낸 것과 같이 COL_OFF를 구한다. 이때, COL_OFF 값이 N보다 큰지를 확인하여(570) 크거나 같으면 상기의 수식식(4) 또는 (580)과정과 같이 "modulo" 연산을 취한다.
여기서, 주목할 것은 도 5에서 구해지는 RD_OFF나 COL_OFF는 프레임이 기록되는 것과는 관계가 없고, 읽기 동작 수행시에 사용되므로 입력되는 프레임 데이터를 기록하기 전에 도 5에서 수행되는 연산이 끝날 필요는 없다. 즉, 프레임 데이터가 기록되는 동작과 RD_OFF와 COL_OFF를 구하는 동작이 병렬로 수행할 수 있다는 것이다. 지금까지 살펴본 첫 프레임을 읽기 위해 필요한 매개변수의 수식을 요약하면 다음과 같다.
Initial value:
JMP_OFF <= 0;(5)
MID_OFF <= C;(6)
Computed value:
RD_OFF <= MID_OFF;(7)
COL_OFF <= WR_OFF ⅹ DIFF_COL_IDX;(8)
한편, 상기 도 4a 및 도 4b와 도 5를 통해 쓰여진 심벌을 인터리빙 순서로 읽어내는 방법을 나타내면 후술되는 도 6과 같다. 도 6은 도 4a 및 도 4b의 rd_start가 발생하는 과정(460)을 설명하는 것으로, 즉 도 5에서 구한 RD_OFF를 (610)과정에서 래치하여 인터리빙하는 심벌의 수를 계수하기 위한 변수로서 j를 0으로 초기화한다(610). 이 예에서는 싱글 포트 램(Single Port RAM)을 사용하고 읽기와 쓰기가 동시에 발생할 수 있으며 쓰기 동작에 우선 순위가 있는 경우이다.
이후, 먼저 쓰기 동작이 수행 중인지를 확인하여(620) 읽기 동작이 수행 중이면 바로 메모리를 인터리빙의 순서로 읽으면 되지만(640), 쓰기 동작이 수행중이면 도 4a 및 도 4b의 (440)과정에서 넘겨주는 rd_strobe 신호가 1인지를 확인하여(630) 1이 아니면 rd_strobe 신호가 1이 될 때까지 기다리고, rd_strobe 신호가 1이면 메모리를 인터리빙의 순서로 읽는다(640). 이후, 프레임에 해당하는 심벌을 모두 인터리빙의 순서로 읽었는지를 확인하기 위해 j와 N-1을 비교한다(650).
비교결과, j가 N-1보다 작은 경우, 즉 아직 인터리빙을 수행해야 하는 심벌이 남아있다면, 다음 심벌을 읽기 위해 RD_IDX를 RD_OFF 만큼 증가시키고 j는 1만큼 증가시킨 후에(660), 열이 바뀌는지를 확인하기 위해 j를 B-1로 "modulo"연산을 취한다(670). 확인결과, 그 결과값이 '0'이면, 즉 열이 바뀌는 경우에는 열간 치환 동작이 일어나도록 RD_IDX에 COL_OFF만큼 증가시켜준다(680). 물론, 첫 프레임이기 때문에 JMP_OFF은 초기값인 0이다. 그 이후에 현재 쓰기 동작이 진행 중인지를 확인하는 과정(620)으로 넘어가고, 결과값이 '0'이 아니면 바로 쓰기 동작이 진행 중인지를 확인하는 과정(620)으로 넘어간다.
여기서 메모리를 읽기 위해 즉, 인터리빙을 위해 사용되는 RD_IDX는 다음과 같은 수식으로 나타낼 수 있다.
for j in 0 to (N-1) loop
if j=0 then
RD_IDX <= 0;
elsif (j mod B)/=0 then
RD_IDX <= RD_IDX + RD_OFF;
else
RD_IDX <= RD_IDX + RD_OFF + COL_OFF + JMP_OFF;
end if;
if RD_IDX ≥N then
RD_IDX <= RD_IDX - (N-1);
end if;
end loop;
이제, 두번째 프레임을 쓰기 위한 매개변수가 어떻게 계산되고, 이 프레임이 어떻게 기록되는지를 살펴보도록 한다.
첫번째 프레임 전체를 기록하였으면 (460)과정에서 그 프레임의 인터리빙을 위해 읽기 동작을 수행해도 된다는 의미의 rd_start 신호를 1로 만들고 (470)에서 두번째 프레임에 대한 정보를 입력 받을 때까지 기다린다.
두번째 프레임에 대한 정보를 받고 난 후에 두번째 프레임을 위한 매개변수를 재정의하는데 첫번째 프레임의 읽어 나가는 순서로 쓰여져야 하기 때문에 첫번째 프레임의 RD_OFF가 두번째 프레임의 WR_OFF가 된다(471). 그 후에 두번째 프레임을 읽기 위해 필요한 매개변수를 구하는데, 이는 두번째 프레임의 읽기 동작을 설명할 때 설명하도록 한다.
이렇게, 두번째 프레임을 위한 매개변수를 구한 다음 (421)과정에서 다음 프레임의 시작을 나타내는 frame_sync 신호를 기다린다. 여기서, 두번째 프레임을 쓰기 위해 필요한 매개변수와 실제 쓰기 동작 수행 중에 WR_IDX의 연산이 어떻게 이루어지는지를 수식으로 나타내면 다음과 같다.
WR_OFF <= RD_OFF;(9)
for i in 0 to (N-1) loop
if i=0 then
WR_IDX <= 0;
else
WR _IDX <= WR_IDX + WR_OFF;
end if;
if WR_IDX ≥N then
WR_IDX <= WR_IDX - (N-1);
end if;
end loop;
이제, 두번째 프레임을 읽기 위한 매개변수가 어떻게 계산되는지를 살펴보도록 한다.
먼저, 데이터 율이 변했는지를 확인(MAX_B > B)하는데(480) 만약, 변화가 없거나 증가하면 MAX_B는 다음 프레임의 하나의 열에 포함된 심벌의 수인 B로 갱신되고 JMP_OFF은 0이 되며(782), 감소하면 MAX_B는 변함이 없고 JMP_OFF를 구한다(481). 이때, JMP_OFF와 N을 비교하여(490) JMP_OFF가 N보다 크면 "modulo" 연산을 수행하고(492), 다음 프레임의 RD_OFF와 COL_OFF를 구하기 위해 MID_OFF를 구하는데 이 값은 다음 프레임의 WR_OFF에 열의 수인 C를 곱한 값이 된다(491).
여기서, 두번째 프레임을 읽기 위한 매개변수를 구하는 수식을 요약하면 다음과 같다.
if MAX_B>B then
JMP_OFF <= (MAX_B - B) ⅹ WR_OFF;
If JMP_OFF > (N-1) then
JMP_OFF <= JMP_OFF mod (N-1);
end if;
else
MAX_B <= B;
JMP_OFF <= 0;
end if;
MID_OFF <= WR_OFF ⅹ C;(10)
if MID_OFF < N then
RD_OFF <= MID_OFF;(11)
else
RD_OFF <= MID_OFF mod (N-1);(12)
end if;
이때, 식(9)에서 WR_OFF=RD_OFF이므로 식(10)는 MID_OFF=RD_OFF×C로도 나타낼 수 있다. 식(10)과 (11)은 (420)과정을 통해 도 5에서 구해진다. 이렇게, 다음 프레임을 위한 매개변수를 구한 다음, 다음 프레임을 인터리빙해도 된다는 의미의 rd_start 신호를 기다린다. 도 4a 및 도 4b의 (460)과정에서 rd_start가 발생한 후에 두번째 프레임을 읽는 동작은 첫번째 프레임을 읽는 동작과 동일하다.
for j in 0 to (N-1) loop
if j=0 then
RD_IDX <= 0;
elsif (j mod B)/=0 then
RD_IDX <= RD_IDX + RD_OFF;
else
RD_IDX <= RD_IDX + RD_OFF + COL_OFF + JMP_OFF;
end if;
if RD_IDX ≥N then
RD_IDX <= RD_IDX (N-1);
end if;
end loop;
즉, 첫번째 프레임이 쓰여진 후에 인터리빙되고, 두번째 프레임을 위한 매개변수 값이 구해지고, 그 값을 사용하여 두번째 프레임이 쓰여지고, 다시 인터리빙되는 과정을 실시예인 도 7을 통해 살펴보도록 한다.
도 7에 도시된 바와 같이, 첫번째 프레임이 인터리버 램(310)에 쓰여지고 나면(740), (770)과정에서와 같이 인터리빙을 위해 프레임이 읽혀진다. 여기서, DOUT INDEX는 인터리빙된 결과의 인덱스를 나타내는데, 여기서 주목할 것은 열이 바뀔 때 열간 치환을 위해 COL_OFF가 더해진다는 것이다. 즉, 열 당 심벌의 수가 6이므로 DOUT INDEX가 5에서 6으로 바뀌면 (710)과정에서 나타낸 바와 같이 DIFF_COL_IDX는 2 - ( 0 + 1 ) = 1이 되고, COL_OFF은 1 * 1 = 1이 된다. 그러므로, RD_IDX가 20 + 4 + 1 = 25가 되고, 이 값은 N-1보다 크므로 N-1을 빼준다. 또한, DOUT INDEX가 11에서 12로 바뀔 때는 DIFF_COL_IDX는 1 - ( 2 + 1 ) = -2가 되고, COL_OFF는 1 * -2 = -2가 된다. 따라서, RD_IDX가 22 + 4 - 2 = 24가 되고, 이 값은 N-1보다 크므로 N-1을 빼준다. 이와 같은 방법으로 첫 프레임에 대한 인터리빙을 수행한다. 다음으로 두번째 프레임을 쓰기 위한 WR_OFF와 WR_IDX를 구하는 과정이 (770)과정에 나타나있다. 먼저, WR_OFF는 첫 프레임이 읽혀지는 순서를 따라 기록되야 하므로 첫 프레임의 RD_OFF값이 두번째 프레임의 WR_OFF가 된다. 그러므로, WR_IDX는 WR_OFF인 4만큼씩 선형적으로 증가하고 해당하는 인터리버 메모리의 주소에 입력되는 두번째 프레임의 심벌이 기록된다. 그렇게 기록된 결과를 (780)에나타내었다. 다음은 두번째 프레임이 인터리빙을 위해 어떻게 읽혀지는지에 대해 (790)과정을 통해 살펴보도록 한다. 도 4a 및 도 4b의 (491)과정을 따르면 RD_OFF를 구하기 위해 먼저 MID_OFF를 구하는데 이 값은 두번째 프레임의 WR_OFF, 또는 첫 번째 프레임의 RD_OFF와 열의 수인 C의 곱으로 구해지므로 4 * 4 = 16이 되고 이 값이 N보다 작으므로 도 5의 (530)과정을 통해 바로 RD_OFF가 된다.
첫 프레임의 읽기 동작과 마찬가지로 동일 열에 속할 때는 RD_IDX가 RD_OFF인 16씩 선형적으로 증가하고, 열이 변할 때 즉, 예를 들어 DOUT INDEX가 5에서 6으로 변할 때 DIFF_COL_IDX는 1이 되고 COL_OFF은 WR_OFF이 4이므로 4가 된다. 그래서, DOUT INDEX 가 6인 심벌의 RD_IDX는 11 + 16 + 4 = 31이 되고 이 값은 N-1보다 크므로 31 - 23 = 8이 된다. 이와 같은 방법으로 두번째 프레임의 인터리빙이 수행된다.
이상에서 열간 치환을 선행하고 블록 인터리빙을 수행하기위해 필요한 매개변수를 구하는 방법과 어떻게 쓰여지는지, 그리고 어떻게 인터리빙 순서로 읽혀지는지를 순서도를 통해 설명하였다.
도 8 은 본 발명에 따른 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 중 디인터리빙 수행 장치에 대한 일실시예 구성도로서, 열간 치환을 포함한 블록 인터리빙을 디인터리빙하기 위한 것이다.
도 8에 도시된 바와 같이, 열간 치환을 포함한 블록 인터리빙된 디인터리빙 수행 장치는, 입력되는 프레임의 심벌을 저장하기 위한 디인터리버 램(810), 디인터리버 램(810)에 쓰기 동작을 수행하기 위해 필요한 WR_OFF를 구하고 실제 쓰여질주소와 데이터 및 메모리 제어 신호를 발생하기 위한 쓰기 주소 발생기(820)와, 쓰기 주소 발생기(820)로부터 MID_OFF 및 cal_start 신호를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 RD_OFF와 열간 치환을 복원하기 위해 필요한 COL_OFF를 발생하기 위한 주소 오프셋 발생기(830)와, 쓰기 주소 발생기(820)로부터 전달되는 신호를 RD_OFF 만큼씩 증가시키며 디인터리빙 램(810)을 읽기 위해 주소를 만들고 메모리 제어 신호를 발생하기 위한 읽기 주소 발생기(840)와, 쓰기 주소 발생기(820) 및 읽기 주소 발생기(840)로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하기 위한 다중화기(850,860)와, 읽기 주소 발생기(840)로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하기 위한 다중화기(870)를 구비한다.
상기한 바와 같은 구조를 갖는 본 발명의 열간 치환을 포함한 블록 디인터리빙 수행 장치의 동작을 상세하게 설명하면 다음과 같다.
먼저, 쓰기 주소 발생기(820)는 후술되는 도 9a 및 도 9b의 흐름도에 나타낸 동작을 수행하는 블록으로서, 마이크로프로세서나 또는 다른 외부의 인터페이스를 통해 현재 입력되는 프레임에 대한 정보를 입력받아 저장하는 레지스터 집합이 필요하다. 이 레지스터 집합에 프레임 크기나 열의 수 또는 여기의 예에서는 TTI등이 기록된 후에 매개변수를 초기화시키고, RD_OFF와 열간 치환을 복원하기 위해 필요한 COL_OFF을 구하기 위해 주소 오프셋 발생기(830)로 MID_OFF와 cal_start 신호를 전송한다. 그리고, 첫번째 열의 시작을 알리는 frame_sync 신호를 입력받고 첫 심벌을 기록하기 위해 디인터리버 램(810)으로부터 해당 주소인 0번지를 읽어 온다. 물론, 이때 다중화기(850,860)는 메모리 제어 신호인 wr_rdb와 wr_adr 신호를 선택하고, 디인터리버 램(810)으로부터 읽어온 데이터와 wr_strobe 신호를 확인 후에 입력받은 입력(input)신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해 입력신호에 따라 논리합 또는 논리곱을 수행한 후에 다시 디인터리버 램(810)에 기록한다. 이후, 두번째의 심벌을 기록하기 위해서 먼저 해당 주소를 읽어오고 wr_strobe 신호를 확인한 후에 입력받은 두번째 입력신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해 입력신호에 따라 논리합 또는 논리곱을 수행한 후에 다시 디인터리버 램(810)에 기록한다. 쓰기 주소 발생기(820)에서는 이와 같은 동작이 반복적으로 발생하며, 열이 바뀔 때 주소 오프셋 발생기(830)로부터 COL_OFF를 입력받아 열간 치환을 복원하는 동작을 수행하고, 한 프레임의 심벌을 모두 기록하고 나면 읽기 주소 발생기(840)에 디인터리빙을 수행해도 된다는 신호인 rd_start 신호와 주소 오프셋 발생기(830)로부터 받은 RD_OFF을 넘겨준다.
그리고, 주소 오프셋 발생기(830)는 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 RD_OFF와 열간 치환을 복원하기 위해 필요한 COL_OFF를 만들어주는 블록으로서 후술되는 도 10의 흐름도와 같이 동작을 수행하는 블록이다. 전술한 바와 같이, MID_OFF를 받아서 이 값이 N보다 크거나 같으면 "modulo" 연산을 취하여 RD_OFF를 만들고 N보다 작으면 MID_OFF가 바로 RD_OFF가 된다. 이렇게, RD_OFF가 구해지면 열간 치환을 복원하기 위한 COL_OFF을 구한다. RD_OFF과 COL_OFF이 모두 구해지면 쓰기 주소 발생기(820)에 해당 값을 넘겨주기 위해 cal_done 신호를 보낸다.
그리고, 읽기 주소 발생기(840)는 주소 오프셋 발생기(830)로부터 만들어진 신호를 RD_OFF 만큼씩 증가시키며, 디인터리빙 램(810)을 읽기 위해 주소를 만들고 메모리 제어 신호를 발생시키는 블록으로서 후술되는 도 11의 흐름도와 같이 동작을 수행하는 블록이다. 쓰기 주소 발생기(820)로부터 디인터리빙을 수행해도 된다는 신호인 rd_start와 RD_OFF 값인 MID_OFF를 받으면 바로 디인터리빙을 위한 메모리 읽기 동작이 시작된다. 전술한 바와 같이, RD_IDX를 RD_OFF 만큼씩 선형적으로 증가시키며 디인터리버 램(810)을 읽어서 디인터리빙을 수행한다. 물론, 이때는 다중화기(850,860)에서 메모리 제어신호인 rd_rdb 및 rd_adr를 선택한다. 만약, 쓰기 동작과 동시에 읽기가 수행된다면 읽기 동작은 rd_strobe 신호를 확인하고 동작을 수행해야 한다.
단, 여기서 고려할 사항은 열간 치환을 복원하기 위해 원래의 순서대로 기록을 하게 됨에 따라 규칙성을 제공받는 대신 TTI가 40ms 또는 80ms일 때 도 13a 및 도 13b와 같은 타이밍상의 제약이 따르게 된다.
도 13a에 도시된 바와 같이, 먼저 TTI가 40ms일 때(1310)를 살펴보면 4개의 열로 구성되고 입력 심벌은 10ms단위로 버스트하게 받는다. 4개의 열을 모두 디인터리버 램(810)에 기록한 후에 디인터리빙을 위한 읽기 동작이 시작되는데, (1311)과정에서 읽혀지는 위치와 쓰여지는 위치가 겹칠 수가 있다. 이를 위해 겹치는 만큼의 데이터를 저장하기 위해 하나의 열에 해당하는 부가적인 램(810)이 소요된다.
또한, 도 13b에 도시된 바와 같이, TTI가 80ms일 때(1320)를 살펴보면(1321)과 (1322)과정에서 읽혀지기 전에 입력되는 심벌이 기록되어 해당 심벌을 상실하게 되므로 80ms을 지원하기 위해서는 두개의 열만큼의 메모리가 더 필요하다.
그래서, (1321)과 (1322)에 해당하는 타이밍에 적절한 어드레싱을 통해 메모리를 선택하면 된다. 물론, 이 경우에 2개의 열만큼 더 큰 메모리를 사용하여 해당 사이클에 적절한 오프셋 만큼 증가시키는 방법을 사용할 수도 있고, 한 프레임만을 수용할 수 있는 크기의 메모리와 부가적으로 필요한 열만큼의 작은 메모리를 따로 두어 선택신호를 만들어 쓰고 읽는 방법이 있을 수 있겠다. 이 경우에는 부가적으로 증가한 메모리는 단순히 계수기를 두어 주소를 선형적으로 증가시키며 쓰고 읽으면 된다.
이러한 사항을 바탕으로 하는 디인터리빙 수행 장치에서는 기존의 구조에 비해 1차 디인터리버 램은 37.5%, 2차 디인터리버의 경우는 40%정도 줄일 수 있다.
한편, 열간 치환을 수행하고 블록 인터리빙되어 입력되는 심벌들이 디인터리버 메모리에 어떻게 쓰여지고 디인터리빙 되는지를 설명하기 위해 도 9a 및 도 9b 내지 도 11에서 자세하게 설명하도록 한다.
도 9a 및 도 9b 는 본 발명에 따른 주소 발생기를 포함한 인터리빙/디인터리빙 수행 방법 중 디인터리빙을 위한 쓰기 주소 발생 방법에 대한 일실시예 흐름도로서, 첫번째 프레임이 어떻게 쓰여지고 읽혀지는지에 대해 살펴보도록 한다.
도 9a 및 도 9b에 도시된 바와 같이, 먼저 5개의 매개변수를 초기화한다(910). 첫번째 프레임이 쓰여질 때 디인터리버 램(910)은 의미없는 데이터들로 채워져 있으므로 어느 위치이건 쓸 수 있다. 상기에서도 정의했듯이 연속하여 입력되는 두 심벌들을 디인터리버 램(910)에 쓰기 위한 메모리의 위치간 오프셋을 WR_OFF라 하면, 처음 프레임을 위한 WR_OFF는 임의의 값을 가질 수 있으나 구현상 용이하게 하기 위하여 (910)과정에 나타낸 바와 같이 1로 초기화한다. 그리고, MID_OFF란 연속으로 읽혀져 나갈 두 심벌의 메모리 위치간의 오프셋을 나타내는 RD_OFF를 구하기 위해 사용되는 값으로서 도 10에 나타낸 것과 같이 N보다 크거나 같으면 "modulo" 연산을 취하여 RD_OFF가 되는데, WR_OFF와 열 당 심벌의 수인 B의 곱으로 나타낼 수 있다. WR_OFF의 초기값이 1이므로 MID_OFF은 B가 되며 N보다 작은 값이므로 이 값이 곧 RD_OFF가 된다. 이때, 만약 TTI가 10ms라면 [표1]을 통해 알 수 있듯이 인터리빙이 수행되지 않으므로 이 경우는 MID_OFF가 1이 된다.
그리고 i는 현재 입력되는 심벌의 인덱스를 나타내는데 초기값은 0이고 선형적으로 1씩 증가한다. 데이터 율이 변하는 경우를 고려하기 위한 변수로서 MAX_B와 JMP_OFF가 있는데, 이들 모두 초기값은 0이고 프레임 단위로 갱신된다. MAX_B의 값은 B의 값과 비교하여 큰 값으로 갱신되며 JMP_OFF는 B가 큰 값에서 작은 값으로 변할 때 즉, 데이터 율이 감소할 때 이전프레임에 비해 심벌의 수가 줄어들므로 실제 쓰여지지 않는 영역이 발생하는데, 이때 이 오프셋만큼 인덱스를 증가시켜서 데이터 율이 변하더라도 동일한 흐름으로 제어가 가능하게 만들어준다.
그리고, (920)과정에서는 크게 2가지의 동작을 수행하는데 이에 대한 동작의 흐름도는 도 10에 도시된 바와 같다.
먼저, MID_OFF가 프레임내의 심벌 수인 N보다 크거나 같은 경우에 이 값을 "modulo"연산을 취하여 RD_OFF을 구하고(1020), MID_OFF가 N보다 작으면 MID_OFF가바로 RD_OFF가 된다(1080).
이어서, 이 값을 근거로 COL_OFF를 구하는데 COL_OFF가 필요한 이유는 다음과 같다. 일반적인 블록 인터리빙과 달리 차세대 이동통신 시스템(IMT-2000)에서는 상기에서도 설명하였듯이 열간 치환이 인터리빙전에 발생한다. 이로 인하여 디인터리버의 입력되는 심벌과 출력되는 심벌간 관계의 일반화가 어려워진다. 왜냐하면, 읽혀져 나간 인덱스를 따라 입력되는 심벌을 써야 하는데 열간 치환에 의하여 읽혀져 나가는 심벌의 인덱스와 쓰여지는 심벌의 인덱스간에 규칙성이 깨지기 때문이다. 그래서, 이를 보상해 주기 위해 본 발명에서는 실제 열의 인덱스를 따라 입력 심벌을 디인터리버 램(810)에 기록한다. 예를 들어, TTI가 40ms라면 열의 수가 4개가 되고 열간 치환에 의하여 처음에는 0번째 열이 입력되고 다음에는 2번째 열이 입력되는데 이때 바로 연결하여 2번째 열을 기록하지 않고 1번째 열 전체가 기록될 만큼의 오프셋을 건너 뛰고 디인터리버 램(810)에 기록한다. 이것을 COL_OFF라 하고 다음의 수식과 같이 나타낸다.
COL_OFF <= DIFF_COL_IDX ⅹ RD_OFF;(13)
if COL_OFF≥N then
COL_OFF <= COL_OFF mod (N-1);(14)
end if;
또한, [표1]에서 TTI가 10ms나 20ms인 경우와 같이 열간 치환을 수행하지 않는 경우에는 COL_OFF가 0이 되고(1040), 열간 치환이 수행되는 경우에는 식(13) 또는 (1050)에 나타낸 것과 같이 COL_OFF를 구한다. 이때, COL_OFF 값이 N보다 큰지를 확인하여(1010) 크거나 같은 경우에는 바로 식(14) 또는 (1070)과정과 같이 "modulo" 연산을 취한다.
이상과 같이 매개변수가 구해지면 첫번째 프레임의 첫 열에 대한 frame_sync 신호를 기다린다(920). 여기서, frame_sync란 디인터리빙을 위한 한 열의 데이터가 입력됨을 나타내는 일종의 동기를 맞추는 신호라고 볼 수 있다. 인터리버와는 달리 디인터리버의 경우에는 한 심벌 당 복수의 비트를 입력받아 채널 디코더에서 소프트 디시전(soft decision)을 수행하게 한다.
그러므로, 메모리 운용의 관점에서 2가지의 경우를 생각할 수 있다.
첫번째는 한 심벌에 해당하는 복수의 심벌, 즉 [표2]의 경우에서 6비트를 한 주소로 할당하는 경우인데 이때는 WR_IDX나 RD_IDX 자체가 메모리의 주소가 되며 쓰기 전에 읽어올 필요가 없다.
두번째는 한 심벌의 한 비트씩 복수의 심벌들을 한 주소로 두는 경우로써 첫번째와 전체 메모리 크기는 같지만 한 심벌에 해당하는 비트 수만큼 메모리를 병렬로 두는 구조가 된다. 이 경우에는 채널 디코더의 채널 디코더에서 요구하는 비트수가 변하는 경우에 능동적으로 대처할 수 있다. 여기서는 두번째의 가정을 중심으로 설명한다.
기본적으로 메모리를 하나만 사용하므로 현재 입력되는 심벌이 쓰여질 위치를 포함한 주소를 먼저 읽어와서 그 위치의 데이터만 현재 입력된 심벌로 덮어써야한다. 이를 위해 해당 주소를 읽은 후(930)에 wr_strobe 신호가 1인지를 확인하여(931) 1이 아니면 wr_strobe 신호가 1이 될 때까지 반복 수행하고, wr_strobe 신호가 1이면 입력된 심벌이 쓰여질 위치의 데이터만 덮어쓰기 위하여 마스크를 만든다(940). 여기서, wr_strobe 신호는 입력 심벌이 유효한지를 나타내주는 제어 신호라고 볼 수 있다. 그리고, 마스크는 입력 심벌이 0이면 그 심벌이 쓰여질 위치만 0으로 하고 나머지는 1로 만들어 해당 주소를 읽는 과정(930)에서 읽어온 데이터와 논리곱을 수행시키고, 입력 심벌이 1이면 그 심벌이 쓰여질 위치만 1로 하고 나머지는 0으로 하여 해당 메모리를 읽는 과정(930)에서 읽어온 데이터와 논리합을 수행하는 방법으로 해당 위치의 심벌만 덮어쓰도록 한다.
여기서, 2가지의 사항을 생각해 볼 수 있다. 그 첫째는 메모리를 듀얼 포트 램(Dual Port RAM)을 사용할 것인가에 대한 고려이고, 둘째는 싱글 포트 램(Single Port RAM)을 사용하는 경우에 읽기와 쓰기 동작간의 관계에 대한 고려이다. 여기서, 듀얼 포트 램(Dual Port RAM)을 사용하게 되면 읽기와 쓰기가 각각 독립적으로 동작하기 때문에 제어가 용이하고 보다 큰 타이밍 마진을 얻을 수 있지만 크기와 전력소모 면에서 손해를 보아야 한다. 그러므로, 타이밍이 부족하지 않다면 싱글 포트 램(Single Port RAM)을 사용하는 것이 효율적이라 할 수 있다. 따라서, 싱글 포트 램(Single Port RAM)을 사용하는 경우에 읽기와 쓰기 동작간의 관계를 나타내면 다음과 같다.
이전 프레임을 디인터리빙하기 위한 읽기 동작 수행 중에 다음 프레임의 데이터가 입력될 때 어떻게 처리할 것인가에 관한 것이다. 일반적으로 내부적으로 수행되는 읽기 동작의 수행 속도가 빠르다고 가정할 수 있으나 최악의 경우에 읽기와 쓰기의 동작 속도가 동일하다면 2개의 동작을 번갈아가며 수행하도록 해야 한다. 즉, 읽기 동작만 수행중이라면 매 사이클마다 읽기 동작이 일어나고, 반면에 쓰기 동작과 겹치는 경우에는 쓰기 동작을 위한 타이밍에 우선순위를 두어야 하고, 최악의 경우에는 쓰기와 읽기가 번갈아가며 발생할 수 있도록 하여야 한다. 그래서, 읽기 동작이 수행 중에 다음 프레임의 심벌이 입력되는 경우에는 읽기 동작을 멈추고 입력되는 심벌을 먼저 쓰도록 해야 한다. 후술되는 도 9a 및 도 9b는 이러한 동작을 고려한 것이다. 따라서, 입력된 심벌만 쓰여지도록 마스크를 만드는 과정(940)에서 rd_strobe가 1이 되는 것은 이 때에 읽기 동작이 가능함을 나타내는 신호라고 볼 수 있다. 결국, 해당 메모리를 읽는 과정(930)에서 쓰기 동작을 수행하기 위해 해당 주소를 한번 읽고, (940)과정에서 입력된 심벌만 쓰여지도록 마스크를 만들면서 실제 디인터리빙을 위한 읽기 동작이 동시에 수행되도록 하고, (950)에서는 상기에서 만들어진 마스크와 해당 메모리를 읽는 과정(930)에서 읽어온 데이터간에 논리합이나 논리곱을 수행허요 그 결과를 메모리에 쓰고, 다음 심벌을 기록하기 위한 위치 정보인 WR_IDX를 WR_OFF 만큼 증가시킨다. 그리고, 프레임에 해당하는 심벌 전체를 메모리에 기록했는지를 확인하여 한 프레임의 심벌을 모두 기록하지 못한 경우, 즉 i가 N-1보다 작은 경우에는 현재까지 입력 받은 심벌의 수인 i와 열당 심벌의 수인 B를 비교하여(952) 열이 증가하는 경우에는 열간 치환을 복원하기 위하여 (950)과정에서 구한 WR_IDX에 COL_OFF과 JMP_OFF을 더한 값이 다음 열의 첫번째 심벌을 기록하기 위한 위치가 된다(853). 이후, 다음열의 시작을 나타내는frame_sync 신호를 기다리는 과정(920)부터 반복 수행하고, 열이 증가하지 않는 경우에는 바로 해당 메모리를 읽는 과정(930)부터 반복 수행하며, i가 N-1보다 크거나 같을 경우에는 두번째 프레임을 위한 매개 변수를 구하는 과정에서 설명하도록 한다.
지금까지 살펴본 첫 프레임의 기록을 위해 필요한 매개변수의 수식을 요약하면 다음과 같다.
Initial value:
WR_OFF <= 1;
WR_IDX <= 0;
JMP_OFF <= 0;
MID_OFF <= B;
Computed value:
RD_OFF <= MID_OFF;
COL_OFF <= RD_OFF ⅹ DIFF_COL_IDX;
if i = 0 then
WR_IDX <= 0;
elsif (i mod B)/=0 then
WR_IDX <= WR_IDX + WR_OFF;(15)
else
WR_IDX <= WR_IDX + WR_OFF + JMP_OFF + COL_OFF;(16)
end if;
if WR_IDX ≥N then
WR_IDX <= WR_IDX - (N-1);
end if;
단, 이때 식(16)의 JMP_OFF는 첫번째 프레임이거나 데이터 율이 감소하는 경우가 아니면 0이므로 생략할 수 있다.
이제, 첫번째 프레임이 어떻게 읽혀지는지 그리고 두번째 프레임을 쓰기 위한 매개변수가 어떻게 계산되는지를 살펴보도록 한다.
먼저, 프레임 전체를 기록하였으면 그 프레임의 디인터리빙을 위해 읽기 동작을 수행해도 된다는 의미의 rd_start 신호를 1로 만들고(960), 두번째 프레임에 대한 정보를 입력 받았는지를 확인하여(970) 입력 받지 못했으면 두번째 프레임에 대한 정보를 입력 받을 때까지 반복 수행하고, 두번째 프레임에 대한 정보를 입력 받는다. 이후, 두번째 프레임을 위한 매개변수를 재정의하는데 WR_OFF는 첫번째 프레임을 읽어 나가는 순서로 쓰여져야 하기 때문에 첫번째 프레임의 RD_OFF가 두번째 프레임의 WR_OFF가 된다. 이어서, 데이터 율이 변했는지를 확인하여(880) 변화가 없거나 증가하면 MAX_B는 다음 프레임의 하나의 열에 포함된 심벌의 수인 B로 갱신되어 JMP_OFF는 0이 되고(982), 감소하면 MAX_B는 변함이 없이 JMP_OFF를 구한다(981). 이때, JMP_OFF와 N을 비교하여(990) N이 크면 "modulo" 연산을 수행하므로 다음 프레임의 MID_OFF는 다음 프레임의 WR_OFF에 하나의 열에 해당하는 심벌의 수인 B를 곱한 값이 되는데(991), 이후 (920)과정부터 반복 수행하고, N이 작으면 "modulo" 연산을 수행하여 JMP_OFF를 구한 후 (991)과정으로 넘어간다.
여기서, 두번째 프레임을 위한 매개변수를 구하는 수식을 요약하면 다음의 수식과 같다.
WR_OFF <= RD_OFF;(17)
if MAX_B>B then
JMP_OFF <= (MAX_B - B) ⅹ WR_OFF;
If JMP_OFF > (N-1) then
JMP_OFF <= JMP_OFF mod (N-1);
end if;
else
MAX_B <= B;
JMP_OFF <= 0;
end if;
MID_OFF <= WR_OFF ⅹ B;(18)
if MID_OFF < N then
RD_OFF <= MID_OFF;(19)
else
MID_OFF <= MID_OFF mod (N-1);(20)
end if;
이때, 식(17)에서 WR_OFF=RD_OFF 이므로 식(18)은 MID_OFF=RD_OFF×B 로도 나타낼 수 있다. 식(19)와 식(20)는 (920)과정을 통해 도 10과 같이 구해진다.
이렇게, 다음 프레임을 위한 매개변수를 구한 다음 다음 프레임의 첫번째 열의 시작을 나타내는 frame_sync 신호를 기다리는 과정(921)으로 넘어간다.
도 9a 및 도 9b와 도 10의 흐름도를 통해 쓰여진 심벌을 디인터리빙 순서로 읽어내는 방법을 도 11에 나타내었다. 도 11은 도 9a 및 도 9b의 rd_start가 발생하는 과정(960)을 설명하는 것으로, 즉 도 10에서 COL_OFF의 생성을 위해 구한 RD_OFF를 (1110)과정에서 래치하여 디인터리빙하는 심벌의 수를 계수하기 위한 변수로서 j를 0으로 초기화한다(1110). 전술한 바와 같이, 이 방법은 싱글 포트 램(Single Port RAM)을 사용하는 것을 가정하였으므로 쓰기 동작에 우선 순위가 있고 읽기와 쓰기가 동시에 발생할 수 있다.
이후, 먼저 쓰기 동작이 수행 중인지를 확인하여(1120) 읽기 동작이 수행 중이면 메모리를 디인터리빙의 순서로 읽으면 되지만(1140), 쓰기 동작이 수행 중이면 도 9a 및 도 9b의 (940)과정에서 넘겨주는 rd_strobe 신호가 1인지를 확인하여(1130) 1이 아니면 rd_strobe 신호가 1이 될 때까지 기다리고, rd_strobe 신호가 1이면 메모리를 인터리빙의 순서로 읽는다(1140). 이후, 프레임에 해당하는 심벌을 모두 디인터리빙의 순서로 읽었는지를 확인하기 위해 j와 N-1을 비교한다(1150).
비교결과, j가 N-1 보다 작은 경우, 즉 아직 디인터리빙을 수행해야 하는 심벌이 남아있다면 다음 심벌을 읽기 위해 RD_IDX를 RD_OFF만큼 증가시키고 j는 1만큼 증가시킨 후에(1160) 현재 쓰기 동작이 진행 중인지를 다시 확인하는 과정(1120)부터 반복 수행한다.
여기서, 메모리를 읽기 위해 사용되는 RD_IDX는 다음의 식으로 나타낼 수 있다.
RD_IDX <= RD_IDX + RD_OFF;
if RD_IDX ≥N then
RD_IDX <= RD_IDX (N-1);
end if;
이상에서 열간 치환을 수행하고 블록 인터리빙된 심벌들을 디인터리버 메모리에 쓰기 위해 필요한 매개변수를 구하는 방법과 어떻게 쓰여지는지, 그리고 어떻게 디인터리빙 순서로 읽혀지는지를 살펴봤다.
도 12는 본 발명에 따른 디인터리버 수행 장치의 실시예를 보여 주는 것으로 전송 시간간격이 40ms이고 처리할 프레임의 크기 N이 24 심벌이라면 [표1]을 통해서알 수 있듯이 열의 수 C는 4이고, 각 열의 심벌 수 B는 6심벌로 구성된다. 편의상 디인터리버 램(810)의 데이터 폭을 8비트로 가정하였고, 나머지 매개변수의 계산 방법은 상기에서 설명한 것과 같다.
먼저, 첫번째 프레임이 어떻게 쓰여지는지를 살펴보도록 한다. (1220)은 인터리빙전의 소스 심벌의 배열을 4Ⅹ6 행렬의 형태로 보여주고 있다. 이는 소스 심벌을 행과 열의 수에 맞추어 행을 중심으로 기록한 결과이다. (1230)과정은 인터리빙된 후의 심벌들을 보여주고 있는데 열-1과 열-2의 순서가 바뀌어 있음을 알 수 있다. 디인터리버는 항상 (1230)과정에 나타난 순서로 심벌을 입력받는다. (1240)은 첫번째 프레임(전송시간간격에 입력되는 4개의 열)을 기록하는 과정을 보여주고 있다. 전술한 도 9a 및 도 9b에서 설명하였듯이 WR_OFF의 초기값이 1이고, WR_IDX = WR_IDX + WR_OFF이므로 1만큼씩 선형적으로 증가하며, 인터리빙된 입력 심벌들을 디인터리버 램(810)에 기록한다. 이때, WR_IDX의 하위 3비트는 8비트 디인터리버 램(810)의 한 주소 안의 인덱스가 되고 나머지는 실제 주소가 된다. 즉, WR_IDX가 1이면 이진수로 "~000001"이므로 현재 입력되는 심벌을 디인터리버 램(810)의 0번지의 8비트 중에 두번째 비트인 비트-1에 덮어쓰라는 의미이며, 만약 WR_IDX가 12이면 이진수로 "~001100"이므로 1번지의 8비트 중에 5번째 비트인 비트-4에 쓰라는 의미가 된다. 이와 같은 방법으로 첫번째 프레임의 첫 열이 쓰여진 결과가 (1250)과정의 첫 열에 나타나 있다. 즉, 디인터리버 메모리의 0번지의 비트-0(왼쪽)부터 소스 심벌의 인덱스 0, 비트-1에 소스 심벌의 인덱스 4, 비트-2에 소스 심벌의 인덱스 8, 비트-3에 소스 심벌의 인덱스 12, 비트-4에 소스 심벌의 인덱스 16, 그리고 비트-5에 첫 열의 마지막 심벌인 20을 기록한다. 이후, 다음 심벌을 기록하기 위한 WR_IDX는 1이 증가하여 6이 되는데, 이는 열간 치환이 일어나지 않았을 때 두번째 열의 첫번째 심벌인 1이 들어올 때는 맞지만 실제로는 열간 치환이 발생하여 세번째 열의 첫번째 심벌인 2가 들어온다. 즉, 다음 열의 인덱스가 1이 아니고 2이므로 DIFF_COL_IDX = 2 - 1 = 1이 되며, COL_OFF= DIFF_COL_IDX Ⅹ B = 1 Ⅹ 6 = 6이 되어 WR_IDX = WR_IDX + COL_OFF + JMP_OFF = 6 + 6 + 0 = 12로 증가함을 알 수 있다. 이때, JMP_OFF는 데이터 율이 감소하지 않았으므로 0이다. 따라서, 소스 심벌의 인덱스 2는 WR_IDX가 12이므로 디인터리버 램(23)의 1번지의 비트-4에 기록되었다. 그리고, 다음 심벌인 소스 심벌의 인덱스 6은 다시 WR_IDX가 1만큼 증가한 13, 즉 디인터리버 램(810)의 1번지 비트-5에 기록되고 소스 심벌의 인덱스 10은 14, 즉 디인터리버 램(810)의 1번지 비트-6에 기록되며, 소스 심벌의 인덱스 14는 15, 즉 디인터리버 램(810)메모리의 1번지 비트-7에 기록되며, 소스 심벌의 인덱스 18은 16, 즉 디인터리버 램(810)의 2번지 비트-0에 기록되며, 세번째 열의 마지막인 소스 심벌의 인덱스 22는 17, 즉 디인터리버 램(810)의 2번지 비트-1에 기록된다. 다음 심벌을 기록하기 위한 WR_IDX는 1이 증가한 18이지만 열이 바뀌므로 열간 치환을 복원하기 위해 DIFF_COL_IDX와 COL_OFF를 구하여야 한다. 다음 열의 인덱스가 3이 아니고 1이므로 DIFF_COL_IDX = 1 - 3 = -2가 되며, COL_OFF = -2 Ⅹ 6 = -12이므로 WR_IDX = 18 - 12 = 6이 된다. 이후, 입력되는 두번째 열의 소스 심벌들은 다시 WR_IDX를 1만큼씩 증가시키며 기록하고, 두번째 열의 마지막 심벌인 21을 기록하고 나서, 또한 열간 치환을 복원하기 위해 DIFF_COL_IDX와 COL_OFF의 연산이 필요하다. 이때, DIFF_COL_IDX = 3 - 2 = 1이고 COL_OFF = 1 Ⅹ 6 = 6이 되어 WR_IDX = 12 + 6 = 18이 된다. 이후에 입력되는 네번째 열의 기록을 위해 WR_IDX를 1만큼씩 증가시키며 디인터리버 램(810)에 기록한다. (125)과정은 이와 같은 방법으로 첫번째 프레임에 해당하는 모든 심벌이 디인터리버 램(810)에 쓰여진 결과를보여주고 있다. 첫번째 프레임을 모두 기록한 다음, (1260)과정의 첫번째 열에서 나타낸 것과 같이 RD_OFF 값이 결정되는데, 상기에서의 설명을 따르면 초기 MID_OFF가 B이므로 6이 되고, 이 값은 N값인 24보다 작으므로, 이값이 곧 RD_OFF가 된다. RD_OFF가 결정되면 RD_IDX는 RD_OFF을 선형적으로 더해가며 해당 인덱스의 심벌을 읽는다. 이때도 WR_IDX와 마찬가지로 RD_IDX의 하위 3비트는 디인터리버 메모리 해당 주소의 8비트 중에 한 심벌을 나타내기 위해 사용되며 나머지는 실제 디인터리버 메모리의 주소가 된다. (1260)과정에서 RD_IDX의 초기값은 0이고, 두번째 심벌을 읽기 위해 RD_OFF를 더하면 0 + 6 = 6이 된다. 세번째 심벌을 읽기 위해 다시 RD_OFF를 더하면 6 + 6 = 12가 되며, 이와 같은 방법으로 네번째는 18, 다섯번째는 24가 되는데 이 값은 N값인 24보다 크므로 상기에서 설명했듯이 N-1의 값을 빼준다. 즉, 24 - 23 = 1이 된다.
그리고, 다음 RD_IDX는 다시 RD_OFF를 더한 1 + 6 = 7, 다음은 7 + 6 = 13, … , 17 + 6 = 23으로 구해지는 것을 보여주고 있다. 이때, N값인 24보다 크거나 같은 경우에는 상기에서 설명되었듯이 N-1의 값을 빼준다. (1270)과정은 두번째 블록이 기록되는 과정을 보여주고 있다. 이때, 첫번째 프레임을 읽어 나가는 순서로 두번째 프레임을 기록하여야 하므로 첫번째 프레임의 RD_OFF인 6이 두번째 프레임의 WR_OFF가 되어 WR_IDX가 6만큼씩 증가됨을 알 수 있고, 그 이후에 기록되는 방법은 첫번째 프레임을 기록하였던 것과 동일하다. 첫번째 프레임과 마찬가지로 주목할 것은 열간 치환을 복원하기 위해 열이 바뀔 때 DIFF_COL_IDX와 COL_OFF을 구해야 하고, 이때 WR_IDX가 COL_OFF만큼 증가해야 한다는 것이다. (1280)과정은(1270)과정의 방법으로 기록된 두번째 프레임의 결과를 보여주고 있으며, (1290)과정은 두번째 프레임을 읽기 위한 RD_OFF를 구하는 방법과 RD_IDX의 연산과정을 보여주고 있다.
두번째 프레임의 RD_OFF는 WR_OFF에 B를 곱한 값이므로 6 Ⅹ 6 = 36이 되는데, 이 값이 N보다 크므로 "modulo" 연산을 취하여 36 mod 23 = 13이 된다. 그러므로, 두번째 프레임을 읽기 위한 RD_IDX는 13 만큼씩 선형적으로 증가됨을 알 수 있고, 이때 RD_IDX가 N보다 크거나 같으면 N-1을 빼준다. 이렇게, 발생시킨 RD_IDX를 통해 첫번째 프레임과 동일한 방법으로 디인터리버 램(810)을 읽으면 된다. 세번째 프레임의 WR_OFF는 두번째 프레임의 RD_OFF가 되며 상기에 설명된 것과 같은 읽기와 쓰기 동작이 반복된다.
즉, 본 발명에 따른 주소발생기를 이용한 인터리빙/디인터리빙 수행 방법은, 인터리빙/디인터리빙 되어야 하는 소스데이터(인터리빙)의 프레임(블록) 또는 인터리빙된 데이터(디인터리빙) 프레임(블록)을 처리함에 있어서, 입력되는 심벌과 출력되는 심벌의 순서가 다르기 때문에 인터리빙/디인터리빙 처리 단위별로 반드시 메모리에 저장을 해야 하고, 그 저장된 프레임을 이전 프레임이라고 하면, 이전 프레임을 인터리빙/디인터리빙하는 동안에 다시 다음 프레임에 해당하는 심벌이 입력되어 이를 저장할 수 있도록 하는 상기 메모리를 필요로 하며, 다음 프레임에 해당하는 심벌을 위해 상기 메모리를 추가하지 않고, 이전 프레임의 심벌이 읽혀진 위치를 따라 기록한다.
이상에서 설명한 본 발명은 전술한 실시예 및 첨부된 도면에 의해 한정되는것이 아니고, 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 여러 가지 치환, 변형 및 변경이 가능하다는 것이 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 있어 명백할 것이다.
상기한 바와 같은 본 발명은, 인터리빙과 디인터리빙을 위한 효율적인 주소 발생기를 사용하게 되면 다양한 서비스를 지원하는 IMT-2000용 모뎀에 있어서 요구되는 메모리의 크기를 약 40% 정도 줄일 수 있는 효과가 있다.
즉, 본 발명은, 한개의 메모리만으로 인터리빙과 디인터리빙을 수행하게 하여 메모리의 크기를 줄임으로서 높은 데이터 율을 요구하는 서비스가 지원 가능한 모뎀의 원칩화가 가능하도록 하는 효과가 있다.

Claims (27)

  1. 데이터의 연집 오류를 정정하기 위한 인터리빙 수행 장치에 있어서,
    쓰기 주소 발생수단 및 제1 및 제2 선택수단으로부터 입력되는 입력 시퀀스를 저장하기 위한 인터리빙 저장수단;
    상기 인터리빙 저장수단의 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 상기 쓰기 주소 발생수단;
    상기 쓰기 주소 발생수단으로부터 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하기 위한 주소 오프셋 발생수단;
    상기 주소 오프셋 발생수단으로부터 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 인터리빙 저장수단을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하기 위한 읽기 주소 발생수단;
    상기 쓰기 주소 발생수단 및 읽기 주소 발생수단으로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 선택하기 위한 상기 제1 및 제2 선택수단; 및
    상기 읽기 주소 발생수단으로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하기 위한 제3 선택수단
    을 포함하는 인터리빙 수행 장치.
  2. 제 1 항에 있어서,
    상기 인터리빙 수행 장치는,
    하나의 메모리만을 사용하여 인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 것을 특징으로 하는 인터리빙 수행 장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 쓰기 주소 발생수단은,
    데이터 율이 바뀌는 경우를 수용하기 위해 데이터 율이 증가하면 아무런 변화가 없고, 읽기 동작이고 데이터 율이 감소하면 열 당 심벌의 수의 차이값과 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)의 곱을 이용하여 데이터 율이 줄어드는 경우에 쓰이지 않는 영역을 건너 뛰도록 하는 매개변수(JMP_OFF)를 구하는 것을 특징으로 하는 인터리빙 수행 장치.
  4. 제 3 항에 있어서,
    상기 쓰기 주소 발생수단은,
    상기 인터리빙 저장수단에 쓰기 위해서 입력 심벌이 쓰여져야 할 주소를 읽고, 입력 심벌이 0이면 해당 심벌을 0으로, 나머지는 1로 나타내고, 입력 심벌이 1이면 해당 심벌을 1로, 나머지는 0으로 나타내어 메모리의 데이터 폭 만큼의 마스크를 만들어 상기 인터리빙 저장수단으로부터 읽어온 데이터와 입력 심벌이 0이면 논리곱을 수행하고, 입력 심벌이 1이면 논리합을 수행하여 그 결과를 메모리에 기록하여 해당 심벌만 덮어쓰도록 하는 것을 특징으로 하는 인터리빙 수행 장치.
  5. 데이터의 연집 오류를 정정하기 위한 디인터리빙 수행 장치에 있어서,
    쓰기 주소 발생수단 및 제1 및 제2 선택수단으로부터 입력되는 프레임의 심벌을 저장하기 위한 디인터리빙 저장수단;
    상기 디인터리빙 저장수단의 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 상기 쓰기 주소 발생수단;
    상기 쓰기 주소 발생수단으로부터 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하기 위한 주소 오프셋 발생수단;
    상기 주소 오프셋 발생수단으로부터 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 디인터리빙 저장수단을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하기 위한 읽기 주소 발생수단;
    상기 쓰기 주소 발생수단 및 읽기 주소 발생수단으로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하기 위한 상기 제1 및 제2 선택수단; 및
    상기 읽기 주소 발생수단으로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하기 위한 제3 선택수단
    을 포함하는 디인터리빙 수행 장치.
  6. 제 5 항에 있어서,
    상기 디인터리빙 수행 장치는,
    하나의 메모리만을 사용하여 디인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 것을 특징으로 하는 디인터리빙 수행 장치.
  7. 제 5 항 또는 제 6 항에 있어서,
    상기 쓰기 주소 발생수단은,
    데이터 율이 바뀌는 경우를 수용하기 위해 데이터 율이 줄어드는 경우에 쓰이지 않는 영역을 건너 뛰도록 하는 매개변수(JMP_OFF)를 구하는 것을 특징으로 하는 디인터리빙 수행 장치.
  8. 제 7 항에 있어서,
    상기 쓰기 주소 발생수단은,
    상기 인터리빙 저장수단에 쓰기 위해서 입력 심벌이 쓰여져야 할 주소를 읽고, 입력 심벌이 0이면 해당 심벌을 0으로, 나머지는 1로 나타내고, 입력 심벌이 1이면 해당 심벌을 1로, 나머지는 0으로 나타내어 메모리의 데이터 폭 만큼의 마스크를 만들어 상기 디인터리빙 저장수단으로부터 읽어온 데이터와 입력 심벌이 0이면 논리곱을 수행하고, 입력 심벌이 1이면 논리합을 수행하여 그 결과를 메모리에 기록하여 해당 심벌만 덮어쓰도록 하는 것을 특징으로 하는 디인터리빙 수행 장치.
  9. 데이터의 연집 오류를 정정하기 위해 사용되는 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템에 있어서,
    외부로부터 입력되는 소스의 데이터 열을 부호화하기 위한 부호화수단;
    상기 부호화수단으로부터 전달되는 데이터에 대하여 열간 치환을 포함한 블록 인터리빙을 수행하기 위한 인터리빙 수단;
    상기 인터리빙 수단을 통해 블록 인터리빙된 데이터를 변조하여 채널을 통해 송신하는 변조수단;
    상기 변조수단을 통해 변조된 블록 인터리빙된 데이터를 수신하여 복조하기 위한 복조수단;
    상기 복조수단을 통해 복조된 상기 블록 인터리빙된 데이터에 대하여 열간 치환을 포함한 블록 디인터리빙을 수행하기 위한 디인터리빙 수단; 및
    상기 디인터리빙 수단을 통해 디인터리빙된 데이터를 복호화하기 위한 복호화수단
    을 포함하는 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템.
  10. 제 9 항에 있어서,
    상기 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템은,
    데이터의 연집 오류를 정정하기 위해 사용되는 인터리빙/디인터리빙을 수행함에 있어, 기본적으로 읽혀진 위치에 데이터를 쓰도록 주소를 발생시켜 열간 치환을 복원하고 한 개의 메모리를 사용하여 인터리빙/디인터리빙의 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 것을 특징으로 하는 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템.
  11. 제 9 항 또는 제 10 항에 있어서,
    상기 인터리빙 수단은,
    쓰기 주소 발생수단 및 제1 및 제2 선택수단으로부터 입력되는 입력 시퀀스를 저장하기 위한 인터리빙 저장수단;
    상기 인터리빙 저장수단의 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 상기 쓰기 주소 발생수단;
    상기 쓰기 주소 발생수단으로부터 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하기 위한 주소 오프셋 발생수단;
    상기 주소 오프셋 발생수단으로부터 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 인터리빙 저장수단을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하기 위한 읽기 주소 발생수단;
    상기 쓰기 주소 발생수단 및 읽기 주소 발생수단으로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의제어신호와 주소 중에 해당 사이클에 필요한 신호를 선택하기 위한 상기 제1 및 제2 선택수단; 및
    상기 읽기 주소 발생수단으로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하기 위한 제3 선택수단
    을 포함하는 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템.
  12. 제 9 항 또는 제 10 항에 있어서,
    상기 디인터리빙 수단은,
    쓰기 주소 발생수단 및 제1 및 제2 선택수단으로부터 입력되는 프레임의 심벌을 저장하기 위한 디인터리빙 저장수단;
    상기 디인터리빙 저장수단의 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하기 위한 상기 쓰기 주소 발생수단;
    상기 쓰기 주소 발생수단으로부터 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하기 위한 주소 오프셋 발생수단;
    상기 주소 오프셋 발생수단으로부터 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 디인터리빙 저장수단을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하기 위한 읽기 주소 발생수단;
    상기 쓰기 주소 발생수단 및 읽기 주소 발생수단으로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하기 위한 상기 제1 및 제2 선택수단; 및
    상기 읽기 주소 발생수단으로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하기 위한 제3 선택수단
    을 포함하는 인터리빙/디인터리빙 수행 장치를 이용한 채널 부호화 시스템.
  13. 데이터의 연집 오류를 정정하기 위한 인터리빙 수행 장치에 적용되는 인터리빙 수행 방법에 있어서,
    쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 입력 시퀀스를 저장하는 제 1 단계;
    상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 단계;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하는 제 3 단계;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 단계;
    상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 각각 선택하는 제 5 단계; 및
    상기 읽기 주소 발생기로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하는 제 6 단계
    를 포함하는 인터리빙 수행 방법.
  14. 제 13 항에 있어서,
    상기 인터리빙 수행 방법은,
    하나의 메모리만을 사용하여 인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 것을 특징으로 하는 인터리빙 수행 방법.
  15. 제 13 항 또는 제 14 항에 있어서,
    상기 제 2 단계는,
    데이터 율이 바뀌는 경우를 수용하기 위하여 데이터 율이 증가하는 경우에는 아무런 변화가 없이 읽기 동작을 수행하고, 데이터 율이 감소하는 경우에는 열 당 심벌 수의 차이값과 WR_OFF의 곱을 매개변수로 이전 프레임에 비해 심벌이 줄어들어 실제 쓰여지지 않은 메모리의 영역을 건너뛰게 하는 것을 특징으로 하는 인터리빙 수행 방법.
  16. 제 15 항에 있어서,
    상기 제 2 단계는,
    인터리빙을 수행하기 위한 매개변수(i=0; WR_OFF=1; MID_OFF=C; MAX_B=B; JMP_OFF=0)를 초기화하는 제 7 단계;
    상기 매개변수가 초기화되면 첫번째 프레임에 대한 신호(frame_sync)를 기다리는 제 8 단계;
    상기 첫번째 열의 시작을 알리는 프레임에 대한 신호(frame_sync)를 입력받아 첫번째 심벌을 기록하기 위해 인터리버 램으로부터 해당 주소를 읽어오는 제 9 단계;
    상기 인터리버 램으로부터 읽어온 데이터와 "wr_strobe" 신호를 확인한 후, 입력받은 입력(input)신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해서 입력 신호에 따라 논리합 또는 논리곱을 수행하여 상기 메모리 블록의 주소를 기록하는 제 10 단계;
    상기 읽어온 프레임에 대한 신호(frame_sync)의 두번째의 심벌을 기록하기 위해서 먼저 해당 주소를 읽어오고 "wr_strobe" 신호를 확인한 후에 입력받은 두번째 입력신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해 입력신호에 따라 논리합 또는 논리곱을 수행하여 상기 인터리버 램에 기록하는 제 11 단계;
    상기 쓰기 주소 발생기를 통해 한 프레임의 심벌을 모두 기록한 후 읽기 주소 발생기로 인터리빙을 수행해도 된다는 신호(rd_start)를 발생시키는 제 12 단계
    를 포함하는 인터리빙 수행 방법.
  17. 제 13 항 또는 제 14항에 있어서,
    상기 제 3 단계는,
    상기 초기화된 매개변수 중에서 MID_OFF를 입력받아 MID_OFF가 프레임내의 심벌 수인 N보다 작은지를 확인하는 제 7 단계;
    상기 제 7 단계의 확인결과, MID_OFF가 N보다 크거나 같으면 소정의 값에 따라 "modulo"연산을 취하여 RD_OFF를 구하고, MID_OFF가 N보다 작으면 MID_OFF가 되는 제 8 단계;
    상기 구해진 값에 따라 열간 치환을 수행할지를 판단하는 제 9 단계;
    상기 제 9 단계의 판단결과, 열간 치환을 수행하지 않으면 COL_OFF가 0이 되고, 열간 치환이 수행하면 WR_OFF*DIFF_COL_IDX를 이용하여 COL_OFF를 구하는 제 10 단계;
    상기 구해진 COL_OFF 값이 N보다 큰지를 확인하는 제 11 단계; 및
    상기 COL_OFF 값이 N보다 크거나 같으면 COL_OFF mod (N-1)과 같이 "modulo" 연산을 취하는 제 12 단계
    를 포함하는 인터리빙 수행 방법.
  18. 제 13 항 또는 제 14 항에 있어서,
    상기 제 4 단계는,
    상기 쓰기 주소 발생기 및 오프셋 발생기에 이용된 심벌을 인터리빙 순서로 읽어내기 위하여 인터리빙을 수행해도 좋다는 신호(rd_start)가 발생되면 상기 RD_OFF를 래치하여 인터리빙하는 심벌의 수를 계수하기 위한 변수인 j를 0으로 초기화하는 제 7 단계;
    상기 초기화 후에, 쓰기 동작이 수행 중인지를 확인하여 읽기 동작이 수행 중이면 바로 메모리를 인터리빙의 순서로 읽고, 쓰기 동작이 수행중이면 rd_strobe 신호가 1인지를 확인하는 제 8 단계;
    상기 제 8 단계의 확인결과, rd_strobe 신호가 1이 아니면 rd_strobe 신호가1이 될 때까지 반복 수행하고, rd_strobe 신호가 1이면 메모리를 인터리빙의 순서로 읽는 제 9 단계;
    상기 메모리를 인터리빙의 순서로 읽은 후, 프레임에 해당하는 심벌을 모두 인터리빙의 순서로 읽었는지를 확인하기 위해 j와 N-1을 비교하는 제 10 단계;
    상기 제 10 단계의 비교결과, j가 N-1보다 작으면 다음 심벌을 읽기 위해 RD_IDX를 RD_OFF 만큼 증가시키고 j를 1만큼 증가시킨 후에, 열이 바뀌는지를 확인하기 위해 j를 B-1로modulo연산을 취하는 제 11 단계; 및
    상기 연산을 취한 값이 '0'이면, RD_IDX에 COL_OFF만큼 증가시킨 후, 상기 제 14 단계로 넘어가고, 결과값이 '0'이 아니면 바로 상기 제 8 단계로 넘어가는 제 12 단계
    를 포함하는 인터리빙 수행 방법.
  19. 데이터의 연집 오류를 정정하기 위한 디인터리빙 수행 장치에 적용되는 디인터리빙 수행 방법에 있어서,
    쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 프레임의 심벌을 저장하는 제 1 단계;
    상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 단계;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하는 제 3 단계;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 디인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 단계;
    상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하는 제 5 단계; 및
    상기 읽기 주소 발생기로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하는 제 6 단계
    를 포함하는 디인터리빙 수행 방법.
  20. 제 19 항에 있어서,
    상기 디인터리빙 수행 방법은,
    하나의 메모리만을 사용하여 디인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록하는 것을 특징으로 하는 디인터리빙 수행 방법.
  21. 제 19 항 또는 제 20 항에 있어서,
    상기 제 2 단계는,
    디인터리빙을 수행하기 위한 매개변수(i=0;WR_OFF=1;MAX_B=B;JMP_0)를 초기화하는 제 7 단계;
    상기 매개변수가 초기화되면 첫번째 프레임에 대한 신호(frame_sync)를 기다리는 제 8 단계;
    상기 첫번째 열의 시작을 알리는 프레임에 대한 신호(frame_sync)를 입력받고 첫번째 심벌을 기록하기 위해 디인터리버 램으로부터 해당 주소를 읽어오는 제 9 단계;
    상기 디인터리버 램으로부터 읽어온 데이터와 "wr_strobe" 신호를 확인한 후에 입력받은 입력(input)신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해서 입력신호에 따라 논리합 또는 논리곱을 수행하여 상기 디인터리버 램에 기록하는 제 10 단계;
    상기 읽어온 프레임에 대한 신호의 두번째 심벌을 기록하기 위해서 해당 주소를 읽어오고 "wr_strobe" 신호를 확인한 후에 입력받은 두번째 입력신호에 의해 만들어진 마스크를 해당 심벌만 덮어쓰기 위해 입력신호에 따라 논리합 또는 논리곱을 수행하여 상기 디인터리버 램에 기록하는 제 11 단계; 및
    상기 쓰기 주소 발생기를 통해 한 프레임의 심벌을 모두 기록한 후 읽기 주소 발생기로 인터리빙을 수행해도 된다는 신호(rd_start)와 주소 오프셋 발생기로부터 전달받은 RD_OFF을 발생시키는 제 12 단계
    를 포함하는 디인터리빙 수행 방법.
  22. 제 21 항에 있어서,
    상기 제 10 단계는,
    현재 입력되는 심벌이 쓰여질 위치를 포함한 주소를 먼저 읽어와서 그 위치의 데이터만 현재 입력된 심벌로 덮어쓰기 위해 해당 주소를 읽고, "wr_strobe" 신호를 확인한 후에, 마스크를 만드는데 입력 심벌이 0이면 그 심벌이 쓰여질 위치를 0으로하고 나머지는 1로 만들어 읽어온 데이터와 논리곱을 수행시키고, 입력 심벌이 1이면 그 심벌이 쓰여질 위치를 1로 하고 나머지는 0으로 하여 읽어온 데이터와 논리합을 수행한 결과를 메모리의 해당 위치에 쓰도록 하는 것을 특징으로 하는 디인터리빙 수행 방법.
  23. 제 19 항 또는 제 20 항에 있어서,
    상기 제 3 단계는,
    상기 초기화된 매개변수 중에서 MID_OFF를 입력받아 MID_OFF가 프레임내의 심벌 수인 N보다 작은지를 확인하는 제 7 단계;
    상기 제 7 단계의 확인결과, MID_OFF가 N보다 크거나 같으면 소정의 값에따라 "modulo"연산을 취하여 RD_OFF을 구하고, MID_OFF가 N보다 작으면 MID_OFF가 되는 제 8 단계;
    상기 구해진 값에 따라 열간 치환을 수행할지를 판단하는 제 9 단계;
    상기 제 9 단계의 판단결과, 열간 치환을 수행하지 않으면 COL_OFF가 0이 되고, 열간 치환이 수행하면 RD_OFF*DIFF_COL_IDX를 이용하여 COL_OFF를 구하는 제 10 단계;
    상기 구해진 COL_OFF 값이 N보다 큰지를 확인하는 제 11 단계; 및
    상기 COL_OFF 값이 N보다 크거나 같으면 COL_OFF mod (N-1)과 같이 "modulo"연산을 취하는 제 12 단계
    를 포함하는 디인터리빙 수행 방법.
  24. 제 19 항 또는 제 20 항에 있어서,
    상기 제 4 단계는,
    상기 쓰기 주소 발생기 및 오프셋 발생기에 이용된 심벌을 디인터리빙 순서로 읽어내기 위하여 디인터리빙을 수행해도 좋다는 신호(rd_start)가 발생되면 상기 RD_OFF를 래치하여 디인터리빙하는 심벌의 수를 계수하기 위한 변수인 j를 0으로 초기화하는 제 7 단계;
    상기 초기화 후에, 쓰기 동작이 수행 중인지를 확인하여 읽기 동작이 수행중이면 메모리를 디인터리빙의 순서로 읽고, 쓰기 동작이 수행 중이면 rd_strobe 신호가 1인지를 확인하는 제 8 단계;
    상기 제 8 단계의 확인결과, rd_strobe 신호가 1이 아니면 rd_strobe 신호가 1이 될 때까지 반복 수행하고, rd_strobe 신호가 1이면 메모리를 디인터리빙의 순서로 읽는 제 9 단계;
    상기 메모리를 디인터리빙의 순서로 읽은 후, 프레임에 해당하는 심벌을 모두 디인터리빙의 순서로 읽었는지를 확인하기 위해 j와 N-1을 비교하는 제 10 단계; 및
    상기 제 10 단계의 비교결과, j가 N-1보다 작으면 다음 심벌을 읽기 위해 RD_IDX를 RD_OFF만큼 증가시키고 j를 1만큼 증가시킨 후에, 상기 제 8 단계부터 반복 수행하는 제 11 단계
    를 포함하는 디인터리빙 수행 방법.
  25. 데이터의 연집 오류를 정정하기 위한 인터리빙/디인터리빙 수행 장치에 적용되는 인터리빙/디인터리빙 수행 방법에 있어서,
    인터리빙/디인터리빙을 수행하기 위한 소스데이터(인터리빙)의 프레임(블록) 또는 인터리빙된 데이터(디인터리빙) 프레임(블록)을 처리하기 위해 인터리빙/디인터리빙 처리 단위별로 메모리에 저장하고, 저장된 프레임을 이전 프레임이라고 하면, 이전 프레임을 인터리빙/디인터리빙하는 동안에 다시 다음 프레임에 해당하는 심벌이 입력되어 이를 저장할 수 있도록 하는 상기 메모리를 필요로 하며, 다음 프레임에 해당하는 심벌을 위해 상기 메모리를 추가하지 않고, 이전 프레임의 심벌이 읽혀진 위치를 따라 기록하는 것을 특징으로 하는 인터리빙/디인터리빙 수행 방법.
  26. 데이터의 연집 오류를 정정하고, 하나의 메모리만을 사용하여 인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록할 수 있도록 하기 위하여, 프로세서를 구비한 인터리빙 수행 장치에,
    쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 입력 시퀀스를 저장하는 제 1 기능;
    상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 기능;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 위해 사용되는 매개변수(COL_OFF)를 발생하는 제 3 기능;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 기능;
    상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소 중에 해당 사이클에 필요한 신호를 각각 선택하는 제 5 기능; 및
    상기 읽기 주소 발생기로부터 전달되는 인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력신호 중에서 해당 심벌을 선택하는 제 6 기능
    을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
  27. 데이터의 연집 오류를 정정하고, 하나의 메모리만을 사용하여 디인터리빙 순서에 맞게 읽혀진 자리에 열간 치환을 고려하여 다음 데이터를 기록할 수 있도록 하기 위하여, 프로세서를 구비한 디인터리빙 수행 장치에,
    쓰기 주소 발생기 및 제1 및 제2 다중화기로부터 입력되는 프레임의 심벌을 저장하는 제 1 기능;
    상기 저장된 메모리 블록에 쓰기 동작을 수행하기 위해 연속하여 들어오는 심벌이 쓰여질 메모리의 위치간 오프셋(WR_OFF)을 구하고, 실제 쓰여질 주소와 데이터 및 메모리 제어 신호를 발생하는 제 2 기능;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)을 구하기 위해 사용되는 중간값(MID_OFF) 및 시작신호(cal_start)를 입력받아 디인터리빙의 순서로 읽어 나가도록 하기 위해 필요한 메모리 위치간의 오프셋(RD_OFF)과 열간 치환을 복원하기 위해 필요한 매개변수(COL_OFF)를 발생하는 제 3 기능;
    상기 발생된 신호를 연속하여 읽어질 심벌의 메모리 위치간의 오프셋(RD_OFF)만큼씩 증가시키고, 상기 저장된 디인터리버 램을 읽기 위해 주소를 만들어 메모리 제어 신호를 발생하는 제 4 기능;
    상기 쓰기 주소 발생기 및 읽기 주소 발생기로부터 전달되는 쓰기 동작을 위해 필요한 읽기 동작과 실제 인터리빙을 수행하기 위해 필요한 읽기 동작의 제어신호와 주소를 선택하는 제 5 기능; 및
    상기 읽기 주소 발생기로부터 전달되는 디인터리빙을 수행하기 위한 읽기 동작에 의하여 발생한 메모리의 출력 중에서 해당 심벌만을 선택하는 제 6 기능
    을 실현시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR10-2000-0059749A 2000-10-11 2000-10-11 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템 KR100430567B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR10-2000-0059749A KR100430567B1 (ko) 2000-10-11 2000-10-11 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템
US09/750,186 US6735723B2 (en) 2000-10-11 2000-12-29 Apparatus and method for processing interleaving/deinterleaving with address generator and channel encoding system using the same
JP2001110088A JP4728500B2 (ja) 2000-10-11 2001-04-09 アドレス発生器を含んだインターリーブ/ディインターリーブを行う装置、その方法及びそれを利用したチャネル符号化システム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR10-2000-0059749A KR100430567B1 (ko) 2000-10-11 2000-10-11 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템

Publications (2)

Publication Number Publication Date
KR20020028639A true KR20020028639A (ko) 2002-04-17
KR100430567B1 KR100430567B1 (ko) 2004-05-10

Family

ID=19692932

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2000-0059749A KR100430567B1 (ko) 2000-10-11 2000-10-11 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템

Country Status (3)

Country Link
US (1) US6735723B2 (ko)
JP (1) JP4728500B2 (ko)
KR (1) KR100430567B1 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100699491B1 (ko) * 2005-07-19 2007-03-26 삼성전자주식회사 인터리빙 방법 및 그 장치
KR100762134B1 (ko) * 2004-10-07 2007-10-02 엘지전자 주식회사 블록 인터리빙을 위한 읽기 주소 발생 방법
KR100860660B1 (ko) * 2002-01-09 2008-09-26 삼성전자주식회사 통신시스템의 인터리빙 장치 및 방법
US7764657B2 (en) 2002-06-20 2010-07-27 Nokia Corporation Interleaving of information bits
US9531407B2 (en) 2014-10-14 2016-12-27 Foundation Of Soongsil University-Industry Cooperation Method and interleaving apparatus for interleaving for error dispersion and computer readable recording medium for performing the same

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1333531C (zh) * 2001-02-23 2007-08-22 皇家菲利浦电子有限公司 包含并联解码器的特播解码器系统
TW200803242A (en) * 2001-04-16 2008-01-01 Interdigital Tech Corp Physical layer processing for a wireless communication system using code division multiple access
US6964005B2 (en) * 2001-06-08 2005-11-08 Broadcom Corporation System and method for interleaving data in a communication device
US7352723B2 (en) * 2003-04-25 2008-04-01 Lucent Technologies Inc. Method of forming a coded composite transport channel for downlink transmissions
US7073012B2 (en) * 2003-08-26 2006-07-04 Broadcom Corporation System and method for interleaving data in a communications device
US7542463B2 (en) * 2004-09-24 2009-06-02 Cisco Technology, Inc. Communicating packets along a control channel and a media channel
JP2006197519A (ja) * 2005-01-17 2006-07-27 Tohoku Univ Cdma送信装置、cdma受信装置、cdma送受信装置、cdma伝送方法
WO2007066940A1 (en) * 2005-12-05 2007-06-14 Samsung Electronics Co., Ltd. Apparatus and method for controlling an interleaver/deinterleaver memory in a mobile communication system
US20070277064A1 (en) * 2006-05-02 2007-11-29 Mediatek Inc. Reconfigurable convolutional interleaver/deinterleaver using minimum amount of memory and an address generator
CN101309126A (zh) * 2008-05-21 2008-11-19 北京新岸线移动多媒体技术有限公司 公共交织帧的组帧方法及组帧装置
JP2011176596A (ja) * 2010-02-24 2011-09-08 Panasonic Mobile Communications Co Ltd インタリーブ装置及びインタリーブ方法
KR102521054B1 (ko) 2017-10-18 2023-04-12 삼성전자주식회사 조기 중단에 기반한 심층 신경망의 연산 제어 방법 및 시스템
CN111245447B (zh) * 2020-02-28 2023-07-25 武汉虹信科技发展有限责任公司 一种基于fpga的天线数据交织和解交织方法

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3665405A (en) * 1970-03-17 1972-05-23 Computer Transmission Corp Multiplexer
NL8702394A (nl) * 1987-10-08 1989-05-01 Philips Nv Interface voor een verbindingsnetwerk tussen afzonderlijke stations enerzijds en een voor het berichtenverkeer tussen deze stations gebruikt fysiek medium anderzijds.
US5544306A (en) * 1994-05-03 1996-08-06 Sun Microsystems, Inc. Flexible dram access in a frame buffer memory and system
US5627994A (en) * 1994-07-29 1997-05-06 International Business Machines Corporation Method for the assignment of request streams to cache memories
US5636224A (en) 1995-04-28 1997-06-03 Motorola Inc. Method and apparatus for interleave/de-interleave addressing in data communication circuits
JPH0991953A (ja) * 1995-09-21 1997-04-04 Hitachi Ltd 半導体記憶装置
US5764649A (en) 1996-03-29 1998-06-09 Amati Communications Corporation Efficient address generation for convolutional interleaving using a minimal amount of memory
US5828671A (en) 1996-04-10 1998-10-27 Motorola, Inc. Method and apparatus for deinterleaving an interleaved data stream
JP3290074B2 (ja) * 1996-06-21 2002-06-10 株式会社ケンウッド タイムインターリーブ回路
US5940863A (en) 1996-07-26 1999-08-17 Zenith Electronics Corporation Apparatus for de-rotating and de-interleaving data including plural memory devices and plural modulo memory address generators
KR100212854B1 (ko) 1997-03-31 1999-08-02 전주범 트렐리스 디코더에서의 디인터리빙 및 출력 처리 장치
JPH10303854A (ja) 1997-04-23 1998-11-13 Matsushita Electric Ind Co Ltd デインタリーブ装置
US5928371A (en) 1997-07-25 1999-07-27 Motorola, Inc. Systems for programmably interleaving and de-interleaving data and method thereof
US6507629B1 (en) * 1998-04-07 2003-01-14 Sony Corporation Address generator, interleave unit, deinterleave unit, and transmission unit
JP3257984B2 (ja) * 1998-10-30 2002-02-18 富士通株式会社 インタリーブ方法及びデインタリーブ方法並びにインタリーブ装置及びデインタリーブ装置並びにインタリーブ/デインタリーブシステム並びにインタリーブ/デインタリーブ装置並びにインタリーブ機能付きの送信装置,デインタリーブ機能付きの受信装置及びインタリーブ/デインタリーブ機能付きの送受信装置
WO2001005040A1 (en) * 1999-07-13 2001-01-18 Samsung Electronics Co., Ltd. Address generating device for use in multi-stage channel interleaver/deinterleaver
JP3345396B2 (ja) * 1999-10-07 2002-11-18 松下電器産業株式会社 インターリーブアドレス生成装置及びインターリーブアドレス生成方法
JP3399904B2 (ja) * 2000-03-17 2003-04-28 松下電器産業株式会社 インタリーブアドレス生成装置
US6624767B1 (en) * 2000-09-06 2003-09-23 Qualcomm, Incorporated Data buffer structure for asynchronously received physical channels in a CDMA system

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100860660B1 (ko) * 2002-01-09 2008-09-26 삼성전자주식회사 통신시스템의 인터리빙 장치 및 방법
US7764657B2 (en) 2002-06-20 2010-07-27 Nokia Corporation Interleaving of information bits
KR100762134B1 (ko) * 2004-10-07 2007-10-02 엘지전자 주식회사 블록 인터리빙을 위한 읽기 주소 발생 방법
KR100699491B1 (ko) * 2005-07-19 2007-03-26 삼성전자주식회사 인터리빙 방법 및 그 장치
US9531407B2 (en) 2014-10-14 2016-12-27 Foundation Of Soongsil University-Industry Cooperation Method and interleaving apparatus for interleaving for error dispersion and computer readable recording medium for performing the same

Also Published As

Publication number Publication date
KR100430567B1 (ko) 2004-05-10
US6735723B2 (en) 2004-05-11
JP4728500B2 (ja) 2011-07-20
US20020062464A1 (en) 2002-05-23
JP2002152054A (ja) 2002-05-24

Similar Documents

Publication Publication Date Title
KR100430567B1 (ko) 주소발생기를 포함한 인터리빙/디인터리빙 수행 장치 및그 방법과 그를 이용한 채널 부호화 시스템
RU2216099C2 (ru) Устройство и способ перемежения/обратного перемежения для системы связи
CN100426680C (zh) Turbo解码器的缓冲器结构
US5764649A (en) Efficient address generation for convolutional interleaving using a minimal amount of memory
KR100860245B1 (ko) 코드 분할 다중 접속 시스템에서 역 레이트 매칭을수행하는 방법 및 장치
US8433982B2 (en) Error-correcting encoding apparatus
KR100754077B1 (ko) 코딩된 저장 심벌 및 부가적인 정보를 사용하여 입력데이터 비트 시퀀스를 인터리빙하는 인터리버 및 방법
RU2274950C2 (ru) Устройство и способ перемежения для системы связи
JP4955049B2 (ja) ターボ符号化のためのブロック・インターリーブ
CN100555880C (zh) 交织顺序发生器、交织器、Turbo码编码器和Turbo码译码器
EP0660558A2 (en) Interleaving method and apparatus for digital data transmission in GSM-networks
EP1125366B1 (en) Generalized convolutional interleaver/deinterleaver
US7702970B2 (en) Method and apparatus for deinterleaving interleaved data stream in a communication system
US7073012B2 (en) System and method for interleaving data in a communications device
US20100042899A1 (en) Deinterleaver
US20080080542A1 (en) Architecture for downlink receiver bit rate processor
KR100499467B1 (ko) 블록 인터리빙 방법 및 그를 위한 장치
US20080080444A1 (en) Transport channel buffer organization in downlink receiver bit rate processor
KR101009783B1 (ko) 인터리빙된 데이터 열의 디인터리빙 방법 및 장치
US20040213183A1 (en) Method of forming a coded composite transport channel for downlink transmissions
US6714606B1 (en) Integrated services digital broadcasting deinterleaver architecture
GB2294616A (en) Data interleaving process for radio transmission
KR100601624B1 (ko) 인터리버빙과 디인터리빙 장치 및 방법
KR20040080764A (ko) 이동통신 시스템의 단말기에서 데이터 저장 장치 및 그제어 방법

Legal Events

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

Payment date: 20120330

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20130325

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee