# RMS level from impulse response

I am trying to quantify the average differences between several impulse responses over the frequency range and over octave bands.

So, I am doing (in Matlab):

NFFT = 2^13;
x_fft(1:NFFT,:) = fft(IRs, NFFT);
spData = (abs(x_fft(1:NFFT/2, :))*2)/NFFT;
refPa = 2*1e-5;
R = nchoosek(1:size(spData,3), 2); % Calculate all possible combinations
aC = 0;
for idxNote = 1:size(R,1)
aC = aC +1;
diffsRows(aC ,:)=abs((20*log10(spData(:,R(idx ,1))/refPa)) - 20*log10(spData(:,R(idx ,2))/refPa));
end

semilogx(freqs,mean(diffsRows))



I can see in a paper that this has been done by filtering the impulse response with an octave band filter, then by calculating the "RMS levels in dB" for each band of the impulse responses (IRs) and subtracting the levels from the levels of a reference IR. I believe I am doing the same in my code (mine is over the whole frequency range).

Can be the RMS of an impulse response considered as its amplitude in the frequency domain?

Is this the correct way to go?

Please refer to Parseval's theorem. If your impulse response is $$h(n)$$ and its DFT is $$H(k)$$, then $$\sum_{n=0}^{N-1} |h(n)|^2 = \frac{1}{N} \sum_{k=0}^{N-1} |H(k)|^2$$ So the square root of the sum of the amplitudes in the frequency domain, divided by the number of points in the DFT should give you the RMS. It is common practice to calculate RMS on a frequency band basis to get more meaningful results.