資源簡介
自己編寫的在時域頻域聲壓級計算,并且fft的處理,
代碼片段和文件信息
clear?all;?clc;
file1?=?‘校準94dB.wav‘;?????%?94dB校準信號;?48kHz
file2?=?‘校準114dB.wav‘;????%?114dB校準信號??48kHz
file3?=?‘2_70s.wav‘;??%?待處理文件
Fs?=?8000;?%?Hz????在8kHz采樣率范圍內計算聲壓級
data1?=?wavread(file1);??data1?=?detrend(data1(:1)0);??%?讀wav文件并去均值
data2?=?wavread(file2);??data2?=?detrend(data2(:1)0);
data3?=?wavread(file3);??data3?=?detrend(data3(:1)0);
%?降采樣到8kHz
data1?=?resample(data1848);?
data2?=?resample(data2848);
data3?=?resample(data3848);
%?驗證:標校信號應該相差114-94=20dB?=?check1
%?a1?=?rms(data1);
%?a2?=?rms(data2);
%?check1?=?20*log10(a2/a1);
nfft?=?512;?%?FFT長度
%?----?處理94dB標校信號,得到比較參數?----
%?時域比較參數
a1?=?rms(data1);??
%?頻域比較參數
%?對標校信號分幀求頻譜在1Khz處的值
nfrm1?=?fix(length(data1)?/?nfft);??%?數據可分為nfrm幀,此處nfft即作為每幀的數據長度
for?i?=?1:nfrm1
????sp1?=?abs(fft(data1((i-1)*nfft+1:i*nfft).*hanning(nfft)?nfft));
????sp1?=?sp1(1:nfft/2);
????sp1_mv(i)?=?max(sp1);?%?獲得每幀信號頻譜的最大值,由于是1kHz校準信號,最大值肯定在1kHz處
end
sp1_1k?=?mean(sp1_mv);??%?理論上,如果校準信號穩定,所有幀在1khz處的頻譜值應該是相等的。如果不穩定,則不能用求均值的方法。
n?=?5;??%?1s內需要多少個計算結果
len?=?length(data3);
len_frm?=?Fs?/?n;?%?0.2s數據為一幀
nfrm?=?fix(len?/?len_frm);
for?i?=?1:nfrm
????datafrm?=?detrend(data3((i-1
評論
共有 條評論