%该程序段实现时域滤波
% s---期望信号
% N---输入信号长度
% xn---输入信号
% k---权个数
% u---收敛步长
% w---权系数
% e---误差信号
% y---输出信号
y=zeros(1,N);
y(1:k)=xn(1:k);
w=1/k*ones(1,k);
e=zeros(1,N);
for i=(k+1):N
XN=xn((i-k+1):(i));
y(i)=w*XN';
e(i)=s(i)-y(i);
w=w+u*e(i)*XN;
end
%该程序段实现频域滤波
% s---期望信号
% M---输入信号长度
% xn---输入信号
% N---权个数
% u---收敛步长
% w---权系数
% e---误差信号
% y---输出信号
w=zeros(1,N);
e=zeros(1,M);
y=zeros(1,M);
for i=1:fix(M/N)-1
X=fft(xn((i-1)*N+1:(i+1)*N));
W=fft([w,zeros(1,N)]);
out1=real(ifft(X.*W));
y(i*N+1:(i+1)*N)=out1(N+1:2*N);
e(i*N+1:(i+1)*N)=s(i*N+1:(i+1)*N)-y(i*N+1:(i+1)*N);
E=fft([zeros(1,N),
e(i*N+1:(i+1)*N)]);
out2=real(fft(E.*conj(X)));
w=w+2*u*out2(1:N);
W=fft([w,zeros(1,N)]);