오늘은 EYE PATTERN 에 대해 알아 보려 합니다.
학부 때 EYE PATTERN 이란 걸 보고 이게 뭘까 ~ 정말 도무지 감이 안 왔던 기억이 있습니다.
EYE PATTERN 이란 특정 시간 구간 동안 들어오는 신호의 파형을 계속 겹쳐서 나타낸 것뿐입니다.
보통 EYE PATTERN을 그릴 때는 2 심볼 구간 동안 표시를 하곤 하죠.
오늘 EYE PATTERN을 하기 전에 BPSK 에 모르시는 분들은 아래 글을 읽고 오시기 바랍니다.
2011/03/08 - [잡담,잡다] - [디지털 통신] BPSK, QPSK
그리고 Raised cosine filter 에 대해서는 아래 글을 참조해 주세요.
2011/03/02 - [MATLAB] - [디지털 통신] Raised Cosine Filter
그럼 이제 matlab 코딩을 시작 해 보죠. BPSK 신호의 송수신을 예로 들어서 설명해 보겠습니다. 잡음은 고려하지 않겠습니다.
- 먼저 Square root raised filter 를 만듭니다. 8 oversample 에 group delay 3심볼, roll off 0.2 인 필터를 만들겠습니다.
Sqrt_r_filter= rcosine(1e6, 8e6, 'sqrt', 0.2, 3);
- 비트를 만듭니다. 여기선 5000 비트를 만들겠습니다.
bits=randi([0 1], 5000, 1);
- 비트 0은 -1로 비트 1은 1로 Mapping 해줍니다.
Mapped_signal=bits*2-1;
- 8 oversample 이므로 8배upsample 을 합니다. upsample 이란 중간에 0을 채워 넣는 겁니다.
Upsampled_signal=upsample(Mapped_signal, 8);
- Tx filtering 을 수행합니다.
Tx_signal=filter(Sqrt_r_filter,1, Upsampled_signal);
- 수신 단에서는 Rx filtering 을 수행합니다.
Rx_signal=filter(Sqrt_r_filter,1, Tx_signal);
이제 신호의 송수신은 다 됐습니다.
근데 위에서도 말했듯이 EYE PATTERN 을 보기 위해서는 특정 구간으로 겹쳐서 그려야 합니다.
따라서 위의 수신 신호 Rx_signal 을 적절히 구성만 해주면 됩니다.
2 심볼 구간 동안의 EYE PATTERN을 보기 위한 2 심볼은 8*2 = 16 샘플 입니다.
그리고 Rx_signal 의 1부터 48번째까지의 값은 delay 값 일명 쓰레기 값입니다. 이는 필터의 delay 가 3 심볼이니깐 8*3에다 Tx , Rx 필터 통과니깐 또 *2 를 해서 48 이라는 숫자가 나오는 겁니다.
이제 다음과 같이 매트릭스를 구성합니다.
Rx_signal1=Rx_signal(49);
Rx_signal_cutted=Rx_signal(50:end);
N_column=floor(length(Rx_signal_cutted)/16);
Rx_signalmatrix=reshape(Rx_signal_cutted(1:16*N_column),16,N_column);
아래 코드의 빨간색 부분은 이전 신호의 온 타임 지점을 반복시켜 주기 위한 것입니다.
Rx_signalmatrix_all=[[Rx_signal1 Rx_signalmatrix(end,1:end-1)] ;Rx_signalmatrix];
이제 그림을 그려줍니다.
figure, plot(Rx_signalmatrix_all,'b'), grid on
결과는 다음과 같습니다.
그럼 ~ 맨~ 처음 만들었던 필터에서 roll off 를 바꿔가며 위에서 진행한 실험을 똑같이 해 봅니다.
roll off 가 0.5 일 때
roll off 가 0.7 일 때
roll off 가 1 일 때
쭉~ 보니깐 roll off 가 올라갈수록 그림이 깔끔해 지죠? roll off 가 올라갈수록 EYE 는 점점 더 열리게 되 므로 신호 품질은 더 좋아지는 겁니다.
하지만 공학이란 게 어디까지나 트레이드 오프가 있는 거니깐~ roll off가 높아진다고 무조건 좋은 건 아닙니다. roll off 가 높아질수록 BW(대역폭) 을 더 이용하게 되는 겁니다.
EYE PATTERN 이란 게 직접 시뮬레이션 해 보면 별거 아닌데 처음에 보면 이해가 어렵습니다. 이 글을 보시는 분들도 위 코드대로 직접 시뮬레이션 한번 해 보시기 바랍니다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB 함수의 해를 구해 보자~ fzero(), roots(), poly() (2) | 2011.03.13 |
---|---|
MATLAB ezplot() 함수로 그래프를 쉽게 그리자 (2) | 2011.03.13 |
MATLAB 다항식의 계수 추정 polyfit(), polyval() (0) | 2011.03.12 |
MATLAB 소스 코드 protection, pcode (1) | 2011.03.11 |
MATLAB Editor 파일 비교 (0) | 2011.03.08 |
MATLAB 부분 분수 전개 residue() (0) | 2011.03.07 |
MATLAB figure 창 위치를 바꿔보자 (4) | 2011.03.06 |
MATLAB 기본 함수들 (0) | 2011.03.02 |
댓글