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

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