2016년 12월 3일 토요일

시리얼통신을 이용한 측정장비의 제어


올해도 이제 한달 남았다... 또 한살을 먹는 건가? 늙는 것이 두렵다~~ㅠ,,ㅠ

호기심과 신비함에서 시작한 matlab 공부가 이것에만 그치지 않고,

점점 하고 싶어하는 영역으로 즉 실용적인것에 가까워져 가는것 같아 기분이 좋다.

그러나 하면 할수록 디지털 기술은 참 공부할게 많은것 같다.

수학적 재능이 많다면 이렇게 힘들지 않을 텐데,,,ㅎ



먼저 아두이노 시리얼통신과 TCP/IP 소켓통신을 먼저 맛보자!



// 아두이노에서 1초마다 1~64 랜덤숫자 120개 문자열 전송

// Arduino

long randNumber;     // 32 bits (4 bytes), from -2,147,483,648 to 2,147,483,647.

void setup(){

  Serial.begin(9600);     // Serial.begin(1200);  과 비교해 볼 것

  // if analog input pin 0 is unconnected, random analog

  // noise will cause the call to randomSeed() to generate

  // different seed numbers each time the sketch runs.

  // randomSeed() will then shuffle the random function.

  randomSeed(analogRead(0));

}

void loop() {

     for(int i = 1; i < 120; i++){

     randNumber = random(0, 64);

     Serial.print(randNumber);

     Serial.write(','); 

      }

     Serial.println(randNumber);  // = Serial.print('\n');

     delay(1000);

}



% 매트랩으로 문자수신 후 Parsing, Plot update~!!

% Matlab %

a=serial('COM3','BaudRate',9600);   % a=serial('COM3','BaudRate',1200); 과 비교해 볼 것

fopen(a);

for i=1:10

tic

s=fscanf(a,'%s');

toc

s=strrep(s, ',', ' ');

ss=sscanf(s, '%d');

stairs(ss)

axis([1 120 0 64]);

drawnow

end

fclose(a)
 

1200 bps(bit per sec) 통신 약 340 byte 전송시, delay 1초 포함 경과시간 3.27초
9600 bps(bit per sec) 통신 약 340 byte 전송시, delay 1초 포함 경과시간 1.25초

실험결과를 분석해 보면,
1. 아두이노는 시리얼통신 시 문자마다 1byte(8bit)씩 전송한다.
2. matlab이 버퍼에서 입출력 및 파싱하는 데 0.1초가 소비된다.
3. 1200 bps(1.1+340/150), 9600 bps(1.1+340/1200) 얼추 경과시간과 맞다.



% (동일 네트워크 안에서 Matlab 소프트웨어 간) TCP/IP 소켓통신


%<PC-1, Server>

t = tcpip('0.0.0.0', 30000, 'NetworkRole', 'server', 'InputBufferSize',1024); 
% 0.0.0.0 -> 최초 연결한 ip만

fopen(t);



%<PC-2, Client>

t = tcpip('localhost', 30000, 'NetworkRole', 'client'); %localhost -> 서버 ip주소

fopen(t)

for i=1:100

data = randi(2,1,16)-1;

fwrite(t, data)

pause(1)

end

fprintf(t, '%s\n','hello world')



%<PC-1, Server>

data = fread(t, t.BytesAvailable)

data=fscanf(t);

plot(data);

fclose(t)

delete(t)

clear t
 


실험결과를 분석해 보면, client 의 전송데이터 중 서버에서 읽지 않은 데이터가
 버퍼에 저장되다가 fread 순간 한번에 읽혀진다. 시간조절을 하여 실시간 plot도 가능할 것이다. 다음과제로 파일전송수신을 해봐야겠다.


다음은 Kesight 의 스펙트럼분석기 N9344C 와 시리얼통신으로 제어하는 예를

시현해 보겠다.

<Writing and Reading Data>

VISA란 PC와 측정기 사이에 통신을 하기위한 입출력 API 이다.

자세한 내용은 다음 참조해 주길 부탁한다.

 https://en.wikipedia.org/wiki/Virtual_Instrument_Software_Architecture



% Matlab PC와 Kesight N9344C 간 USB mini 5pin Serial 통신

obj1 = visa('AGILENT', 'USB0::2391::65519::CN0604A475::0::INSTR');

set(obj1,'InputBufferSize',8192)

fopen(obj1);

fprintf(obj1, '*IDN?'); data = fscanf(obj1)

ss=plot(zeros(461,1));

axis([1 461 -100 -30]);  grid on;

%------------------------------------------------------------

for i=1:100

fprintf(obj1, 'TRACe:DATA? TRACe1'); data = fscanf(obj1);

s=strrep(data, ',', ' ');

s=sscanf(s, '%f');

set(ss, 'YData',s)

drawnow

end
 

둘 다 동일하게 실시간 plot은 가능하나 더 rate를 더 높일 순 없는 것같다.

내생각에는 UDP 연결이 필요할 것 같다.


% Matlab PC와 Kesight N9344C 간 TCP/IP 통신


% 100MHz ~ 200MHz , RBW 1K -> sweep time 1 second

obj1 = visa('AGILENT', 'TCPIP0::192.168.35.60::inst0::INSTR');

set(obj1,'InputBufferSize',8192)

fopen(obj1);

fprintf(obj1, '*IDN?'); data = fscanf(obj1)

ss=plot(zeros(461,1));  

axis([1 461 -100 -30]);

grid on;

tic

for i=1:100

fprintf(obj1, 'TRACe:DATA? TRACe1'); data = fscanf(obj1);

s=strrep(data, ',', ' ');

s=sscanf(s, '%f');

s(1:10)'

set(ss, 'YData',s)

drawnow

end

toc
 


 
 
실제로 캡쳐화면은,,,

주파수(100 ~ 200MHz) 의 전력(-30 ~ -100dBm) 레벨을 변화를 실시간 update!!

fprintf & fscanf -> 약 0.1 second , buffer의 같은 값을 읽어들임(8번씩), 총 경과시간 13s


2016년 3월 26일 토요일

Matlab의 GUI를 이용한 간단한 게임 제작(테트리스, 사다리, 벽돌깨기)

Matlab의 GUI를 이용해 간단한 게임 제작을 몇가지 해 보았다.

시간과 노력이 꽤 많이 걸렸다. 주말에 집에서 계속 코딩짜고 그랬더니 폐인이 된것 같다.

눈도 피곤하고 초점도 않맞고,,, 얼른 끝내고 바람이나 쐬야겠다.^^;


그렇지만,,, 역시 프로그래밍은 허접하더라도 창작을 해보는 것이 최선이다.

허접하더라도 완성된 것을 보니 뿌듯하다.ㅎㅎㅎ


나 또한 GUI를 배우는 입장으로 어설픈 코드를 공개하기가 꺼려지지만,

이런 코드라도 찾기가 쉽지 않은게 사실이라 필요한 사람에 유용하게 쓰이길 바라며,

피드백도 환영합니다!!!^^;


1. 테트리스(tetris)

제일 시간이 많이 걸렸지만, 제일 만족스러운 작품이다.

특징이라면 정말 짧은 200줄 정도의 코딩으로 이런게 만들어 질 수 있다는게 신기할 따름이다.

스피드 조절, 바로내림, 멋진 디자인은 부족하지만, 기본적인 기능은 구현되어 있다.

http://kr.mathworks.com/matlabcentral/fileexchange/56183-simple-tetris



2. 사다리(ladder)

회사나 등등에서 사다리타기로 뽑기를 할때 유용할 것으로 보인다.

역시 디테일은 부족하지만, 독자들이 피드백으로 업그레이드 해주길 바란다.




3. 벽돌깨기(breakout)

기본적인 기능을 구현한 게임이다.

이 소스를 바탕으로 독자들이 응용하면 쉽게 더 복잡한 프로그래밍도 가능하리라 본다.




----------------------------------------------------------------------------------------------
블로그를 이전하여,,, 소스코드는 


에서 다운로드할 수 있습니다!

2016년 1월 15일 금요일

파동방정식과 그 해(풀이)

수학도 언어라고 생각한다. 수학을 통해 자연현상에 대한 통찰을 아름답게 표현하고, 정확하게 전달할 수 있기 때문이다. 이 언어는 인류의 유산으로 계속해서 누적되고, 세련되게 진화할 것이다. 나는 이 언어를 이해하는 과정이 너무 길고 힘겹다. 이 언어를 능수능란하게 다루는 솜씨 좋은 대가들이 엄청 질투나고 부럽다!ㅎㅎ
한편 아름답게 표현한다는 것에서는 예술과 일맥상통하는 부분이 있는 것 같다. 어떤 때는 놀랍고 경이롭기까지 하니까.

어쨌든 잡설이 길었으나,,, 이번 블로그의 주제는 파동방정식이다.
줄의 진동을 통해 물리적 현상을 파동방정식으로 표현해보고, 그 해를 찾아 특징을 살펴보는 과정은 전자기학에 필수적이고, 더 나아가 통신공학 응용에도 많은 도움이 될 것이다. 설사 그렇지 않더라도 파동방정식의 표현은 참 멋지고, 파동은 일상이다.

먼저,,, 파동방정식의 증명이 필요한데, 이미 깔끔하게 블로그하신 분들이 많다. 그래서 나는 그냥 인용을 하기로 한다.

http://joonyoungsun.tistory.com/261

증명을 조금 더 정리하면,,,



초기속도 g(x)=0 이면, u(x, t)=ΣBn cos(cnπt/L) sin(nπx/L)

→  u(x, t)=1/2 ΣBn sin(nπ/L(x-ct)+1/2 ΣBn sin(nπ/L(x+ct)

→  u(x, t)=1/2[f*(x-ct)+f*(x+ct)]  

여기서 f* 는 2L주기를 가진 f의 기수주기확장(Odd periodic extension) 이다.
 ∵ u(x,t)는 연속함수이고, wave equation , boundary condition(u(0,t)=0 , u(L,t)=0 for all t) , inital condition(u(x,0)=f(x) , du/dt=g(x)) 만족한다.

 


그럼,,, 이제 이렇게 구한 파동방정식과 그 해를 실제적인 예로 시뮬레이션해보자!

<문제> 초기 휨이 삼각함수인 현의 진동

 
 

초기 휨이 삼각함수인 현의 진동 의 해를 실제로 시뮬레이션해보면,
증명으로 유도한대로 파동은 양방향으로 진행하는 함수의 기수주기확장의 합과 동일하다는 것을 알 수 있다.


L=2; T=10; N=10; k=1; c=1;
x=0:.1:L;
ux0=zeros(N,length(x)); uxt=zeros(N,length(x));
h=plot(x, sum(uxt));

for t=0:.1:T;
for n=1:N;
bn(n)=8*k/n^2/pi^2*sin(n*pi/2);
ux0(n,:)=bn(n)*sin(n*pi/L*x);
uxt(n,:)=cos(n*pi*c/L*t)*ux0(n,:);
end
% uxt=(8/pi^2)*[1/1^2*cos(pi/2*t)*sin(pi/2*x)-1/3^2*cos(3*pi/2*t)*sin(3*pi/2*x)...];
set(h, 'xdata', x, 'ydata', sum(uxt))
drawnow
axis([0 2 -1 1]);
pause(.1)
end

 

2014년 12월 28일 일요일

매트랩을 이용한 파일명 일괄 변경


이번에는 개인적인 필요에 의해서 매트랩을 활용해 만들어봤다.

문제는,,,

D:\2014\ 폴더안에 약 400개의 mp3 파일명 '001. XXX.mp3' 을

'XXX.mp3' 으로 파일명을 일괄 변경하는 것이다.



 
cd d:\2014
fn=ls('*.mp3');
n=length(fn);


for i=1:n
index=strfind(fn(i,:),' ');
nfn(i,:)=fn(i,index(1)+1:end);
movefile(fn(i,:), nfn(i,:))
end

 
 

이제,,, 엄청 빨라졌다. 거의 바로된다^^;



다음 문제는,,,

C:\Down 폴더안에 약 400개의 그림파일의 파일명 'imageXXX.jpg' 을

만든 날짜 즉 '2012-09-06 HHMMSS.mp3' 으로 파일명을 일괄 변경하는 것이다.


 
cd c:\Down
d=dir('*.jpg');
n=length(d);

for i=1:n
t = datetime(num2str(d(i).date),'InputFormat','dd-MM-yyyy HH:mm:ss')
movefile(d(i).name, strrep([char(t) '.jpg'], ':',''))

% movefile(d(i).name, strrep([num2str(d(i).date) '.jpg'], ':',''))

end

 


아주 편하게 노가다 안해도 된다.^^;

2014년 11월 29일 토요일

매트랩으로 배우는 행렬

매트랩을 이용하여 행렬을 나름대로 정리해보려고 한다!


1. 행렬식

임의의 행렬 A에 대해 A의 행렬식(determinant)이라 불리는 수가 대응된다.


 
A=[1 2 -3; -4 0 3; 5 -2 4];

U=det(A)


결과) U=44
 


이 행렬식은 나중에 다룰 역행렬을 구할때, 연립방정식의 해를 구할 때 중요하게 사용된다.

어떤 행렬 A의 행렬식 값 det(A) = 0 이면 행렬 A는 역행렬을 갖지 않고 det(A)≠0이면 A의 역행렬이 존재한다. 즉, 행렬식(determinant)은 어떤 행렬의 역행렬 존재여부에 대한 판별값 역할을 한다.

도형 P가 선형변환 A에 의해 P'으로 변환되었을 경우, det(A)는 선형변환의 스케일(scale) 성분을 나타내는 값이다. 또한 determinant의 부호가 det(A)>0이면 도형의 방향(orientation)이 보존되고 det(A)<0이면 도형의 방향이 보존되지 않는 기하학적인 의미가 있다.



2. 역행렬



syms a b c d;

A=sym([a b; c d]);

inv(A)

결과) inv(A)=               [ d, -b]
                      1/(ad - bc)[ -c, a]
 
pretty(inv(A)*A)

pretty(A*inv(A))
결과) [1 0]
          [0 1]

 


행렬 A의 원소들에 대한 여인수들로 구성된 행렬의 전치행렬을 수반행렬(adjoint)이라 하고,

A의 역행렬을 구하는 공식은 다음과 같다.

inv(A) = 1/det(A)*adj(A)





3. 고유값(eigenvalue)과 고유벡터(eigenvector)

고유값은 특성값(characteristic value)라고도 한다.

고유값, 고유벡터는 기하학적으로 AV=λV 이므로 벡터 AV 와 벡터 V=[v1; v2]의 방향이 같다.

다만 벡터의 크기는 고유값 λ에 의해 좌우된다.

다음은 고유값 응용의 예(질량-스프링 시스템)이다.


이것이 질량-스프링 시스템의 진동하는 애니메이션이다.




% 질량-스프링 시스템
p1=[-3 1 2 2];
p2=[1 1 2 2];
p3=[-3 -3 2 2];
p4=[1 -3 2 2];


r1=rectangle('Position',p1,'facecolor','r');
r2=rectangle('Position',p2,'facecolor','g');
r3=rectangle('Position',p3,'facecolor','r');
r4=rectangle('Position',p4,'facecolor','g');

l1=line([-5 p1(1)],[2 2]);
l2=line([p1(1)+2 p2(1)],[2 2]);
l3=line([-5 p3(1)],[-2 -2]);
l4=line([p3(1)+2 p4(1)],[-2 -2]);


axis([-5 5 -5 5]);
txt=text(-1, 4, ['시간 :  초'],'EraseMode','normal');
nFrames = 0;

for t=0:.1:10
nFrames = nFrames +1;
up1=p1+[0.8507*cos(1.6180*t) 0 0 0];
set(r1,'Position',up1);
set(l1,'XData',[-5 up1(1)]);

up2=p2+[0.5257*cos(1.6180*t) 0 0 0];
set(r2,'Position',up2);
set(l2,'XData',[up1(1)+2 up2(1)]);

up3=p3+[0.5257*cos(0.6180*t) 0 0 0];
set(r3,'Position',up3);
set(l3,'XData',[-5 up3(1)]);

up4=p4+[0.8507*cos(0.6180*t) 0 0 0];
set(r4,'Position',up4);
set(l4,'XData',[up3(1)+2 up4(1)]);

pause(.01)
set(txt,'Position',[-1 4],'String',['시간 : ', num2str(t), ' 초']) % (x,y) 위치에 문자열 갱신
drawnow
mov(nFrames) = getframe(gcf);
end
movie2avi(mov,'eigen','compression','None');
 



4. 분산(variance), 공분산(covariance), 상관계수(correlation coefficient)





Fs=8000;
n=Fs;
beep
x=wavrecord(Fs,Fs); % 비프음후 1초간 Fs로 샘플녹음
 
beep
y=wavrecord(Fs,Fs); % 비프음후 1초간 Fs로 샘플녹음
plot(1:n,x, 1:n, y)


variance=var(x)                               % 분산

sum((x-mean(x)).^2)/n

sum(x.^2)/n-mean(x)^2


covariance=cov(x,y)                             % 공분산

sum((x-mean(x)).*(y-mean(y)))/n

sum(x.*y)/n-mean(x)*mean(y)


correlation_coefficient=corrcoef(x,y)                    % 상관계수

o=[1/std(x)/std(x) 1/std(x)/std(y); 1/std(y)/std(x) 1/std(y)/std(y)];

cov(x,y).*o
 


평균(m=[3 5])과 공분산(s=[1 1; 1 2])를 따르는 가우시안 분포를 플롯하기

  
N=2^10;

m=repmat([3, 5], N,1);

s=[1 1; 1 4];

x=randn(N,2)*sqrtm(s)+m;    % sqrtm(s)*sqrtm(s)=s

plot(x(:,1),x(:,2),'d');
 

검증)  ss=cov(x)
 


2014년 10월 29일 수요일

매트랩을 활용한 벡터의 내적과 외적

고등학교부터 벡터의 내적과 외적을 배웠었다.
학부때도 마찬가지인데, 기억도 흐릿하고 의미도 의심스럽다.
이번 기회에 다시 한번 공부도 할겸 정리해 보려고 한다.

1. 회전행렬을 이용한 막대 회전



x=[-.1 -.1 .1 .1]';
y=[-1 1 1 -1]';
box=fill(x,y,'r','erasemode','normal');
axis([-2 2 -2 2]);

 

for i=1:32
t=0.25*i/4;
ts=t*pi;
rot=[cos(ts)  -sin(ts); ...
        sin(ts)  cos(ts)];
uc=rot*[x,y]';
ux=uc(1,:)';
uy=uc(2,:)';
set(box,'xdata',ux,'ydata',uy);
% pause(1)
drawnow
end

 

회전행렬을 통해 삼각함수의 덧셈정리가 헷갈리지 않을 수 있다. 반대일 수도 있고,,,


2. 내적의 증명



BH²+AH²=AB²
a²-2ab·cosθ+b²cos²θ+b²sin²θ=c²
a²+b²(cos²θ+sin²θ)-2ab·cosθ=c²
a²+b²-2ab·cosθ=c

A(x₁,y₁,z₁) , B(x₂,y₂,z₂), O(0,0,0) 일때,
AB²=OA²+OB²-2|OA||OB|cosθ 에서
AB²=(x₁-x₂)²+(y₁-y₂)²+(z₁-z₂)²
OA²=x₁²+y₁²+z₁²
OB²=x₂²+y₂²+z₂²
대입하고 정리하면,
a·b=|OA||OB|cosθ=x₁x₂+y₁y₂+z₁z₂

이렇게 구하는 내적의 물리적 의미는
일정한 크기의 힘 F가 지면과 θ각도로 비스듬하게 물체에 작용하여 지면의 방향으로 d 만큼 이동시켰다면, 힘 F가 물체에 한 일은 W=Fcosθ·d 이다.


3. 외적의 증명

외적의 정의는 a×b=(|a||b|sinθ)v
v는 a와 b가 이루는 평면과 직교하는 단위벡터이다.

 
위와 같이 구해지는 외적은 기하학적으로 아래와 같이 의미가 일치한다.


따라서 주어진 벡터 a,b,c를 세변으로 갖는 평행육면체의 부피는 ? c·(a×b)


4. 내적, 외적을 이용하여 3점을 포함한 평면함수 구하기


 
p1=[1 0 0];

p2=[0 1 0];

p3=[0 0 1];

 
v=cross(p1-p3,p2-p3);

s=dot(p1-p3,p2-p3);

 
c=v(1)*p1(1)+v(2)*p1(2)+v(3)*p1(3);  % v(1)*x+v(2)*y+v(3)*z=c

t=c/(v(1)^2+v(2)^2+v(3)^2); t=v*t;

 
[x y]=meshgrid(-1:.1:1,-1:.1:1);

z=(c-v(1)*x-v(2)*y)/v(3);

 
quiver3(0,0,0, v(1),v(2),v(3),'r')

hold on

surf(x,y,z)

px=[0 p1(1) p2(1) p3(1) t(1)];

py=[0 p1(2) p2(2) p3(2) t(2)];

pz=[0 p1(3) p2(3) p3(3) t(3)];

xlabel('x')

ylabel('y')

plot3(px,py,pz,'o')

hold off

 



5. 구좌표계에서 법선과 접선벡터 그리기
 
[x,y,z] = sphere(16);
surf(x, y, z)  % sphere centered at origin
hold on
r=sqrt(x.^2+y.^2+z.^2);
p=sqrt(x.^2+y.^2);
th=atan(y./x);
phi=atan(z./p);
[TH,PHI,R] = cart2sph(x,y,z);
 
quiver3(x,y,z, x, y, z,'r')
quiver3(x,y,z, -y./p,x./p,zeros(size(z)),'g')
quiver3(x,y,z, (x./p).*z, (y./p).*z, -(y./p).*y-(x./p).*x, 'b')
 
hold off
xlabel('x')
ylabel('y')
zlabel('z')
colormap(gray)
 
for x = -10:1:10
    campos([x,2,2])
    drawnow;
    pause(0.2)
end
 
 

6. 발산의 정리

먼저 그린의 정리는 http://hypertimespace.tistory.com/119 를 참고하였다.
모두 엄밀한 증명은 아니고, 간략하고 특수한 경우를 바탕으로 감을 잡기가 목표이다.


이어서 가우스 발산정리는 아래와 같고,,,

 ds : 곡선에 대한 호의 길이 변화량 , dS : 곡면의 변화량, dA : 평면의 변화량



문제T가 x²+y²+z²=4 로 둘러싸인 영역일 때,
벡터장 F=[x,y,z]에 대해 가우스 발산의 정리 성립확인? 32π


7. 벡터의 라플라시안(∇²F)

∇×(∇×F)=∇(∇·F)-∇²F 을 매트랩으로 검증해 보자!



% DcDcF=DDdF-DDF

syms P Q R;

syms dx dy dz;

F=[P Q R];

D=[1/dx 1/dy 1/dz];

DcF=cross(D, F)

DcDcF=cross(D,cross(D, F))

 

DdF=D*F.';

DDdF=[DdF/dx; DdF/dy; DdF/dz;].'

DF=D*[F; F; F]

DDF=D.^2*[F; F; F]

% DcDcF=DDdF-DDF

 

이제 맥스웰의 방정식과 전자기파 파동방정식을 이해하기 위한 기본적인 도구들은

다 준비가 된것 같다.

2014년 10월 4일 토요일

자유공간 전파 손실 모델(Friis)

그동안 너무 넋 놓고 살았다고 할까.
금쪽같은 시간을 무의미하게 그냥 흘려 보낸것 같아 속상하다.
블로그를 나름 알차게 운영하려고 했는데,
다른 블로거 처럼 내용 좋고 글빨 있는 블로그를 다작할 재주가 내게는 확실히 없나 보다.ㅎ
그래서 리프레쉬를 위해 블로그를 옮기거나 폐쇄할까 생각했지만,
블로그 초기 취지를 고려해서 개선하는 쪽으로 생각을 바꿔 먹었다.
또한 몇 안되는 독자를 위해(?)ㅎㅎ
앞으로는 주제도 한정하지도 않을 생각이다.

그럼 이제 마음을 다잡고,
다작은 어렵겠지만, 내 블로그는 쭈욱 계속 될 것임을 밝힌다~!!

오늘의 주제는 자유공간 전파 손실 모델(Friss)이다.
이쩌면 이 주제가 그 기나긴 통신전공 여정의 최종목적지가 아닐까 생각해본다.
가장 직관적이고, 실용적인 표현들이 많이 나온다.
엔지니어뿐아니라 일반인도 안테나의 특성을 파악하고 전달하는데
유용하게 활용할수 있는 식일 것읻다.
그럼,,, 이제 시작~~!!


     -  P  : 송수신 방사 전력
     - G : 송수신 안테나 이득
     -  d  : 송수신 간 거리
     -  Ae : 송수신 안테나 실효개구면적

이 그림이 모든 상황을 다 설명해 준다.
나머지는 문제 중심으로 체감해 보자!

1. 송신전력 100W의 5dBi의 이득을 가진 안테나를 사용하
고 있다. 이 때 10km 거리에서 EIRP와 전력 밀도를 계산하라?

<풀이> 안테나이득 10·log10(x)=5, ∴ x=3.16
EIRP=Pt·Gt =100W×3.16(=log-1(5/10))=316[W]
전력밀도 PD=EIRP/4πr²=316/4π(10·10³)²=251.5[nW/㎡]

2. 만약 5W 송신전력, 400MHz의 송신 주파수,  2[dBi] 이득 안테나로 송신될 때, 안테나로부터 100m의 자유공간 거리에서
수신 전력(dBm)을 구하고 이를 이용하여 (10Km)의 수신전력을 구하라. 또한, 수신 안테나는 2[dBi] 이득을 가졌고 시스템 손실은 없다고 가정한다.

<풀이> Pt=10·log10(5000mW/1mW)= 37[dBm]
안테나이득 10·log10(x)=2, ∴ x=1.58
Pr=5·(1.58)²·(3/4)²/(4π·100)²=4.44·10^-6[W] = 4.44·10^-3[mW] = -23.5[dBm]
10km에서의 수신전력 Pr(100)+20·log10(100/10000)=-23.5[dBm]-40[dB]=-63.5[dBm]

3. 마찬가지로, 만약 5W 송신전력, 400MHz의 송신 주파수,  2[dBi] 이득 안테나로 송신될 때, 안테나로부터 100m의 자유공간 거리에서 전계강도를 구하라!
단 케이블 손실은 없고, 50 Ω 부하에 수신안테나 Gr= 2[dBi] ,  
PD·Ae = Pr = V²/R 이고, E²=377PD 이라 가정한다!

<풀이> AF=E/V  ↔   AF[dB/m]=20·log10(E/V) , AF[dB/m]=E[dBμV/m] - V[dBμV]
AF=E/V=9.73/(λ·sqrt(G))=9.73/(3/4·sqrt(1.58))=10.321 
                                            ↔ AF[dB/m]=20·log10(10.321)=20.274[dB/m]
50 Ω : dBm=dBμV-107 이므로 E[dBμV/m]=83.5[dBμV]+20.274[dB/m]=103.774[dBμV/m]


In electromagnetics, the antenna factor is defined as the ratio of the electric field strength to the voltage V (units: V or µV) induced across the terminals of an antenna. The voltage measured at the output terminals of an antenna is not the actual field intensity due to actual antenna gain, aperture characteristics, and loading effects.
For an electric field antenna, the field strength is in units of V/m or µV/m and the resulting antenna factor AF is in units of 1/m:
       AF= E/V
For a magnetic field antenna, the field strength is in units of A/m and the resulting antenna factor is in units of A/(Vm). For the relationship between the electric and magnetic fields, see the impedance of free space.
For a 50 Ω load, knowing that PD·Ae = Pr = V²/R 이고, E²=377PD the antenna factor is developed as:
       AF= sqrt(377PD)/sqrt(50PDAe) = 2.75/sqrt(Ae)= 9.73/(λ·sqrt(G))
 



<전력환산방법>
 50 Ω : dBm=dBμV-107
 75 Ω : dBm=dBμV-108.75

검증해 보면,,, P =-23.5[dBm] = 83.5[dBμV]
전계강도(E[V/m])는 P=V²/R을 이용한다.(R=50Ω)
만약 E가 단위길이당 V이면(E=V)이고, P=-23.5[dBm]이면,
4.44·10^-6[W]·50Ω=V² , ∴ V=0.015[V]
∴ 20·log10(0.015·10^6)=83.5[dBμV]
 

참고로 내 휴대폰의 신호의 세기는 어떻게 구할까?
[설정]→[휴대전화 정보]→[상태]→[신호강도]: (ex) -97dBm , 43 asu

마지막으로,,,
실효 개구면적 (Effective Aperture Area)  Ae
(수신 안테나 부근에 도래되는 입사파의 전력 밀도에 대비한 안테나의 부하로 흡수되는 전력의 비)의 유도과정을 공부하면서 요약해 본다.

먼저, 정현파 전류가 흐르는 매우 짧은 길이의 도선에 대하여 고찰하자
미소길이 도선에 흐르는 전류에 의한 벡터 자기퍼텐셜 A로 부터 H_Φ를 구하고
그 다음 맥스웰의 회전식을 사용하여 E_θ를 구한다.
평균복사전력밀도 Pav=|E_θ(1/r)||H_Φ(1/r)| , Pav=1/2·I²·Rrad 를 정리하면
복사저항 Rrad_rad=80π·(dz)² /λ² 이다.
수신기 종단 전력 Pr=E²·(dz)²/4Rrad=Ae·Pav 정리하면, Ae=3λ²/8π 이고,
결론적으로 일반화하면 Ae=(λ²/4π)·G

이 특성으로 말미암아 안테나의 이득이나 유효면적은 서로의 나머지로 정의할 수 있다.


참고로 위 계산식을 엑셀로 만들어 봤으니 참고하길 바란다.(단위변환 및 Friis 공식)

----------------------------------------------------------------------------------------------
블로그를 이전하여,,, 소스코드는 

https://with1.tistory.com/16

에서 다운로드할 수 있습니다!