samer@32: function wig = wigner(sig,m,l,k,win) samer@32: % Wigner -- Wigner-Ville Distribution. This version samer@32: % operates on an entire signal in a vector. samer@32: % Usage samer@32: % wig = wigner(sig,m,l,k,win) samer@32: % Inputs samer@32: % sig 1-d signal samer@32: % m half window length (must be power of 2) samer@32: % l number of frequencies (ie rows in output) samer@32: % k window step (defaults to 1) samer@32: % win half window of size m+1 samer@32: % Outputs samer@32: % wig complex-valued matrix representing the Wigner-Ville samer@32: % distribution of zero-extended signal with rows corresponding samer@32: % to frequencies and columns corresponding to times. samer@32: % samer@32: % Side Effects samer@32: % Image Plot of the Wigner-Ville distribution samer@32: % samer@32: samer@32: sig = sig(:); samer@32: n = length(sig); samer@32: samer@32: if nargin<4 k = 1; end samer@32: if nargin<3 l = m+1; end samer@32: if nargin<5 win = ones(m+1,1); end samer@32: samer@32: f = [zeros(m,1); sig; zeros(m,1)]; samer@32: wig = zeros(l,floor(n/k)); samer@32: ix = 0:m; samer@32: samer@32: col=1; samer@32: for t=1:k:n, samer@32: tplus = m + t + ix; samer@32: tminus = m + t - ix; samer@32: R = win .* ( f(tplus) .* f(tminus) ); samer@32: x = [ R(1:m); R(m+1:-1:2) ]; samer@32: y = fft(x); samer@32: wig(:,col) = real(y(1:l)); samer@32: col = col+1; samer@32: end samer@32: