Measuring amplitude of a spectral component I'm trying to measure the amplitude of a spectral component in a signal. The component's frequency is always known beforehand.

I take a given number of samples, apply the flattop window to reduce scalloping loss, then use FFT and look at the bin of interest.

The earlier method used adaptable sampling frequency ($f_s$ was an integer multiple of the signal frequency) -> no windowing was needed.

Compared to the earlier method, measurements with the new method have a lot more variance. I suspect that it is the window that picks up the noise (convolution over the whole spectrum, where there are other strong components).

The $f_s$ is either 312 KS/s or 625 KS/s, the signal frequency is 2-15 KHz. 

How could I improve my measurement?

Is there an other method which exploits the fact that the frequency of the signal is always exactly known?
A variation on @geometrikal's answer would be to use the Goertzel Algorithm.

$$
y[n] = x[n] + e^{+j\omega_0} y[n-1]
$$
where $x[n]$ is your input signal, $\omega_0$ is the frequency you know, and $y[n]$ is the (complex-valued) estimate of the discrete Fourier coefficient.