Posted in: Fyzika, Výukové prográmky

Analýza hlasitosti nahrávky v závislosti na frekvenci

Následující kousek kódu v Matlabu dokáže divy. Stačí změnit cestu k nahrávce a výsledkem bude maximální hlasitost a frekvence, při které ji bylo dosaženo, průměrná hlasitost a také graf, kde je pro všechny fekvence slyšitelného spektra obsažené v nahrávce znázorněna hlasitost. Podporovány jsou mono a stereo nahrávky ve formátech: mp3, wav a m4a.

load handel.mat;
filename = 'D:\FFOutput\Záznam.m4a';
[y,Fs] = audioread(filename); %vrací data a vzorkovací frekvenci
fty = fft(y); % provedení FFT
fv = linspace(0, 1, fix(length(fty)/2)+1)*Fs;
iv = 1:length(fv);
vol = 20*log10(abs(fty(iv)));
dB = 1:1:20000;
fm = 0;
dBm = max(vol);
for i = 1:1:length(vol)
if vol(i) < 4
dB(i) = 0;
else
dB(i) = vol(i);
end
end
Data = [dB; fv];
for k = 1:1:20000
if Data(1,k) > fm
fm = Data(2,k);
end
end
s1 = 'Největší intenzity (';
s2 = ' dB) je pro frekvenci ';
s3 = ' Hz.';
disp('V souladu s ISO 6189 jsou hodnoty pod 4,2 dB nulovány');
disp(strcat(s1, compose("%5.2f", dBm), s2, compose("%4.0f",fm), s3));
fdB = [];
for l = 1:1:20000
if dB(l) > 0
fdB(l) = dB(l);
end
end
prumer = mean(fdB);
disp(strcat('Průměrná intenzita zvuku je ', compose("%4.0f",prumer), ' dB.'));
figure(1)
bar(fv, dB, 'b', 'EdgeColor', 'b') % Plot In dB
xlabel('Frequency (Hz)')
ylabel('Amplitude (dB)')
axis([16 20000 ylim
Back to Top