2014년 12월 27일 토요일

RF의 개념? [The concept of RF?]

마이크로 웨이브와 일반 신호와의 제일 큰 차이점은 신호분석에 있어서 공간을 따지는가 따지지 않는가의 여부이다. 전자회로에서 다루느 일반 신호와 달리 마이크로웨이브는 신호가 이동한 거리를 따져준다는 개념에서 차이를 갖는다. 왜 거리를 따지는가 하면 파장 때문이라고 할 수 있다. 파장이란 공간을 이동하는 신호를 주체로 하였을 때 신호의 한 걸음 거리, 즉, 신호의 폭이라고 할 수 있다. 마이크로 웨이브는 이름에서도 알 수 있듯이 파장이 마이크로 단위이다. 그런데 신호의 크기는 파장에 따라서 달라진다. 그러므로 같은 길이의 거리라도 일반 신호에 비해서 마이크로 웨이브는 그 길이의 거리를 이동하는 동안에 여러번의 신호의 크기 변화를 겪는 것이다. 일반 신호도 마이크로 웨이브와 동일하게 파장에 따른 크기 변화가 존재한다. 그러나 일반 신호는 마이크로 웨이브와는 비교도 안되게 파장이 길기 때문에(엄밀히 말하자면 마이크로 웨이브의 파장이 짧은 것임..)우리가 따지는 PCB기판(크기가 기껏해야 30cm 안팍)정도의 규모에서는 신호의 크기 변화가 미미하다. 반대로 말하면 30cm안팍의 크기를 갖는 PCB기판도 마이크로 웨이브의 시점에서 보면 굉장히 큰 규모라고 할 수 있는 것이다. 정리하면 똑같은 거리를 가더라도 파장이 짧은 신호일수록 신호의 크기는 공간의 영향을 더욱 많이 받는 다는 것이다. 
마치 동일 세계에 살더라도 달팽이가 느끼는 10m와 코끼리가 느끼는 10m는 다른 것 처럼 말이다. 그러나 이렇게 간단한 비유를 할 수 없는데, 그 이유는 마이크로 웨이브는 파장은 짧지만 속도는 매우 빠르기 때문이다.
어쨌든 이전까지 일반적으로 전자공학에서 배웠던 일반 신호에 적용되었던 전자기학의 여러가지 법칙만으로 해석이 안되는 Radio Frequency, 다른 말로 하자면 마이크로 웨이브는 파장이 마이크로 단위로 매우 짧기 때문에 우리가 회로를 설계할 때 거리에 따라 달라지는 신호의 크기를 고려해주어야 한다.
신호는 한 파장을 걸을 때 한 번의 swing을 한다. 위상이 360도 만큼 회전하는 것이다. 정현파 신호가 시간에 대해서 한 주기 동안 한 번의 swing을 하듯 공간에 대해서도 한 파장을 이동하는 동안 한 번의 swing이 발생한다.
이번에는 파도를 예를 들어 설명해보자. 만일 내가 파도가 치는 바다 속에 눈을 감고 있다면 파도라는 신호가 한 번씩 칠 때마다 내가 위치한 지점에서는 수위가 한 번 올라갔다 내려가는 swing이 발생할 것이다. 이것을 시간에 따른 신호의 위상 변위라 볼 수 있다. 그러나 만일 내가 파도가 치는 바다를 먼 육지에서 바라본다고 생각하면 내가 있는 지점에서 관찰한 파도는 공간에 따라서 이동하는 것을 알 수 있다. 마지막으로 내가 전지전능한 신의 입장이 되어서 지구라는 행성 바깥에서 파도를 관찰한다고 했을 때 시간에 대해서도 공간에 대해서도 크게 달라진다는 느낌을 받지 못할 것이다. 이렇듯 시점에 따라서 신호를 관찰하는데 고려할 사핟이 달라지게 된다.
우리는 이번 포스팅 부터 다루게 될 RF관련 포스팅에서는 신호의 시간에 대한 변수는 고려하지 않기로 한다. 그러나 모든 신호는 시간에 대한 변수, 공간에 대한 변수를 모두 갖고 있다는 것은 변하지 않는 진리이다. 시간에 대한 신호의 크기 변화를 무시하고 신호의 공간에 대한 크기 변화만 고려한다는 것은 동일한 시간에서 공간에 따른 신호의 크기, 위상의 변화만을 살펴보는데 초점을 맞추겠다는 의미이다. 이전에 접했을 전자공학에서의 일반 신호는 반대로 공간에 대한 신호의 크기변화는 고려하지 않은 채 시간에 대한 크기변화만을 공부했을 것이다. 그 이유는 일반 신호는 파장이 크므로 공간에 따른 크기 변화가 미미했기 때문이다. 그러나 신호라는 것이 어떨 때는 공간에 대해서만 크기가 변화하고 어떨 때는 시간에 대해서만 크기가 달라지는 것이 아니라 모든 신호는 시,공간에 따른 크기변화가 존재하고 신호의 정확하고 엄밀한 해석이란 이 두 변수를 모두 고려하여 분석하는 것이다. 그러나 우리가 이번 포스팅 부터 살펴볼 마이크로 웨이브에서는 마이크로 웨이브의 기초적인 개념과 그에 근거한 기본적인 회로 분석방법 및 기초적 회로 설계방법을 배우기 위함이므로 시간적인 변화는 무시하도록 한다. (일정하다고 가정한다.) 그러므로 신호를 표시함에 있어서 신호의 시간적 변수인 을 생략하도록 한다. 그러나 전자공학에서 다루는 모든 신호는 시간적, 공간적 변수를 담고 있다는 사실을 잊어서는 안된다.

우리가 전자공학 기초 실습과목에서 회로를 설계하는데 사용한 점프선도 일종의 전송선이라고 할 수 있다. 그렇다고 점프선만 달랑 있는 것이 전송선으로 의미가 있는 것은 아니고 그라운드에 연결된 점프선은 전송선으로 의미가 있다고 할 수 있다. 점프선만 있을 때는 신호를 전달하는 기능이 없고 전송선에 그라운드가 연결되어 있을때 의미가 있는 것이다.
어떤 전송선이라도 좋지만 그라운드가 연결되어 있는 상태여야 하고 우리 수업에서는 전송선의 종류에 대해서는 자세히 다루지 않을 것이다. 그 이유는 전송선의 구조상 전자공학 학부과정에서 해석할 수 있는 난이도를 넘어서기 때문이다. 그러나 주의 깊게 다룰 전송선이 하나 있는데 그것은 바로 동축케이블이다. 동축케이블은 이름에서도 알 수 있듯이 그 단면은 중심축이 동일한 두 전송선이 동심원의 형태로 되어 있다.
동축 케이블 상에 신호를 흘렸을 때 우리가 신호에 대해서 알 수 있는 값은 전압과 전류밖에 없다. 그런데 이 때 신호의 주파수가 마이크로 웨이브 대역의 고 주파수라고 하면 짧은 거리의 두 지점에서 측정한 전압이 다르게 측정된다. 전압의 크기가 다르다는 것으로 두 측정 지점 사이에 전자소자가 존재한다는 것을 유추할 수 있다. 전압의 크기가 다르다는 것은 두 지점 사이에서 전압강하가 일어났다는 것이고 전압강하를 일으키는 원인은 전자소자로 생각할 수 있기 때문이다. 이 점을 고려하여 동축 케이블의 두 도선을 R, L, C의 조합으로 변형 시켜 동축케이블의 등가회로를 구성해보자.


이렇게 밖에 모델링 될 수 없는 이유는 우리가 다루는 신호는 고주파수의 교류신호이기 때문이다.  직류적인 저항성분과 교류적인 저항 성분이 모두 존재하지만  직류적인 커패시터 성분은(직렬연결된 커패시터에 의한 임피던스는 1/jwC인데 w가 작을 수록 커패시터의 임피던스가 커지므로 회로적으로 open되어)존재할 수 없고 교류적인 인덕턴스 성분 또한(병렬 연결된 L에 의한 임피던스는 jwL인데 w가 커질수록 L에 의한 임피던스값도 커져 회로적으로 open되어)존재할 수 없다. 즉, 도선상의 두 지점 사이에 실제로 어떤 성분이 존재하는지는 확실하게 알 수 없지만 전자회로상에서 따질 수 있는 전자소자는 R(교류일 경우 G포함), L, C뿐이므로 위으 등가회로가 general하게 모델링한 결과라 할 수 있다.

동축 케이블을 아주 미세하게 자르고 두 지점을 잡아 한 지점을 z, 다른 한 지점을 z+△z라 한 후 두 지점간 존재할 수 있는 R, L, C소자를 구성한다. 그런 다음 두 지점에서의 전압과 두 지점을 흐르는 전류를 각각 표시하면 두 지점간의 전압과 전류는 다음의 두 식으로 표현 할 수 있다.

등가회로로 여러가지 전송선로를 해석한 결과 R, L, C, G의 값은 표 2-1과 같다. 식을 굳이 외울 필요는 없지만 여기서 전송선로마다 R, L, C, G값이 다르다는 점을 알아두고 R값은 전도도에 반비례, G값은 전도도에 비례, C값은 유전율에 비례, L값은 투자율에 비례한다는 점을 알아 두면 좋겠다.
나머지 다른 factor들은 그 전송선로가 갖는 구조에 의해 결정되는 변수들이다. 또 한가지 주목할 점은 L과 C를 곱하면 항상 투자율과 유전율 값만 남는다는 점이다. 전자회로에서 L과 C는 매우 상반되는 개념으로 L과 C값을 곱하면 물질 고유의 특성만 남는 경우가 많은데 예를 들면 어떤 물질을 공진 주파수는 w0=1/(LC)^(1/2)로 정의 된다. 즉, 공진 주파수는 물질 고유의 특성에 의해서 이미 정해진 상수값을 갖는 다는 것이다.
다시 본론으로 돌아와서 전송선로 상의 아주 미세한 거리 만큼 떨어진 두 지점의 전압값, 전류값 들의 관계식을 이항하여 식을 조금 고쳐주면 다음의 두 식을 구할 수 있다.



여기서 좌변의 수식이 의미하는 것은 전압을 변수 z에 대하여 미분, 전류를 변수 z에 대하여 미분한 식이므로 다시 다음과 같이 표시해 줄 수 있따. 식에서 알 수 있듯이 전압과 전류 사이에는 서로 미분의 관계가 성립한다는 것을 확인 할 수 있다.
그리고 이 식을 다시 한 번 변수 z에 대해서 양변을 미분해주면 다음의 2차 미분 방정식을 구할 수 있다.

여기서 k의 자승을 다음과 같이 정의하고 식을 정리한 다음 2차 미분 방정식의 근을 구하는 방법에 의해 V(z)를 구하면 다음과 같다.
그리고 이제 마지막으로 k의 정의에 따라 k를 구하고 이를 실수부와 허수부로 나누어 k의 자리에 대입하고 식을 정리하여 표현하면 최종적으로 다음의 식을 얻을 수 있다.



입사파의 크기와 반사파의 크기는 상수이다. 두 값은 같을 수도 있지만 다를 수 있다. 즉, 항상 같다고 할 수 없다. 이때의 k의 값을 파수라고 하고 k는 실수와 허수의 합으로 표현된다.

자 여기서 V(z)을 표현한 두 항 중 앞의 항의 의미를 유심히 살펴보자.
z라는 변수의 방향은 파의 진행방향을 의미한다. z값이 증가할수록 (e의 -알파제트승)의 크기는 작아진다. 그러나 (e의 마이너스제이베타제트승)의 크기는 변함이 없다. 이것은 위상을 나타내기 때문이다. 어쨌든 z의 값이 증가할 수록 전체 항 
의 크기는 작아진다는 결론에 도달한다.
그렇다면 뒤의 항은 어떨까?

입사파 입장에서는 파가 진행할 수록 z의 값이 +쪽으로 증가하는 것이지만 반사파입장에서는 파가 진행방향으로 진행한다는 것은 z값이 -쪽으로 증가하는 것이다. 따라서 z값이 증가할수록, 즉, 파가 진행방향으로 진행할 수록 반사파의 크기는 감쇄한다.

어쨌든 파의 진행에 따라서 파의 크기에 관여하는 상수는 알파이고 파의 위상에 관여하는 상수는 베타로 알파를 감쇄상수, 베타를 위상정수라고 한다. 우리 수업에서 공간에 따른 신호의 감쇄는 일어나지 않는다고 가정하기 때문에 알파=0이라고 간주한다. 그런데 알파는 k의 정의에서 나온 값이므로 알파의 의미를 따지면 k의 실수 성분을 만들어내는 R값과 G값이라고 할 수 있다. 즉, 공간에 따른 신호의 감쇄가 일어나지 않는다고 가정한 상황에서는 신호의 감쇄를 일으키는 R과 G의 값을 0이라고 간주한다는 것이다. 즉, 우리가 다루는 전송선로를 저항성분이 0인 손실없는 전송선로로 가정한다.

아까 2차 미분방정식의 해 V(z)를 표현한 식을 다시 한번 해석해보면 입사파와 반사파의 크기에 파의 진행 방향으로의 이동에 따른 크기와 위상함수가 각각 곱해진 형태의 합으로 표현된다. 우리는 여기서 파의 진행에 따른 크기의 감쇄가 일어나지 않는다고 가정했으므로 크기는 상수값으로 일정하고 다만 변화하는 것은 파의 위상이다. 그런데 입사파든 반사파든 크기변화는 없지만 입사파의 크기, 반사파의 크기는 항상 같지는 않다고 했다. 반사파의 크기는 입사파가 부딪혀서 반사파로 되돌아 나오는 방해물의 특성에 의해서 결정된다. , 입사파와 반사파의 비율은 장애물의 z값에 의해서 결정되는 것이다. 그림으로 표현하면 다음과 같다. 이때, 각 도선에서 측정되는 여러 지점에서의 전압값은 감쇄가 일어나지 않는다고 했으므로 크기는 동일하지만 위상은 다른 값을 갖게된다.
측정되는 V(z)의 크기인 입사파의 크기, 반사파의 크기는 각각 V제로 플러스와 V제로 마이너스로 일정하고 위상만 변화한다.
다음 포스팅에서 이어지는 내용이지만 여기서 잠시 짚고 넘어가면 V제로 플러스(입사파의 크기)와 V제로 마이너스(반사파의 크기)의 비율은 부하의 임피던스가 결정한다.





2014년 12월 3일 수요일

Unix programming _ #1. 특수문자의 특수성 제거하기

이번 게시물 부터는 unix서버를 이용하여 작은 쉘을 만들고 기본적인 기능을 추가해보도록 하겠습니다.
앞으로의 계획을 목차로 설명해보도록 합니다.
1. 유닉스 프로그래밍 문법상 특수성을 가진 특수문자의 특수성 제거
2. 해쉬문자 (#)가 나오면 이후의 내용을 주석으로 인식하라.
3. dup2( ) 함수를 이용하여  파일의 표준 입출력 방향을 전환하라. (>, <. >>, <<을 지원하도록 기능 구현)
4. 인터럽트를 처리할 수 있도록 개조하라. SIGINT, SIGQUIT에 의해서 정지되지 않도록 하라.
5. 파이프를 처리할 수 있도록 개조하라. ex>ls | more 에 의해서 ls(현재 프로세스 내의 파일 목록을 출력)결과를 more(한 화면 크기에 맞추어 출력)의 명령대로 한 화면에 나타낼 수 있을만큼 출력

오늘은 첫 번째 기능인 특수문자의 특수성 제거 기능을 구현해 보도록 하겠습니다. 유닉스에서는 특수문자앞에 '\'를 붙여 바로 다음에 오는 특수문자의 특수성을 제거하는 기능을 제공합니다. 다시 말하면 '\'은 특수문자의 특수성을 제거하는 특수한 기능을 갖는 특수문자인 것이죠. 일단 작은 쉘의 구성부터 알아보고 특수문자의 특수성을 제거하는 구문을 추가시키도록 합니다.

작은 쉘(small shell)을 구성하는 파일 목록은 다음과 같습니다.
Makefile
procline.c
runcommand.c
smallsh.h
smallsh.c
userin.c
일단 smallsh.c파일이 어떻게 구성되는 지 살펴보도록 하겠습니다.

  • smallsh.c파일

Char형 포인터로 선언된 1차원 포인터 변수 prompt에는 문자열이 저장됩니다. 이 문자열은 main함수 안의 while문에서 userin()함수에 매개변수로 전달되어 procline()함수의 수행 조건으로 사용되고 있습니다. userin()함수를 살펴봅시다 

  • userin.c()

8행에서 보듯이 userin의 매개변수는 char형 포인터 변수입니다.
똑같이 char형 1차원 포인터 변수로 선언된 ptr, tok에는 char형 배열로 선언된 inpbuf, tokbuf의 값이 넘겨집니다. inpbuf와 tokbuf의 배열 크기는 MAXBUF, MAXBUF*2로 smallsh.h파일에 define되어 있기는 MAXBUF는 256입니다.
그리고 17행에서는 입력으로 받은 char형 포인터 p를 %s를 통해 문자열 형태로 출력합니다.

19행에서는 10행에서 선언한 int형 변수 count를 0으로 초기화합니다.

21행에서부터는 while(1)에 의해 반복문이 실행됩니다.

10행에서 count와 함께 선언된 int형 변수 c에는 getchar의 반환값으로 stdin으로 입력받은 문자열이 버퍼에 저장되었다가 반환되어 c에 저장된다. getchar에 대하여 잠깐 짚고 넘어가보자.
getchar()함수-------------------------------------------------------
사용자에게 '한 문자'입력을 받는 함수이다. 과정이 화면에 표시되며, 입력받은 데이터는 조료인식 '\n'이 있기전까지 버퍼에 담긴다. 읽어들인 문자를 int 값으로 리턴한다. 읽기 오류가 발생하거나 파일 끝에 도달하면 EOF를 리턴한다. 
-----------------------------------------------------------------
어쨌든 사용자로부터 한 문자씩 입력 받아 입력받은 문자를 int형으로 리턴하는 함수에 파일 끝을 알리는 '\n'이 입력되어 EOF가 반환되면 if문의 조건문이 실행된다. EOF가 반환됩니다. userin()의 반환값이 EOF가 되면 main함수의 while문 안의 조건문이 0이므로 while문이 실행되지 않습니다. 즉, EOF가 반환되기 직전까지 main함수는 procline()함수를 호출하게 됩니다.