[MATLAB] Convolution 연산을 하는 코드(자체함수 미사용)
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[MATLAB] Convolution 연산을 하는 코드(자체함수 미사용)에 대한 보고서 자료입니다.

본문내용

);
elseif a==65539
y(a) = x(65536)*h(2) + x(65535)*h(1);
elseif a==65540
y(a) = x(65536)*h(1);
else %5~65536까지의 Convolution
y(a) = x(a)*h(5) + x(a-1)*h(4) + x(a-2)*h(3) + x(a-3)*h(2) + x(a-4)*h(1);
end
end
z = y(3:65538); %Convolution의 특성상 앞의 값과 뒤의 값이 정확치 않으므로 배제
x = vec2mat(x,256); %x 행렬을 256 X 256으로 변환
z = vec2mat(z,256); %z 행렬을 256 X 256으로 변환
imshow(x,[]); %원본 그림파일을 출력합니다.
figure, imshow(z,[]); %필터링된 그림파일을 출력합니다.
fclose(fid)
일단은 Convolution계산이기 때문에 5+65536-1번의 계산을 For문을 통하여 총 65540번의 Summation을 하였고, 구역을 크게 3구역으로 나누어 계산하였습니다. h[n]이 x[n]에 서서히 들어가는 부분과 완전히 겹쳐지는 부분, 그리고 끝에 서서히 빠져나오는 부분 이렇게 3부분으로 나누어서 조건문을 만들었습니다.
Convolution계산의 특성상 앞뒤 부분에 겹쳐지지 않는 부분이 생기게 되는데 실제로는 어떠한 값이 있어야 하지만 Convolution은 이를 무시하고 없는 값으로 계산을 하게 되어 앞과 뒤의 값이 실제와는 조금 다릅니다. 이것 때문에 z라는 행렬을 만들어 y 행렬의 3행부터 65538행까지만 입력하였습니다. 그리고 원본파일인 x[n]과 최종 결과 값인 z[n] 256 X 256행렬로 변환하여 이를 그림으로 출력하였습니다.
2. 의 Fourier Transform () 및 의 Fourier Transform ()을 계산한 후 를 계산한다. 를 inverse Fourier Transform -> 하는 프로그램 작성
fid = fopen('input_sample.raw', 'rb'); %파일을 불러오는 부분입니다.
x = fread(fid, 65536);
h = [0.1; -0.3; 1.4; -0.3; 0.1;]; %h[n]의 주어진 값 대입
for n = 1:65536
X(n) = ( x(n) * exp((-i*pi*n)/32768) );
end
for m = 1:5
H(m) = ( h(m) * exp((-i*pi*m)/5) );
end
for l = 1:65536
Y(l) = X(l) * H(l);
end
for n = 1:65536
y(n) = ( Y(n) * exp((i*pi*n)/32768) );
end
for n = 1:65536
y(n) = abs(y(n));
end
x = vec2mat(x,256); %x 행렬을 256 X 256으로 변환
y = vec2mat(y,256); %y 행렬을 256 X 256으로 변환
imshow(x,[]); %원본 그림파일을 출력합니다.
figure, imshow(y,[]); %필터링된 그림파일을 출력합니다.
fclose(fid)
일단은 퓨리에 급수를 만들기 위해 의 식을 활용하여 알고리즘을 작성하였습니다. 마찬가지로 을 통하여 작성을 했고, 이제 를 구하기 위해 를 이용해서 구현을 하였습니다. 하지만 여기서 와 의 주기가 맞지 않아 행렬의 크기가 다르게 되어 계산이 되질 않았습니다. 수업시간에 교수님께서 말씀해주셨던 을 65536의 크기로 만들어 0으로 채우고 n=-2~2 까지만 값을 너어봤지만 문제가 해결되지 않았습니다. 내부 정의된 fft함수를 써서 계산해보려 했지만 이것도 주기문제 때문에 해결이 되지 않았습니다.
3. (1), (2) 프로그램 결과 분석 내용
일단 수업 시간에 교수님께서 말씀하셨던 부분은 Convolution 계산은 총 65540번을 하게 되지만 퓨리에 변환을 하게 되면 65536번을 하게 되어 다르게 나타날 것이라고 했는데, 실제로 Convolution을 해보면 65540개의 데이터가 나오게 됨을 알 수 있었습니다. 하지만 여기서 2번의 결과가 나와서 비교를 함으로써 분석을 해야 하는데 2번의 결과를 끝내 해결하지 못하게 되었습니다.
1번의 결과 값을 가지고 결과를 분석해 보자면 Convolution 계산을 구역을 크게 3구역으로 나누어 계산하였습니다. h[n]이 x[n]에 서서히 들어가는 부분과 완전히 겹쳐지는 부분, 그리고 끝에 서서히 빠져나오는 부분 이렇게 3부분으로 나누어서 조건문을 만들어 Convolution 계산을 구현하였습니다.
위에서 말했던 65540번의 계산중 앞뒤 부분에 겹쳐지지 않는 부분이 생기게 되는데 실제로는 어떠한 값이 있어야 하지만 Convolution은 이를 무시하고 없는 값으로 계산을 하게 되어 앞과 뒤의 값이 실제와는 조금 다르게 나오게 됨으로 앞뒤부분의 2픽셀 만큼을 제거하여 결과를 출력하였습니다.
이것이 최종적으로 나온 결과 데이터와 원본 데이터입니다.
위의 그림을 통해 최종적으로 살펴보면 원본 파일에 비해 결과 파일이 흐려진 것을 알 수가 있습니다.
위의 Impulse response는 어떠한 Input에 Convolution 연산을 하게 되면 흐려지는 효과를 내게 하는 Filter라는 것을 알 수 있었습니다. 그간 포토샵이라는 프로그램을 통해 흐리게 하는 효과와 선명해지게 하는 효과를 사용하기만 했지 실제로 컨볼루션이 사용되는지 모르고 있었는데 이번 Project를 하면서 잘 알게 되었습니다. 또한 퓨리에 변환에 대해 인터넷에서 찾아보면서 퓨리에 변환을 했을 때 특정 색깔만 튀게 나오게 되는걸 알 수 있었는데, 포토샵과 연관하여 생각해보면 선명하게 하는 효과(채도조절)을 하게 되면 이 결과도 특정 색깔만 튀게 나오게 되는데 이것이 퓨리에 변환으로 하는 것이였구나 하는 것을 이번에 알게 되었습니다.
이렇게 해서 이번 Project를 마무리를 짓게 되었습니다. 그간 시간이 될 때마다 틈틈이 고민을 해보았으나 많이 부족하다는 것을 느끼게 되었습니다. 이번에 하지 못한 것들을 방학때 다시 한번 해볼 생각입니다. 아직 교수님의 계절학기(?)가 남았지만, 한학기동안 감사했습니다.

키워드

  • 가격2,000
  • 페이지수14페이지
  • 등록일2010.09.10
  • 저작시기2010.4
  • 파일형식한글(hwp)
  • 자료번호#630108
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니