I am trying to obtain a third-octave band representation of the frequency content of an acoustic signal, obtained by numerical simulation. The signal is the following:
The code I use (you can reproduce it by replacing P and t with other signals):
P = PNL(:,3) ; % Acoustic pressure signal
t = timeWindow ; % Time array
T = t(end) - t(1) ; % Signal duration
fs = length(t)/T ; % = 98123 [Hz]
T0 = 1 ; % Reference duration of 1 [s]
filterOrder = 6 ;
allANSIFrequencies = getANSICenterFrequencies(octaveFilter('FilterOrder', filterOrder, 'Bandwidth', '1/3 octave', 'SampleRate', fs));
cf = allANSIFrequencies(19 : 50) ; % Restricting the frequency range to [15 Hz - 20000 Hz]
for k = 1 : length(cf)
octFilt = octaveFilter(cf(k), 'Bandwidth', '1/3 octave','SampleRate', fs, 'FilterOrder', filterOrder, 'Oversample', false);
y = octFilt(P);
Prms = sqrt((1/T0) * trapz(t, y.^2)) ; % Root mean square pressure level
LE(k) = 20 * log10(Prms/20e-6) ; % [db] Sound Exposure Level
end
semilogx(cf, LE)
grid on
xlabel('Frequency (Hz)') ;
ylabel('L_{E} (dB)') ;
legend('Order 2', 'Order 4', 'Order 6', 'Order 12')
The frequency content I would expect based on experimental data is a mix of the results at different orders: up to 1000 [Hz] the levels from order 6 are correct, while from 1000 [Hz] onwards, it's the order 2 that describes best the frequency content.
I obtain very different results depending on the filter order I am using. To a certain degree that's normal. Higher orders should provide a sharper response of the filter, but I fail to interpret these results. The resolution of the signal under investigation should be high enough (98123 [Hz]). Any idea of what the issue could be?
Thank you in advance, I'd appreciate any insight on this!