из matplotlib.pyplot импорт * из numpy импорт *f , Vpeak , cycles = 50. , 1. , 1.5 fs , Tlim = 2. * f , cycles / f Vavg , Vrms = Vpeak * 2./pi , Vpeak / sqrt ( 2. ) t = linspace ( 0 , Tlim , fs * cycles ) w = 2. * pi * f # 50 Гц сигнал переменного тока = лямбда x , p : sin ( w * x + p * 2. * pi / 3. ) def halfWave ( time ): s1 , s2 , s3 = сигнал ( time , 0. ) , сигнал ( time , 1. ) , сигнал ( time , 2. ) если s1 > s2 и s1 > s3 : если s2 > s3 : вернуть s1 , s2 иначе : вернуть s1 , s3 elif s2 > s1 и s2 > s3 : если s1 > s3 : вернуть s2 , s1 иначе : вернуть s2 , s3 иначе : если s1 > s2 : вернуть s3 , s1 иначе : вернуть s3 , s2 def fullWave ( время ): s1 , s2 , s3 = abs ( сигнал ( время , 0. )), abs ( сигнал ( время , 1. )), \ abs ( сигнал ( время , 2. )) if s1 > s2 и s1 > s3 : if s2 > s3 : вернуть s1 , s2 else : вернуть s1 , s3 elif s2 > s1 и s2 > s3 : if s1 > s3 : вернуть s2 , s1 else : вернуть s2 , s3 else : if s1 > s2 : вернуть s3 , s1 else : вернуть s3 , s2xTickPts = [] для времени в t : s1 , s2 , s3 = abs ( signal ( time , 0. )), abs ( signal ( time , 1. )), \ abs ( signal ( time , 2. )) если s1 == s2 : xTickPts = append ( xTickPts , time ) напечатать время elif s2 == s3 : xTickPts = append ( xTickPts , time ) напечатать время elif s3 == s1 : xTickPts = append ( xTickPts , time ) напечатать время def myAxes ( this ) : this.grid ( True ) this.set_xlim ( 0 , Tlim ) this.set_xticks ( arange ( 0 , cycles + .25 , .25 ) / f ) this.set_xticklabels ( [ ] ) this.set_ylabel ( r " Напряжение ( В ) " , размер шрифта = 12 ) this.set_ylim ( - 2. * Vpeak - .1 , 2. * Vpeak + .1 ) this.set_yticks ( [ - 1.73 * Vpeak , - Vpeak , 0 , Vpeak , 1.73 * Vpeak ] ) this . set_yticklabels ([ r "$-\sqrt {3} V_{\mathrm {пик} }$" , r "$-V_{\mathrm {пик} }$" , \ r "0" , r "$V_{\mathrm {пик} }$" , r "$\sqrt {3} V_{\mathrm {пик} }$" ]) fig = figure ( figsize = ( 7 , 12 )) ax = fig . add_subplot ( 311 ) ax . plot ( t , signal ( t , 0 ), 'b' , ширина линии = 2 , метка = r "$\phi=0^\circ$" ) ax . plot ( t , signal ( t , 1 ), 'r' , ширина линии = 2 , метка = r "$\phi=120^\circ$" ) ax . plot ( t , signal ( t , 2 ), 'g' , ширина линии = 2 , метка = r "$\phi=240^\circ$" ) myAxes ( ax ) ax . set_title ( r '3-фазные сигналы' , размер шрифта = 12 ) ax . легенда ( loc = 1 , \ bbox_to_anchor = ( .8 , .35 ), \ frameon = False , handletextpad = .05 )ax = fig.add_subplot ( 312 ) S , H = [], [] для времени в t : s , h = halfWave ( время ) S = append ( S , s ) H = append ( H , h ) ax.plot ( t , S , 'k' , ширина линии = 2. ) ax.plot ( t , signal ( t , 0 ) , ' b--' , ширина линии = 1. ) ax.plot ( t , signal ( t , 1 ) , ' r-- ' , ширина линии = 1. ) ax.plot ( t , signal ( t , 2 ) , ' g--' , ширина линии = 1. ) myAxes ( ax ) ax . set_title ( r "Однополупериодное выпрямление" , размер шрифта = 12 ) ax = fig.add_subplot ( 313 ) S , H = [], [] для времени в t : s , h = fullWave ( time ) S = append ( S , s ) H = append ( H , h ) ax.plot ( t , S + H , 'k' , ширина линии = 2. ) ax.plot ( t ,( signal( t , 0 ) ) , 'b--' , ширина линии = 1. ) ax.plot ( t , ( signal ( t , 1 ) ) , ' r--' , ширина линии = 1. ) ax.plot ( t ,( signal ( t , 2 ) ), 'g--' , ширина линии = 1. ) myAxes ( ax ) ax . set_title ( r "Двухполупериодное выпрямление" , размер шрифта = 12 ) myLabel = [] for i in arange ( 0 , cycles + .25 , .25 ): myLabel = append ( myLabel , r " %.2f T" % i ) # myLabel = append(myLabel,r"${}^{%.1fT}_{\pi/%.1f}$"%(i,(i*2))) ax.set_xticklabels ( myLabel , размер шрифта = 10 ) ax.set_xlabel ( r " Время " , размер шрифта = 14 ) #fig.suptitle("Выпрямление 3-фазного переменного тока",fontsize=16) рис . savefig ( "3_phase_rectification_2.svg" , bbox_inches = "tight" , \ pad_inches = .15 )