使用混响时间(T60)初始化房间脉冲响应

问题描述 投票:1回答:1

我正在使用非负矩阵分解进行语音去除。

确切地说,我正在研究Nasser(paris.cs.illinois.edu/pubs/nasser-icassp2015.pdf)的这篇论文,该论文涉及获得室内脉冲响应的最优解(方程10)。所以,为此,我需要先初始化H.他在论文中提到“H的每一行都是使用线性衰减的包络进行相同的初始化”(第4节,第3页末尾)。我需要初始化脉冲响应(H),使其混响时间(T60)为300 ms。设H的长度为10。

这是我尝试过的,但它是一个随意的解决方案。

x=1:10;
h = exp(-x/2);
H = repmat(h,600,1);

这将给我一个尺寸为600 * 10的H。但是,我不明白如何在MATLAB中使用T60进行初始化。

matlab speech-recognition audio-processing
1个回答
2
投票

嗯。如果你试图创建一个混响效果,那么H应该只是一个向量,在我看来你有一个10列的矩阵。在创建混响效果时,通常会获得脉冲响应并将其与音频信号进行卷积。在这种情况下,h似乎很随意,我不知道它是否会给你你正在寻找的混响量。但是,如果你想将h作为混响的脉冲响应,那么你所要做的就是用脉冲响应对你的音频信号进行卷积。

[x, fs] = audioread('myaudio.wav');
y = conv(x,h);

如果你有录音的脉冲响应和录音的房间的脉冲响应,你可以使用解压缩来使用Matlab中的deconv函数去除混响。

你应该能够计算出一个公式,这样h只是一个指数衰减的向量,大约需要300ms才能死掉(尽管实际上听起来可能很棘手)

如果您希望通过脉冲响应计算得到更高级的建议,我建议您尝试使用图像源方法来创建脉冲响应。查看以下论文(旧的,但金色的);

http://www.umiacs.umd.edu/~ramani/cmsc828d_audio/AllenBerkley79.pdf

如果您对盲目反卷积感兴趣,那么您可能会感兴趣。

https://www.academia.edu/1370250/Predictive_deconvolution_and_kurtosis_maximization_for_speech_dereverberation

一个小小的警告,反卷积和房间混响是一个非常棘手的业务。上面给出的图像源模型虽然有趣且有效,但并不能真正捕捉到混响和去混响的复杂性。有几件事可以影响声音(驻波等)我无法保证只使用衰减的指数向量计算RT60并且去卷积将产生惊人的结果。尽管如此,麦芽还是很有趣!

© www.soinside.com 2019 - 2024. All rights reserved.