======= Wikipedia的解释 =======

自适应滤波器是能够根据输入信号自动调整性能进行数字信号处理数字滤波器。作为对比,非自适应滤波器有静态的滤波器系数,这些静态系数一起组成传递函数

对于一些应用来说,由于事先并不知道所需要进行操作的参数,例如一些噪声信号的特性,所以要求使用自适应的系数进行处理。在这种情况下,通常使用自适应滤波器,自适应滤波器使用反馈来调整滤波器系数以及频率响应。

总的来说,自适应的过程涉及到将代价函数用于确定如何更改滤波器系数从而减小下一次迭代过程成本的算法。价值函数是滤波器最佳性能的判断准则,比如减小输入信号中的噪声成分的能力。

随着数字信号处理器性能的增强,自适应滤波器的应用越来越常见,时至今日它们已经广泛地用于手机以及其它通信设备、数码录像机和数码照相机以及医疗监测设备中。

下面图示的框图是最小均方滤波器(LMS)和递归最小平方en:Recursive least squares filter,RLS)这些特殊自适应滤波器实现的基础。框图的理论基础是可变滤波器能够得到所要信号的估计。

在开始讨论结构框图之前,我们做以下假设:

  • 输入信号是所要信号  和干扰噪声  之和
  • 可变滤波器有有限脉冲响应结构,这样结构的脉冲响应等于滤波器系数。 阶滤波器的系数定义为
.
  • 误差信号或者叫作代价函数,是所要信号与估计信号之差

可变滤波器通过将输入信号与脉冲响应作卷积估计所要信号,用向量表示为

其中

是输入信号向量。另外,可变滤波器每次都会马上改变滤波器系数

其中  是滤波器系数的校正因子。自适应算法根据输入信号与误差信号生成这个校正因子,LMS 和 RLS 是两种不同的系数更新算法。

======= 我关于自适应滤波器及其应用的理解 =======

相对于其它类型的滤波器,自适应滤波器效果更好的关键是:自适应滤波器是反馈结构

自适应滤波器的自适应过程是:用自适应算法(Update Algorithm)调节FIR或IIR滤波器的系数,使误差信号逼近于0。

自适应滤波器的应用:

系统辨识

逆系统辨识

噪声消除

拟合预测

有关使用LMS算法进行线性拟合预测的内容参见博文:最小均方算法(LMS Algorithm)理论及DSP实现

对于初学者,实际问题中,比如一个不知道分布状态的声音信号,期望信号d(x)的确定很难理解,而很多文章都没有提到这点!在上面提到的自适应滤波器的4种应用中,我觉得最大的不同也在于d(x)的不同。

自己对这点也不是特别清晰,希望有识之士能提供帮助。这里暂且先做个标记!

======= Matlab代码演示 =======

自适应滤波器的函数

function [yn err] = zx_lms(xn, dn, param)
% x 输入信号
% dn 期望输出
% param Structure for using LMS, must include at least
% .w - 初始化权值
% .u - 学习率
% .M - 滤波器阶数
% .max_iter - 最大迭代次数
% .min_err - 迭代最小误差
%
% y 经过滤波器后的输出信号
% error 误差输出 W = param.w; % 初始权值
M = param.M; % 滤波器阶数 if length(W) ~= M
error('param.w的长度必须与滤波器阶数相同.\n');
end
if param.max_iter > length(xn) || param.max_iter < M
error('迭代次数太大或太小,M<=max_iter<=length(xn)\n');
end iter = 0;
for k = M:param.max_iter
x = xn(k:-1:k-M+1); % 滤波器M个抽头的输入
y = W.*x;
err = dn(k) - y; % 更新滤波器权值系数
W = W + 2*param.u*x; iter = iter + 1;
if (abs(err) < param.min_err); break; end
end % 求最优时滤波器的输出序列
yn = inf * ones(size(xn));
for k = M:length(xn)
x = xn(k:-1:k-M+1);
yn(k) = W(:,end).'* x;
end end

调用自适应滤波器实例,参考信号d(x)为正弦信号,加高斯白噪声后构成输入信号x(n),

clear all;
clc;
close all; fs = 44100;
% x = wavread('b.wav');
t = -5*pi:pi/100:5*pi;
x = sin(t);
x = x(:);
sx = size(x,1); subplot(2,2,1);
plot(x);axis([0 sx -1 1]); % 原信号FFT
xf = fft(x,1024);
subplot(2,2,3);
plot(abs(xf)); % 添加高斯噪声
t = 0 : 1/fs : (sx-1)/fs;
noise = 0.2*randn(size(x)); % 均值为0,方差为0.5的标准正态噪声
x1 = x + noise;
subplot(2,2,2);
plot(x1);axis([0 sx -1 1]); % 信号加噪声后的FFT
xf = fft(x1,1024);
subplot(2,2,4);
plot(abs(xf)); % LMS自适应滤波
param.M = 50;
param.w = ones(param.M, 1) * 0.1;
param.u = 0.1;
param.max_iter = 100;
param.min_err = 0.5; [yn err] = zx_lms(x1(:,1), x(:,1), param); figure,
plot(yn) ynf = fft(yn(param.M:end), 1024);
figure,
plot(abs(ynf));

使用LMS自适应滤波器前原始信号和加高斯白噪声后的信号(时域+频域)如下,

使用LMS对添加了高斯白噪声的信号滤波后效果如下,

自适应滤波器(Adaptive Filter)的更多相关文章

  1. RLS自适应滤波器中用矩阵求逆引理来避免求逆运算

    在RLS自适应滤波器的实现过程中,难免不涉及矩阵的求逆运算.而求逆操作双是非常耗时的,一个很自然的想法就是尽可能的避免直接对矩阵进行求逆运算.那么,在RLS自适应滤波器的实现中,有没有一种方法能避免直 ...

  2. 卡尔曼滤波器 Kalman Filter (转载)

    在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”.跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡 尔曼全名Rudolf Emil ...

  3. [转]计算机视觉之跟踪算法——相关滤波器Correlation Filter

    https://blog.csdn.net/victoriaw/article/details/62416759 ASEF相关滤波器: Average of Synthetic Exact Filte ...

  4. 自适应增强(Adaptive Boosting)

    简介 AdaBoost,是英文”Adaptive Boosting“(自适应增强)的缩写,是一种迭代提升算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成 ...

  5. 【VS开发】【图像处理】双边滤波器bilateral filter

    目录(?)[-] 简介 原理 代码实现 1 Spatial Weight 2 Similarity Weight 3 Color Filtering 在SSAO中的使用 1. 简介 图像平滑是一个重要 ...

  6. [转]SparkSQL的自适应执行---Adaptive Execution

    1 背景 本文介绍的 Adaptive Execution 将可以根据执行过程中的中间数据优化后续执行,从而提高整体执行效率.核心在于两点 执行计划可动态调整 调整的依据是中间结果的精确统计信息 2 ...

  7. 测试卡尔曼滤波器(Kalman Filter)

    真实的温度测试数据,通过加热棒加热一盆水测得的真实数据,X轴是时间秒,Y轴是温度: 1)滤波前 2)滤波后(p=10, q=0.0001, r=0.05, kGain=0;) 2)滤波后(p=10, ...

  8. TI C64X+通用库函数使用手册

    在使用前,当知悉以下几点: 函数进程由手动汇编而成,已充分发挥器件效率.同时TI对外提供C和线性汇编代码 对于个人一些特殊应用,DSPLIB可能会带来额外的cycle消耗 TI DSPLIB依平台和时 ...

  9. 自适应滤波:最小均方误差滤波器(LMS、NLMS)

    作者:桂. 时间:2017-04-02  08:08:31 链接:http://www.cnblogs.com/xingshansi/p/6658203.html 声明:欢迎被转载,不过记得注明出处哦 ...

随机推荐

  1. java邮件小实例

    新建一个包,名为mail 第一个类:MailSenderInfo.java  ########################################### package com.util. ...

  2. C#后台代码编写图片地址Properties.Resources._1;

    if (i == 0)            {                pictureBox1.Image = Properties.Resources._1;                ...

  3. QSerialPort

    (草稿) qt5提供QSerialPort类,封装了串口的api, 可以用这个类写串口通信程序.

  4. Android 播放声音

    public static void PlayAlarmRing(Context mContext) { Uri alert = RingtoneManager.getDefaultUri(Ringt ...

  5. GPSR协议移植

    修改的文件有packet.h.cmu-trace.cc.priqueue.cc.ns-packet.tcl.Makefile 1.在 $HOME/ns-allinone-2.29/ns-2.29下新建 ...

  6. 使用ACE获取主机的IP地址

    使用ACE获取主机的IP地址,不知道为什么会有127.0.0.1? #include "stdafx.h" #include "ace\OS.h" #inclu ...

  7. 动态链接库dll的 静态加载 与 动态加载

    dll 两种链接方式  : 动态链接和静态链接(链接亦称加载) 动态链接是指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统 ...

  8. yii phpexcel自己主动生成文件保存到server上

    近期再整一个报表任务,每天必须把表导出来按excel格式发送邮件给管理员,利用phpexcel把表保存到server上.然后再通过phpmailer发送就ok. ob_end_clean();     ...

  9. [TroubleShootin]The backup set holds a backup of a database other than the existing &#39;xxdb&#39; database.

     One: he backup set holds a backup of a database other than the existing 'xxdb' database Sometime ...

  10. UITabBarController中自定义UITabBar

    1.创建多个视图控制器,放如UITabBarController中 AViewController *aa = [[AViewController alloc] init]; UINavigation ...