卷积:无回声语音信号和脉冲响应

信息处理 matlab 采样 卷积 冲动反应 演讲
2022-02-15 08:40:50

我正在尝试使用以下代码在 MATLAB 中对消声语音信号(2.1 秒)和脉冲响应(20 秒)执行卷积:

[y_anech,fsSig]=audioread('MA03_03.wav'); %speech signal fsSig = 48000

[y_IR,fsIR]=audioread('IR.wav'); %reads the Impulse response, fsR = 44100

%%% Resampling the speech signal 
[P,Q] = rat(fsIR/fsSig);
y_anech_resampled = resample(y_anech, P,Q);

sig_conv_meas = cconv(y_anech_resampled,y_IR)/fsIR;
sig_conv_meas = sig_conv_meas/max(abs(sig_conv_meas));

player1 = audioplayer(sig_conv_meas,fsIR);
play(player1);

运行上面的代码,它给了我所需的卷积信号,但是在 20 秒时,我也听到了无回声的语音信号。我有以下问题:

  1. 我在卷积信号后听到原始信号的原因是什么?我应该如何删除它?

见附图。在最后一个图中,大约 20 秒,出现了消声信号:

见附图。 在最后一个图中,大约 20 秒,出现了消声信号 IR 的 ETC 图:

ETC 图

  1. 在执行卷积时,为什么我需要像我在代码中那样将卷积后的信号除以采样频率(sig_conv_meas = cconv(y_anech_resampled,y_IR)/fsIR)?

谢谢!

1个回答

我无法访问您的音频文件,所以我下载了:

重新采样的语音信号:

在此处输入图像描述

最终卷积信号:

在此处输入图像描述

至于你的问题:

1.

正如您在对数刻度中绘制的 IR 图表一样,可以清楚地看到在 20 秒处有另一个峰值。一旦与语音卷积,它将产生语音信号的另一个重复。如果您查看第一个情节,您的音频开始于 1 秒左右。当您将 IR 与输入信号进行卷积时,它将在 20 秒后重复,这就是您在 21 秒左右的卷积输出中看到的内容。

想想如果您想在 20 秒后产生回波,IR 会是什么样子——一个在 0 秒时出现强峰值,另一个在 20 秒时出现较小的峰值。我猜测最后的这个“峰值”实际上是主峰值之前的积累,实际上应该在主峰值之前(你可以通过数字零和中间的低能量样本来判断),或者可能被移到最后的谐波失真的结果。当然,一定有人以这种方式提取/保存了这个 IR。

尽管如此,您可以轻松地忽略任何超过 10s 标记的内容,因为它在卷积期间不携带任何额外信息。TBH,我会忽略 5 秒后的部分,它大致符合本底噪声。否则,与全长卷积是浪费计算资源。

可能您可以自动进行裁剪。看起来 IR 文件存储在 16 位音频中,当本底噪声结束时(大约 10 秒标记),您会得到等于 1 的样本值。如果您查看它们何时开始在向量中,您可以找到您的自动截止点,如果你有更多的IR。

2.

首先,您的除以fsIR无效,因为它已被下一行中的最大值标准化。无论如何,您的 IR 很可能是混响的,并且通常会增加能量。将其视为具有大量频率提升的滤波器。这是重新采样的消声记录和未缩放的可听信号的比较。

在此处输入图像描述