이번 축제는 고등학교에 들어와서 처음 축제라서 너무 기대대고 설레였다축제가 시작하고 내가 제일 처음으로 간곳은 음식을 판매하는 식당이였다중학교와달리 학부모님들이 아주 싼가격에 맛있고 깨끗한 음식을 해주셨다그리고 난후 연극부의 공연을 봤는데 연기가 매우 뻔뻔해서 정말로 웃겼다그리고 스토리도 탄탄해서 보는 내내 웃음이 멈추지않았다그리고 또 고등학교 축제의 꽃 미스월계를 봤다눈이 썩는다는 느낌을 처음으로 느꼇다 정말 괴로웠다하지만 그리고나서 내가 가장 기대하고 궁금해하던 제시카쌤의 공연을봤다눈이 정화가 됐다 제시카 선생님이 정말 달라보였다정말로 파워풀하고 섹시한 공연이였다This festival is very exciting because it is first festival to me in high school.The first visiting place is restaurant in this festival.Unlike the junior school, foods are very delicious and fresh with low price.After that, I saw the performances of the Drama Club(상황에 따라 달라서 부연 설명 추가합니다)Actors (남자들만 있었을 때)Actor (남자 혼자 있었을 때)Actresses (여자들만 있었을 때)Actress (여자 혼자 있었을 때)Actors and Actress (남자 여자 다 있었을 때)performed very well likewise TV star.I couldn’t stop laughing because this performance is very fun and has good script.(스토리가 탄탄해서 웃음을 멈출 수 없는 것 보다는 스토리가 탄탄해서 즐거웠다가 좋을 것 같네요? 그건 아래에 씁니다)Moreover performance was so fun because of good script.(1대신 2로 쓰는 게 나을 것 같아요)I saw the miss laurel who is selected to most beautiful girl in our high school after the performance.But, she was really not my style. I could feel the pain in my eyes. (직역한 부분입니다. 이런 표현은 영어에선 잘 쓰지 않아요)I was very disappointed because she was really not my style. (1보다는 이런 식으로 쓰는 게 나을 거에요)But, I felt better because I could see the teacher Jesica’s performance.I have been looking forward to seeing it with a huge curious.Jesica’s performance is very powerful and sexy.
Digital Communication.Project #1BPSK simulation1. 이론● BPSKBPSK는 PSK의 한 종류로 디지털 값을 아날로그 신호로 변환하는 변조 방식의 하나이다. 위상이 뒤틀린 복수의 파장의 조합으로 정보를 표현한다. 2개의 Symbol을 이용하기 때문에 한번에 1bit를 송/수신 할 수 있다. 각 Symbol이 한 1bit를 나타내고 이는 아래와 같은 1bit의 Massage data를 전달하게 된다.그림 . Massage bits위와 같은 신호는 Carrier를 통해 passband로 up - band 되어 전송되며 이때 두 symbol을 구분하는 기준은 아래와 같이 Phase 의 차이이다. Symbol 간의 거리가 멀면 멀수록 좋은 성능을 나타내기 때문에 BPSK의 경우는 아래와 같이 π 차이가 나는 symbol을 이용한다.그림 . BPSK modulationBPSK의 coherent detection은 matched filter나 corelation를 이용하여 수신 단에서 ML을 이용한 판단을 수행하며 이는의 BER 성능을 가지게 된다.● AWGN과 SNR위처럼 BPSK를 통해 modulation된 신호는 송신 단에서 channel을 통해 수신 단으로 수신되게 된다. 이 과정에서 열잡음에 의한 noise가 발생하게 된다. 물론 실제 noise는 복잡하고 여러 가지 형태의 모습을 띄지만 근사적으로 AWGN으로 표현이 가능하다. 이는 우리가 보내고자 하는 전체적인 대역에 일정한 파워를 가지고 노이즈가 분포되어 있음을 말하며 시간 축에서는 random한 noise가 발생된다는 것을 의미한다. 실제적으로 우리가 따져야하는 것은 이 노이즈의 파워와 우리가 보내고자 하는 신호의 파워의 비이다. 만일 우리의 신호 파워가 노이즈에 비해 매우 크다면 그다지 큰 영향을 받지 않고 수신단에 신호가 도착하게 될 것이다. 그러나 만일 신호의 파워가 노이즈 파워보다 상대적으로 작다면 수신 단에서의 error 발생률은 높아질 것이다. 이는 BER의 증가를 의미한다. 그래서 우리는 SNR을 BER과 연관지어 생각해야 한다. AWGN의 파워는 가우시안 함수의 분산으로 나타나며 이는 No/2의 값을 가지게 된다. 그렇기 때문에 BPSK는의 성능을 가지게 된다.2. Simulation flow & realizationⅰ) Randomly generate sn보내고자 하는 신호를 발생 시킨다. 물론 이 과정에서 본디 BPSK는 carrier에 신호를 실어 phase의 차이를 가지고 2개의 symbol을 구분하지만 이번 실험의 경우 간단하게 하기 위하여 sn을 각각 -1과 1로 단순히 발생을 시킨다. 여기서 -1과 1로 신호를 발생 시킨 것은 Eb/No의 SNR을 따짐에 있어 Eb를 1로 고정시켜 좀 더 쉽게 시뮬레이션을 수행하기 위함이다.코드 1 . -1과 1 신호의 발생ⅱ) Make receive signal ( Add rn )가우시안 함수를 사용하여 발생시킨 노이즈를 위에서 생성한 보내고자 하는 신호에 더한다. 이 과정은 수신단에서 신호를 받는 것과 동일한 과정이라고 생각 할 수 있다. 이때 주의할 점은 dB로 표현되는 Eb/No을 가지고 고정된 Eb를 생각하여 No의 값을 구해야 한다는 것이다. 아래와 같은 방법을 통해 Eb/No에 따른 standard deviation을 구할 수 있다.코드 2 . 가우시안 노이즈ⅲ) Decision by ML method & calculate error sum위와 같이 만든 수신 신호를 가지고 ML method을 이용해 수신 단에서 결정을 내린 후 이를 가지고 error의 발생 유무를 판별한다. 내 경우는 아래와 같이 곱이 음수이거나 0인 경우를 error로 판별하였다. Error는 -1이 보내졌을 때 1로 판별하거나 1이 보내졌을 때 -1로 판별하는 경우, 그리고 각 경우에 0으로 값이 오는 경우에 발생하므로 아래와 같이 구현 할 수 있었다.코드 3 . Error sum3. Result이번 실험은 108 개의 sample을 발생시켜 아래와 같은 결과를 얻을 수 있었다. 실제로 신뢰성 있는 결과를 얻기 위해서는 최소 확률의 103 개 이상의 sample을 이용해야 하는데 이번 실험에서는 10-5 까지 확률을 알아보기 위해 108개의 sample을 사용하였다. 아래의 그래프는 각각 simulation을 통해 얻은 결과와 Q-function을 이용한 이론적 데이터의 결과 그래프이다. Matlab에서는 Q-function 자체를 구현하고 있지 않기에 erfc라는 함수를 가지고 그래프를 그릴 수 있었다. 두 함수는 아래와 같은 관계를 갖는다. Simulation을 통해 얻은 결과는 import data를 수행하여 그릴 수 있었다.그림 3 . 좌 : 이론적 구한 BER, 우 : 실험적으로 구한 BER 그래프 # of sample : 108두 그래프를 통해 같은 결과를 나타내고 있음을 알 수 있다. 많은 sample을 이용했기 때문에 동일한 결과를 나타내고 있다는 것을 알 수 있다. 10000개의 sample을 가지고 결과분석을 해보면 아래와 같이 정확하지 못한 그래프가 나타나게 된다. 이는 물론 위에서 언급한 신뢰도의 문제라고 할 수 있다. 동전을 많이 던지면 던질수록 1/2에 가까운 확률이 발생한다는 것과 비슷한 원리이다. 또한 10-5의 결과 값을 얻기 위해서 단순히 105번만 해보는 것은 위와 동일한 이유로 정확하지 않은 simulation이다. 그래서 상황이 된다면 많은 수의 sample을 가지고 simulation을 수행하는 것이 좋다.그림 4 . 좌 : 이론적 구한 BER, 우 : 실험적으로 구한 BER 그래프 - # of sample : 100004. Source codeBPSK.C#include #include #include #include "gaussian.h"#define SAMPLE 10000double cal(int i){return 1/pow(10,(double)i/10);}typedef int signal_send;typedef double signal_receive;void main(void){FILE *error;signal_send sn;signal_receive rn;double variance;int i,j,sum;error = fopen("error_table.txt","w");fprintf(error,"Eb/Noterror : SAMPLE %dnn",SAMPLE);for(j = 0; j
1. Problem Statement and Design SpecificationUniversal Asynchronous Receiver/Transmitter 는 직렬 통신 포트와 병렬 통신 포트를 연결해 주는 integrated circuit이다. 이 UART는 크게 Receiver, Transmitter, 그리고 Baud Rate Generator로 나뉘어져 있다. 이번 프로젝트는 이 UART를 위에서 제시한 Receiver, Transmitter, 그리고 Baud Rate Generator 로 partitioning을 해서 구현하는 것이다. 아래 그림은 UART의 설계도이다..UART의 spec을 알기 전에 먼저 각 sub-module의 specification을 알아 보도록 하자.TransmitterTDRE와 Ld가 1일 때 Data BUS에 있는 값을 TDR에 불러들인다동시에 TDRE를 0으로 만든다TDR에 있는 값을 TSR로 불러들이고 TDRE를 1로 만든다Transmission의 시작을 알리는 bit와 parity bit까지 총 10개의 bit를 각각BRG로 만들어진 clock의 주기 만큼의 pulse로 TxD로 보낸다최종적으로 모든 bit를 보냈을 때는 1을 보내야 한다ReceiverRxD가 0이 되는 시점부터 data를 받아들이기 시작한다Bclk보다 주기가 8배 빠른 clock을 사용한다, 이도 BRG에서 만든다받아들이는 bit는 RSR에 저장한다첫 번째 bit인 0을 제외하고 9개의 bit를 받으면 전송이 끝난다RDRF가 0이고 transmission이 끝난 후 RxD에 오는 값이 1이면 RSR에 저장된 값을 RDR로 옮긴다이 때, RDRF가 1일 경우는 OEflag를, transmission이 끝난 후에도 RxD에서 들어오는 값이 0일 경우 FEflag를 1로 만든다RSR에 저장된 값의 parity와 실제 계산해서 만든 parity의 값이 다르면 RDR의 각 register에 0을 넣는다BRGSystem Clock의 주파수를 1/13으로 낮춰준다이 낮춘 주파수의 clock을 다시 21에서 28중 하나의 수로 낮춰준다이 주파수를 갖는 clock이 Bclkx8이 된다Bclkx8의 주파수를 또 다시 1/8로 낮춰준다이 주파수를 갖는 clock이 Bclk이 된다
Digital Communication.Project #2Recursive Systematic Convolution simulation1. 이론● BPSKBPSK는 PSK의 한 종류로 디지털 값을 아날로그 신호로 변환하는 변조 방식의 하나이다. 위상이 뒤틀린 복수의 파장의 조합으로 정보를 표현한다. 2개의 Symbol을 이용하기 때문에 한번에 1bit를 송/수신 할 수 있다. 각 Symbol이 한 1bit를 나타내고 이는 아래와 같은 1bit의 Massage data를 전달하게 된다.Massage bits위와 같은 신호는 Carrier를 통해 passband로 up - band 되어 전송되며 이때 두 symbol을 구분하는 기준은 아래와 같이 Phase 의 차이이다. Symbol 간의 거리가 멀면 멀수록 좋은 성능을 나타내기 때문에 BPSK의 경우는 아래와 같이 π 차이가 나는 symbol을 이용한다.BPSK modulationBPSK의 coherent detection은 matched filter나 corelation를 이용하여 수신 단에서 ML을 이용한 판단을 수행하며 이는의 BER 성능을 가지게 된다.● AWGN과 SNR위처럼 BPSK를 통해 modulation된 신호는 송신 단에서 channel을 통해 수신 단으로 수신되게 된다. 이 과정에서 열잡음에 의한 noise가 발생하게 된다. 물론 실제 noise는 복잡하고 여러 가지 형태의 모습을 띄지만 근사적으로 AWGN으로 표현이 가능하다. 이는 우리가 보내고자 하는 전체적인 대역에 일정한 파워를 가지고 노이즈가 분포되어 있음을 말하며 시간 축에서는 random한 noise가 발생된다는 것을 의미한다. 실제적으로 우리가 따져야하는 것은 이 노이즈의 파워와 우리가 보내고자 하는 신호의 파워의 비이다. 만일 우리의 신호 파워가 노이즈에 비해 매우 크다면 그다지 큰 영향을 받지 않고 수신단에 신호가 도착하게 될 것이다. 그러나 만일 신호의 파워가 노이즈 파워보다 상대적으로 작다면 수신 단에서의 error 발생률register의 갯수를 m이라 하고 구속장(constraint length) - 출력에 관여하는 총 입력의 갯수 -을 K라 하며 K= m+1이 된다.Convolutional code의 표현은 (n, k, m)으로 나타낸다. k는 입력이고 n은 출력이며 m은 메모리(register)의 갯수를 의미한다.간단한 convolution code의 block diagram위 그림은 (2, 1, 3) Convolution code이며 구속장(K=4) 생성다항식 (13,15)인 구조이다. 생성다항식(13,17)은 symbol g1과 symbol g2의 연결정보를 나타내준 것으로 다음과 같다.???g1 = 1011 (13), ? g2 = 1111 (15)● RSC codeRSC code는 Recursive Systematic Convolution code의 약자로 recursive하고 systematic한 특성을 띄는 convolution code를 말한다. Recursive 하다는 것은 재귀적인 방법으로 coding이 진행됨을 의미하고 systematic 하다는 것은 입력하는 data가 출력되는 data에 그대로 존재함을 의미한다. 아래의 block diagram을 보면 uk-1, uk-2는 지속적으로 recursive하게 입력에 영향을 미치고 출력인 yk(0)은 input을 그대로 출력한다. 이 둘이 바로 기본적인 convolution code와 RSC가 다른 점이다. RCS code는 아래와 같은 block diagram을 통해 표현되며 이번 프로젝트에서는 아래의 block diagram으로 표현된 RSC를 이용하여 encoding을 한다.RSC의 block diagramViterbi algorithm● Viterbi algorithm with soft decisionConvolution coding을 실질적으로 구현 할 수 있도록 해준 이 알고리즘은 기존에 모든 데이터의 path를 기억하여 이를 통해 디코딩을 하는 방법과는 달리 trellis에서 보듯 중간 중간에 한젝트에서는 이런 soft decision을 이용하여 BPSK modulation된 신호를 복조하였다.2. 구현● Encoder위에서 언급한 바와 같이 이번 프로젝트에서는 RSC를 사용하였다. 우선적으로 메모리를 구현하였고 (M=2) 그 이후에 shifting을 시키는 알고리즘을 구현하고 이를 통해 입력되는 데이터와 메모리에 담긴 데이터를 이용하여 입력 값을 결정시키는 encoder를 구현 할 수 있었다.위의 과정에서 추가적으로 해야 할 것은 마지막 tail bit를 구성하는 것으로 최종 state를 00으로 만들어주기 위한 과정이다 이는 남아 있는 메모리를 확인한 후에 입력되는 값을 메모리를 0으로 만드는 데이터를 넣어주는 것으로 구현하였다. 그 외 coding되는 data는 간단히 입력하는 데이터와 메모리와 입력되는 신호의 조합을 통해 구현 할 수 있었다.● Decoder디코더 또한 위에서 언급한 viterbi algorithm을 가지고 구현하였다. 본디 디코더는 00 state에서 시작해서 00 state로 끝나기에 처음 두 stage는 일반적인 경우와 다르게 고려하여 설계해야 한다. 그러나 아래와 같이 00 state를 제외한 다른 부분에 distance를 큰 값을 주어서 최종적으로는 00 state에서 시작하는 path만을 선택하도록 구현하였다.위와 같이 현재 state의 distance를 결정하는 부분을 00 state인 present_state_dis[0]를 제외한 다른 부분에서는 100000으로 값을 넣어주어 최종적으로는 00을 선택하도록 구현하였다. 이렇게 초기 distance를 설정한 이후에는 우리가 coding한 데이터를 2bit씩 넣어주어 각각 trellis를 따라 가면서 그 distance 값을 구해 갱신해주었다. 물론 이 경우 soft decision이기에 변조된 신호와 trellis의 path 출력의 euclidean distance를 이용하였다. 만일 같은 euclidean distance sum을 가진 경우는 위의 path를 선택하수 있다. 0dB의 경우는 30592/5000000 = 0.0061184의 값을 갖는다. 그래프를 보면 값이 급격히 떨어지고 또한 곡선의 모양이 아닌 꺽인 직선의 모양을 띄는데 이는 충분한 시뮬레이션이 되지 않았기 때문이다. 급격히 떨어지는 SER 곡선을 좀 더 부드럽게 보기 위해서는 Es/No을 좀 더 촘촘히 확인해야 하고 많은 data를 가지고 시뮬레이션을 수행해야 한다. 뿐만 아니라 훨씬 더 많은 데이터를 가지고 위의 시뮬레이션을 수행한다면 SER of BPSK with RSC 그래프의 마지막 부분에서 error가 거의 없이 일정하게 나타나는 부분에 대해서도 정확한 값을 구할 수 있을 것이다.촘촘한 Es/No을 통해 그려본 SER 그래프 (0~3.5dB)그러나 실제적으로 무한히 큰 data를 가지고 시뮬레이션을 하는 것은 불가능했고 대신 위와 같이 Es/No을 좀 더 촘촘히 하여 그 결과를 좀 더 세밀하게 얻어낼 수 있었다. 급격히 직선 모양으로 떨어지던 그래프가 위에서 보면 곡선 형태로 나타나게 된다는 것을 알 수 있다. 또한 RSC을 이용하면 이용하지 않은 BPSK에 비해 대략 5dB 정도 성능 향상이 되는 것을 알 수 있다. 또한 급격히 떨어지는 데이터를 이와 같이 부드러운 모양으로 그려볼 수 있었다. 본디 8dB나 9dB를 통해 얻어지는 오류 성능을 3.5dB 정도로 얻어 낼 수 있었다. 이를 통해 encoding을 통해 power와 bandwidth의 tradeoff 관계를 확인 할 수 있었다.4. 결론 및 토의이번 프로젝트는 RSC에 대한 것으로 bandwidth와 power의 trade off 관계에 대하여 확인 할 수 있었다. 우리가 같은 신호를 같은 시간 내에 보내려면 위와 같이 encoding 된 신호는 code rate에 의해 더 큰 데이터 량을 가지게 된다. 이를 같은 시간에 보내려면 symbol duration이 줄어들게 되고 이는 높은 주파수가 필요하게 된다는 것을 의미한다. 물론 같은 오류 성능을 얻기 위해서는 Es를 사용해도 , M);return (r_seed*4.656612875e-10);}double gaussian(double d){static double t = 0.0;double x, v1, v2, r;if(t==0){do{v1=2.0*rnd()-1.0;v2=2.0*rnd()-1.0;r=v1*v1+v2*v2;}while(r>=1.0);r=sqrt((-2.0*log(r))/r);t=v2*r;return (v1*r*d);}else{x=t;t=0.0;return (x*d);}}RSC.c - RSC code 구현 (BPSK는 지난 시뮬레이션 데이터 사용)#include #include #include #include "gaussian.h"#define SAMPLE 50000#define K_SIZE 3double cal(double i){return 1/pow(10,i/10.0);}double u_distance(double s1, double s2, double r1, double r2){return sqrt(pow((s1-r1),2) + pow((s2-r2),2));}int trace(int present, int post){if(present == 0){if(post == 0)return 0;elsereturn 1;}else if(present == 1){if(post == 2)return 0;elsereturn 1;}else if(present == 2){if(post == 3)return 0;elsereturn 1;}else{if(post == 1)return 0;elsereturn 1;}}typedef int bit_gen;typedef int signal_send;typedef double signal_receive;typedef int decoded;void main(void){bit_gen *message, *coded_data, *memory;signal_send *sn;signal_receive *rn;decoded *decoded_data;double var