• 大小: 3KB
    文件类型: .m
    金币: 2
    下载: 3 次
    发布日期: 2021-06-06
  • 语言: Matlab
  • 标签: 时域频域  

资源简介

自己编写的在时域频域声压级计算,并且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

评论

共有 条评论