I just directly translated to Python from this MATLAB script, which I've also included here. The original is public domain, so my translation is, too.
Also see Frequency estimation methods in Python for interpolating to get sharp intersample peaks
sixtenbe has posted a more powerful version here
and there's a PyPI repo
That's great. I'll probably use that version in the future.
For the "repeatable sinusoidal signals with some amount of RMS noise tolerable" version, why would you want the peak of the signal+noise? I would think you would want the peak of the signal itself?
Also see https://gist.github.com/255291#file_parabolic.py