function r = dfftwav(wavfile) %% settings spectrumwidth = 96; spectrumkeep = 24; normcutoff = 5; lumpwidth = 128; lumpkeep = 32; % get ready [numsamples numchannels] = wavread(wavfile,'size'); samplespersecond = 44100; chunkspersecond = 20; samplesperchunk = samplespersecond / chunkspersecond; numchunks = numsamples / samplesperchunk; lumpsize = chunkspersecond * 30; numlumps = numchunks / lumpsize; pos = 1; % walk thru wav all = []; for l = 1:numlumps lump = []; for i = 1:lumpsize last = pos + samplesperchunk - 1; if last > numsamples last = numsamples; end % [pos last] bit = wavread(wavfile,[pos,last]); % fft y = fft(bit,spectrumwidth*2); pyy = y.* conj(y) / spectrumwidth / 2; rpyy = pyy(1:spectrumkeep,:)'; lump = [ lump ; rpyy ]; % rpyy pos = pos + samplesperchunk; end % normalize lump [h w] = size(lump); for col = 1:normcutoff lump(:,col) = lump(:,col) / (normcutoff + 1 - col); end % fft lump y = fft(lump,lumpwidth*2); pyy = y.* conj(y) / lumpwidth / 2; rpyy = pyy(1:lumpkeep,:)'; [w h] = size(rpyy); row = reshape(rpyy,[1 w*h]); all = [ all ; row ]; % [l numlumps] end r = all';