하드웨어 설계/Circuit Information

Symbol Repetition and Block Interleaver

가카리 2012. 9. 4. 15:04
반응형

컨볼루션 코드화된 심볼은 심볼 반복기(Symbol Repetition)을 통하여 여러번의 반복과정을 통해 모두 19.2Ksps로 통일되어 출력됩니다. 즉 컨볼루션 코드화되기 전의 음성데이터 전송이 9.6Kbps는 반복을 하지 않고(어차피 컨볼루션 코드화 되면 19.2Ksps가 되니까...) 4.8Kbps, 1.2Kbps의 경우에 19.2Ksps가 되도록 반복 쓰기를 합니다. 데이터 전송율을 이렇게 통일시키는 이유가 무엇일까요? 그건 여러개의 데이터 전송율로 계속 처리한다면 시스템에서 4가지의 회로가 필요하기 때문입니다.

데이터 전송율이 모두 한가지(19.2Ksps)로 통일 되었다 해도 그 데이터마다 당초의 음성 데이터 전송율이 얼마였는지를 표시함으로써 전파로 최종 발사시에 출력을 조정할 수 있습니다.

이번엔 블록 인터리버(Block Interleaver)를 알아볼까요?

전송에 따라 데이터에 에러가 발생하면 복구가 불가능하게 되어 데이터를 이용할 수 없는 경우가 발생하는데 이를 최소화 하기 위해 에러 정정방법을 사용합니다. 앞서 말씀드렸듯이 컨볼루션 코드가 에러 정정을 위해 사용되지요. 근데 컨볼루션 코드는 에러가 드문 드문 산재해 있을 때 복구가 가능합니다.

만약에 에러가 일정 부분에 집중되어 있으면 에러 정정 코드로는 정정이 불가능해집니다. 아무리 좋은 에러 정정 코드를 사용한다 해도 이렇게 특정부분에 에러가 집중되어 연속적으로 데이터를 한꺼번에 잃어버리는 것을 방지하기는 어렵습니다. 이때 블록 인터리버가 에러가 집중되는 것을 최소화하는 역할을 합니다.

컨볼루션 코드화된 데이터는 블록 인터리버로 입력되어 인터리빙(Interleaving) 됩니다.

블록 인터리버의 원리는 다음과 같습니다.

전송할 데이터가 1, 2, 3, 4, ... 20이라고 할때 입력은 세로방향으로 쓰여지고 출력은 가로방향으로 하게 됩니다. 이렇게 데이터를 정열하는 것을 인터리빙이라고 합니다. 송신측에서 이렇게 데이터를 정열해서 보내면 수신측에서 다시 반대 과정을 거치는 것을 디인터리빙(DeInterleaving)이라고 합니다.

입 1 6 11 16 --> 출력방향

력 2 7 12 17

방 3 8 13 18

향 4 9 14 19

5 10 15 20

위와 같이 보내면 어떤 잇점이 있을까요?

순서를 바꾸지 않고 그냥 보낼 경우에는 데이터가 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 이렇게 되겠죠? 그런데 에러가 한곳에 집중적으로 발생하여 2,3,4,5가 모두 깨어졌다고 생각해보죠... 그럼 수신된 데이터가 1**** 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 이 될거고 아마 1****는 복구가 되지 못할 것입니다.

이걸 위의 인터리빙 과정을 거친 데이터라 가정하면 전송되는 데이터는 1,6,11,16 2,7,12,17 3,8,13,18 4,9,14,19 5,10,15,20이 될겁니다. 여기서 2,3,4,5가 깨어지면 수신되는 데이터는 1,6,11,16 *,7,12,17 *,8,13,18 *,9,14,19 *,10,15,20이 됩니다. 이제는 에러가 분산이 되었으니까 복구가 될 겁니다.

즉 인터리빙하지 않고 1,2,3,4,5처럼 연속적으로 데이터를 전송하다가 1부터 10까지의 데이터가 손상된다면 아무리 이전의 비트와 연관되었다 해도 컨볼루션 코드를 이용해 데이터를 복구할 수 없게 됩니다. 이렇게 집중적으로 에러가 발생하는 것을 버스트에러(Burst Error)라고 하고 드문 드문 에러가 발생하는 것을 랜덤에러(Random Error)라고 합니다. 즉 블록 인터리버는 버스트에러를 랜덤에러화하는 역할을 합니다.

인코딩이나 인터리빙 방법은 에러를 정정하는데에는 효과가 있지만 다른 사람이 도청하는 것을 막지는 못합니다. 따라서 CDMA에서는 롱코드를 이용하여 암호화 과정을 거칩니다.

롱코드 발생기(Long Code Generator)에서 PN 시퀀스로 된 긴 코드(Long Code)를 발생시키는데 이 긴 코드들이 블록인터리버로부터 출력된 데이터를 전혀 다른 값으로 바꾸어 암호화합니다. 롱코드는 각 사용자마다 유일하게 할당되며 가입자마다 주어질 수 있는 경우의 수가 2exp(42)-1(약 4조 2천억개)가 되므로 이 코드를 안다는 것은 거의 불가능에 가깝습니다. 암호화를 거친 데이터에는 타 사용자에 대한 간섭등을 줄이기 위한 전력제어용 비트가 삽입됩니다.

[출처]: http://vanijini.net/bbs/view.php?id=mobile&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&&select_arrange=headnum&desc=asc&no=41