오늘은 MATLAB을 사용하여 파일을 압축하는 방법에 대해 소개하려 합니다.

 

MATLAB 에서 파일을 압축하기 위해서는 다양한 함수가 있는데~

 

zip, unzip, gzip , gunzip, tar, untar 등과 같은 함수가 있습니다.

 

압축방법은 아래 매뉴얼에 나와 있는 바와 같이~

 

http://kr.mathworks.com/help/matlab/ref/zip.html

 

zip 파일명을 넣고 뒤에 압축하고자 하는 파일 명들을 셀 타입으로 넣으면 됩니다.

 

zip('backup.zip',{'*.m','*.mat'});

OR

zip('backup.zip',{'abc.m','aaa.mat'});

 

그런데 파일이 현재 폴더에 있다면 위와 같은 방식으로 하면 되는데~

 

저 같은 경우에는 파일이 여러 군데로 분산되어 있는 경우가 많이 있습니다.

 

이런 경우에는 사용하는 파일을 하나 하나 찾아서 압축파일에 추가하려면 매우 불편하고 실수 할 수도 있는 일이죠~

 

이런 경우에는 아래 소개했던 MATLAB Dependency Report 를 사용하는 게 좋습니다.

 

http://iamaman.tistory.com/255

 

위 포스팅에서는 MATLAB Dependency Report 라는 새로운 창을 통해 확인 하는 거지만~

 

depfun('filename') 이라는 함수를 사용하면 filename 에서 사용하는 함수들의 Dependency 를 다 찾아 줍니다.

 

그런데 최신 매뉴얼을 확인 하니 아래 주소에서 matlab.codetools.requiredFilesAndProducts() 를 사용하라고 하더군요.

 

http://kr.mathworks.com/help/matlab/matlab_prog/identify-dependencies.html#f7-58063

 

그럼 이제 matlab.codetools.requiredFilesAndProducts() 를 사용해서 Dependency 를 찾으면 되는거고~

 

Zip() 함수를 사용해서 압축을 하면 되겠네요~ 현재 제가 샘플로 사용할 convTest_20151018.m 파일을 통해 한번 실습 해보죠~

 

위 포스팅에서 소개했던 MATLAB Dependency Report (종속성 리포트)를 확인 해보니 convTest_20151018.m 파일은 conv_m.m 파일을 사용 중에 있습니다.

 

 

convTest_20151018.m 파일에 대해 정상적으로 압축하는 명령은 다음과 같습니다.

 

[fList, pList] = matlab.codetools.requiredFilesAndProducts('convTest_20151018.m');

zip('test.zip',fList)

 

matlab.codetools.requiredFilesAndProducts() 함수를 통해 convTest_20151018.m 파일에서 사용하는 모든 파일들이 fList 라는 셀 타입에 저장 되고~

 

이를 zip() 함수를 통해 압축하는 겁니다.

 

test.zip 파일을 확인 해보면~

 

convTest_20151018.m, conv_m.m 파일을 들어 있는 것을 확인 할 수 있습니다.


신호 처리에서 convolution은 필터링의 기본이 되는 만큼 매우 자주 사용하게 되는데요~

 

아래 글에서는 MATLAB conv() 함수를 사용하는 게 아닌 for 문을 사용해서 Convolution 을 수행하는 방법에 대해 소개한 적이 있고~

 

http://iamaman.tistory.com/317

 

아래 글에서는 FFT 를 활용하여 convolution 을 하는 방법에 대해 소개한 적이 있습니다.

 

http://iamaman.tistory.com/131

 

오늘은 convolution 수행 시 인덱스를 계산하는 방법에 대해 소개하려 합니다.

 

보통 conv() 함수는 convolution을 수행한 결과만 나오게 됩니다.

 

그런데 신호 및 시스템이나 DSP 등의 과목에서 convolution을 배울 때는 인덱스도 나오게 되죠~

 

다음과 같은 신호 x(n), h(n) 에 대해 convolution 을 수행해 보면~

 

x=ones(1,11);

nx = -5:5;

 

h=linspace(0,5,10);

nh = 0:9;

 

plot(nx,x,nh,h),grid on

legend('x','h','Location','northwest')

axis([-10 10 0 10])

 

 

다음과 같이 인덱스를 포함한 convolution 수행 코드를 작성 할 수 있습니다.

 

function [y, ny] = conv_m(x,nx,h,nh) 

diff1 = (nx(2)-nx(1));

diff2 = (nh(2)-nh(1));


assert(abs(diff1 - diff2) <= eps,'Time difference is not equal!!')

   

ny= linspace((nh(1)+nx(1)),(nh(end)+nx(end)),length(x)+length(h)-1);


y = conv(x,h);

 

위 conv_m() 함수를 사용하여 위에서 소개한 x(n), h(n) 에 대한 convolution 을 수행하면

 

[y, ny] = conv_m(x,nx,h,nh);

plot(ny,y),grid on

legend('Convolution Result','Location','northwest')

 

인덱스가 -5~14까지 인 다음과 같은 결과나 나오는 것을 확인 할 수 있습니다.

 

인덱스를 포함한 Convolution~ 참 쉽죠~



  1. dd 2020.05.04 12:22

    conv m ft에서 인수가 부족하다고 나오는데요ㅠㅠ

+ Recent posts