Pásmová zádrž

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. 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  (všimněme si, že kmitočety včech nul jsou shodné, což je charakteristické pro Čebyševovu nebo Butterworthovu paroximaci) .

>    infolevel[syntfil]:=2:

>    bs:=NLP2BS(fp4,f_p4,Gc4,poles4):

H0 = 32.042940

omega_0 = 12566.37061, Q =  0.11835, omega_n = 12566.37061

omega_0 =  4527.00337, Q =  2.74405, omega_n = 12566.37061

omega_0 = 34882.60500, Q =  2.74405, omega_n = 12566.37061

omega_0 =  6162.29847, Q = 14.38686, omega_n = 12566.37061

omega_0 = 25625.77439, Q = 14.38686, omega_n = 12566.37061

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(bs);

TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...
TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...
TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...
TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...
TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...
TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...
TABLE([1 = TABLE([Q = 2.7440503785535098433, omega_n = 12566.370614359172954, omega_0 = 4527.0033702571220583]), 2 = TABLE([Q = 14.386858668950984595, omega_n = 12566.370614359172954, omega_0 = 25625.7...

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

>    H_bs:=MakeH(bs,p);

H_bs := 1.0000000000000000001*(p^2+157913670.41742973791)^5/(p^2+1649.7522806572787826*p+20493759.514319341749)/(p^2+1781.1931693222605243*p+656680313.04311598269)/(p^2+428.32828318954762860*p+37973922...
H_bs := 1.0000000000000000001*(p^2+157913670.41742973791)^5/(p^2+1649.7522806572787826*p+20493759.514319341749)/(p^2+1781.1931693222605243*p+656680313.04311598269)/(p^2+428.32828318954762860*p+37973922...

>    mg_bs:=MagnitudeHdB(H_bs)(2*Pi*f):

>    plot(mg_bs,f=0..5e3);

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é ap4 , resp. asnew    - kontrola).

>    evalf(subs(f=fp4,mg_bs));

>    evalf(subs(f=fs4,mg_bs));

>    evalf(subs(f=f_s4,mg_bs));

Pro kmtočet f_p4   vyjde vyšší hodnota útlumu, díky nesymetrickému zadání tolerančního shématu filtru.

>    evalf(subs(f=f_p4,mg_bs));

[Maple Plot]

-2.9999999999999991246

-31.892733677009992744

-45.766402883010070650

-2.9999999999999998482

Synéza zapojení jednotlivých bloků - výběr obvodů a výpočet hodnot součástek. Parametry funkce ARCSynt  (proměnná opt_bs )  lze ovlivňovat návrhový algoritmus. Lze volit velikosti některých součástek obvodu (většinou 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 , dále volíme velikost zasílení celého filtru a hodnotu traznitního kmitočtu operačních zesilovačů   ft , jelikož je pro výsledný typ zapojení (ES1) požadována pro výpočet korekční kapacity Ck .  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. Pokud "převýšení" vykazuje většina bloků struktury filtru, je výpočet u filtrů s vyšším stupněm numericky velice náročný a tím spotřebuje i hodně strojového času.

>    infolevel[syntfil]:=3:

>    opt_bs_OZ:=table(['h0'=1, 'C1'=33e-9, 'ft'=5e6]);

>    ARC_bs_OZ:=ARCSynt(bs,opt_bs_OZ):

opt_bs_OZ := TABLE([h0 = 1, C1 = .33e-7, ft = .5e7])

ARCBlock:

Frequencies of modulus peaks of particular blocks: [[1, 689.05730], [2, 4086.5316], [3, 978.82510], [4, 5805.0326]].

Frequencies of modulus peaks after particular blocks: [[1, [689.05730]], [2, [683.39864, 4089.3754]], [3, [736.84571, 4091.9225, 972.97861]], [4, [727.15320, 4114.3869, 972.19827, 5500.9037]], [5, [690.34015, 4124.2580, 969.87139, 5794.2450]]].

ARCBlock:

Amplification of particular blocks h0 = [0.052840, 2.207483, 0.160162, 9.803516, 5.460081].

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

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

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

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

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

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

ARCSynt: Used circuit types in particular blocks: [ES1, ES1, ES1, ES1, ES1].

`block `(1), [R5 = 6693.8, R3 = .34762e6, R2 = 18368., R1 = 16162., C1 = .33e-7, Ck = .19021e-10, ft = .5e7, type = ES1, R4 = .12668e6, A0 = Float(infinity)]

`block `(2), [R5 = 1182.5, R3 = 7706.9, R2 = 17013., R1 = 2183.8, C1 = .33e-7, Ck = .10767e-9, ft = .5e7, type = ES1, R4 = 535.69, A0 = Float(infinity)]

`block `(3), [R5 = 4917.5, R3 = .44172e6, R2 = 70747., R1 = 7374.7, C1 = .33e-7, Ck = .25892e-10, ft = .5e7, type = ES1, R4 = 30703., A0 = Float(infinity)]

`block `(4), [R5 = 868.71, R3 = 243.16, R2 = 2383.8, R1 = 337.46, C1 = .33e-7, Ck = .14657e-9, ft = .5e7, type = ES1, R4 = 88.613, A0 = Float(infinity)]

`block `(5), [R5 = 2411.4, R3 = 52.271, R2 = 285.40, R1 = 6.1010, C1 = .33e-7, Ck = .52800e-10, ft = .5e7, type = ES1, R4 = 441.65, A0 = Float(infinity)]

`type=ARC`

Z výpisu funkce ARC_BS  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 všechny sekce jsou realizovány obvodem ES1, jelikož se jedná o pásmovou zádrž, tedy filtr s přenosovou funkcí eliptického typu (obsahující póly i nuly přenosu).

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

ES1, ES1, ES1, ES1, ES1

>   

Jiné volby

Stejná operace jako v prvním případě, ale zde jsou uvažovány ideální vlasrnosti OZ, tudíž honota kompenzačního kapacitoru vyjde nulová. Potom je však do druhé struktury zapsaná reálná hodnota tranzitního kmitočetu ft , která se uplatní při analýze filtru.   

>    infolevel[syntfil]:=1:

>    ARC_bs_id:=ARCSynt(bs,table(['h0'=1, 'C1'=33e-9])):

>    ARC_bs_id_ft:=ARCSynt(bs,table(['h0'=1, 'C1'=33e-9])):

>    for i from 1 to 5 do ARC_bs_id_ft[i]['ft']:=1e6: end do:

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Warning, ARCSyntES1: 2nd argument[ft] should be entered for proper design of ES1 circuit

Výpočet přenosové funkce výsledných struktur filtrů, sestavené analýzou jednotlivých sekcí. Dále následuje výpočet modulů těchto přenosů a jejich vykreslení.

>    H_bs_ARC_OZ:=MakeH(ARC_bs_OZ,p):

>    H_bs_ARC_id:=MakeH(ARC_bs_id,p):

>    H_bs_ARC_id_ft:=MakeH(ARC_bs_id_ft,p):

>    mg_bs_ARC_OZ:=MagnitudeHdB(H_bs_ARC_OZ)(2*Pi*f):

>    mg_bs_ARC_id:=MagnitudeHdB(H_bs_ARC_id)(2*Pi*f):

>    mg_bs_ARC_id_ft:=MagnitudeHdB(H_bs_ARC_id_ft)(2*Pi*f):

>    plot([mg_bs_ARC_OZ,mg_bs_ARC_id,mg_bs_ARC_id_ft],f=0..5e3,color=[blue,red,green]);

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

>    evalf(subs(f=fp4,mg_bs_ARC_id)), evalf(subs(f=fp4,mg_bs_ARC_OZ)), evalf(subs(f=fp4,mg_bs_ARC_id_ft));

>    evalf(subs(f=fs4,mg_bs_ARC_id)), evalf(subs(f=fs4,mg_bs_ARC_OZ)), evalf(subs(f=fs4,mg_bs_ARC_id_ft));

>    evalf(subs(f=f_s4,mg_bs_ARC_id)), evalf(subs(f=f_s4,mg_bs_ARC_OZ)), evalf(subs(f=f_s4,mg_bs_ARC_id_ft));

Pro kmtočet f_p4   vyjde vyšší hodnota útlumu, díky nesymetrickému zadání tolerančního shématu filtru.

>    evalf(subs(f=f_p4,mg_bs_ARC_id)), evalf(subs(f=f_p4,mg_bs_ARC_OZ)), evalf(subs(f=f_p4,mg_bs_ARC_id_ft));

[Maple Plot]

-3.0000000000000152266, -1.7056138515244602529, 8.6009675954647746454

-31.892733677009993548, -29.429322903110171308, -17.850300452695305513

-45.766402883010068268, -40.259914397059898454, -27.589049889279979376

-3.0000000000000058420, .50344151652079437616, 14.214677686590599788

Detail levé části propustného pásma, kde je dobře vidět vliv kompenzačních kapacitorů (modrá křivka) oproti zapojení bez těchto kapacitorů, ale s uvažováním konečného tranzitního kmitočtu operačních zesilovačů (zelená křivka). Červená křivka pak ukazuje zapojení s ideálními OZ (samozřejmě bez kompenzačních kapacitorů). Dále následuje vykreslení části nepropustného pásma.

>    plot([mg_bs_ARC_OZ,mg_bs_ARC_id,mg_bs_ARC_id_ft],f=0..fp4,color=[blue,red,green]);

>    plot([mg_bs_ARC_OZ,mg_bs_ARC_id,mg_bs_ARC_id_ft],f=1800..2200,M=-120..-220,color=[blue,red,green]);

[Maple Plot]

[Maple Plot]

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 E192 .

>    ARC_bs_OZ_R:=ARCRoundR(ARC_bs_OZ,192);

ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...
ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...
ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...
ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...
ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...
ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...
ARC_bs_OZ_R := TABLE([1 = TABLE([R5 = .673e4, R3 = .348e6, R2 = .184e5, R1 = .162e5, C1 = .33e-7, Ck = .19021067043530393193e-10, ft = .5e7, type = ES1, R4 = .127e6, A0 = infinity]), 2 = TABLE([R5 = .1...

Zde je vidět vliv zaokrouhlení hodnot rezistorů oproti případu s přesnými hodnotami resistorů (ale se zahrnutím vlivu tranzitního kmitočtu zesilovačů).

>    H_bs_ARC_OZ_R:=MakeH(ARC_bs_OZ_R,p):

>    mg_bs_ARC_OZ_R:=MagnitudeHdB(H_bs_ARC_OZ_R)(2*Pi*f):

>    plot([mg_bs_ARC_OZ,mg_bs_ARC_OZ_R],f=0..fp4,color=[blue,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".

>