matthiasm@8: matthiasm@8: % segment audio data into overlapping frames and take fft of each frame matthiasm@8: matthiasm@8: function [fftframes,info] = bigframefft(audiodata, info) matthiasm@8: matthiasm@8: fprintf(1,'framefft\n'); matthiasm@8: matthiasm@8: info.undertest = [info.undertest '\nfft']; matthiasm@8: matthiasm@8: % set window length matthiasm@8: win = info.windowlength; matthiasm@8: matthiasm@8: matthiasm@8: % Pad audio with zeros so that first analysis frame corresponds with first matthiasm@8: % audio sample matthiasm@8: matthiasm@8: pad = zeros((win/2),1); matthiasm@8: matthiasm@8: %audiodata = [pad; audiodata; pad]; matthiasm@8: matthiasm@8: % find size of input matthiasm@8: ilength = length(audiodata); matthiasm@8: matthiasm@8: matthiasm@8: %pad audio data matthiasm@8: audiodata = [pad; audiodata; pad]; matthiasm@8: matthiasm@8: % set hop size matthiasm@8: hop = fix(win.*info.overlap); matthiasm@8: matthiasm@8: info.hopsize = hop; matthiasm@8: matthiasm@8: % set number of windows matthiasm@8: num_win = ceil((ilength+1)/hop); matthiasm@8: matthiasm@8: info.numberframes = num_win; matthiasm@8: matthiasm@8: start=1; matthiasm@8: matthiasm@8: fftframes = zeros(win,num_win); matthiasm@8: matthiasm@8: check = ceil(num_win/10); matthiasm@8: matthiasm@8: matthiasm@8: % do fft analysis for each window: matthiasm@8: for i = 1 : num_win; matthiasm@8: matthiasm@8: segment = audiodata(start:(start + win - 1)); matthiasm@8: matthiasm@8: fftframes(:,i) = fft(segment, win)'; matthiasm@8: matthiasm@8: start = start + hop; matthiasm@8: matthiasm@8: if mod(i,check) == 0 matthiasm@8: fprintf(1,'.'); matthiasm@8: end matthiasm@8: matthiasm@8: end; matthiasm@8: fprintf(1,'\n'); matthiasm@8: matthiasm@8: