FFT - How to transform my amplitudes into dB
356 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello,
I have done a code to obtain the FFT of an audio recorded with Matlab. I'm getting my result in amplitude but I'd like to get it in dB in the frequency domain... Could someone please help me?
Here is my code and my curves:
Thank you for your help.
0 comentarios
Respuestas (1)
Diya Tulshan
el 26 de Jun. de 2023
Hii Jacques,
I understand you want to plot the data in db.
Kindly look into the code given below, it should solve your problem:-
Fs = 16000; % Sampling rate (Hz)
Channels = 1; % Number of audio channels
bits = 16; % Number of bits per sample
r = audiorecorder(Fs, bits, Channels);
duration = 10;
disp('Recording started');
recordblocking(r, duration);
disp('Recording stopped');
X = getaudiodata(r);
N = length(X);
f = (0:N/2) * (Fs/N);
t = (0:N-1) / Fs;
subplot(2,1,1);
plot(t, X);
xlabel('Time (s)');
ylabel('Amplitude');
title('Time Domain Plot');
Y = fft(X, N);
Y = abs(Y(1:N/2+1));
fftResult_dB = 20 * log10(Y); % covert into dB
subplot(2,1,2);
plot(f, fftResult_dB);
xlabel('Frequency (Hz)');
ylabel('Amplitude (dB)');
title('Frequency Domain Plot');
xlim([0, Fs/2]);
grid on;
Hope this helps!
2 comentarios
Paul
el 26 de Jun. de 2023
Editada: Paul
el 26 de Jun. de 2023
Converting any number less than 1 and greater than 0 to dB will yield a negative result. db(0) is -Inf.
20*log10([2 1 .5 .1 0])
So the negative values in dB tells you that the corresponding absolute amplitude is in the range 0 < amplitude < 1.
Ver también
Categorías
Más información sobre Transforms en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!