lsim and transfer fcn block in simulink output different results

5 次查看(过去 30 天)
I simulate the same transfer function with lsim and transfer fcn block in simulink but I ended up with different results.
In Simulink, the block diagram is shown as follows, the input signal is ua = 400sin(2*pi*50*t), the sampling frequency is 10 kHz
In matlab, the code is shown following, ua is the data from simulink and the same for ua.
numerator = [ 1 ];
denominator = [1 1];
sys = tf(numerator, denominator);
matlab_ia = lsim(sys, ua, t_simu);
Technically, they're exact the same with no differences, but when I got the error between them and drew them out, I get :
Although it's really small, it's not tolerable for my later application, which is used for PSO to find the transfer function.
Simulink transfer fcn block actually gave the closer results, but there's no PSO block in Simulink.
So I wondered why the lsim and transfer function generated different results and how I can use the lsim to get the same results as transfer function block or are there other alternative function in matlab.
There're similar questions but I didn't find those answering my questions.

采纳的回答

Paul
Paul 2022-1-25
编辑:Paul 2022-1-25
Simulink uses a continuous-time differential equation solver. The specific solver and solver parameters, like step size information, are in the model settings.
lsim() in the Control System Toolbox converts sys to a discrete time approximation assuming either a first- or zero-order-hold and then propagates the difference equations.
So it's not a surpise that the two results are not identical. The size of the difference between them will depend on the the block parameters entered for Ua, particularly the sample time, the Simulink solver and solver parameters, and the 'method' argument to lsim().

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 General Applications 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by