簡體   English   中英

用於 wav 文件頻譜密度分析的單位存在問題(db 人為低)

[英]Having issue with units for wav file spectral density analysis (db artificially low)

我有以下代碼,它改編自我在這里找到的其他代碼。 它運行良好,plot 看起來和預期的一樣,除了 db 級別太低了 ~80db。 請注意,預期單位為 db re 1uPa。 非常感謝有關解決此問題的任何意見,我認為這與需要 re 1uPa 有關,但我無法追溯問題,我只是一個試圖學習編碼的可憐的生物學家!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% FFT parameters
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NFFT = 96000;    % 
NOVERLAP = round(0.75*NFFT);
w = hanning(NFFT);
% spectrogram dB scale
spectrogram_dB_scale = 100;  % dB range scale (means , the lowest displayed level is XX dB below the max level)
gain = 20
sensitivity = - 165
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% load signal
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[data,Fs]=audioread('sample.wav'); %(newer matlab)
samples = length(data);
dt = 1/Fs;
t = (0:dt:(samples-1)*dt);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% display 1 : averaged FFT spectrum
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[sensor_spectrum, freq] = pwelch(data,w,NOVERLAP,NFFT,Fs);
% convert to dB scale (ref = 1)
sensor_spectrum_dB = 20*log10(sensor_spectrum) - sensitivity - gain ;


figure(1),semilogx(freq,sensor_spectrum_dB);grid
title(['Averaged FFT Spectrum  / Fs = ' num2str(Fs) ' Hz / Delta f = ' num2str(freq(2)-freq(1)) ' Hz ']);
xlabel('Frequency (Hz)');ylabel('Amplitude (dB (L))');
  1. 無論如何,您想要使用10*log10的 plot 和 pwelch 的pwelch ,因為您正在處理功率譜。

  2. 如果不了解更多關於您的數據的信息,將很難提供幫助……這是可靠的數據嗎? 生理? 什么是靈敏度單位? 什么是gain ??

  3. 縮放 PSD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM