{VERSION 2 3 "IBM RISC UNIX" "2.3" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 }{CSTYLE "2D Comment" 2 18 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" 0 21 "" 0 1 0 0 0 1 0 0 0 0 2 0 0 0 0 }{CSTYLE "" -1 256 "T imes" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 260 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 261 "" 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 1 65 82 65 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 }{CSTYLE "" -1 265 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 268 "" 0 1 21 35 39 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 270 "" 0 1 239 128 137 0 0 0 1 0 0 0 0 0 0 }{CSTYLE "" -1 271 "" 0 1 0 0 24 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 272 "" 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 273 "Fixedsys" 0 1 115 117 109 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 274 "" 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 }{CSTYLE " " -1 275 "Fixedsys" 0 1 78 41 44 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 276 "" 0 1 93 50 107 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 277 "" 0 1 26 0 160 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "" 0 1 105 47 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "" 0 1 10 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 280 "" 0 1 25 51 162 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 281 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 282 "Times" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 283 "Times" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 284 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 285 "" 0 1 0 0 88 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 286 "" 0 1 0 0 3 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 287 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 288 "" 0 1 0 0 19 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 289 "" 0 1 0 0 2 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 290 "" 0 1 46 46 44 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 291 "" 0 1 0 0 19 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 292 "" 0 1 183 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 293 "" 0 1 0 0 19 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 294 "" 0 1 0 0 19 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 295 "" 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 296 "" 0 1 223 0 123 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 297 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 298 "" 0 1 178 0 18 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 299 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 300 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 301 "" 0 1 0 0 100 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 302 "" 0 1 0 0 174 0 0 1 0 0 0 0 0 0 0 } {CSTYLE "" -1 303 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 304 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 305 "" 0 1 238 191 64 0 0 0 1 0 0 0 0 0 0 }{CSTYLE "" -1 306 "" 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 }{CSTYLE "" -1 307 "" 0 1 233 63 244 0 1 0 0 0 0 0 0 0 0 }{CSTYLE " " -1 308 "" 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 309 "" 0 1 205 191 46 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 310 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 311 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 312 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 313 "" 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 }{CSTYLE "" -1 314 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 315 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 } {CSTYLE "" -1 316 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 317 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 318 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 319 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 320 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 321 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 322 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 323 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 } {CSTYLE "" -1 324 "" 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 }{CSTYLE "" -1 325 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 326 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 327 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 } {PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 1" 0 3 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 }1 0 0 0 6 6 0 0 0 0 0 0 -1 0 }{PSTYLE "Heading 2" 3 4 1 {CSTYLE "" -1 -1 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 4 4 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Out put" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" 0 18 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 1 0 0 0 0 0 0 }3 0 0 -1 12 12 0 0 0 0 0 0 19 0 } {PSTYLE "" 11 256 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 258 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 } 3 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 11 "13. Sitzung" }{MPLTEXT 1 0 0 "" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 29 "Erinnerung an die 12. S itzung" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 4 "Die " }{TEXT 327 19 "Must erloesung12.mws" }{TEXT -1 52 " der Aufgabe 3 wird nach dem 6.6.97 le sbar gemacht." }{MPLTEXT 1 0 0 "" }}}}{EXCHG {PARA 257 "" 0 "" {TEXT 260 52 "Diskrete Fourier-Transformation und Bildverarbeitung" }}{PARA 258 "" 0 "" {TEXT -1 57 "(Eine Visualisierungs-Spielerei mit einem kle inen Puzzle)" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 186 "Die diskrete Fourier-Transformation (DFT) [ f[0],...,f[N-1] ] --> [d[0],...,d[N-1] ] eines komplexen Datenfeldes [ f[0],...,f[N-1 ] ] ist das komplexe Datenfeld [ d[0],...,d[N-1] ] :" }}{PARA 0 "" 0 "" {TEXT 257 16 " " }{XPPEDIT 18 0 " d[k] = sum( ex p(-I*j*k*2*Pi/N) * f[j] , j=0..N-1) ; " "/&%\"dG6#%\"kG-%$sumG6$*&-%$ expG6#,$*.%\"IG\"\"\"%\"jGF1F&F1\"\"#F1%#PiGF1%\"NG!\"\"F6F1&%\"fG6#F2 F1/F2;\"\"!,&F5F1\"\"\"F6" }{TEXT 265 5 " ; " }{XPPEDIT 18 0 "I=sqrt (-1)" "/%\"IG-%%sqrtG6#,$\"\"\"!\"\"" }{TEXT -1 3 " ; " }{TEXT 267 2 " " }{XPPEDIT 18 0 "k=0..N-1" "/%\"kG;\"\"!,&%\"NG\"\"\"\"\"\"!\"\"" } {TEXT -1 3 " ." }}{PARA 0 "" 0 "" {TEXT -1 99 "Ein schneller numerisc her Algorithmus (Fast Fourier Transform, FFT), der [d[0],...,d[N-1] ] ] mit " }{TEXT 311 10 "O(N ln(N))" }{TEXT -1 50 " Operationen berechn et, steht als Library-Routine " }{TEXT 271 3 "FFT" }{TEXT -1 16 " zur \+ Verfuegung:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "restart: readlib(FFT ):" }}{PARA 0 "" 0 "" {TEXT 256 68 "Die Umkehrtransformation [ d[0],.. .,d[N-1] ] -> [ f[0],...,f[N-1] ] " }}{PARA 0 "" 0 "" {TEXT 258 15 " \+ " }{XPPEDIT 18 0 "f[j] =1/N" "/&%\"fG6#%\"jG*&\"\"\"\"\" \"%\"NG!\"\"" }{TEXT 266 3 " " }{XPPEDIT 18 0 " sum( exp(I*j*k*2*Pi /N) * d[k] , k=0..N-1) " "-%$sumG6$*&-%$expG6#*.%\"IG\"\"\"%\"jGF+%\" kGF+\"\"#F+%#PiGF+%\"NG!\"\"F+&%\"dG6#F-F+/F-;\"\"!,&F0F+\"\"\"F1" } {TEXT -1 5 " ; " }{XPPEDIT 18 0 "j=0 .. N-1" "/%\"jG;\"\"!,&%\"NG\" \"\"\"\"\"!\"\"" }{TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT 259 19 "steht als Routine " }{TEXT 282 4 "iFFT" }{TEXT 283 17 " zur Verfuegung. " }{TEXT -1 27 "Zur Syntax des Aufrufs von " }{TEXT 281 3 "FFT" }{TEXT -1 5 " und " }{TEXT 284 4 "iFFT" }{TEXT -1 37 " siehe die entsprechend en Help-Pages." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "help(FFT);" }}} {EXCHG {PARA 0 "" 0 "" {TEXT 272 10 "Beispiel: " }{TEXT -1 20 "Berechn e die DFT von" }{TEXT 274 1 " " }{TEXT -1 43 " f = [ f[0] ,...,f[7] ] \+ = [0,1,2,3,4,5,6,7]" }{TEXT 261 1 ":" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "f:=[0,1,2,3,4,5,6,7];" }}{PARA 0 "" 0 "" {TEXT -1 9 "Realteil:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Red:=array(map(Re,f));" }}{PARA 0 "" 0 "" {TEXT -1 14 "Imaginaerteil:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 22 "Imd:=array(map(Im,f));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 15 "FFT (3,Red,Imd):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "print(Red); print(I md);" }}}{EXCHG {PARA 256 "" 0 "" {TEXT -1 36 "Ueberpruefe die Ruecktr ansformation:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 32 "iFFT(3,Red,Imd): p rint(Red,Imd);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 65 "Die DFT eines 2 -dimensionalen komplexen Datenfeldes (d.h., einer " }{TEXT 285 3 "MxN " }{TEXT -1 9 "-Matrix) " }{XPPEDIT 18 0 "f=`(`*f[j[1],j[2]]*`)`" "/% \"fG*(%\"(G\"\"\"&F#6$&%\"jG6#\"\"\"&F*6#\"\"#F&%\")GF&" }{TEXT -1 14 " (mit Indizes " }{XPPEDIT 18 0 "j[1],j[2]=0..N-1" "6$&%\"jG6#\"\"\"/& F$6#\"\"#;\"\"!,&%\"NG\"\"\"\"\"\"!\"\"" }{TEXT -1 11 " ) ist die " } {TEXT 286 3 "MxN" }{TEXT -1 8 "-Matrix " }{XPPEDIT 18 0 "d=`(`*d[k[1], k[2]]*`)`" "/%\"dG*(%\"(G\"\"\"&F#6$&%\"kG6#\"\"\"&F*6#\"\"#F&%\")GF& " }{TEXT -1 2 " :" }}{PARA 0 "" 0 "" {TEXT -1 9 " " }{XPPEDIT 18 0 "d[k1,k2] = sum(sum( exp(-I*j[1]*k[1]*2*Pi/M)*exp(-I*j[2]*k[2]*2 *Pi/N) *f[j[1],j[2]],j[2]=0..N-1),j[1]=0..M-1)" "/&%\"dG6$%#k1G%#k2G-% $sumG6$-F)6$*(-%$expG6#,$*.%\"IG\"\"\"&%\"jG6#\"\"\"F4&%\"kG6#\"\"\"F4 \"\"#F4%#PiGF4%\"MG!\"\"F@F4-F/6#,$*.F3F4&F66#\"\"#F4&F:6#\"\"#F4\"\"# F4F>F4%\"NGF@F@F4&%\"fG6$&F66#\"\"\"&F66#\"\"#F4/&F66#\"\"#;\"\"!,&FLF 4\"\"\"F@/&F66#\"\"\";Fen,&F?F4\"\"\"F@" }{TEXT -1 6 " ; " } {XPPEDIT 18 0 "k[1]=0..M-1*` `,` `*k[2]=1..N-1" "6$/&%\"kG6#\"\"\";\" \"!,&%\"MG\"\"\"*&\"\"\"F,%\"~GF,!\"\"/*&F/F,&F%6#\"\"#F,;\"\"\",&%\"N GF,\"\"\"F0" }{TEXT -1 1 " " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 60 "Sie entsteht offensichtlich dadurch, dass man z unaechst die " }{TEXT 305 7 "Spalten" }{TEXT -1 13 " der Matrix " } {TEXT 290 1 "f" }{TEXT -1 92 " einer 1-dimensionalen DFT unterzieht, \+ die aus diesen Spalten aufgebaute Matrix wird dann " }{TEXT 306 11 "z eilenweise" }{TEXT -1 29 " 1-dimensional transformiert." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 23 "Die folgende Routine " }{TEXT 307 3 "DF T" }{TEXT -1 39 " fuehrt die 2-dimensionale DFT einer " }{TEXT 287 3 "MxN" }{TEXT -1 8 " Matrix " }{TEXT 289 1 "f" }{TEXT -1 6 " (mit " } {TEXT 288 12 "M=2^m, N=2^n" }{TEXT -1 39 ") durch. Sie benutzt die Map le Routine " }{TEXT 291 3 "FFT" }{TEXT -1 56 " zur Durchfuehrung der 1 -dimensionalen Transformationen." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 179 "DFT:=proc(A) local i,j,M,N,m,n,xx,yy,result: option remember;\n M :=op(2,op(1,[op(2,eval(A))])): m:=simplify(ln(M)/ln(2)):\n N:=op(2,op( 2,[op(2,eval(A))])): n:=simplify(ln(N)/ln(2)):" }}{PARA 0 "" 0 "" {TEXT -1 4 " " }{MPLTEXT 1 0 21 " if M<>2^m or N<>2^n " }}{PARA 0 " " 0 "" {TEXT -1 13 " " }{MPLTEXT 1 0 59 "then ERROR(`Matri xdimension nicht von der Form 2^m x 2^n`);" }}{PARA 0 "" 0 "" {TEXT -1 6 " " }{MPLTEXT 1 0 3 "fi;" }}{PARA 0 "" 0 "" {TEXT -1 6 " \+ " }{MPLTEXT 1 0 442 "result:=matrix(M,N):\n for j to N do\n xx :=array([seq(Re(A[i,j]),i=1..M)]):\n yy:=array([seq(Im(A[i,j]),i=1 ..M)]):\n evalhf(FFT(m,var(xx),var(yy))):\n for i to M do resu lt[i,j]:=xx[i]+I*yy[i]:od:\n od:\n for i to M do\n xx:=array([ seq(Re(result[i,j]),j=1..N)]):\n yy:=array([seq(Im(result[i,j]),j= 1..N)]):\n evalhf(FFT(n,var(xx),var(yy))):\n for j to N do res ult[i,j]:=xx[j]+I*yy[j]:od:\n od:\n copy(result):\nend:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 40 "Die Inverse 2-dimensionale DFT ist durch" }}{PARA 0 "" 0 "" {TEXT -1 4 " " }{XPPEDIT 18 0 "f[j[1],j[2 ]] = 1/(M*N) " "/&%\"fG6$&%\"jG6#\"\"\"&F'6#\"\"#*&\"\"\"\"\"\"*&%\"MG F/%\"NGF/!\"\"" }{TEXT -1 4 " " }{XPPEDIT 18 0 " sum( sum( exp( I*j[1]*k[1]*2*Pi/M)*exp(I*j[2]*k[2]*2*Pi/N)*d[k[1],k[2]],k[2]=0..N-1), k[1]=0..M-1)" "-%$sumG6$-F#6$*(-%$expG6#*.%\"IG\"\"\"&%\"jG6#\"\"\"F-& %\"kG6#\"\"\"F-\"\"#F-%#PiGF-%\"MG!\"\"F--F)6#*.F,F-&F/6#\"\"#F-&F36# \"\"#F-\"\"#F-F7F-%\"NGF9F-&%\"dG6$&F36#\"\"\"&F36#\"\"#F-/&F36#\"\"#; \"\"!,&FDF-\"\"\"F9/&F36#\"\"\";FS,&F8F-\"\"\"F9" }{TEXT -1 6 " ; \+ " }{XPPEDIT 18 0 "j[1]=0..M-1*` `,` `*j[2]=0..N-1" "6$/&%\"jG6#\"\"\"; \"\"!,&%\"MG\"\"\"*&\"\"\"F,%\"~GF,!\"\"/*&F/F,&F%6#\"\"#F,;F),&%\"NGF ,\"\"\"F0" }{TEXT -1 2 " ;" }}{PARA 0 "" 0 "" {TEXT -1 72 "gegeben. Si e besteht aus inversen 1-dimensionalen DFTen der Spalten von " } {XPPEDIT 18 0 "``(d[k[1],k[2]])" "-%!G6#&%\"dG6$&%\"kG6#\"\"\"&F)6#\" \"#" }{TEXT -1 81 ", gefolgt von 1-dimensionalen Transformationen der \+ Zeilen. Die folgende Routine " }{TEXT 292 6 "invDFT" }{TEXT -1 53 " f uehrt die 2-dimensionale Ruecktransformation durch:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 166 "invDFT:=proc(A) local i,j,M,N,m,n,xx,yy,result:\n M:=op(2,op(1,[op(2,eval(A))])): m:=simplify(ln(M)/ln(2)):\n N:=op(2,o p(2,[op(2,eval(A))])): n:=simplify(ln(N)/ln(2)):\n" }{TEXT -1 2 " " } {MPLTEXT 1 0 514 "if M<>2^m or N<>2^n \n then ERROR(`Matrixdim ension nicht von der Form 2^m x 2^n`);\n fi;\n result:=matrix(M,N):\n \+ for j to N do\n xx:=array([seq(Re(A[i,j]),i=1..M)]):\n yy:=array([ seq(Im(A[i,j]),i=1..M)]):\n evalhf(iFFT(m,var(xx),var(yy))):\n for i to M do result[i,j]:=xx[i]+I*yy[i]:od:\n od:\n for i to M do\n xx :=array([seq(Re(result[i,j]),j=1..N)]):\n yy:=array([seq(Im(result[i ,j]),j=1..N)]):\n evalhf(iFFT(n,var(xx),var(yy))):\n for j to N do result[i,j]:=xx[j]+I*yy[j]:od:\n od:\n copy(result):\nend:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 24 "Erzeuge eine beliebige 2" }{TEXT 304 2 "x4" }{TEXT -1 31 "-Matrix und teste die Routinen " }{TEXT 293 3 "DFT" }{TEXT -1 5 " und " }{TEXT 294 6 "invDFT" }{TEXT -1 1 ":" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 28 "AA:=linalg[randmatrix](2,4);" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "invDFT(DFT(AA));" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "DFT(invDFT(AA));" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 21 "Die folgende Routine " }{TEXT 295 6 "center" }{TEXT -1 17 " ve rtauscht die " }{TEXT 296 9 "M/2 x N/2" }{TEXT -1 16 " -Bloecke einer \+ " }{TEXT 297 3 "MxN" }{TEXT -1 8 " -Matrix" }{MPLTEXT 1 0 0 "" }} {PARA 0 "" 0 "" {MPLTEXT 0 21 3 " " }{TEXT -1 2 " " }{TEXT 273 47 " [ d[a,a] , d[a,b] ] ----> [ d[b,b] , d[b,a] ]" }}{PARA 0 "" 0 "" {TEXT -1 9 " " }{TEXT 275 47 "[ d[b,a] , d[b,b] ] [ d[ a,b] , d[a,a] ]" }}{PARA 0 "" 0 "" {TEXT -1 94 "Die Matrix-Indizes ein er Fourier-Transformierten entsprechen ``Frequenzen''. Nach Zentrierun g " }{TEXT 276 19 "dd:= center( DT(d))" }{TEXT -1 60 " liegen die ``n iederfrequenten'' Anteile der Fourier-Daten " }{TEXT 277 1 "d" }{TEXT -1 29 " in der ``Mitte'' der Matrix " }{TEXT 278 3 "dd." }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 338 "center:=proc(d) local i,j,M,N,m,n,result:\n \+ M:= op(2,op(1,[op(2,eval(d))])): \n N:= op(2,op(2,[op(2,eval(d))])) :\n result:=matrix(M,N):\n for i to M/2 do\n for j to N/2 do\n \+ result[i,j]:=d[M/2+i,N/2+j]:result[i,N/2+j]:=d[M/2+i,j]:\n res ult[M/2+i,j]:=d[i,N/2+j]:result[M/2+i,N/2+j]:=d[i,j]:\n od:\n od: \n copy(result):\nend:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 34 "Betra chte das folgende Nutzsignal " }{TEXT 279 4 "Nutz" }{TEXT -1 82 " : ei ne 32 x 32- Matrix, die als Pixelfeld eines Bildes interpretiert werde n soll." }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "OO:=(x,y)->evalf(exp(-4* (x^2+y^2-1)^2)): M:=32: N:=32:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "N utz:=matrix(32,32, (i,j)->OO(4*(i-1)/M-2,4*(j-1)/N-2) ):" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 5 "Mit " }{TEXT 298 10 "matrixplot" }{TEXT -1 11 " (aus dem " }{TEXT 301 5 "plots" }{TEXT -1 132 "-Paket) kann d as Signal visualisiert werden: als 3-dimensionales Bild mit einer durc h die Matrixwerte gegebenen Einfaerbung (ZHUE): " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "with(plots): " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "m yoptions1:=shading=ZHUE,axes=framed,orientation=[10,10];" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "matrixplot(Nutz,myoptions1,title=`Nutzsignal` );" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 64 "Visualisierung des Fourier- transformierten Bildes: es werden die" }{TEXT 299 10 " Betraege " } {TEXT -1 25 "des komplexen Datenfeldes" }{TEXT 300 1 " " }{TEXT 262 17 "center(DFT(Nutz))" }{TEXT 308 1 " " }{TEXT -1 10 "geplottet:" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 75 "myoptions2:=shading=ZHUE,axes=frame d,orientation=[10,50],heights=histogram;" }}{PARA 0 "" 0 "" {TEXT 315 8 "Achtung:" }{TEXT -1 19 " die Plot-Option " }{TEXT 312 18 "heights =histogram " }{TEXT -1 141 " , die im folgenden fuer die Plots von Fou rier-Daten verwendet wird, erzeugt zwar einen huebschen Ouput, macht d en Aufbau der Graphiken aber " }{TEXT 313 12 "sehr langsam" }{TEXT -1 50 " ! Wer es eilig hat, der moege diese Option aus " }{TEXT 314 10 "myoptions2" }{TEXT -1 13 " entfernen !" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "map(abs,center(DFT(Nutz))):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 48 "matrixplot(\",myoptions2,title=`DFT Nutzsignal`);" }} }{EXCHG {PARA 0 "" 0 "" {TEXT -1 230 "Die Energie des Nutzsignals konz entriert sich in der Fourier-Transformierten im wesentlichen auf ``nie drige'' Frequenzen. Bei ``Rauschsignalen'' ist dies anders: Benutze ei nen Zufallszahlengenerator zur Erzeugung von ``Rauschen'':" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "help(rand);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 33 "rauschGenerator:=rand(-100..100):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 51 "Rauschen:=matrix(M,N,(i,j)->rauschGenerator()/200):" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 29 "Visualisierung des Rauschens:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 49 "matrixplot(Rauschen,myoptions1,ti tle=`Rauschen`);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 92 "Visualisierun g der Fourier-Transformierten. Es werden die Absolutwerte geplottet ( Geduld!):" }{MPLTEXT 1 0 1 " " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 31 "ma p(abs,center(DFT(Rauschen))):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 46 "ma trixplot(\",myoptions2,title=`DFT Rauschen`);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 212 "Die Energie des Rauschsignals ist nach Fourier-Transf ormation recht gleichmaessig auf ``hohe'' und ``tiefe'' Frequenzen ver teilt. Addiert man das Rauschen zum Nutzsignal, so ist das Nutzsignal \+ kaum noch sichtbar:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "Verrauscht:= evalm(Nutz+2*Rauschen):" }{TEXT -1 3 " " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 47 "matrixplot(\",myoptions1,title=`Nutz+Rauschen`);" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 109 "Nach Fourier-Transformation ist d as Nutzsignal jedoch noch deutlich an den niederfrequenten Spitzen sic htbar:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 39 "DFTVerrauscht:=center(DFT (Verrauscht)):" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 70 "matrixplot(map(ab s,\"),myoptions2,title=`DFT Verrauschtes Nutzsignal`);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 202 "Um das im niederfrequenten Spektrum enth altene Nutzsignal herauszufiltern, werden die Fourier-Koeffizienten im ``Zentrum'' der Matrix beibehalten, alle Fourier-Daten jenseits einer (durch den Parameter " }{TEXT 280 1 "r" }{TEXT -1 50 " kodierten) Gre nzfrequenz werden auf Null gesetzt:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 314 "filter:=proc(r,A) local i,j,M,N,m,n,result:\n M:= op(2,op(1,[op(2 ,eval(A))]) ): \n N:= op(2,op(2,[op(2,eval(A))]) ): \n result:=matrix( M,N):\n for i to M do\n for j to N do\n if max(abs((i-1)/M-1/2),abs ((j-1)/N-1/2)) <= r/2\n then result[i,j]:=A[i,j]\n else result [i,j]:=0:\n fi:\n od:\n od:\n copy(result):\nend:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 87 "Der obige Tiefpassfilter wird auf die Fourier-D aten des verrauschten Bildes angewendet:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 38 "Gefiltert:=filter(0.15,DFTVerrauscht):" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 56 "Vergleiche die Fourier-Daten vor und nach der Filterung:" }{MPLTEXT 1 0 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 82 "matrixplot(map(abs,DFTVerrauscht),myoptions2,title=`Fourier-Daten \+ vor Filterung`);" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 79 "matrixplot(map( abs,Gefiltert),myoptions2,title=`Fourier-Daten nach Filterung`);" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 195 "Wende die inverse DFT auf die gef ilterten Fourier-Daten an. Wegen der Filterung ergeben sich Daten, die nicht mehr notwendigerweise reell sind. Es wird nur der Realteil des \+ Ergebnisses geplottet:" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "Geglaette tesBild:=map(Re,invDFT(center(Gefiltert))): " }}{PARA 0 "" 0 "" {TEXT -1 4 " " }{MPLTEXT 1 0 66 "matrixplot(GeglaettetesBild,myoptions1,t itle=`geglaettetes Bild`);" }}{PARA 0 "" 0 "" {TEXT 302 205 "Das Ergeb nis approximiert das urspuengliche Nutzsignal, wenn die beim Filtern u nterdrueckten hochfrequenten Anteile klein waren. Das Rauschen, das vi ele hochfrequente Anteile hatte, wird stark unterdrueckt" }{TEXT -1 1 "." }}}{EXCHG {PARA 0 "" 0 "" {TEXT 263 12 "Uebersicht: " }{TEXT -1 235 " Nutzsignal, verrauschtes Nutzsignal und geglaettetes verrauschte s Nutzsignal werden von oben betrachtet, die Pixel werden den Matrixwe rten entsprechend eingefaerbt (ZHUE), was der Interpretation der Matri zen als Bildpixel entspricht. " }{TEXT 303 55 "Achtung: dies macht nur Sinn auf einem Farbbildschirm !" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "newoptions:= shading=ZHUE,axes=boxed,scaling=constrained," }}{PARA 0 "" 0 "" {TEXT -1 31 " " }{MPLTEXT 1 0 22 " orientation=[-90,0]; " }{TEXT -1 31 "(Betrachte die Bilder von ob en)" }}{PARA 0 "" 0 "" {TEXT -1 4 " " }{MPLTEXT 1 0 47 "matrixplot( Nutz,newoptions,title=`Nutzsignal`);" }}{PARA 0 "" 0 "" {TEXT -1 4 " \+ " }{MPLTEXT 1 0 62 "matrixplot(Verrauscht,newoptions,title=`verrausc htes Signal`);" }}{PARA 0 "" 0 "" {TEXT -1 4 " " }{MPLTEXT 1 0 67 " matrixplot(GeglaettetesBild,newoptions,title=`gefiltertes Signal`);" } }}{EXCHG {PARA 0 "" 0 "" {TEXT 264 8 "Aufgabe:" }{TEXT -1 18 " In den Dateien " }{TEXT 316 21 "bild.matrix, bild.txt" }{TEXT -1 6 " und \+ " }{TEXT 268 6 "bild.m" }{TEXT -1 7 " (aus " }{TEXT 323 23 "/home/fb1 2/kurse/flca00" }{TEXT -1 28 " zu kopieren) ist dieselbe " }{TEXT 325 2 "32" }{TEXT -1 1 "x" }{TEXT 326 2 "64" }{TEXT -1 8 "-Matrix " } {TEXT 269 1 "A" }{TEXT -1 148 " (in verschiedenen Formaten) gespeicher t, welche Informationen (Vorname und Geburtsdatum meiner juengsten Toc hter) enthaelt. Betrachte die Dateien " }{TEXT 318 11 "bild.matrix" } {TEXT -1 29 " (von mir in MAPLE mittels " }{TEXT 317 28 "writedata(` bild.matrix`, A);" }{TEXT -1 18 " erzeugt) und " }{TEXT 319 8 "bil d.txt" }{TEXT -1 21 " (von mir mittels s" }{TEXT 320 17 "ave A,`bild .txt`;" }{TEXT -1 51 " erzeugt) mit einem Editor. Die von mir mittel s " }{TEXT 321 16 "save A,`bild.m`;" }{TEXT -1 88 " im MAPLE-Zwische nformat abgespeicherten Daten sind nicht lesbar. Lese diese Daten ein: " }}{PARA 0 "" 0 "" {TEXT -1 14 "Entweder durch" }{MPLTEXT 1 0 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 45 "A:=matrix(64,32,readdata(`bild.matr ix`,32)): " }}{PARA 0 "" 0 "" {TEXT -1 10 "oder durch" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 16 "read `bild.txt`:" }}{PARA 0 "" 0 "" {TEXT -1 31 "oder durch (schnellste Eingabe)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "read `bild.m`:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 70 "Durch Addition eines sehr starken Rauschsignals ist das in der Matrix " }{TEXT 322 1 "A" }{TEXT -1 43 " eingearbeitete Nutzsignal stark gestoert: " }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 42 "matrixplot(A,newoptions,title=`Orig inal`);" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 324 8 "Aufgabe:" }{TEXT -1 92 " Versuche, durch eine geeignete Tiefpassfilterung die gesuchten In formationen zu bestimmen! " }}{PARA 0 "" 0 "" {TEXT 270 9 "Anleitung" }{TEXT -1 81 ": die obigen Schritte lassen sich zusammenfassen zur fol genden Tiefpassfilterung " }{TEXT 310 3 "TPF" }{TEXT -1 28 ". Finde ge eignete Wert fuer " }{TEXT 309 3 "r !" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 156 "TPF:=proc(r,A) global newoptions:\n DFT(A):center(\"):filter(r, \"):center(\"):invDFT(\"):map(Re,\"):\n print(`Parameterwert r `=r):\n matrixplot(\",newoptions):\nend:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "TPF(???,A);" }}}{SECT 1 {PARA 3 "" 0 "" {TEXT -1 8 "A ntwort:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 26 "Probiere zunaechs t selbst!" }}}{SECT 1 {PARA 4 "" 0 "" {TEXT -1 8 "Antwort:" }}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "TPF(0.10,A);" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 12 "TPF(0.30,A);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "TPF(0.45,A);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "TPF(0.50,A);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "TPF(0 .55,A);" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 12 "TPF(0.60,A);" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}}{MARK "1" 0 } {VIEWOPTS 1 1 0 3 2 1804 }