annotate lotplot.m @ 17:0da5eb32e49d tip

minor changes
author Daniele Barchiesi <daniele.barchiesi@eecs.qmul.ac.uk>
date Thu, 10 Nov 2011 15:53:06 +0000
parents 2e42f5fb764d
children
rev   line source
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
daniele@17 34 timeVec = linspace(0,sigLength/Fs,nWindows);
danieleb@0 35
daniele@17 36 S = zeros(maxLength,nWindows);
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))';
daniele@17 39 S(:,1) = repmat(interpFun(1,y(1:wLength(1))),1,1);
danieleb@0 40 for i=2:nWindows
daniele@17 41 S(:,i) = ...
daniele@17 42 mag2db(repmat(interpFun(i,y(sum(wLength(1:i-1))+(1:wLength(i)))),1,1));
danieleb@0 43 end
danieleb@0 44
daniele@17 45 if nargout, varargout{1} = S; end
danieleb@0 46
daniele@17 47 surf(timeVec,(1:maxLength)/maxLength*Fs/2,S,'EdgeColor','none');
danieleb@0 48 axis xy; axis tight;
danieleb@0 49 colormap(jet);
danieleb@0 50 view(0,90);
daniele@17 51 set(gca,'YScale','log');
daniele@17 52 xlabel('time (sec)');
daniele@17 53 ylabel('frequency (Hz)');