Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Оптимизация параметров импульсных и широкополосных усилителей

..pdf
Скачиваний:
1
Добавлен:
12.11.2023
Размер:
17.93 Mб
Скачать

if is^ k l—1 then go to 11;

output (3, ‘e \ til, tfO, kl, n, m, v, k); go to 187;

12:f4: = f2:=.f3:=0;

13:for i: = l step 1 until kl do

 

begin dk [i,

1]: =0.05X k[i];

kO[i]:=k[i];

 

 

 

 

 

k[i]:=k[i] + dk[i,

1];

 

 

ch,

kl, tt,

k3, k2, el,

e3,

e tO, til,

 

prpx

(n,

 

m,

prl,

v,

k, eps,

 

 

tf);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d(kl, tO, til, dhl); k[i]:=.kO[i];

 

i]: = (dhl[j] —dhO[j])/dk[i, 1];

 

for

j:= l

 

step

 

1 until

kl

do aa [j,

end;

 

step

 

1

until

kl

do

 

 

 

 

 

 

 

 

 

 

 

 

for

j:= l

 

 

bbfj]: =

abs(bbl[j,

1]);

end;

 

 

begin bbl[j,

1]: =

dh[j]—dhO[j];

 

 

output(3, *e\ aa, dh, dhO, dhl, bbl, dk);

 

 

 

 

 

 

sp(1, kl, aa); sp(3, kl, kl, aa, bbl, dk);

 

 

 

 

 

 

output(3,

’e’,

 

aa,

dk);

alfa 1:=2;

 

 

 

 

 

 

 

 

 

 

14: alfal: = a!fal/2;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if alfa 1 <0.125

then

 

until kl do

k[i]:=kO[i];

 

 

 

 

begin for

i: = l

step 1

 

 

t il,t f ) ;

 

prpx(n, m, prl, v, k,

eps,

ch,

kl,

tt, k3, k2, el, еЗ, e, tO,

 

d(kl, Ю, til, dhO); go to 186;

 

 

 

 

 

 

 

 

 

end;

l

step

 

1

until

kl do k[i] : = ko[i]+alfalXdk [i, 1];

 

 

for

i: =

 

til,

tf);

prpx(n,

m, prl,

v,

k,

eps, ch,

kl,

tt,

k3,

k2,

el,

e3, e,

tO,

d(kl, tO,

til,

 

dhl);

 

kl

do cc[i]: =

abs(dh

[i]—dhl[i]);

 

 

 

for

i: =

l

step

 

1

until

 

 

 

ba*— bb [ij * j*— o*

 

then go to 16; ba:=bb[i];

 

 

 

 

 

15: if ba—b b [i]^ 0

 

 

 

 

 

16

i:= i + l; if

i^ k l then

go

to 15;

ca:=cc[i]; i: = 2;

 

 

 

17

if ca—cc[i] ^ 0

 

then

goо to

1'8; ca:=cc [i];

 

 

 

 

 

18

i:= i+ l; if i^ k l then

go to

17;

 

 

 

 

 

 

 

 

 

if ca—ba^O then go to 14;

 

 

 

 

 

 

 

 

 

 

 

 

for i: =

l step

 

1

until kl

do dhO[i] : = dhl [1];

 

 

 

 

 

if ca>epsl then

go

to 13;

 

 

 

 

 

 

 

 

 

 

 

 

186: output (3, *e\ kOO,

k);

bbl

(j,

l]: =

dh[j]—dhOfj];

 

 

 

for j: =

1

step

 

I

until

kl

do

tO, til,

tfr),

prpx(n,

m, iprl,

v,

 

k,

eps,

ch,

kl,

tt,

k3,-k2,

el, e3, e,

d(kl, Ю, til,

dhO);

 

 

 

tO, tfr, tfO,

dhO);

 

 

 

 

 

output

(3, ‘e\

 

k,

kOO, til,

 

 

 

 

 

if f2=I

then

go

to 110;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if f3= 1 then go to 112;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if f4 = l

then

go

to

113;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

187: wl:=.\v:=0;

until

kl

do

dhrO[i]: = dhO[i]; f2: = f3: = f4=0;

 

for

i: = 1

step

 

 

1

 

188:

alfa2:=0.1Xdhr;

w := .w +l;

dh2: = dhr;

tf2: = tfr;

f2: = l;

 

19:

alfa2: = alfa2/2;

 

dh[w]: = dhrO[w]—alfa2;

go

to 13;

 

 

 

110: dh3: = dh[w];

tf3: = tfr;

f2:=0;

 

 

 

 

 

 

 

 

if tf3—tf2 ^ 0

 

then

 

go

to

114;

 

go

to 13;

 

 

 

 

lll:= d h [w ]: = dh[w]—O.lXdhr;

f3: = l;

 

 

 

 

112: dh4: = dh[w];

tf4: = tfr;

 

 

 

 

 

 

 

 

 

 

 

 

 

if tf4—tf3 < 0

then

 

 

 

go

to

111; end;

 

 

 

 

 

begin

tf3: = tf4;

dh3: = dh4;

 

 

 

 

 

tri,

Il:-dh2X dh2;

Ш , 21:=dh2;

t |l,

3]:=t[2. 3]:=t[3,31: = l;

 

t[2,

l]:=dh3Xdh3;

t[2, 2J:=dh3;

t[3,

l]:=dh4Xdh4; t [3,

2]: =

dh4;

181

tin, i;:=tf2;

t l [2, 1| :=tf3;

tl[3, l]:=tf4; sp(l,

3,

t) sp(3, 3, 3, 1, t, t l%t2)

t3 * = t9 ‘l

11* t4* —t9T9

П*

:=.t2[3,

1J;

 

"

 

'

dhopt: ==—1«4/(2Xt3);

tfopt: = (4Xt3Xt5--t4XM )/(4Xt3);

output (3, *e\ dhopt, tfopt);

go

to

13;

dh[w]:=dhopt; f3:=0;

f4: = l;

113: f4:=0*

k, dhO, dh, tfO, tfr, w );

output (3,

V,

114: if w ^ k l

then go to 138;

 

 

 

if wl=7*=kl then go to 187;

tfO,

tfr);

output (3,

'e\

kOO, k, dhO, dh,

end;

end;

а •

П Р И Л О Ж Е Н И Е 2

ПРОГРАММА ОПТИМИЗАЦИИ ПАРАМЕТРОВ

АМПЛИТУДНО-ЧАСТОТНОЙ ХАРАКТЕРИСТИКИ

Программа предназначена для:

.1) определения экстремумов и граничной частоты АЧХ;

2) определения параметров коррекции, при которых АЧХ имеет экстремумы заданной величины;

3) оптимизации параметров методом сжатия области ограни­ чений.

Число параметров коррекции не должно превышать число экс­ тремумов АЧХ. Результаты выводятся на БПМ. Печатаются исход­ ные и оптимальные параметры коррекции, пары координат экстрему­ мов АЧХ и граничная частота для исходного и оптимального вариан­ тов (koo, k, ато, wgr).

Впрограмме имеются процедуры:

1.Процедура рг — определение параметров АЧХ; экстремумов и

граничной частоты. 'В ней используются вложенные процедуры:

а)

процедура hor — вычисление

значения полинома п

степени

в точке х;

pal— вычисление

коэффициентов

изображения

<5) процедура

h(p) и функции М2(х), Процедура pal — сменная. В

программе при­

ведены данные для усилителя рис.

1-7;

 

значения

аргумента,

в)

zs — определение точек

экстремумов и

при котором функция достигает заданного уровня.

 

 

от еди­

2. Процедура d — определение

отклонений

экстремумов

ничного уровня.

 

и для программы

приложения 1,

Исходные данные те же, чго

за исключением:

экстремальное

отклонение

АЧХ

от единичного

dtnt — заданное

уровня;

определения абсцисс АЧХ,

соответствующих 3aj

eps — точность

данным ординатам;

 

 

 

 

 

 

 

 

= 4 — признак счета я печати ординат АЧХ на интервале хх

с шагом ch\ при pf\

печать не производится.

 

 

 

 

182

begin

procedure pr(n, m, pri, v, k, eps, ch, kl, xx,

mm, e, Id, k3, wgf,

dmr);

 

 

 

value n, m, prl, v, k, eps, ch, kl, xx, k3, dmr;

 

integer n, m, prl, kl, e, k2, k3;

 

real v, eps, ch, xx, wgr, dmr; array k, mm;

 

begin integer

i, pr;

 

real x,

c,

xO, x3, m2, z, mOO, m il, x4, chi,

mi;

array

a[0:mj, b[0:n];

 

real procedure hor(n, x, a);

 

value n, x; real x; integer n; array a;

 

begin real h; integer i;

 

h;=0;

 

for i: = N step —-1 until 0 do h:=h X x+a[ij; hor:=h:

end hor;

procedure pal(n, m, v, k, a, b);

value n, m; integer n, m; real v; array k, a, b; begin real al, Ы, Ь2, b3, b4;

al: = k[l] + k [3 ]; Ы := 1; b 2 := k [l]+ v X (k [2 ]+ 2 x k [3 ];

b 3 := v X (l—v)Xk[2];

b 4 := v X (l-v )X (k [lJ X k [2 ]-k [3 ]X

3]);

r

 

0 : =

b[0]:=.l; a [l]:= a lX a l;

Ь[1]:=Ы Х Ы —2Xb2;

b['2]:=b2Xb2—2XblXb3+2Xb4;

b[3J: =

ЬЗХЬЗ—2xb2Xb4; b[4]: = Ь4ХЬ4;

end;

procedure zs(n, m, c, xO, x3, eps, ipr, m2, z);

value xO, x3, eps, n, m; integer pr, n, m; real xO, x3, eps, m2, z, c; begin real xl, x2, rl, r2, ml;

xl:=x0-f* (3—sqrt(5))/2Х (x3—xO);

x2:=x3— (3—sqrt(5))/2 X

(x3—xO);

 

 

xl, a)/hor(n,

xl, b));

pal(n, m, v, k, a, b); ml : = sqrt (hor (m,

rl: = abs(ml—c);

m l:=sqrt(hor(m ,

x2,

a)/hor(n, x2,

b));

r2: = abs(m l—c);

go to 14;

 

 

 

11: if rl< r2 then

go to 12; go to 13;

 

 

 

12: begin x3:=x2;x2:=xl; m2:=rl; z:=xl; r2:—rl;

 

xl= .x0+ (x3—xO) X (3—sqrt(5) )/2;

 

 

 

ml:=sqrt(hor(m, xl, a)/hor(n, xl, b));

 

 

rl = abs(ml—c);

go to 14;

 

 

 

end;

 

 

 

 

13:x0:=xl; xl:=x2; m2: = r2; z:=x2; rl: = r2; x2:=x3— (x3—xO) X (3—sqrt (5))/2;

ml:=sqrt(hor(m, x2, a)/hor(n, x2, b)); r2:=abs(ml—c);

14:if (x3—x0)>eps then

begin if pr=0 then go to 11 else go to 15; end; go to out;

15: if rl<r2 then go to 13; go to 12; out: output (3, ‘e’, pr, z, m2);

end zs;

 

v, k, a, b);

k2:=0; c:=0; e:=2; pal(n, m,

if prl —I then for x:=0;

x+ch

while

x ^ x x do

begin m00: = sqrl(hor(m,

x, a)/hor(n,

x, b));

output (3, ‘e\ mOO, x);

end;

x:=0;

183

for i: 1 step

l Until 2X(n—1) do m m [l]:=0;

 

 

 

 

mOO:=sqrt(hor(m, x, a)/hor(n, x, b)); x:=x+ch;

 

 

 

mll:=sqrt(hor(m, x, a)/hor(n, x, b)); x4:=x+ch;

 

 

pi: if mll^mOO then

 

 

 

 

 

 

 

 

 

begin for x:=x4, x+ch while mll^mOO do

 

 

x,

b); if

 

begin moo:=mll; ml l:=sqrt(hor(mj xt a)/hor(ri,

 

xx then

 

 

 

 

 

 

 

 

 

 

 

 

 

begin e:=0; go to fin; end;

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

xO:=x—2xch; хЗ:=х-^-сЬ; x4:=x;

 

 

 

 

 

 

zs(n, m, c,

xO, x3, eps, 1, m2,

z);

 

 

 

pr: = 1;

 

k2:=k2+l;

mm[2Xk2—l]:= z;

mm[2Xk2]:=m2;

 

output

(3, ‘e\

m2, z,

k2, pr);

go

to

fin; end;

 

 

 

 

if k 2^ n —1

then begin e:= l;

 

 

 

 

go to p2;

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

for x:=x4, x+ch while mll^mOO do;

a)/hor(n,

x,

b));

begin m 00:=m ll;

mll:=sqrt(hor(m, x,

 

if x>xx then begin e:=0; go to fin; end;

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

xO:=x—2Xch; x3:=x—ch; x4:=x;

 

 

 

 

 

 

 

zs(n, m, c, xO, x3, eps, 0, m2, z)

 

 

 

 

pr:=0;

 

k2:=k2+l;

mm[2Xk2—l]:= z;

mm['2Xk2]:=m2;

 

output (3, ‘e’, m2,

z,

k2, pr);

 

 

 

 

 

 

 

 

if k2>n—1 then begin e:=.l; go to fin end;

 

 

 

 

p2: m00:=mll; x4:=x4+ch;

 

 

 

 

 

 

 

 

mll:=sqrt(hor(m, x4, a)/hor(n, x4, b));

 

 

 

 

 

x4:=x4+ch;

go to pi;

 

 

 

 

 

 

 

 

 

fin: output (3, ‘e\ mm, k2, e);

 

 

 

 

 

 

 

 

if k3—0 then go to p3;

 

 

 

 

 

 

 

 

 

c:= 1—dmr; chi =0.5;

x:=0;

 

 

 

 

 

 

 

 

ml:=sqrt(hor(m, x, a)/hor(n, x, b));

 

 

 

 

 

 

for x:=chl, x+chl

while m l^ 0 .3 do m l:=sqrt(hor(m ,x, a)/hor

(n,

x, b));

 

 

 

 

 

 

 

 

 

 

 

 

 

x4:=x;

 

 

 

 

 

do

ml:=sqrt(hor(m, x, a)/hor

for

x:=x4, x—ch while ml ^ c

(n,

x, b));

 

 

 

 

 

 

 

 

 

 

 

 

 

xO:=x+ch; x3:=x+2Xch;

 

 

 

 

 

 

 

 

 

zs(n, m, c, xO, x3, eps, 0, m2, wgr);

 

 

 

 

 

 

 

output (3 'e\ m2, wgr);

 

 

 

 

 

 

 

 

 

p3: end;

 

 

 

 

 

 

 

 

 

 

 

 

 

procedure d(k2, mm, dmo) ;

 

 

 

 

 

 

 

 

value k2, mm; integer k2; array dmo, mm;

 

 

 

 

begin integer

i

 

1

until k2— 1

do

d m o[i+ l]:= ab s(I—mm[2X

,

for i:=0

step

i+2]);

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

integer nl, n, m, prl, kl, e, k2, k3, i,

ff, vv, f2, f3, f4,

j, w, ww;

real v, eps, ch, xx,

wgr,

dmr, epsl,

wo,

alfa3,

alfal,

ba,

ca, w lr

alfa2,

 

 

 

 

 

 

 

 

 

 

 

 

 

dm2, w2, dm3, w3, dm4, w4, t3, t4, t5, dmopl, xopt;

 

 

 

input (1, nl, n, m, kl, v, eps, ch, xx, dmr);

 

 

cc

[l*kll,

begin array k [l:n ],

kOO, kO, dm, dmO, dml, dmrO, bb,

 

m m [l:2X kl],

dk,

bbl

[l:kl,

1:1], aa[l:kl,

l:k l],

tl,

1:1],

184

t [1:3, 1:3}‘,

 

 

 

 

 

 

 

 

 

 

 

input(1, к);

 

 

 

 

 

 

 

 

 

 

 

ff:=0;

step

1

until

kl

do

 

 

 

 

 

 

for i: = l

 

к[1 ]; end;

 

 

begin

dm [l]: = dmr; kOO[ 1 ]: =

 

 

pr(n,

m,

0, v,

k, eps, ch, kl,

xx, mm, e, k2, 1, wo, dmr);

if к2=т^к1

then

begin

ff:= l; go to

ml9 end;

 

d(k2, mm, dmO);

wO,

dmO);

i: =

0;

 

 

 

output

(3,

*e\

mm,

 

 

 

ml: = i: = i+ l;

epsl: = 0.01 Xdmr;

 

 

 

 

if dmO [i]> dm r+epsl then go to m2;'

 

 

if i ^ k l — 1 then go

to ml; vv:==l;

 

 

 

 

output (3, *e\ vv, kOO);

go to

mil;

 

 

 

 

m2: alfa3: = 0.1; f2: =

f3: =

f4:= 0 ;

 

 

 

 

m3: alfa3: = alfa3/2;

 

 

 

 

 

 

 

 

for j: =

i step 1 until kl do

 

 

 

 

 

begin

if

alfa3<0.01'25

then

 

 

 

 

 

 

begin

ff: =

2; go

to

ml9;

end;

 

 

k[i]:=k[i]+dk[i, 1];

dk

[i,l]: =

alfa3Xk[i];

k0[i]: ==k[i];

pr(n,

m,

0, v,

k,

eps,

ch, kl,

xx,

mm, e, k2, 0, wgr, dmr);

if

k2=£kl

then

begin k [i]: = k0[i];

go

to m3; end;

d(k2,

mm,

dml);

к[i]: = kO[i];

aa[j,

i]: = (dm l[]]—dm0[j])/dk

for j: = l

step

1

until

kl

do

[l

i];

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for j:= i

step

1

until kl

do

 

 

 

 

 

 

begin

if

j = entier (j/2) X2 then

 

 

 

 

 

begin

if k2= entier (k2/2)X2 then

 

 

 

begin

if m m [2X j]< l then

 

 

 

 

begin

dm0[j]: = dm0[j];

go to m33;

 

 

end else go to m33;

 

 

 

 

 

 

 

end;

 

 

 

 

then dm 0[j]:=—dm0[j];

 

if m m [2X j]> l

 

end;

bbl[j,

1]: = dm[j]—dm0[j];

bb[j]: =

abs(bbl[j, 1]);

m33:

end;

(3, ‘e’, aa, dm,

dmO,

dml, bbl, dk);

 

 

output

 

 

sp(l, kl, aa); sp(3, kl, kl, 1, aa, bbl, dk);

 

 

output (3, *e\ aa, dk);

alfal: = 2 ;

 

 

 

 

m4:alfal: =

alfar/2

 

 

 

 

 

 

 

 

 

if alfal<0.125

then

 

to

m l9;

 

 

 

 

 

begin if ff= 3 then go

 

 

 

 

 

for i: =

l

step

1

until

kl

do

k[i]:= k 0 [i];

 

wgr, dmr);

pr(n, m,

o,

v,

k, eps,

ch, kl, xx, mm,

e, k2, 0,

d (k2, mm, dmO); go to mlO;

 

 

 

 

 

end;

l

step

1

until kl

do kfi]:=kO[i]-balfalXdk[i, l];

for i: =

pr(n, m,

0,

v,

k, eps,

ch, kl,

xx, mm,

e,

k2,

0, wgr, dmr);

if k2 =5^kl

then

 

 

 

 

 

 

 

 

 

 

 

begin ff:=3; go to m4; end;

 

 

 

 

 

 

ff:=0; d(k2, mm, dml)^

kl

do

 

 

 

 

m5: for

i: = l step 1

until

 

 

 

 

begin if i=entier(i/2)X2

then

 

 

 

 

 

13—195

185

begin if k3=entier(k2/2)X2 ibert

begin if mm [2X0 <1 then

rri55;

begin dml [i]:= —dml [i]; go to

end else go to m55;

f lr,

end;

if ram {2Xi]>l then dml [!]*:=—dmltiji

end;

m55: cc[i]; = abs(dm[i]—dml[i])}

end;

 

 

 

 

,

 

ba: = bb[l]: i:= 2;

 

 

m6: if ba—4)b[i]^0 then go

to m7; ba:.= bb[ij;

i:=2;

m7: i:= i+ l;

if i< k l then go

to m6;

ca;=cc[i];

m8: if ca—cc[i]^sO then go to m9;

 

 

ca:=cc[i]; m 9:i:=i+l;

 

 

 

if is^kl

then go to m8;

 

 

 

if ca—ba^O

then go to m4;

 

 

 

for i: = l

step

1 until kl do dmO[i]: = dml[i];

 

alfa3:=0.1;

then go to m3;

 

 

 

if ca>epsl

 

 

 

mlO: output

(3, *e\ k, kOO, dmO, mm);

 

for j:= l

step

1 until kl do

bbl [j,

l]: = dm[j]—dmO[j];

pr (n, m, 0, v, k, eps, ch, kl, xx, mm,

e, k2, 1, wl,

dmr);

if f2=.l then go to ml4;

 

 

 

if f3 = l

then go to ml6;

 

 

 

if f4= l

then go to ml7;

 

 

 

m il: w := \v := 0 ;

for i:—.1 step 1 until kl do dmr0[i]:=dm0[i]; f2:=f3:=f4:=0;

ml2: alfa2:=0.2Xdmr; w: = w + l; dm2: = dwr0[w]; w2: = wl; f2: = l;

ml3:

alfa2:=alfa2/2;

dm[w]: = dmr0[w]—alfa2; alfa3:= 0 .1; go to m3;

ml4:

dm3: = dm[w];

w3:=wl;

output (3, 'e\ dmr, dm3, \v2, w3, w, alfa2); if alfa2^epsl then

begin f2:=0; w w :=w w +l; go to ml8; end; if w3—w2>0 then go to ml3; f2:=0;

ml5: dm[w];=.dm[w]—O.lXdmr; f3:=l; alfa3:=0.1; go to m3; ml6: dm4: = dm[w]; w4:=wl;

output (3, 'e’f dmr, dm4, w3,

w4, w);

 

if w4—w 3 ^ 0 then

 

 

 

 

 

begin w3:=w4; dm3:—dm0[w]; go to ml5; end;

tri,

l]:=.dm2Xdm2;

t[l,

2] :=dm2;

t[l,

S]: = t[2, 31: = t[3, 3 ]:= l;

t[2,

lJ:=dm3Xdm3;

t[2,

2

dm3;

t[3,

l]:=dm4Xdm4; t[3, 2]: =

dm4;

l]:=w 2; tl[2, l]:=w 3;

t l [3, l]:=w 4;

t l [1,

sp(l, 3, t);sp(3, 3, 3,1, t, tl, t2);

 

 

t3:=.t2[l, 1]; t4:=t2[2, 1]; t5:=t2[3, 1];

 

dmopt:=—t4/(2Xt3);

xopt:= (4Xt3Xt5—t4Xt4)/(4Xt3);

output (3, *e’, dmopt, xopt);

 

 

 

dm[w]:=dmopt; f2:=f3=0;

f4: = l;

alfa3:=0.1; go to m3;

m il: f4:= 0 ; amr0[w]:=dm0[w];

 

 

if w # k l then dmrO[w+l]:=dm O[w+l]; output (3, *e\ k, dmO, wl, w);

m l8: if<kl then go to m l2; output (3, 4e’, k, dmO, wl);

186

if w w ^ k l— 1

then

go to ml9;

fori: = l step

1

until kl

do dmO[i]: = dmrO[i];

go to

m il;

 

'e\

kOO,

ff);

ml9:

output (3,

end;

end;

П Р И Л О Ж Е Н И Е 3

ПРОГРАМ М А ОПТИМ ИЗАЦИИ МЕТОДОМ ОБОБЩ ЕННОГО КРИТЕРИЯ

Программа оптимизации содержит процедуры локального поис­ ка opt, глобального поиска ravopt [48] и модели model.

Процедура model совершает переход от коэффициентов изобра­

жения *ПХ (ii-1) к коэффициентам АЧХ \(12-116), вычисление функции цели Р, абсцисс zt- и ординат F* экстремумов АЧХ. Указанные дей­ ствия производятся в следующем порядке:

1. По заданным формулам вычисляются коэффициенты ai и bj

изображения ПХ (1-1).

Ai и B j квадрата АЧХ M3(Q)

2.

Определяются коэффициенты

(2-16)

и записываются на место ai,

bj.

3.Вычисляются коэффициенты С* числителя производной (Af2)'.

4.От точки х = 0 с шагом /1=0/5 вычисляются значения М2 про­ цедурой 2, описанной глобально по отношению к model. При дости­ жении уровня М2<0;44 полученное значение х —№ принимается за

верхнюю границу.

5.От полученной верхней границы х производится перемещение

вобратном направлении с шагом 0/1, пока не будет определен отре­ зок, внутри которого находится значение Af2=0,5. Уточнение гра­

ничной частоты x =W внутри найденного отрезка производится

сшагом h=0,01.

6.От x = W рассчитывается с шагом h = —0,1 числитель произ­

водной (Л42), и последующим делением отрезков, содержащих кор­ ни, находятся их значения с точностью до 0,0001.

7. Если экстремумов АЧХ нет, то находится функция цели

P = - W .

8. Если имеются экстремумы, то вычисляются их значения и формируется функция цели

Р = —I(W—aF),

где F = 0, если ограничения выполнены, и Р = 2|Л 12Э—М2К|, если

ограничения не выполнены ,(Af2a —■значение экстремума, не удовле­ творяющего ограничению).

В приведенной ниже программе процедура model описывает

каскодный усилитель на полевых транзисторах с коррекцией емко­ стью в истоке первого транзистора и индуктивностью в стоке второ­ го транзистора (рис. 3-2). При переходе к другим схемам изменяют­ ся параметры, описываемые в заголовке процедуры, и выражения, определяющие коэффициенты изображения ПХ.

13*

187

В процедуре model предусмотрены выводы на БПМ: __

а) при включенном ключе 1 вводятся k, x\— V x, bif А \ ,

Bit C{]

б) при включенном ключе 2 выводятся абсциссы экстремумов ординаты экстремумов Е,-, а также значения W и Р.

Перед обращением к model должны быть определены Хо, дв, bit mv, mq, а, AM.

Процедура opt выполняет локальный поиск оптимума — спуск на дно оврага функции пели Р. Спуск производится градиентным

методом и заканчивается, когда относительное приращение функции цели станет меньше заданной величины бгМПн.

Процедура глобального поиска ravopt осуществляет оптимиза­

цию на дне оврага. Для этой цели спуск на дно оврага производится

дважды: из заданной точки ^°>о и из случайной точки

распо­

ложенной в окрестности заданной точки.

 

 

 

По двум «спущенным* 'точкам

и

определяется направ­

ление движения по оврагу и делается шаг.

Из полученной точки х ^

производится спуск"на дно оврага и т. д. Оптимизация заканчивается

в следующих трех случаях:

_________________

а) Если расстояние

(^опт i — *опт i)2 ме>кду точками

х оггги *о!гг будет R < Rum при трех попытках спуска из трех случай­

ных точек в окрестности е0 точки х% и трех случайных точек в окрестности Зео-

б) Если R > Rum, но | у(0°от — 1< criter.

в) Если число обращений к глобальной оптимизации, происхо­ дящих при смене направления овражного шага в зоне оптимума, достигает величины пр.

Для уточнения найденных значений х0пт, Уопт предусмотрен пе­

реход по ключу 4. Если он включен, то происходит повторное обращение к процедуре оптимизации с а : = 2а, L : = 0,5L. Уточнение

заканчивается, если

 

уопт

g

 

 

уопт

 

или произошло четыре обращения к процедуре оптимизации.

Оператором

©вода input

в программу вводятся

следующие

исходные данные:

параметров

коррекции, пр — число

обращений

1) п— число

к глобальной оптимизации, еО — окрестность точки х0, I — длина ша­

га, rmin — расстояние между

точками после спуска на дно оврага,

criter— точность вычисления оптимума.

 

2)

х0[1], х0[2] — исходные значения k и х (для схемы рис. 3-2).

3)

Массив z из 8 случайных чисел, равномерно расположенных

■на интервале [0, 1].

определяющий

крутизну скатов

оврага,

4)

fl/fa— коэффициент,

eps — точность вычисления

оптимума

при

включении

ключа

4.

5)

п1 — количество значений m.

п'2— количество

значений mi,

пЗ — количество значений А0 (для схемы рис. 3-'2), dm — допустимое отклонение АЧХ от единичного уровня, qn=l1.

6) Массив mr — mg\[\ : п\], массив mi — /ш‘П[1 : п2), массив

: лЗ].

18$

При печатании результатов используются следующие ключи: ключ /1 — если необходимо вывести текущие значения k, х, А~*о,

At, B i, Сг,

ключ 2 —>для вывода zu Fit W, Р\

ключ 4 — для уточнения f/ontВремя работы программы 3—б мин.

При оптимизации других усилителей переменные, вводимые по пп. 2, 5 и 6, заменяются переменными, соответствующими рассматри­ ваемой цепи.

begin

 

ravopt(n,

пр,

еО, хО, 1, rmin, criter, xopt, yopt,

z,

 

procedure

 

opt, model, qn, bl, mg, mil, alfa, dm,

m2, a, b, f5, noroot);

 

 

label noroot; procedure opt; procedure model; real procedure m2;

 

array xO, xopt, z, a, b, fs; integer n, np;

 

 

 

 

real eO, 1, rmin, criter, yopt, alfa, qn, bl, mg, mil, dm;

 

 

 

begin array

xl, t,[ 1 :Nj;

yl, 11,

scale, gmin, deltax; integer

i,

j,

w,

real e, г, fl,

f2,

y,

P>

PP;

 

 

deltax:=0.01;

scale:=0.1;

 

 

 

gmin:=.0.1;

 

 

 

for

i: = l

step

1

until n do

xl [i]:=xO[i];

 

 

 

j: = p:=w :=pp:=0;

 

e:=eO;

11:= 1;

dm, m2, a, b, f5, y, noroot);

15:modeI (xO, qn, ibl, mg,

mil, alfa,

11:

opt(xO, n,

model,

scale,

gmin,

deltax, xopt, yopt,

qn,

bl,

mg, m il, alfa,

 

dm,

m2, a,

b, f5, noroot);

 

 

 

j:= j +

l;

 

begin

yl: = yopt;

 

 

 

 

if j = l then

 

 

 

 

for i:=.l step 1 until n do t [i]:=xopt[i];

 

 

 

12: for

i: =

I

 

step

 

1

until n do

xO[i]:=xlfi]—e X (l—2ХЩ +

w X n]);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

go

to

15; end;

 

 

 

 

 

 

 

 

 

 

 

 

r:=0;

l step 1 until

n do

r: =

r+ (t[i]—xopt[i])|2;

 

 

 

for i: =

 

 

 

r: = sqrt(r);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if r<rmin

then

 

 

 

 

 

 

 

 

 

 

 

 

 

begin \v := w + l;

then

 

 

 

 

 

 

 

 

 

 

 

if

w > 3

 

 

 

 

 

 

 

 

 

 

begin e:=e+0.4X e;

 

 

 

 

 

 

 

 

if e>3XeO then go to 14; w:=0;

 

 

 

 

end;

12:

 

 

 

 

 

 

 

 

 

 

 

 

 

go

to

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13: fl:= y l—yopt;

 

 

 

 

 

 

 

 

 

 

 

 

if abs(fl)Ccriter then go to 14;

 

 

 

 

 

if f l< 0

then

then

 

 

 

 

 

 

 

 

 

 

 

 

begin if j> 3

 

 

 

 

 

then

 

 

 

 

 

begin

if

abs (f 1) <0.01

 

 

 

 

 

begin

1: =0.5X1;

scale:=0.5Xscale;

deltax: = 0.5Xdeltax;

end

else

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

p p := p p + l,

p: =

p+l;

1:= 11; end;

 

 

 

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end else' "*

S‘eP

1

Un,H

" d°

x0f‘J: = t W + lX (t[i]-x o p t[i]);

 

begin yl: =

yopt;

if

f1 >0.1

then

1:= 11;

 

 

 

 

for i: » l

step

1

 

until n

do

 

 

 

 

 

 

189

begin

xO[i]:= xopt[i] + IX (xopt[i] —t[i]);

 

 

 

 

 

 

t[i]:=x°pt[i];

end;

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

qn,

bl,

mg, mil, alfa,

dm,

m2, a,

b,

f5,

y,

noroot);

 

model(xO,

 

if ippxs'l then

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin w:='pp:=j:=0;

1:=0.5XU

scale: =0.5Xscale;

 

 

 

 

deltax:=0.5X deltax;

n do xl[i]:=xO [i];

 

 

 

 

 

 

for i:=.l step

1 until

 

 

 

 

 

 

go to

11;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

scale, gmin, deltax, xopt, yopt, qn, bl, mg, mil,

opt (xO, n, model,

alfa, dm, m2, a, b, f'5, noroot);

 

 

 

 

 

 

 

 

 

 

 

j:= j+ l;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if p=np then go to 14 else go to 13;

 

 

1:=

11;

 

 

 

 

 

14: output

(3,

*e’,

fl, e, 1,

p, i, xopt, yopt);

 

 

 

 

 

end;

opt(xO,

n, model, scale, gmin, deltax, xopt, yopt, qn,

bl,

procedure

mg, mil, alfa, dm, m2, a, b, f5, noroot);

 

 

 

 

 

 

 

 

label noroot; array xO, xopt, a, b, f5;

 

 

 

 

 

 

 

 

 

procedure model; real procedure m2;

 

 

 

 

 

 

 

 

 

real scale, gmin, deltax, yopt; integer n;

 

 

 

 

 

 

 

real qn, bl, mg, mil,

alfa,

dm;

 

 

 

 

 

 

 

 

 

 

 

. begin array grad[l:n]; real y, y2, zx, sk; integer i, m;

y2,

noroot);

model (xO,

qn,

bl,

mg,

mil,

alfa,

dm,

m2,

a,

b,

f5,

m:=0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ciclel:sk:=0;

1 until

n do

 

 

 

 

 

 

 

 

 

 

 

for i: = l step

 

 

 

 

 

 

 

 

 

 

 

begin

zx:=xO[i];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

metl:xO[i] :=xO[i] + deltax;

alfa,

dm,

m2,

a,

b,

f5,

y,

noroot);

model (xO,

qn,

bl,

mg,

mil,

if abs(y—y2) <0.0000001 then

go

to metl;

 

 

 

 

 

 

x0[i]:=zx;

grad[F]:=(y—y2)/deltax;

sk: = grad[i] f2+sk;

 

end;

 

l until

n do

x0[i]:=x0[i]— (scale/sk)Xgrad

[i];

 

for i: = l step

 

model(x0,

qn, bl, mg,

mil,

alfa, .dm,

m2,

a, b,

f5,

y,

noroot);

 

if abs((y2—y)/y2)>gm in

then

 

 

end;

 

 

 

 

 

 

 

begin y2:=y; m :=m +l;

go to ciclel

 

 

 

 

 

 

 

yopt: = y;

 

1 until

n do хорЩ] =

х0р]

 

 

 

 

 

 

 

for i: = l step

 

 

 

 

 

 

 

end;

model (xO, qn,

bl, mg,

mil,

alfa,

dm, m2,

a,

b, f5,

p,

procedure

noroot);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

value xO, qn, bl, mg, mil, alfa, dm; label noroot;

 

 

 

 

 

real procedure m2;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

array xO, a, b, f5; real qn, bl, mg, mil, dm, alfa, p;

 

 

 

 

begin real procedure pr(d, c); real d; array c;

 

 

 

 

 

 

begin integer 1; real r;

 

 

 

 

 

 

 

 

 

 

 

 

 

r:=0;

 

 

 

 

r:= r+ c[l]X d fl;

 

 

 

 

 

 

for 1:=0 step 1 until 6 do

 

 

 

 

 

 

pr:=r;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

 

 

k, x* h, funl, fun2, xl, x2,

x3,

f,

w,

f3,

fun 3;

real tl, t2, t3, t4,

array fl, z[0:3], c[0:6); integer i, kl;

 

 

 

 

 

 

 

 

 

k:=x0[l];

x:=x0[2];

a [l]:= k + x ;

a[2]:=kX x;

 

 

 

 

 

tl: — xXbl; t2:«=l, 197Xmg+qn+4.279lXmil;

 

 

 

 

 

 

190