完整的实验报告下载链接

一、实验原理

    自适应滤波器由参数可调的数字滤波器和自适应算法两部分组成。 自适应滤波与维纳滤波、卡尔曼滤波最大的区别在于,自适应滤波在输出与滤波系统之间存在有反馈通道,根据某一时刻滤波器的输出与期望信号的误差调整滤波器的系数,从而实现滤波器系数的动态调整,实现最优滤波。

1.1 信号模型

自适应滤波的目的仍然是从观测信号中提取真实准确的期望信号,因此涉及到的信号有:1)期望信号 d(n)

2)输入信号 x(n)=d(n)+v(n)

3)输出信号 y(n)

1.2 算法原理

一个M阶滤波器,系数为w(m),则输出为:y(n)=Σw(m)x(n-m) m=0…M,写成矩阵形式:y(j)=WT(j)*X(j),n时刻的输出误差为: e(j)=d(j)-y(j)= d(j)- WT(j)*X(j),

定义目标函数为 E[e(j)^2],则有:J(j)=E[e(j)^2]= E[(d(j)- WT(j)*X(j))^2]。

当上述误差达到最小时,即实现最优滤波,这种目标函数确定的为最小方差自适应滤波。对于目标函数J(j),需要求得使其取到最小值对应的W,这里使用梯度下降法进行最优化:W(j+1)=W(j)+1/2*μ(-▽J(j))

▽J(j)=-2E[X(j)*( d(j)- WT(j)*X(j))]= -2E[X(j)e(j)]

W(j+1)=W(j)+μE[X(j)e(j)]

其中-2X(j)e(j)称为瞬时梯度,因为瞬时梯度是真实梯度的无偏估计,这里可以使用瞬时梯度代替真实梯度。W(j+1)=W(j)+μX(j)e(j)

由此,可以得到自适应滤波最佳系数的迭代公式。

二、实验内容

设计一个自适应滤波器,结合一定应用,对语音、图像、视频等某种对象进行处理。

三、实验过程及结果

此次实验拟对图像进行去噪操作,实现灰度图像复原。

3.1 准备含噪声图像

准备一张彩色图像,首先将彩色图像转化为灰度图像,代码操作如图3.1所示。

pythonRLS自适应滤波器 自适应滤波器算法实验_标准差

图3.1 彩色图转化为灰度图的代码句式

接着在原始图像上人为加入均值为0、标准差为0.1的高斯噪声,以供后续使用,效果展示如图3.2。

pythonRLS自适应滤波器 自适应滤波器算法实验_matlab_02

图3.2 产生含噪声图像效果

3.2 自适应滤波器去噪

选择窗口大小为9*9的自适应滤波器进行滤波处理,结果如图3.3所示。

pythonRLS自适应滤波器 自适应滤波器算法实验_自适应_03

图3.3 自适应滤波器滤波后的效果

通过对比,自适应滤波器处理后的图像明显比噪声图像清晰很多,界限也相对分明,效果显著。若将滤波后图像与原图像相比,随有处理不到位的地方,但几乎接近原图,效果显著。

四、总结与展望

通过实验实现自适应滤波器对图像去噪的处理,达到图像复原的效果。进一步体会到了自适应滤波器的原理,通过不断地缩小误差,以寻求最优化。此次实验较为简单,后续还可以尝试自适应滤波器对语音、视频等的处理,并添加一些如LMS等的算法,以求得更好结果。

五、附录

5.1 产生噪声图像的程序

function [gImg] = addGaussianNoise(avg,std)

img1=imread('E:\matlab\work\suijishuzixinhaochuli\colorful.jpg');

img=rgb2gray(img1);

[imgH,imgW]=size(img);

% 产生和图像维度相同的噪声,叠加到图像上

gImg=uint8((double(img)/255+avg+std*randn(imgH,imgW))*255);

figure();

subplot(2,2,1);

imshow(img),title('原始图像');

subplot(2,2,2);

imshow(gImg),title('均值为'+string(avg)+'标准差为'+string(std)+'的高斯噪声图像');

5.2 自适应滤波器图像复原的程序

function []=adaptFilter(fsize)

% 获取均值为0,标准差为0.1的高斯噪声图像

gImg = double(addGaussianNoise(0,0.1));

[imgH,imgW]=size(gImg);

gNewImg = gImg;

% 根据滤波器尺寸计算半长

if mod(fsize,2)

    flength = (fsize-1)/2;

else

    flength = fsize/2;

end

 for i=1+flength:imgH-flength

        for j=1+flength:imgW-flength

                gTemp = gImg(i-flength:i+flength,j-flength:j+flength);

                avg = mean(gTemp(:));

                v = var(gTemp(:));

                gNewImg(i,j)=gImg(i,j)-255*255*0.01/v*(gImg(i,j)-avg);

        end

    end

gImg = uint8(gImg);

gNewImg=uint8(gNewImg);

subplot(2,2,3); imshow(gImg),title('高斯噪声图像');

subplot(2,2,4); imshow(gNewImg),title('自适应滤波器(窗口大小为' + string(fsize) + ')处理后图像'); end