0
$\begingroup$

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?

Thanks in advance for your help!

$\endgroup$
2
$\begingroup$

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.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.