\
欢迎来到本博客❤️❤️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
本文目录如下:
目录
1 概述
2 运行结果
3 参考文献
4 Matlab代码实现
主动噪声和振动控制问题可用图 1 中的反馈框图来表示:
图中 z 表示性能变量,w 表示外部的输入干扰,反馈控制器 C 的设计是为了使得系统对于外部输入扰动w 的响应 z 应满足某种事先设定的条件。如: 跟踪给定参考值或响应趋于零等。性能变量 z 可以是某些物理量如在某点的加速度,模型能量或空间的扭曲度。观测变量 y 和控制变量 z 包括: 荷载力,扭曲,加速度,速度,角度,压力等,所有的实测量都应通过两个转换器 A 和 S 以变成物理域中的变量。因为每个实验装置中的物理条件的限制使得两个转换器中存在大量的对于观测变量 y 和控制变量 u 约束。饱和是遇到最常见的约束条件,它表示变量被限制在指定的特定范围之间。主动噪声控制中的饱和包括: 扩音器的输出电压和电流范围、麦克风振动的位置范围、微机的荷载力范围、惯性驱动的力范围。饱和约束的产生是因为没有足够的资源来达到期望的输出或者是由于机械和电子的失控而产生的输出。
部分代码:
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 (
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
部分理论来源于网络,如有侵权请联系删除。
[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