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

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

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

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

📋📋📋本文内容如下:🎁🎁🎁

 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

主动噪声和振动控制算法对较大次级路径变化的鲁棒性研究

一、引言

主动噪声和振动控制(ANC/AVC)技术作为一种有效的降噪和减振手段,在环境保护、工业降噪、设备减振等领域有着广泛的应用前景。ANC/AVC系统的核心在于其控制算法的设计,算法的性能直接决定了系统的控制效果。其中,一个至关重要的评价指标便是算法对次级路径变化的鲁棒性。次级路径是指从控制源(如扬声器或振动器)到误差传感器之间的传递函数。在实际应用中,由于环境因素、温度变化、设备老化、传感器位置移动、负载变化等原因,次级路径不可避免地会发生变化。如果ANC/AVC算法对这些变化不够鲁棒,会导致控制性能下降,甚至系统不稳定,最终丧失控制效果。

二、次级路径变化对ANC/AVC算法性能的影响

传统的ANC/AVC算法,如基于自适应滤波器的控制方法(特别是基于FXLMS算法及其变种),在次级路径相对稳定时可以获得良好的控制效果。然而,这些算法往往对次级路径的变化非常敏感。当次级路径发生显著变化时,传统算法可能会出现以下问题:

  1. 收敛速度下降:不准确的滤波参考信号使得梯度估计不够准确,从而减缓了算法的收敛速度。
  2. 稳态误差增大:即使算法收敛,由于次级路径模型的误差,控制输出无法完全抵消期望信号,导致残余误差增大。
  3. 系统不稳定:当次级路径变化较大时,尤其是相位变化,可能导致算法收敛方向错误,甚至引起系统振荡,最终导致系统失稳。
三、提升ANC/AVC算法鲁棒性的策略

为了提高ANC/AVC算法对次级路径变化的鲁棒性,研究者提出了多种有效的策略,这些策略主要可以分为以下几类:

  1. 基于在线次级路径建模的自适应算法

    • 同时自适应算法:这类算法在控制滤波器自适应的同时,利用辅助参考信号或系统输入输出信号对次级路径进行估计。例如,经典的Filtered-x NLMS(FxNLMS)算法可以通过引入一个并行的次级路径估计滤波器来实现。
    • 开关式次级路径估计:当次级路径变化发生时,算法可以切换到次级路径估计模式,在短时间内快速更新次级路径模型,然后切换回控制模式。这种方法适用于次级路径发生突变的情况。
  2. 鲁棒自适应滤波算法

    • 改进代价函数:传统的FXLMS算法最小化误差信号的均方值,容易受到异常误差或模型误差的影响。可以采用其他鲁棒的代价函数,如最小均方误差的变种(例如,加权最小二乘法)或基于L1范数的代价函数,来降低次级路径模型误差对算法收敛的影响。
    • 步长控制策略:设计一个具有鲁棒性的步长控制策略,使得当次级路径模型误差较大时,步长减小,以避免系统不稳定;当模型误差较小时,步长增大,以提高收敛速度。
    • 鲁棒自适应滤波器设计:考虑次级路径模型的估计误差作为一种不确定性,设计鲁棒的自适应滤波器。例如,基于H-无穷控制理论或滑动模态控制思想的自适应滤波器,可以在存在模型不确定性的情况下保证系统的稳定性。
  3. 基于模型的控制方法

    • 模型预测控制(MPC):MPC利用当前时刻的系统状态和预测模型,在未来一段时间内优化控制输入序列,以最小化一个代价函数。在ANC/AVC中,可以将次级路径模型作为预测模型的一部分,并在优化过程中考虑次级路径的不确定性。MPC能够处理约束和非线性系统,并且在应对模型不确定性方面具有一定的鲁棒性。然而,MPC通常计算量较大,实时实现可能具有挑战性。
    • 鲁棒控制理论应用:利用鲁棒控制理论(如H-无穷控制、滑模控制)设计控制器,以确保系统在存在次级路径模型不确定性时仍然稳定并保持一定的性能。这些方法需要建立次级路径模型的数学描述,并分析其不确定性范围。
四、MATLAB仿真验证

MATLAB凭借其强大的数值计算、信号处理和控制系统工具箱,为ANC/AVC算法的研究、开发和验证提供了便捷高效的环境。通过构建不同的次级路径模型,并进行FXLMS算法的仿真,可以直观地观察次级路径变化对算法性能的影响。例如,可以模拟一个具有时变特性的次级路径,观察算法在不同时刻的收敛曲线和稳态误差。仿真结果将清晰地展示出,随着实际次级路径与估计模型的差异增大,FXLMS算法的性能会显著恶化。

同时,利用MATLAB还可以实现上述提升算法鲁棒性的各种策略,并进行仿真验证。例如,可以构建包含主控制通路和次级路径估计通路的仿真模型,验证同时自适应算法的性能;可以利用优化工具箱或控制系统工具箱实现鲁棒自适应滤波算法和基于模型的控制方法,并比较它们的性能差异。

五、未来研究方向

尽管已经取得了一定的进展,但提升ANC/AVC算法对较大次级路径变化的鲁棒性仍然是一个活跃的研究领域。未来的研究应更加关注以下几个方面:

  1. 更加高效的在线次级路径建模方法:研究能够快速、准确地估计次级路径变化的算法,尤其是在存在强耦合或噪声的情况下。减少辅助噪声的影响,降低计算复杂度,提高建模精度。
  2. 更加鲁棒的自适应滤波算法:在保持良好控制性能的前提下,提高对次级路径变化的抵抗能力。利用神经网络学习次级路径的非线性特征,优化控制策略。
  3. 多传感器信息融合:利用多个传感器的信息,提高对环境变化的感知能力,增强系统的鲁棒性。

📚2 运行结果

 

 

 

部分代码:

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.

🌈Matlab代码实现

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值