%% function main()
close all;
clear all;
clc;
ss=1000;
% 周期信号的产生
t1=0.1;
t2=100;
ts=0.1;
t=t1:ts:t2;
w=1;
xs=sin(3*t);
%%
figure;
subplot(2,1,1);
plot(t,xs);grid;
ylabel('幅值');
title('输入周期性信号');
%% 噪声信号的产生
xn=rand(1,length(t));
subplot(2,1,2);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('随机噪声信号');
%% 信号滤波
x = xs+xn;
dn=xs;
mu=1/max(eig(x*x'/ss));
itr = length(xn);
en = zeros(1,itr);
M = 8;
yn = zeros(1,ss);
WW = ones(M,1);
for i = 1:ss
yn(i) = WW(:,i)'*x(:,i);
en(i) = dn(1,i) - yn(i);
WW(:,i+1) = WW(:,i) + mu*en(i)'*x(:,i);
end
% xn = xn.' ; % 输入信号序列
% dn = xs.' ; % 预期结果序列
% M = 8 ; % 滤波器的阶数
%
% rho_max = max(eig(xn*xn.')); % 输入信号相关矩阵的最大特征值
% mu = (1/rho_max) ; % 收敛因子 0 < mu < 1/rho
% [yn,W,en] = LMS(xn,dn,M,mu);
%
% % 绘制滤波器输入信号
figure;
subplot(2,1,1);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('it{滤波器输入信号}');
% 绘制自适应滤波器输出信号
subplot(2,1,2);
plot(t,yn);grid;
ylabel('幅值');
xlabel('时间');
title('it{自适应滤波器输出信号}');
% 绘制自适应滤波器输出信号,预期输出信号和两者的误差
figure
plot(t,yn,'b',t,dn,'g',t,dn-yn,'r');grid;
legend('自适应滤波器输出','预期输出','误差');
ylabel('幅值');
xlabel('时间');
title('it{自适应滤波器}');
评论0