samer@32: % specgrm - Time-Varying Spectrum samer@32: % samer@32: % specgrm :: samer@32: % X:[[T]] ~'signal of length T', samer@32: % N:natural | H:[[N]] ~'window length or window', samer@32: % M:natural ~'hop size', samer@32: % options { samer@42: % fs :: nonneg/1 ~'sampling rate'; samer@42: % range:: [[2]] ~'range for tfdimage' samer@32: % } samer@32: % -> [[1+N/2,floor(T/M)]] ~'sequence of short term spectra'. samer@32: % samer@32: % Examples: samer@32: % Y1=specgram(x,hanning(256),128,'fs',44100) samer@32: % samer@32: % Side Effects samer@32: % Image Plot of the spectrogram if no output samer@32: samer@32: function y=specgrm(x,w,m,varargin) samer@32: if length(w)==1, H=ones(w,1); samer@32: else H=w; end samer@32: if nargin<3 m=[]; end samer@32: samer@32: n = length(H); if isempty(m), m=n/2; end samer@32: if n>m, bufargs={'nodelay'}; else bufargs={}; end samer@32: y = powspec(diag(sparse(H))*buffer(zeropad(n-m,x),n,n-m,bufargs{:})); samer@32: samer@32: % Make Spectrogram Display if no arg out samer@32: if nargout==0 samer@42: opts=options('fs',1,'range',13.5,varargin{:}); samer@42: samer@43: tfdimage(y,n,m,opts.fs,opts.range,opts); samer@32: clear y; samer@32: end samer@32: samer@32: