2015년 10월 29일 목요일

jquery컨트롤

paperSelector.find("option:not(:selected)").each(function(){
$(this).attr("disabled",true);
});

// 선택안된 셀렉트 옵션 잠그기

if(advStudent.filter(':checked').val()==1){ //학생이면
tr_std.html(tr_std_html).fadeIn(150).css("background-color","#fffff");
}else{ // 학생이 아니면
tr_dis_reg.html(tr_dis_reg_html).fadeIn(150).css("background-color","#ffffff");
}

// 라디오 박스 체크된값 가져오기,

2015년 10월 27일 화요일

button줄바꿈

<input type="button" value="Really&#x00A;Tall&#x00A; Button">
// this is not work on IE etc...

<input style="width:100px;white-space: normal;" type="button"
value="kkkkkk kkkkkkk kkkkkkkkk">

// it works perfectly.
// but it could not works that i want

<button style="width:250px;">Online Registration<br>(For International Participants</button>

// finally ... not bad.

// 하지만 overflow 시에는 직접 잘라줘야함.

2015년 10월 18일 일요일

사용자이벤트

unit Unit1;



interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;

Type

  // 이벤트 핸들러 생성
  TMy1stEvent = procedure(PrvValue, CurValue: integer) of object;

  // 값 변경 감시 클래스 정의 [사용자 이벤트 정의]
  TWatchChangeValue = class
  private
    FOnChangeVal : TMy1stEvent;
  public
    procedure ChangeValue(PrvValue, CurValue: integer);
  published
    property OnChangeValue : TMy1stEvent read FOnChangeVal write FOnChangeVal;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }


    // 값 변경 감시 클래스 선언
    WatchChangeValue : TWatchChangeValue;

    // 이벤트 발생시 호출하는 함수 선언
    procedure ChangeValue2(PrvValue, CurValue: integer);

  public
    { Public declarations }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
  // 이벤트를 발생시키는 트리거 함수
  WatchChangeValue.ChangeValue(edit1.Tag, StrToInt(edit1.Text));

  if edit1.Tag <> StrToInt(edit1.Text) then
    edit1.Tag := StrToInt(edit1.Text);
end;


// 이벤트 발생시 호출하는 함수
procedure TForm1.ChangeValue2(PrvValue, CurValue: integer);
begin
  // 변경전 값과 변경후 값 표시
  self.Caption := IntToStr(PrvValue) + '>>>' + IntToStr(CurValue)
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  // 이벤트 등록
  WatchChangeValue := TWatchChangeValue.Create();
  // 값 변경 이벤트가 발생되었을 때 호출할 함수 설정
  WatchChangeValue.OnChangeValue := ChangeValue2;
end;


{ TWatchChangeValue }



// 이벤트 호출
procedure TWatchChangeValue.ChangeValue(PrvValue, CurValue: integer);
begin
  if Assigned(OnChangeValue) then OnChangeValue(PrvValue, CurValue);
end;


end.

// 출처 Posted by 떡잎  http://wwwi.tistory.com/280

2015년 8월 28일 금요일

이미정의되어있습니다

error LNK2005: xxx already defined in MSVCRT.lib(MSVCR100.dll) 


c/C++ > Code Generation > Runtime Library to Multi-threaded library (DLL) /MD

or Other

2015년 8월 26일 수요일

%출력형식

%c  문자
%C  %c
%s  문자열
%p  포인터값 16진수
%d  10진수 부호있는 정수
%i  %d
%u  10진수 부호없는 정수
%f  부동소수점 실수 소수 표현 무한수를 표현할 때 소문자 표현
%F  %f 무한수를 표현할 때 대문자 표현
%e  부동소수점 실수 지수 표현
%E  %e e 대신 E 로 출력
%g  크기가 작으면 %f, 크기가 크면 %e
%G  크기가 작으면 %f, 크기가 크면 %E
%x  16진수 정수 소문자 0 ~ 9,a,b,c,d,e,f
%X  16진수 정수 대문자 0 ~ 9,A,B,C,D,E,F
%o  8진수 정수
%n  Print nothing, but write number of characters successfully written so far into an integer pointer parameter.
%%  % 출력

2015년 8월 19일 수요일

javascript-delay

setTimeout( function, mile second );
ex) setTimeout("helloworld()", 1000);    // 1000 mile second == 1 second

일정시간 딜레이만 주려면 아래와 같은 함수를 만들어 사용하면 된다.

function delay(gap){ /* gap is in millisecs */
  var then,now;
  then=new Date().getTime();
  now=then;
  while((now-then)<gap){
    now=new Date().getTime();  // 현재시간을 읽어 함수를 불러들인 시간과의 차를 이용하여 처리
  }
}

2015년 8월 11일 화요일

jquery-required

$("form").submit(function(e) {

    var ref = $(this).find("[required]");

    $(ref).each(function(){
        if ( $(this).val() == '' )
        {
            alert("Required field should not be blank.");

            $(this).focus();

            e.preventDefault();
            return false;
        }
    });  return true;
});

2015년 8월 9일 일요일

JSP페이지이동

1)스크립트 이용
<% if (디비결과값) { %>
      <script>location.href = "login.jsp"; </script>
<% } else { %>
      <script>alert('정보없음'); window.history.back(); </script>
<% } %>
-----------------------------------------------------------------
2)response.sendRedirect

<% if (a == null) {
          response.sendRedirect("admin.jsp");
     } else {
          response.sendRedirect("login.jsp");
     }
%>
------------------------------------------------------------------
3)forward

<% if (a == null) { %>
          <jsp:forward page="admin.jsp"/>
<% } else { %>
          <jsp:forward page="login.jsp"/>
<% } %>

------------------------------------------------------------------
4)meta 태그 이용

<META http-equiv=refresh content="0;url=admin.jsp">

2015년 7월 14일 화요일

일반단축키


▷ Ctrl + Shift + Esc
- 작업관리자 실행
- 프로그램 오류로 인해 강제 종료가 필요할때 아마 가장 많이 여는 창이 아닐까 한다. 원래 Ctrl + Alt + Delete 를 이용해 여는것이 일반화

되어 있지만 윈7부터는 한손으로 아래의 단축키를 눌러 열 수 있다

▷ 윈도우키 + D
- 바탕화면 바로가기
▷ 윈도우키 + E
- 내컴퓨터 바로열기
▷ 윈도우키 + L
- 컴퓨터 로그 오프
▷ 윈도우키 + R
- 실행창 열기 (CMD 등을 실행 하기 위해 필요한것)
▷ 윈도우키 + U
- 제어판 실행
▷ 윈도우키 + P
- 듀얼모니터 설정

인터넷 익스플로러

▷ 윈도우키 + 방향키 (← or → )
- 창의 크기가 화면의 반으로 딱 나눠진다. 두개 이상의 인터넷 창을 이용할대 편리
▷ 윈도우키 + 방향키 (↑ or ↓)
- 창의 크기를 전체 화면으로 만들거나, 전체화면을 최소화 시킬 수 있다.

▷ Ctrl + T
- 새탭을 열어준다
▷ Ctrl + W
- 활성화 된 탭 만 닫아준다.
▷ Ctrl + N
- 새로운 익스플로러 창을 실행시켜준다.
▷ Ctrl + Shift + T
- 이전에 종료했던 웹 사이트를 불러온다. 실수로 종료했을때 유용한 단축키

델파이단축키

Delphi 단축키
Delphi 레퍼런스 / 2010/04/07 09:48
#1
< 델파이 단축키 모음 >

[찾기]

Ctrl + F Find

Ctrl + R Find and Replace

F3 Search Again


[화면이동]

F11 View Object Inspector

F12 Toggle Form/Unit

Alt + 0 View Window List

Ctrl + F12 View Unit

Shift + F12 View Form

Ctrl + PgUp/PgDown CodeEditor에서 현재페이지의 첫줄(PgUp), 마지막줄(PgDown)로 이동


[컴파일/실행]

Ctrl + F9 Compile

F9 Run

F7 Trace Into

F8 Trace Over

F5 Set Breakpoint

Ctrl + F5 Add Watch

Ctrl + F7 Evaluate/Modify


[블록관련]

Ctrl + Shift + U Unindent

Ctrl + Shift + I Indent

Ctrl + O, C Column Block Mode (또는 Alt키를 누른상태에서 Mouse를 드래그 해
도 컬럼블럭 설정이 가능, Shift + Alt + Arrow Key 를 사용해도 컬
럼블럭 설정)

Ctrl + O, K Line Block Mode


[키 매크로]

Ctrl + Shift + R Record

* 키매크로 작성순서 : -> <원하는키> ->

Ctrl + Shift + P Play


[Object Inpector]

Ctrl + Down Object Inpector 상단의 Object List ComboBox 열기
이 상태에서 Component Name을 키보드로 치면 Incremental Search 기
능Tab Property 와 Property Value 부분을 전환가능하며,
Property 쪽에 Cursor 가 위치한 상태에서 키보드를 치면
Incremental Search


[Code Insight]

Ctrl + Space Code Completion 기능

Ctrl + J Code Template 기능

Ctrl + Shift + Up/Down Object 의 Member function/procedure 의 선언부와 구현부를
이동

Ctrl + Shift + C Object 의 Member function/procedure 의 선언부와 구현부중
의 한가지를 코딩 한후 누르게 되면 나머지 선언부 또는 구
현부를 완성시켜줌


[기타]

Alt + F10 현재 위치에서 Popup-Menu 띄우기

Ctrl + Enter Code Editor 에서 현재위치의 단어로 File Open을 시도(기본 확장자
는 .pas) 하고 현재 Path 에서 그 파일을 찾지 못하면 File Open
Dialog를 띄움.

Alt + { or } Find Matching Brace( ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[‘, ‘]’ )


#2
에디터에서 Ctrl + E 를 하면 increment Search 가 됩니다. Ctrl+E 를 눌루고 문자열을 입력해 보세요
Ctrl+L 을 해도 다시 찾기 또는 다시 바꾸기를 할수 있습니다.

Alt+F11 은 유닛을 Uses 할때 사용하면 됩니다.

Ctrl+K+W 를 하면 선택한 블럭을 저장할수 있습니다.
Ctrl+K+R 을 하면 캐럿위치에 파일을 읽어서 붙일수 있습니다.

Ctrl+Alt+B 를 하면 현재 프로젝트에 설정된 BreakPoint 를 편집할수 있구 그 라인으로 이동할수 있습니다.



#3
다시찾기 단축키.
ctrl+f로 찾은후, F3을 누르면 다시 찾기가 됩니다.

토큰으로 찾기 단축키
커서가 토큰에 위치시키고는 ctrl + alt + 화살표 위로 또는
아래로 하면 커서위치의 토큰과 가장 가까이에 있는 토큰을 찾아갑니다.

ctrl + 마우스 왼쪽 클릭 단축키
ctrl + 화살표 위

메소드 선언부바로가기
메소드선언부에서 ctrl+shift+화살표아래

메소드 구현부바로가기
메소드구현부에서 ctrl+shift+화살표위

GExperts의 클립보드 히스토리 사용.
Gexperts를 설치하셨다면 클립보드 히스토리가 있습니다. 델파이 에디터 편집기에서 사용한 복사내용 역사(?)가 등록됩니다.

GExperts의 IDE 메뉴 shortcut사용
델파이의 메뉴에 단축키를 설정하실 수 있습니다. 꽤나 유용합니다.
View-얼라이먼트 팔레트같은것을 shift+alt+p로 선언해 두시면 편할듯싶네요

GExperts의 Code Proofreader
철자수정 기능을 갖추고 있습니다.
특히 Dictionary탭의
Enable dictionary replament와
Enable compiler replament 체크를 하시게 되면
코딩이 수월해지며, Form또는 unit Edit1등이 짜증나게 됩니다.

컬럼블럭 선택 해제
선택: shift + alt + 화살표키하시면 컬럼열을 복사하실 수 있습니다.
해제: 그냥 편집창에서 마우스를 클릭하시면 해제됩니다.
또는 Ctrl+O+K를 하시면 해제됩니다.(이건 많은 분들이 모르시고 있더군요)

컴포넌트 이름은 알고 어떤 팔레트에 있는지 모를때
Alt + V + C를 하시고 컴포넌트 이름을 입력하셔서 찾으시면 됩니다.

델파이환경에서 unit을 제거했는데 dcu를 찾지 못할때..
델파이는 보통 컴파일시 변경된 파일만 체크하기 때문에 이런 문제가 나타날 수 있습니다.
그때는 Alt + P + B를 하시면 모두 빌드해서 에러를 잡으세요.

Project Group에서 여러 프로젝트를 한번에 빌드하기.
하나하나씩 컴파일 하지 마시고, Alt + P + E를 하시면 프로젝트 그룹내의 모든 프로젝트를 빌드하게 됩니다.

제가 애용하는 델파이의 기능이었으며, 이미 알고 있다고 가정한 것들은 제외했습니다.

(델6버전임.)



#4
폼 디자이너
Ctrl + 방향키(←↑→↓) : 컴포넌트 위치 이동
Shift + Ctrl + 방향키(←↑→↓) : 컴포넌트 위치 이동(빠르게)
Shift + 방향키(←↑→↓) : 컴포넌트 크기 변경
선택 후 ESC : Parent컴포넌트로 이동

오브젝트 인스펙터
Ctrl + ↓ : 컴포넌트 선택기 팝업
(팝업 후 알파벳 문자 입력하여 해당 컴포넌트로 이동 가능)
Alt + ↓ : Property Combo 선택기 팝업
(팝업 후 알파벳 문자 입력하여 해당 컴포넌트로 이동 가능)
Ctrl + Enter : 열거형 Property값을 다음 값으로 변경
+선택 후, ←,→ : 하위 Property펼치기,접기
Ctrl + Tab : Properties,Events탭 전환
..선택 + Ctrl + Enter : Property Editor 열기
Tab : Property Name/Value토글

소스코드 에디터
Ctrl + Enter : 현재위치의 단어로 File Open 시도
현재 Path 에서 찾지 못하면 Dialog
Ctrl + S : 파일 저장
Ctrl + F4 : 파일 닫기
Ctrl + Shift + C : Method/Procedure/Property자동생성
Ctrl + Shift + ↑(↓) : 선언부,구현부 상호간 이동
Ctrl + Shift + R : 키 매크로 레코딩
Ctrl + Shift + P : 키 매크로 실행
Ctrl + ←,→ : 이전 단어, 다음 단어
Ctrl + Shift + ←,→ : 이전 단어, 다음 단어까지 블럭
Ctrl + Home : 소스코드 맨 앞으로 이동
Ctrl + End : 소스코드 맨 뒤로 이동
Shift + Home : 현재 라인 맨 앞까지 블럭
Shift + End : 현재 라인 맨 뒤까지 블럭
Ctrl + PageUp : 현재 화면의 맨 윗줄로 이동
Ctrl + PageDown : 현재 화면의 맨 아랫줄로 이동
Ctrl + Shift + I(U) : 현재 라인에 들여쓰기(내어쓰기)
Shift + Alt + 방향키(←↑→↓) : 블록 사각형 지정         -> Ctrl + Backspace : 해제
Ctrl + KL : 캐럿이 Line Home에 있을 때, Line 블럭
Ctrl + T : 현재 위치에서 마지막 단어까지 삭제
Ctrl + I : 블럭 지정된 문자를 공백으로 변환
Alt + {, } : '{'괄호 앞,뒤에서 사용. 짝 찾기.
Ctrl + N : 다음 Line 맨 앞으로 줄바꿈
Ctrl + M : 줄바꿈
Alt + BackSpace : 실행 취소
Ctrl + E : 한 글자 찾기
Ctrl + ↑(↓) : 캐럿 고정 스크롤
Ctrl + F : 찾기
Ctrl + R : 바꾸기

코드탐색기
F2 : 이름 변경하기(Uses제외)
DoubleClick : 소스코드 탐색기의 해당 코드로 이동
Ctrl + Shift + E : 탐색기<->에디터 창 이동

코드 인사이트(Code Insight)
Ctrl + Space : 코드완성 마법사
Ctrl + Shift : 메소드 파라미터 팁
Ctrl + J : 코드 템플릿 사용

기타 기능
Alt + F10 : 현재 위치에서 Popup-Menu 띄우기
F11 : View Object Inspector
F12 : Toggle Form/Unit
Alt + 0 : View Window List
Ctrl + F12 : View Unit
Shift + F12 : View Form

Posted by ~ 정윤식
http://sshoking.tistory.com/entry/Delphi-%EB%8B%A8%EC%B6%95%ED%82%A4

2015년 4월 22일 수요일

PermGemSpace

출처: http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/memleaks.html
http://wiki.openmrs.org/display/docs/Out+Of+Memory+Errors

메모리 누수 leak 를 알게 되는 일반적인 방법 중 하나가 java.lang.OutOfMemoryError 에러 입니다. 이 에러는 Java 힙 heap 이나 힙의 특정 영역에 객체를 할당 할 수 있는 공간이 충분하지 않을 때 발생합니다.

PermGen space 라는 메시지는 permanent generation 이 가득 찬 상태라는 것을 알려줍니다. permanent generation 은 클래스와 메쏘드 객체가 저장되는 힙의 영역입니다. 어플리케이션이 많은 수의 클래스를 로드하면, -XX:MaxPermSize 옵션을 사용하여 permanent generation 의 크기를 증가시킬 필요가 있습니다.

톰캣 Tomcat 을 사용하다 이 에러를 보았다면 대체로 웹 어플리케이션을 너무 많이 Update 하거나 Reload 한 것이 원인입니다. 톰캣 과 JVM 은 웹 어플리케이션을 삭제하고 다시 생성할 때 할당한 모든 메모리를 해제하지는 않습니다. 톰캣을 여러 번 리로드하면 할당된 메모리가 바닥나서 동작하지 않게 됩니다.

톰캣에서 이 에러가 발생했을 때 해결 방법은 1. 톰캣을 재시작하는 것입니다. 2. 톰캣이 할당할 수 있는 메모리를 늘려줄 수도 있습니다. 이 방법은 에러 발생을 중지시키는 것이 아니라 톰캣을 재시작하기까지의 시간을 연장시킬 뿐입니다. 3. 메모리 누수가 발생하지 않도록 톰캣을 설정합니다.


Java Heap 크기 증가

커맨드라인으로 톰캣을 실행시킨다면 아래의 파라미터를 추가합니다.
-Xmx512m -Xms512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m

윈도우 서비스로 톰캣을 실행시킨다면 톰캣 모니터를 실행시키고, Tomcat -> Java -> Java Options 에 아래의 내용을 추가합니다.
-Xmx512m -Xms512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=128m
참고1: 복사해서 붙여넣기를 할 때 빈 공간이 추가되지 않도록 주의하십시오. 톰캣을 시작하지 못할 수 있습니다.
참고2: 64비트 버전의 톰캣을 사용한다면 레지스트리 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat5\Parameters\JavaJVM 을 변경해야 합니다.

리눅스 linux 나 유닉스 unix 환경에서 톰캣 tomcat 을 사용하시면 catalina.sh 파일의 상단에 아래의 문장을 추가해 주면 됩니다. 필요에 따라 서버의 swap 영역을 넓혀줍시다.
JAVA_OPTS="-Djava.awt.headless=true -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"

메모리 누수 방지 설정

conf/web.xml file 파일에서 jsp 서블릿 부분에 아래의 내용을 추가합니다.
<init-param>
  <param-name>enablePooling</param-name>
  <param-value>false</param-value>
</init-param>

2015년 4월 16일 목요일

문자열길이체크

var len;
var str;
var textarea;
function getCheck(tagName,maxlen){  //tagName : TextArea의 id값 // maxlen : 체크할 최대byte수
    len = 0;
    textarea = document.getElementById(tagName);
    str = textarea.value;
    //str = document.getElementById(tagName);
    for(var i=0; i<str.length; i++){
        // charCodeAt에서 한글이 12592이상인걸로 알고있지만 아닐수도?(아스키코드 10진수..)
         if(str.charCodeAt(i) >= 12592){  // 이부분에서 영문 숫자 조건줘서 변경 가능
            len = len + 3;  // 한글은 3바이트로 체크
        }else{
            len = len +1;  // 한글 외에는 1바이트로 체크
        }
        if(len > maxlen){
            alert("Is over "+maxlen+" characters.");
            textarea.value = str.substring(0,i);  // maxlen이상 입력할 수 없다
            str = textarea.value;  // 처리를해주어야 그만돈다
        }
    }
}


// 단순 길이 제한
onkeyup="getCheck(tagName,800)"

var len;
var str;
var textarea;
function getCheck(tagName,maxlen){  //tagName : TextArea의 id값 // maxlen : 체크할 최대byte수
    len = 0;
    textarea = document.getElementById(tagName);
    str = textarea.value;  
    if(str.length>maxlen){
    alert("Is over "+maxlen+" characters.");
    textarea.value = str.substring(0,maxlen);  // maxlen이상 입력할 수 없다      
    }  
}

2015년 4월 13일 월요일

2015년 4월 10일 금요일

clob

[iBatis] Clob 사용하기

1. select 하기 (resultMap 이용)
select 문에서 resultMap을 사용한다.
그전에 앞서 resultMap을 셀럭트 하기전에 선언한다.
왜냐면 XML은 순차적으로 해석하기때문에... 먼저 해줘야 나중에있는놈이 쓸수있는거다.

<resultMap id="borderResultMap" class="java.util.HashMap">
    <result property="seq" column="SEQ"/>
    <result property="cont" column="CONT" jdbcType="CLOB" javaType="java.lang.String"/>
</resultMap>

<select id="selectBoard" parameterClass="java.util.HashMap" resultMap="borderResultMap">
    SELECT SEQ, CONT FROM BOARD WHERE  SEQ = #seq#
</select>

2 insert & update 하기
ㄱ.parameterMap을 이용 하는 방법
<parameterMap id="boardParamMap" class="java.util.HashMap">
    <parameter property="seq"/>
    <parameter property="content" jdbcType="CLOB"/>
</parameterMap>

<insert id="insertBoard" parameterMap="boardParamMap">
    insert into(SEQ, CONT) VALUES(#seq#, #cont#)
</insert>

ㄴ.바로 사용 하는 방법 (사용해봄 :CLOB 만 붙여주니 동작함)
<insert id="insertBoard" parameterMap="boardParamMap">
    insert into(SEQ, CONT) VALUES(#seq#, #cont:CLOB#)
</insert>

2015년 3월 31일 화요일

background

background: url(http://cdn9.pikicast.com/collection/7ebe16c1-6abd-4014-ab4e-d2609932d48b_20150331174833584.jpg) 50% 50% / cover no-repeat;

//그라디언트
background:linear-gradient(to bottom,#595959 0%,#4A4A4A 95%,#262626 99%,#262626 100%);

2015년 3월 29일 일요일

RF

RF 회로개념 잡기 - PART 10 ▶ Antenna (안테나)
RF가 가장 RF틱하게 만드는 물건이 과연 무엇인가에 대한 질문에 대해, 많은 분들이 아마 antenna(안테나)를 꼽으실 것 같습니다. 어떤 RF기기건, 무선을 이용한다는 관점에서 절대로 빠져서는 안되는 가장 눈에 띠이고 티 나는 물건이니까요. 안테나가 RF의 가장 대표적인 존재여서 그런지, 안테나라는 하나의 테마에 대해서만 논하려 해도 엄청나게 다양하고 많은 분량의 얘기가 오갈 수 있습니다. 종류도 무진장 다양하게 많고 구현방법도 여러 가지고 동원되는 기술도 다양하기 그지없습니다.
이 기초강의는 모든 안테나에서 공통적으로 적용되는 기본개념들을 포괄적으로 이해하는데 목적을 두고 있습니다. 아주 생기초적인 부분부터, 엔지니어라면 꼭 알아야 할 기본 개념까지 차근차근 정리하였으니 편안한 마음으로 읽어보세요. ^^

 안테나란?
아무리 RF에 R자도 모르는 일반인이라 해도, 솔직히 안테나라는 존재는 꽤 익숙할 것입니다. 최소한 전파를 쏘고 받는 부품이라는 거 정도는 누구나 아는 상식이지요. 안테나의 기호는 보통 아래와 같이 역삼각형 막대기를 많이 씁니다.
 
안테나(antenna)란 말의 어원은 곤충의 더듬이에서 유래되었다고 합니다. 눈에 보이지 않는 파동신호를 감지할 수 있는 막대기.. 결국 더듬이와 안테나는 그 용도와 특징이 거의 유사합니다.
무선통신에서 신호가 전달되는 경로는, 유선의 선로가 아닌 자유공간(free space)입니다. 그냥 공기(air)라고 말하기엔 우주공간에서도 전자파를 쓰기 때문에 자유공간이란 말이 좀더 적합합니다. 그러한 자유공간에 신호를 뿌려주고, 또 그 뿌려진 신호를 잡아서 받는 것, 그 역할을 하는 최종단이 바로 안테나이죠.
전기적 신호는 도체를 통한 전위차와 전하의 흐름으로 전달되기에, 자유공간과 같은 부도체(=절연체)에선 전하가 흐르지 못합니다. 하지만 전자기파는 오히려 도체를 통과하지 못하고 부도체(=유전체)에서 전계와 자계를 구성하면서 진행합니다.
이렇게 전압/전류로 표현되는 전기적 신호와 전기장/자기장으로 표현되는 전자기파를 서로 변환해주는 역할을 하는 것, 그것이 바로 안테나입니다. 안테나 외부의 전자기장의 변화와 안테나 도선상의 전기적 신호가 상호 연동함으로써, 대기중에 떠다니는 전자기파 신호를 전자기기가 감지하고, 또 그 역도 가능할 수 있는 것입니다.

 안테나의 S파라미터
아래 그림에서 왼쪽은 Microstrip으로 구현된 Stepped impedance filter (LPF 형태)의 예입니다. 입력포트에 들어간 신호들은 이 구조를 지나면서 출력포트에서 특정 주파수만 걸러진 형태로 나오게 됩니다.
반면 오른쪽 그림은 왼쪽과 똑같은데, 출력포트가 없는 Microstrip pattern입니다. 많이들 아시겠지만, 이것은 소위 patch antenna라 불리우는 유명한 안테나 형상입니다. 이 두 그림은 매우 비슷하지만, 전혀 다른 특성을 가져버린다는게 신기하죠??
이 그림은 안테나의 원리를 규명하는 그림이기도 합니다. 안테나는 한마디로 끊어진 선로입니다. 더 이상 전기신호가 진행할 수가 없는 상태이므로, 일반적인 선로가 그렇게 된다면 open(개방)된 회로처럼 신호가 더 이상 갈 곳이 없어서 전반사해서 돌아오겠지요. 하지만 안테나는 그 끝단을 특정 주파수에서 공진하게 함으로써, 신호가 되돌아가지 않고 어떤 전자기장 형태의 에너지가 형성되어 외부로 뻗쳐나가도록 해줍니다.
그렇기 때문에 안테나는 기본적으로 포트가 입력포트하나뿐인 1 port device입니다. 그래서 안테나에서는 입력 반사계수를 의미하는 S11값만 보이며, 아래와 같은 공진 그래프 형태를 가지게 됩니다.
즉 원하는 주파수에서 S11이 더 밑으로 깊게 파일수록 안테나의 복사효율이 높고 매칭도 잘 되었다는 의미이며, 이 푹 파인 계곡이 넓을수록 안테나가 다룰 수 있는 주파수의 대역폭이 넓다는 의미가 됩니다.

  안테나의 공진
위에서 살짝 언급되었듯이, 안테나의 가장 근본적인 원리는 공진(resonance)으로 설명됩니다.
공진 강의에서 보셨듯이, 공진이란 구조적/전기적으로 주파수선택 현상을 가리키는 말로써, RF에서 가장 흔하게 사용되는 말입니다. 우선 쉬운 예로 dipole antenna와 monopole antenna의 예를 볼까요?
 
잘 알려져 있다시피, 가장 일반적인 안테나 형태인 dipole 안테나의 경우 막대기 길이의 두배의 파장을 가진 주파수에 공진하게 됩니다.  뒤집어 말하면, 원하는 주파수를 송수신하려면 막대기 길이를 λ/2 길이로 만들면 된다는 것이죠. 예를 들어 1GHz의 신호를 송수신하고 싶다면.. 1GHz의 공기중 파장은 30cm입니다. 그러므로 dipole antenna의 길이를 15cm로 만들면 1GHz용 안테나가 만들어지는 것이죠. monopole의 경우는 Ground가 image 효과를 가지기 때문에, dipole보다 반으로 작은길이인 λ/4 로 만들면 됩니다.
위의 예 말고도 기타 다른 어떤 종류 어떤 모양의 안테나들도, 이와같이 그 dimension(물리적 크기)가 주파수에 철저하게 의존하는 구조적 공진기입니다. 모든 안테나는 그 모양대로 길이, 크기, 면적 등이 파장과의 비례관계에 의존한다는 것이지요. 그래서 고주파를 사용할 때의 장점중 하나는 바로 '안테나가 작아진다'라는 것입니다. 주파수가 올라갈수록 파장이 짧아지므로 안테나도 당연히 작아집니다. 결국 안테나를 이해하기 위해 기본적으로 우선 기억해야 할 내용은 바로 이겁니다.
안테나의 싸이즈는 주파수에 철저히 의존한다 "= 파장이 짧아질수록 더 작게 공진기를 구현할 수 있다

 안테나 무선통신의 원리
이렇게 전기적 신호를 전자기파로 변환해주는 안테나를 이용하여, 어떻게 무선 통신이 이루어질 수 있을까요? 단순히 송신안테나에서 전파를 쏘면 그 전파를 수신 안테나에서 받는 것처럼 생각될 수 있습니다. 주거니 받거니.. 물론 보기엔 마치 그렇게 보일 수도 있지만, 실제로 신호가 전달되는 메커니즘은 그렇게 주고 받는 식으로 설명되지 않습니다. 두 안테나 간의 전자기장 교류에 의한 신호전달이라는 메커니즘을 아주 원초적이고도 개념적으로 차근차근 이해해보도록 하겠습니다. 잘~ 보세요!
Step 1 : 신호란?
우리가 '신호'라고 말하는 것은, 어떤 주기적 파동에너지에 정보가 실려있다는 의미입니다.  Oscillator와 같은 주파수원 발진기에 의해 생성되는 파형은 아래와 같이 깨끗한 sine 파형이 됩니다.
이렇게 깨~끗한 파형을 누군가에게 전달해준다면 그사람은 뭐라고 반응할까요?
"음 깨~ 끗하군.. -_-; " 
즉 누구나 알고 있는 그냥 sine파일뿐, 아무 정보가 없습니다. 그야말로 깨끗한 백지를 fax로 보내준 셈과 마찬가지죠. 에너지 낭비입니다-
우리가 '정보를 담는다'라고 말하는 것은, 이러한 깨끗한 sine파형을 정해진 형태로 찌그러트리거나 가변을 시키는 것을 말하게 됩니다. 그렇게 해서 서로가 정해진 룰에 의해 정상적인 sine파형을 변형시켜서 보내면, 받은 쪽에서는 그 룰에 의해 변형되어 수신된 파형의 의미가 무엇인지 해독해내게 되는 것이죠.
이렇게 정상파형을 일정한 약속대로 변형시켜서 정보를 담는 행위를 바로 변조(modulation)라고 부르게 되는 것입니다. 또한 그것을 다시 약속대로 복구해서 그 의미를 알아내는 행위를 복조(demodulation)라 부르게 되는 것이죠. 여기서 어떤식으로 sine파형을 왜곡시키느냐에 대한 룰이 바로 변조방법을 지칭하게 되는 것이며, 보내는 쪽과 받는 쪽에서 같은 약속, 즉 같은 변복조 방식을 이용해야 원래 의미를 복구할 수 있게 되는 것입니다. 변복조의 의미 자체는 이렇게 simple합니다.
결국 진짜 정보를 담은 신호란, 변조과정을 통해 sine파형에 일정한 변형이 가해진 주기적 파동형태를 말합니다. 이점을 잘 기억해두시고 다음으로!
Step 2. 쌍대성 (Reciprocal)
이말이 뭔말이냐면, 원래부터 안테나는 송신용과 수신용이 따로 구분되지 않는다 라는 것입니다. 즉 모든 안테나는 송신용이 될수도, 수신용이 될 수도 있다는 것입니다. 설계나 제작단계에서 송신용/수신용이 따로 구분되어 만들어지는게 아니라, 일단 특정 주파수에서 특성에 맞게 만들어진 안테나는 그걸 사용하는 사람이 송신단에 쓰면 송신용 안테나가 되고 수신단에 쓰면 수신용 안테나가 될 수 있다는 것입니다. 이 점은 안테나를 이해하는데 있어서 대단히 중요한 개념입니다.
 
안테나는 수동소자로서, 입력부에 전력이 걸리면 그것을 외부에 전자기장 형태로 뿌려주거나, 외부에 존재하는 전자기장의 변화를 감지해주는 일을 합니다. 이 두가지 기능은 만들 때 구분되는게 아니라, 구조적 공진형태로서 안테나를 만들고 나면 그냥 그대로 발현되는 특성이기 때문입니다.
Step 3. 안테나 빔 (Antenna beam)" 이얍! 내 레이저빔을 받아랏~ "
어릴 때 울트라맨이나 태권V 흉내를 내면서 이런 장난을 치신 적이 있을 것입니다. 빔(beam)이란 말은 마치 레이저처럼 빛이 특정방향으로 쭉 나가는 듯한, 그런 형상을 지칭한다는 건 일반인도 다 알고 있는 사실이죠. 그리고 빛(light) 역시 주파수가 높은 전자기파의 일종입니다.
안테나에서 방사되는 전자기파(electromagnetic wave) 역시, 온사방으로 흩뿌려지듯이 퍼지는 것이 아닙니다. 어떤식으로든 특정 방향으로 빔을 형성하게 되며, 결국 안테나에서 빔이란 말은 안테나가 송수신이 가능한 특정한 전자기파 방향, 형상 또는 위치를 지칭하게 됩니다.
그리고 이러한 antenna beam은 특정한 방향성과 모양을 가지기 때문에, 그 형상을 빔패턴 (beam pattern) 또는 복사패턴(radiation pattern)이라고 부르게 됩니다. 이문제는 저 밑에서 더 자세히 다루게 될 것입니다.
Step 4. 무선통신의 원리
위에서 언급한 신호의 변조 와 쌍대성의 원리에 기초하여 무선통신의 원리를 이해해보도록 하겠습니다.
<그림 1> 멀리 떨어진 두 개의 시스템에서 동시에 똑같은 주파수의 전자기파를 방출하고 있다고 가정하였습니다. 현재 두 시스템은 둘다 깨끗한 sine파의 파동, 즉 정보가 없는 그냥 주파수신호를 전자기파 형태로 내보내고 있는 중입니다. 그리고 이 두시스템의 전자기파 에너지는 동일한 물리적 공간에서 동일한 주파수의 전자기장을 함께 형성하고 있는 중입니다.

 <그림 1>
<그림 2> 그중 A 시스템에서 '바보'라는 의미를 담도록 변조된 파형의 신호를 내보내기 시작했습니다. 즉 어딘가에 이 신호정보를 보내기 위해 '송신'을 시작하려는 중인 것입니다.

<그림 2>
<그림 3> 이렇게 변조된 신호에 의해 왜곡된 형태로 복사된 시스템 A의 전자기파 신호는, 자신의 안테나 빔 영역내의 전자기파를 변조된 파형대로 왜곡시키게 됩니다. 그리곤 결국 시스템 A 와 시스템 B의 안테나 패턴이 겹치는 영역에서 일어난 전자기파의 변화는, 시스템 B의 순수한 sine 파형을 함께 왜곡시킵니다. 결국 시스템 B에서는 자신의 안테나 빔 영역에서 일어난 변화를 감지하는 셈이 됩니다.

<그림 3>
개념적으로 간략화시킨 설명이긴 하지만, 결국 위와 같은 식으로 결국 시스템 A에 담고 있던 의미있는 전기적 신호는 시스템 B의 전기적 신호로 전달될 수 있게 됩니다. 이것이 바로 안테나를 이용한 무선통신의 기본적인 원리입니다.

  빔패턴 (beam pattern) = 복사패턴(Radiation pattern)
저 위의 무선통신의 원리에서 설명하였듯이, 안테나에는 유효 전자기파 영역인 빔패턴(beam pattern, 또는 radiation pattern)이 존재합니다. 결국 특정 방향과 위치로 전자기파를 사용한다는 것이므로, 이것은 안테나의 방향성(directivity)이란 개념을 탄생시킵니다.
우선 모든 안테나 책에서 제일 먼저 언급되는 것으로 isotropic antenna라는 게 있습니다. 그것은 아래 그림과 같이 어떤 점전원(point source)처럼 되어, 위 아래 360도 전 방향으로 동그란 구처럼 전자기파가 사방으로 고루 퍼져 나가는, 무지향성 안테나를 의미합니다.
그렇지만 이렇게 완벽하게 사방으로 고루 전자기파를 방사하는 안테나는 존재하지 않습니다. 이론상으로만 존재하는 안테나라서 실제로는 단일한 하나의 안테나로는 저렇게 사방으로 완벽하게 균등하게 전자파가 복사되도록 만들 수가 없다는 겁니다.
결국 실존하는 안테나는 구조적으로 어떤 '방향성'을 가지는 빔패턴을 가지게 되고, 또한 실제로도 대부분의 안테나는 특정 방향으로 신호를 보내야 하는 경우가 많습니다. 그래서 안테나마다 고유의 빔패턴 특성을 가지게 되며, 우리는 이러한 여러 빔패턴 특성을 가진 안테나 중 원하는 빔패턴을 가진 안테나를 선택하게 되는 것이죠. 아래에 3차원으로 표현된 빔패턴의 그림들을 표시하였습니다.
이러한 빔패턴이 의미하는 물리적 의미는, 안테나에서 360도 전방향으로 복사(radiation)되는 전자기파의 전계강도(electric field strength)를 그린 곡선입니다. 안테나의 빔패턴을 측정하는 방법은 간단합니다. 표준안테나를 이용하여 측정하고자 하는 안테나의 360도 전방향에서 신호를 수신해서 각 각도별로 수신된 전계강도를 표시하면 아래처럼  polar chart상에 파형이 그려지게 됩니다. 이때 동그란 polar chart에서 중심에서 떨어진 거리 자체가 전계강도의 크기를 말합니다.
안테나에서 적당히 떨어진 거리의 far-field 영역에서는 이런 빔패턴이 일정한 형상을 유지하게 됩니다.
그런데 지구상에서 살고 있는 우리 인간의 입장에서, 안테나를 쓸 때 어떤 빔패턴이 유리할까요? 굳이 사방으로 고루 나가는 isotropic antenna가 필요하지 않습니다.  위(하늘), 아래(땅) 로는 별로 중요하지 않고, 지면을 따라 옆으로만 좍~ 퍼져서 잘 나가면 좋겠죠? 이렇게 수평방향으로만 고루 사방으로 퍼지는 빔패턴을 소위 omni-directional 하다고 합니다. 아래에는 대표적인 omni-directional 빔패턴을 가지는 dipole antenna의 빔패턴을 예시한 그림입니다.
omni(엄니~) 란 접두어는 '모든'이라는 의미로써, 모든 방향으로 동일하게 나간다는 의미입니다. 언뜻 보면 isotropic과 헷갈릴 수 있지만, isotropic은 위아래옆 온사방으로 균일하게 구(sphere)의 형태로 전자파가 퍼져나가는 안테나를 말하며, omni-directional은 그중 위아래가 아닌 옆으로만 고루 퍼지는 안테나 특성을 말합니다. 소위 말하는 도나쓰 패턴입니다. 이러한 패턴은 평면에 가까운 지면상에서 사용할 때, 가장 효율적이고 빔패턴이라 할 수 있습니다.
반면 지상과 인공위성간의 위성통신의 예를 보도록 하지요. 위성통신이 아마도 가장 먼 거리로 전자파를 송수신해야 할 겁니다. 그렇기 위해선 무작정 사방으로 전자파가 나갈 이유는 전혀 없고, 옆으로 쫙 퍼지는 omni- directional도 필요 없을 것이며, 특정 방향으로 정확하고 날카롭게 빔에너지를 모아서 날려야 할 것입니다. 그러한 위성용으로 주로 사용되는 안테나는 parabolic antenna, 즉 접시 안테나인데 이것은 여러 안테나들 중에서도 가장 빔패턴이 샤프한 안테나입니다.
얘는 같은 빔에너지를 한방향으로 졸라게 집중해서 쏘기 때문에, 우주상의 위성과 지구상의 송수신기가 딱 방향을 맞추어 통신함으로써 효율을 극대화시킵니다. 그래서 접시안테나는 지구상에 떠있는 위성을 향해 정확한 각도와 방향으로 잘 맞추어 놓는 것입니다.

 안테나 이득 (Antenna Gain) & HPBW
안테나를 처음 접하는 분들이 제일 먼저 혼란스러워 하는 개념이 바로 안테나 이득입니다. 이득이라 함은 입력된 신호가 출력에서 더 커지는 경우를 말하는 것인데.. 안테나는 분명히 수동소자입니다. DC전원같은 것없이 그냥 안테나 입력에 외부에 내보내고 싶은 신호만 보내면 안테나가 공기중에 radiation시키는 것이지요.
위의 그림에서처럼, 안테나 자체는 passive이기 때문에 절대로 입력된 신호보다 큰 신호를 내보낼 수가 없습니다. 그렇게 입력 신호를 더 크게 출력시킬 수 있는 에너지를 공급받지 못하는데, 어떻게 해서 이득이 존재한다고 말할까요?
안테나에서의 이득(antenna gain)은 이런 능동회로의 이득과 다른 문제이며, 입력신호에 대비하여 출력신호가 더 커진다는 의미의 이득이 아닙니다. 안테나 이득은, 방향성(directivity)로 인해 파생되는 상대적 이득을 의미하는 안테나만의 용어입니다. 안테나의 이득이란 최대전계 방향을 기준으로 isotropic한 복사패턴에 대비한 안테나 복사패턴의 비율을 의미합니다. 말로 표현하면 좀 거시기한데 그림으로 표시하면 아래와 같이 됩니다.
즉 안테나로 인해 신호가 커지는게 아니라, 사방으로 고르게 퍼져나가야 할 에너지가 일정방향으로 몰리는 경우 그 쏠리는 비율을 의미하는 셈이 됩니다. 단위로는 dB를 사용하며, isotropic 안테나를 기준으로 하는 (일반적인) 경우는 dBi라고 표현합니다. 반면 dipole 안테나를 기준으로 하여 이득을 계산할 때는 dBd 라는 단위를 쓰기도 합니다. Dipole 안테나의 이득은 2.15 dBi 이므로, dBd와 dBi는 아래와 같은 관계를 가집니다.
0 dBd = 2.15 dBi  , dBi = dBd + 2.15
결국 안테나의 이득이 크다는 얘기는, 특정방향(즉 신호를 보내기 위한 방향)으로 더욱 샤프하게 전자파가 쏠린다는 의미입니다. 결국 안테나의 이득이 높다는 말은, 전자파를 전달하기를 원하는 특정방향으로 더욱 강한 전자파를 보낼 수 있다는 의미가 됩니다.
하지만 세상에 공짜가 없고 특히 RF도 그렇듯이.. 안테나의 이득이 크다고 마냥 좋을까요? 머 그렇지만은 않슴다. 위에서 보이다시피, 안테나가 가진 제한된 에너지량 때문에 이득과 빔폭은 기본적으로 trade off 관계를 가지게 됩니다. 그렇기 때문에 안테나 이득이 높다고만 장땡이 아니라, 시스템에서 원하는 만큼 적절한 대역폭과 이득을 가지는게 중요합니다.
그리고 이렇게 빔폭의 기준점으로, HPBW (Half Power Beam Width : 반전력 빔폭)라는 지표를 사용합니다. 안테나의 빔폭이 넓다, 좁다라는 걸 말할 수 있는 기준점이 있어야 할텐데 이것을 쉽게 표준화할 수 있도록 최대 빔방향의 전력을 기준으로 전력이 반 (10*log(0.5) = -3 dB)로 줄어드는 지점까지의 각도를 HPBW라고 정한 것입니다.
일반적인 안테나의 빔폭이 몇도다.. 라는 얘기는 대부분 이런 반전력빔폭을 기준으로 말하는 것입니다. 이러한 빔폭과 이득문제를 원하는 수준만큼 원할하게 쓰고 싶을 때는, 하나의 단일 안테나로는 해결이 어려울 수 있습니다. 이때 아래와 같은 배열안테나라는 개념이 필요해집니다.

 배열 안테나 (Array Antenna)
경우에 따라선 parabolic antenna 같은거 말고도 빔패턴을 더욱 샤프하게 만들어야 할 경우가 있는데, 이런 경우 하나의 안테나로는 부족한 경우가 많습니다. 이 경우 여러개의 안테나를 특정한 룰에 의해 배열하면, 각각의 안테나의 빔패턴이 합쳐져서 더욱 샤프하게 만들 수가 있습니다.
이것을 바로 배열안테나(array antenna)라고 부릅니다. 배열 안테나 형태로 만들면 빔을 더욱 샤프하게 합쳐지게 할 수 있고, 각각의 안테나의 복사전력이 합쳐져서 더욱 멀리 퍼져나가는 강한 빔패턴을 만들 수 있습니다. 아래의 그림은 이러한 patch antenna array의 사례입니다.
(주 : Ansoft emsemble™ 의 예제 그림입니다.)
그런데 이렇게 배열 안테나를 만들고 나면, 안테나 빔패턴이 다소 복잡해지게 됩니다. 각각의 패턴을 합치다 보면 아래와 같이 지저분한 형태의 합성 빔패턴이 만들어집니다. (일명 거시기 패턴)
   
여기서 lobe(로브)란 말은 우리말로 엽(葉)이라고 해석됩니다. 무슨 말인지 더 모르겠죠? -.-;;
해부학 용어로 어떤 볼록 튀어나온 부분, 혹, 귓볼 뭐 그런 뜻이죠. 저 모양그대로 볼록한 그런걸 영어로 'lobe'라고 부른다고 하네요. 배열 안테나의 패턴에서는 원래 의도했던 제일 큰 빔패턴을 main lobe라 부르고, 그 이외에 얼결에 떨거지로 생기는 성분을 side lobe라고 부릅니다. 각 lobe의 사이인 null 각도에서는 안테나로서 역할이 안되는 지역이 됩니다. 언뜻 보면 side lobe는 전혀 필요없어 보여서 없애야 할 것처럼 보이지만, 경우에 따라선 side lobe를 절묘하게 이용하는 경우도 있으므로, side lobe를 조절하는건 설계자의 재량입니다.
안테나를 배열하는 대표적인 방법론 세가지를 아래에 표기해보았습니다.
Broadside는 늘어놓은 안테나 옆으로 side-lobe 없이 main-lobe만 생성이 가능한 반면, 빔패턴을 아주 샤프하게는 만들지 못합니다. End-fire 형태는 빔패턴이 매우 샤프하지만, 기생적인 side lobe가 많이 발생됩니다. 안테나 배열 방법 중 가장 선호되는 방식인 Chevyshev방식은, 배열형태에 따라 broadside와 end-fire의 장점을 조합한 여러 가지 형태의 빔패턴을 합성해낼 수 있습니다. 또한 안테나 배열법을 수동적, 혹은 능동적으로 가변하여 빔의 방향마저 조절할 수 있는, beam control이 가능해집니다.
이것을 일렬이 아닌 2차원적인 행렬(matrix) 형태로 늘어놓으면 더욱 정교하게 입체적인 빔콘트롤을 할 수도 있으며, 그러한 phased array를 이용한 대표적 시스템 중 하나가 패트리어트 미사일 시스템입니다. phased array를 이용하여 특정 공간을 안테나로 고속 입체 scan하여 미사일의 위치, 속도를 계산하여 날아오는 스커드미사일의 궤적을 추적하고 요격하게 되어 있습니다. 다만 패트리어트 시스템은 기술적 난이도로 인해 실제로는 거의 효용이 없었다고 하며, 단지 전쟁무기와 그 예산을 정당화하려는 미국측에 의해 성공적이라고 조작되었다고 합니다. 실제 개발자나 관여한 사람들은 스커드 미사일을 한 개도 격추시키지 못했다고 하지요.
어쨌거나 이러한 배열 안테나 형식으로 만들면 방향,크기 등을 사용자 임의로 결정할 수 있기 때문에, 군사용은 물론 이동체 위성신호 수신기, 기지국 안테나(특히 smart antenna)용 등 여러 용도로 많이 애용되고 있습니다. 안테나 배열방법과 수식에 대해선 각종 안테나 책에 자~알 나와있습니다.

  Polarization (편파)
안테나를 이용하여 송수신할 때 또 하나 기억해야 할 것이 바로 이 편파(polarization)입니다. polarization이란, 전자기파의 진행방향에 대한 E field의 극성 방향을 의미합니다. 안테나마다 고유의 편파형태를 갖고 있으며, 송수신 안테나끼리 서로 편파방향을 맞추는 문제는 중요한 문제이죠. 편파에는 크게 직선편파(Linear polarization)와 원형편파(Circular polarization)의 두가지가 있습니다. 아래에는 그중 직선편파의 두가지 형태를 나타낸 그림입니다.
서로 편파방향이 틀어지면 송수신 성능이 떨어지게 됩니다. 최악으로 서로 완전히 직교하는 편파를 가지게 되면 신호교류가 안됩니다. vector입장에서 봤을 때, 두 에너지가 서로 수직이면 에너지 교류가 불가능하게 되지요.
원형편파의 경우도 회전방향이 왼쪽 이냐 오른쪽이냐에 따라 직선편파처럼 두가지의 형태가 존재하며, 마찬가지로 송수신 안테나간에 편파방향이 서로 아다리가 맞아야 원활한 통신이 가능합니다.
이러한 원형편파는 특히 patch antenna를 이용하여 쉽고 다양하게 구현할 수 있는데, 아래에 원형편파를 생성하는 대표적인 patch antenna 의 형상들의 예를 들어보았습니다.
대부분의 안테나는 안테나 극성방향에 따른 직교편파 특성을 가지지만, 의도적으로 원형편파를 만들면 아래와 같이 여러 가지 장점이 존재하기 때문에 여러 분야에서 응용되고 있습니다.
 - 타이밍 조절로 한주파수에서 두 개 이상의 채널을 송수신할 수 있다.
 - 장애물 잡음에 강해서 건물투과성이 높고 다중반사간섭에 강하다.
 - 편파손실이 적다.

  EIRP & ERP (유효복사전력)
실무적인 관점에서, 안테나와 관련된 주요 factor중에 ERP(Effective Radiated Power) 또는 EIRP (Effective Isotropically Radiated Power)라는 개념이 나오게 됩니다. 이것은 무선기기의 유효출력의 개념으로써, 안테나 이득의 효과를 함께 고려한 유효 송신출력을 나타내는 수치입니다.
EIRP = Pt * Ga  
(Pt : 송신기 출력, Ga : 안테나 이득)
즉, 송신기의 출력이 30dBm이고 안테나 이득이 8dB라면 EIRP는 30 + 8 = 38 dBm 이됩니다.
실제로 안테나의 빔패턴은 목적지를 향해 최대의 이득을 가지는 형태를 가질 것이고, 그에 따라 목적지에서는 다른 지역보다는 더 큰 전력의 신호를 수신할 수 있게됩니다. 송신기의 출력은 단순히 사방으로 균일하게 나간다는 가정일 뿐 특정 방향의 개념이 들어있지 않지만, 실제로 송신기는 특정 방향으로 빔이 쏠리는 안테나 이득을 갖고 있지요. 그래서 EIRP처럼 송신기의 유효출력이라는 실질적인 개념의 규격이 존재하는 것입니다.
EIRP가 isotropic 패턴에 대비한 안테나의 이득 자체만을 첨가한 개념이라면,  ERP는 그에 dipole 안테나의 이득을 곱한 유효출력 개념입니다. 이것은 시스템 버짓을 계산하기 위해 송-수신측의 이득을 함께 고려하기 위한 것으로써, Dipole 안테나의 이득은 2.15dB이기 때문에, ERP와 EIRP는 아래와 같이 간단한 수식관계를 가집니다.
ERP = EIRP - 2.15 dB

  안테나의 종류
안테나의 종류는 셀 수도 없을만큼 많지만, 일반적으로 사용되는 고주파 안테나 종류에 대해 간략하게 정리해보도록 하지요.
 
● Dipole Antenna
  안테나의 기본중의 기본인 다이폴 안테나입니다. 두 개의 서로 극이 다른 도선을 구부려서 전체 길이를 λ/2 이되게 만들어서, omni-directional 한 빔패턴을 형성합니다.
  모든 안테나의 기본이 되는 안테나로서, 단일한 다이폴 안테나보다는 여러 가지 배열안테나 형태로 구성되어 기지국 안테나 등으로 많이 사용됩니다. 이러한 다이폴 안테나들을 잘 조합하여 만든 배열안테나가 바로 야기-우다 안테나로서, 과거 TV수신용 안테나로 유명했던 안테나입니다.
 
 
● Monopole Antenna
  다이폴과 비스꾸리한데, 한쪽 도체 대신 Ground로 대치된 형태입니다. Ground로 대치된 부위에서는 image effect로 인해 마치 다이폴과 같은 효과가 일어나는 것입니다. 고로 안테나의 길이도 λ/2 이 아니라 λ/4 만 있으면 됩니다.
  지면에 높은 탑형태로 되어 있는 안테나들은, 지면을 Ground로 이용할 수 있기 때문에 이와같은 λ/4 monopole 형태로 만들어집니다. 그 외에도 단말기같은 경우 단말기의 Ground를 이용하여 monopole 형태로 만듦으로써, 안테나의 길이를 줄일 수도 있습니다. 다이폴만큼이나 많이 사용되는 안테나입니다.
 
 
● Patch Antenna
  RF에서 가장 흥미를 끄는 안테나입니다. Microstrip 기판위에 네모 혹은 원형 형태로 금속패턴을 만든후, 여러 가지 형태로 급전을 하여 만들 수 있어서 Microstrip antenna라고도 불리웁니다.
  소형,경량의 특성 및 여러 가지 패턴조합과 손쉬운 배열을 통해 다양한 특성을 이끌어 낼 수 있지만, 구조상 높은 전력신호를 다루지는 못합니다. RF전반에 걸쳐 다양하게 응용이 가능하며, 아직까지도 무궁무진한 아이디어가 존재하는 안테나이기 때문에 많은 연구가 진행되고 있습니다.
  참고 > http://www.rfdh.com/design/patch.htm
 
 
● Horn Antenna
  도파관(waveguide)형태의 안테나로서, 도파관 마지막부분이 사각형 또는 원형의 깔 때기처럼 벌어진 형상을 하고 있습니다. 대표적인 개구면(aperture) 안테나의 하나로서, 안테나가 열린면의 크기가 파장에 비례하게 됩니다. 그래서 낮은 주파수에서는 크기가 너무 커서 사용이 어렵고 무게도 무거워지기 때문에 통상 GHz 단위 이상에서 주로 사용합니다.
  특성이 균일하고 이득이 높아서 빔패턴 측정의 표준안테나 (Standard Antenna)로 사용되는 경우가 많으며, 비교적 큰 전력의 신호까지 다룰 수 있기 때문에  대전력용으로 애용됩니다.
 
 
● Parabolic Antenna
  이득이 매우 높은 형태의 안테나로써, 빔패턴이 가장 샤프해서 위성통신용으로 애용됩니다. parabolic 면에 수직으로 입사된 전자파는 반사되어 쌍곡선의 초점 부위에 모아지고, 그러한 초점위치에 위치한  LNB (Low Noise Block) 로 그 신호들을 저잡음증폭시키는 구조입니다.
  위성용 안테나로서 일반인에게도 접시 안테나로 친숙한데, TV에서처럼 후라이팬으로 만들거나 하는 것은 불가능합니다.(^^;) 초점에 전자파들이 정확하게 모이도록 쌍곡선 면을 가공하는 것도 쉬운 기술이 아니라서리..
 
 
● Helical Antenna
  모양에서 왠지 느낌이 오듯이.. 죽 펴야 할 선을 꼬아서 소형화시킨 형태의 안테나입니다. 같은주파수에서 다이폴이나 모노폴등에 비해 훨씬 작은 크기로 만들 수 있다는 것이 장점이며, 꼬는 간격과 방법 등에 따라 빔패턴의 방향도 축방향 또는 정상방향(다이폴과 같은)으로 만들 수 있습니다.
  만드는 방법에 따라 다양한 특성을 나타낼 수 있기 때문에, 휴대단말기, 라디오, 위성용 등 RF전반에 걸쳐 광범위하게 응용되고 있습니다.
 
 
● Slot Antenna
  도파관의 옆면에 여러 가지 형태의 구멍(slot)을 뚫어서 만드는 안테나로서, 큰 전력을 다룰 수 있어서 선박용/군사용으로 많이 사용됩니다. Slot의 크기나 갯수, 모양, 거리 등 다양한 변수를 조절하여 배열안테나처럼 여러 가지 특성을 만들어 낼 수 있습니다.
 
더 자잘한 안테나의 종류에 관심많으신 분들은 이곳을 참고해보시면 재미있을 것입니다. 안테나 랜드

  안테나는 오묘해...
안테나가 RF의 상징이듯이, 안테나 자체는 정말로 흥미로운 테마입니다. 지면(또는 모니터화면)의 한계상 이 글에서는 안테나에 대해 가장 기본적으로 이해하고 있어야 할 사항들에 대해서만 정리하였습니다. 특히 의도적으로 수식의 표현은 극히 자제하였는데, 수식부분은 각종 안테나 책에 잘 나와 있습니다. 안테나는 워낙 고전적인 분야라 어지중간한 최신자료를 찾기보다는, 고전의 명저를 보는게 훨씬 직접적으로 도움되는 경우가 많습니다.
안테나에 대해선 좋은 책들이 많은데, 그중 많은 분들이 권장하는 대표적인 안테나 기본도서 번역판 두권을 권해드립니다. 둘다 유~명한 책이며, 무엇보다 한글이니 이보다 더 좋을수가!
▶ 안테나 이론-해석과 설계 (Antenna Theory- Analysis and Design)
    Constantine A. Balanis / 이문수 외 / 미래컴 / 2001
▶ 안테나 이론과 설계 (Antenna Theory and Design)
    Stutzman&Thiele/윤영중 외 5인 / 교보문고

  << Back
 Copyright by RF designhouse. All rights reserved.