|
|
I know there are better places to ask this, but there's been a fair amount of
signal processing talk around here in recent history, and everything I google
comes up with patents and microprocessor talk.
The basic situation is that I want to program a piano tuner (we'll see about
having the guts to tune the thing). It didn't take more than a couple hours to
write a c program that takes audio input, FFT's it, and tells you the closest
pitch. The problem is the frequency resolution. I essentially get the refresh
rate for resolution, e.g. 10 updates per second -> 10 Hz resolution. This
resolution won't cut it. G#4 is 415.3 Hz, A4 is 440 Hz, and A#4 is 466.164 Hz,
so you can see what I'm up against. Here are my ideas:
1) Zero-pad the data pre-fft. (I'm not sure whether this actually improves the
quality of the information.)
2) Use a feedback loop to control the frequency of a test wave. (I don't know
what the controller should look like.)
3) FFT. Locate max. Band-pass. Inverse-fft. Count zero-crossings? (Not
robust for noisy signals?)
As I said, my lack of knowledge in this area makes it difficult to locate the
relevant resources. Does anyone know of a feedback loop or other more
sophisticated tools for this purpose?
- Ricky
Post a reply to this message
|
|