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!