On Wed, 2007-11-28 at 18:39 +0100, Rémi Thébault wrote:
> By the way, for the moment I use FFTW for the frequency identification.
> Is there a way to identify a frequency with quite high precision without
> computing a big spectrum analysis ?
> For a 0.7 Hz precision with fft, I need 65536 samples, what will take a
> lot CPU load every 1.5 sec.
>
If you use the peak spectrum (by calculating the peak locations through
parabolic interpolation) and picking the lowest peak, you can get quite
precise results with a much smaller window size (~1024-2048 samples
should be fine).
This method has some flaws though, particularly if your sound has a weak
or missing fundamental. In this case you might want to look at
Autocorrelation/AMDF/ASDF, which don't require the fundamental to be the
strongest component, or even present at all.
You might be able to find some useful code in libxtract
(http://libxtract.sourceforge.net/): xtract_peak_spectrum(),
xtract_f0(), xtract_failsafe_f0(), xtract_asdf() etc.
One approach might be to do a pre-filtering stage to determine whether
or not most of the energy in the spectrum falls above or below a certain
frequency threshold, and then pick a PDA based on the result. In my
experience, it tends to be low instrumental sounds (e.g. low piano
notes) that tend to have a 'missing fundamental'.
Jamie
-- www.postlude.co.uk _______________________________________________ Linux-audio-dev mailing list Linux-audio-dev@lists.linuxaudio.org http://lists.linuxaudio.org/mailman/listinfo/linux-audio-devReceived on Thu Nov 29 12:15:05 2007
This archive was generated by hypermail 2.1.8 : Thu Nov 29 2007 - 12:15:05 EET