I think you lose the notion of "RMS Voltage" when applying the FFT. The RMS over the entire spectrum is the same (corrected for your processing gain (sqrt(2n)) and the coherent gain of your window (rms(window))). However, you can't use the entire spectrum, you have to use the energy per frequency bin to be able to weigh them.

So the question here is: what is the relationship between the energy in the bin and the RMS voltage of the original sine wave.

I think your formula applies to the time domain, where you can use a digital filter to do the weighting, and then just taking the RMS voltage of the resulting signal.

ANSI S1.42 specifies the (continuous) transfer functions for such an a-weighting filter. (

here)

You could either filter it in the analog domain, using op-amps and analog filters:

http://sound.whsites.net/project17.htmOr you could transform it into the digital domain and use a discrete digital filter. Usually, a bilinear transform is used. It is an approximation of the mapping between the s-plane and the z-plane. However, some people note that this produces an error at the higher end of the spectrum, which could be a problem for you. You could use some kind of regression or optimization to minimize the error in the higher regions as well.

But there's a catch: according to Nyquist, you need a sampling rate of at least twice the frequency of the highest frequency in your analog signal. Every frequency higher than half of your sampling rate will cause aliasing, and completely mess up your results.

This implies two things: you need a sampling frequency of at least 40 kHz (2×20 kHz), preferably higher.

You need a (strong) analog filter to make sure that very little frequencies above 20 kHz remain in the signal that you send to the ADC. (Note: this is true when applying digital filters, but also when applying an FFT!)

The maximum sampling frequency of the Arduino's ADC is about 10 kHz. That's nowhere near enough.

That being said, you might be interested in this:

How to prove that A-weighting doesn't workYou might find people who know more about this topic than myself on StackOverflow Signal Processing.