使用 Matlab 从 .wav 文件中去除脉冲噪声

Remove impulse noise from .wav file using Matlab

我有以下音频信号(单声道,一个声道):

在时域中,我想去除孤立的干扰(咔哒声、爆裂声、爆裂声),保持其余部分完好无损,如图所示。在 Matlab® 中执行此操作的最合适方法是什么?音频信号表示为一维向量。感谢任何代码示例。

首先我尝试用这段代码来估计你的信号。 .

x = zeros(10,1);
x = [x; randn(50,1)];
x = [x; zeros(100,1)];
x = [x; -1; 1];
x = [x; zeros(10,1);];

stem (x)

下一步是使用简单的移动平均滤波器和零相位滤波来提取包络

nFilt = 10;
b = ones(nFilt,1)/nFilt;

y = filter(b,1,flipud(abs(x)));
y = filter(b,1,flipud(abs(y)));

hold on; plot(y, 'r')

一旦你有了它,简单的阈值将帮助你删除孤立的事件。 .

x(y<0.2) = 0;
figure; stem(x, 'g')

调整过滤器内核/阈值以满足您的需要。