How can I plot a spectrogram with dbV/sqrt(Hz) power scale?
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hello, All!
I have a time domain signal and I want to plot its spectrogram using "spectrogram" Matlab command. However, the power unit must be dbV/sqrt(Hz) (this unit is, normally, used for plotting noise spectrogram). I took a look at Matlab "spectrogram" command help and I realize it plots the spectrogram with db/Hz. Do you have any idea about how I can change this unit? Any idea?
Thank you very much!
Sam
0 commentaires
Réponses (1)
AR
le 23 Avr 2025
Hi Samuel,
I have noticed the same thing. By default, “spectrogram” function returns the power spectral density, db/(rad/sample). For noise analysis it is much more informative to display in dBV/√Hz, which corresponds to voltage spectral density.
We can do the conversion by following the steps below:
1. Compute the spectrogram to get the complex STFT output.
fs = 1000; % Sampling frequency
t = 0:1/fs:1-1/fs; % Time vector
x = randn(size(t)); % White noise signal (1V RMS)
% Window and overlap settings
window = hamming(256);
noverlap = 128;
nfft = 512;
% Spectrogram computation
[S, F, T] = spectrogram(x, window, noverlap, nfft, fs);
2. Normalize the magnitude to obtain amplitude spectral density (V/√Hz).
S_mag = abs(S) / sqrt(fs * sum(window.^2)); % Normalize to get V/√Hz
3. Convert this to dBV/√Hz for plotting.
S_dBV = 20*log10(S_mag); % Convert to dBV/√Hz
clim = [-120 -40]; % Color range for display
figure;
imagesc(T, F, S_dBV, clim);
axis xy;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('Spectrogram in dBV/\surdHz');
colorbar;
colormap turbo;
This method gives a spectrogram in the dBV/√Hz units typically used for noise measurements.
I hope this helps you.
0 commentaires
Voir également
Catégories
En savoir plus sur Time-Frequency Analysis dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!