Find a simple sine wave buried within noise, FFT or cross-correlation?

My recorded signal x = s + v, where s = A*sin(ωt) and v = noise. SNR < 1 or ~ 1. So the sine wave is buried under a lot of noise.

I need to compare the relative amplitudes of s for each recording window, so essentially track the ability of the system to receive the stimulus. The good news is that I know what I'm looking for (the stimulus and signal are causally linked, so I know ω) and my system is highly linear.

Question: is this a task for FFT or Cross correlation?

In more detail: Should I just perform a simple FFT and compare the amplitudes of the Fourier peak at frequency ω? Or could I do better by cross-correlating it with a reference signal sin(ωt)? If cross-correlation is the answer, should I apply a matched filter before cross-correlating? The SNR is a big problem which is why I'm exploring options outside of the FFT. As a non-expert to the field, a explanation of pros/cons to these two techniques would be greatly appreciated.

PS. as far as FFT goes, I know there are tricks such as band-pass filters and hamming windows. With these applied, I'm getting decent but not great results.

• Assuming you know $\omega$, keep in mind that: (1) The FFT is basically obtained by correlating the signal with a bunch of complex exponentials (2) Then, for a known frequency, the FFT is wasteful; and (3) the matched filter is also a correlator. So: just do a correlation!
– MBaz
May 5 '19 at 1:30
• @MBaz Thank you! It makes sense that correlation is just as effective and quicker than FFT, because it will just test correlation at freq ω. However, regarding the matched filter, would that not clean up the signal which is being correlated, and therefore improve the accuracy of the correlation? May 5 '19 at 3:35
• It wouldn't, because the matched filter itself is a correlator. Don't take my word for it, try it out and see!
– MBaz
May 5 '19 at 14:46