1
votes

I want to do a 1/3rd octave band analysis of a noise signal. I have got a time signal representing sound pressure(Pa). I have arrays of the central frequencies and of the lower and upper cutoffs.The final aim is to get a bar chart representing sound level versus the 1/3rd octave bands.

From a theory that I followed suggested to first do FFT of the signal. Then reconstruct the signal in the 1/3rd octave bands. In each of the construction, compute the RMS values of the pressure. That's it. Convert these RMS values into sound level(dB) and plot against the central frequencies.

The issue I am facing is how to reconstruct the signal using IFFT function given that the new signal has less number of amplitude points. So, the reconstruction is essentially not possible because of dimension inconsistency between time and amplitude. I am stuck at this point.

I have a very little experience in DSP. So, any help even if the approach is different from what I tried explaining above will be much appreciated. Thanks in advance.

1
There are plenty of questions+answers on here about python fft - did you try any of those? For example stackoverflow.com/questions/55039842/… but there are others.DisappointedByUnaccountableMod

1 Answers

0
votes

To reconstruct the time-domain signal for a particular 1/3 octave band, you set the amplitude to zero for all the frequencies outside of your band before you do the IFFT. The IFFTs for each of those bands will be the same size as our original FFT, so you will end up with the same time resolution on output from each band.

Doing a full-size IFFT for each band is obviously pretty expensive. There are ways to optimize this, but really there is probably no reason for you to be reconstructing the time-domain signal in the first place.

The IFFT operation1 will not change the RMS value of signal, so just calculate this using the frequency-domain components and forget about the IFFT altogether. Because of the way the RMS computation works, you don't even need to remember that the frequency-domain amplitudes are complex numbers -- you get a proportional answer if you treat the real and imaginary components the same way. Just don't forget to include all the extra zeros in the RMS divisor, since there are a different number of them for each band.

1 - This is true for a mathematically standard IFFT. Some implementations will divide the outputs by the signal length. This will be the same for all bands, so it won't affect their relative values and it's easy to correct for.