2013년 1월 21일 월요일

32비트 코드를 64비트로 변환(Code Conversion from 32-bit to 64-bit)

윈도우7이 인기를 끌면서 64비트 프로그래밍(64-bit programming)은 거스를 수 없는 대세가 되었다. 아래 정보를 확인해 이전에 짜둔 Visual Studio의 32비트 코드를 64비트로 바꾸어 보자.

[64비트용 솔루션 플랫폼(solution platform) 생성]
1. “구성 관리자 -> 활성 솔루션 플랫폼 -> 새로 만들기”에서 ‘x64’를 추가함

2. “활성 솔루션 구성”에 “Debug x64”, “Release x64”를 추가하고 플랫폼을 모두 ‘x64’로 바꿈: "활성 솔루션 플랫폼"을 'x64'로 바꾸면 모든 솔루션이 x64로 바꾸므로 플랫폼 항목만을 바꾸자.

현재 컴파일러가 64비트 모드에서 동작 중인지 확인하려면 '_WIN64' 정의 여부를 확인하면 된다. 이걸로 확인이 안된다면 "구성 속성 -> C/C++ -> 전처리기 -> 전처리기 정의"에 'WIN64'를 추가하면 해결된다. 한가지 조심할 것은 '_WIN32'이다. 이 정의는 32비트와 64비트 모두에서 사용되기 때문에 '_WIN32'를 이용해 32비트 유무를 판별해서는 안된다. 반드시 '_WIN64'를 써야 한다.

[데이터 변환]
  • int -> INT64, __int64, long long
  • long -> LONG64, __int64, long long
  • unsigned int -> UINT64, usigned __int64, unsigned long long
  • unsigned long -> ULONG64, usigned __int64, unsigned long long
  • INT_PTR, UINT_PTR, LONG_PTR, ULONG_PTR처럼 ..._PTR로 끝나는 변수는 컴파일러가 32비트 모드인지 64비트 모드인지에 따라 선언되는 변수 종류가 자동으로 달라짐
  • int 상수 1 -> 1i64
  • long 상수 1L -> 1LL
  • unsigned int 상수 1 -> 1ui64
  • unsigned long 상수 1UL -> 1ULL 
double에 대해서는 변경할 것이 없다. long double이든지 double이든지 컴파일러는 동일한 코드를 만든다.

[참고문헌]

2013년 1월 1일 화요일

NEC-2의 문법(Grammar of NEC-2)

[경고] 아래 글을 읽지 않고 "NEC-2의 문법"을 보면 바보로 느껴질 수 있습니다.
1. 계산용 전자파 코드: NEC


NEC-2(Numerical Electromagnetic Code)는 포트란(Fortran: IBM 수학 공식 번역 체계, The IBM Mathematical Formula Translating System) 언어를 기반으로 만들었기 때문에, 문법 구조도 포트란과 매우 유사하다. 요즘은 포트란 사용자가 거의 없어서 포트란은 프로그래밍계의 라틴어에 해당한다. 하지만 우리 선배들이 이루어 놓은 방대한 포트란 코드로 인해, 수치 해석을 할 때는 어쩔 수 없이 포트란을 사용해야 하는 경우가 있다. NEC-2를 사용할 때 주의 사항은 아래와 같다.
  • 길이 단위는 단위 표준인 미터(meter)이다.
  • 주파수 단위는 Hz가 아닌 MHz이다. 
NEC-2의 예제는 [표 1]에 제시한다.

[표 1] NEC-2용 다이폴 안테나 예제
Example1.nec
CM Example 1 : Dipole in free space   ' Comment cards
CM See GetStarted.txt
CE    ' End of comment
'
GW 1 9 0 -.2418 0 0 .2418 0 .0001   ' Wire 1, 9 segments, halve wavelength long.
GE 0   ' End of geometry
'
EX 0 1 5 0 1 0   ' Voltage source (1+j0) at wire 1 segment 5.
'
FR 0 1 0 0 300 0   ' Set design frequency (300 Mc).
'
EN   ' End of NEC input


   1. 주석 처리(CM: CoMment)   

주석은 반드시 CM으로 시작해야 한다. 주석을 끝내려면 CE(Comment End)를 넣는다. 예를 들어 위에 있는 Example1.nec을 보자. 위 코드에 보이는 ' 표시는 그 다음 부분부터 무시하라는 뜻이다.


   2. 변수 정의(SY: SYmbol)   

변수 정의는 SY로 시작해야 한다. 문법은 아래와 같다.

[문법]
SY a = 1   ' a에 1을 대입
______________________________


   3. 금속 구조 입력(geometry)   

NEC-2는 아래처럼 여러 가지 구조를 입력할 수 있다. 구조 입력이 끝나면 GE(Geometry End)를 넣는다.

3.1. 선 구조 입력(GW: Geometry of Wire)

NEC-2에 금속 선을 넣는 명령은 GW이다.

[문법]
GW nTag nSegment x1 y1 z1 x2 y2 z2 rad   ' nTag번 금속 선에 nSegment개의 분할(segment) 생성, 금속 선은 좌표값 (x1, y1, z1)과 (x2, y2, z2)에 위치, 금속 선의 반지름은 rad
______________________________

금속 선 좌표값과 반지름의 단위는 모두 미터이다. 위에 있는 금속 선 번호(nTag)는 선 특성을 변경할 때 사용되므로 모든 선이 다른 번호를 가져야 한다.

3.2. 접지면(ground) 선택

접지면은 GE 다음에 오는 숫자를 이용해 다음처럼 정한다.
  • GE 0   ' 구조물이 자유공간에 있음
  • GE 1   ' 구조물이 접지면 위에 있음, 자세한 사항은 GN(GrouNd) 명령어로 정해야 함
  • GE -1   ' 구조물이 접지면 위에 있음, 자세한 사항은 GN(GrouNd) 명령어로 정해야 함
GE 1과 GE -1은 접지면이 있음은 동일하지만 금속 구조물이 접지면과 닿은 경우의 처리가 다르다. GE 1은 구조물이 접지면과 닿으면 구조물의 전류 분포를 바꾸어 구조물과 접지면이 붙게 한다. GE -1은 접지면과 닿은 부분의 구조물 전류 분포를 0으로 만들어 구조물과 접지면 연결을 사실상 끊는다.


   4. 원천 입력(EX: EXcitation)   

구조물 입력후에는 원천(source or excitation)을 넣어야 한다.

4.1. 전압원(voltage source)

[문법]
EX 0 nTag nSegment 0 real imag   ' 전압원을 nTag 번호를 가진 선 구조의 nSegment에 입력, 전압원의 복소수 입력값은 (real, imag)임
______________________________


   5. 주파수 입력(FR: FRequency)   

계산을 위한 다양한 주파수 입력은 아래처럼 한다. 주파수 단위는 MHz이다.

5.1. 단일 주파수(single frequency)

[문법]
FR 0 1 0 0 freq 0 ' 주파수 freq MHz로 계산
______________________________


   6. 끝내기(EN: ENd)   

NEC-2 입력을 끝내려면 EN을 넣는다.


[참고문헌]
[6] P. Knott, Wire Antenna Modelling with NEC-2, 2009.

2012년 11월 5일 월요일

종이와 잉크젯으로 만드는 안테나(Antenna Made of Paper and Inkjet)

[경고] 아래 글을 읽지 않고 "종이와 잉크젯으로 만드는 안테나"를 보면 바보로 느껴질 수 있습니다.
1. 가장 쉬운 안테나 이론


안테나(antenna)를 제작할 때 가장 비싼 부분은 안테나용 기판(substrate)과 식각(etching) 비용이다. 이 비용을 획기적으로 줄여서 안테나를 값싸게, 가볍게, 휘어지게, 환경친화적으로 만드는 기술이 종이와 잉크젯으로 만드는 안테나 기술[1], [3]이다. 식각 공정을 이용하지 않기 때문에 환경을 오염시키는 부산물이 나오지 않고 안테나 제작도 빠르게 할 수 있다.

[그림 1] 잉크젯 프린터를 이용해 잉크를 뿌린 모습(출처: [1])

[그림 1]은 일반적인 잉크젯 프린터(inkjet printer)를 이용해 출력한 경우 잉크 방울의 특성을 보여준다. 잉크젯 프린터를 조정해서 선을 그릴 수도 있고 점을 찍을 수도 있다. 잉크가 전도성을 가지도록 하기 위해 은 나노 입자(silver nanoparticle)가 포함된 잉크를 사용했다. 은 나노 입자가 잉크에 잘 흩어지도록 입자 표면에 얇은 중합체(polymer)를 입혔다. 은 나노 입자는 [2]에서 구입할 수 있다.

[그림 2] 종이 기판 위에 잉크젯으로 형성한 비발디 안테나(출처: [1])

참고문헌 [1]에서는 사진 전용 인화지(photo paper)를 기판으로 사용해 비발디 안테나(Vivaldi antenna)를 만들었다. 인화지는 손실(loss)이 좀 크지만 12.5 GHz까지 사용할 수 있다. 주파수 6.5 GHz를 기준으로 인화지의 유전 상수(dielectric constant)는 3, 손실 탄젠트(loss tangent)는 0.06 정도 된다. 이 인화지에 은 나노 입자가 든 잉크를 잉크젯 프린터로 뿌려 비발디 안테나 패턴을 만들었다. 하지만 은 나노 입자 표면에 입혀진 중합체로 인해 전도성을 띠지 않기 때문에, 열이나 레이저로 중합체를 녹여 전도성이 커지도록 한다.

[참고문헌]
[1] B. S. Cook and A. Shamim, "Inkjet printing of novel wideband and high gain antennas on low-cost paper substrate," IEEE Trans. Antennas Propag., vol. 60, no. 9, pp. 4148–4156, Sept. 2012.
[2] 한국 머크(Merck), "Sigma-Aldrich Solutions." (방문일 2012-11-05)
[3] J. Lundquist, L. Linkous, M. E. Piper, Z. Sickey, K. Zimmet, I. Mendoza, S. Suresh, and E. Topsakal, "Textile-based inkjet-printed RFIDs: exploring wearable antennas in the real world," IEEE Antennas Propag. Mag., vol. 66, no. 1, pp. 50–62, Feb. 2024.
[4] H. Chang, F.-P. Lai, and Y.-S. Chen, "Design and fabrication of optically transparent transmitarrays using inkjet-printing technology," Int. J. Microw. Wirel. Technol., 2024.