我在 MATLAB 中实现 LMS 自适应滤波器以从语音信号中分离宽带和窄带信号时遇到了一些麻烦。
我使用输入的延迟版本作为参考以及错误术语。
step = 0.01;
w = zeros(1, N);
xDelayed = [zeros(1, 100) x']'; % delaying input
for n=1:length(x)
e = x(n) - w(1)*xDelayed(n);
w = w - step*e*xDelayed(n);
end
它本质上是一个实现
出于某种原因,我的整个 w (N long) 向量都是相同的值。更新:
M = 5;
N = length(sound)
w = zeros(M, N);
STEP_SIZE = 0.01;
d = sound;
x = sound_delayed(1:N);
for i=(M+1):N
e(i) = d(i) - x((i-(M)+1):i)*w(:,i);
w(:,i+1) = w(:,i) + mu * e(i) * x((i-(M)+1):i)';
end
for i=(M+1):N
yd(i) = x((i-(M)+1):i)*w(:,i);
end