最小均方误差(LMS)算法简单易行,故在系统识别、噪声去除以及信道估计等方面已得到广泛的应用。
在图像处理方面,最小均方误差法通过计算数字半调图像与原始图像在人眼视觉中的均方误差,并通过算法使其最小来获得最佳的半调图像。该算法设计两个人眼视觉滤波器,分别对原始图像和半调处理图像进行滤波,得到两个值,进而求得两值的均方差。在实际操作中,通常假定一个半调处理的估计值,通过迭代算法优化该估计值,最后确定一个局部收敛的实际值。该算法由于采用了迭代算法,所以在计算量上和别的算法相比会大几个数量级。
图像方面:评价一个半调处理的好坏可以通过分析该算法在图像的大面积相同区域、灰度渐变区域、灰度突变区域的人工纹理(Artifacts)翻及图像灰度误差的大小。大面积相同灰度相同区域时,块置换算法和抖动算法都以单位模板序列为基础,容易产生有规律的周期纹理,误差分散法和最小均方算法引进了误差和均方差的补偿没有明显的人工纹理;灰度渐变区域块置换算法和抖动算法容易产生伪轮廓。在灰度突变区域,误差分散算法采用误差传递,使原始图像灰度突变的硬边界和阈值误差变得柔和分散,产生边缘钝化;块置换算法能够保证区域灰度接近,但无法保证图像细节;随机抖动算法产生大量的噪声,无法保证图像的质量。有序抖动算法能够比较好的反映图像的变化,表达图像细节。
在音频方面在滤波去噪方面也有对应的应用,相关代码:
close all;clear; clc;%% 导入音频filedir=[]; % 设置路径filename='bluesky1.wav'; % 设置文件名fle=[filedir filename]; % 构成完整的路径和文件名[s, fs] = audioread(fle); % 读入数据文件s=s-mean(s); % 消除直流分量s=s/max(abs(s)); % 幅值归一N=length(s); % 语音长度time=(0:N-1)/fs; % 设置时间刻度SNR = 5; % 设置信噪比r2=randn(size(s)); % 产生随机噪声b=fir1(32,0.5); % 设计FIR滤波器,代替Hr21=filter(b,1,r2); % FIR滤波[r1,r22]=add_noisedata(s,r21,fs,fs,SNR);% 产生带噪语音,信噪比为SNR%% 训练阶段h_length = 100;h = zeros(h_length,1); % 滤波器的初始化miu = 1e-4;y_out = zeros(size(s));Ntimes = 3;err2 = zeros(length(s)*Ntimes,1);counter = 1;% 开始滤波for kk = 1:Ntimesfor k = h_length : Nidx = k: -1 :(k-h_length+1);r1_in_sub = r1(idx);filter_out = h.' * r1_in_sub;y_out(k) = filter_out;dk = s(k);err = dk - filter_out;err2(counter) = err^2;h = h + miu * err * r1_in_sub;counter = counter + 1;endend% sound(s,fs);% sound(r1,fs);% sound(y_out,fs);%% 作图figureplot(err2);grid on;title('均方误差');figure;subplot 311; plot(time,s,'k'); ylabel('幅值')ylim([-1 1 ]); title('原始语音信号');subplot 312; plot(time,r1,'k'); ylabel('幅值')ylim([-1 1 ]); title('带噪语音信号');subplot 313; plot(time,y_out,'k');ylim([-1 1 ]); title('LMS滤波输出语音信号');xlabel('时间/s'); ylabel('幅值')
归根结底:这是一个需要“训练”(或者说“学习”)的滤波器,在“学习”的过程中,希望把滤波器的输出与期望信号(训练信号)之差,作为算法的反馈。