我正在使用非负矩阵分解进行语音去混响。
准确地说,我正在研究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进行初始化。
答案 0 :(得分: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
如果您对盲目反卷积感兴趣,那么您可能对此感兴趣。
轻微的警告,反褶皱和房间混响是一件非常棘手的事情。上面给出的图像源模型虽然有趣且有效,但并不能真正捕捉到混响和去混响的复杂性。有几件事可以影响声音(驻波等)我无法保证只使用衰减的指数向量计算RT60并且去卷积将产生惊人的结果。尽管如此,还是拍摄了很多乐趣!