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

Matlab 使用混响时间(T60)初始化房间脉冲响应,matlab,speech-recognition,audio-processing,Matlab,Speech Recognition,Audio Processing,我正在使用非负矩阵分解进行语音去冗余 准确地说,我正在撰写Nasser的这篇论文(paris.cs.illinois.edu/pubs/Nasser-icassp2015.pdf),其中涉及获得房间脉冲响应的最佳解决方案(方程式10)。因此,我需要先初始化H。他在论文中提到,“H的每一行都是使用线性衰减包络进行初始化的”(第3页末尾的第4节)。我需要初始化脉冲响应(H),使其混响时间(T60)为300 ms。让H的长度为10 这是我尝试过的,但它是一个任意的解决方案 x=1:10; h = ex

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

准确地说,我正在撰写Nasser的这篇论文(paris.cs.illinois.edu/pubs/Nasser-icassp2015.pdf),其中涉及获得房间脉冲响应的最佳解决方案(方程式10)。因此,我需要先初始化H。他在论文中提到,“H的每一行都是使用线性衰减包络进行初始化的”(第3页末尾的第4节)。我需要初始化脉冲响应(H),使其混响时间(T60)为300 ms。让H的长度为10

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

x=1:10;
h = exp(-x/2);
H = repmat(h,600,1);
这将给我一个尺寸为600*10的H。
但是,我不知道如何在MATLAB中使用T60进行初始化。

Hmmm。如果你试图创建混响效果,那么H应该只是一个向量,在我看来,你有一个10列的矩阵。当创建混响效果时,通常会得到脉冲响应并将其与音频信号进行卷积。在这种情况下,h看起来相当随意,我不知道它是否会给你你想要的混响量。然而,如果你想实现h作为混响的脉冲响应,你所要做的就是将你的音频信号与脉冲响应进行卷积

[x, fs] = audioread('myaudio.wav');
y = conv(x,h);
如果您有一个来自录音的脉冲响应和来自录音室的脉冲响应,您可以使用Matlab中的deconv函数应用反褶积来消除混响

你应该能够算出一个公式,使h只是一个指数衰减的向量,大约需要300毫秒才能消失(尽管实际听到这个可能会很棘手)

如果你想在你的脉冲响应计算方面取得真正的进步,我建议尝试一种图像源方法来创建你的脉冲响应。看看下面的纸(旧的,但是金色的)

如果你对盲反褶积感兴趣,你可能会感兴趣


轻微的警告、反褶积和室内混响是一项非常棘手的工作。上面给出的图像源模型虽然有趣且有效,但并没有真正捕获混响和去混响的复杂性。有几件事会影响声音(驻波等),我不能保证仅仅用衰减的指数向量和反褶积计算RT60就会产生惊人的结果。尽管如此,这是一个机会和很多乐趣

对于像这样的问题,有专门的解决办法。还值得一提的是您正在使用的Matlab软件包。@NikolayShmyrev谢谢。我已经把问题贴在那里了。准确地说,我没有使用任何工具箱。谢谢你的回复。我不是想创造一个混响效果。实际上,我正在写Nasser()的这篇论文,这篇论文涉及到获得房间脉冲响应的最优解(方程式10)。因此,我需要先初始化H。他在论文中提到,“H的每一行都是使用线性衰减包络进行初始化的”(第3页末尾的第4节)。我想知道他那是什么意思。正如你所说的公式,这就是我想知道的。他的意思是,H是一个矩阵,我相信它充满了相同衰减的指数向量。如果在matlab中键入以下内容:;H(1,:)==H(2,:)你会得到一个1的向量。这意味着第1行和第2行中的值相同。如果你在矩阵中的任何一行上做这个测试,你会得到相同的结果。是的,我知道所有的行都是相同的。但我不明白如何初始化一个特定的行,使其混响时间为300毫秒。这里初始化和T60之间的关系是什么?每个STFT帧为32毫秒(如本文所述),您有10帧,因此大约300毫秒。如果你引用原始问题中的文章,回答你会更容易。是的,让它是300毫秒。如何找到一个在300毫秒内衰减60分贝的信封?这就是我想知道的,因为这样我就可以在获得一行数据后使用repmat。