使用 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')
调整过滤器内核/阈值以满足您的需要。
我有以下音频信号(单声道,一个声道):
在时域中,我想去除孤立的干扰(咔哒声、爆裂声、爆裂声),保持其余部分完好无损,如图所示。在 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')
调整过滤器内核/阈值以满足您的需要。