Mercurial > hg > mauch-mirex-2010
annotate _misc/featureextraction/.svn/text-base/myframefft.m.svn-base @ 9:4ea6619cb3f5 tip
removed log files
author | matthiasm |
---|---|
date | Fri, 11 Apr 2014 15:55:11 +0100 |
parents | b5b38998ef3b |
children |
rev | line source |
---|---|
matthiasm@8 | 1 |
matthiasm@8 | 2 % segment audio data into overlapping frames and take fft of each frame |
matthiasm@8 | 3 |
matthiasm@8 | 4 function fftframes = myframefft(audiodata, winlength, overlap, windowkind, varargin) |
matthiasm@8 | 5 |
matthiasm@8 | 6 if nargin > 4 |
matthiasm@8 | 7 nPad = varargin{1}; |
matthiasm@8 | 8 zeropadding = true; |
matthiasm@8 | 9 else |
matthiasm@8 | 10 zeropadding = false; |
matthiasm@8 | 11 end |
matthiasm@8 | 12 |
matthiasm@8 | 13 fprintf(1,''); |
matthiasm@8 | 14 |
matthiasm@8 | 15 win = winlength; |
matthiasm@8 | 16 |
matthiasm@8 | 17 % Pad audio with zeros so that first analysis frame corresponds with first |
matthiasm@8 | 18 % audio sample |
matthiasm@8 | 19 |
matthiasm@8 | 20 pad = zeros((win/2),1); |
matthiasm@8 | 21 |
matthiasm@8 | 22 %audiodata = [pad; audiodata; pad]; |
matthiasm@8 | 23 |
matthiasm@8 | 24 % find size of input |
matthiasm@8 | 25 ilength = length(audiodata); |
matthiasm@8 | 26 |
matthiasm@8 | 27 |
matthiasm@8 | 28 %pad audio data |
matthiasm@8 | 29 audiodata = [pad; audiodata; pad]; |
matthiasm@8 | 30 |
matthiasm@8 | 31 % set hop size |
matthiasm@8 | 32 hop = fix(win.*overlap); |
matthiasm@8 | 33 |
matthiasm@8 | 34 % set number of windows |
matthiasm@8 | 35 num_win = ceil((ilength+1)/win/overlap); |
matthiasm@8 | 36 |
matthiasm@8 | 37 start=1; |
matthiasm@8 | 38 if ~zeropadding |
matthiasm@8 | 39 fftframes = zeros(win,num_win); |
matthiasm@8 | 40 else |
matthiasm@8 | 41 fftframes = zeros(win*(nPad+1),num_win); |
matthiasm@8 | 42 end |
matthiasm@8 | 43 |
matthiasm@8 | 44 check = ceil(num_win/10); |
matthiasm@8 | 45 |
matthiasm@8 | 46 switch windowkind |
matthiasm@8 | 47 case 'hamming' |
matthiasm@8 | 48 window = hamming(win); |
matthiasm@8 | 49 case 'rect' |
matthiasm@8 | 50 window = rectwin(win); |
matthiasm@8 | 51 case 'kaiser' |
matthiasm@8 | 52 window = kaiser(win); |
matthiasm@8 | 53 end |
matthiasm@8 | 54 |
matthiasm@8 | 55 |
matthiasm@8 | 56 % do fft analysis for each window: |
matthiasm@8 | 57 for i = 1 : num_win; |
matthiasm@8 | 58 start = floor(win * overlap * (i-1) + 1); |
matthiasm@8 | 59 if ~zeropadding |
matthiasm@8 | 60 segment = window .* audiodata(start:(start + win - 1)); |
matthiasm@8 | 61 fftframes(:,i) = fft(segment, win)'; |
matthiasm@8 | 62 else |
matthiasm@8 | 63 segment = window .* audiodata(start:(start + win - 1)); |
matthiasm@8 | 64 fftframes(:,i) = fft(segment, win * (nPad+1))'; |
matthiasm@8 | 65 end |
matthiasm@8 | 66 |
matthiasm@8 | 67 % start = start + hop |
matthiasm@8 | 68 |
matthiasm@8 | 69 if mod(i,check) == 0 |
matthiasm@8 | 70 fprintf(1,'.'); |
matthiasm@8 | 71 end |
matthiasm@8 | 72 |
matthiasm@8 | 73 end; |
matthiasm@8 | 74 fprintf(1,'\n'); |
matthiasm@8 | 75 |
matthiasm@8 | 76 |