5. convolution의 분할 수행
카테고리 1번글에서 설명하였듯이 파일에서 byte단위 즉,1024개의 데이터씩 읽어서 처리하게 된다.
그렇다면 지금까지 구성해온 filter는 어떻게 동작을 해야할까?
1024 |
1024 |
1024 |
1024 |
1024 |
1024 |
1024 |
1024 |
1024 |
1024 |
이렇게 분할된 데이터를 각각 convolution 수행시 어떤 처리를 해줘야 할까...
라는 생각에 MATLAB에서 데이터를 관찰해보았다.
x= [1:10;
11:20;
21:30;
31:40;
41:50;
51:60;
61:70;
71:80;
81:90;
91:100];
h=[1,1,1,1];
for i=1:10
y(i,:)=conv(h,x(i,:))
end
y2=conv(h,1:100)
전체 데이터 x는 1:100까지의 데이터이다. 이 데이터를 10x10 매트릭스로 찢었다.
즉 각 행은 1~10, 11~20,,,,과 같이 10개 단위로 찢어진 데이터로 가정했다.
이상태에서 h는 [1,1,1,1]로 가정하였다.
for i=1:10y(i,:)=conv(h,x(i,:))
end
이 수행을 통해서는 각각의 행별로 convolution을 수행하게 하였다.
y =
1 3 6 10 14 18 22 26 30 34 27 19 10
11 23 36 50 54 58 62 66 70 74 57 39 20
21 43 66 90 94 98 102 106 110 114 87 59 30
31 63 96 130 134 138 142 146 150 154 117 79 40
41 83 126 170 174 178 182 186 190 194 147 99 50
51 103 156 210 214 218 222 226 230 234 177 119 60
61 123 186 250 254 258 262 266 270 274 207 139 70
71 143 216 290 294 298 302 306 310 314 237 159 80
81 163 246 330 334 338 342 346 350 354 267 179 90
91 183 276 370 374 378 382 386 390 394 297 199 100
결과는 위와 같았다. 각각의 행은 (Xn+Yn-1)=13개만큼의 콘볼류젼 데이터가 나왔다.
그렇다면 1~100까지 쭉~convolution을 수행한다면 데이터는 어떻게 나올까?
1 3 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62 66 70 74 78 82 86 90 94 98 102 106 110 114 118 122 126 130 134
138 142 146 150 154 158 162 166 170 174 178 182 186 190 194 198 202 206 210 214 218 222 226 230 234 238 242
246 250 254 258 262 266 270 274 278 282 286 290 294 298 302 306 310 314 318 322 326 330 334 338 342 346 350
354 358 362 366 370 374 378 382 386 390 394 297 199 100
다음과같이 103개의 데이터가 나왔다.
각각따로 convolution을 수행하였을시의 데이터는 130개, 한번에 수행하였을시는 103개. 즉 27개의 데이터가 사라져야한다.
이를 알아보기 위해서 Excel을 통해 데이터를 짜집어 보았다.
위의 사진은 엑셀을 캡쳐한 화면이다. 실제로는 가로로 103줄이나 되는 엄청 긴 파일이다.
궁금하면
를 열어보면 된다. 꼭 열어볼 필요는 없다.
정말 운 좋게도 예상한대로 딱 떨어졌다.
1~10까지는 콘볼루전한 데이터가 그대로 내려가고 다음 콘볼류전 값과 겹치는 11~13번째 데이터는 다음 콘볼루전의 1~3번째 데이터와 더해주면 신기하게 한꺼번에 콘볼류전한 값과 같아지게 된다.
글이 길어지니 1024개씩 잘라서 파일 전체를 분할 정복하는것은 다음 글에 쓰도록 하겠다.