Limit phase at high frequencies with `frd`
조회 수: 1 (최근 30일)
이전 댓글 표시
Using tfestimate(), I have been able to determine the sensitivity S of a physical system. Now, to do some calculations, I used frd() to create a frequency response object. This neatly recovers the phase of the system by preventing 'wrap-around'. However, at high frequencies, it does this a bit too overzealous for my taste; it will determine that the phase lag and lead is up to 2000 degrees. I believe this is just noise, and don't really care about the actual values; however, the large phase messes up the scaling of my phase plot.
So, how can I prevent frd() from creating ridiculous phases lead/lag from noise? Or is there another way to solve this (perhaps filtering?)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/147318/image.png)
At low frequencies, the phase 'wraps around', and this is corrected by frd(). At high frequencies, the noise is converted to ridiculous phases, which I don't really want.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/147319/image.png)
댓글 수: 1
Michael Hubatka
2016년 2월 5일
To enable the wrap around, use
bo = bodeoptions('cstprefs');
bo.PhaseWrapping = 'on';
bode(H, bo);
Of course, this will also wrap the phase at low frequencies.
You could also modify the ResponseData attribute of your frd to keep the phase constant for small magnitudes:
r = abs(H.ResponseData);
idx = r < 1e-3;
H.ResponseData(idx) = r(idx);
bode(H)
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Get Started with Control System Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!