2012년 3월 18일 일요일

VS2008에서 ifstream을 이용한 파일 읽기 문제

특별한 설정을 해주지 않으면 VS2008에서 std::ifstream을 이용해 한글 파일이름과 한글 경로를 가진 파일을 읽을 수 없다. 반드시 아래 코드를 InitInstance()와 같은 함수 내부에 넣어 국가/언어집합(locale)을 한국으로 바꾸어 주어야 한다.
#include <locale>
setlocale(LC_ALL, "Korean");
나모님이 주신 추가의견으로 아래 코드를 사용하면 한국에만 국한되지 않는 프로그램을 작성할 수 있다.
#include <locale>
setlocale(LC_ALL, "");

[참고문헌]
[1] 나모의 노트, "cout", 2011.

2012년 3월 9일 금요일

가장 쉬운 안테나 이론(The Most Easiest Theory of Antenna)

[경고] 아래 글을 읽지 않고 "안테나 이론"을 보면 바보로 느껴질 수 있습니다.
1. 전기장
2. 저항
3. 커패시터


[쉽게 이해하는 안테나의 동작 원리]

전파 관련 이론 중에 가장 어려운 이론은 안테나 이론이다. RF(Radio Frequency) 소자는 단순한 전송선 이론(transmission line theory)으로 충분히 설계가 가능하지만 안테나는 맥스웰 방정식(Maxwell's equations)을 풀어야 특성 예측이 가능하다. 내가 어려우면 남도 어려운 법이므로 안테나를 설계하기 위해 맥스웰 방정식을 직접 풀지는 않고 주로 안테나 설계 SW를 이용한다. 안테나 이론 자체는 매우 어렵지만 안테나의 동작 원리를 이해하기는 정말 쉽다. 똑똑한 초등학생만 되더라도 아래 글을 이해할 수 있다. 우리 힘내서 한 번 앞으로 가보자.

[그림 1] 메뚜기(출처: wikipedia.org)

안테나(antenna)의 어원은 우리가 가을이면 항상 볼 수 있는 메뚜기와 관련되어 있다. 메뚜기와 같은 곤충에게 있는 더듬이를 안테나라고 부른다. 즉, 통신 장비의 더듬이가 안테나가 된다. 더 전문적 관점에서 안테나는 입력 전류 혹은 전압 신호를 전자기파로 바꾸는 변환기(transducer)이다. 아주 옛날분들은 안테나 대신 한자인 공중선(空中線)을 사용하기도 한다.
안테나를 이해하기 위해 [그림 2]에 있는 RC 회로를 생각하자.

[그림 2] RC 교류 회로(출처: wikipedia.org)

[필터(filter)로 쓰는 RC 회로]

RC 회로는 저항(resistor, R)커패시터(capacitor, C)를 연결한  회로이다. 저항은 전류(electric current)의 흐름을 방해하는 부분이고 커패시터는 전하(electric charge)를 모으는 부분이다. [그림 2]의 좌측에 입력을 연결하면 전류가 흐르지 않을 것 같지만 흐른다. 이 현상은 실험으로 확인한 분명한 사실이다. 즉, 커패시터는 ($+$)와 ($-$)가 물리적으로 끊어져 있기 때문에 전류가 흐르지 않을 것 같지만 전하를 충전하거나 방전하는 동안은 전류가 흐른다.

[그림 3] 배터리 충전기(출처: wikipedia.org)

이게 이해가 안되면 [그림 3]의 배터리 충전기를 보자. 배터리(battery)는 사실 거대한 용량을 가진 커패시터이다. 전하를 다 사용해서 방전이 된 배터리는 [그림 2]의 커패시터와 회로적으로 동일하다. 자, 이 배터리에 전기를 연결하면 어떻게 될까? 당연히 전류가 흐른다. 전류가 흐르기 때문에 배터리가 충전되며 충전을 표시하는 LED(Light Emitting Diode)에도 불이 들어온다. 이 부분만 이해하면 안테나 이해는 거의 끝이 났다. 믿어지지 않는가? 아래와 같은 사고 실험을 해보자.

[그림 4] RC 회로로 설명하는 안테나

전하를 충전 혹은 방전할 때는 반드시 전류가 흐르기 때문에 커패시터의 간격을 [그림 4]처럼 약간 벌리더라도 전류는 흐를 것이다. 물론 간격이 좁을 때보다는 전류가 더 적게 흐를 것이다. 전류가 흐르는 이유는 근본적으로 쿨롱 법칙(Coulomb's law) 때문이다. [그림 4]에서 입력 전압으로 인해 커패시터의 한쪽에 ($+$) 전하를 모으면 ($+$)는 ($-$)를 끌어당기기 때문에 커패시터의 다른 쪽에 반드시 ($-$) 전하가 생겨야 한다. 즉, ($-$) 전하를 만들기 위해 커패시터의 반대편에 전류가 흐른다. 다음으로 커패시터의 간격을 극단적으로 늘리면 어떻게 될까? 전류의 크기는 줄어들겠지만 반드시 전류가 흐름을 알 수 있다. 이렇게 멀리 떨어진 곳에 전류를 흐르게 하는 기술이 무선 통신(wireless communication)이다. 또한, 전류 혹은 전압을 전자기파(electromagnetic wave)로 바꾸어주는 장치가 안테나가 된다. 이러한 이유로 맥스웰이 방정식을 만들 때부터 변위 전류(displacement current)를 강조했다. 맥스웰은 변위 전류의 존재성을 증명하기 위해 [그림 2]의 RC 회로를 예로 들어 설명했다. 하지만, 당대 물리학자들은 맥스웰의 사고 실험을 받아들이지 않았다. 맥스웰이 죽고난 1886년헤르츠 29세, 조선 고종 시절에 헤르츠Heinrich Hertz(1857–1894)가 이 문제에 관심을 가져 1887년에 전자기파가 존재함을 실험적으로 증명했다.

[그림 5] 그네(출처: wikipedia.org)

안테나를 조금 더 고차원적으로 생각하려면 전류의 공진 개념을 도입하면 된다. 공진(共振, resonance)은 [그림 5]의 그네가 대표적인 예이다. 그네를 잘 흔들리게 하려면 밀 때 그네의 움직임에 따라 밀어야 된다. 그네와 외부 힘의 움직임[혹은 주파수]가 일치하는 경우가 공진이다. 안테나도 그네의 움직임과 비슷하게 동작한다. 안테나가 실제로 전자파를 복사하려면 안테나의 입력 전류와 안테나의 공진 특성과 같아야 한다.[혹은 전문적으로는 공진 주파수(resonant frequency)가 같아야 한다.] 안테나에 전류를 밀어넣는 행위[혹은 입력 전압이 ($+$)]는 그네 밀기와 매우 유사하다. 처음에는 전류가 잘 들어가지만 안테나에서 튕겨 반사되는 파동(reflected wave)이 반드시 있다. 그래서 이때는 전류를 밀어넣지 않고 잡아당겨야 한다.[혹은 입력 전압이 ($-$)가 되어야 한다.] 반사파가 줄어들면 다시 전류를 밀어넣고[($+$)를 가함], 파동이 튕기는 경우에는 전류를 당긴다[($-$)를 가함]. 이때 안테나는 교번적으로 전류를 받기도 하고 튕기기도 하므로 이 주파수와 동일하게 입력 전압은 ($+$), ($-$)로 바뀌어야 한다. 이 과정을 안테나 공학자들은 입력과 안테나의 공진 주파수를 맞춘다고 한다.

[참고문헌]
[1] P. J. Bevelacqua, Antenna-Theory.com, 2009.

페이스북(Facebook), 트위터(Twitter)의 오래된 글 검색(Search Old Posts)

페이스북, 트위터의 검색기능은 구글에 비해 많이 떨어진다. 그래서, 이전글을 검색하기가 무척 불편하다. 아래 사이트를 이용하면 이 문제를 쉽게 해결할 수 있다.

- SocialSearching.info을 찾아가면 페이스북과 트위터를 검색할 수 있다.
- 검색하기 전에 자기 계정은 입력해야 하니 준비해두자.
- 현재 트위터 검색은 되나 페이스북은 검색되지 않고 있다.

- 페이스북 자기계정 정보를 보여준다.
- 페이스북에 내가 올린 글을 항목별로 분류해서 보여준다.
- 검색기능은 없지만 날짜순/종류별로 분류되므로 찾기 편하다.

- 트위터 계정에 로그인 하지 않고도 특정사용자 글을 검색할 수 있다.