(60)使用LMS算法和NLMS(归一化LMS)算法进行降噪

文章目录

  • 前言
  • 一、关于自适应降噪仿真的几点说明
    • 1.降噪
    • 2. 参考信号与噪声信号
    • 3. LMS算法的步长
    • 4.自适应降噪原理
    • 5.维纳滤波器系数
  • 二、LMS与NLMS自适应降噪的仿真
  • 三、仿真结果


前言

本文介绍了LMS自适应滤波器和NLMS自适应滤波器在降噪方面的应用,阐明期望信号、参考信号和噪声信号的差别,以及它们在LMS自适应滤波和NLMS自适应滤波过程中的应用,还说明了类LMS自适应算法步长的选择。给出了完整的MATLAB仿真代码与降噪结果,另外,还将LMS自适应滤波器、NLMS自适应滤波器与最优的FIR维纳滤波器进行了对比,可以看到在LMS与NLMS的自适应过程中,自适应滤波器系数收敛于维纳滤波器系数。


一、关于自适应降噪仿真的几点说明

1.降噪

降噪也称信号增强,是指使用自适应滤波器进行噪声滤除,从噪声干扰的信号中提取期望的信号。

2. 参考信号与噪声信号

为了进行自适应滤波,一般需要两个信号:一个参考信号,一个包含期望信号和附加噪声成分的噪声信号。

3. LMS算法的步长

类LMS算法有一个步长参数,它决定了滤波器从一个迭代到下一个迭代所应用的校正量。选择合适的步长并不总是容易的,通常需要自适应滤波器设计的经验。步长太小会增加滤波器收敛到一组系数的时间,这是一个收敛速度和准确性的问题。步长太大可能会导致自适应滤波器发散,永远无法达到收敛。在这种情况下,关注的问题是稳定性,要避免设计的滤波器不稳定。 就设计校验而言,较小的步长可以提高滤波器收敛的准确性,但这是以适应所需时间为代价的。

MATLAB中,dsp.LMSFilter对象的maxstep函数可以用来计算滤波器收敛的条件下,适合每个LMS自适应滤波器算法的最大步长通常,步长的符号是mu。maxstep有两个返回值,第一个是系数均值收敛所需的值,第二个是系数均方收敛所需的值。选择较大的步长通常会导致从收敛值产生较大的波动,因此通常选择较小的步长。

4.自适应降噪原理

在设置了自适应滤波器的参数,并准备好所需的参考信号与噪声信号后,将进行自适应滤波过程,滤波器的输出y尽可能接近期望信号x。 由于参考v2只与x的噪声成分v1相关,它实际上只能模拟v1。误差信号(期望的x)减去实际输出y,构成了与v2不相关的x部分的估计s,即要从x中提取的信号。

5.维纳滤波器系数

最后,为了进行比较,代码中还计算了最优的FIR维纳滤波器。

二、LMS与NLMS自适应降噪的仿真

以下是LMS与NLMS自适应降噪的仿真代码:

clc
close all
clear all
%% 创建自适应信号
% 期望的信号(处理过程的输出)是一个包含1000个样本的正弦波。
f = 1;                               % 频率,单位Hz
fs = 30;                             % 采样率,单位Hz
Ts = 1/fs;                           % 采样间隔,单位秒
t = (1:1000) * Ts;                   % 采样时刻
s = sin(2*pi*f*t');                  % 期望信号% 生成包含期望信号和噪声的噪声信号
v = 0.8*randn(1000,1);               % 随机噪声
ar = [1,1/2];                        % 自回归系数
v1 = filter(1,ar,v);                 % 噪声
x = s + v1;                          % 噪声信号% 创建参考信号 
ma = [1, -0.8, 0.4 , -0.2];
v2 = filter(ma,1,v);                 % 参考信号 
%% 构建LMS自适应滤波器和NLMS自适应滤波器
L = 7;                               % LMS和NLMS,都是6阶的
lms = dsp.LMSFilter(L,'Method','LMS');
nlms = dsp.LMSFilter(L,'Method','Normalized LMS');
%% 选择步长
[mumaxlms,mumaxmselms]   = maxstep(lms,x);
% mumaxlms = 0.2134
% mumaxmselms = 0.1264
[mumaxnlms,mumaxmsenlms] = maxstep(nlms,x);
% mumaxnlms = 2
% mumaxmsenlms = 2
%% 设置自适应滤波器步长
% 选择较小的步长
lms.StepSize  = mumaxmselms/30;
nlms.StepSize = mumaxmsenlms/20;
%% 使用自适应滤波器进行滤波
[ylms,elms,wlms] = lms(v2,x);
[ynlms,enlms,wnlms] = nlms(v2,x);
%% 计算维纳最优解
bw = firwiener(L-1,v2,x);            % 最优FIR维纳滤波器
yw = filter(bw,1,v2);                % 使用维纳滤波器估计x
ew = x - yw;                         % 实际正弦信号的估计
%% 绘制结果
% 绘制每个滤波器处理后的去噪正弦波结果
figure();
plot(t(900:end),ew(900:end),'LineWidth',1.5);
hold on;
plot(t(900:end),elms(900:end),'LineWidth',1.5);
plot(t(900:end),enlms(900:end),'LineWidth',1.5);
plot(t(900:end),x(900:end),'k:');                      % 用虚线画出噪声信号,作为参考
grid on;
legend('Wiener filter denoised sinusoid',...'LMS denoised sinusoid',...'NLMS denoised sinusoid',...'Noisy Signal');
title('滤波处理后的去噪正弦波');
xlabel('Time index (n)'); ylabel('Amplitude');
hold off;
%% 画图比较最终系数
figure()
subplot(311)
plot(bw,'ro-','LineWidth',1.5);                  % 维纳滤波器的系数
grid on; title('Wiener filter coefficients');
xlabel('coefficients index'); ylabel('coefficients');
subplot(312)
plot(wlms,'bo-','LineWidth',1.5);                % LMS自适应滤波器系数
grid on; title('LMS adaptive filters coefficients');
xlabel('coefficients index'); ylabel('coefficients');
subplot(313);
plot(wnlms,'go-','LineWidth',1.5);               % NLMS自适应滤波器系数
grid on; title('NLMS adaptive filters coefficients');
xlabel('coefficients index'); ylabel('coefficients');

三、仿真结果

(1)带噪信号与自适应降噪处理后的信号对比:

在这里插入图片描述

(2)LMS与NLMS自适应滤波器系数与FIR维纳滤波器系数:

在这里插入图片描述

通过比较最终系数可以发现:在自适应过程中,自适应滤波器收敛于维纳系数。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10532.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何从Python函数中返回列表

在 Python 中,可以轻松地从函数中返回一个列表。可以将列表直接作为返回值,通过 return 语句将其返回。 1、问题背景 在编写一个游戏时,需要创建一个函数来返回一个列表变量,以便将其传递给另一个变量。但是,在运行程…

深 度 学 习

神经网络基础 一、逻辑回归( Logic Regression ) 1 问题的模型 模型: 其中xx为输入量,y^y^​预测量,σ()σ()激活函数。   逻辑回归主要用于二分类问题的拟合:0≤y^P(y1∣x)≤10≤y^​P(y1∣x)≤1,σ(z)σ(z)如图…

GEE 数据集——美国gNATSGO(网格化国家土壤调查地理数据库)完整覆盖了美国所有地区和岛屿领土的最佳可用土壤信息

目录 简介 代码 引用 网址推荐 知识星球 机器学习 gNATSGO(网格化国家土壤调查地理数据库) 简介 gNATSGO(网格化国家土壤调查地理数据库)数据库是一个综合数据库,完整覆盖了美国所有地区和岛屿领土的最佳可用土…

(金蝶云星空)客户端追踪SQL

快捷键 ShitfCtryAltM 点击开始、最后操作功能、然后查看报告 SQL报告

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能,今天继续进行开发,创作不易,请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

【数据处理】数据预处理·数据变换(熵与决策树)

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必备知识_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…

【电子通识】TINA-TI 如何产生动态电流波形?

在仿真过程中我们有些时候需要动态电流负载。比如说从5A跳到1A。那这种情况下我们怎么仿真呢? 首先打开TINA-TI软件,找到Sources源,放置一个可控电流源。 放置好后双击器件打开属性,点到Signal信号框中的三个小点。 找到piecewise…

【Qt聊天室客户端】登录窗口

1. 验证码 具体实现 登录界面中创建验证码图片空间&#xff0c;并添加到布局管理器中 主要功能概述&#xff08;创建一个verifycodewidget类专门实现验证码操作&#xff09; 详细代码 // 头文件#ifndef VERIFYCODEWIDGET_H #define VERIFYCODEWIDGET_H#include <QWidget>…

十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解

目录 1. spring-boot-starter-web 简介 1.1 作用与功能&#xff1a; 1.2 引入方式&#xff1a; 1.3 包含的核心依赖&#xff1a; 2. 自动配置原理 3. 内嵌 Servlet 容器 3.1 默认 Tomcat 配置&#xff1a; 3.2 替换容器&#xff08;Jetty 或 Undertow&#xff09;&#…

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码...

全文链接&#xff1a;https://tecdat.cn/?p38195 股票市场在经济发展中占据重要地位。由于股票的高回报特性&#xff0c;股票市场吸引了越来越多机构和投资者的关注。然而&#xff0c;由于股票市场的复杂波动性&#xff0c;有时会给机构或投资者带来巨大损失。考虑到股票市场的…

MySQL中的INT(4)里面的4究竟代表着什么

目录 1. 理解INT类型中的数字2. INT显示宽度与INSERT操作3. SELECT、INSERT、UPDATE、DELETE与显示宽度4. 实际应用中的影响场景5. 创建表时的建议 1. 理解INT类型中的数字 在MySQL中&#xff0c;当你定义一个整数字段为INT(M)&#xff0c;这里的M代表的是显示宽度。 这个数字…

Spring Boot实现的工程认证计算机课程管理解决方案

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于工程教育认证的计算机课程管理平台的相…

中药香料价钱快速划价计算器软件 中药文本识别计算费用管理系统操作教程

一、概述 【软件试用版资源文件下载可点文章最后官网卡片了解】 中药香料价钱快速划价计算器软件 中药文本识别计算费用管理系统操作教程 ‌核心功能‌&#xff1a;快速划价与账单管理。 ‌快速划价‌&#xff1a;复制药方文本&#xff0c;点击划价按钮即可计算总金额‌。‌账…

代码随想录刷题记录(二十五)——54. 替换数字

&#xff08;一&#xff09;问题描述 54. 替换数字&#xff08;第八期模拟笔试&#xff09;https://kamacoder.com/problempage.php?pid1064给定一个字符串 s&#xff0c;它包含小写字母和数字字符&#xff0c;请编写一个函数&#xff0c;将字符串中的字母字符保持不变&#…

【温度表达转化】

【温度表达转化】 C语言代码C代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 利用公式 C5∗(F−32)/9 &#xff08;其中C表示摄氏温度&#xff0c;F表示华氏温度&#xff09; 进行计算转化。 输出 输出一行&#x…

【时间之外】IT人求职和创业应知【32】-RTE二次出现

目录 新闻一&#xff1a;AI-AGENT加速落地&#xff0c;计算机行业利润端好转 新闻二&#xff1a;声网CEO赵斌&#xff1a;RTE将成为生成式AI时代AI Infra的关键部分 新闻三&#xff1a;11月科技盛会&#xff1a;新技术与产品发布一览 认知和思考决定了你的赚钱能力。以下是今…

基于51单片机的温控电风扇proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1vgYgY41tp_axxVFTHAPwFg 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

Spring 配置绑定原理分析

Spring 配置绑定原理分析 前言 Spring 应用中存在诸多配置&#xff0c;有的是系统配置&#xff0c;有的命令行启动参数配置&#xff0c;有的是yaml配置&#xff0c;有的是分布式配置中心配置&#xff0c;但对使用者而言总是可以通过ConfigurationProperties将它关联到一个Java…

Hadoop生态圈框架部署(五)- Zookeeper完全分布式部署

文章目录 前言一、Zookeeper完全分布式部署&#xff08;手动部署&#xff09;1. 下载Zookeeper2. 上传安装包2. 解压zookeeper安装包3. 配置zookeeper配置文件3.1 创建 zoo.cfg 配置文件3.2 修改 zoo.cfg 配置文件3.3 创建数据持久化目录并创建myid文件 4. 虚拟机hadoop2安装并…

HarmonyOS Next 实战卡片开发 03

HarmonyOS Next 实战卡片开发 03 在前面两张&#xff0c;我们基本掌握了卡片的使用流程&#xff0c;本章节就通过一个实战来加强对卡片使用的理解。 要完成的案例 新建项目和新建服务卡片 设置沉浸式 entry/src/main/ets/entryability/EntryAbility.ets 首页显示轮播图数据 1…