有人有一个 matlab 脚本来使用对数扫描从记录的测量中获取脉冲响应吗?我有输入文件(扫描)和输出,我需要获得脉冲响应,然后计算倍频程的混响时间。
测量扫描的脉冲响应
信息处理
matlab
冲动反应
声学
扫
参考实现
2022-01-26 20:32:35
3个回答
referenceFilename = 'reference.wav';
responseFilename = 'response.wav';
[reference, referenceFs] = audioread(referenceFilename);
[nReferenceSamples, nReferenceChannels] = size(reference);
[response, responseFs] = audioread(responseFilename);
[nResponseSamples, nResponseChannels] = size(response);
if referenceFs ~= responseFs
error('reference audio and response audio files must have same sample rate');
end
nFFT = 2^( ceil( log2(nReferenceSamples+nResponseSamples) ) );
x = zeros(nFFT, 1);
y = zeros(nFFT, 1);
x(1:nReferenceSamples) = reference(:,1); % use only left channel
y(1:nResponseSamples) = response(:,1); % use only left channel
h = ifft( fft(y) ./ fft(x) );
h = h(1:nFFT/2); % truncate latter half
plot(h);
sound(h, responseFs);
获得 IR 后,您必须对其求平方,将其反向积分(施罗德积分),使用倍频程滤波器并计算斜率即 RT。
反卷积算法会起作用。在最简单的形式中,它是将输出的傅里叶变换和输入的傅里叶变换相除的结果的傅里叶逆变换。如果输入的 FT 中有零,这可能不起作用,但下面的链接中引用了解决此问题的算法。
其它你可能感兴趣的问题