// Il punto e virgola alla fine delle istruzioni serve ad impedire // a scilab di fare l'eco dei risultati delle operazioni. // ================================================================ // Creo un vettore (una tabella) di 44100 campioni (1 secondo) suono(44100)=0; // definendo l'ultmo campione, scilab crea il vettore e implicitamente azzera tutti i campioni precedenti. // metto campioni in determinati posti con determinati valori: suono(142)=-1.; suono(3456)=0.7; suono (12000)=.5; suono(23567)=-0.35; // Notare che tutti i campioni hanno valore compreso tra -1 e 1. // Le funzioni di scrittura di wav di scilab rinormalizzaranno questi valori // ai valori opportuni, a seconda del numero di bit (a 16 bit, 1 -> 32767, -1 -> -32768) scf(0); clf(0); // apro la finestra 0 di grafico e la pulisco se già esisteva plot(suono); // grafico del suono spettr = fft(suono,-1); // la fft da' una trasformata complessa. -1 indica trasformata. // Nota: scilab risolve automaticamente il problema della lunghezza della frame. // Quindi si possono usare frame di lunghezza non potenza di due (come in questo caso). scf(1); clf(1); // apro la finestra 1 di grafico e la pulisco se già esisteva spettro = abs(spettr); // lo spettro è il valore assoluto della trasformata di fourier plot(spettro); // grafico dello spettro (è lungo il doppio del dovuto, ed è ripetuto) wavwrite(suono,44100,16,"delte.wav"); //scrivo il file wave // Prova di antitrasformazione: suono2 = fft(spettr,1); // 1 indica antitrasformazione scf(2); clf(2); plot(suono2); // Questo grafico è ovviamente uguale a quello di partenza in fig. 0 printf("ho finito!"); // scrive sulla consolle di scilab.