Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Thread Subject:
how to use Wigner ville distribution.

Subject: how to use Wigner ville distribution.

From: HYUNCHUL

Date: 16 Dec, 2013 02:15:15

Message: 1 of 2

I have downloaded a function of Wigner ville distribution like below

function [ nWD, f, t ] = wvd( x, Fs )
%WVD compute discrete wigner-ville distribution
% x - analytic signal
% Fs - sampling frequency

[N, xcol] = size(x);
if N<xcol
    x = x.';
    N = xcol;
end

WD = zeros(N,N);
t = (1:N)/Fs;
f = (1:N)*Fs/(N);

for ti = 1:N
    taumax = min([ti-1,N-ti]);
% taumax = min([ti-1,N-ti,round(N/2)-1]);
    tau = -taumax:taumax;
    WD(tau-tau(1)+1,ti) = x(ti+tau).*conj(x(ti-tau));
end

nWD = 2.*fft(WD);

end

My main problem is that this WVD function always present symmetric peak. For instance, I have a time series (1x50) and I would like to represent the frequency bands from 0-50Hz from the time series. However, I get always a half of the range of the frequency band 0-25Hz. Also, if a timer-series whose central frequency is at above 25hz, the WVD results is distributed due to the limitation of the frequency bands.

Could you please help me out to work out this problem?

Subject: how to use Wigner ville distribution.

From: Bjorn Gustavsson

Date: 16 Dec, 2013 08:12:13

Message: 2 of 2

"HYUNCHUL" wrote in message <l8lnnj$i62$1@newscl01ah.mathworks.com>...
> I have downloaded a function of Wigner ville distribution like below
>
> function [ nWD, f, t ] = wvd( x, Fs )
> %WVD compute discrete wigner-ville distribution
> % x - analytic signal
> % Fs - sampling frequency
>
> [N, xcol] = size(x);
> if N<xcol
> x = x.';
> N = xcol;
> end
>
> WD = zeros(N,N);
> t = (1:N)/Fs;
> f = (1:N)*Fs/(N);
>
> for ti = 1:N
> taumax = min([ti-1,N-ti]);
> % taumax = min([ti-1,N-ti,round(N/2)-1]);
> tau = -taumax:taumax;
> WD(tau-tau(1)+1,ti) = x(ti+tau).*conj(x(ti-tau));
> end
>
> nWD = 2.*fft(WD);
>
> end
>
> My main problem is that this WVD function always present symmetric peak. For instance, I have a time series (1x50) and I would like to represent the frequency bands from 0-50Hz from the time series. However, I get always a half of the range of the frequency band 0-25Hz. Also, if a timer-series whose central frequency is at above 25hz, the WVD results is distributed due to the limitation of the frequency bands.
>
> Could you please help me out to work out this problem?
>
To me it reads as if you have 50 samples in total. Then it is difficult to ever estimate more than 25 Fourier coefficients (as they in general are complex). Read up on the Nyquist frequency and Nyquist rate. Then to get to estimates of Fourier components from 0-50 Hz you need more samples - preferably at higher sampling frequency. Finally to get anything out of the WV it is my understanding that you'd need a longer time-series.

HTH,

Tags for this Thread

No tags are associated with this thread.

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us