Sztochasztikus rezonancia jelenségének vizsgálata
 Mathematica segítségével

1. Bevezetés

A legtöbb alkalmazásban a zaj jelenléte csökkenti annak használhatóságát, ezért a tervezés célja a annak minél tökéletesebb szűrése. Létezik azonban néhány eset, amikor zaj hozzáadásával a rendszerem átvitele javul. Ezt a jelenséget hívják sztochasztikus rezonanciának. Előfordulása és ennek következményeképpen alkalmazása rendkívűl széleskörű, legfontosabb felhasználási területei az optikai eszközökben, a mesterséges és természetes idegrendszerek vizsgálatában, valamint elektromágneses eszközökben történik.
Ebben a dolgozatomban egy egyszerű jelátvívő eszközben fogom a jelenség hatását vizsgálni.

2. Modellezés

A szotchasztikus rezonancia vizsgálatának legegyszerübb esete az, amikor egy küszöbszinttel rendelkező bistabil rendszert szinuszos jellel és zajjal gerjesztünk. Ha a jelszint önmagában nem elég a stabil állapotok közötti váltáshoz, akkor az állapotváltás sűrűsége nagyban függ a hozzáadott zaj amplitudójától. Ha ez nagyon kicsi, akkor állapotváltás nagyon ritkán és minden rendszer nélkül történik meg, ha ez nagyon nagy, akkor gyakori, de szintén rendszertelen állapotváltozások következnek be, ha azonban a zajszint a megfelelő határértékek közé esik, akkor az állapotváltás nagyjából a jelnek megfelelően történik.
Ennek következményeképpen az adott bemeneti jelemet zaj hozzáadásával erősíthetem, természetesen az adott kimenete jelem zajos lesz, viszont a kimeneti jel több periódusának vizsgálatából a bemenő jelre könnyedén vissza lehet következtetni.
Az átvivő rendszerem legyen egy kétszintű kvantáló, ϕ küszöbértékkel, s(t) bemenő jellel és η(t) zajjal:
y(t) = sign[s(t)+η(t)-ϕ] = ±1
A bemenő jelem legyen: 
a, egy (Subscript[T, s]) periódusidejű, A amplitudójú szinusz
b, bármilyen más, folytonos, periódikus és minden pontjában differenciálható függvény (a feltételek egyrészt a valós folyamatokat, másrészt a modellezés szükségszerűségeit tükrözik.)
A zajom legyen bármilyen, a Mathematicában már leírt, két változóval jellemezhető eloszlással rendelkező valószínűségi változó.

A modellezésem célja a kimenő jel várható értékéről információk szerzése, valamint eszközöket adni a felhasználó kezébe, hogy az ideális tulajdonságú hozzáadott zajt megtalálhassa. Ezt legjobban a várható jel-zaj viszony kiszámolásával és ábrázolásával lehet meghatározni. A várható érték vizsgálata a gyakorlati alkalmazás miatt azért elégséges, mert jelen körülmények esetén az elsődleges cél nem az átvitel sávszélessége (vagyis a többszöri jelátvitel elkerülése), hanem az átvitel realizálhatósága. 

A program használatához segitség:
- a jel- illetve zajváltoztatásban Mathematica parancsok használata szükséges felhasználói szinten is, itt a hibás megadás a program lefagyását, végtelen ciklusba kerülését okozhatja, amit szélsőséges esetben csak a program Kerneléből való kilépéssel lehet megoldani
- a zaj megadásánál ügyelni kell arra, hogy a megadott két tényező értelmezhető legyen a Mathematica számára és az adott eloszlás szabályait betartsa
- a számolási pontosság megadásánál ügyelni kell arra, hogy a túlzott pontosság nagyon hosszú számolási időket eredményezhet, a nagyon kicsi pedig értelemszerűen pontatlan (esetleg hamis) eredményeket hozhat

3. A Mathematica használatával

A szamitasokhoz szuksegem van az alabbi csomagokra, illetve pár környezeti változót definiálok:

<< Statistics`ContinuousDistributions`
<< Graphics`Animation`
<< NumericalMath`ListIntegrate`
<< Calculus`Integration`
$TextStyle  =  {FontFamily ->  "Times", 
          FontSize -> 12, 
          FontWeight -> "Bold"};
Off[General::spell];

Alapdefinicíók:

Definiálom az átviteli rendszeremet, illetve a sebességugrás segédfüggvényt:

y[t_, σ_] := 
      N[ExpectedValue[Sign[A*Jel[t] + σ*x - ϕ], Zaj[a, b], 
          x]]
SebessegUgras[x_] := x*Boole[x   >  0]

Alapértékeket adok a zajnak és a bemenő jelnek:

Jel[t_] := Sin[2*Pi*t/T]
T = 10;
A  =  1;
ϕ = 1;
Zaj[a_, b_] := NormalDistribution[a, b]
a  =  0;
b  =  1;

Alapdefinicíók

Definiálom a zaj eloszlásfüggvényét, a jel időfüggvényét, illetve a konstansokat kiírató modulokat:

JelAbra[T_, A_, Jel_] :=  
        Module[
{t}, 
Plot[
              A*Jel[t], {t, -2 T, 2  T}, 
              AxesLabel -> {"t", "Jel (t)"}, Frame -> True, 
              FrameLabel -> "A bemenő jel az id\
ő függvényében",  
              ImageSize -> 
                600];
];

    
ZajAbra[a_, b_] :=  
        Module[
{t}, 
 Plot[
              PDF[Zaj[a, b], t], {t, -5, 5}, Frame -> True, 
              FrameLabel -> "A zaj eloszlásfüggv\
énye",  
              ImageSize -> 
                600];
];

    
\(\(Konstansok[Tx_, Ax_, ϕx_, ax_, bx_] := 
        Module[
{}, 
Print["A konstansok pillanatnyi értékei:"]; 
Print[]; 
Print["A jel periódusideje:"]\ ; 
Print[
            Tx]; 
Print["A jel amplitója:"]\ ; 
Print[
            Ax]; 
Print["A kvantáló küszöbszintje:"]\ ; 
Print[ϕx]; 
Print["A zaj a jellemzoje:"]\ ; 
Print[
            ax]; 
Print["A zaj b jellemzoje:"]\ ; 
Print[bx];
];\)\)

Definialom a már beállított értékeken változtató modulokat:

ClearAll[Kuszobszint];
\(\(\(Kuszobszint[ksz_] := 
        Module[
{}, 
\(ksz\  = 
              Input["Add meg az új küszöbszintet!"];\)
];\)\(
\)
    \)\)
\(\(\(JelModosit[Aki_, Tki_] := 
        Module[
{}, 
Evaluate[
            Input["Add meg az új jelet! pl.: Jel[t_]:=Cos[2*Pi*t/T]"]]; 
Aki = 
            Input["Add meg az új jelamplitudót!"]; 
Tki\  = 
            Input["Add meg az új periódusidőt!"];
];\)\(
\)
    \)\)
\(\(ZajModosit[aki_, bki_] := 
        Module[
{}, 
Evaluate[
            Input["Add meg az új zajt! pl.: Zaj[a_,b_]:=UniformDistribution[a,b]"]]; 
aki = 
            Input["Add meg a zaj a jellemzojet!"]; 
bki\  = Input["Add meg a zaj b jellemzojet!"];
];\)\)

Definiálom az elemző modulokat:

\(VarhatoKimenet[Tbe_, Abe_, ϕbe_] := 
        Module[
{t, n, zajk, zajv, 
            lepesszam}, 
zajk = 
            Input["Add meg a zaj kezdeti amplitudojat!"]; 
zajv = 
            Input["Add meg a zaj vegso amplitudojat!"]; 
lepesszam = 
            Input["Add meg az abrazolas lepesszamat!"]; 
Animate[
            Plot[y[t, n], {t, \(-Tbe\), Tbe}, 
              PlotRange -> {\(-ϕbe\), A}, 
              AxesLabel -> {"t", "E(Jel (t))"}, 
              Frame -> True, 
              FrameLabel -> "A varhato kimenő jel az idő függvényében", \ 
              ImageSize -> 600], {n, zajk, 
              zajv, \((zajv - zajk)\)/
                lepesszam}]
];\)
SNR[Tbe_, Abe_, ϕbe_]:=Module[
{n1, n2, zajk, zajv, lepesszam},
n1 = 
              Input["Add meg az elso pontossagi tenyezot! Ajanlott ertek: \
<30 "];
n2 = 
              Input["Add meg a masodik pontossagi tenyezot! Ajanlott ertek: \
<30 "];
zajk = 
              Input["Add meg a zaj kezdeti amplitudojat!"];
zajv = 
              Input["Add meg a zaj vegso amplitudojat!"];
lepesszam = 
              Input["Add meg az abrazolas lepesszamat! Ajanlott ertek: \
<10"];

Jelerteklista[σ_, 
                n1_] := y[#, σ] & /@ Range[0, Tbe, (Tbe/n1)];   
Zajerteklista  =  
              Range[zajk, zajv, (zajv - zajk)/lepesszam];   
HasznosZajlista   =  Boole[(# + ϕbe) > 0] & /@ (Min[Jelerteklista[#, n1]] & /@  
                    Zajerteklista);   
Hasznoszajerteklista  =  
              Select[HasznosZajlista*Zajerteklista, # > 0 &];   
Zajteljesitmeny [σ_] = (σ^2)*NIntegrate[
                  (t^2)*PDF[Zaj[a, b], 
                      t], {t, -∞, ∞}];   
Jelkozepertek[σ_, n1_] := 
              (1/Tbe) ListIntegrate[Jelerteklista[σ, n1], (Tbe/n1)];   
Jelteljesitmeny[σ_, n1_, 
                n2_] := ((1 )/Tbe) 
                ListIntegrate[SebessegUgras[(((y[#, σ] - Jelkozepertek[σ, n1]))^2)] & /@ Range[0, Tbe, (Tbe/n2)], (Tbe/n2)];   
SNRlista  =  List[#, (Jelteljesitmeny[#, n1, n2]/Zajteljesitmeny [#])] & /@  
                Hasznoszajerteklista;   
If [
              Length[Hasznoszajerteklista]   >  
                0, 
{ListPlot[SNRlista , 
                  AxesLabel -> {"σ", "SNR(σ)"}, 
                  Frame -> True, 
                  FrameLabel -> "SNR a zaj \
függvényében", ImageSize -> 600], 
                Print["A javasolt zajamplitudó:"],  
                Print[Min[Hasznoszajerteklista]], }, 
              Print["A megadott legnagyobb zajamplitudo sem elég \
nagy."]];    
]
Null

Definiálom a menüt üzemeltető modult:

ClearAll[Fomenu];
\(\(Fomenu[byebe_, Tbe_, Abe_, ϕbe_, abe_, bbe_, Jelbe_, byeki_, 
          Tki_, Aki_, ϕki_, aki_, bki_, Jelki_] := 
        Module[
{char}, 
byeki\  = \ 
            byebe; 
Tki = \ 
            Tbe; 
Aki\  = \ 
            Abe; 
ϕki\  = \ ϕbe; 
aki\  = \ abe; 
bki\  = \ 
            bbe; 
Jelki\  = \ 
            Jelbe; 

char\  = 
            Input["1: Konstansok lekerdezese, 2: Jel idofuggvenyenek kirajzolasa, 3: Zaj eloszlasfuggvenyenek kirajzolasa, 4: Kuszobszint megvaltoztatasa, 5: Jel megvaltoztatasa, 6: Zaj megvaltoztatasa, 7: A kimeno jel varhato erteke a zaj fuggvenyeben, 8: Jel-Zaj viszony elemzese 0: Kilepes"]; 

Switch[
            char, 
1, \ 
            Konstansok[Tbe, Abe, ϕbe, abe, bbe], 
2, \ 
            JelAbra[Tbe, Abe, Jelbe], 
3, \ 
            ZajAbra[abe, bbe], 
4, \ {ClearAll[ϕki], 
              Kuszobszint[ϕki]}, 
5, \ {ClearAll[Aki, 
                Tki], JelModosit[Aki, 
                Tki]}, 
6, \ {ClearAll[aki, bki], 
              ZajModosit[aki, bki]}, 
7, \ 
            VarhatoKimenet[Tbe, Abe, ϕbe], 
8, \ 
            SNR[Tbe, 
              Abe, ϕbe], 
0, \ {ClearAll[byeki], 
              byeki\  = \ 
                1}
];
];\)\)

Elemzés:

Elindítom az elemzést:

bye =  0;
While[
      bye  ==  
        0, 
{ClearAll[t, byek, Tk, Ak, ϕk, ak, bk,  
          Jelk], 
Fomenu[bye, T, A, ϕ, a, b, Jel,  
          byek, Tk, Ak, ϕk, ak, bk, Jelk], 
bye  =  
          byek, 
T  =  Tk, 
A  =  
          Ak, 
ϕ  =  ϕk, 
a  =  ak, 
b  =  bk, 
}]

4. Irodalom:

1. http://en.wikipedia.org/wiki/Stochastic_resonance (2006.novemberi állapot)
2. Luca Gammaitoni, Peter Hanggi. Peter Jung, Fabio Marchesoni: Stochastic Resonance, Review of Modern Physics,Vol.70 (1)  p.223-287 (1998)
3. Francois Chapeau-Blondeau and David Rousseau: Noise Improvments in  Stochastic Resonance: From  Signal Amplification to Optimal Detection, Fluctuation and Noise Letters, Vol.2, No. 3  L221-233 (2002)