From: Heinrich Acker on 31 Mar 2010 11:50 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 31 Mar 2010 13:59 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 1 Apr 2010 14:40 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 1 Apr 2010 17:47 "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 1 Apr 2010 18:47 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
First
|
Prev
|
Pages: 1 2 Prev: how to draw an arc between two points given centre and radius Next: polyfit question |