목차
1. Convolutional Code란?
2. Convolutional Code 기능
3. Convolutional Code 의 다항식
4. 컨벌루션 코드 MATLAB 사용법
1. Convolutional Code란?
- 출력 계열이 현재 뿐만 아니라 과거의 입력 계열에 의한 영향도 받아서 결정되는 장치
- 즉 기억이 있는 장치
- 오류 정정 능력이 아주 우수하다.
2. Convolutional Code 기능
- 블록 코드와 달리 컨벌루션 코더는 기억장치이다.
- 현재 입력 기호 집합뿐만 아니라 일부 이전 입력 기호(과거의 입력)에 따라 달라진다.
3. Convolutional Code 의 다항식
① 제약조건길이(구속장) 란?
: 출력에 영향을 주는 길이
② 생성 다항식
- 인코더 다이어그램에 k개의 입력과 n개의 출력이 있는 경우(위 그림과 같은 상황) 코드 생성기 행렬은 k x n 행렬이다.
- i번째 행과 j번째 열의 요소는 i번째 입력이 j번째 출력에 기여하는 방식을 나타낸다.
ex. 제약조건길이가 5이고 생성 다항식이 35와 31인 인코더의 트렐리스를 계산하기
trellis = poly2trellis( 5, [ 35 31 ] ); |
③ 생성 다항식 행렬 ( i , j ) 구하기
1. 이진수의 맨 왼쪽 지점은 현재 입력을, 맨 오른쪽 지점은 시프트 레지스터에 남아있는 가장 오래된 입력을 나타냄
2. 가장 오른쪽 비트부터 시작해서 연속 3개의 항 → 8진수로 표현
ex. 위 그림에선 상위 가산기의 이진수 표현은 110/ 하위 가산기의 이진수 표현은 111
110(2진수) → 6(8진수) / 111(2진수) → 7(8진수)
즉, 생성 다항식 행렬은 [6 7]
(세개씩 끊어서 읽되 필요에 따라 왼쪽 끝에 0 붙여도 됨)
str2num(dec2base(bin2dec('110'),8)) % 2진수 110을 8진수로 변환하기 |
④ 피드백 연결 다항식
% 사ㅏㅏㅏㅏ실 잘 몰겠음
- 피드백 인코더를 나타내는 경우 피드백 연결 다항식의 벡터가 필요하다. (벡터의 길이 = 인코더 다이어그램의 입력 수)
- 피드백 연결 다항식의 벡터는 8진수 형식을 사용하여 각 입력에 대한 피드백 연결을 나타낸다.
- 방식: 2진수 표현으로 작성한 뒤 8진수 표현으로 변환한다
- 인코더에 피드백 구성이 있고, 체계적이면 체계적 비트에 해당하는 코드 생성기 = 피드백 연결 매개변수
⑤ 피드백 컨벌루션 인코더에 트렐리스 구조 사용
** 위 그림과 같은 피드백을 가진 체계적 컨벌루션 인코더를 나타내는 트렐리스 구조 만들기
- 제약길이 = 5 / 생성기다항식 행렬 = [ 37 33 ] / 피드백 연결다항식 = 37
첫번째 생성다항식 37(8진수)은 첫번째 출력이 체계적 비트이므로 피드백 연결다항식과 일치한다 (?)
- poly2trellis 함수를 이용하여 다항식을 트렐리스 구조로 변환해보자.
- 피드백 다항식과 함께 사용하면 입력에 피드백을 연결해준다.
trellis = poly2trellis( 5, [ 37 33 ], 37 ); |
% trellis = 구조체
numInputSymbols: 2
numOutputSymbols: 4
numStates: 16
nextState: [ 16x2 double ]
Output: [ 16x2 double ]
data = randi( [ 0 1 ], 70, 1) ; codedData = convenc(data, trellis); tbdepth = 34; decodedData = vitdec(codedData, trellis, tbdepth, 'trunc', 'hard'); |
% 임의의 이진 데이터 생성 후 지정된 트렐리스 구조를 사용하여 데이터를 컨벌루션 방식으로 인코딩한다
% 지정된 트렐리스 구조와 함께 비터비 알고리즘을 사용하여 코딩된 데이터를 디코딩한다
% tbdepth = 34는 추적 깊이, 잘린 작동 모드 및 어려운 결정에 사용된다 (?)
biterr( data, decodedData )
4. 컨벌루션 코드 MATLAB 사용법
< 컨벌루션 코드의 트렐리스 설명 >
# MATLAB으로 트렐리스 만들기
① 속도가 k/n인 컨벌루션 코드에 대한 트렐리스 구조의 필드
필드 | 의미 | 치수 |
nulInputSymbols | 인코더에 대한 입력 심볼 수: 2k | 스칼라 |
numOutputSymbols | 인코더의 출력 심볼 수: 2n | 스칼라 |
numStates | 인코더의 상태 수 | 스칼라 |
nextStates | 현재 상태와 현재 입력의 모든 조합에 대한 다음 상태 | numState x 2^(k) |
outputs | 현재 상태와 현재 입력의 모든 조합에 대한 출력(8진수) | numState x 2^(k) |
② 트렐리스 구조 만드는 방법
: 각 필드에 넣을 정보를 알고나면 다음 방법으로 트렐리스 구조를 만들 수 있다.
- struct 명령으로 모든 필드 이름과 해당 값을 수집

# 컨벌루션 코드 생성 및 디코딩
: convenc() 함수 / vitdec() 함수
① 컨벌루션 코드 Encoding
'ICIS 학부 연구생 > 통신시스템 설계' 카테고리의 다른 글
[ 통신시스템설계 ] 05-(5) Convolutional Code와 Repetition Code의 BER 성능 비교 (0) | 2023.08.08 |
---|---|
[ 통신시스템설계 ] 05-(3) 컨벌루션 코드 인코딩/디코딩하기 (0) | 2023.08.08 |
[ 통신시스템설계 ] 05-(1) ECC(Error Correcting Codes 역사 소개 (0) | 2023.08.03 |
[ 통신시스템설계 ] 05-(0) 채널코딩 기본 (0) | 2023.08.03 |
[ 통신시스템설계 ] 04 16QAM 송수신기 (0) | 2023.07.31 |