【问题标题】:Initialize a Room Impulse Response using reverberation time(T60)使用混响时间初始化房间脉冲响应 (T60)
【发布时间】:2015-09-19 18:53:23
【问题描述】:

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

确切地说,我正在研究 Nasser (paris.cs.illinois.edu/pubs/nasser-icassp2015.pdf) 的这篇论文,其中涉及获得房间脉冲响应的最佳解决方案(方程式 10)。所以,为此我需要先初始化 H 。他在论文中提到“H 的每一行都使用线性衰减包络进行了相同的初始化”(第 4 节,第 3 页末尾)。我需要初始化一个脉冲响应(H),使其混响时间(T60)为 300 毫秒。设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】:

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

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

如果您有来自录音的脉冲响应和来自录音房间的脉冲响应,您可以使用 Matlab 中的 deconv 函数应用反卷积来去除混响。

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

如果您想真正提高脉冲响应计算能力,我建议您尝试使用图像源方法来创建脉冲响应。查看以下论文(旧的,但金色的);

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

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

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

稍微注意一下,去卷积和房间混响是一件非常棘手的事情。上面给出的图像源模型虽然有趣且有效,但并没有真正捕捉到混响和去混响的复杂性。有几件事会影响声音(驻波等),我不能保证只使用衰减指数向量和反卷积来简单地计算 RT60 会产生惊人的结果。尽管如此,麦芽汁还是很有趣的!

【讨论】:

  • 感谢您的回复。我不是要创建混响效果。实际上,我正在研究 Nasser(paris.cs.illinois.edu/pubs/nasser-icassp2015.pdf) 的这篇论文,其中涉及获得房间脉冲响应的最佳解决方案(方程式 10)。所以,为此我需要先初始化 H 。他在论文中提到“H 的每一行都使用线性衰减包络进行了相同的初始化”(第 4 节,第 3 页末尾)。我想知道他的意思。正如你所说的公式,这就是我想知道的。
  • 他的意思是 H 是一个矩阵,填充了我相信的相同衰减的指数向量。如果您在matlab中输入以下内容; H(1,:) == H(2,:) 你会得到一个 1 的向量。这意味着第 1 行和第 2 行中的值是相同的。如果您对矩阵中的任何行进行此测试,您将得到相同的结果。
  • 是的,我知道所有行都是相同的。但我不明白如何初始化特定行,使其混响时间为 300 毫秒。这里初始化和T60有什么关系?
  • 每个 STFT 帧是 32 毫秒(如在纸上),你有 10 帧,所以大约 300 毫秒。如果您在原始问题中引用论文,那么回答您会更容易。
  • 完成。是的,设为 300 毫秒。如何找到在 300 毫秒内衰减 60db 的包络?这就是我想知道的,因为这样我就可以在获得一行后使用 repmat。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
相关资源
最近更新 更多