Dolní propust

Kmitočtová transformace pólů (a nul) přenosu NLP na parametry omega0 , Q , ( omega_n ) jednotlivých bikvadratických sekcí výsledné sruktury filtru a případně omega0  sekce prvního řádu (pokud je řád výsledného filtru lichý). Zadání příkazu " infolevel[syntfil]:=2: "  vypíše typ struktury potřebný pro následné sestavení přenosové funkce a parametry jednotlivých sekcí seřazené podle velikosti činitele Q .

>    infolevel[syntfil]:=2:

>    lp:=NLP2LP(fp1,Gc1,poles1):

H0 = 1.000000

omega0 = 6284.843220

omega_0 = 6284.84322, Q = 0.53209

omega_0 = 6284.84322, Q = 0.65270

omega_0 = 6284.84322, Q = 1.00000

omega_0 = 6284.84322, Q = 2.87939

Výsledná tabulka, kterou obdržíme jako výsledek předchozího příkazu obsahuje parametry jednotlivých sekcí, které jsou však nyní uspořádány s ohledem na optimální dynamické a šumové vlastnosti výsledného zapojení.

>    eval(lp);

TABLE([1 = TABLE([Q = .53208888623795607040, omega_0 = 6284.8432198519983427]), 2 = TABLE([Q = .65270364466613930230, omega_0 = 6284.8432198519983427]), 3 = TABLE([Q = 1.0000000000000000001, omega_0 = ...
TABLE([1 = TABLE([Q = .53208888623795607040, omega_0 = 6284.8432198519983427]), 2 = TABLE([Q = .65270364466613930230, omega_0 = 6284.8432198519983427]), 3 = TABLE([Q = 1.0000000000000000001, omega_0 = ...
TABLE([1 = TABLE([Q = .53208888623795607040, omega_0 = 6284.8432198519983427]), 2 = TABLE([Q = .65270364466613930230, omega_0 = 6284.8432198519983427]), 3 = TABLE([Q = 1.0000000000000000001, omega_0 = ...
TABLE([1 = TABLE([Q = .53208888623795607040, omega_0 = 6284.8432198519983427]), 2 = TABLE([Q = .65270364466613930230, omega_0 = 6284.8432198519983427]), 3 = TABLE([Q = 1.0000000000000000001, omega_0 = ...
TABLE([1 = TABLE([Q = .53208888623795607040, omega_0 = 6284.8432198519983427]), 2 = TABLE([Q = .65270364466613930230, omega_0 = 6284.8432198519983427]), 3 = TABLE([Q = 1.0000000000000000001, omega_0 = ...

Výpočet přenosové funkce filtru, sestavené z parametrů omega0 , Q , ( omega_n ) jednotlivých sekcí.  Dále následuje výpočet modulu přenosu a jeho vykreslení.

>    H_lp:=MakeH(lp,p);

H_lp := .15298541719989496316e35/(p+6284.8432198519983427)/(p^2+11811.641592982542628*p+39499254.298119633975)/(p^2+9628.9384488832178214*p+39499254.298119633975)/(p^2+6284.8432198519983421*p+39499254....
H_lp := .15298541719989496316e35/(p+6284.8432198519983427)/(p^2+11811.641592982542628*p+39499254.298119633975)/(p^2+9628.9384488832178214*p+39499254.298119633975)/(p^2+6284.8432198519983421*p+39499254....

>    mg_lp:=MagnitudeHdB(H_lp)(2*Pi*f):

>    plot(mg_lp,f=0..3e3);

Výpočet modulů přenosu pro mez propustného a nepropustného pásma (v ideálním případě musí samozřejmě vyjít jako zadané ap , resp. asnew    - kontrola).

>    evalf(subs(f=fp1,mg_lp));

>    evalf(subs(f=fs1,mg_lp));

[Maple Plot]

-3.0000000000000006090

-54.164791466084385608

Synéza zapojení jednotlivých bloků - výběr obvodů a výpočet hodnot součástek. Parametry funkce ARCSynt  (proměnná opt_lp )  lze ovlivňovat návrhový algoritmus. Lze volit velikosti některých součástek obvodu ( C1 , [ C2 , R ]), parametry operačních zesolovačů ([ A0 , ft  ]), celkové zesílení ([h0]) a vlastní typ obvodu (parametry v hranatých závorkách jsou nepovinné). V našem případě volíme pouze nutnou hodnotu kapacitoru C1 . Nastavením proměnné infolevel[syntfil]  na hodnotu 3, dostaneme podrobný výpis parametrů návrhu (zejména pro obvody LP1, HP1 a BP1). Funkce ARCSynt  volá funkci ARCBlock  pro rozdělení zesílení, která rozdělí zesílení mezi jednotlivé bloky tak, aby bylo dodrženo vyvážení jejich dynamiky, tj. aby k omezování signálu došlo u všech bloků při stejné budicí úrovni. Zesílení jednotlivých bloků (funkce je vypíše, pokud nastavíme proměnnou infolevel[syntfil]  na hodnotu 2) bude bude téměř vždy různé a to i v případě, že zadáme přímo zesílení jednotkových bloků (je to pouze přídavné zesílení), případně nezadáme žádné přídavné zesílení. V případě, že poměnnou infolevel[syntfil]  nastavíme na hodnotu 3, dostaneme navíc výpis kmitočtů, při kterých nastává přenýšení (maximum) modulových charakteristik u těch bloků, které převýšení vykazují. Další výpis pak udává, jak se tyto kmitočty mění na výstupech následujících bloků. Podle hodnot maxim modulových charakteristik za jednotivými bloky jsou pak vypočítány adekvátní hodnoty zesílení těchto bloků pro vyrovnanou dynamiku celého filtru.      

>    infolevel[syntfil]:=3:

>    opt_lp:=table(['C1'=33e-9]);

>    ARC_lp:=ARCSynt(lp,opt_lp):

opt_lp := TABLE([C1 = .33e-7])

Warning, ARCSynt: 2nd argument[h0] was not specified and will be considered to be 1.

ARCBlock:

Frequencies of modulus peaks of particular blocks: [[3, 707.29334], [4, 969.63320]].

Frequencies of modulus peaks after particular blocks: [[3, [0.]], [4, [845.52634, 845.52634]]].

ARCBlock:

Amplification of particular blocks h0 = [1.278728, 1.000000, 1.000000, 0.782027].

********************** Number of blok: 1 **********************

********************** Number of blok: 2 **********************

syntfil/ARCSyntLP1:

Parameters of calculations: method="K=1"; c=0.586824; h0max=K=1

********************** Number of blok: 3 **********************

syntfil/ARCSyntLP1:

Parameters of calculations: method="K=1"; c=0.250000; h0max=K=1

********************** Number of blok: 4 **********************

syntfil/ARCSyntLP1:

Parameters of calculations: method="K=1"; c=0.030154; h0max=K=1

********************** Number of blok: 5 **********************

***************************************************************

ARCSynt: Used circuit types in particular blocks: [LP2, LP1, LP1, LP1, LP0].

`block `(1), [R = 4821.6, R3 = 4821.6, R2 = 2565.5, R1 = 3770.6, C1 = .33e-7, ft = Float(infinity), type = LP2, A0 = Float(infinity)]

`block `(2), [R12 = Float(infinity), R = Float(infinity), R3 = 0., C2 = .19365e-7, R2 = 6294.2, R11 = 6294.2, C1 = .33e-7, ft = Float(infinity), type = LP1, A0 = Float(infinity)]

`block `(3), [R12 = Float(infinity), R = Float(infinity), R3 = 0., C2 = .82500e-8, R2 = 9643.2, R11 = 9643.2, C1 = .33e-7, ft = Float(infinity), type = LP1, A0 = Float(infinity)]

`block `(4), [R12 = .12739e6, R = Float(infinity), R3 = 0., C2 = .99507e-9, R2 = 27767., R11 = 35506., C1 = .33e-7, ft = Float(infinity), type = LP1, A0 = Float(infinity)]

`block `(5), [R1 = 4821.6, C1 = .33e-7, type = LP0]

`type=ARC`

Z výpisu funkce ARC_LP  je sice zřejmé jakými obvody jsou jednotlivé bloky realizovány, pokud však chceme jednotlivé typy obvodů vypsat samostatně, lze to učinit např. následujícím zápisem. Z výsledku je patrné, že první blok je, díky zesílení většímu než 1, realizován obvodem LP2. Ostatní bloky je možno realizovat obvodem LP1. Poslední sekce je typu LP0, tj. prvního řádu díky lichému řádu celého filtru. Schémata jednotlivých obvodů jsou uvedeny v helpu .

>    seq(ARC_lp[i]['type'],i=1..5);

LP2, LP1, LP1, LP1, LP0

>   

Jiné volby

Stejná operace jako v prvním případě, ale navíc jsou zadány parametry OZ ( A0  a ft ). Ty se (v tomto případě) pouze přepíší do výsledné struktury tabulky a budou brány v úvahu až při analýze filtru.   

>    infolevel[syntfil]:=1:

>    opt_lp_OZ:=table(['C1'=33e-9, 'h0'=1, 'ft'=1e6, 'A0'=1e5]):

>    ARC_lp_OZ:=ARCSynt(lp,opt_lp_OZ):

Pokud na výslednou tabulku hodnot aplikujeme funkci ARCRoundR , dostaneme navíc všecny odpory zaokrouhleny do zvolené řady, v našem případě do řady E24  a potom "speciální řady" E242   vytvořené sériovou nebo paralelní kombinací dvou rezistorů z řady E24 .

>    ARC_lp_OZ_R:=ARCRoundR(ARC_lp_OZ,24);

>    ARC_lp_OZ_R2:=ARCRoundR(ARC_lp_OZ,242);

ARC_lp_OZ_R := TABLE([1 = TABLE([R = .47e4, R3 = .47e4, R2 = .27e4, R1 = .39e4, C1 = .33e-7, ft = .1e7, type = LP2, A0 = .1e6]), 2 = TABLE([R12 = infinity, R = infinity, R3 = 0, C2 = .19365194931504350...
ARC_lp_OZ_R := TABLE([1 = TABLE([R = .47e4, R3 = .47e4, R2 = .27e4, R1 = .39e4, C1 = .33e-7, ft = .1e7, type = LP2, A0 = .1e6]), 2 = TABLE([R12 = infinity, R = infinity, R3 = 0, C2 = .19365194931504350...
ARC_lp_OZ_R := TABLE([1 = TABLE([R = .47e4, R3 = .47e4, R2 = .27e4, R1 = .39e4, C1 = .33e-7, ft = .1e7, type = LP2, A0 = .1e6]), 2 = TABLE([R12 = infinity, R = infinity, R3 = 0, C2 = .19365194931504350...
ARC_lp_OZ_R := TABLE([1 = TABLE([R = .47e4, R3 = .47e4, R2 = .27e4, R1 = .39e4, C1 = .33e-7, ft = .1e7, type = LP2, A0 = .1e6]), 2 = TABLE([R12 = infinity, R = infinity, R3 = 0, C2 = .19365194931504350...
ARC_lp_OZ_R := TABLE([1 = TABLE([R = .47e4, R3 = .47e4, R2 = .27e4, R1 = .39e4, C1 = .33e-7, ft = .1e7, type = LP2, A0 = .1e6]), 2 = TABLE([R12 = infinity, R = infinity, R3 = 0, C2 = .19365194931504350...
ARC_lp_OZ_R := TABLE([1 = TABLE([R = .47e4, R3 = .47e4, R2 = .27e4, R1 = .39e4, C1 = .33e-7, ft = .1e7, type = LP2, A0 = .1e6]), 2 = TABLE([R12 = infinity, R = infinity, R3 = 0, C2 = .19365194931504350...

ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...
ARC_lp_OZ_R2 := TABLE([1 = TABLE([R = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R3 = subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb), R2 = subs(Rout = 2566.,Ra = .390e4,Rb = .750e4,Ra*Rb/(Ra+Rb)),...

Při kombinaci dvou rezistorů je místo pouhé hodnoty uvedena struktura příkazu subs,  kde je jak výsledná hodnota, tak hodnoty obou resistorů a jejich spojení (sériové udává součet a paralelní udává odpovídající vztah).   

>    eval(ARC_lp_OZ_R2[1][R3],1);

subs(Rout = 4810.,Ra = .390e4,Rb = 910.,Ra+Rb)

Pokud se však odkážeme přímo (bez jakéhokoli příkazu) na daný rezistor, dostaneme skutečnou výslednou hodnotu uvedeného spojení. Tím je zajištěno fungování následných příkazů, např. pro výpočet přenosu.

>    ARC_lp_OZ_R2[1][R3];

4810.

>   

Jak na zaokrouhlování jednotlivých odporů?

Výpočet přenosové funkce výsledného filtru, sestavené analýzou jednotlivých sekcí. Jednou s uvažováním ideálních OZ, jednou se zahrnutím reálných paramerů OZ - A0  a ft  a nakonec ještě se zaokrouhlenými hodnotami všech rezistorů. Dále následuje výpočet modulu přenosu a jeho vykreslení.

>    infolevel[syrup]:=1:

>    H_lp_ARC:=MakeH(ARC_lp,p):

>    H_lp_ARC_OZ:=MakeH(ARC_lp_OZ,p):

>    H_lp_ARC_OZ_R:=MakeH(ARC_lp_OZ_R,p):

>    H_lp_ARC_OZ_R2:=MakeH(ARC_lp_OZ_R2,p):

>    mg_lp_ARC:=MagnitudeHdB(H_lp_ARC)(2*Pi*f):

>    mg_lp_ARC_OZ:=MagnitudeHdB(H_lp_ARC_OZ)(2*Pi*f):

>    mg_lp_ARC_OZ_R:=MagnitudeHdB(H_lp_ARC_OZ_R)(2*Pi*f):

>    mg_lp_ARC_OZ_R2:=MagnitudeHdB(H_lp_ARC_OZ_R2)(2*Pi*f):

>    plot([mg_lp_ARC,mg_lp_ARC_OZ,mg_lp_ARC_OZ_R,mg_lp_ARC_OZ_R2],f=0..fs1,color=[red,blue,green,brown]);

Výpočet modulů přenosu pro mez propustného a nepropustného pásma (v ideálním případě musí samozřejmě vyjít jako zadané ap1 , resp. asnew    - kontrola).

>    evalf(subs(f=fp1,mg_lp_ARC)), evalf(subs(f=fp1,mg_lp_ARC_OZ)), evalf(subs(f=fp1,mg_lp_ARC_OZ_R)), evalf(subs(f=fp1,mg_lp_ARC_OZ_R2));

>    evalf(subs(f=fs1,mg_lp_ARC)), evalf(subs(f=fs1,mg_lp_ARC_OZ)), evalf(subs(f=fs1,mg_lp_ARC_OZ_R)), evalf(subs(f=fs1,mg_lp_ARC_OZ_R2));

[Maple Plot]

-3.0000000000000000416, -3.0119378110876865396, -2.6788268521776120690, -2.9702413514187431940

-54.164791466084385600, -54.271926095735654886, -54.127256064412302680, -54.208326090710854768

Detail propustného pásma, ze kterého je patrný vliv jak reálných vlastností použitých OZ, tak vliv zaokrouhlení rezistorů. Zejména zaokrouhlení resitorů do řady E24  vyvolá znatelné chyby přenosu (zelená křivka).   

>    plot([mg_lp_ARC,mg_lp_ARC_OZ,mg_lp_ARC_OZ_R,mg_lp_ARC_OZ_R2],f=0..fp1,color=[red,blue,green,brown]);

[Maple Plot]

>   

Vykreslení modulových charakteristik jednotlivých bloků a v kaskádní struktuře za jednotlivými bloky

>   

Výpočet a vykreslení kmitočtových charakteristik pro "jiné volby"

>