comparison _misc/featureextraction/.svn/text-base/myframefft.m.svn-base @ 8:b5b38998ef3b

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