Limit phase at high frequencies with `frd`
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
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 comentario
Michael Hubatka
el 5 de Feb. de 2016
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)
Respuestas (0)
Ver también
Categorías
Más información sobre Get Started with Control System Toolbox en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!