본문 바로가기
programming language/MATLAB

MATLAB [디지털 통신] EYE PATTERN

by 남성 2011. 3. 9.

오늘은 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 oversamplegroup 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 이란 게 직접 시뮬레이션 해 보면 별거 아닌데 처음에 보면 이해가 어렵습니다. 이 글을 보시는 분들도 위 코드대로 직접 시뮬레이션 한번 해 보시기 바랍니다.


댓글10

  • 김도윤 2012.05.02 12:38

    여쭤볼게 있는데요.
    Upsample을 하면 bit간 간격이 넓어지니까 filter도 그에 따라서 time domain에서 늘려줘야 하지 않나요?
    그리고 마지막에 신호의 온타임 지점을 반복한다는 것이 무슨 말인지 잘 이해 못하겠네요.
    혹시 댓글 보시면 답변해주시면 감사하겠습니다.
    답글

    • 남성 2012.05.03 00:03 신고

      upsample 이란게 0 을 끼워 넣어주는것이므로 샘플 간의 간격은 좁아지는 겁니다. 즉 sample rate가 그만큼 증가하는 것이죠.

      위 포스팅에서 아래 코드는 필터 계수를 설계하기 위한 것인데~~

      Sqrt_r_filter= rcosine(1e6, 8e6, 'sqrt', 0.2, 3);

      1e6, 8e6 이므로 8배 upsample 에 대해 filter 계수를 생성하는 겁니다.

      예를 들어 4배 upsample 에 대해 filter 계수를 생성하고 싶다면

      rcosine(1, 4, 'sqrt', 0.2, 3); 하시면 됩니다.


      위 포스팅에서 아이패턴은 2심볼 구간 동안그린건데 17 샘플 마다 그려 주게 됩니다.

      즉 온타임 지점은 8 샘플 마다 오니까 예를 들자면

      1 9 17 를 그린 다음에

      17 25 33 를 그리고

      33 41 49 를 그리고

      49 57 65 를 그립니다.

      위 숫자들을 보면 17 33 49 번째 샘플을 한번씩 더 그린거죠. 그렇게 안 그리면 아이패턴을 그릴때마타 한 샘플씩 어긋나게 그리게 되겠죠.



  • scac 2012.09.20 17:39

    roll-off가 올라가서 eye pattern이 열리는게 아니라, square root raised cosine의 양 옆 진동하는 부분을 너무 짧게 잡아서 저렇게 눈이 닫히는거 아닌가요? 콘볼루션 연산 하는데 저렇게 짧으면 값이 제대로 안나올텐데요;
    포스팅에는 3개 밖에 없는데 이것을 300개로 늘리고 roll-off는 낮은 값으로 해보십시오.
    답글

    • 남성 2012.09.20 17:59 신고

      방문해 주셔서 감사합니다.
      위 포스팅의 경우 raised cosine filter 의 group delay 3 을 줬고 oversample rate 가 8 이므로 8*3*2+1 = 49 tap raised cosine filter 를 사용하게 되거든요. 300 이라는 건 group delay 를 말하는 건가요? 보통 group delay 를 그렇게 크게 주진 않는데 어떤걸 300 을 말씀하시는 건지요? group delay 300 이 되면 filter tap 이 4801 tap 이 되는데... raised cosine filter 로 이렇게 긴 필터를 사용하진 않죠.

  • scac 2012.09.20 18:11

    비트수가 5000개인데 square root raised cosine 의 양 옆 진동하는 부분(그룹 딜레이라고 하는가요?)이 만약 3이면 그 진동하는 부분이 좀 떨어져 있는 다른 비트에 닿지 않습니다. (간섭이 안 일어난다 하더라도 닿게는 해야한다고 생각하는데;)
    그리고 제가 말한 300이라는 숫자는 그냥 막연히 적은 숫자이구요. 저는 rcosfir를 사용해서 좀 헷갈리네요;;

    교과서의 eye pattern은 roll-off를 낮춘다고 해서 간섭이 일어나지 않고 한 점에서 만나거든요.
    답글

    • 남성 2012.09.20 21:42 신고

      group delay 3 이란 이전 3 심볼 구간 동안에 영향을 미친다는 겁니다. 따라서 보통 첫번째 온타임 지점은 3 심볼 만큼의 딜레이 후에 잡게 되죠. 각 심볼의 sidelobe 부분이 이전 3개와 심볼과 나중 3개 심볼에 영향을 주는거죠.

      보통 raised cosine filter 는 송수신단 square root raised cosine 로 나누어져서 matched filter 의 형태로 사용되죠.
      말씀하신 rcosfir() 함수는 raised cosine filter 입니다.
      위에 제가 설명한 것은 square root raised cosine 필터이고 raised cosine filter 의 경우에는 roll off 에 상관 없이 점으로 나오는게 맞습니다.
      위에 함수중 rcosine() 함수의 'sqrt' 부분을 'normal' 로 바꾸면 raised cosine filter 가 됩니다.

  • scac 2012.09.20 21:57

    본문 포스팅에 roll-off 인자가 0.2인데 수신신호 샘플링 타임 지점이 너무 두껍게 나와서 말씀드린 것입니다. 제가 알기로는 roll-off 인자가 0~1에서 어떤 값을 가지든 수신필터, 송신필터가 각각 square root raised cosine일 경우 한 점에서 만나는 것으로 알고 있어서요. 본문 포스팅 이미지는 너무 두껍지 않나 해서..
    그리고 rcosfir도 'sqrt'를 넣어서 사용하는걸 말씀 안드렸네요.. :)


    이해를 돕기 위해 본문 포스팅에 있는 매트랩에서 숫자만 수정해 보았습니다. 말씀하신 그룹딜레이 3을 100으로 늘렸습니다. 본문포스팅 roll-off 가 0.2인 결과물보다 훨씬 나아보입니다.

    Sqrt_r_filter=rcosine(1e6, 8e6, 'sqrt', 0.2, 100);

    bits=randi([0 1], 5000, 1);

    Mapped_signal=bits*2-1;

    Upsampled_signal=upsample(Mapped_signal,8);

    Tx_signal=filter(Sqrt_r_filter,1,Upsampled_signal);
    Rx_signal=filter(Sqrt_r_filter,1,Tx_signal);



    Rx_signal1=Rx_signal((2*8*100)+1);
    Rx_signal_cutted=Rx_signal((2*8*100)+1+1: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
    답글

    • 남성 2012.09.21 09:42 신고

      네 scac 님이 하신 말씀이 맞습니다.
      교과서에서 말하는 raised cosine filter 는 이론적으로 무한대의 탭을 가지는 필터이므로 당연히 딱 점이 되서 나옵니다.

      제가 얘기하는것은 Sqrt_r_filter=rcosine(1e6, 8e6, 'sqrt', 0.2, 100);
      를 하면 Sqrt_r_filter 의 경우 1601 탭이 나오는데. 이것도 물론 이상적인 것은 아니지만, 구현 불가능 할 정도로 긴 필터 탭이라서 실제로 써 먹기는 어렵다는 거구요.

      즉 위에 말씀 하신 필터 같은 경우엔 이론적으로는 가능한데 실제로 써먹기는 거의 불가능 할 정도로 너무 길다는 겁니다.

      실제로 FPGA 등에서 멀티플라이어 수는 제한이 있으니까요.

      따라서 1601 탭 같이 긴 필터 탭으로 만들면.. 실제로 구현이 안되는, 알고리즘을 위한 알고리즘을 하는 꼴이 되는거죠.

  • 뽀로리 2013.09.15 13:58

    지금 디지털통신공학및설계 수업때문에 15개의 그래프를 위해서 시뮬레이션 돌리기를 시도중입니다.
    처음 만저보는 프로그램이기도 하면서 통신도 잘 몰라 매트랩 하는데 어려움이 많은데요.
    혹시 4진 eye pattern은 어떻게 만들 수 있을까요?
    책은 Introduction to Analog & digital communications 2nd Simon Haykin/Michale Moher 입니다.
    메일 kkb8594@gmail.com입니다.
    제발 조금 도와주십시오. 부탁드립니다.
    답글

    • 남성 2013.09.15 17:29 신고

      4진 아이패턴 이라는게 16 QAM 에대한 아이패턴을 말씀하시는건가요?
      위 포스팅은 BPSK 에 대한 예인데.. 16 QAM 이라면 http://iamaman.tistory.com/205 글 보고 mapping 만 바뀌면 됩니다. 일단 변조 방식에 대한 이해가 필요 하실듯 하네요