G1. : 1
1, C 1. G1 G3 4, 12. UNIX, Linux ( ) ( ), C.,,,,,. (1 1 ), ( ).,.,,,, 3., Linux (/dev/dsp),.,,.,,,.,,,,!.,.,,,. : ( ),.,,,. :,..,.,. :.,,.,. 2.. :, (1 1 ), ( ) C.,,,.,. :,,.,,.,.,..,
,,,.,,.,,,. :.,,,,.,,.,,.,. :, 4 2., 1 2 ( 2 3 ). 1.,.,,,,.,,,,, ( ).,.,,,.,,, A,,.,,,,.,,,,, ( ). :, G1-G3,.. 8,,.,,,,,,.. 2. 2.1, PC Linux (Ubuntu). PC Windows,,,, Linux.. 1.1 Linux, (, denjo ). 2.2 1.2 ZENKIJIKKEN., HP,
URL.,. http://g1g2g3.logos.ic.i.u-tokyo.ac.jp/ 2.3,,,.,. 1.3,,. 2.4 Emacs ( ). Emacs. 1.4, Emacs 22 (GTK), Emacs. 3. C Linux C. 4 Mac,. 3.1 C Linux, C cc gcc ( )., C ( : ini.c), $ gcc ini.c ( gcc ini.c. $, ). a.out,, -o, $ gcc -o ini ini.c., $./ini../, $ ini, $ ini bash: ini: command not found.
1.5 Emacs ini.c., ini. main(int argc, char ** argv) { char * gn = argv[1]; char * fn = argv[2]; char g = gn[0]; char f = fn[0]; printf( initial of %s %s is %c%c.\n, gn, fn, g, f); }.,. $./ini Daisuke Matsuzaka initial of Daisuke Matsuzaka is DM. (Segmentation Fault). $./ini Daisuke Segmentation fault. 3.2, Emacs (4 Mac ). (1) Emacs : C-x C-f (Ctrl x, Ctrl f ) Find file: ~/, ~/ ( ini.c) Enter. Find file: ~/ini.c ~,,. (2) Emacs : C-x C-s (3) GUI: Mac Windows,. ini.c. (4) :, $ ls
. ini.c, GUI.,,, Emacs,,,.,. (1) :. /,. /home/tau/ini.c, (, ), home, tau, ini.c (. )., 2, 7-3-1 2 4F. /,. ini.c,.. /home/tau, ini.c, /home/tau/ini.c, enshu/mk data.c, /home/tau/enshu/mk data.c. 7-3-1 2 4F, 7-3-1 2 4F, 2. (2) :., pwd. $ pwd /home/tau,,, /home/. (3) :, $ mkdir : $ mkdir g1g2g3 (g1g2g3 ), /g1g2g3. (4) Emacs : Emacs ~/,, Find file: ~/ini.c, ini.c, ( /home/tau ), /home/tau/ini.c., Find file: ~/enshu/mk data.c, /home/tau/enshu/mk data.c. (5) :,
$ cd., $ cd, $ cd. : $ cd g1g2g3, D, D, D. (6) : $ ls. $ ls, $ ls. (7) : cp mv,. GUI.,,.. $ cd # $ mkdir enshu # enshu Emacs ~/enshu/xyz.c $ cd enshu # enshu $ ls xyz.c # xyz.c $ gcc xyz.c # $./a.out # 3.3 Emacs, Emacs gcc. gcc, Emacs M-x compile ( : ) ( )., Emacs ( ), ( G1.1.1).
,, C-g ( ). Emacs, C-g. G1.1.1 M-x compile Emacs Compile Command: make -k make -k ( ). Compile Command: gcc ini.c Emacs, ( G1.1.2). M-x compile,,,., C-x ( Ctrl x, (= Shift + @) ). C-x. ( ). ( ).,. M-x Emacs, M-x. M-x, M-( ), x. ( M )?,,..
G1.1.2 M-x compile gcc Emacs Alt ( ). x,. ESC ( ). x. ESC x (ESC, x ). C-[ (Ctrl [ )., Ctrl, [,. C-[ x. 1.6 ini.c, M-x compile. C-x. M-x compile, -Wall (, gcc -Wall -o ini ini.c). ( ).,,., M-x compile,., C-x 1. Emacs,, 4.., Emacs,,,,, (, ). 4. Emacs, Emacs,. A, B,.,
Emacs, M-x compile, M-x gdb (Emacs ), ( ).,,,. G1.1.3 Emacs,,. ( G1.1.3 ) : Emacs, Emacs.. : Emacs, M-x compile,. 1. :, M-x compile, Emacs., ( )., Emacs, ( ), ( ).,,,, Emacs.,, ( G1.1.1 ). (1) C-g:, Emacs
, C-g ( ).. (2) :, C-x 2 ( C-x 3). Emacs File Split Window.., M-x compile M-x gdb. (3) :, C-x o. (4) :, C-x 0., ( ).., ( ). (5), :, C-x 1.. (6) : ( ) Emacs. C-x C-f, Emacs File Visit New File. ( ),,., ( ).,,,, ( ). (7) ( ) : Emacs Buffers, C-x b, Switch to buffer (default... ):
G1.1.1 Emacs C-g C-x 2 ( : C-x 3) Emacs File Split Window C-x o C-x 0 C-x 1 C-x C-f Emacs File Visit New File ( ) C-x k ( ) C-x C-b Emacs Buffers C-x C-b Emacs Buffers,. tab., tab ( )., M-x compile, Emacs. (8) : Emacs Buffers. C-x C-b. (9) ( ):,, C-x k Kill buffer (default ): Enter., C-x k, ( tab, tab ). Emacs 10 20, ( C-x C-s ). 5. :,,.,, C,., Linux (UNIX),.. 5.1 man $ man $ man, C. :
$ man gcc $ man open $ man -s 2 open man q (less ). -s 2, 2, man (, C open, man open open ). 1, 2 ( ), 3 ( ).,,, -s 2 -s 3,. Emacs. M-x man Manual entry: gcc.,, #include, (Emacs & )., M-x man Manual entry: -s 2 open. 5.2 info, info. $ info gcc $ info emacs. q,. Emacs., m, m. $ info info. Emacs, M-x info.,,. man man man top info info.. q. info, Emacs.,. 6...
(1) ( 1 ) (2) (3), (4), ( ), segmentation fault,,,. segmentation fault,. 6.1. 4. 1: :, -g. M-x compile Compile command: gcc -g -o ini ini.c., -Wall. 2: :, M-x gdb. M-x gdb Run gdb (like this): gdb --annoteate=3 ini, ini,., Emacs, gdb ( (gdb)). Current directory is /home/tau/ GNU gdb 6.8-debian Copyright (C) 2008 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type show copying and show warranty for details. This GDB was configured as i486-linux-gnu... (gdb) (ini). gdb,,,. 3: :. run. (gdb) run Daisuke Matsuzaka, ini, Daisuke Matsuzaka (,./ini Daisuke Matsuzaka. ini ). (gdb) run Daisuke Matsuzaka Starting program: /home/tau/ Daisuke Matsuzaka Initial of Daisuke Matsuzaka is DM. Program exited with code 046. (gdb), run r.
gdb ( quit q, ). 4: :, (gdb) quit.. ini, segmentation fault. gdb ini,. 1,2, 3, (gdb) run Daisuke.,. (gdb) run Daisuke Starting program: /home/tau/ini Daisuke Program received signal SIGSEGV, Segmentation fault. 0x080483a7 in main (argc=2, argv=0xbf8815d4) at ini.c:5, char f = fn[0]; segmentation fault, ( G1.1.4). Segmentation fault, C, p, p[i], *p, p->f, ( ) fn, fn[0]., fn. print. print gdb. (gdb) print fn $4 = 0x0 (gdb) print fn[0] Cannot access memory at address 0x0 (gdb) 0x0 ( 0. 16 ),., 0,. 0x0, print fn[0] (Cannot access memory at address 0x0)., 0x0,, argv[0], argv[1], argv[2] 0x0.
G1.1.4 GDB segmentation fault 6.2 (bt, up, down), segmentation fault, segmentation fault,. (bt), (up/down).,., fn[0], get first char. char get first char(char * s) { return s[0]; } main(int argc, char ** argv) { char * gn = argv[1]; char * fn = argv[2]; char g = get first char(gn); char f = get first char(fn); printf( initial of %s %s is %c%c.\n, gn, fn, g, f); } -g,,,, 3 return s[0]; segmentation fault. (gdb) r Daisuke Starting program: /home/tau/ini2 Daisuke
Program received signal SIGSEGV, Segmentation fault. 0x0804837a in get first char (s=0x0) at ini2.c:3 s, s[0],. (gdb) print s $1 = 0x0 (gdb) print s[0] Cannot access memory at address 0x0, bt (backtrace),,. (gdb) bt #0 0x0804837a in get first char (s=0x0) at ini2.c:3 #1 0x080483c2 in main (argc=2, argv=0xbfb59894) at ini2.c:10, main get first char., s=0x0,,,. up. up, Emacs, main, get first char., fn,, main. (gdb) up #1 0x080483c2 in main (argc=2, argv=0xbfb59894) at ini2.c:10 (gdb) p fn $2 = 0x0, down. 6.3 (break, next, step, cont, fini),.,, ( ).. segmentation fault, print bt, up, down. 1,2 :, M-x gdb. 3 : run,., main. (gdb) break main Breakpoint 1 at 0x8048393: file ini2.c, line 7. break b. 4 :. (gdb) r Starting program: /home/tau/ini2 Breakpoint 1, main (argc=1, argv=0xbf8f3634) at ini2.c:7 main. Emacs.
. break continue :., run, continue (run ). step :1. ( ). next :1. step,.,.,. : (gdb) break : (gdb) b main : (gdb) break : : (gdb) b ini.c:5 Emacs :, Emacs, C-x SPACE. 6.4 :. display, finish. gdb, info. q(uit) r(un) p(rint), disp(lay) bt, up, down b(reak), n(ext), s(tep), c(ont), fini(sh) 7. C C. C,,, ( ),. 1.7 HP,.,., -Wall,. : problems.tar.gz,. $ tar xvf problems.tar.gz
, problems 00, 01,...,..,... ( ),,,.,. 1: $ cd 00 $ gcc p00.c # $./a.out # M-x compile. 2: $ cd 03 $ gcc p03.c $./a.out 3 # p03.c 3^2 =8 #!.,,.,.,.,,.,,,.,,.,, (, ). : gcc..,. gcc,. :,. segmentation fault assertion ( Assertion x == y failed. ) ( fopen: No such file or directory ) :,,,.,,,, (, 10 + 20 = 50, ).,., C,,, ( )..,,,, C ( ).
M-x compile, C-x, segmentation fault,, M-x gdb,.,. segmentation fault.,, ( ), (*p, p[i], p f ). assertion ( ), M-x gdb., exit, abort (break exit). up exit/abort,.,,.,.,.,. printf, printf. 8. Linux 8.1,. (1), (2), Emacs. 8.2 CPU, CPU,, ( ). (1) (2). (3),,,.. 8.3,,. 1 GUI : (1), (2)., (?). 2 apt-get : ( ), root,, apt-get. iperf, $ sudo apt-get install iperf., $ apt-cache search
., $ apt-cache search game,.,, $ sudo apt-get install, 10., Ubuntu,,. $ sl sl : sudo apt-get install sl bash: sl: command not found GUI,,. apt-cache search.
2,. 2 4 C (fopen, fprintf ), UNIX., open, read, write, close 4.,.,,., (/dev/dsp),.,., (Linear PCM).,, gnuplot,. 1. 1.1.. 1: : int fd = open(filename, OWRONLY O CREAT O TRUNC, 0644);,,. O WRONLY, filename, O CREAT, filename, O TRUNC, filename ( ), 0644, filename,, 0644., creat. creat(filename, 0644). 2: :,.. unsigned char data[n]; data[0] =... ; data[1] =... ;... 3: : write(fd, data, N);, data[0], data[1],..., data[n 1] N filename., write(fd, a, n), a n, fd ( ),., N, (1 )..?
( 1, 5. )., write., write,. 4: : close(fd); write. open,, ( ).,,. open write,,. (open), (write ) (fd ).,,. 2.1 0 0, 1 1,..., 255 255,, 256 my data C mk data.c. mk data.c, open, write, close my data., (.h ) #include (#include <????.h>). #include, man, ( 1, 5. )., C, #include,,. 2.2 mk data.c, my data, ls (-l ), 256., cat Emacs,,. 2.3 0 228 1 186 2 186 3 229 4 191 5 151, 6 hitoshi hitoshi.c,. :. 012345678910111213...253254255
2,. 228186186229191151 0 0, 0, 2 00000000 8, 0.,., ( ) (1). (2),. (3) 1 8 bit, 1 256. (4) 0 255,, 0... 255.,, X 0,..., 255 X 0,..., 255 X, X,,., ( ),., ( ), 0... 255,.,, fprintf, fprintf(fp, hello\n );, hello,,?.,,. unsigned char data[6]; data[0] = 104; data[1] = 101; data[2] = 108; data[3] = 108; data[4] = 111; date[5] = 10; write(fd, data, 6);.,,,.
,,,,, (. ),.,,, ASCII, a 97, b 98, c 99,...,. 10., hello\n, 104, 101, 108, 108, 111, 10. Emacs, abcdefg...,.,,,,., 10, 20, 30, 40, 10 20 30 40,,. ( 10 20 30 40 ), 49, 48, 32, 50, 48, 32, 51, 48, 32, 52, 48.. 1.2 od. $ od -t u1. 2.4 od, my data,. hitoshi. od, -t (t type ),,. -t u1,, 1 unsigned., 0,..., 255,., -t d1, 128,..., 127. -t u2 2 16 (0,..., 65535).,.. od,,,,,. 1.3, od,,. 2, my data,. C.,,. (1), main. (2) main,. main(int argc, char ** argv), (int char **). (3) (argc), ( ), argv. (4),
$./mk data foo, argv[0] =./mk data argv[1] = foo,, argc = 2 (, argv argc). 2.5./mk data,. 1.4 int fd = open(filename, OWRONLY O CREAT O TRUNC, 0644);,.., ( ),.,,,., (,,, ).,.,,,.,,. open,, 1.. int fd = open(filename, OWRONLY O CREAT O TRUNC, 0644); if (fd == 1) { /* */ }?,, perror,.. int fd = open(filename, OWRONLY O CREAT O TRUNC, 0644); if (fd == 1) { perror( open ); exit(1); } exit(1),.,,. perror exit. man #include. 2.6 mk data2.c, open.. /foo bar/baz (, bar ),,
void die(char * s) { perror(s); exit(1); },.?,,,,,.,,.,.,,., open,., write.. write,,.,,,.,,,.. 2.7 write, man,,..,..,.,, ( ), if (...... ) { perror( ); exit(1); } 1,., 1.,.,,,,.,.,.,,,,,.,,.
1.5.. : fd = open(filename, ORDONLY); O RDONLY,... :, unsigned char data[n]; : n = read(fd, data, N);, data[0], data[1],..., data[n 1],. read(fd, a, n), fd ( ) n, a. write, N,..?., read., read,. : close(fd); read. :? n = read(fd, data, N);, N., (1 ),. 1., 0.,,.,. while (1) { n = read(fd, data, N); if (n == 1) { perror( read ); exit(1); } if (n == 0) break; #... data... } ( N)., END OF FILE, EOF., EOF (, read 0 ),, EOF.,. EOF. 0..
2.8 open,, 2 ( ( 0 ), ) read data.c., my data, 00 11 22... 254 254 255 255.., od (, ). : open, ORDONLY, O WRONLY, ORDWR. int fd = open(filename, ORDWR O CREAT O TRUNC, 0644); : fopen/fprintf, open/read/write 2 4,, fopen, fprintf, fscanf.. FILE * fp = fopen(filename, wb ); if (fp == NULL) { perror( fopen ); exit(1); } fprintf(fp, hello %s san!\n, argv[1]); C. (open/read/write, fopen/fprintf ).,, open, fopen FILE *. fopen fp, write/read ( ),. open, ( ), fopen,,,,,. open, fopen open., FILE (open ) (, )., fprintf, write (, ). fopen/fprintf, open/read/write,. read/write, ( ), fprintf, (%s) (%d)., fgets(data, N, fp), 1 ( ),. read/write, fread/fwrite..
, fopen, C, UNIX Windows. open/read/write UNIX, UNIX,.,?.. fopen/fprintf/fwrite/fread..,, write,.,., fprintf,. 2., open, read/write,, UNIX, open., 3. 0 :, read.,. 10. read(0, data, 10); 1 :, write.,. 10. write(1, data, 10); 2 :, write.,. 10. write(2, data, 10);,.,,,, stdin, stdout, stderr (#include <stdio.h> )., read(0, data, 10); fread(data, 1, 10, stdin);,. write(1, data, 10); write(2, data, 10);,
fwrite(data, 1, 10, stdout); fwrite(data, 1, 10, stderr);. fprintf, fprintf(stdout, hello %s san\n, name); fprintf(stderr, hello %s san\n, name);,. printf. 1, printf( hello %s san\n, name);. UNIX, (redirect), ( )../a.out > filename, filename. open fopen, write(1, data, 10); fprintf(stdout, hello %s san\n, name); printf( hello %s san\n, name);, filename. ( 1, ), open. >,, filename., 2>.,./a.out > filename 2> filename2.,,.,, ( ). 3. Linux (, Linux ),,., /dev/dsp,,... 2.9, /dev/dsp.,, Ctrl-C. $ od -t u1 /dev/dsp
$./read data /dev/dsp./read data, 2.8., 127, 128, 129.,,.,,,..,., /dev/dsp,. $ cat /dev/dsp > data #, Ctrl-C cat,, cat,. (, ). int main(int argc, char * argv) { int fd = open(argv[1], O RDONLY); unsigned char data[1000]; while (1) { int n = read(fd, data, 1000); if (n == 1) { perror( read ); exit(1); } if (n == 0) break; write(1, data, n); } return 0; }, /dev/dsp, data,.., /dev/dsp. 2.10, /dev/dsp. $ cat data > /dev/dsp, data.,,,.,. /dev/dsp /dev/dsp,.,,
(, /dev/dsp, /dev/dsp. )., CPU,.,,, (API). UNIX, API, Open Sound System (OSS) API, /dev/dsp,,.,,, USB,. UNIX,, (, open sound card, read sound card, etc.), (1) (open, read, write, close, etc.). (2) open, read, write, close, etc. (, )..,.,.,., ( API), UNIX, API., ( ), USB 2.,,,,., /dev/dsp,,, ( ). 4.,.,,,,,.,,, ( ),,. ( ),,,.., 1, 8.1., (1) (2),, ( G1.2.1).,. HP. 5. /dev/dsp /dev/dsp, /dev/dsp, (y = f(t)), (sampling) Linear Pulse Code Modulation (Linear PCM) ( G1.2.2). bit (, sampling resolution), 1 (
G1.2.1 G1.2.2 /dev/dsp (Linear PCM), sampling rate), ( ),,.. : 8bit (256 ) : 8kHz (8000 / ) : 1 ( ) 1 / 8000 / 1 = 8000 /. 1 1 256,, 0 255, 128.,, 128. 2.11 cat /dev/dsp 5,.,. cat /dev/dsp,.
6. gnuplot /dev/dsp. gnuplot, ( ).. gnuplot, x, y,., 00 11 24 39 4 16 5 25 6 36 7 49 8 64.. (a.txt ),. $ gnuplot ( ) gnuplot> plot a.txt gnuplot>, ( G1.2.3).,.. gnuplot, plot, (a.gpl ) plot a.txt pause 1, $ gnuplot a.gpl (pause 1,,, ). /dev/dsp? 2.9. 2.12 2.9 read data /dev/dsp, gnuplot.., read data, ( ), 0 y =0 ( 128 ). /dev/dsp Linear PCM,,.
G1.2.3 gnuplot 2.13 : y = A sin (2πft) /dev/dsp. A ( ), f ( )., atof (#include ).. f = 440Hz, A.
3..,,,.
4 1. 1.1 AD AD Analog-Digital 1.2 DFT Discrete Fourier Transform C 1.3 FIR C FIR Finite Impulse Response 2. 2.1 2 f F a F s 2F a 5kHz 10kHz 1 2.2 2F a 8kHz X(ω) G1.4.1 ω s 2 G1.4.2 8kHz 2.3 48kHz AD 8kHz DA 8kHz AD 1 CD 44.1kHz 16bit 22.05kHz 20kHz 2 δ(t)
G1.4.1 x(t) x s (t) G1.4.2 48kHz DA G1.4.3 48kHz AD 6 8kHz 8kHz AD 5 48kHz 8kHz 8kHz 48kHz DA 2.4 Discrete Fourier Transform, DFT x(t) T x(t) = a 0 2 + (a n cos nω 0 t + b n sin nω 0 t) (ω 0 = 2π T ) n=1 e jθ = cos θ + j sin θ x(t) = c n e jnω 0t n= (ω 0 = 2π T ), c n = 1 T T 2 T 2 x(t)e jnω 0t dt 1) x(t) x(t) 時間間引き ゼロ詰め G1.4.3
2) e jnω0t x(t) T x(t) x(t) = 1 2π X(ω)e jωt dω, X(ω) = x(t)e jωt dt ω e jωt X(ω) x(t) DFT T s N x s (n) x s (n) =x(nt s ) n =0,..., N 1 DFT DFT x s (n) = 1 N N 1 k=0 X s (k)e j 2π N kn, X s (k) = N 1 n=0 x s (n)e j 2π N kn (k =0,..., N 1) e j 2pi N kn n k NT s k k NT s [Hz] DFT DFT x s (n) x r s(n) x i s(n) DFT x r s(n) = 1 N x i s(n) = 1 N X r s (k) = X i s(k) = N 1 k=0 N 1 k=0 N 1 n=0 N 1 n=0 X r s (k) cos(2πnk/n) X i s(k) sin(2πnk/n) X r s (k) sin(2πnk/n)+x i s(k) cos(2πnk/n) x r s(n) cos(2πnk/n)+x i s(n) sin(2πnk/n) x r s(n) sin(2πnk/n)+x i s(n) cos(2πnk/n) C x r s[],x i s[] Xs r [],Xs[] i C DFT DFT log X s (k) = log Xs r2 (k)+x s2 i (k) k ( X i s X s (k) = arctan (k) X ) s r(k) 3 k =0,..., N 1 0,..., N 1 1 N T s (= N 1 N F s) DFT F s /2 G1.4.1 2.5 FIR Finite Impulse Response FIR 4 δ(n) = { 1 (n = 0) 0 (n 0) 3 4 s
実線 : 直接音 波線 : 間接音 "impulse_response.dat" G1.4.4 0 500 1000 1500 2000 2500 3000 3500 4000 sample index x(n)(n =0, 1, 2,...) x(n) = x(k)δ(n k) (n =0, 1, 2,...) k=0 x(n) δ(n) H h(n)(n =0, 1, 2,...) h(n) i(n) o(n) i(n) =δ(n) H o(n) =h(n) (n =0, 1, 2,...) x(n) k δ(n k) h(n k) i(n) =x(n) = x(k)δ(n k) H o(n) = x(k)h(n k) = i(k)h(n k) (n =0, 1, 2,...) k=0 o(n) = i(k)h(n k) = h(k)i(n k) (n =0, 1, 2,...) k=0 k=0 h(n) h(n) k=0 h(n) = 0 (n > n 0 ) Finite Impulse Response (FIR) 2.6 FIR G1.4.4 A B G1.4.4 h(n) h(n) G1.4.5 d p d s a(0) a(k)(k >0) 1 (k = 0) a(k) = a p (k = 1) a s a(k 1) (k >1) k=0
振 幅 直接音 a(0) 間接音 a(1) a(3) a(2) a(4) a(5) d p d s d s d s d s 時間 a p 0.25 0.25 a s 0.4 0.4 d p 50 [ms] 100 [ms] d s 25 [ms] 50 [ms] K 10 10 G1.4.5 z n 1 a 1 n 1 の時間遅れ n K の時間遅れ X(z) z n 2 z n 3 a 2 a 3 Y (z) X(z) z 1 z 1 z 1 z 1 z 1 z 1 a 1 a 2 a 3 a K z n K a K Y (z) G1.4.6 G1.4.4 2 0 (k = 0) d(k) = d p (k = 1) d s + d(k 1) (k >1) a p a s i(n) o(n) FIR o(n) = K a(k)i(n d(k)) k=0 G1.4.4 5 G1.4.6 G1.4.6 FIR 3. web 2 4.4 4.1 F s AD F s /2[Hz] Low Pass Filtering, LPF LPF 48kHz, 16kHz, 8kHz 16bit web 5 3
web 4.2 G1.4.3 48kHz 6 8kHz 48kHz 4kHz 8kHz 1 8kHz 8kHz 5 48kHz 48kHz 4kHz 4.1 48kHz 4.3 C DFT x r s[],x i s[] X r s [],X i s[] x r s[],x i s[] GNUPLOT [ ] N 1 log 10 N {Xr s 2 (k)+xs i 2 (k)} web 4.4 DFT 6 4.1 4.2 8kHz, 16kHz, 48kHz N = 256, 512, 1536 32[msec] N web 4.1, 4.2 DFT 7 4.5 web web web 6 4.1 4.2!!! 7 4.1, 4.2 4.4
FIR GNUPLOT 4.6 FIR G1.4.5 4. web web PC C B. W. D. M. (1989) (1992) CQ (2006) C (2008)
G2. : 2
5 1. (or ),,.,,,,.,,. 5.1 wireless network ZENKIJIKKEN,. http://g1g2g3.logos.ic.i.u-tokyo.ac.jp/. 2. 2.1 IP, Web.,., Internet Protocol (IP). IP, IP,. IP ( ), IP (Local Area Network. LAN LAN). IP, 133.11.238.2, 0-255 4., 8 4 = 32., IP ver. 4 (IPv4) IP, IP ver. 6 (IPv6), FEDC:BA98:7654:3210:FEDC:BA98:7654:3210, 16 4 (16 ) 8 =128. IP IP ver. 4., IP 1, IP. UNIX, IP, ifconfig (Windows, ipconfig). 5.2 ifconfig. $ ifconfig,,, LAN, LAN. wlan0.
$ ifconfig wlan0 wlan0., IP. UNIX, IP,, ping. Windows ping. 5.3 ifconfig IP, ping. IP ping,. ping,. $ ping IP $ ping www.yahoo.co.jp $ ping IP, IP ping,..,,. IP,, IP, ( ). ( ),, LAN, (default gateway),. IP,, IP ( IP )., 133.11.238.0/25, address/n. address IP, n ( )0... 31. address n. 133.11.238.0/25, 133.11.238.0, 133.11.238.1,..., 133.11.238.127. 133.11.238.10 IP, 133.11.238.0/25 IP IP,,, (LAN) ( ), default gateway, ( ),,
.,.. LAN, IP, Internet (Inter Network)., IP 2,,. 3, default gateway,.,. ifconfig. subnet mask ( ). address/n, 32 bit n 1, (32 n) 0 IP. 133.11.238.0/25, 25 1 IP, 255.255.255.128., 133.11.238.0/25, a & 255.255.255.128 = 133.11.238.0 IP a,. Default gateway, route., IP, ( ; ),,. default gateway,. $ route -n IP Metric Ref 133.11.238.0 0.0.0.0 255.255.255.128 U 2 0 0 wlan0 0.0.0.0 133.11.238.1 0.0.0.0 UG 0 0 0 wlan0 2.2 IP IP (PC ) IP, default gateway,, default gateway LAN,, IP. default gateway ( IP = ),, ( ),. default gateway, IP IP gateway LAN.,.,. :, IP,., IP IP, IP.. IP :,. IP. IP IP. IP.
192.168.0.0/16 192.168.0.0... 192.168.255.255 172.16.0.0/12 172.16.0.0... 172.31.255.255 10.0.0.0/8 10.0.0.0... 10.255.255.255 IP, IP,., IP, IP, LAN IP. IP. IP ( ), LAN. LAN, IP., PC IP. IP PC,., IP,.,? Web, ( )?. IP (, NAT. ), IP IP, PC IP. Web,. IP PC. 2.3 UDP TCP IP,,. IP., UDP TCP IP. IP, IP (, ).,,.., 7-3-1,,., IP, UDP (User Datagram Protocol). 16, IP, 65,536 UDP. IP, ( ).,,..,.,,.,,., IP, TCP (Transfer Control Protocol). Web,,, TCP,., TCP/IP.,, LAN., TCP.
2.4 DNS, IP, IP.,, IP, DNS ( ). DNS, www.yahoo.co.jp www.cnn.com, web,. DNS IP, IP, DNS (Domain Name System). DNS DNS (IP ). DNS, (DNS ). IP (UDP). PC, DNS, (Primary DNS ). DNS, DNS,,., (, ) 4, primary DNS.,, IP. UNIX, DNS DNS IP. nslookup, host, dig, host. Windows, nslookup. 5.4 host www.yahoo.co.jp, (Web ) IP. $ host www.yahoo.co.jp IP, http://www.yahoo.co.jp/,. yahoo., IP, DNS, (/etc/hosts), NIS, LDAP,,., DNS. 2.5. ( ),. IP : :, LAN (gateway ) default gateway: IP. ( ). DNS : (DNS ) IP,,, DHCP (Dynamic Host Configuration Protocol). PC, DHCP, PC.. ifconfig. (?) 3, G2.2.1.
G2.2.1 2/3/4 ( ) IP IP, IP UDP IP. TCP DNS IP (www.yahoo.jp ) DNS., IP DHCP DHCP 3. nc TCP/IP,, TCP UDP, IP.,. Internet Explorer Firefox, Windows, TCP UDP.. UNIX Windows, (Application Programming Interface; API)., TCP UDP,.. netcat (nc ), (1) IP + (2) (3).,,,,.,,.,,. :,.,,,. : IP,.,. nc, -l,., 0 65,535, 1,023,,,., ( 10,000 )., nc, (UDP )TCP. : $ nc -l 50000 nc, IP. : $ nc IP 50000 IP, ifconfig, IP
.,, (IP ).,., 127.0.0.1. (A, B ), A B, B. (B A ). 5.5 nc 2,. 5.6 ( ),. 5.7?. 5.8 man nc (man nc).,.., TCP, UDP. nc,,,,,,. 5.9 nc,. UDP., /dev/dsp,. /dev/dsp,. 5.10 nc,,.? TCP, UDP..,.. nc, nc (C ),,,,. nc.
4. nc nc,,.,, ( ).,.,. URL (Uniform Resource Locator) ( : http://www.ee.t.u-tokyo.ac.jp/j/banner/life.html), URL. URL, (+ ), (+ ),, = http (+ ) = www.ee.t.u-tokyo.ac.jp (, 80 ) (+ ) = /j/banner/life.html. URL, (1) www.ee.t.u-tokyo.ac.jp 80,,., DNS IP. (2), /j/banner/life.html. (3),,.,,. 2,, 3,, HTTP (Hyper Text Transfer Protocol),,. 1:, nc,, web. $ nc -l 50000 2: ( Firefox),, /j/banner/life.html,. IP 192.168.1.100,. http://192.168.1.100:50000/j/banner/life.html URL (www.ee.t.u-tokyo.ac.jp), 192.168.1.100:50000, :50000,., (http 80 ).,,., nc,.,. $ nc -l 50000 GET /j/banner/life.html HTTP/1.1 Host: 191.168.1.100:50000 User-Agent: Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.0.6) \ Gecko/2009020911 Ubuntu/8.04 (hardy) Firefox/3.0.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate
Accept-Charset: Shift JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive,,, GET. 3:,,.,,,,. 4:,. nc ( ).,, ( : request). $ nc -l 50000 > request request, ( )., nc,,. (80). $ nc -q -1 www.ee.t.u-tokyo.ac.jp 80 < request > response -q -1,, nc request (, ). response Ctrl-C. 5: response,., (Not Found)., request 2 Host: 192.168.1.100:50000., request, ( www.ee.t.u-tokyo.ac.jp Web )., Host: www.ee.t.u-tokyo.ac.jp, (?).,,., $ firefox response,. 5. iperf iperf, nc. ( ),, 10, ( ). 5.11 iperf,. (
)., nc?
6 ( ) 1.. UNIX Windows, (API). API.,,, IP ( ). ( ),. IP UDP TCP, ( )., TCP. TCP.. 1: (socket) 2: (connect) 3: (send write), (recv read) 4:, (close), socket open. send, recv write, read., send write, recv read. close API. UNIX. connect,,,.. unsigned char data[n]; int s = socket (); connect (s, 192.168.1.100, 50000); read(s, data, N); data[0] =...; data[1] =...;...; write(s, data, N); close(s); # data N # data N write, read,., UDP, connect, send/recv sendto/recvfrom API. sendto/recvfrom send/recv IP, (, TCP, UDP ). API, (, API ). API,,,.. IP.
, UNIX. IP IPv4 IPv6. API,., API (IPv4, IPv6, UNIX etc.). TCP, UDP, IP API., TCP, socket(tcp), socket(..., SOCK STREAM),.., API, IP. IP,, IP, UNIX, ( /tmp/foo ). connect, connect( 192.168.1.100, 50000). (sockaddr), API,, IP., C., man socket API, IP. man connect, IP 192.168.1.100 50000., API. 2. API 2.1 #include IP. API.,, (., )., API man, IP #include. #include <netinet/in.h> #include <netinet/ip.h> #include <netinet/tcp.h>, $ man 7 ip $ man 7 tcp $ man 7 udp., TCP/IP. 2.2 socket. int s = socket(pf INET, SOCK STREAM, 0); open. (, man socket, #include, ).,. open, read/write/close., PF INET, IPv4 ( ) IPv6 PF INET6, UNIX, PF UNIX.
SOCK STREAM, TCP. UDP, SOCK DGRAM.,,,,. 2.3 connect IP. connect, IP. connect(s, 192.168.1.100, 50000),, IP API,., IP 192.168.1.100 50000. struct sockaddr in addr; addr.sin family = AF INET; # IPv4 addr.sin addr.s addr = inet addr( 192.168.1.100 ); # IP... addr.sin port = htons(50000); #... int ret = connect(s, (struct sockaddr *)&addr, sizeof(addr)); # connect, connect addr (&addr), (sizeof(addr)). addr, sockaddr in, IPv4. 3,. sin family,. addr.sin family = AF INET;, IPv4., connect, IP,. sin addr.s addr IP., 192.168.1.100, IP, 32 bit inet addr. sin port,. addr.sin port = 50000,, htons,.., connect.. #include. : inet addr vs. inet aton inet addr, inet aton., addr.sin addr.s addr = inet addr( 192.168.1.100 );, inet aton( 192.168.1.100, &addr.sin addr);. inet addr. inet aton, IP, 0., inet addr., inet aton. 2.4 send/recv ( write/read). send write, recv read,., send/recv, write/read,., ( send/recv, Windows,, ). n = send(s, data, N, 0); n = write(s, data, N);
n = recv(s, data, N, 0); n = read(s, data, N); read, write. 2.5 close/shutdown close(s); open API.,., read/recv, close,, 0 ( )., EOF EOF.,. close, (write) (read),,,., close,,. shutdown API. shutdown(s, SHUT WR);, ( send )EOF., read. 6.1 C client recv.c API. IP, EOF, nc, client recv., nc,..., nc, diff.,, md5sum. $ md5sum filename 1a24874fc4ea61095d0cf16da5ee8516 filename 6.2., /dev/dsp,. $./client recv 133.11.238.11 50000 > /dev/dsp,.
6.3 C client send recv.c API. IP EOF, shutdown(s, SHUT WR),, EOF,... $./client send recv 133.11.238.11 50001 < orig file > output file, orig file output file. diff. $ diff orig file output file :?, C. connect. struct sockaddr in addr; addr.sin family = AF INET; addr.sin addr.s addr = inet addr( 192.168.1.100 ); addr.sin port = htons(50000); int ret = connect(s, (struct sockaddr *)&addr, sizeof(addr));, IP ( ).. C, ( ). double 3, 7, ( ), (. printf,,. )., connect, IPv4, IPv6, UNIX,. C, (struct),,.,., 3, struct point { double x; double y; double z; };, 3 double, struct point p;
, p, p.x, p.y, p.z 3 double., p, 3 double. connect API,. IPv4 sockaddr in, IPv6 sockaddr in6, UNIX, sockaddr un. connect,. struct sockaddr in ipv4 addr; struct sockaddr in6 ipv6 addr; struct sockaddr un unix addr;... connect (s1, ipv4 addr,... ); connect (s2, ipv6 addr,... ); connect (s3, unix addr,... );. (connect) ( 2 ), sockaddr in, sockaddr in6, sockaddr un (C ).,,., sockaddr in, sockaddr in6, sockaddr un,. connect 2., struct sockaddr in ipv4 addr; struct sockaddr in6 ipv6 addr; struct sockaddr un unix addr;... connect (s1, &ipv4 addr,... ); connect (s2, &ipv6 addr,... ); connect (s3, &unix addr,... );.,, sockaddr,, struct sockaddr in ipv4 addr; struct sockaddr in6 ipv6 addr; struct sockaddr un unix addr;... connect (s1, (struct sockaddr *)&ipv4 addr,... ); connect (s2, (struct sockaddr *)&ipv6 addr,... ); connect (s3, (struct sockaddr *)&unix addr,... );, connect ( ).,,,,,., sin family.,?,,, C.,,,. 32 bit 32 bit., sockaddr in, sockaddr in6, sockaddr un,., sockaddr in, sockaddr in6, sockaddr un,,.
, (,, ),,,.,,, ( ).,.,,,.,,,.,,, C., connect, struct sockaddr in addr; addr.sin family = AF INET; addr.sin addr.s addr =... ; addr.sin port =... ; int ret = connect(s, (struct sockaddr *)&addr, sizeof(addr));. connect 3 sizeof(addr) 2,,, (IPv4, IP 32 bit, 16 bit, )., 2,,. sin addr.s addr, 192.168.1.100 13, 8 bit 4 32 bit, inet addr. sin port,, htons? htons, host-to-network-short, short (16 bit), 1 2 ( MSB LSB ),. CPU, 8 bit, 16 bit, 32 bit,...., (X) 8 bit, (X, X+1) 16 bit, (X, X+1, X+2, X+3) 32 bit,. CPU, X, X+1 16 bit, (X or X+1) 8 bit, 16 bit MSB (Most Significant Byte; 16 bit 16 bit),. CPU, Intel x86 Little Endian, X+1 MSB., Big Endian, X MSB. Big Endian., htons, Little Endian CPU 16 bit MSB LSB (Big Endian ),.,,,. ( ),.. connect,,, sockaddr in, (bit )CPU,.
7..,,,.
8 ( ) 1. API.,.,, (connect).,,.,. 1: (socket) 2: (bind) 3: (listen) 4: connect (accept) 5: (send write), (recv read) 6:, (close). unsigned char data[n]; int ss = socket (); bind (ss, 50000); listen (ss); s = accept (ss); close(ss); read(s, data, N); data[0] =...; data[1] =...;...; write(s, data, N); close(s); # 50000 # # # write, read,. close(ss), accept. 2. API bind, listen, accept 3., ss socket (ss = socket(... )). 2.1 bind bind,,.,., (IP ), (bind(ss, 50000) ).. struct sockaddr in addr; addr.sin family = AF INET; # bind # IPv4
addr.sin port = htons(50000); #... addr.sin addr.s addr = INADDR ANY; # IP bind(ss, (struct sockaddr *)&addr, sizeof(addr));,, IP, addr ( ), bind. connect. addr 3. IP, IP., INADDR ANY, ( ). IP IP, IP. bind : Address already in use (!) bind., bind.,., 500 11-11,,.,,., close. close,., close.,,. 2.2 listen listen,., (connect )., (accept ).. listen(ss, 10); 2 ( 10 ), connect,,. connect,,., 10. 2.3 accept accept,. listen, listen,, accept. accept,. accept. accept (, ), API. accept,... struct sockaddr in client addr; socklen t len = sizeof(struct sockaddr in); int s = accept(ss, (struct sockaddr *)&client addr, &len); client addr, accept, accept,. accept, client addr sin addr.s addr, sin port
,., 3, ( ) (, 2., )., ( ), (send/recv). 8.1 C, serv send.c. $./serv send,.,., 6.2 client recv. client recv.,, /dev/dsp, /dev/dsp,. 3. iperf ( ),., 1,.,, (Round Trip Time; RTT)., (1 ).., ( )..,,?. ( ),,.,, ( )..,,.,... 8.2 pingpong s.c pingpong c.c. $./pingpong s SZ N,. 1., SZ 1, N. $./pingpong c SZ N,, 1., SZ, 1, N. N, 1 t., (N / t).,. (N ). SZ, gnuplot. SZ 1 10MB
,. SZ iperf?.... s = accept(ss,... ); 1 ; for (i = 0; i < N; i++) { SZ ; 1 ; }... connect(s,... ); 1 ; t0 = ; for (i = 0; i < N; i++) { SZ ; 1 ; } t1 = ; 1 ;. gettimeofday. man.. /* ( : ) */ double current time() { struct timeval tp; gettimeofday(&tp, NULL); return tp.tv sec + tp.tv usec * 1.0E-6; } 4. 8.3 2,.,..,..,,.,.,
,, (. ). ( ),,,, API. HP.
G3. : 3
9...
10...
11.,.., OpenOffice.org, Microsoft PowerPoint, TEX. HP.
12.,.., OpenOffice.org, Microsoft PowerPoint, TEX. HP.