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

时间:2015-12-07 22:53:37

标签: matlab audio signal-processing

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

在时域中,我想删除孤立的干扰(点击,弹出,破解),其余部分保持不变,如图所示。在Matlab®中最合适的方法是什么?音频信号表示为一维矢量。任何代码示例都表示赞赏。

1 个答案:

答案 0 :(得分:3)

首先,我尝试使用此代码来近似您的信号。 。

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')

enter image description here

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

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

enter image description here

调整滤镜内核/阈值以满足您的需求。