📄 lms_switchfield.m
字号:
% 变换域型LMS算法滤波 变步长
M = 20; % 运行次数
N = 2000; % 信号的长度
n = 0:N-1;
s = sin(2*pi*n/10); % 初始信号
u = s + 0.036*randn(1,N); % 叠加噪声后的信号
% 信号叠加噪声波形图
figure(1);
plot(n,u);
title('信号叠加噪声波形图');
xlabel('n');ylabel('u');
y = zeros(1,N); % 初始化经过自适应滤波器后的信号为零向量
x = zeros(1,N); % 初始化变换后的信号向量为零向量
w = zeros(1,N); % 初始化自适应滤波器的权向量为零向量
e = zeros(N); % 初始化误差e(n)的为零向量
vare = zeros(N); % 初始化误差的平方e(n)^2的为零向量
estd = zeros(N); % 初始化均方误差E{e(n)^2}的为零向量
vare1 = ones(1,N); % 初始化误差的平方e(n)^2的为1向量
estd1 = ones(1,N); % 初始化均方误差E{e(n)^2}的为1向量
k = 10; % 自适应滤波器的阶数
y(1:k) = u(1:k); % 令经过自适应滤波器后的信号y的前k个样值等于u的前k个样值
mu0 = 0.65; % 初始更新步长因子
A = hilb((k+1)); % 创建一个k阶Hilbert矩阵
[P,H] = hess(A); % 对A进行Hessenberg分解,其中P为酉矩阵
% 变换域型LMS算法滤波
for j = (k + 1):M
u = s + 0.36*randn(1,N); % 叠加噪声后的信号
for n=(k+2):N
mu = mu0/(1 + (n/10)); % 先搜索后收敛步长因子
x(n:-1:(n-k)) = u(n:-1:(n-k))*P; % 对输入数据进行酉变换
w((n-1):(n+(k - 1))) = w((n-1):(n+(k -1)))*P; % 对滤波权向量进行酉变换
e(j,n) = s(n) - w((n-1):(n+(k-1))) * x(n:-1:(n-k))'; % 误差
w((n):(n+k)) = w((n-1):(n+(k -1))) + mu*e(j,n)*x((n):-1:(n-k)); % 更新自适应滤波器的权向量
y(n) = w((n):(n+k)) * u((n):-1:(n-k))'; % 经过自适应滤波器后的信号
vare(j,n) =e(j,n)^2; % 误差的平方e(n)^2
estd(j,n) = vare(j,(n:-1:1))*vare(j,(n:-1:1))'/n; % 均方误差E{e(n)^2}
end
end
vare1 = (vare1*vare)/M; % 统计平均意义下e(n)^2
estd1 = (estd1*estd)/M; % 统计平均意义下学习曲线
% 自适应滤波输出
figure(2);
plot(y);
title('变换域LMS自适应滤波输出');
xlabel('n');ylabel('y');
% LMS自适应滤波器的e(n)^2的曲线
figure(3);
plot(vare1);
title('变换域LMS自适应滤波器的e(n)^2的曲线 ');
xlabel('n');ylabel('e(n)^2');
% LMS自适应滤波器的学习曲线图
figure(4);
plot(estd1);
title('变换域LMS自适应滤波器的学习曲线图 ');
xlabel('n');ylabel('E[e(n)^2]');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -