MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性

简介: MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性

💥💥💞💞欢迎来到本博客❤️❤️💥💥


🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


⛳️座右铭:行百里者,半于九十。


📋📋📋本文目录如下:🎁🎁🎁


目录


💥1 概述


📚2 运行结果


🎉3 参考文献


🌈4 Matlab代码实现


💥1 概述

主动噪声和振动控制问题可用图 1 中的反馈框图来表示:


c20cf417cdf249fc855c956e3bad8b03.png


图中 z 表示性能变量,w 表示外部的输入干扰,反馈控制器 C 的设计是为了使得系统对于外部输入扰动w 的响应 z 应满足某种事先设定的条件。如: 跟踪给定参考值或响应趋于零等。性能变量 z 可以是某些物理量如在某点的加速度,模型能量或空间的扭曲度。观测变量 y 和控制变量 z 包括: 荷载力,扭曲,加速度,速度,角度,压力等,所有的实测量都应通过两个转换器 A 和 S 以变成物理域中的变量。因为每个实验装置中的物理条件的限制使得两个转换器中存在大量的对于观测变量 y 和控制变量 u 约束。饱和是遇到最常见的约束条件,它表示变量被限制在指定的特定范围之间。主动噪声控制中的饱和包括: 扩音器的输出电压和电流范围、麦克风振动的位置范围、微机的荷载力范围、惯性驱动的力范围。饱和约束的产生是因为没有足够的资源来达到期望的输出或者是由于机械和电子的失控而产生的输出。


📚2 运行结果


99af135c67684ef5aca9e8ae4e9103d4.png

f8cdba2a4e4a48ddb903f7eeb9d11014.png

d87012bb9ea14b67aa21c13c1f9febd8.png

06993b3ef7534c0c8b9c82e36a74cb81.png

e40f6e34a27f47d19e08a26d2d58159e.png


部分代码:

stability_margin = 0.1;     % distance of model poles and zeros from the unit circle
f = 200*(1:3)';             % primary noise sinusoids frequencies
amplitudes = [0.5, 1.2, 0.3]';      % primary noise sinusoids amplitudes
phases = [56, 170, -23]'*pi/180;    % primary noise sinusoids phases
frequency_noise = 0;        % rms Hz
Nx = 6;                     % model order (size-1)
on_id = 100;                % system identification start
on = 1000;                  % ANC start
qv0 = 0.01;                 % background noise power
% algorithm parameters
N = 15;                     % model order (size-1)
L = 64;                     % MPC horizont length
M = 32*(N+1);               % algorithm memory
P = M;                      % size of qv estimation blocks
R = N;                      % size of qv estimation blocks
Lu = 10;                    % saturation of the antinoise signal
wd = 10000;                 % keep past control signals constant
wu = 1e-6;                  % effort weigth on control signal u
deltax = 1e-3;              % prior 1/sigma^2 pior of a and b (x)
delta = 1e-9;               % actual value added Rxx to calc Sxx (<deltax)
alpha = 0;                  % controls auxiliary noise power
eta = 1.01;                 % max grouth rate of u (per sin half period)
Q = 8;                      % control signal update interval
% Signal logs
log_e = nan*zeros(simulation_time, Nsim);
log_u = nan*zeros(simulation_time, Nsim);
log_xi = nan*zeros(simulation_time, Nsim);
log_xi0 = nan*zeros(simulation_time, Nsim);
log_qv = nan*zeros(simulation_time, Nsim);
for n_sim = 1:Nsim
    tic
    rng(343989 + n_sim);
    % simulation intializations
    frequency = f' + frequency_noise*randn(simulation_time+L, length(f));
    phase = 2*pi*cumsum(frequency)/fs + phases';
    d0 = sin(phase)*amplitudes;
    d = d0 + sqrt(qv0)*randn(simulation_time+L, 1);  % primary noise signal
    [a,b] = generate_plant(Nx, stability_margin);
    uv = zeros(max(M+N+1, 2*L), 1);        % anti-noise buffer
    e1v = zeros(Nx+1, 1);    % residual noise minus background noise buffer
    % algorithm initialization
    u = 0;                   % anti-noise signal
    ev = zeros(M+N,1);       % residual noise buffer
    wuv = wu*ones(L+N,1);
    wev = ones(L,1);
    for k = 1:simulation_time
        % simulation
        qn = qn_steady + qn_change*(abs(k-change_at)<=change_time/2);
        a(2:end) = a(2:end) + std(a(2:end))*sqrt(qn)*randn(Nx,1);
        b = b + std(b)*sqrt(qn)*randn(Nx+1,1);
        if qn > 0
            [a,b] = adjust_plant(a,b,stability_margin);
        end
%         if k == change_at
%             b = - b;
%         end
        log_u(k,n_sim) = u;    % logs u(n) and not u(n+1)
        uv = [u; uv(1:end-1)]; % simulation and algorithm


🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。


[1]王建宏,王道波.子空间预测控制算法在主动噪声振动中的应用[J].振动与冲击,2011,30(10):129-135.DOI:10.13465/j.cnki.jvs.2011.10.013.


[2]Paulo A. C. Lopes (2023) Careful Feedback Active Noise and Vibration Control Algorithm Robust to Large Secondary Path Changes


🌈4 Matlab代码实现


目录
打赏
0
0
0
0
78
分享
相关文章
基于生物地理算法的MLP多层感知机优化matlab仿真
本程序基于生物地理算法(BBO)优化MLP多层感知机,通过MATLAB2022A实现随机数据点的趋势预测,并输出优化收敛曲线。BBO模拟物种在地理空间上的迁移、竞争与适应过程,以优化MLP的权重和偏置参数,提升预测性能。完整程序无水印,适用于机器学习和数据预测任务。
基于IEKF迭代扩展卡尔曼滤波算法的数据跟踪matlab仿真,对比EKF和UKF
本项目基于MATLAB2022A实现IEKF迭代扩展卡尔曼滤波算法的数据跟踪仿真,对比EKF和UKF的性能。通过仿真输出误差收敛曲线和误差协方差收敛曲线,展示三种滤波器的精度差异。核心程序包括数据处理、误差计算及可视化展示。IEKF通过多次迭代线性化过程,增强非线性处理能力;UKF避免线性化,使用sigma点直接处理非线性问题;EKF则通过一次线性化简化处理。
基于二次规划优化的OFDM系统PAPR抑制算法的matlab仿真
本程序基于二次规划优化的OFDM系统PAPR抑制算法,旨在降低OFDM信号的高峰均功率比(PAPR),以减少射频放大器的非线性失真并提高电源效率。通过MATLAB2022A仿真验证,核心算法通过对原始OFDM信号进行预编码,最小化最大瞬时功率,同时约束信号重构误差,确保数据完整性。完整程序运行后无水印,展示优化后的PAPR性能提升效果。
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
基于sift变换的农田杂草匹配定位算法matlab仿真
本项目基于SIFT算法实现农田杂草精准识别与定位,运行环境为Matlab2022a。完整程序无水印,提供详细中文注释及操作视频。核心步骤包括尺度空间极值检测、关键点定位、方向分配和特征描述符生成。该算法通过特征匹配实现杂草定位,适用于现代农业中的自动化防控。
基于Big-Bang-Big-Crunch(BBBC)算法的目标函数最小值计算matlab仿真
该程序基于Big-Bang-Big-Crunch (BBBC)算法,在MATLAB2022A中实现目标函数最小值的计算与仿真。通过模拟宇宙大爆炸和大收缩过程,算法在解空间中搜索最优解。程序初始化随机解集,经过扩张和收缩阶段逐步逼近全局最优解,并记录每次迭代的最佳适应度。最终输出最佳解及其对应的目标函数最小值,并绘制收敛曲线展示优化过程。 核心代码实现了主循环、粒子位置更新、适应度评估及最优解更新等功能。程序运行后无水印,提供清晰的结果展示。
基于CS模型和CV模型的多目标协同滤波跟踪算法matlab仿真
本项目基于CS模型和CV模型的多目标协同滤波跟踪算法,旨在提高复杂场景下多个移动目标的跟踪精度和鲁棒性。通过融合目标间的关系和数据关联性,优化跟踪结果。程序在MATLAB2022A上运行,展示了真实轨迹与滤波轨迹的对比、位置及速度误差均值和均方误差等关键指标。核心代码包括对目标轨迹、速度及误差的详细绘图分析,验证了算法的有效性。该算法结合CS模型的初步聚类和CV模型的投票机制,增强了目标状态估计的准确性,尤其适用于遮挡、重叠和快速运动等复杂场景。
基于Adaboost的数据分类算法matlab仿真
本程序基于Adaboost算法进行数据分类的Matlab仿真,对比线性与非线性分类效果。使用MATLAB2022A版本运行,展示完整无水印结果。AdaBoost通过迭代训练弱分类器并赋予错分样本更高权重,最终组合成强分类器,显著提升预测准确率。随着弱分类器数量增加,训练误差逐渐减小。核心代码实现详细,适合研究和教学使用。
基于入侵野草算法的KNN分类优化matlab仿真
本程序基于入侵野草算法(IWO)优化KNN分类器,通过模拟自然界中野草的扩散与竞争过程,寻找最优特征组合和超参数。核心步骤包括初始化、繁殖、变异和选择,以提升KNN分类效果。程序在MATLAB2022A上运行,展示了优化后的分类性能。该方法适用于高维数据和复杂分类任务,显著提高了分类准确性。
基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法matlab仿真
本项目基于贝叶斯优化的自适应马尔科夫链蒙特卡洛(Adaptive-MCMC)算法,实现MATLAB仿真,并对比Kawasaki sampler、IMExpert、IMUnif和IMBayesOpt四种方法。核心在于利用历史采样信息动态调整MCMC参数,以高效探索复杂概率分布。完整程序在MATLAB2022A上运行,展示T1-T7结果,无水印。该算法结合贝叶斯优化与MCMC技术,通过代理模型和采集函数优化采样效率。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等