Azzera filtri
Azzera filtri

Can the amplitude be plotted in dB?

10 visualizzazioni (ultimi 30 giorni)
Taylor Gray
Taylor Gray il 12 Mar 2019
Commentato: Star Strider il 21 Lug 2020
In the code and figure below I have located peaks in an audio signal using the frequency domain and I can't figure out how to have the amplitude plotted in dB. Could anyone help me please?
[audio_file, Fs] = audioread("Handgun.wav");
L = size(audio_file,1);
Ts = 1/Fs; % Sampling Interval
Fn = Fs/2; % Nyquist Frequency
FT_af = fft(audio_file)/L; % Fourier Transform
Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector
Iv = 1:numel(Fv); % Index Vector
[PksL,LocsL] = findpeaks(abs(FT_af(Iv,1))*2, 'MinPeakHeight',0.006, 'MinPeakDistance',20);
[PksR,LocsR] = findpeaks(abs(FT_af(Iv,2))*2, 'MinPeakHeight',0.006, 'MinPeakDistance',20);
figure(1);
semilogx(Fv, abs(FT_af(Iv,2))*2), xlabel('Frequency, Hz'),ylabel('magnitude');
hold on
plot(Fv(LocsR), PksR, '^r', 'MarkerFaceColor','r')
hold off
xlabel('Frequency (Hz)')
ylabel('Amplitude')
title('Left Channel')

Risposta accettata

Star Strider
Star Strider il 13 Mar 2019
Try this:
semilogx(Fv, 20*log10(abs(FT_af(Iv,2))*2)), xlabel('Frequency, Hz'),ylabel('magnitude');
That will convert the amplitudes to dB. The y-axis will reflect those changes, however the tick marks will not be in integer powers-of-10 such as with your x-axis and the semilogx call. You will have to format the y-axis ticks yourself.
  2 Commenti
Brad
Brad il 21 Lug 2020
Hi Star
Why is the multiple by 2 there?
Isn't this dB simply 20 log10(y)? (as the function mag2db) is defined?
Thank you
Star Strider
Star Strider il 21 Lug 2020
Brad — The fft function creates a symmetric result, with the second half being the complex-conjugate of the first half, the total signal energy being divided approximately evenly between the two halves. In a single-sided Fourier transform, it is then necessary to multiply the abs() of the result by 2 in order to approximate the original signal amplitude. Here, I multiply by 2 prior to the dB transformation.

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by