使用 Signal Processing Toolbox 估计含噪频率响应模型
打开 Simulink® 模型,并指定要线性化的模型部分:
load_system('magball') io(1) = linio('magball/Desired Height',1); io(2) = linio('magball/Magnetic Ball Plant',1,'output');
为仿真创建随机输入信号:
in = frest.Random('Ts',0.001,'NumSamples',1e4);
在稳态工作点处线性化模型:
op = findop('magball',operspec('magball'),... findopOptions('DisplayReport','off')); sys = linearize('magball',io,op);
仿真模型以获得在线性化输出点处的输出:
[sysest,simout] = frestimate('magball',io,in,op);使用 Signal Processing Toolbox™ 软件估计频率响应模型,包括加窗和求平均值:
input = generateTimeseries(in);
output = detrend(simout{1}.Data,'constant');
[Txy,F] = tfestimate(input.Data(:),...
output,hanning(4000),[],4000,1/in.Ts);
systfest = frd(Txy,2*pi*F);
比较解析线性化和 tfestimate (Signal Processing Toolbox) 的结果:
ax = axes; h = bodeplot(ax,sys,'b',systfest,'g',systfest.Frequency); setoptions(h,'Xlim',[10,1000],'PhaseVisible','off') legend(ax,'Linear model using LINEARIZE','Frequency response using Signal Processing Toolbox',... 'Location','SouthWest')

在本例中,由于存在加窗和求平均值,Signal Processing Toolbox 命令 tfestimate (Signal Processing Toolbox) 给出的估计值比 frestimate 更精确。