samer@32: function Z=wignerdata(m,X) samer@32: % sliding window wigner distribution. feature: samer@32: % - low pass filter because of undersampling of samer@32: % autocorrelation function samer@32: % - windowing of autocorrelation to avoid spectral leakage samer@32: % - temporal smoothing followed by down sampling samer@32: samer@32: N = 2*m+1; % frame size samer@32: samer@32: [ filtB, filtA ] = butter( 5, 0.5); samer@32: samer@32: % make sure frames are N samples long samer@32: samer@32: % lowpass signal, get autocorrelation in wigner form, samer@32: % then short term average (exponential window) by 1st samer@32: % order IIR. samer@32: Im=m+1:2*m+1; samer@32: Ip=m+1:-1:1; samer@32: Z=map(@wiglocal,select(filtA,filtB,X)); samer@32: samer@32: function z=wiglocal(m,Im,Ip,X) samer@32: r=X(Ip,:).*X(Im,:); samer@32: %smoothing?? samer@32: smKernel = gauss_win(128,0.4)'; samer@32: wigR = spdiag(hgauss_win(m,0.5))*r; samer@32: % must filter and subsample wigR here samer@32: smRS = filter2(smKernel, wigR, 'valid'); samer@32: % subsample in time here? samer@32: samer@32: % take real fft using window samer@32: z = abs(fft([smR(1:m,:); smR(m+1:-1:2,:)])); samer@32: end samer@32: end samer@32: samer@32: samer@32: samer@32: