@@ -120,39 +120,62 @@ def test_mimo():
120
120
tf (sysMIMO )
121
121
122
122
123
- def test_bode_margin ():
123
+ @pytest .mark .parametrize (
124
+ "Hz, Wcp, Wcg" ,
125
+ [pytest .param (False ,6.0782869 ,10. ,id = "omega" ),
126
+ pytest .param (True ,0.9673894 ,1.591549 ,id = "Hz" )])
127
+ @pytest .mark .parametrize (
128
+ "deg, p0, pm" ,
129
+ [pytest .param (False ,- np .pi ,- 2.748266 ,id = "rad" ),
130
+ pytest .param (True ,- 180 ,- 157.46405841 ,id = "deg" )])
131
+ @pytest .mark .parametrize (
132
+ "dB, maginfty1, maginfty2, gminv" ,
133
+ [pytest .param (False ,1 ,1e-8 ,0.4 ,id = "mag" ),
134
+ pytest .param (True ,0 ,- 1e+5 ,- 7.9588 ,id = "dB" )])
135
+ def test_bode_margin (dB ,maginfty1 ,maginfty2 ,gminv ,
136
+ deg ,p0 ,pm ,
137
+ Hz ,Wcp ,Wcg ):
124
138
"""Test bode margins"""
125
139
num = [1000 ]
126
140
den = [1 ,25 ,100 ,0 ]
127
141
sys = ctrl .tf (num ,den )
128
142
plt .figure ()
129
- ctrl .bode_plot (sys ,margins = True ,dB = False ,deg = True ,Hz = False )
143
+ ctrl .bode_plot (sys ,margins = True ,dB = dB ,deg = deg ,Hz = Hz )
130
144
fig = plt .gcf ()
131
145
allaxes = fig .get_axes ()
132
146
133
- mag_to_infinity = (np .array ([6.07828691 ,6.07828691 ]),
134
- np .array ([1. ,1e-8 ]))
135
- assert_allclose (mag_to_infinity ,allaxes [0 ].lines [2 ].get_data ())
136
-
137
- gm_to_infinty = (np .array ([10. ,10. ]),
138
- np .array ([4e-1 ,1e-8 ]))
139
- assert_allclose (gm_to_infinty ,allaxes [0 ].lines [3 ].get_data ())
140
-
141
- one_to_gm = (np .array ([10. ,10. ]),
142
- np .array ([1. ,0.4 ]))
143
- assert_allclose (one_to_gm ,allaxes [0 ].lines [4 ].get_data ())
144
-
145
- pm_to_infinity = (np .array ([6.07828691 ,6.07828691 ]),
146
- np .array ([100000. ,- 157.46405841 ]))
147
- assert_allclose (pm_to_infinity ,allaxes [1 ].lines [2 ].get_data ())
148
-
149
- pm_to_phase = (np .array ([6.07828691 ,6.07828691 ]),
150
- np .array ([- 157.46405841 ,- 180. ]))
151
- assert_allclose (pm_to_phase ,allaxes [1 ].lines [3 ].get_data ())
152
-
153
- phase_to_infinity = (np .array ([10. ,10. ]),
154
- np .array ([1e-8 ,- 1.8e2 ]))
155
- assert_allclose (phase_to_infinity ,allaxes [1 ].lines [4 ].get_data ())
147
+ mag_to_infinity = (np .array ([Wcp ,Wcp ]),
148
+ np .array ([maginfty1 ,maginfty2 ]))
149
+ assert_allclose (mag_to_infinity ,
150
+ allaxes [0 ].lines [2 ].get_data (),
151
+ rtol = 1e-5 )
152
+
153
+ gm_to_infinty = (np .array ([Wcg ,Wcg ]),
154
+ np .array ([gminv ,maginfty2 ]))
155
+ assert_allclose (gm_to_infinty ,
156
+ allaxes [0 ].lines [3 ].get_data (),
157
+ rtol = 1e-5 )
158
+
159
+ one_to_gm = (np .array ([Wcg ,Wcg ]),
160
+ np .array ([maginfty1 ,gminv ]))
161
+ assert_allclose (one_to_gm ,allaxes [0 ].lines [4 ].get_data (),
162
+ rtol = 1e-5 )
163
+
164
+ pm_to_infinity = (np .array ([Wcp ,Wcp ]),
165
+ np .array ([1e5 ,pm ]))
166
+ assert_allclose (pm_to_infinity ,
167
+ allaxes [1 ].lines [2 ].get_data (),
168
+ rtol = 1e-5 )
169
+
170
+ pm_to_phase = (np .array ([Wcp ,Wcp ]),
171
+ np .array ([pm ,p0 ]))
172
+ assert_allclose (pm_to_phase ,allaxes [1 ].lines [3 ].get_data (),
173
+ rtol = 1e-5 )
174
+
175
+ phase_to_infinity = (np .array ([Wcg ,Wcg ]),
176
+ np .array ([1e-8 ,p0 ]))
177
+ assert_allclose (phase_to_infinity ,allaxes [1 ].lines [4 ].get_data (),
178
+ rtol = 1e-5 )
156
179
157
180
158
181
@pytest .fixture