自适应滤波原理

article/2025/10/9 22:18:56

在网上,看到一篇不错的自适应滤波原理讲解的文章,原文网址为:自适应滤波原理简介
全文包括:
1. 自适应滤波器简介
2. 自适应干扰抵消原理
3. 自适应滤波原理
4. 最小均方(LMS)算法
5. Matlab实现

一、自适应滤波器简介

自适应滤波器由参数可调的数字滤波器和自适应算法两部分组成。如图所示。

在这里插入图片描述
输入信号x(n) 通过参数可调数字滤波器后产生输出信号 y(n),将其与期望信号d(n)进行比较,形成误差信号e(n), 通过自适应算法对滤波器参数进行调整,最终使 e(n)的均方值最小。自适应滤波可以利用前一时刻已得的滤波器参数的结果,自动调节当前时刻的滤波器参数,以适应信号和噪声未知的或随时间变化的统计特性,从而实现最优滤波。自适应滤波器实质上就是一种能调节自身传输特性以达到最优的维纳滤波器。自适应滤波器不需要关于输入信号的先验知识,计算量小,特别适用于实时处理。维纳滤波器参数是固定的,适合于平稳随机信号。卡尔曼滤波器参数是时变的,适合于非平稳随机信号。然而,只有在信号和噪声的统计特性先验已知的情况下,这两种滤波技术才能获得最优滤波。在实际应用中,常常无法得到信号和噪声统计特性的先验知识。在这种情况下,自适应滤波技术能够获得极佳的滤波性能,因而具有很好的应用价值。
常用的自适应滤波技术有:最小均方(LMS)自适应滤波器、递推最小二乘(RLS)滤波器格型滤波器和无限冲激响应(IIR)滤波器等。这些自适应滤波技术的应用又包括:自适应噪声抵消、自适应谱线增强和陷波等。

二、 自适应干扰抵消原理

如图是自适应干扰抵消器的基本结构。其中期望响应d(n) 是信号与噪声之和,即d(n)=x(n)+N(n),自适应处理器的输入是与 相关的另一个噪声 。当x(n) 与N(n) 不相关时,利用噪声的相关性,自适应滤波器将调整自己的参数,以力图使y(n)成为N(n) 的最佳估计 。这样, e(n)将逼近信号x(n)。噪声N(n) 就得到一定程度的抵消。但若参考通道除检测到噪声N’(n) 外,还收到信号分量,则自适应滤波器的输出中将包含信号分量,从而使噪声对消效果变坏。因此,为获得良好的噪声对消性能,应使参考通道检测到的信号尽可能小,在信号不可测的噪声环境拾取参考输入信号。

三、自适应滤波原理


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、Matlab实现

程序借用自 LMS自适应滤波器
在这里插入图片描述


1
2
3
4
5
6
7
8
% 迭代计算
for k = M:itr                  % 第k次迭代x = xn(k:-1:k-M+1);        % 滤波器M个抽头的输入y = W(:,k-1).' * x;        % 滤波器的输出en(k) = dn(k) - y ;        % 第k次迭代的误差% 滤波器权值计算的迭代式W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
end

LMSfilter.m

% 输入参数:
%     xn   输入的信号序列      (列向量)
%     dn   所期望的响应序列    (列向量)
%     M    滤波器的阶数        (标量)
%     mu   收敛因子(步长)      (标量)     要求大于0,小于xn的相关矩阵最大特征值的倒数   
% 输出参数:
%     W    滤波器的权值矩阵     (矩阵)
%          大小为M x itr,
%     en   误差序列(itr x 1)    (列向量) 
%     yn   实际输出序列         (列向量)
function [yn,W,en]=LMSfilter(xn,dn,M,mu)
itr = length(xn);
en = zeros(itr,1);             % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差
W  = zeros(M,itr);             % 每一行代表一个加权参量,每一列代表-次迭代,初始为0
% 迭代计算
for k = M:itr                  % 第k次迭代x = xn(k:-1:k-M+1);        % 滤波器M个抽头的输入y = W(:,k-1).' * x;        % 滤波器的输出en(k) = dn(k) - y ;        % 第k次迭代的误差% 滤波器权值计算的迭代式W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
end
% 求最优时滤波器的输出序列  r如果没有yn返回参数可以不要下面的
yn = inf * ones(size(xn)); % inf 是无穷大的意思
for k = M:length(xn)x = xn(k:-1:k-M+1);yn(k) = W(:,end).'* x;%用最后得到的最佳估计得到输出
end

主函数main,m设计
产生信号源,可以直接读取音频文件。

产生相关噪声,一个作为滤波输入,一个产生期望信号。

产生期望信号,信号源于噪声叠加产生含噪信号作为期望信号。

LMS滤波算法,调用LMSfilter.m函数。

绘制图形进行观察对比

clc;
clear all;
close all;%% 产生信号源
[X,Fs] = audioread('voicefile.wav');
s = X(:,1); %取出双通道中其中一个通道作为信号源s
audiowrite('原始音频.wav',s,Fs); %创建原始音频.wav
n = length(s);
t=(0:n-1);
figure(1);
subplot(4,1,1);
plot(t,s);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('原始音频信号');
%% 产生均值为0方差为0.1的噪声信号
v = sqrt(0.1)*randn(n,1);%% 产生AR模型的噪声
ar=[1,1/2];   %AR模型
v_ar=filter(1,ar,v);
% subplot(4,1,2);
% plot(t,v_ar);grid;
% ylabel('幅度');
% xlabel('时间');
% title('AR模型噪声信号');%% 产生MA模型的噪声 是AR模型的相关噪声
ma=[1,-0.8,0.4,-0.2];  %MA模型
v_ma=filter(ma,1,v);
subplot(4,1,2);
plot(t,v_ma);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('相关噪声信号');%% 产生期望信号
dn = s + v_ar;
audiowrite('含噪音频.wav',dn,Fs); %创建含噪音频
subplot(4,1,3);
plot(t,dn);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('含噪音频信号');%% LMS滤波算法
M = 50;     %滤波器阶数M
mu = 0.0008;  %滤波器的步长
[ylms,W,elms] =LMSfilter(v_ma,dn,M,mu);%% 绘制去噪后的语音信号
subplot(4,1,4);
plot(t,elms);grid;ylim([-2 2]);
ylabel('幅度');
xlabel('时间');
title('去噪后的音频信号');
audiowrite('去噪音频.wav',elms,Fs);%保存去除噪声的音频%%
e = s-elms;%剩余噪声
figure(2);
subplot(2,1,1);
plot(t,e);grid;
ylabel('幅度');
xlabel('时间');
title('剩余噪声');%% 一小段三个信号比较
subplot(2,1,2);
t=(100000:100500);
plot(t,elms(100000:100500,1 ),'r',t,e(100000:100500,1),'g',t,s(100000:100500,1),'b');
axis([100000,100500,-1,1]);
ylabel('幅度');
xlabel('时间');
legend('去噪后的语音信号','剩余噪声','原始音频');
title('一小段三个信号比较');

3.结果分析
在这里插入图片描述
步长 μ=0.0001时
在这里插入图片描述
步长μ=0.0004时
在这里插入图片描述
步长μ=0.0012时
在这里插入图片描述
在这里插入图片描述
由于编辑公式用的不熟练和时间关系,部分内容用了截图,敬请谅解。该文主要是对自适应滤波原理的一个学习笔记。


http://chatgpt.dhexx.cn/article/1VgDrcTO.shtml

相关文章

自适应滤波算法综述

我要讲的几种方法 绪论自适应滤波的基本原理自适应滤波算法自适应滤波算法种类最小均方误差算法(LMS)递推最小二乘算法(RLS)变换域自适应滤波算法仿射投影算法其他 自适应滤波算法性能评价 自适应滤波的Matlab仿真正弦信号加噪的L…

Java反射机制你还不会?那你怎么看Spring源码

文章目录 1.Java代码在计算机中经历的阶段:三个阶段2.Java识别类和对象信息的两种方式3.什么是反射4.获取Class对象的方式5.Class对象的功能6.通过反射操作类中的成员变量、构造函数、方法7.案例8.反射的优缺点 1.Java代码在计算机中经历的阶段:三个阶段…

Java 反射 理解

Java 反射 定义 Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。 简…

Java反射机制的原理和用途

看了好多关于Java反射机制的文章,大多都太过官方,消化起来比较稍显费劲,本篇,我会依据自己的理解去阐述什么是Java的反射机制,反射用在什么地方,以及怎么来使用? 开篇前,我们还是要了…

Java反射详解及作用

参考视频链接: 哔哩哔哩视频. 1. 反射概述 能够分析类能力的程序叫做反射(reflective),对于任何一个Class类,反射可以在运行时直接得到这个类的全部成分,包括构造器,成员方法,成员变量。获得的构造器对象为Construct…

JAVA反射机制分析-------spring的通过反射创建bean实例对象以及属性注入的原理解析

JAVA反射机制 java反射机制是在运行状态中,对于任意一个类, 能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。 巧妙的利用ja…

【Spring】spring的反射机制详解

一、什么是反射: (1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。 &…

Spring————java的反射机制,Spring的IOC和DI

一、认识Spring 1.1、Spring家族 SpringFramework: Spring框架:是Spring中最早核心的技术,也是所有其他技术及的基础。 SpringBoot:Spring是用来简化开发。而SpringBoot是来帮助Spring在简化的基础上能更快速进行开发。 SpringCloud&#xf…

分布式定时任务调度实战

目录 1、为什么需要定时任务 2、定时任务调度框架 2.1 单机 2.2 分布 3、xxl-job和elastic-job对比 3.1 支持集群部署方式 3.2 多节点部署任务执行方式 3.3 日志可追溯 3.4 监控告警 3.5 弹性扩容缩容 3.6 支持并行调度 3.7 高可用策略 3.8 失败处理策略 3.9 动态…

浅谈传统定时任务和分布式定时任务

为什么用定时任务? 定时任务平台可以在后台自动检测数据并进行操作。主要应用在订单状态改变、后台统计、定时发送邮件或短信等。 定时任务怎么部署实现? 传统的定时任务可以通过可定时线程池、timertask、quartz、spring-schedule方式来进行处理。他…

分布式定时任务技术选型

1、目前的定时任务方案 Java中开发大多数使用Spring-Scheduler,只需要在Spring中的bean的对应方法加上sheduler注解即可完成我们的定时任务,但是光是用这个注解还远远不能保证定时任务执行多次,我们需要一些其他手段的保证,一般来…

java 分布式 定时任务_Java中实现分布式定时任务的方法

定时器Scheduler在平时使用比较频繁,在springboot中,配置好Scheduled和EnableScheduling之后,定时器就能正常执行,实现定时任务的功能。 但是在这样的情况下:如果开发的服务需要水平部署实现负载均衡,那么定…

【手把手】分布式定时任务调度解析之Quartz

1、任务调度背景 在业务系统中有很多这样的场景: 1、账单日或者还款日上午 10 点,给每个信用卡客户发送账单通知,还款通知。如何判断客户的账单日、还款日,完成通知的发送? 2、银行业务系统,夜间要完成跑批…

轻量级分布式定时任务框架XXL-Job

轻量级分布式定时任务框架XXL-Job: XXL-JOB是一款轻量级的分布式定时任务框架,上手简单,操作容易,XXL-Job可以到官网下载也可以去gitee上拉取源码,其中核心模块分页两个:1:是分布式调度服务, 2&…

Springboot结合Redis实现分布式定时任务

一、背景 之前分享过分布式定时任务的技术选型方案:分布式定时任务技术选型方案,个人青睐xxl_job,分享了搭建接入流程:xxl_job搭建方案,本次项目需求较为简单,同时时间紧张。下面介绍利用Redis锁实现分布式…

分布式定时任务框架说明

分布式定时任务框架说明 分布式定时任务框架说明Quartz概念架构组件springboot集成方式使用内存使用数据库 TBSchedule:elastic-job概念架构组件执行流程特性 satumxxl-job概念特性架构组件使用 分布式定时任务框架说明 Quartz 概念 Quartz:Java事实上…

分布式定时任务对比

1. 什么是分布式定时任务 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。 2. 常见开源方案 elastic-job , xxl-job ,quartz , saturn, opencron , antares el…

简单粗暴的分布式定时任务解决方案

分布式定时任务 1.为什么需要定时任务?2.数据库实现分布式定时任务3.基于redis实现 1.为什么需要定时任务? 因为有时候我们需要定时的执行一些操作,比如业务中产生的一些临时文件,临时文件不能立即删除,因为不清楚用户…

Java 实现分布式定时任务

文章目录 前言一、技术点二、代码实践1、引入库2、创建启动线程入口3、表结构4、任务解析5、任务拉取 三、结果展示四、总结 前言 最近有一个需求:需要实现分布式定时任务。而市面上的定时任务大多数都是基于Scheduled注解进行实现。不符合需求。所以根据需求整体思…

分布式定时任务调度

前言 什么是分布式定时任务? 把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。 为什么要采用分布式定时任务? 单点定时任务的缺点: 功能相对简单&#xff0c…