Wednesday, January 10, 2007

counting the periods of a signal

This is a noisy wave. And I want to count the periods of its fundamental component.

The resolvement should be around 0.2 T(T is the period of the curve).





The fundamental component can be extracted using DCT or FFT band filtering.
But, as discrete transforms can only archieve integer resoultion in the frequency domain. So the filtered curve lost its period resolution in the time domain.
I tried to fit a curve in the frequency domain to locate the maximum to a 'sub-integer' level, but that only leads to 0.5 Hz improvement, and its not a reliable solution.

Must I use continuous cosine or fourier transform? Or better idea?

What I mean is if the length of this signal is N, then in the frequency domain, we got only N points. 1/N, 2/N,...k/N.
For example (in matlab),
x=[-pi:0.01:pi];
y=cos(x);
dc=dct(y);

plot(dc(1:10));
the singnal y has one period, and its DCT has a peak exactly at dc(3);

For:y1=cos(1.5*x);
plot(y1);
The signal has 1.5 periods
And y2=cos(1.2*x); plot(y2); The signal has 1.2

periods.

y1,y2 now has fractional periods, DCT of them have similar shape with positive and negtive peaks at dc(3) and dc(5), and other small peaks. Only the amplifications are different.
So, DCT can only describe this fraction by noisy data on other subwaves (see pictures below).
How do I detect this fraction(0.5 and 0.2) directly from the frequency domain?
dc=dct(y); plot(dc(1:10));




No comments: