FXLMS主动降噪的simulink建模与仿真
**
**
FXLMS主动降噪的Simulink建模与仿真
**
**
最近在研究关于主动降噪的课题,在摸索学习的过程中,分享一些初步学到的知识。
**FXLMS算法是基于LMS算法在次级通道补偿方向上做出的改进算法,我在simulink中对其进行了建模与仿真,希望对一起学习的小伙伴有所帮助。
**
以下是我的仿真图:
其中用2个频率分别为80HZ和110HZ的正弦信号叠加模拟噪音信号,初级通道传递函数为假定值,用滤波器函数来代替。
次级通道传递函数也是用滤波器来假定的值。
而次级通道传递函数估计是对次级通道的估计,实际情况下可以由在线辨识或离线辨识得到,在这里我假定理想状态次级通道估计和次级通道相同。
FXLMS fliter 是用S函数块编写的自适应滤波器,其中有三个输入,两个输出。
输入1:初始噪音信号
输入2:经过次级通道传递函数估计补偿的噪音信号
输入3:噪音抵消后的误差信号,理想状态为0
输出1:经过LMS算法计算权重后的自适应滤波器输出,用来抵消噪音
输出2:LMS算法计算的权重
function test(block)setup(block);
%endfunctionfunction setup(block)%% Register dialog parameter: LMS step size block.NumDialogPrms = 1;block.DialogPrmsTunable = {'Tunable'};% block.DialogPrm(1).Name = 'StepSize';% block.DialogPrm(1).DataTypeId = 0;%% Regieste number of input and output portsblock.NumInputPorts = 3;block.NumOutputPorts = 2;%% Setup functional port properties to dynamically%% inherited.block.SetPreCompInpPortInfoToDynamic;block.SetPreCompOutPortInfoToDynamic;block.InputPort(1).Complexity = 'Real'; block.InputPort(1).DataTypeId = 0;block.InputPort(1).SamplingMode = 'Sample';block.InputPort(1).Dimensions = 1;block.InputPort(2).Complexity = 'Real';block.InputPort(2).DataTypeId = 0;block.InputPort(2).SamplingMode = 'Sample';block.InputPort(2).Dimensions = 1;block.InputPort(3).Complexity = 'Real';block.InputPort(3).DataTypeId = 0;block.InputPort(3).SamplingMode = 'Sample';block.InputPort(3).Dimensions = 1;block.OutputPort(1).Complexity = 'Real';block.OutputPort(1).DataTypeId = 0;block.OutputPort(1).SamplingMode = 'Sample';block.OutputPort(1).Dimensions = 1;block.OutputPort(2).Complexity = 'Real';block.OutputPort(2).DataTypeId = 0;block.OutputPort(2).SamplingMode = 'Sample';block.OutputPort(2).Dimensions = 1;%% Set the block simStateCompliance to default (i.e., same as a built-in block)block.SimStateCompliance = 'DefaultSimState';%% Register methodsblock.RegBlockMethod('CheckParameters', @CheckPrms);block.RegBlockMethod('ProcessParameters', @ProcessPrms);block.RegBlockMethod('PostPropagationSetup', @DoPostPropSetup);block.RegBlockMethod('Start', @Start); block.RegBlockMethod('WriteRTW', @WriteRTW);block.RegBlockMethod('Outputs', @Outputs);%% Block runs on TLC in accelerator mode.block.SetAccelRunOnTLC(true);%endfunctionfunction CheckPrms(block)mu = block.DialogPrm(1).Data;if mu <= 0 || mu > 1error(message('simdemos:adapt_lms:stepSize'));end%endfunctionfunction DoPostPropSetup(block)%% Setup Dwork N = 32; %% Filter length block.NumDworks = 3;block.Dwork(1).Name = 'X'; %% u[n],...,u[n-31]block.Dwork(1).Dimensions = N;block.Dwork(1).DatatypeID = 0;block.Dwork(1).Complexity = 'Real';block.Dwork(1).UsedAsDiscState = true;block.Dwork(2).Name = 'H'; %% Filter coefficientsblock.Dwork(2).Dimensions = N;block.Dwork(2).DatatypeID = 0;block.Dwork(2).Complexity = 'Real';block.Dwork(2).UsedAsDiscState = true;block.Dwork(3).Name = 'l'; %% Filter coefficientsblock.Dwork(3).Dimensions = N;block.Dwork(3).DatatypeID = 0;block.Dwork(3).Complexity = 'Real';block.Dwork(3).UsedAsDiscState = true;%% Register all tunable parameters as runtime parameters.block.AutoRegRuntimePrms;%endfunctionfunction ProcessPrms(block)block.AutoUpdateRuntimePrms;%endfunctionfunction Start(block)%% Initialize Dwork block.Dwork(1).Data = zeros(1, 32);block.Dwork(2).Data = zeros(1, 32);block.Dwork(3).Data = zeros(1, 32);%endfunctionfunction Outputs(block)mu = block.RuntimePrm(1).Data;N = 32;u = block.InputPort(1).Data;e = block.InputPort(3).Data;r = block.InputPort(2).Data;X = block.Dwork(1).Data;H = block.Dwork(2).Data;l = block.Dwork(3).Data;%%%% H^(n+1)[i] = H^(n)[i]+mu*(d(n)-y(n))*u(n-i) %% X(2:N) = X(1:N-1);X(1) = u; l(2:N) = l(1:N-1);l(1) = r;y = X'*H; H = H+mu*e*l;block.Dwork(1).Data = X;block.Dwork(2).Data = H;block.Dwork(3).Data = l;block.OutputPort(1).Data = y;block.OutputPort(2).Data = norm(H);
运行结果:
蓝色为噪音信号,黄色为降噪后信号,可以看到明显的降噪效果。
图为LMS算法计算的权重
同时面临这一个问题,在负反馈时,ERRO误差信号在初始阶段为0,所以在降噪的初始阶段,会呈现不稳定状态,加入延迟模块最初是为了消除代数环,可对初始的误差状态并未起改善作用,希望有人能提出中肯的指点与建议,第一次发文,不妥之处请见谅,谢谢。
FXLMS主动降噪的simulink建模与仿真相关推荐
- 永磁同步电机PMSM启动Simulink建模与仿真
永磁同步电机PMSM启动Simulink建模与仿真 学习完PMSM的基本原理之后,再根据具体的连接原则设计simulink仿真模型:主要包括一个产生三相正弦波的产生源,再两两相加减,再经过两个受控电压 ...
- 转载:深入研究simulink建模与仿真之输入端口模块(Inport)的几种不同的图标
深入研究simulink建模与仿真之输入端口模块(Inport)的几种不同的图标 版权 在临摹学习时,经常会看到demo中的Inport模块有多种不同的形式,现总结一下. 默认图标 从Ports &a ...
- 【更新中…】Matlab simulink建模与仿真
本文为学习笔记,视频来源:https://www.bilibili.com/video/BV1L7411a7uL Matlab simulink建模与仿真 1 初始simulink 1.1 simul ...
- 【MASHIII调制器】MASHIII调制器的Simulink建模与仿真
1.软件版本 MATLAB2021a 2.本算法理论知识 这里,基于小数分频的频率合成器,考虑到你需要实现sigma-delta以及mash等结构.因此,系统的模块结构如下图所示: 下面,我们对这个结 ...
- 迭代学习控制方式Simulink建模与仿真
1 什么是迭代学习控制 迭代学习控制(iterative learning control,简称ILC)由Uchiyama于1978年首先提出,不过因为论文由日文撰写,影响不是很大.1984年,Ari ...
- 基于arx模型的MPC预测控制器simulink建模与仿真实现
目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 MPC的优点 模型预测控制善于处理多输入多输出系统 对于MIMO系统,PID需要为每个子系统单独设计PID控制器,由于存在耦 ...
- m基于PID控制器的电动车充放电系统的simulink建模与仿真
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件 1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要 随着全球经济的增长. ...
- 双闭环pid matlab仿真,SPWM波控制单相逆变器双闭环PID调节器的Simulink建模与仿真...
随着电力行业的快速发展,逆变器的应用越来越广泛,逆变器的好坏会直接影响整个系统的逆变性能和带载能力.逆变器的控制目标是提高逆变器输出电压的稳态和动态性能,稳态性能主要是指输出电压的稳态精度和提高带不平 ...
- 深入研究simulink建模与仿真之信号线上的几种不同的图标
先来看看一个简单模型中,信号线上的不同图标: 信号解析图标 信号解析图标是一个蓝色小叉子. 先双击信号线,添加信号标签(信号名称),再打开属性对话框,勾选"Signal name must ...
最新文章
- MySQL Workbench 8.0 CE数据库管理基本操作
- [转]Sandcastle初探——官方版的NDoc
- mongodb索引--1亿条记录的查询从55.7秒到毫秒级别补充版
- 4.在master机器上配置环境变量
- USACO-Section1.5 Mother's Milk (深度优先搜索)
- 诺基亚造平板到底前途几何?
- 使用jQuery获取GridView的数据行的数量
- 甘特图制作_甘特图是用什么软件制作?
- 在Winform中屏蔽UnityWebPlayer的右键以及自带Logo解决方案整理
- 湖南师范大学计算机网络基础教学平台,基于网络的师徒式教学平台的设计与实现...
- 【源码分享】-c++界面源代码分享
- sumif单列求和_EXCEL条件求和函数SUMIF的几种常见用法
- php怎样规定密码混合,PHP产生随机字串,可用来自动生成密码 默认长度6位 字母和数字混合...
- LaTeX 文字对齐
- myeclipse如何导入外部jar包
- 类似腾讯手机管家应用源码完整版
- ggplot2画图教程之Pathway富集分析(气泡图)
- codeforces787A-The Monster
- 中国单反数码相机市场现状动态及前景规模调查报告2022-2028年版
- 【PCB学习笔记】绘制智能车四层板 --- PCB设计规则设置及手工布线