Mercurial > hg > map
comparison userProgramsTim/enframe.m @ 38:c2204b18f4a2 tip
End nov big change
author | Ray Meddis <rmeddis@essex.ac.uk> |
---|---|
date | Mon, 28 Nov 2011 13:34:28 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
37:771a643d5c29 | 38:c2204b18f4a2 |
---|---|
1 function [f,t]=enframe(x,win,inc) | |
2 %ENFRAME split signal up into (overlapping) frames: one per row. [F,T]=(X,WIN,INC) | |
3 % | |
4 % F = ENFRAME(X,LEN) splits the vector X(:) up into | |
5 % frames. Each frame is of length LEN and occupies | |
6 % one row of the output matrix. The last few frames of X | |
7 % will be ignored if its length is not divisible by LEN. | |
8 % It is an error if X is shorter than LEN. | |
9 % | |
10 % F = ENFRAME(X,LEN,INC) has frames beginning at increments of INC | |
11 % The centre of frame I is X((I-1)*INC+(LEN+1)/2) for I=1,2,... | |
12 % The number of frames is fix((length(X)-LEN+INC)/INC) | |
13 % | |
14 % F = ENFRAME(X,WINDOW) or ENFRAME(X,WINDOW,INC) multiplies | |
15 % each frame by WINDOW(:) | |
16 % | |
17 % The second output argument, T, gives the time in samples at the centre | |
18 % of each frame. T=i corresponds to the time of sample X(i). | |
19 % | |
20 % Example of frame-based processing: | |
21 % INC=20 % set frame increment | |
22 % NW=INC*2 % oversample by a factor of 2 (4 is also often used) | |
23 % S=cos((0:NW*7)*6*pi/NW); % example input signal | |
24 % W=sqrt(hamming(NW+1)); W(end)=[]; % sqrt hamming window of period NW | |
25 % F=enframe(S,W,INC); % split into frames | |
26 % ... process frames ... | |
27 % X=overlapadd(F,W,INC); % reconstitute the time waveform (omit "X=" to plot waveform) | |
28 | |
29 % Copyright (C) Mike Brookes 1997 | |
30 % Version: $Id: enframe.m,v 1.7 2009/11/01 21:08:21 dmb Exp $ | |
31 % | |
32 % VOICEBOX is a MATLAB toolbox for speech processing. | |
33 % Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html | |
34 % | |
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
36 % This program is free software; you can redistribute it and/or modify | |
37 % it under the terms of the GNU General Public License as published by | |
38 % the Free Software Foundation; either version 2 of the License, or | |
39 % (at your option) any later version. | |
40 % | |
41 % This program is distributed in the hope that it will be useful, | |
42 % but WITHOUT ANY WARRANTY; without even the implied warranty of | |
43 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
44 % GNU General Public License for more details. | |
45 % | |
46 % You can obtain a copy of the GNU General Public License from | |
47 % http://www.gnu.org/copyleft/gpl.html or by writing to | |
48 % Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. | |
49 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% | |
50 | |
51 nx=length(x(:)); | |
52 nwin=length(win); | |
53 if (nwin == 1) | |
54 len = win; | |
55 else | |
56 len = nwin; | |
57 end | |
58 if (nargin < 3) | |
59 inc = len; | |
60 end | |
61 nf = fix((nx-len+inc)/inc); | |
62 f=zeros(nf,len); | |
63 indf= inc*(0:(nf-1)).'; | |
64 inds = (1:len); | |
65 f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); | |
66 if (nwin > 1) | |
67 w = win(:)'; | |
68 f = f .* w(ones(nf,1),:); | |
69 end | |
70 if nargout>1 | |
71 t=(1+len)/2+indf; | |
72 end | |
73 | |
74 |