danieleb@6
|
1 function varargout = lotplot(y,wLength,Fs)
|
danieleb@6
|
2 % LOTPLOT plot of the lapped orthogonal transform
|
danieleb@0
|
3 %
|
danieleb@14
|
4 % Example
|
danieleb@14
|
5 % varargout = lappedorthoplot(y,wLength,timeVec)
|
danieleb@14
|
6 %
|
danieleb@0
|
7 % plots a spectrogram-like visualisation of the lapped orthogonal
|
danieleb@0
|
8 % transform coefficients contained in y
|
danieleb@0
|
9 %
|
danieleb@14
|
10 % Input
|
danieleb@0
|
11 % - y: vector containing the lapped orthogonal transform coefficients
|
danieleb@0
|
12 % - wLength: vector containing the lengths of the overlapping windows
|
danieleb@6
|
13 % - Fs: (optional, default=44100) sampling frequency
|
danieleb@0
|
14 %
|
danieleb@14
|
15 % Output
|
danieleb@0
|
16 % - varargout{1}: optionally, the function outputs the matrix containing
|
danieleb@0
|
17 % the spectrogram-like representation.
|
danieleb@0
|
18 %
|
danieleb@14
|
19 % See also lot, ilot
|
danieleb@14
|
20
|
danieleb@14
|
21 % Author(s): Daniele Barchiesi
|
danieleb@14
|
22 % Copyright 2011-2011
|
danieleb@6
|
23
|
danieleb@6
|
24 if ~exist('Fs','var') || isempty(Fs), Fs = 44100; end
|
danieleb@9
|
25 if isscalar(wLength) %create vector of fixed window lengths
|
danieleb@9
|
26 nWindows = floor(length(y)/wLength);
|
danieleb@9
|
27 wLength = wLength*ones(nWindows,1);
|
danieleb@9
|
28 end
|
danieleb@6
|
29
|
danieleb@0
|
30 nWindows = length(wLength);
|
danieleb@0
|
31 maxLength = max(wLength);
|
danieleb@0
|
32 sigLength = sum(wLength);
|
danieleb@0
|
33
|
danieleb@0
|
34 timeVec = linspace(0,sigLength/Fs,10*ceil(sigLength/min(wLength)));
|
danieleb@0
|
35
|
danieleb@0
|
36 S = zeros(maxLength,length(timeVec));
|
danieleb@0
|
37 timeSupp = @(p) floor(wLength(p)*length(timeVec)/sigLength);
|
danieleb@0
|
38 interpFun = @(p,v) interp1(1:wLength(p),abs(v),linspace(1,wLength(p),maxLength))';
|
danieleb@0
|
39 S(:,1:timeSupp(1)) = repmat(interpFun(1,y(1:wLength(1))),1,timeSupp(1));
|
danieleb@0
|
40 for i=2:nWindows
|
danieleb@0
|
41 S(:,sum(timeSupp(1:i-1))+(1:timeSupp(i))) = ...
|
danieleb@0
|
42 repmat(interpFun(i,y(sum(wLength(1:i-1))+(1:wLength(i)))),1,timeSupp(i));
|
danieleb@0
|
43 end
|
danieleb@0
|
44
|
danieleb@0
|
45 SmagdB = mag2db(S);
|
danieleb@0
|
46 if nargout, varargout{1} = SmagdB; end
|
danieleb@0
|
47
|
danieleb@0
|
48 surf(timeVec,1:maxLength,SmagdB,'EdgeColor','none');
|
danieleb@0
|
49 axis xy; axis tight;
|
danieleb@0
|
50 colormap(jet);
|
danieleb@0
|
51 view(0,90);
|
danieleb@6
|
52 set(gca,'YScale','log'); |