%  specgrm - Time-Varying Spectrum
% 
%  specgrm ::
%     X:[[T]]   ~'signal of length T',
%     N:natural | H:[[N]] ~'window length or window', 
%     M:natural ~'hop size',
%     options {
%		   fs :: nonneg/1	~'sampling rate'
%     }
%  -> [[1+N/2,floor(T/M)]] ~'sequence of short term spectra'.  
%
%  Examples:
%     Y1=specgram(x,hanning(256),128,'fs',44100)
%
%  Side Effects
%    Image Plot of the spectrogram if no output

function y=specgrm(x,w,m,varargin)
	if length(w)==1,	H=ones(w,1); 
	else H=w; end
	if nargin<3 m=[]; end
	
	n = length(H); if isempty(m), m=n/2; end
	if n>m, bufargs={'nodelay'}; else bufargs={}; end
	y = powspec(diag(sparse(H))*buffer(zeropad(n-m,x),n,n-m,bufargs{:}));

	% Make Spectrogram Display if no arg out
	if nargout==0
		tfdimage(y,n,m,getparam(options(varargin{:}),'fs',1));
		clear y;
	end


