How does freqresp work with systems with internal delays?
2 次查看(过去 30 天)
显示 更早的评论
With non-delayed systems, freqresp relies on an Hessenberg form of matrix A to accelerate the inverse operation, as described in the freqresp documentation. When systems include internal delays, as described for instance in the setdelaymodel documentation, more operations are required, and the inversion concerns a matrix that involves itself matrix inversions. Could you please provide an explanation on how freqresp deals with systems with internal delays, and tell whether and where Hessenberg forms are used? Thank you.
0 个评论
采纳的回答
Paul
2022-12-21
Hi Philippe,
As best I can tell, the functional process is as follows. Referring to diagram under the "Description" of setDelayModel ...
1. Compute the frequency response of H in the usual way with H represented as an ordinary ss model. Here, the conversion to Hessenberg form would be used as normal. Call this result H(jw)
2. Compute the frequency response of the diagonal block of delays. Call this result D(jw).
3. Close the feedback loop of H(jw) and D(jw) in the usual way for all points in the frequency vector.
Unfortunately, steps 2 and 3 are hidden in mex file with no help or documenation, so the details of the implementation are unknown.
Example:
sys = feedback(tf(1,[1 1]),tf(1,1,'InputDelay',0.1)); % system with internal delay
[sysresp,w] = freqresp(sys); % its frequency response
% "by hand" computations
sysd = getDelayModel(sys);
H = frd(freqresp(ss(sysd.A,sysd.B,sysd.C,sysd.D),w),w);
D = frd(exp(-1j*0.1*w),w);
SYSresp = feedback(H,D,2,2,1);
SYSresp = SYSresp(1,1);
subplot(211)
semilogx(w,db(abs(squeeze(sysresp))),w,db(abs(squeeze(SYSresp.ResponseData))),'o')
subplot(212);
semilogx(w,180/pi*(angle(squeeze(sysresp))),w,180/pi*(angle(squeeze(SYSresp.ResponseData))),'o')
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!