用MATLAB编写一段2阶LMS横向滤波器和格型滤波器误差功率比较的程序,差别需要大一些
时间: 2023-11-19 22:05:28 浏览: 68
matlab-通过matlab对比自适应滤波器LMS和RLS滤波性能,输出误差进行对比-源码
5星 · 资源好评率100%
好的,以下是一个简单的MATLAB程序,用于比较二阶LMS横向滤波器和格型滤波器的误差功率:
```
% 生成信号
N = 1000; % 信号长度
x = randn(N, 1); % 产生均值为0,方差为1的高斯白噪声
% 生成系统响应
b = [1, 0.5, 0.2]; % 二阶系统
d = filter(b, 1, x); % 滤波后的信号
% 添加噪声
n = 0.1 * randn(N, 1); % 均值为0,方差为0.1的高斯白噪声
d_n = d + n; % 加噪声后的信号
% LMS横向滤波器
mu = 0.01; % 步长
M = 2; % 阶数
h = zeros(M, 1); % 初始化权值
y_lms = zeros(N, 1); % 初始化输出信号
for i = M:N
x_lms = x(i:-1:i-M+1); % 输入信号
y_lms(i) = h' * x_lms; % 输出信号
e_lms(i) = d_n(i) - y_lms(i); % 计算误差
h = h + mu * e_lms(i) * x_lms; % 更新权值
end
% 格型滤波器
y_grid = gridfilt(d_n, M); % 格型滤波器输出信号
e_grid = d_n - y_grid; % 计算误差
% 计算误差功率
P_lms = mean(e_lms.^2);
P_grid = mean(e_grid.^2);
% 绘图
subplot(2, 1, 1);
plot(1:N, d_n, 'b', 1:N, y_lms, 'r');
legend('原始信号', 'LMS横向滤波器输出');
title(['LMS横向滤波器误差功率:', num2str(P_lms)]);
subplot(2, 1, 2);
plot(1:N, d_n, 'b', 1:N, y_grid, 'r');
legend('原始信号', '格型滤波器输出');
title(['格型滤波器误差功率:', num2str(P_grid)]);
```
这个程序首先生成一个长度为1000的高斯白噪声信号,然后通过一个二阶系统(系数为[1, 0.5, 0.2])进行滤波,得到一个目标信号。接着添加均值为0,方差为0.1的高斯白噪声,产生一个带噪声的信号。然后分别使用LMS横向滤波器和格型滤波器对带噪声的信号进行滤波,得到两个输出信号。最后计算两个滤波器的误差功率,并绘制原始信号、滤波器输出信号和误差信号的图像。
你可以运行这个程序并修改其中的参数来观察不同的效果。
阅读全文