Viterbi decoder Matlab 설계
- 최초 등록일
- 2012.11.02
- 최종 저작일
- 2012.11
- 5페이지/ 한컴오피스
- 가격 2,000원
소개글
통신이론때 배우는 에러정정기술중에 비터비 디코더 설계입니다.
비터비 디코더를 MATLAB을 이용해서 설계했습니다.
데이터 길이는 6비트 코드레이트는 1/2입니다
목차
1. 비터비 디코더의 개요
2. MATLAB 소스 분석
본문내용
Viterbi decoder 알고리즘
Viterbi decoder 알고리즘은 트렐리스도로 표현할 수 있다. 그림 2는 구속장(K)이 3, 부호율이 1/2인 Viterbi decoder이다. 실선 부분은 state register에 0이 입력으로 들어왔을 경우이고, 점선 부분은 1이 입력으로 들어왔을 경우이다. 길쌈 부호기에 입력으로 1 비트(0 or 1)가 들어오면 출력으로 2 비트 부호어가 나가게 되어있으므로, Viterbi decoder에서는 2 비트 부호어를 단위로 하여 데이터를 처리한다. 이 부호어와 수신된 2 비트간의 거리를 구한 것이 branch metric(BM)으로 이것은 경판정법(hard decision)에 따라서 계산된 해밍 거리이다.
각 state에서 이전까지 선택된 경로에 대한 branch metric들의 합을 상태 값 이라고 하는데, 이전 state까지의 상태 값과 현재 state의 branch metric을 이용하여 각 상태로 천이하는 경로들 중 상태 값이 적은 경로를 선택하게 된다. 이런 선택의 과정을 거친 후 상태 값이 최소인 상태(minimum state)를 선택하여 선택된 경로에 대한 역추적 방법(trace back)으로 데이터를 복원하게 된다.
[a, b] = min(temp(:,7));%3 2 3 0에서 최소값 0 a에는 최소값이 들어가고 b에는 인덱스인 0이 들어감. 즉 마지막 차이의 값이 가장 적은 것을 찾음 temp에 metric 저장됨.
in_arrow(1,6) = where(b,6);% where(4,6)이 in_arrow(1,6)에 들어감 어디에 쓰일까? 값은 8임. 가장 적은 곳의 값이 처음부분이 될 것임. where에 6번째는 이미썼고
%아래서 5부분에 대한 최소값을 찾아서 역추적을 해가야됨.
for r = 5:-1:1%r = 5 4 3 2 1 으로 감 이유는?
if mod(in_arrow(1,r+1),2) == 1 %
in_arrow(1,r) = where(2*ceil(in_arrow(1,r+1)/4)-1,r);
else% 처음에는 아래로 온다면 where(4,5)
in_arrow(1,r) = where(2*ceil(in_arrow(1,r+1)/4),r);
end
참고 자료
한밭대학교 비터비 알고리즘 참고함.