连续扫频-FFT-系统辨识

利用连续扫频的方式进行系统模型辨识。

        连续扫频相对于单点扫频来说,操作更简单,利用simulink中的“Chirp Signal”模块作为激励信号,设置随着时间变化的“变频”曲线对被控对象进行扫频,然后用FFT对输入信号与输出信号进行分析,得到各自的幅值、相位,然后求得输入、输出信号的幅值比、相位差,有了幅值比、相位差,同样就可以采用Simulink自带的模型辨识工具箱去获得被控对象的传递函数。

具体步骤:

01. Simulink模型

        建立扫频模型如上图所示,并将系统步长设置为定步长0.0001,使用龙格库塔求解器(ode4)。后运行仿真,输入信号和输出信号用“to Workspace”模块将数据实时保存至“Workspace”中。

 

 02. 编写 fft.m代码

        对导入Workspace里的u=out.u.Data;outy=out.y.Data;数据进行FFT分析,并得到幅值比、相位差。

u=out.u.Data;
outy=out.y.Data;

close all;
fs = 10000; % 对应采样时间0.0001s。
N = length(u);
n = 0: (N - 1);
fn  = n * fs / N;
%% 
y = fft(u,N);
mag  = abs(y);
pha = angle(y);
%% 
y1 = fft(outy,N);
magl  = abs(y1);
phal = angle(y1);
%% 
%%计算幅值比,相位差
for i = 1 : N / 2
    mag_el(i) = magl(i)/mag(i);
    w(i) = fn(i) * 2 * pi;
    ph_el(i) = (phal(i) - pha(i)) * 180 / pi;
    mag_log(i) = 20 * log10(mag_el(i));
end
%%对相位差的数据进行预处理
for i = 1: length(ph_el)
    if ph_el(i) > 0
        ph_el(i) =  ph_el(i) - 360;
    end
end
%% 画Bode图
subplot(211);semilogx((w),(mag_log));grid on;
subplot(212);semilogx((w),(ph_el));grid on;

03. System Identification 工具箱

        开启“系统辨识工具箱”后,导入“Freq.domain data”来加载模型。

        点击“Estimate”,选择“Tranfer Function Models”(估计传递函数)。根据实际需求选择传递函数的零极点,选择实际的“Fit frequncy range”,然后点击“Estimate”即可。

04. 结果展示

与结果相差不大,辨识结果较为满意!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值