我用matlab实现LMS算法的自适应滤波器,matlab算法实现代码是这样的:
clear
clc
F=checkerboard(2); %原图像
D=imnoise(F,'gaussian',0,0.02); %退化图像=参考信号
nhood=[3 3];
% Estimate the local mean of f.
localMean = filter2(ones(nhood), D) / prod(nhood);
H=D-localMean;%仿照wiener2函数里的求取类似的“均值”
[h k]=size(D);
L=h*k;
D=reshape(D,L,1); %将图像矩阵变为矢量形式
f=zeros(size(D)); %系统输出=误差信号
y=f; %噪声逼近信号初始化
E=f; %声明误差矢量
%设置输入噪声信号=基本输入信号
%X=randn(h,k);
X=zeros(h,k);
X=imnoise(X,'gaussian',0,0.02);
X=reshape(X,L,1);
W=zeros(L,L); %设置权矢量初值
lmsMSE=f;
a=0;
%核心算法
u=0.000005;
for i=1:L
for n=1:L
for m=1:i
if n-m+1>0
y(n)=y(n)+W(m,n)*X(n-m+1);%滤波器输出
end
end
end
E=D-y;%计算误差
a=a+1;
lmsMSE(a)=mean(E.^2);%根据目标函数计算MSE
for n=1:L-1
W(i,n+1)=W(i,n)+u*E(n)*X(n);%更新权值
end
end
a=linspace(1,L,L);%设置画MSE变化曲线的横坐标
f=reshape(E,h,k)+H;%重构图像矩阵
figure,subplot(2,2,1),imshow(F);
title('原图像')
D=reshape(D,h,k);
subplot(2,2,2),imshow(D);
title('退化图像')
myMSE=mean2((F-f).^2)
subplot(2,2,3),imshow(f);
title('复原图像')
subplot(2,2,4)
plot(a,lmsMSE,'r-');
title('当u=0.000001时的 MSE 变化曲线')
xlabel('迭代次数'),ylabel('MSE');
legend('lmsMSE(a)',0);
为什么运行后总是出现这种情况?
??? H=D-localMean;%仿照wiener2函数里的求取类似的“均值”
|
Error: Missing variable or function.
>>
小弟我刚学,大侠指导下,万分感谢!
matlab函数调用问题
答案:2 悬赏:70 手机版
解决时间 2021-01-30 21:21
- 提问者网友:夢醒日落
- 2021-01-30 07:37
最佳答案
- 五星知识达人网友:像个废品
- 2021-01-30 07:44
可以运行的,
clear
clc
F=checkerboard(2); %原图像
D=imnoise(F,'gaussian',0,0.02); %退化图像=参考信号
nhood=[3 3];
% Estimate the local mean of f.
localMean = filter2(ones(nhood), D) / prod(nhood);
H=D-localMean;%仿照wiener2函数里的求取类似的“均值”
[h k]=size(D);
L=h*k;
D=reshape(D,L,1); %将图像矩阵变为矢量形式
f=zeros(size(D)); %系统输出=误差信号
y=f; %噪声逼近信号初始化
E=f; %声明误差矢量
%设置输入噪声信号=基本输入信号
%X=randn(h,k);
X=zeros(h,k);
X=imnoise(X,'gaussian',0,0.02);
X=reshape(X,L,1);
W=zeros(L,L); %设置权矢量初值
lmsMSE=f;
a=0;
%核心算法
u=0.000005;
for i=1:L
for n=1:L
for m=1:i
if n-m+1>0
y(n)=y(n)+W(m,n)*X(n-m+1);%滤波器输出
end
end
end
E=D-y;%计算误差
a=a+1;
lmsMSE(a)=mean(E.^2);%根据目标函数计算MSE
for n=1:L-1
W(i,n+1)=W(i,n)+u*E(n)*X(n);%更新权值
end
end
a=linspace(1,L,L);%设置画MSE变化曲线的横坐标
f=reshape(E,h,k)+H;%重构图像矩阵
figure,subplot(2,2,1),imshow(F);
title('原图像')
D=reshape(D,h,k);
subplot(2,2,2),imshow(D);
title('退化图像')
myMSE=mean2((F-f).^2)
subplot(2,2,3),imshow(f);
title('复原图像')
subplot(2,2,4)
plot(a,lmsMSE,'r-');
title('当u=0.000001时的 MSE 变化曲线')
xlabel('迭代次数'),ylabel('MSE');
legend('lmsMSE(a)',0);
clear
clc
F=checkerboard(2); %原图像
D=imnoise(F,'gaussian',0,0.02); %退化图像=参考信号
nhood=[3 3];
% Estimate the local mean of f.
localMean = filter2(ones(nhood), D) / prod(nhood);
H=D-localMean;%仿照wiener2函数里的求取类似的“均值”
[h k]=size(D);
L=h*k;
D=reshape(D,L,1); %将图像矩阵变为矢量形式
f=zeros(size(D)); %系统输出=误差信号
y=f; %噪声逼近信号初始化
E=f; %声明误差矢量
%设置输入噪声信号=基本输入信号
%X=randn(h,k);
X=zeros(h,k);
X=imnoise(X,'gaussian',0,0.02);
X=reshape(X,L,1);
W=zeros(L,L); %设置权矢量初值
lmsMSE=f;
a=0;
%核心算法
u=0.000005;
for i=1:L
for n=1:L
for m=1:i
if n-m+1>0
y(n)=y(n)+W(m,n)*X(n-m+1);%滤波器输出
end
end
end
E=D-y;%计算误差
a=a+1;
lmsMSE(a)=mean(E.^2);%根据目标函数计算MSE
for n=1:L-1
W(i,n+1)=W(i,n)+u*E(n)*X(n);%更新权值
end
end
a=linspace(1,L,L);%设置画MSE变化曲线的横坐标
f=reshape(E,h,k)+H;%重构图像矩阵
figure,subplot(2,2,1),imshow(F);
title('原图像')
D=reshape(D,h,k);
subplot(2,2,2),imshow(D);
title('退化图像')
myMSE=mean2((F-f).^2)
subplot(2,2,3),imshow(f);
title('复原图像')
subplot(2,2,4)
plot(a,lmsMSE,'r-');
title('当u=0.000001时的 MSE 变化曲线')
xlabel('迭代次数'),ylabel('MSE');
legend('lmsMSE(a)',0);
全部回答
- 1楼网友:酒醒三更
- 2021-01-30 09:08
d_user=load('simuser_base1.txt'); 也许是文件格式错误,仔细看看你的load用法,对ascii格式要求很严格!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯