From: Heinrich Acker on
Dear TideMan, David, and Greg,

thank you very much for your replies.

I did look into Goertzel before, but as David mentioned, frequency is input for this algorithm. However, it could still perhaps be useful in a two-stage-solution (coarse/fine). The paper David proposed is simply amazing. This will be the next thing for me to study. Afterwards, I will try the paper TideMan cited (I don't have it yet.)

Heinrich
From: Greg Heath on
On Mar 30, 3:59 pm, "David Young" <d.s.young.notthis...(a)sussex.ac.uk>
wrote:
> GregHeath<he...(a)alumni.brown.edu> wrote in message <0f160983-f1a3-4503-b41a-6ca4fb42d...(a)o24g2000vbo.googlegroups.com>...
>
> ...> 2.http://en.wikipedia.org/wiki/Goertzel_algorithm
>
> ...
>
> Greg- are you sure Goertzel helps? The question is how to find the frequency of the sine wave when there are few cycles in the data. The Goertzel algorithm requires the frequency (or frequencies) to be specified in advance, as I understand it, and >doesn't tell you any more than the DFT can.

My 1st thought was that you can zero pad and
interpolate inside of the fft frequency bins.

My 2nd thought was that you could use Goertzel
to look at the frequencies inside of one fft bin.

Sorry, I have to leave now. Will return tonight.

> I think what is needed is this
>
> http://www.eos.ubc.ca/research/cdsst/Tad_home/max_ent.pdf
>
> or, probably, more recent work that builds on this foundation. The old paper is worth looking at though, because it sets out the issue so clearly.


Plan to follow up tonight.

Greg
From: Greg Heath on
On Mar 31, 1:59 pm, Greg Heath <he...(a)alumni.brown.edu> wrote:
> On Mar 30, 3:59 pm, "David Young" <d.s.young.notthis...(a)sussex.ac.uk>
> wrote:
>
> > GregHeath<he...(a)alumni.brown.edu> wrote in message <0f160983-f1a3-4503-b41a-6ca4fb42d...(a)o24g2000vbo.googlegroups.com>...
>
> > ...> 2.http://en.wikipedia.org/wiki/Goertzel_algorithm
>
> > ...
>
> > Greg- are you sure Goertzel helps? The question is how
> > to find the frequency of the sine wave when there are
> > few cycles in the data. The Goertzel algorithm requires
> > the frequency (or frequencies) to be specified in advance,
> > as I understand it, and doesn't tell you any more than
> > the DFT can.
>
> My 1st thought was that you can zero pad and
> interpolate inside of the fft frequency bins.
>
> My 2nd thought was that you could use Goertzel
> to look at the frequencies inside of one fft bin.
>
> Sorry, I have to leave now. Will return tonight.
>
> > I think what is needed is this
>
> >http://www.eos.ubc.ca/research/cdsst/Tad_home/max_ent.pdf
>
> > or, probably, more recent work that builds on this
> > foundation. The old paper is worth looking at though,
> > because it sets out the issue so clearly.
>
> Plan to follow up tonight.

Heinrich's equations correspond to those of a
DFT with a T = 1 sec period and N = numel(s).
Replace ta, 1/res and k with t, df and f to
simplify comparisons.

However, it is implemented in a loop instead
of a more efficient matrix multiplication W*s
as in the dft posts by AJ \"no z\" Johnson.

When fmax = Fs and res = M/Fs with integer
M = N, this is just the standard DFT.

When fmax = Fs and res = M/Fs with integer
M > N, this is just the standard zero-padded
DFT used for interpolating the full spectrum.

In the general case f = fmin:df:fmax and
A is periodic with period Fs outside of the
closed interval [0,Fs]. Choosing fmin =
(m-1)/T and fmax = m/T with df < 1/T
allows interpolation within the mth bin of
the standard DFT.

For this task, Goertzel's algorithm may be
faster.

My colleagues have used the Maxent approach
with great success. Instead of zero-padding
to increase the time sampling window, the
Maxent approach is equivalent to using linear
prediction to extrapolate the time function.

I recall that it wasn't very useful for their
estimates of spin and precession frequencies
of radar targets unless the original time
window exceeded the estimated frequency's
period by at least 25%.

I don't know if the whole spectrum [0,Fs]
had to be calculated. If so, perhaps maxent
and Goertzel could be combined.

Hope this helps.

Greg


From: nanren888 on
"Heinrich Acker" <firstname.lastname(a)web.de> wrote in message <hotj38$caf$1(a)fred.mathworks.com>...
> Hello fellow Matlab users,
>
> I am trying to find the exact frequency of an input signal (by spectral analysis). The measured portion of the signal is quite short in the sense that only samples which represent a few signal cycles are available. So I get a coarse frequency step from the fft() result. In order to get a higher resolution, I multiplied my signal s with factors of the form exp(-2*pi*i*f*t), which represent frequencies between those in the fft() output.
>
> It looks like this:
>
> ta = (0:numel(s)-1)/numel(s);
> m = 0;
> for k = 0:1/res:fmax % res=1 is fft, tried res=10 and higher
> m = m+1;
> A(m) = sum( s.* exp(-j*2*pi*k*ta) );
> end
>
> From playing around with this, I made two observations:
>
> 1) The method works in the sense that the maximum of the resulting spectrum shows the unknown signal frequency much better. I am not bound to the frequencies the fft() function gives. So the resolution *seems* to be much higher, just as the frequency raster that is chosen.
> 2) If a signal with two components is analysed like that, the resolution *seems* to be the same as with fft(), because the method can not show distinct peaks if the signal frequencies are closer than two adjacent elements of the fft() output.
>
> What I would like to know: Is there an algorithm (interpolation-like) that can give the desired frequency from samples of the original fft() spectrum, without the additional, expensive dft-like computations in the code snipped above? I should add that I expect a dominating single sine in my application (observation 2 is not relevant for the application), well above white noise level. Is there perhaps a better method available to get a good frequency estimation from sample sets too short for dft?
>
> Thanks a lot.
>
> Heinrich

OK, I agree with most of the rest;
DFT is equivalent to zero-padded FFT & such as explained.
Entropy methods may be useful.
Someone has to mention MUSIC & root-music, especially as it's included in Matlab SP toolbox. If you really know the signal has 2 complex exponential, & low noise, then music will likely do really well. It is another search for the max & will cost you an eigen decomposition. Also look for root-music.
As suggested above, you'll find all these under 'super-resolution" somewhere.
From: dbd on
On Mar 30, 12:23 pm, "Heinrich Acker" <firstname.lastn...(a)web.de>
wrote:
> Hello fellow Matlab users,
>
> I am trying to find the exact frequency of an input signal (by spectral analysis). The measured portion of the signal is quite short in the sense that only samples which represent a few signal cycles are available. So I get a coarse frequency step from the fft() result. In order to get a higher resolution, I multiplied my signal s with factors of the form exp(-2*pi*i*f*t), which represent frequencies between those in the fft() output.

>...
>
> Heinrich

I've looked at Google results for super-resolution and they include
many unrelated results. Perhaps

frequency estimation

or

frequency estimation small sample

Expect to look at multiple pages of results. One example:

A Review of the Frequency Estimation and Tracking Problems
File Format: PDF/Adobe Acrobat
by PJ Kootsookos
citeseerx.ist.psu.edu/
10.1.1.58.8960.pdf


Dale B Dalrymple