Файл: Национальный технический университет украины киевский политехнический институт кафедра систем автоматизированного проектирования.doc

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 06.12.2023

Просмотров: 76

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


begin

F0:=Fc;

Fc:=1;

F1:=F1/F0;

end;

Procedure LowPassFilter_Batterworth_Order; { расчет порядка фильтра }

var order:double;

begin

order:=0.5*lg((pow10(0.1*Bf)-1)/

(pow10(0.1*Af)-1))/

lg(F1);

if order>MAX_ORDER then

begin

TextColor(LIGHTRED);

writeln('Программа не может рассчитать фильтр');

writeln('Требуемый порядок фильтра превышает ',MAX_ORDER);

writeln('Требуется порядок фильтра = ',order);

writeln('Нажмите Enter');ch:=#255;

while ch<>#13 do ch:=Readkey;

TextColor(LIGHTGREEN);

Halt(1);

end;

if order<=0 then

begin

TextColor(LIGHTRED);

writeln('Программа не может рассчитать фильтр');

writeln('Получен отрицательный или нулевой порядок фильтра = ',order);

writeln('Нажмите Enter');ch:=#255;

while ch<>#13 do ch:=Readkey;

TextColor(LIGHTGREEN);

Halt(1);

end;

N:=Trunc(order)+1;

if (N mod 2 = 1) then sect:= N div 2 + 1

else sect:= N div 2;

end;

Procedure LowPassFilter_Batterworth_Sigma0;{расчет радиуса полуокружности}

begin

sigma0:=pow(pow10(0.1*Af)-1,-1/(2*N));

end;

Procedure LowPassFilter_Batterworth_H;{расчет числителя передаточной функции}

begin

H := 1.0/sqrt(pow10(0.1*Af)-1);

Hi:=H;

end;

Procedure LowPassFilter_Batterworth_Poles;{расчет полюсов фильтра}

var i:integer;

begin

for i:=1 to sect do

begin

poles[sect-i+1].re:= - sigma0 * sin ((2*i-1)*Pi/(2*N));

poles[sect-i+1].im:= - sigma0 * cos ((2*i-1)*Pi/(2*N));

end;

{ при нечетном N звену первого порядка соответствует poles[1]}

end;

{ выбор схемной реализации и расчет номиналов }

Procedure LowPassFilter_Building;

var i : integer;

C : double;

delta : double;

beta : double;

gamma : double;

scale : double;

D:double;

begin

{ C задается таким образом, чтобы при денормировании получить 1.0}

C:=(2*pi*f0)/(pow10(Trunc(lg(f0))+1.0));

i:=1;

{ при нечетном N звену первого порядка соответствует poles[1]}

if (N mod 2 = 1) then {построение звена первого порядка}

begin

delta:= -poles[1].re;

sections[1].shem := invert; {на инвертирующем ОУ}

sections[1].C1 := C;

sections[1].R1 := 1/(C*Hi);

sections[1].R2 := 1/(C*delta);

i:=2;

Hi:=1;

end;

while i<=sect do {построение звена второго порядка}

begin

beta := -2*poles[i].re;

gamma:= sqr(poles[i].re)+sqr(poles[i].im);

sections[i].Q:=sqrt(gamma)/beta;

if sections[i].Q<=10 then with sections[i] do

begin

shem := MOS; {с многопетлевой обратной связью}

C1 := C;

scale:= 1.001*4*gamma*(Hi/gamma+1)/(beta*beta);

C2 := C1*scale;

D := beta*beta*C2*C2 - 4*C1*C2*gamma*(Hi/gamma+1);

R2 := 2*(Hi/gamma+1)/(beta*C2 + sqrt(D));

R1 := R2*gamma/Hi;

R3 := 1.0/(C1*C2*R2*gamma);

end

else with sections[i] do

begin

shem := bikvadrat; {биквадратное звено}

C1 := C;

R4 := 1.0/C1;

R1 := 1.0/(Hi*C1*C1*R4);

R2 := 1.0/(beta*C1);

R3 := 1.0/(R4*C1*C1*gamma);

end;

i:=i+1;

Hi:=1;

end;

end;

{ денормирование электрических параметров }

Procedure LowPassFilter_Denorming;

var i:integer;

begin

for i:=1 to sect do

begin

sections[i].R1:= sections[i].R1 * R0;


sections[i].R2:= sections[i].R2 * R0;

sections[i].R3:= sections[i].R3 * R0;

sections[i].R4:= sections[i].R4 * R0;

sections[i].C1:= sections[i].C1 / (R0*2*pi*f0);

sections[i].C2:= sections[i].C2 / (R0*2*pi*f0);

end;

end;

Procedure LowPassFilter_Info;{ вывод результатов расчета фильтра}

var i,j:integer;

f:text;

begin

Assign(f,txt_file);

Rewrite(f);

ClrScr;

writeln(' Результаты расчета ФНЧ с аппроксимацией АЧХ по Баттерворту ');

writeln('------------------------------------------------------------------------------');

writeln('Исходные данные : Частота среза Fc = ',Fc*F0:10:4,' Гц');

writeln(' Неравномерность Аф = ',Af :10:4,' дБ');

writeln(' Граничная частота F1 = ',F1*F0:10:4,' Гц');

writeln(' Затухание BФ = ',Bf :10:4,' дБ');

writeln('------------------------------------------------------------------------------');

writeln('порядок,тип звена Q С1,мкФ С2,мкФ R1,кОм R2,кОм R3,кОм R4,кОм ');

writeln('------------------------------------------------------------------------------');

writeln(f,' Результаты расчета ФНЧ с аппроксимацией АЧХ по Баттерворту ');

writeln(f,'------------------------------------------------------------------------------');

writeln(f,'Исходные данные : Частота среза Fc = ',Fc*F0:10:4,' Гц');

writeln(f,' Неравномерность Аф = ',Af :10:4,' дБ');

writeln(f,' Граничная частота F1 = ',F1*F0:10:4,' Гц');

writeln(f,' Затухание BФ = ',Bf :10:4,' дБ');

writeln(f,'------------------------------------------------------------------------------');

writeln(f,'Порядок фильтра = ',N);

writeln(f,'Количество звеньев = ',sect);

writeln(f,'------------------------------------------------------------------------------');

for i:=1 to sect do

begin

j:= whereY;

if sections[i].shem=invert then

begin

gotoxy( 1,j);writeln('1 инверт.ОУ');

gotoxy(24,j);writeln(sections[i].C1*1.0e+6:8:4);

gotoxy(42,j);writeln(sections[i].R1/1.0e+3:8:3);

gotoxy(51,j);writeln(sections[i].R2/1.0e+3:8:3);

writeln(f,'Звено первого порядка');

writeln(f,'на инвертирующем ОУ ');

writeln(f,'C1=',sections[i].C1*1.0e+6:10:4,' мкФ');

writeln(f,'R1=',sections[i].R1/1.0e+3:10:4,' кОм');

writeln(f,'R2=',sections[i].R2/1.0e+3:10:4,' кОм');

writeln(f,'---------------------');

end;

if sections[i].shem=MOS then

begin

gotoxy( 1,j);writeln('2 звено МОС');

gotoxy(15,j);writeln(sections[i].Q:8:4);

gotoxy(24,j);writeln(sections[i].C1*1.0e+6:8:4);

gotoxy(33,j);writeln(sections[i].C2*1.0e+6:8:4);

gotoxy(42,j);writeln(sections[i].R1/1.0e+3:8:3);

gotoxy(51,j);writeln(sections[i].R2/1.0e+3:8:3);

gotoxy(60,j);writeln(sections[i].R3/1.0e+3:8:3);

writeln(f,'Звено второго порядка');

writeln(f,'с многопетлевой ОС ');

writeln(f,'Q =',sections[i].Q:10:4);

writeln(f,'C1=',sections[i].C1*1.0e+6:10:4,' мкФ');

writeln(f,'C2=',sections[i].C2*1.0e+6:10:4,' мкФ');

writeln(f,'R1=',sections[i].R1/1.0e+3:10:4,' кОм');

writeln(f,'R2=',sections[i].R2/1.0e+3:10:4,' кОм');

writeln(f,'R3=',sections[i].R3/1.0e+3:10:4,' кОм');

writeln(f,'---------------------');

end;

if sections[i].shem=bikvadrat then

begin

gotoxy( 1,j);writeln('2 биквадрат.');

gotoxy(15,j);writeln(sections[i].Q:8:4);

gotoxy(24,j);writeln(sections[i].C1*1.0e+6:8:4);

gotoxy(42,j);writeln(sections[i].R1/1.0e+3:8:3);

gotoxy(51,j);writeln(sections[i].R2/1.0e+3:8:3);

gotoxy(60,j);writeln(sections[i].R3/1.0e+3:8:3);

gotoxy(69,j);writeln(sections[i].R4/1.0e+3:8:3);

writeln(f,'Звено второго порядка');

writeln(f,'биквадратное ');

writeln(f,'Q =',sections[i].Q:10:4);

writeln(f,'C1=',sections[i].C1*1.0e+6:10:4,' мкФ');



writeln(f,'R1=',sections[i].R1/1.0e+3:10:4,' кОм');

writeln(f,'R2=',sections[i].R2/1.0e+3:10:4,' кОм');

writeln(f,'R3=',sections[i].R3/1.0e+3:10:4,' кОм');

writeln(f,'R4=',sections[i].R4/1.0e+3:10:4,' кОм');

writeln(f,'---------------------');

end;

if (j = 20) then

begin

TextColor(LIGHTRED);

writeln('Нажмите Enter, чтобы посмотреть остальные звенья ');

ch:=#255;

while ch<>#13 do ch:=Readkey;

TextColor(LIGHTGREEN);

ClrScr;

GoToXY(1,1);

writeln('------------------------------------------------------------------------------');

writeln('порядок,тип звена Q С1,мкФ С2,мкФ R1,кОм R2,кОм R3,кОм R4,кОм ');

writeln('------------------------------------------------------------------------------');

end;

end;

writeln('------------------------------------------------------------------------------');

writeln('Порядок фильтра = ',N);

writeln('Количество звеньев = ',sect);

writeln('------------------------------------------------------------------------------');

Close(f);

TextColor(LIGHTRED);

writeln('Нажмите Enter');ch:=#255;

while ch<>#13 do ch:=Readkey;

TextColor(LIGHTGREEN);

end;

{ расчет АЧХ спроектированного фильтра }

Procedure LowPassFilter_AFC;

var g:text;

i,j:integer;

f,df,w:double;

K :complex;

pp :complex;

Hi , delta : double;

beta, gamma : double;

begin

Assign(g,tab_file);

Rewrite(g);

writeln(g,'Таблица значений ЛАЧХ фильтра нижних частот:');

writeln(g,'--------------------------------------------');

writeln(g,' Частота Ку ');

writeln(g,'----------------------------');

low_freq :=1.0;

high_freq:=F1*F0*2.0;

df:=high_freq/POINTS;

f:=0.0;

j:=1;

while j<=POINTS do

begin

w:=2*pi*f;

K.re :=1; K.im :=0;

for i:=1 to sect do

begin

if sections[i].shem=invert then

begin

with sections[i] do

begin

Hi:=1/(R1*C1);

delta:=1/(R2*C1);

end;

K.re :=K.re*Hi;

K.im :=K.im*Hi;

pp.re:= delta;

pp.im:= w;

_Div(K,pp,K);

end;

if sections[i].shem=MOS then

begin

with sections[i] do

begin

Hi :=1/( R1*R3*C1*C2 );

beta :=( 1/R1 + 1/R2 + 1/R3 )/C2;

gamma:=1/(R2*R3*C1*C2);

end;

K.re :=K.re*Hi;

K.im :=K.im*Hi;

pp.re:=gamma - w*w;

pp.im:=beta*w;

_Div(K,pp,K);

end;

if sections[i].shem=bikvadrat then

begin

with sections[i] do

begin

Hi :=1/(R1*R4*C1*C1);

beta :=1/(R2*C1);

gamma:=1/(R3*R4*C1*C1);

end;

K.re :=K.re*Hi;

K.im :=K.im*Hi;

pp.re:=gamma - w*w;

pp.im:=beta*w;

_Div(K,pp,K);

end;

end;

AFC[j]:=20*lg(_Abs(K));

writeln(g,f:8:2,' Гц ',AFC[j]:8:2,' дБ ');

f:=f+df;

j:=j+1;

end;

Close(g);

end;

{создание файла задания для моделирования АЧХ}

Procedure LowPassFilter_ALLTED;

var f:text;

i:integer;

k:integer; { узел для входа текущего звена }

r:integer;

c:integer;

qq:integer;

begin

Assign(f,atd_file);

Rewrite(f);

writeln(f,'OBJECT; ');

writeln(f,'SEARCH PRAM; ');

writeln(f,'CIRCUIT ARCFLT; ');

writeln(f,'Ein(1,0)=1; ');

k:=1; r:=1; c:=1; qq:=1;

for i:= 1 to sect do

begin

if sections[i].shem=invert then

with sections[i] do

begin

writeln(f,'R',r,'(',k ,',',k+1,')=',R2/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+1,',',k+2,')=',R1/1e+3:10:6,';'); r:=r+1;

writeln(f,'C',c,'(',k+1,',',k+2,')=',C1*1e+9:10:6,';'); c:=c+1;

writeln(f,'Q',qq,'(0,',k+1,',0,',k+2,')=k140ud12.oulm;'); qq:=qq+1;

k:=k+2;

end;

if sections[i].shem=MOS then

with sections[i] do

begin

writeln(f,'R',r,'(',k ,',',k+1,')=',R1/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+1,',',k+3,')=',R2/1e+3:10:6,';'); r:=r+1;


writeln(f,'R',r,'(',k+1,',',k+2,')=',R3/1e+3:10:6,';'); r:=r+1;

writeln(f,'C',c,'(',k+2,',',k+3,')=',C1*1e+9:10:6,';'); c:=c+1;

writeln(f,'C',c,'(',k+1,',', 0,')=',C2*1e+9:10:6,';'); c:=c+1;

writeln(f,'Q',qq,'(0,',k+2,',0,',k+3,')=k140ud12.oulm;'); qq:=qq+1;

k:=k+3;

end;

if sections[i].shem=bikvadrat then

with sections[i] do

begin

writeln(f,'R',r,'(',k ,',',k+1,')=',R1/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+1,',',k+4,')=',R2/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+1,',',k+2,')=',R3/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+2,',',k+3,')=',R4/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+3,',',k+6,')=',R4/1e+3:10:6,';'); r:=r+1;

writeln(f,'R',r,'(',k+4,',',k+5,')=',R4/1e+3:10:6,';'); r:=r+1;

writeln(f,'C',c,'(',k+1,',',k+4,')=',C1*1e+9:10:6,';'); c:=c+1;

writeln(f,'C',c,'(',k+5,',',k+6,')=',C1*1e+9:10:6,';'); c:=c+1;

writeln(f,'Q',qq,'(0,',k+1,',0,',k+4,')=k140ud12.oulm;'); qq:=qq+1;

writeln(f,'Q',qq,'(0,',k+5,',0,',k+6,')=k140ud12.oulm;'); qq:=qq+1;

writeln(f,'Q',qq,'(0,',k+3,',0,',k+2,')=k140ud12.oulm;'); qq:=qq+1;

k:=k+6;

end;

end;

writeln(f,'Gn(',k,',0)=0; ');

writeln(f,'& ');

writeln(f,'TASK; ');

writeln(f,'DC; ');

writeln(f,'AC; ');

writeln(f,'TF K1=V',k,'/UEin;');

writeln(f,'CONST LFREQ=',low_freq /1.0e+6:10:6,';');

writeln(f,'CONST UFREQ=',high_freq/1.0e+6:10:6,';');

writeln(f,'LPLOT DB.K1,PH.K1;');

writeln(f,'& ');

writeln(f,'END; ');

Close(f);

end;

Procedure LowPassFilter_Plot;

var Dr: Integer;

Mode: Integer;

i:integer;

A,max,scale:double;

st:string;

begin

Dr := VGA;

Mode:=2;

InitGraph(Dr,Mode,'c:\bp\bgi');

SetGraphMode(2);

max:=AFC[1];

for i:=1 to POINTS do if Abs(AFC[i])>max then max:=Abs(AFC[i]);

max:=(Round(max) div 10 + 1 )*10;

scale:=400/(max+5);

SetColor(LIGHTGRAY);

Rectangle(100,20,100+POINTS,420);

A:=0;

while A<=max do

begin

Line(100,20+Round((A+5)*scale),100+POINTS,20+Round((A+5)*scale));

Str(-Round(A):4,st);

OutTextXY(60,10+Round((A+5)*scale),st);

A:=A+10;

end;

SetColor(WHITE);

OutTextXY(60,10,'K, дБ');

A:=0; SetColor(LIGHTGRAY);

while A<=high_freq do

begin

i:= Round(POINTS*A/high_freq);

Line(100+i,20,100+i,420);

Str(Round(A):4,st);

OutTextXY(80+i,430,st);

A:=A+2*pow10(Trunc(Lg(high_freq/2)));

end;

SetColor(WHITE);

OutTextXY(130+POINTS,430,'f, Гц');

SetColor(LIGHTGREEN);

for i:=1 to POINTS-1 do

Line(100+i,20+Round(scale*(5-AFC[i])),101+i,20+Round(scale*(5-AFC[i+1])));

OutTextXY(100,460,'Press any key to exit');

readkey;

CloseGraph;

end;

Begin

ClrScr; TextColor(LIGHTGREEN);

GoToXY(20, 9); writeln('---------------------------------------------');

GoToXY(20,10); writeln('Программа расчета ARC - фильтра нижних частот');

GoToXY(20,11);

writeln(' с аппроксимацмей АЧХ по Баттерворту ');

GoToXY(20,12); writeln('---------------------------------------------');

GoToXY(20,17); writeln(' X.X. XXXXX ');

GoToXY(20,18); writeln(' студент гр. ДА-XX');

GoToXY(20,19); writeln(' ФЭЛ НТУУ "КПИ" ');

GoToXY(20,24); writeln(' Киев 2000 ');

TextColor(LIGHTCYAN+BLINK);

GoToXY(20, 1); write(' Нажмите Enter ');

ch:=#255;

while ch<>#13 do ch:=Readkey;

TextColor(LIGHTGREEN);

LowPassFilter_Parameters;

LowPassFilter_Norming;

LowPassFilter_Batterworth_Order;

LowPassFilter_Batterworth_H;

LowPassFilter_Batterworth_Sigma0;

LowPassFilter_Batterworth_Poles;

LowPassFilter_Building;

LowPassFilter_Denorming;

LowPassFilter_Info;

LowPassFilter_AFC;

LowPassFilter_ALLTED;

LowPassFilter_Plot;

End.


П2. Результаты расчета фильтра

с помощью разработанной программы
Результаты расчета ФНЧ с аппроксимацией АЧХ по Баттерворту

------------------------------------------------------------------------------

Исходные данные : Частота среза Fc = 500.0000 Гц

Неравномерность Аф = 2.0000 дБ

Граничная частота F1 = 800.0000 Гц

Затухание BФ = 30.0000 дБ

------------------------------------------------------------------------------

порядок,тип звена Q С1,мкФ С2,мкФ R1,кОм R2,кОм R3,кОм R4,кОм

------------------------------------------------------------------------------

2 звено МОС 0.5098 0.0100 0.0231 23.910 29.236 14.012

2 звено МОС 0.6013 0.0100 0.0280 26.504 24.785 13.644

2 звено МОС 0.9000 0.0100 0.0628 17.709 16.561 9.117

2 звено МОС 2.5629 0.0100 0.5090 6.219 5.815 3.201

------------------------------------------------------------------------------

Порядок фильтра = 8

Количество звеньев = 4

------------------------------------------------------------------------------
П3. График АЧХ фильтра, полученный с помощью разработанной программы



П4.Протокол расчета схемы фильтра

с помощью разработанной программы
Результаты расчета ФНЧ с аппроксимацией АЧХ по Баттерворту

------------------------------------------------------------------------------

Исходные данные : Частота среза Fc = 500.0000 Гц

Неравномерность Аф = 2.0000 дБ

Граничная частота F1 = 800.0000 Гц

Затухание BФ = 30.0000 дБ

------------------------------------------------------------------------------

Порядок фильтра = 8

Количество звеньев = 4

------------------------------------------------------------------------------

Звено второго порядка

с многопетлевой ОС

Q = 0.5098

C1= 0.0100 мкФ

C2= 0.0231 мкФ

R1= 23.9096 кОм

R2= 29.2360 кОм

R3= 14.0115 кОм

---------------------

Звено второго порядка

с многопетлевой ОС

Q = 0.6013

C1= 0.0100 мкФ

C2= 0.0280 мкФ

R1= 26.5037 кОм

R2= 24.7851 кОм

R3= 13.6438 кОм

---------------------