<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JanMaka</id>
	<title>Brain-wiki - Wkład użytkownika [pl]</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JanMaka"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php/Specjalna:Wk%C5%82ad/JanMaka"/>
	<updated>2026-04-07T19:43:52Z</updated>
	<subtitle>Wkład użytkownika</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7898</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7898"/>
		<updated>2018-11-08T12:54:13Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Kolokwia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w następujących terminach:&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  20 listopada 2017, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[https://drive.google.com/drive/folders/1bvTAZuHfJIGBn1ZbSbxvNXYmNoDjmnvk?usp=sharing Pliki związane z kolokwium ]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium II: 29 stycznia 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
&amp;lt;!--[https://drive.google.com/open?id=1ltlYSf2wfTYpf189jcWZNeTrc8Oomjqm notebooki i sygnały do kolokwium II]--&amp;gt;&lt;br /&gt;
* '''Kolokwium poprawkowe: 20 lutego 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[https://drive.google.com/drive/folders/0B7k6Z_ViZid5ZXNac0swalRuMkk?usp=sharing Pliki związane z kolokwium ]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2018'''. Za opóźnienia będą odejmowane 2pkt/tydzień&lt;br /&gt;
&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe6| Detekcja wrzecion snu ]] należy oddać do końca ferii zimowych, czyli do 16 lutego.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Praca w domu ===&lt;br /&gt;
Do większości  zajęć są przygotowane skrypty w jupyter-notebook.  Zawierają one opisy teoretyczne i fragmenty kodu. &lt;br /&gt;
&lt;br /&gt;
* Zadaniem studentów będzie '''przeczytanie ze zrozumieniem''' skryptu oraz '''uzupełnienie kodów w zadaniach'''. &lt;br /&gt;
* Wypełnione skrypty należy przesyłać przed zajęciami do prowadzącego ćwiczenia w danej grupie. &lt;br /&gt;
* To co się liczy to '''próba samodzielnego rozwiązania''' zadania, lub '''sformułowanie konkretnego pytania'''  na temat zadania, które jest niezrozumiałe w notebooku.&lt;br /&gt;
* Rozwiązania i wątpliwości będą omawiane w trakcie zajęć.&lt;br /&gt;
&lt;br /&gt;
Grupa Jarosława Żygierewicza wysyła notebooki na adres:  jarekz@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
Grupa Jana Mąki wysyła notebooki na adres: jmaka@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 40) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [20–24) pkt: 3.0 (dst)&lt;br /&gt;
# [24–28) pkt: 3.5 (dst+)&lt;br /&gt;
# [28–32) pkt: 4.0 (db)&lt;br /&gt;
# [32–36) pkt: 4.5 (db+)&lt;br /&gt;
# [36–40] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7441</id>
		<title>Analiza sygnałów - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7441"/>
		<updated>2018-01-17T09:36:27Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#[[Systemy liniowe niezmiennicze w czasie | Systemy liniowe niezmiennicze w czasie]]&lt;br /&gt;
[[Ćwiczenia 8|Filtrowanie obrazów]]&lt;br /&gt;
[[Ćwiczenia 9|Analiza czas-częstość]]&lt;br /&gt;
[[Ćwiczenia 10|Analiza czas-częstość &amp;amp;mdash; STFT i transformata falkowa]]&lt;br /&gt;
[[Ćwiczenia 11|Analiza czas-częstość &amp;amp;mdash; reprezentacje energetyczne]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[ZasadyZaliczenia|Zasady zaliczenia ćwiczeń]]&lt;br /&gt;
&lt;br /&gt;
#[[Ćwiczenia 1|Sygnały]]  [https://drive.google.com/file/d/0B7k6Z_ViZid5dXdKdVExNS1XZlE/view?usp=sharing notebook1]&amp;lt;!-- -- wstęp, generacja sygnałów testowych, aliasing, przypomnienie Pythona, wprowadzenie Svaroga; jak wczytać do Svaroga z Pythona i w drugą stronę --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 1.1|Sygnały jako wektory]] [https://drive.google.com/open?id=0B7k6Z_ViZid5WlU2WHVlLVZhMDg notebook2]&lt;br /&gt;
#[[Ćwiczenia 2|Transformata Fouriera]]  [https://drive.google.com/open?id=0B7k6Z_ViZid5RmxEV0N0UHpuT2c notebook3]&lt;br /&gt;
#[[Ćwiczenia 2_2|Transformata Fouriera cd]] [https://drive.google.com/open?id=0B7k6Z_ViZid5cndHQW1IdW1GeFk notebook4]&lt;br /&gt;
#[[Ćwiczenia 3|Okienkowanie sygnału i transformata Fouriera]] [https://drive.google.com/open?id=0B7k6Z_ViZid5OGstTnRyQUVYUUU notebook5]&lt;br /&gt;
#[[Nieparametryczne widmo mocy |Estymacja widma mocy w oparciu o transformatę Fouriera]] [https://drive.google.com/open?id=0B7k6Z_ViZid5amtXVV9JVFdBTmM  notebook6]&lt;br /&gt;
#[[Ćwiczenia 4|Funkcja autokorelacji]] [https://drive.google.com/open?id=0B7k6Z_ViZid5M1JRaVBuQzJHdUk notebook7] i [[Ćwiczenia 5|Procesy AR]] [https://drive.google.com/open?id=0BzwQ_Lscn8yDMkt3UUtMODhxSU0 notebook7_1]&lt;br /&gt;
#[[Ćwiczenia 6|Filtry I]] &amp;lt;!-- w Pythonie i w Svarogu --&amp;gt; [https://drive.google.com/open?id=0BzwQ_Lscn8yDc05JdF9CS2JUMDQ notebook8] (ten notebook obejmuje tematy 8 i 9 z wiki)&lt;br /&gt;
#[[Ćwiczenia 7|Filtry II]] &amp;lt;!-- oglądanie charakterystyk filtrów, ogładanie widma sygnałów przefiltrowanych, efektywność filtrów, przesuwanie fazy --&amp;gt;&lt;br /&gt;
#[[AS cwiczeniaTF|Metody czas-częstość]] STFT i falki: [https://drive.google.com/open?id=0BzwQ_Lscn8yDMnRSZWpoSnZqZ2c notebook 9] [https://drive.google.com/open?id=0BzwQ_Lscn8yDdUlLVXp1XzF0elE notebook 10]&lt;br /&gt;
#[[AS cwiczenia ICA| ICA]] &amp;lt;!-- montaże, ICA --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia DTF| DTF]] &amp;lt;!-- wielokanałowy AR , DTF --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--#[[AS cwiczeniaMP|Matching pursuit]] &amp;lt;!-- MP w Svarogu, zabawa parametrami dekompozycji, zabawa filtrowaniem map w Svarogu, postprocessing w Pythonie &lt;br /&gt;
&lt;br /&gt;
# Uśrednianie gęstości energii vs gęstość energii uśrednionego sygnału: symulacje, ERD/S&lt;br /&gt;
#[[Ćwiczenia UNIFIKACJA]] &amp;lt;!-- ostatnie ćwiczenia na ktrych porównujemy na tych samych sygnałach rzeczywistych i symulowanych działanie różnych metod -- MMP vs DTF vs ICA, STFT vs WT vs MP itp, potrzebne fajne przykłady --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
autorzy: Jarosław Żygierewicz, Maciej Kamiński, Magdalena Zieleniewska, wersja z notebookami Jan Mąka&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== INFORMACJE DODATKOWE ==&lt;br /&gt;
Materiały 2014/2015&lt;br /&gt;
# [[kolokwia2013_2014|Informacje o zaliczeniu ćwiczeń]] &lt;br /&gt;
# [[kolokwia2014_2015_kol1|Zagadnienia przygotowawcze do 1 kolokwium]] &lt;br /&gt;
# [[Projekt2014|Projekt zaliczeniowy]]&lt;br /&gt;
&lt;br /&gt;
Materiały 2013/2014&lt;br /&gt;
# [[Plik:Zadania_powtorzeniowe.pdf|Zadania powtorzeniowe do 2 kolokwium]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7369</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7369"/>
		<updated>2017-11-20T08:56:14Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Kolokwia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w następujących terminach:&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  20 listopada 2017, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/drive/folders/1bvTAZuHfJIGBn1ZbSbxvNXYmNoDjmnvk?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium II: 29 stycznia 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium poprawkowe: 20 lutego 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5ZXNac0swalRuMkk?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2017'''. Za opóźnienia będą odejmowane 2pkt/tydzień&lt;br /&gt;
&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe6| Detekcja wrzecion snu ]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Praca w domu ===&lt;br /&gt;
Do większości  zajęć są przygotowane skrypty w jupyter-notebook.  Zawierają one opisy teoretyczne i fragmenty kodu. &lt;br /&gt;
&lt;br /&gt;
* Zadaniem studentów będzie '''przeczytanie ze zrozumieniem''' skryptu oraz '''uzupełnienie kodów w zadaniach'''. &lt;br /&gt;
* Wypełnione skrypty należy przesyłać przed zajęciami do prowadzącego ćwiczenia w danej grupie. &lt;br /&gt;
* To co się liczy to '''próba samodzielnego rozwiązania''' zadania, lub '''sformułowanie konkretnego pytania'''  na temat zadania, które jest niezrozumiałe w notebooku.&lt;br /&gt;
* Rozwiązania i wątpliwości będą omawiane w trakcie zajęć.&lt;br /&gt;
&lt;br /&gt;
Grupa Jarosława Żygierewicza wysyła notebooki na adres:  jarekz@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
Grupa Jana Mąki wysyła notebooki na adres: jmaka@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 50) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [25–30) pkt: 3.0 (dst)&lt;br /&gt;
# [30–35) pkt: 3.5 (dst+)&lt;br /&gt;
# [35–40) pkt: 4.0 (db)&lt;br /&gt;
# [40–45) pkt: 4.5 (db+)&lt;br /&gt;
# [45–50] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7273</id>
		<title>Analiza sygnałów - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7273"/>
		<updated>2017-10-17T10:35:53Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#[[Systemy liniowe niezmiennicze w czasie | Systemy liniowe niezmiennicze w czasie]]&lt;br /&gt;
[[Ćwiczenia 8|Filtrowanie obrazów]]&lt;br /&gt;
[[Ćwiczenia 9|Analiza czas-częstość]]&lt;br /&gt;
[[Ćwiczenia 10|Analiza czas-częstość &amp;amp;mdash; STFT i transformata falkowa]]&lt;br /&gt;
[[Ćwiczenia 11|Analiza czas-częstość &amp;amp;mdash; reprezentacje energetyczne]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[ZasadyZaliczenia|Zasady zaliczenia ćwiczeń]]&lt;br /&gt;
&lt;br /&gt;
#[[Ćwiczenia 1|Sygnały]]  [https://drive.google.com/file/d/0B7k6Z_ViZid5dXdKdVExNS1XZlE/view?usp=sharing notebook1]&amp;lt;!-- -- wstęp, generacja sygnałów testowych, aliasing, przypomnienie Pythona, wprowadzenie Svaroga; jak wczytać do Svaroga z Pythona i w drugą stronę --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 1.1|Sygnały jako wektory]] [https://drive.google.com/open?id=0B7k6Z_ViZid5WlU2WHVlLVZhMDg notebook2]&lt;br /&gt;
#[[Ćwiczenia 2|Transformata Fouriera]]  [https://drive.google.com/open?id=0B7k6Z_ViZid5RmxEV0N0UHpuT2c notebook3]&lt;br /&gt;
#[[Ćwiczenia 2_2|Transformata Fouriera cd]] [https://drive.google.com/open?id=0B7k6Z_ViZid5cndHQW1IdW1GeFk notebook4]&lt;br /&gt;
#[[Ćwiczenia 3|Okienkowanie sygnału i transformata Fouriera]]&lt;br /&gt;
#[[Nieparametryczne widmo mocy |Estymacja widma mocy w oparciu o transformatę Fouriera]] &amp;lt;!-- widmo średniej vs. średnie widmo --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 4|Funkcja autokorelacji]]&lt;br /&gt;
#[[Ćwiczenia 5|Procesy AR]] &amp;lt;!-- AR w Pyhonie + DTF w Svarogu (MK) --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 6|Filtry I]] &amp;lt;!-- w Pythonie i w Svarogu --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 7|Filtry II]] &amp;lt;!-- oglądanie charakterystyk filtrów, ogładanie widma sygnałów przefiltrowanych, efektywność filtrów, przesuwanie fazy --&amp;gt;&lt;br /&gt;
#[[AS cwiczeniaTF|Metody czas-częstość]] &amp;lt;!-- STFT i falki --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia ICA| ICA]] &amp;lt;!-- montaże, ICA --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia DTF| DTF]] &amp;lt;!-- wielokanałowy AR , DTF --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--#[[AS cwiczeniaMP|Matching pursuit]] &amp;lt;!-- MP w Svarogu, zabawa parametrami dekompozycji, zabawa filtrowaniem map w Svarogu, postprocessing w Pythonie &lt;br /&gt;
&lt;br /&gt;
# Uśrednianie gęstości energii vs gęstość energii uśrednionego sygnału: symulacje, ERD/S&lt;br /&gt;
#[[Ćwiczenia UNIFIKACJA]] &amp;lt;!-- ostatnie ćwiczenia na ktrych porównujemy na tych samych sygnałach rzeczywistych i symulowanych działanie różnych metod -- MMP vs DTF vs ICA, STFT vs WT vs MP itp, potrzebne fajne przykłady --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
autorzy: Jarosław Żygierewicz, Maciej Kamiński, Magdalena Zieleniewska&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== INFORMACJE DODATKOWE ==&lt;br /&gt;
Materiały 2014/2015&lt;br /&gt;
# [[kolokwia2013_2014|Informacje o zaliczeniu ćwiczeń]] &lt;br /&gt;
# [[kolokwia2014_2015_kol1|Zagadnienia przygotowawcze do 1 kolokwium]] &lt;br /&gt;
# [[Projekt2014|Projekt zaliczeniowy]]&lt;br /&gt;
&lt;br /&gt;
Materiały 2013/2014&lt;br /&gt;
# [[Plik:Zadania_powtorzeniowe.pdf|Zadania powtorzeniowe do 2 kolokwium]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7222</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7222"/>
		<updated>2017-10-04T07:52:23Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Praca w domu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w następujących terminach:&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  20 listopada 2017, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
* '''Kolokwium II: 29 stycznia 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5bXZaNGNsUVlwSk0?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium poprawkowe: 20 lutego 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5ZXNac0swalRuMkk?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2016'''. Dokładniejsze terminy zaliczenia przekażą poszczególni prowadzący grup.&lt;br /&gt;
&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe6| Detekcja wrzecion snu ]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Praca w domu ===&lt;br /&gt;
Do większości  zajęć są przygotowane skrypty w jupyter-notebook.  Zawierają one opisy teoretyczne i fragmenty kodu. &lt;br /&gt;
&lt;br /&gt;
* Zadaniem studentów będzie '''przeczytanie ze zrozumieniem''' skryptu oraz '''uzupełnienie kodów w zadaniach'''. &lt;br /&gt;
* Wypełnione skrypty należy przesyłać przed zajęciami do prowadzącego ćwiczenia w danej grupie. &lt;br /&gt;
* To co się liczy to '''próba samodzielnego rozwiązania''' zadania, lub '''sformułowanie konkretnego pytania'''  na temat zadania, które jest niezrozumiałe w notebooku.&lt;br /&gt;
* Rozwiązania i wątpliwości będą omawiane w trakcie zajęć.&lt;br /&gt;
&lt;br /&gt;
Grupa Jarosława Żygierewicza wysyła notebooki na adres:  jarekz@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
Grupa Jana Mąki wysyła notebooki na adres: jmaka@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 50) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [25–30) pkt: 3.0 (dst)&lt;br /&gt;
# [30–35) pkt: 3.5 (dst+)&lt;br /&gt;
# [35–40) pkt: 4.0 (db)&lt;br /&gt;
# [40–45) pkt: 4.5 (db+)&lt;br /&gt;
# [45–50] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7221</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=7221"/>
		<updated>2017-10-04T07:52:10Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Praca w domu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w następujących terminach:&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  20 listopada 2017, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
* '''Kolokwium II: 29 stycznia 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5bXZaNGNsUVlwSk0?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium poprawkowe: 20 lutego 2018, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5ZXNac0swalRuMkk?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2016'''. Dokładniejsze terminy zaliczenia przekażą poszczególni prowadzący grup.&lt;br /&gt;
&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe6| Detekcja wrzecion snu ]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Praca w domu ===&lt;br /&gt;
Do większości  zajęć są przygotowane skrypty w jupyter-notebook.  Zawierają one opisy teoretyczne i fragmenty kodu. &lt;br /&gt;
&lt;br /&gt;
* Zadaniem studentów będzie '''przeczytanie ze zrozumieniem''' skryptu oraz '''uzupełnienie kodów w zadaniach'''. &lt;br /&gt;
* Wypełnione skrypty należy przesyłać przed zajęciami do prowadzącego ćwiczenia w danej grupie. &lt;br /&gt;
* To co się liczy to '''próba samodzielnego rozwiązania''' zadania, lub '''sformułowanie konkretnego pytania'''  na temat zadania, które jest niezrozumiałe w notebooku.&lt;br /&gt;
* Rozwiązania i wątpliwości będą omawiane w trakcie zajęć.&lt;br /&gt;
&lt;br /&gt;
Grupa Jarosława Żygierewicza wysyła notebooki na adres:  jarekz@fuw.edu.pl&lt;br /&gt;
Grupa Jana Mąki wysyła notebooki na adres: jmaka@fuw.edu.pl&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 50) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [25–30) pkt: 3.0 (dst)&lt;br /&gt;
# [30–35) pkt: 3.5 (dst+)&lt;br /&gt;
# [35–40) pkt: 4.0 (db)&lt;br /&gt;
# [40–45) pkt: 4.5 (db+)&lt;br /&gt;
# [45–50] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7220</id>
		<title>Analiza sygnałów - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7220"/>
		<updated>2017-10-04T06:20:56Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#[[Systemy liniowe niezmiennicze w czasie | Systemy liniowe niezmiennicze w czasie]]&lt;br /&gt;
[[Ćwiczenia 8|Filtrowanie obrazów]]&lt;br /&gt;
[[Ćwiczenia 9|Analiza czas-częstość]]&lt;br /&gt;
[[Ćwiczenia 10|Analiza czas-częstość &amp;amp;mdash; STFT i transformata falkowa]]&lt;br /&gt;
[[Ćwiczenia 11|Analiza czas-częstość &amp;amp;mdash; reprezentacje energetyczne]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[ZasadyZaliczenia|Zasady zaliczenia ćwiczeń]]&lt;br /&gt;
&lt;br /&gt;
#[[Ćwiczenia 1|Sygnały]]  [https://drive.google.com/file/d/0B7k6Z_ViZid5dXdKdVExNS1XZlE/view?usp=sharing notebook]&amp;lt;!-- -- wstęp, generacja sygnałów testowych, aliasing, przypomnienie Pythona, wprowadzenie Svaroga; jak wczytać do Svaroga z Pythona i w drugą stronę --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 1.1|Sygnały jako wektory]] &lt;br /&gt;
#[[Ćwiczenia 2|Transformata Fouriera]] &lt;br /&gt;
#[[Ćwiczenia 2_2|Transformata Fouriera cd]] &amp;lt;!-- piszemy w Pythonie, porównujemy ze Svarogiem --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 3|Okienkowanie sygnału i transformata Fouriera]]&lt;br /&gt;
#[[Nieparametryczne widmo mocy |Estymacja widma mocy w oparciu o transformatę Fouriera]] &amp;lt;!-- widmo średniej vs. średnie widmo --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 4|Funkcja autokorelacji]]&lt;br /&gt;
#[[Ćwiczenia 5|Procesy AR]] &amp;lt;!-- AR w Pyhonie + DTF w Svarogu (MK) --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 6|Filtry I]] &amp;lt;!-- w Pythonie i w Svarogu --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 7|Filtry II]] &amp;lt;!-- oglądanie charakterystyk filtrów, ogładanie widma sygnałów przefiltrowanych, efektywność filtrów, przesuwanie fazy --&amp;gt;&lt;br /&gt;
#[[AS cwiczeniaTF|Metody czas-częstość]] &amp;lt;!-- STFT i falki --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia ICA| ICA]] &amp;lt;!-- montaże, ICA --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia DTF| DTF]] &amp;lt;!-- wielokanałowy AR , DTF --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--#[[AS cwiczeniaMP|Matching pursuit]] &amp;lt;!-- MP w Svarogu, zabawa parametrami dekompozycji, zabawa filtrowaniem map w Svarogu, postprocessing w Pythonie &lt;br /&gt;
&lt;br /&gt;
# Uśrednianie gęstości energii vs gęstość energii uśrednionego sygnału: symulacje, ERD/S&lt;br /&gt;
#[[Ćwiczenia UNIFIKACJA]] &amp;lt;!-- ostatnie ćwiczenia na ktrych porównujemy na tych samych sygnałach rzeczywistych i symulowanych działanie różnych metod -- MMP vs DTF vs ICA, STFT vs WT vs MP itp, potrzebne fajne przykłady --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
autorzy: Jarosław Żygierewicz, Maciej Kamiński, Magdalena Zieleniewska&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== INFORMACJE DODATKOWE ==&lt;br /&gt;
Materiały 2014/2015&lt;br /&gt;
# [[kolokwia2013_2014|Informacje o zaliczeniu ćwiczeń]] &lt;br /&gt;
# [[kolokwia2014_2015_kol1|Zagadnienia przygotowawcze do 1 kolokwium]] &lt;br /&gt;
# [[Projekt2014|Projekt zaliczeniowy]]&lt;br /&gt;
&lt;br /&gt;
Materiały 2013/2014&lt;br /&gt;
# [[Plik:Zadania_powtorzeniowe.pdf|Zadania powtorzeniowe do 2 kolokwium]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7219</id>
		<title>Analiza sygnałów - ćwiczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Analiza_sygna%C5%82%C3%B3w_-_%C4%87wiczenia&amp;diff=7219"/>
		<updated>2017-10-04T06:19:47Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Przedmioty specjalizacyjne]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#[[Systemy liniowe niezmiennicze w czasie | Systemy liniowe niezmiennicze w czasie]]&lt;br /&gt;
[[Ćwiczenia 8|Filtrowanie obrazów]]&lt;br /&gt;
[[Ćwiczenia 9|Analiza czas-częstość]]&lt;br /&gt;
[[Ćwiczenia 10|Analiza czas-częstość &amp;amp;mdash; STFT i transformata falkowa]]&lt;br /&gt;
[[Ćwiczenia 11|Analiza czas-częstość &amp;amp;mdash; reprezentacje energetyczne]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[ZasadyZaliczenia|Zasady zaliczenia ćwiczeń]]&lt;br /&gt;
&lt;br /&gt;
#[[Ćwiczenia 1|Sygnały]]  [https://drive.google.com/file/d/0B7k6Z_ViZid5dXdKdVExNS1XZlE/view?usp=sharing]&amp;lt;!-- -- wstęp, generacja sygnałów testowych, aliasing, przypomnienie Pythona, wprowadzenie Svaroga; jak wczytać do Svaroga z Pythona i w drugą stronę --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 1.1|Sygnały jako wektory]] &lt;br /&gt;
#[[Ćwiczenia 2|Transformata Fouriera]] &lt;br /&gt;
#[[Ćwiczenia 2_2|Transformata Fouriera cd]] &amp;lt;!-- piszemy w Pythonie, porównujemy ze Svarogiem --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 3|Okienkowanie sygnału i transformata Fouriera]]&lt;br /&gt;
#[[Nieparametryczne widmo mocy |Estymacja widma mocy w oparciu o transformatę Fouriera]] &amp;lt;!-- widmo średniej vs. średnie widmo --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 4|Funkcja autokorelacji]]&lt;br /&gt;
#[[Ćwiczenia 5|Procesy AR]] &amp;lt;!-- AR w Pyhonie + DTF w Svarogu (MK) --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 6|Filtry I]] &amp;lt;!-- w Pythonie i w Svarogu --&amp;gt;&lt;br /&gt;
#[[Ćwiczenia 7|Filtry II]] &amp;lt;!-- oglądanie charakterystyk filtrów, ogładanie widma sygnałów przefiltrowanych, efektywność filtrów, przesuwanie fazy --&amp;gt;&lt;br /&gt;
#[[AS cwiczeniaTF|Metody czas-częstość]] &amp;lt;!-- STFT i falki --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia ICA| ICA]] &amp;lt;!-- montaże, ICA --&amp;gt;&lt;br /&gt;
#[[AS cwiczenia DTF| DTF]] &amp;lt;!-- wielokanałowy AR , DTF --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--#[[AS cwiczeniaMP|Matching pursuit]] &amp;lt;!-- MP w Svarogu, zabawa parametrami dekompozycji, zabawa filtrowaniem map w Svarogu, postprocessing w Pythonie &lt;br /&gt;
&lt;br /&gt;
# Uśrednianie gęstości energii vs gęstość energii uśrednionego sygnału: symulacje, ERD/S&lt;br /&gt;
#[[Ćwiczenia UNIFIKACJA]] &amp;lt;!-- ostatnie ćwiczenia na ktrych porównujemy na tych samych sygnałach rzeczywistych i symulowanych działanie różnych metod -- MMP vs DTF vs ICA, STFT vs WT vs MP itp, potrzebne fajne przykłady --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
autorzy: Jarosław Żygierewicz, Maciej Kamiński, Magdalena Zieleniewska&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
== INFORMACJE DODATKOWE ==&lt;br /&gt;
Materiały 2014/2015&lt;br /&gt;
# [[kolokwia2013_2014|Informacje o zaliczeniu ćwiczeń]] &lt;br /&gt;
# [[kolokwia2014_2015_kol1|Zagadnienia przygotowawcze do 1 kolokwium]] &lt;br /&gt;
# [[Projekt2014|Projekt zaliczeniowy]]&lt;br /&gt;
&lt;br /&gt;
Materiały 2013/2014&lt;br /&gt;
# [[Plik:Zadania_powtorzeniowe.pdf|Zadania powtorzeniowe do 2 kolokwium]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=6447</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=6447"/>
		<updated>2017-02-24T08:59:47Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zasady zaliczenia ćwiczeń z Analizy Sygnałów */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w poniedziałki przed południem.&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  14 listopada 2016, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
* '''Kolokwium II: 31 stycznia 2017, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5bXZaNGNsUVlwSk0?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium poprawkowe: 24 lutego 2017, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5ZXNac0swalRuMkk?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2016'''. Dokładniejsze terminy zaliczenia przekażą poszczególni prowadzący grup.&lt;br /&gt;
&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe6| Detekcja wrzecion snu ]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kartkówki ===&lt;br /&gt;
Na większości (10) zajęć będą miały miejsce kartkówki na podstawie materiału z zajęć poprzednich. Pytania nie będą wymagające, będą raczej sprawdzać uwagę i systematyczną pracę. Łącznie za kartkówki można uzyskać 10 punktów (maksymalnie 1 punkt za każdą), natomiast przy zaliczeniu przedmiotu dozwolone jest niezaliczenie maksymalnie trzech kartkówek (nieusprawiedliwiona nieobecność również pociąga za sobą niezaliczenie kartkówki). Punktów z kartkówek nie można poprawiać.&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 50) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [25–30) pkt: 3.0 (dst)&lt;br /&gt;
# [30–35) pkt: 3.5 (dst+)&lt;br /&gt;
# [35–40) pkt: 4.0 (db)&lt;br /&gt;
# [40–45) pkt: 4.5 (db+)&lt;br /&gt;
# [45–50] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=6330</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=6330"/>
		<updated>2017-01-31T08:53:25Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zasady zaliczenia ćwiczeń z Analizy Sygnałów */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w poniedziałki przed południem.&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  14 listopada 2016, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
* '''Kolokwium II: 31 stycznia 2017, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
[https://drive.google.com/drive/folders/0B7k6Z_ViZid5bXZaNGNsUVlwSk0?usp=sharing Pliki związane z kolokwium ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium poprawkowe: 24 lutego 2017, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2016'''. Dokładniejsze terminy zaliczenia przekażą poszczególni prowadzący grup.&lt;br /&gt;
&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe6| Detekcja wrzecion snu ]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kartkówki ===&lt;br /&gt;
Na większości (10) zajęć będą miały miejsce kartkówki na podstawie materiału z zajęć poprzednich. Pytania nie będą wymagające, będą raczej sprawdzać uwagę i systematyczną pracę. Łącznie za kartkówki można uzyskać 10 punktów (maksymalnie 1 punkt za każdą), natomiast przy zaliczeniu przedmiotu dozwolone jest niezaliczenie maksymalnie trzech kartkówek (nieusprawiedliwiona nieobecność również pociąga za sobą niezaliczenie kartkówki). Punktów z kartkówek nie można poprawiać.&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 50) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [25–30) pkt: 3.0 (dst)&lt;br /&gt;
# [30–35) pkt: 3.5 (dst+)&lt;br /&gt;
# [35–40) pkt: 4.0 (db)&lt;br /&gt;
# [40–45) pkt: 4.5 (db+)&lt;br /&gt;
# [45–50] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=AS_cwiczeniaTF&amp;diff=6281</id>
		<title>AS cwiczeniaTF</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=AS_cwiczeniaTF&amp;diff=6281"/>
		<updated>2017-01-18T14:35:30Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Wprowadzenie do metod czas-częstość */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/TF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Wprowadzenie do metod czas-częstość ==&lt;br /&gt;
===Spektrogram i sklogram ===&lt;br /&gt;
W  celu zapoznania się z tymi metodami przeczytaj uważnie i wykonaj ćwiczenia w notebooku: https://drive.google.com/open?id=0BzwQ_Lscn8yDMnRSZWpoSnZqZ2c&lt;br /&gt;
Notebook zajęć w formie py: https://drive.google.com/file/d/0B7k6Z_ViZid5OTJsbGJjSVdPQTA/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
===MP===&lt;br /&gt;
&lt;br /&gt;
Zapoznajmy się z dekompozycją algorytmem MP przy użyciu tego [https://drive.google.com/open?id=0BzwQ_Lscn8yDdUlLVXp1XzF0elE notebooka].&lt;br /&gt;
Zajęcia w formie pliku .py https://drive.google.com/file/d/0B7k6Z_ViZid5UzZnUWNESjJWelE/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
[[Dokumentacja konfiguracji MP w SVAROGU i w pliku konfiguracyjnym]]&lt;br /&gt;
&lt;br /&gt;
==Metody czas-częstość w SVAROGU==&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie 1===&lt;br /&gt;
&lt;br /&gt;
*Wygeneruj sygnał o długości 1 sek. będący sumą sinusa, delty Diraca i trzech funkcji Gabora o parami jednakowych położeniach w czasie i częstościach. Przyjmij częstość próbkowania 512 Hz.  &lt;br /&gt;
*Do wygenerowanego sygnału dodaj szum o energii dwukrotnie większej niż sam sygnał.&lt;br /&gt;
*W programie Svarog utwórz mapę gęstości energii sygnału w przestrzeni czas-częstość przy pomocy spektrogramu, transformacji falkowej oraz algorytmu ''matching pursuit''.&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie 2===&lt;br /&gt;
Zapoznaj się z artykułem &lt;br /&gt;
&lt;br /&gt;
[1] https://www.dropbox.com/s/rjfympzrkb1vwx7/T-f.microstructure.of.ERDS.pdf&lt;br /&gt;
&lt;br /&gt;
Wczytaj do Svaroga sygnał używany w tym artykule do demonstracji własności metod czas-częstość &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/igfh3vmm44mc15d/simchirp.raw&lt;br /&gt;
&lt;br /&gt;
i spróbuj odtworzyć Fig. 2 z tego artykułu.&lt;br /&gt;
&lt;br /&gt;
Dla ambitnych: napisz w Pythonie skrypt generujący taki sam sygnał, lub przynajmniej część z jego składowych, i porównaj mapy gęstości energii w przestrzeni czas-częstość.&lt;br /&gt;
&lt;br /&gt;
Następnie przy pomocy programu Svarog wczytaj sygnał &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/ymdq50padi5rlmq/finger.bin?dl=0&lt;br /&gt;
&lt;br /&gt;
korzystając z opisu &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/t2jpcewyppwues1/finger.xml&lt;br /&gt;
&lt;br /&gt;
oraz pliku z oznaczeniami (tag) &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/tcpqusu9isxi47n/finger.tag&lt;br /&gt;
&lt;br /&gt;
W ostatnim pliku (.tag) oznaczone są momenty ruchu palcem, sygnał składa się z 10-sekundowych odcinków EEG wybranych po 5 s przed i 5 s po ruchu.  W pliku .xml znajdują się metadane rejestracji, takie jak częstość próbkowania, nazwy kanałów itp. &lt;br /&gt;
&lt;br /&gt;
*Wyznacz średni potencjał wywołany: Tools -&amp;gt; Average evoked potentials (w zakresie [-5 5], gdzie 0 oznacza moment wykonania ruchu) i wyeksportuj wynik do pliku (Save segments to file).&lt;br /&gt;
*Przeprowadź dekompozycję uśrednionego potencjału przy pomocy dostępnych w programie Svarog estymat gęstości energii w przestrzeni czas-częstość: STFT, WT i MP, i zapisz mapy czas-częstość. &lt;br /&gt;
* Wykonaj uśrednienie estymat gęstości energii w przestrzeni czas-częstość otrzymanych za pomocą analizy falkowej i spektrogramu (zwróć ueagę na dobór paramterów -- długości okna i falki)&lt;br /&gt;
*Następnie dla każdego fragmentu przeprowadź dekompozycję ''matching pursuit'' i uśrednij otrzymane mapy gęstości energii sygnału. Porównaj otrzymane wyniki.&lt;br /&gt;
*Porównaj wyniki otrzymane dla różnyc estymat, oraz wyniki z MP z mapą czas-częstość zaprezentowaną w orginalnym artykule [1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/TF&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=AS_cwiczeniaTF&amp;diff=6280</id>
		<title>AS cwiczeniaTF</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=AS_cwiczeniaTF&amp;diff=6280"/>
		<updated>2017-01-18T14:01:11Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* MP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/TF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Wprowadzenie do metod czas-częstość ==&lt;br /&gt;
===Spektrogram i sklogram ===&lt;br /&gt;
W  celu zapoznania się z tymi metodami przeczytaj uważnie i wykonaj ćwiczenia w notebooku: https://drive.google.com/open?id=0BzwQ_Lscn8yDMnRSZWpoSnZqZ2c&lt;br /&gt;
Notebook zajęć w formie py: https://drive.google.com/file/d/0B7k6Z_ViZid5OTJsbGJjSVdPQTA/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
===MP===&lt;br /&gt;
&lt;br /&gt;
Zapoznajmy się z dekompozycją algorytmem MP przy użyciu tego [https://drive.google.com/open?id=0BzwQ_Lscn8yDdUlLVXp1XzF0elE notebooka].&lt;br /&gt;
Zajęcia w formie pliku .py [https://drive.google.com/file/d/0B7k6Z_ViZid5UzZnUWNESjJWelE/view?usp=sharing]&lt;br /&gt;
&lt;br /&gt;
[[Dokumentacja konfiguracji MP w SVAROGU i w pliku konfiguracyjnym]]&lt;br /&gt;
&lt;br /&gt;
==Metody czas-częstość w SVAROGU==&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie 1===&lt;br /&gt;
&lt;br /&gt;
*Wygeneruj sygnał o długości 1 sek. będący sumą sinusa, delty Diraca i trzech funkcji Gabora o parami jednakowych położeniach w czasie i częstościach. Przyjmij częstość próbkowania 512 Hz.  &lt;br /&gt;
*Do wygenerowanego sygnału dodaj szum o energii dwukrotnie większej niż sam sygnał.&lt;br /&gt;
*W programie Svarog utwórz mapę gęstości energii sygnału w przestrzeni czas-częstość przy pomocy spektrogramu, transformacji falkowej oraz algorytmu ''matching pursuit''.&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie 2===&lt;br /&gt;
Zapoznaj się z artykułem &lt;br /&gt;
&lt;br /&gt;
[1] https://www.dropbox.com/s/rjfympzrkb1vwx7/T-f.microstructure.of.ERDS.pdf&lt;br /&gt;
&lt;br /&gt;
Wczytaj do Svaroga sygnał używany w tym artykule do demonstracji własności metod czas-częstość &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/igfh3vmm44mc15d/simchirp.raw&lt;br /&gt;
&lt;br /&gt;
i spróbuj odtworzyć Fig. 2 z tego artykułu.&lt;br /&gt;
&lt;br /&gt;
Dla ambitnych: napisz w Pythonie skrypt generujący taki sam sygnał, lub przynajmniej część z jego składowych, i porównaj mapy gęstości energii w przestrzeni czas-częstość.&lt;br /&gt;
&lt;br /&gt;
Następnie przy pomocy programu Svarog wczytaj sygnał &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/ymdq50padi5rlmq/finger.bin?dl=0&lt;br /&gt;
&lt;br /&gt;
korzystając z opisu &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/t2jpcewyppwues1/finger.xml&lt;br /&gt;
&lt;br /&gt;
oraz pliku z oznaczeniami (tag) &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/tcpqusu9isxi47n/finger.tag&lt;br /&gt;
&lt;br /&gt;
W ostatnim pliku (.tag) oznaczone są momenty ruchu palcem, sygnał składa się z 10-sekundowych odcinków EEG wybranych po 5 s przed i 5 s po ruchu.  W pliku .xml znajdują się metadane rejestracji, takie jak częstość próbkowania, nazwy kanałów itp. &lt;br /&gt;
&lt;br /&gt;
*Wyznacz średni potencjał wywołany: Tools -&amp;gt; Average evoked potentials (w zakresie [-5 5], gdzie 0 oznacza moment wykonania ruchu) i wyeksportuj wynik do pliku (Save segments to file).&lt;br /&gt;
*Przeprowadź dekompozycję uśrednionego potencjału przy pomocy dostępnych w programie Svarog estymat gęstości energii w przestrzeni czas-częstość: STFT, WT i MP, i zapisz mapy czas-częstość. &lt;br /&gt;
* Wykonaj uśrednienie estymat gęstości energii w przestrzeni czas-częstość otrzymanych za pomocą analizy falkowej i spektrogramu (zwróć ueagę na dobór paramterów -- długości okna i falki)&lt;br /&gt;
*Następnie dla każdego fragmentu przeprowadź dekompozycję ''matching pursuit'' i uśrednij otrzymane mapy gęstości energii sygnału. Porównaj otrzymane wyniki.&lt;br /&gt;
*Porównaj wyniki otrzymane dla różnyc estymat, oraz wyniki z MP z mapą czas-częstość zaprezentowaną w orginalnym artykule [1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/TF&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=AS_cwiczeniaTF&amp;diff=6277</id>
		<title>AS cwiczeniaTF</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=AS_cwiczeniaTF&amp;diff=6277"/>
		<updated>2017-01-11T13:29:09Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/TF&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Wprowadzenie do metod czas-częstość ==&lt;br /&gt;
===Spektrogram i sklogram ===&lt;br /&gt;
W  celu zapoznania się z tymi metodami przeczytaj uważnie i wykonaj ćwiczenia w notebooku: https://drive.google.com/open?id=0BzwQ_Lscn8yDMnRSZWpoSnZqZ2c&lt;br /&gt;
Notebook zajęć w formie py: https://drive.google.com/file/d/0B7k6Z_ViZid5OTJsbGJjSVdPQTA/view?usp=sharing&lt;br /&gt;
&lt;br /&gt;
===MP===&lt;br /&gt;
[[Dokumentacja konfiguracji MP w SVAROGU i w pliku konfiguracyjnym]]&lt;br /&gt;
&lt;br /&gt;
==Metody czas-częstość w SVAROGU==&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie 1===&lt;br /&gt;
&lt;br /&gt;
*Wygeneruj sygnał o długości 1 sek. będący sumą sinusa, delty Diraca i trzech funkcji Gabora o parami jednakowych położeniach w czasie i częstościach. Przyjmij częstość próbkowania 512 Hz.  &lt;br /&gt;
*Do wygenerowanego sygnału dodaj szum o energii dwukrotnie większej niż sam sygnał.&lt;br /&gt;
*W programie Svarog utwórz mapę gęstości energii sygnału w przestrzeni czas-częstość przy pomocy spektrogramu, transformacji falkowej oraz algorytmu ''matching pursuit''.&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie 2===&lt;br /&gt;
Zapoznaj się z artykułem &lt;br /&gt;
&lt;br /&gt;
[1] https://www.dropbox.com/s/rjfympzrkb1vwx7/T-f.microstructure.of.ERDS.pdf&lt;br /&gt;
&lt;br /&gt;
Wczytaj do Svaroga sygnał używany w tym artykule do demonstracji własności metod czas-częstość &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/igfh3vmm44mc15d/simchirp.raw&lt;br /&gt;
&lt;br /&gt;
i spróbuj odtworzyć Fig. 2 z tego artykułu.&lt;br /&gt;
&lt;br /&gt;
Dla ambitnych: napisz w Pythonie skrypt generujący taki sam sygnał, lub przynajmniej część z jego składowych, i porównaj mapy gęstości energii w przestrzeni czas-częstość.&lt;br /&gt;
&lt;br /&gt;
Następnie przy pomocy programu Svarog wczytaj sygnał &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/ymdq50padi5rlmq/finger.bin?dl=0&lt;br /&gt;
&lt;br /&gt;
korzystając z opisu &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/t2jpcewyppwues1/finger.xml&lt;br /&gt;
&lt;br /&gt;
oraz pliku z oznaczeniami (tag) &lt;br /&gt;
&lt;br /&gt;
https://www.dropbox.com/s/tcpqusu9isxi47n/finger.tag&lt;br /&gt;
&lt;br /&gt;
W ostatnim pliku (.tag) oznaczone są momenty ruchu palcem, sygnał składa się z 10-sekundowych odcinków EEG wybranych po 5 s przed i 5 s po ruchu.  W pliku .xml znajdują się metadane rejestracji, takie jak częstość próbkowania, nazwy kanałów itp. &lt;br /&gt;
&lt;br /&gt;
*Wyznacz średni potencjał wywołany: Tools -&amp;gt; Average evoked potentials (w zakresie [-5 5], gdzie 0 oznacza moment wykonania ruchu) i wyeksportuj wynik do pliku (Save segments to file).&lt;br /&gt;
*Przeprowadź dekompozycję uśrednionego potencjału przy pomocy dostępnych w programie Svarog estymat gęstości energii w przestrzeni czas-częstość: STFT, WT i MP, i zapisz mapy czas-częstość. &lt;br /&gt;
* Wykonaj uśrednienie estymat gęstości energii w przestrzeni czas-częstość otrzymanych za pomocą analizy falkowej i spektrogramu (zwróć ueagę na dobór paramterów -- długości okna i falki)&lt;br /&gt;
*Następnie dla każdego fragmentu przeprowadź dekompozycję ''matching pursuit'' i uśrednij otrzymane mapy gęstości energii sygnału. Porównaj otrzymane wyniki.&lt;br /&gt;
*Porównaj wyniki otrzymane dla różnyc estymat, oraz wyniki z MP z mapą czas-częstość zaprezentowaną w orginalnym artykule [1].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/TF&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_7&amp;diff=6210</id>
		<title>Ćwiczenia 7</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_7&amp;diff=6210"/>
		<updated>2016-12-12T12:54:05Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Notebook=&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/open?id=0BzwQ_Lscn8yDdnphNl9JNjA3dHc notebook o filtrach]&lt;br /&gt;
&lt;br /&gt;
Ustawiamy parametry wyświetlania i font.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;# encoding: utf-8&lt;br /&gt;
% matplotlib inline&lt;br /&gt;
import matplotlib&lt;br /&gt;
&lt;br /&gt;
matplotlib.rcParams['figure.figsize'] = (7,7)#(10, 7)&lt;br /&gt;
matplotlib.rcParams.update({'font.family': 'Arial'})&lt;br /&gt;
matplotlib.rcParams.update({'font.size': 10})&lt;br /&gt;
&lt;br /&gt;
from IPython.core.display import display, HTML&lt;br /&gt;
display(HTML(&amp;quot;&amp;lt;style&amp;gt;.container { width:100% !important; }&amp;lt;/style&amp;gt;&amp;quot;))&amp;lt;/source&amp;gt;&lt;br /&gt;
Importujemy podstawowe moduły:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;import numpy as np&lt;br /&gt;
import pylab as py&amp;lt;/source&amp;gt;&lt;br /&gt;
Importujemy funkcje specyficzne dla filtrowania w pythonie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;from  scipy.signal import freqz, group_delay #funkcja obliczająca funkcję systemu&lt;br /&gt;
from  scipy.signal import firwin, firwin2     # funkcje do projektowania filtrów FIR&lt;br /&gt;
from  scipy.signal import butter, buttord     # funkcje do projektowania filtrów  &lt;br /&gt;
from  scipy.signal import cheby1, cheb1ord    # funkcje do projektowania filtrów &lt;br /&gt;
from  scipy.signal import cheby2, cheb2ord    # funkcje do projektowania filtrów &lt;br /&gt;
from  scipy.signal import ellip, ellipord     # funkcje do projektowania filtrów eliptycznych&lt;br /&gt;
from  scipy.signal import lfilter, filtfilt # funkcje do aplikowania filtrów&amp;lt;/source&amp;gt;&lt;br /&gt;
= Implementacja filtrowania: funkcja lfilter =&lt;br /&gt;
&lt;br /&gt;
== Dla przypomnienia: ==&lt;br /&gt;
&lt;br /&gt;
=== Działanie filtra w dziedzinie czasu ===&lt;br /&gt;
&lt;br /&gt;
Najczęściej, wyjście filtra jest kombinacją liniową:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y[n] = \sum_{i=0}^{n_b}b(i)x[n-i] - \sum_{i=1}^{n_a}a(i)y[n-i]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;math&amp;gt;n_b&amp;lt;/math&amp;gt; liczba przeszłych próbek wejściowych &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;n_a&amp;lt;/math&amp;gt; liczba przeszłych próbek wyjściowych &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
użytych do obliczenia aktualnego wyjścia &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Większa z liczb &amp;lt;math&amp;gt;n_b&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;n_a&amp;lt;/math&amp;gt; określa &amp;amp;quot;rząd&amp;amp;quot; filtra.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że matematycznie operacje te odpowiadają splataniu próbek wejściowych z wektorem &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; i próbek wyjściowych z wektorem &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Implementacja w pythonie ===&lt;br /&gt;
&lt;br /&gt;
Filtrowanie zgodne z powyższymi równaniami zaimplementowane jest w pythonie w module scipy.signal jako funkcja lfilter.&lt;br /&gt;
&lt;br /&gt;
Podstawowe wywołanie tej funkcji dla sygnału we wygląda następująco:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;wy = scipy.signal.lfilter(b,a,we)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie b, a są to współczynniki z poprzedniego równania.&lt;br /&gt;
&lt;br /&gt;
= Badanie własności filtra w dziedzinie czasu i częstości: =&lt;br /&gt;
&lt;br /&gt;
Przy projektowaniu filtra musimy brać pod uwagę jego następujące własności: - w dziedzinie częstości: - moduł transmitancji (funkcji przenoszenia) - jest to zależność modułu funkcji systemu od częstości &amp;lt;math&amp;gt;\left|H\left(f\right)\right|&amp;lt;/math&amp;gt; - opóźnienie grupowe - opóźnienie fazowe - w dziedzinie czasu: - funkcję odpowiedzi impulsowej - funkcję odpowiedzi schodkowej&lt;br /&gt;
&lt;br /&gt;
== Zadanie: budujemy funkcję do ilustracji własności filtra ==&lt;br /&gt;
&lt;br /&gt;
Nasza funkcja będzie przyjmowała na wejściu: * współczynniki filtra &amp;lt;code&amp;gt;a, b&amp;lt;/code&amp;gt;, * wektor zawierający częstości &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;, dla których własności mają być policzone, * długość odcinka czasu, &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, na którym mają być prezentowane własności czasowe filtra,&amp;lt;br /&amp;gt;&lt;br /&gt;
* oraz częstość próbkowania &amp;lt;code&amp;gt;Fs&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Funkcja ta będzie rysowała wszystkie powyżej wspomniane charakterystyki filtra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;def charkterystyki(a,b,f,T,Fs):&lt;br /&gt;
    # przyda nam się oś czasu od -T do T sekund&lt;br /&gt;
    t = np.arange(-T, T, 1/Fs)&lt;br /&gt;
    &lt;br /&gt;
    # oś częstości przeliczamy na radiany&lt;br /&gt;
    w = 2*np.pi* f/Fs&lt;br /&gt;
    &lt;br /&gt;
    # obliczamy transmitancję&lt;br /&gt;
    w, h = freqz(...) &lt;br /&gt;
    &lt;br /&gt;
    # obliczamy moduł transmitancji&lt;br /&gt;
    m = np.abs(h)&lt;br /&gt;
        &lt;br /&gt;
    # obliczamy fazę i &amp;quot;rozwijamy&amp;quot; ją   &lt;br /&gt;
    faza = np.unwrap(np.angle(h))&lt;br /&gt;
&lt;br /&gt;
    # obliczamy opóźnienie fazowe&lt;br /&gt;
    opoznienieFazowe = - faza/w&lt;br /&gt;
    &lt;br /&gt;
    # obliczamy opóźnienie grupowe&lt;br /&gt;
    df = np.diff(faza)&lt;br /&gt;
    idx, = np.where(np.abs(df-np.pi)&amp;lt;0.05) #to zabezpieczenie na błędy przy &amp;quot;rozwijaniu&amp;quot; fazy&lt;br /&gt;
    df[idx] = (df[idx+1]+df[idx-1])/2&lt;br /&gt;
    grupowe = - df/np.diff(w)&lt;br /&gt;
    &lt;br /&gt;
    # obliczamy odpowiedź impulsową&lt;br /&gt;
    x = np.zeros(len(t))&lt;br /&gt;
    x[len(t)//2] = 1 # impuls&lt;br /&gt;
    y = lfilter(b,a,x)&lt;br /&gt;
    &lt;br /&gt;
    # obliczamy odpowiedź schodkową&lt;br /&gt;
    s = np.zeros(len(t))&lt;br /&gt;
    s[len(t)//2:] = 1 # schodek&lt;br /&gt;
    ys = lfilter(b,a,s) # przepuszczamy impuls przez filtr i obserwujemy odpowiedź impulsową&lt;br /&gt;
    &lt;br /&gt;
    # rysujemy&lt;br /&gt;
    fig = py.figure()&lt;br /&gt;
    py.subplot(3,2,1)&lt;br /&gt;
    py.title('moduł transmitancji')&lt;br /&gt;
    py.plot(f,20*np.log10(m))&lt;br /&gt;
    py.ylabel('[dB]')&lt;br /&gt;
    py.grid('on')&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(3,2,3)&lt;br /&gt;
    py.title('opóźnienie fazowe')&lt;br /&gt;
    py.plot(f, opoznienieFazowe)&lt;br /&gt;
    py.ylabel('próbki')&lt;br /&gt;
    py.grid('on')&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(3,2,5)&lt;br /&gt;
    py.title('opóźnienie grupowe')&lt;br /&gt;
    py.plot(f[:-1],grupowe)&lt;br /&gt;
    py.ylabel('próbki')&lt;br /&gt;
    py.xlabel('Częstość [Hz]')&lt;br /&gt;
    py.grid('on')&lt;br /&gt;
    py.ylim([0, np.max(grupowe)+1])&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(3,2,2)&lt;br /&gt;
    py.title('odpowiedź impulsowa')&lt;br /&gt;
    py.plot(t, x)&lt;br /&gt;
    py.plot(t, y)&lt;br /&gt;
    py.xlim([-T/2,T])&lt;br /&gt;
    py.grid('on')&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(3,2,4)&lt;br /&gt;
    py.title('odpowiedź schodkowa')&lt;br /&gt;
    py.plot(t, s)&lt;br /&gt;
    py.plot(t, ys)&lt;br /&gt;
    py.xlim([-T/2,T])&lt;br /&gt;
    py.xlabel('Czas [s]')&lt;br /&gt;
    py.grid('on')&lt;br /&gt;
    &lt;br /&gt;
    fig.subplots_adjust(hspace=.5)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &amp;lt;/source&amp;gt;&lt;br /&gt;
Testujemy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;b = firwin(54,0.5)# licznik&lt;br /&gt;
a = np.array([1.0]) # mianownik&lt;br /&gt;
Fs = 100&lt;br /&gt;
T = 1&lt;br /&gt;
f = np.arange(0.01,Fs/2,0.01)&lt;br /&gt;
charkterystyki(a,b,f,T,Fs)&amp;lt;/source&amp;gt;&lt;br /&gt;
= Funkcje do projektowania filtrów =&lt;br /&gt;
&lt;br /&gt;
W bibliotece &amp;lt;code&amp;gt;scipy.signal&amp;lt;/code&amp;gt; jest kilka funkcji do projektowania filtrów o zadanych parametrach. My skupimy się na dwóch zasadniczych grupach: * FIR - filtry o skończonej odpowiedzi impulsowej * klasyczne IIR - filtry o nieskończonej odpowiedzi impulsowej&lt;br /&gt;
&lt;br /&gt;
== FIR ==&lt;br /&gt;
&lt;br /&gt;
Filtry typu FIR zwykle wymagają znacznie wyższych rzędów aby osiągnąć transmitancję o porządanej formie. Mają jednak dwie podstawowe zalety: * ich funkcja odpowiedzi jest skończona opisana wektorem &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; - efekty brzegowe sięgają z obu końców filtrowanego sygnału na dokładnie połowę długości wektora &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; * mają liniową zależnaość fazy od częstości. Z tego powodu opóżnienie grupowe dla wszystkich częstości jest takie samo.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;scipy.signal&amp;lt;/tt&amp;gt; mamy kilka funkcji do projektowania filtrów typu FIR: &amp;lt;code&amp;gt;firwin&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;firwin2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== firwin ===&lt;br /&gt;
&lt;br /&gt;
Najprostszą koncepcyjnie metodą projektowania filtrów FIR jest metoda okienkowa.&amp;lt;br /&amp;gt;&lt;br /&gt;
Metoda składa się z następujących kroków: w dziedzinie częstości projektowana jest idealna funkcja przenoszenia, obliczana jest od niej odwrotna transformata Fouriera, następnie otrzymana sekwencja czasowa (odpowiedź impulsowa) jest przemnażana przez wybrane okno.&lt;br /&gt;
&lt;br /&gt;
Metoda ta zaimplementowana jest w funkcji &amp;lt;tt&amp;gt;scipy.signal.firwin(numtaps, cutoff, width=None, window='hamming', pass_zero=True, scale=True, nyq=1.0)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pozwala ona projektować filtry dolno- i górno- przepustowe oraz pasmowo przepustowe i pasmowo zaporowe metodą okienkową.&lt;br /&gt;
&lt;br /&gt;
Najważniejsze parametry (kompletny opis w dokumentacji) http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin.html#scipy.signal.firwin&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;numtaps&amp;lt;/code&amp;gt;: int, ilość współczynników filtru (rząd filtru+1). Liczba ta musi być parzysta jeśli pasmo przenoszenia ma zawierać częstość Nyquista.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cutoff&amp;lt;/tt&amp;gt;: częstość odcięcia filtru. Może być jedną liczbą zmiennoprzecinkową dla filtru dolno- lub górno- przepustowego lub tablicą dla filtrów pasmowych. Wyrażamy ją w tych samych jednostkach co &amp;lt;tt&amp;gt;nyq&amp;lt;/tt&amp;gt; i musi zawierać się pomiędzy 0 a &amp;lt;tt&amp;gt;nyq&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;window&amp;lt;/tt&amp;gt;: napis lub krotka: określa jakiego okna użyć do projektu filtru. Może to być dowolne okno spośród opisanych w &amp;lt;tt&amp;gt;scipy.signal.get_window&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;pass_zero&amp;lt;/tt&amp;gt;: bool, Jeśli True to zero jest przenoszone, jeśli False to nie jest. Ten parametr decyduje jak jest interpretowane pierwsze pasmo od 0 do &amp;lt;tt&amp;gt;cutoff&amp;lt;/tt&amp;gt; - czy ma to być pasmo przenoszone czy tłumione.&lt;br /&gt;
* &amp;lt;tt&amp;gt;nyq&amp;lt;/tt&amp;gt;: float. Częstość Nyquista.&lt;br /&gt;
* Zwraca: współczynniki &amp;lt;tt&amp;gt;b&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Przykłady: Zbadaj włsności przykładowych projektów ===&lt;br /&gt;
&lt;br /&gt;
We wszystkich poniższych przykładach zakładamy, że częstość próbkowania wynosi 256Hz:&lt;br /&gt;
&lt;br /&gt;
* filtr dolnoprzepustowy rzędu 20 z częstością odcięcia 40Hz:&lt;br /&gt;
* &amp;lt;code&amp;gt;firwin(21, 40, nyq= 128)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;Fs = 128&lt;br /&gt;
T = 0.2&lt;br /&gt;
f = np.arange(0.01,Fs/2,0.01)&lt;br /&gt;
b = firwin(21, 40, nyq= 128)&lt;br /&gt;
charkterystyki(1,b,f,T ,Fs)&amp;lt;/source&amp;gt;&lt;br /&gt;
* filtr górnoprzepustowy rzędu 15 z częstością odcięcia 5 Hz:&lt;br /&gt;
* &amp;lt;code&amp;gt;firwin(17, 15, nyq= 128, pass_zero=False)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;Fs = 256&lt;br /&gt;
T = 1&lt;br /&gt;
f = np.arange(0.01,Fs/2,0.01)&lt;br /&gt;
&lt;br /&gt;
b = firwin(17, 15, nyq= 128, pass_zero=False)&lt;br /&gt;
charkterystyki(1,b,f,T = 0.2,Fs=Fs)&amp;lt;/source&amp;gt;&lt;br /&gt;
* pasmowo przepustowy 51 rzędu przenoszący częstości pomiędzy 8 a 14 Hz:&lt;br /&gt;
* &amp;lt;code&amp;gt;firwin(51, [8, 14], nyq= 128, pass_zero=False)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;Fs = 256&lt;br /&gt;
f = np.arange(0.01,Fs/2,0.01) &lt;br /&gt;
&lt;br /&gt;
b=firwin(51, [8, 14], nyq= Fs/2, pass_zero=False)&lt;br /&gt;
charkterystyki(1,b,f,T = 0.2,Fs=Fs)&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie: Zaprojektuj i zbadaj własności filtra: ===&lt;br /&gt;
&lt;br /&gt;
FIR dolno z pasmem przenoszenia od 30 Hz dla sygnału próbkowanego 256 Hz&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie: Znajdź rząd filtra FIR: ===&lt;br /&gt;
&lt;br /&gt;
dolnoprzepustowego z pasmem przenoszenia do 40 Hz dla sygnału próbkowanego 256 Hz, tak aby dla częstości powyżej 45 Hz jego tłumienie było nie mniejsze niż 20dB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
=== firwin2 ===&lt;br /&gt;
&lt;br /&gt;
Funkcja&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;scipy.signal.firwin2(numtaps, freq, gain, nfreqs=None, window='hamming', nyq=1.0)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
również implementuje okienkową metodę projektowania filtrów FIR. Daje ona nieco większą swobodę w kształtowaniu idealnej funkcji przenoszenia. Zadaje się ją przez podanie dwóch wektorów: * &amp;lt;code&amp;gt;freq&amp;lt;/code&amp;gt; i Wektor freq definiuje punkty w częstości (jednostki takie same jak &amp;lt;code&amp;gt;nyq&amp;lt;/code&amp;gt;, muszą zawierać 0 i &amp;lt;code&amp;gt;nyq&amp;lt;/code&amp;gt;) dla których znana jest wartość pożądanego przenoszenia. Wartości &amp;lt;code&amp;gt;freq&amp;lt;/code&amp;gt; muszą być ułożone w kolejności rosnącej, dopuszczalne jest powtórzenie tej samej wartości częstości i odpowiadających im różnych wartości gain aby zdefiniować nieciągłość funkcji przenoszenia. * &amp;lt;code&amp;gt;gain&amp;lt;/code&amp;gt; Pożądane wartości przenoszenia odpowiadające kolejnym częstościom definiowane są w &amp;lt;code&amp;gt;gain&amp;lt;/code&amp;gt;. * Znaczenie pozostałych parametrów jest takie samo jak dla ``firwin.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie: filtr wielopasmowy ===&lt;br /&gt;
&lt;br /&gt;
Zaprojektuj filtr przenoszący częstości w pasmach pomiędzy : 10-11, 20-21 i 30-31 Hz, który w paśmie zaporowym ma co najmniej 60 dB tłumienia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;Fs =100&lt;br /&gt;
T = 2&lt;br /&gt;
f = np.arange(0.01,Fs/2,0.01) &lt;br /&gt;
freq = np.array([0, 10, 10, 11, 11, 20, 20, 21, 21, 30, 30, 31, 31, 50])&lt;br /&gt;
gain = np.array([0,  0,  1,  1,  0,  0,  1,  1,  0,  0,  1,  1,  0,  0])&lt;br /&gt;
b = firwin2(100, freq, gain, nyq= 50)&lt;br /&gt;
charkterystyki(1,b,f,T,Fs)&amp;lt;/source&amp;gt;&lt;br /&gt;
= Filtry IIR =&lt;br /&gt;
&lt;br /&gt;
Filtry o nieskończonej odpowiedzi impulsowej (''infinite impulse response'', IIR) mają zazwyczaj dużo niższe rzędy niż filtry o skończonej odpowiedzi impulsowej (''finite impulse response'', FIR) z analogicznym poziomem tłumienia i szerokością pasma przejściowego.&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;scipy.signal&amp;lt;/tt&amp;gt; mamy zaimplementowane kilka funkcji do projektowania „optymalnych” pod różnymi względami filtrów w klasycznych konfiguracjach: dolno- albo górnoprzepustowe i pasmowo-przepustowe albo pasmowo-zaporowe.&lt;br /&gt;
&lt;br /&gt;
== Funkcje do projektowania filtrów IIR dostępne w module &amp;lt;tt&amp;gt;scipy.signal&amp;lt;/tt&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
W module &amp;lt;tt&amp;gt;scipy.signal&amp;lt;/tt&amp;gt; dostępne są funkcje do projektowania czterech typów filtrów: Butterwortha, Czebyszewa typu I i II, oraz eliptyczny. Do opisu wymagań projektowych funkcje te wykorzystują następujące pojęcia: * &amp;lt;tt&amp;gt;wp&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ws&amp;lt;/tt&amp;gt; — krawędzie pasma przenoszenia i tłumienia. '''Częstości są znormalizowane do zakresu od 0 do 1 (1 odpowiada częstości Nyquista)''' przykładowo: * * dolno-przepustowy: &amp;lt;tt&amp;gt;wp = 0.2&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ws = 0.3&amp;lt;/tt&amp;gt; * * górno-przepustowy: &amp;lt;tt&amp;gt;wp = 0.3&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ws = 0.2&amp;lt;/tt&amp;gt; * * pasmowo-przepustowy: &amp;lt;tt&amp;gt;wp = [0.2, 0.5]&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ws = [0.1, 0.6]&amp;lt;/tt&amp;gt; * * pasmowo-zaporowy: &amp;lt;tt&amp;gt;wp = [0.1, 0.6]&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ws = [0.2, 0.5]&amp;lt;/tt&amp;gt; * &amp;lt;tt&amp;gt;gpass&amp;lt;/tt&amp;gt; — maksymalna dopuszczalna strata w pasmie przenoszenia (w funkcjach projektujących filtry jest to &amp;lt;tt&amp;gt;rp&amp;lt;/tt&amp;gt;) (dB). * &amp;lt;tt&amp;gt;gstop&amp;lt;/tt&amp;gt; — minimalne wymagane tłumienie w pasmie tłumienia (w funkcjach projektujących filtry jest to &amp;lt;tt&amp;gt;rs&amp;lt;/tt&amp;gt;) (dB). * &amp;lt;tt&amp;gt;btype&amp;lt;/tt&amp;gt; — typ filtra (&amp;lt;tt&amp;gt;'lowpass'&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;'highpass'&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;'bandpass'&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;'bandstop'&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Funkcje do projektowania filtrów są zaimplementowane parami: * jedna pomaga dobierać rząd filtru do wymagań projektowych, * druga oblicza współczynniki filtru.&lt;br /&gt;
&lt;br /&gt;
W poniższych przykładach przyjmiemy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;T = 0.3&lt;br /&gt;
Fs = 100 # Hz&lt;br /&gt;
f = np.arange(0.01,Fs/2,0.01) &lt;br /&gt;
&lt;br /&gt;
wp = 10/(Fs/2)&lt;br /&gt;
ws = 30/(Fs/2)&lt;br /&gt;
gpass = 1 &lt;br /&gt;
gstop = 25&lt;br /&gt;
analog=0&lt;br /&gt;
rp = gpass&lt;br /&gt;
rs = gstop&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Filtr Butterwortha ===&lt;br /&gt;
&lt;br /&gt;
daje gładką (bez tętnień) funkcję przenoszenia w całym zakresie częstości.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;[n,Wn]=buttord(wp, ws, gpass, gstop)&lt;br /&gt;
[b,a]=butter(n,Wn)&lt;br /&gt;
charkterystyki(a,b,f,T,Fs)&lt;br /&gt;
print('Filtr Butterwortha, rząd: {}, częstość odcięcia {:.3f}'.format(n,Wn*Fs/2))&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Filtr Czebyszewa I rodzaju ===&lt;br /&gt;
&lt;br /&gt;
gładka funkcja przenoszenia w paśmie tłumienia, minimalizowane są tętnienia w paśmie przenoszenia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;[n,Wn]=cheb1ord(wp, ws, gpass, gstop, analog)&lt;br /&gt;
[b,a]=cheby1(n, rp, Wn, btype='low',  output='ba')&lt;br /&gt;
charkterystyki(a,b,f,T,Fs)&lt;br /&gt;
print('Czebyszewa I Typu: rząd: {}, częstość odcięcia {:.3f}'.format(n,Wn*Fs/2))&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Filtr Czebyszewa II rodzaju ===&lt;br /&gt;
&lt;br /&gt;
gładka funkcja przenoszenia w paśmie przenoszenia, minimalizowane tętnienia w paśmie tłumienia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;[n,Wn]=cheb2ord(wp, ws, gpass, gstop, analog=0);&lt;br /&gt;
[b,a]=cheby2(n, rs, Wn, btype='low', analog=0, output='ba')&lt;br /&gt;
charkterystyki(a,b,f,T,Fs)&lt;br /&gt;
print('Czebyszewa II Typu: rząd: {}, częstość odcięcia {:.3f}'.format(n,Wn*Fs/2))&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Filtr eliptyczny ===&lt;br /&gt;
&lt;br /&gt;
daje najostrzejsze przejście pomiędzy pasmem tłumienia i przenoszenia przy tym samym rzędzie w porównaniu z wyżej wymienionymi filtrami, tętnienia są obecne zarówno w paśmie przenoszenia jak i w paśmie tłumienia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;[n,Wn]=ellipord(wp, ws, rp,rs);&lt;br /&gt;
[b,a]=ellip(n, rp, rs, Wn, btype='low', analog=0, output='ba')&lt;br /&gt;
charkterystyki(a,b,f,T,Fs)&lt;br /&gt;
print('Eliptyczny: rząd: {}, częstość odcięcia {:.3f}'.format(n,Wn*Fs/2))&amp;lt;/source&amp;gt;&lt;br /&gt;
== Filtrowanie z zerowym przesunięciem fazowym ==&lt;br /&gt;
&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
&lt;br /&gt;
Filtrowanie sygnałów off-line można zrealizować tak, aby sygnał wyjściowy nie miał przesunięcia fazowego. Procedura powyższa zaimplementowana jest w funkcji: scipy.signal.filtfilt. Jej działanie i porównanie z efektami funkcji lfilter przedstawia poniższy przykład:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;# częstość próbkowania&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
# projekt dolnoprzepustowego filtra Butterwortha 5 rzędu&lt;br /&gt;
# o częstości odcięcia 10 Hz  &lt;br /&gt;
[b,a] = butter(...)&lt;br /&gt;
 &lt;br /&gt;
# obliczamy funkcję przenoszenia&lt;br /&gt;
w,h = freqz(...)&lt;br /&gt;
transmitancja = ...&lt;br /&gt;
 &lt;br /&gt;
#opóźnienie grupowe&lt;br /&gt;
grupowe = -np.diff(np.unwrap(np.angle(h)))/np.diff(w)  &lt;br /&gt;
 &lt;br /&gt;
# przeliczamy skalę w (radiany) na częstości w Hz &lt;br /&gt;
f = ...&lt;br /&gt;
 &lt;br /&gt;
# generujemy sygnał&lt;br /&gt;
t = np.arange(0,1,1/Fs)&lt;br /&gt;
s = np.sin(2*np.pi*5*t)*np.hanning(len(t))&lt;br /&gt;
 &lt;br /&gt;
# Filtrowanie z zerowym opoznieniem fazowym&lt;br /&gt;
y = filtfilt(...)&lt;br /&gt;
 &lt;br /&gt;
# Filtrowanie standardowe&lt;br /&gt;
y1 = lfilter(b,a,s)&lt;br /&gt;
 &lt;br /&gt;
# WYKRESY&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(f,20*np.log10(transmitancja)) # przeliczenie modułu transmitancji na dB&lt;br /&gt;
py.title('moduł transmitancji')&lt;br /&gt;
py.ylabel('[dB]')&lt;br /&gt;
 &lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(f[:-1], grupowe )&lt;br /&gt;
py.title('opoznienie grupowe')&lt;br /&gt;
py.xlabel('[Hz]')&lt;br /&gt;
py.ylabel('punkty')&lt;br /&gt;
 &lt;br /&gt;
py.subplot(1,2,2)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.plot(t,y,'g.')&lt;br /&gt;
py.plot(t,y1,'r')&lt;br /&gt;
py.legend(('s','filtfilt','lfilter'))&lt;br /&gt;
py.xlabel('[s]')&lt;br /&gt;
py.title('sygnaly')&lt;br /&gt;
py.show()&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
&lt;br /&gt;
Skonstruować filtry dolnoprzepustowe rzędu n=5, o częstości odcięcia 30 Hz przy częstości próbkowania sygnału 128 Hz, rp = 0,5 dB, rs = 20 dB, przy pomocy wszystkich podanych powyżej funkcji i porównać ich własności.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie ===&lt;br /&gt;
&lt;br /&gt;
Dobrać rząd i zaprojektować, a następnie zbadać własności otrzymanego filtru Butterwortha spełniającego poniższe kryteria: pasmo przenoszenia 1000-2000 Hz, pasmo tłumienia zaczyna się 500 Hz od każdego z brzegów pasma przenoszenia, próbkowanie 10 kHz, najwyżej 1 dB tętnienia w paśmie przenoszenia, co najmniej 60 dB tłumienia w paśmie tłumienia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie: filtr pasmowy do wyszukiwania wrzecion snu ===&lt;br /&gt;
&lt;br /&gt;
Zaprojektować filtr do wyławiania wrzecion snu z sygnału. Wrzeciona snu to struktury w sygnale EEG rejestrowanym w czasie snu zawierające się w paśmie 11-15 Hz. Działanie filtra przetestować na sygnale:&lt;br /&gt;
&lt;br /&gt;
http://www.fuw.edu.pl/~jarekz/SYGNALY/TF/c4spin.txt&lt;br /&gt;
&lt;br /&gt;
Sygnał ten to fragment zapisu EEG z II stadium snu elektroda C4 próbkownie 128Hz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;s = np.loadtxt('c4spin.txt') # wczytujemy sygnał z pliku tekstowego&lt;br /&gt;
Fs = 128&lt;br /&gt;
t = np.arange(0,len(s))/Fs # przygotowujemy oś czasu&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s)&lt;br /&gt;
[b,a] = butter(...)&lt;br /&gt;
sf = filtfilt(...)&lt;br /&gt;
py.plot(t,sf)&lt;br /&gt;
py.show()&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie 5: uwaga na odpowiedź impulsową ===&lt;br /&gt;
&lt;br /&gt;
Przydadzą nam się pliki: * https://drive.google.com/open?id=0BzwQ_Lscn8yDNGc0aU5jSDFFMmc Plik z sygnałem EKG * https://drive.google.com/open?id=0BzwQ_Lscn8yDOF9jX0pjcG9LSGc Plik z metadanymi do tego sygnału&lt;br /&gt;
&lt;br /&gt;
Proszę: * wykreślić pierwsze 10 sekund sygnału * zastosować filtr górnoprzepustowy Butterwartha o częstościach odcięcia: 0.01, 0.1, 0.5 -&amp;amp;gt; zaobserwuj jak długo stabilizuje się sygnał * Zastosuj filtr pasmowoprzepustowy (11 - 14 Hz) i wykreśl wynik jego zastosowania na tle poprzedniej wersji sygnału. Zinterpretuj wynik w kontekście funkcji odpowiedzi impulsowej tego filtra.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;s = np.fromfile('EKG.bin', dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''                                &lt;br /&gt;
# ustawiamy częstość próbkowania&lt;br /&gt;
Fs = 128&lt;br /&gt;
# tworzymy wektor czasu&lt;br /&gt;
t = np.arange(0,len(s))/Fs&lt;br /&gt;
&lt;br /&gt;
# ustalamy zakres indeksów sygnału i czasu do wyświetlania&lt;br /&gt;
zakres =  np.logical_and(0&amp;lt;t, t&amp;lt;10)&lt;br /&gt;
&lt;br /&gt;
py.plot(t[zakres],s[zakres])&lt;br /&gt;
# filtr górnoprzepustowy (0.01, 0.1, 0.5)&lt;br /&gt;
[b,a] = butter(... )&lt;br /&gt;
sf = filtfilt(...)&lt;br /&gt;
py.plot(t[zakres],sf[zakres])&lt;br /&gt;
&lt;br /&gt;
# filtr pasmowy &lt;br /&gt;
[bl,al] = butter(... )&lt;br /&gt;
sf_l = filtfilt(bl,al,sf)&lt;br /&gt;
py.plot(t[zakres],sf_l[zakres])&lt;br /&gt;
&lt;br /&gt;
py.show()&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zadanie: Uwaga na odpowiedź schodkową ===&lt;br /&gt;
&lt;br /&gt;
Wykorzystajmy fragment sygnału EKG z poprzedniego zadania (pomiędzy 12 a 40 -tą sekundą). * wykreśl ten fragment * zaprojektuj filtr górnoprzepustowy Butterwortha o częstości odcięcia 0.1 (potem 0.5), rzedu 1 (potem 5), * przefiltruj sygnał z tymi współczynnikami za pomocą funkcji &amp;lt;code&amp;gt;filtfilt&amp;lt;/code&amp;gt; i &amp;lt;code&amp;gt;lfilter&amp;lt;/code&amp;gt; , * dodaj do sygnału z lewej strony jego kopię odwróconą w czasie, * ten sygnał przefiltruj funkcją &amp;lt;code&amp;gt;lfilter&amp;lt;/code&amp;gt; i wykreśl jego drugą połowę, * zinterpretuj uzyskane wyniki w kontekście funkcji odpowiedzi impulsowej.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;zakres =  np.logical_and(10&amp;lt;t, t&amp;lt;40)&lt;br /&gt;
t_z = t[zakres]&lt;br /&gt;
s_z = s[zakres]&lt;br /&gt;
py.plot(t_z,s_z, label = 'oryginalny')&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
# filtr górnoprzepustowy ( 0.1, 0.5)&lt;br /&gt;
[b,a] = butter(...)&lt;br /&gt;
sff = filtfilt(...)&lt;br /&gt;
py.plot(t_z, sff, label = 'filtfilt')&lt;br /&gt;
&lt;br /&gt;
# lfilter&lt;br /&gt;
sfl = lfilter(...)&lt;br /&gt;
py.plot(t_z,...,label = 'lfilter')&lt;br /&gt;
&lt;br /&gt;
# lfilter z przedłużeniem &lt;br /&gt;
x=np.concatenate((s_z[::-1],s_z))&lt;br /&gt;
sfl_p = lfilter(...)&lt;br /&gt;
py.plot(t_z,sfl_p[len(t_z):],label = 'lfilter z przedłużaniem')&lt;br /&gt;
py.legend()&lt;br /&gt;
py.show()&amp;lt;/source&amp;gt;&lt;br /&gt;
== Przepróbkowywanie ==&lt;br /&gt;
&lt;br /&gt;
=== Przepróbkowywanie do góry: ===&lt;br /&gt;
&lt;br /&gt;
Zwiększamy częstość prókowania całkowitą ilość razy P&lt;br /&gt;
&lt;br /&gt;
Najpowszechniej stosowana metoda polega na dodaniu P zer pomiędzy istniejące próbki sygnału tak aby osiągnął on P-krotnie większą długość. Następnie taki rozciągnięty sygnał filtrujemy filtrem dolnoprzepustowym o częstości odcięcia nie większej niż częstość Nyquista oryginalnego sygnału — rozciąganie sygnału nie dokłada do niego nowej informacji więc i tak nic nie tracimy. Przykład przepróbkowania do góry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;t = np.arange(0,0.05,0.001) # czas&lt;br /&gt;
x = np.sin(2*np.pi*30*t) + np.sin(2*np.pi*60*t) # sygnał&lt;br /&gt;
 &lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(x,'.')&lt;br /&gt;
py.title('Sygnał oryginalny')&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
X = np.zeros(4*len(x))&lt;br /&gt;
X[::4] = x&lt;br /&gt;
py.plot(X,'.')&lt;br /&gt;
py.title('Sygnał poprzetykany zerami')&lt;br /&gt;
&lt;br /&gt;
[b,a] = butter(8,...) # filtr powinien przepuszczać tylko te częstości, &lt;br /&gt;
                        # które były w oryginalnym sygnale tzn. poniżej pierwotnego Nyqista&lt;br /&gt;
y = filtfilt(b,a,X); # filtrujemy dolnoprzepustowo  &lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(y,'.')&lt;br /&gt;
py.show()&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przepróbkowanie do dołu: ===&lt;br /&gt;
&lt;br /&gt;
Zmniejszamy częstość próbkowania całkowitą ilość razy. Musimy pamiętać o tym, żeby wyfiltrować to, co było w oryginalnym sygnale powyżej docelowego Nyquista, żeby uniknąć aliasingu w wynikowym sygnale.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;Fs1 = 128.0 # pierwotna częstość próbkowania [Hz]&lt;br /&gt;
FN1 = Fs1/2 # pierwotna częstość Nyquista&lt;br /&gt;
 &lt;br /&gt;
t = arange(0,1,1.0/Fs1) # czas probkowany 1/Fs1&lt;br /&gt;
f1 = 6 # Hz&lt;br /&gt;
f2 = 60&lt;br /&gt;
fi = pi/2&lt;br /&gt;
s = sin(2*pi*t*f1+fi) + sin(2*pi*t*f2+fi)&lt;br /&gt;
subplot(4,1,1)&lt;br /&gt;
plot(t,s,'.-')&lt;br /&gt;
title(u'sygnał pierwotny')&lt;br /&gt;
# obnizamy czestosc probkowania k razy&lt;br /&gt;
k = 2&lt;br /&gt;
Fs2 = Fs1/k # nowa czestosc probkowania jest k razy niższa&lt;br /&gt;
FN2 = Fs2/2 # nowa częstość Nyquista&lt;br /&gt;
[b,a] = butter(8,FN2/FN1) # przefiltrujemy filtrem dolnoprzepustowym&lt;br /&gt;
                          # tak aby nic nie zostało powyzej&lt;br /&gt;
                          # docelowej częstości Nyquista &lt;br /&gt;
ss = filtfilt(b,a,s);&lt;br /&gt;
t2 = arange(0,1,1.0/Fs2) &lt;br /&gt;
subplot(4,1,2)&lt;br /&gt;
plot(t,ss,'.-')&lt;br /&gt;
title(u'sygnał przefiltrowany dolnoprzepustowy')&lt;br /&gt;
 &lt;br /&gt;
subplot(4,1,3)&lt;br /&gt;
ss2 = ss[::k]&lt;br /&gt;
plot(t2,ss2,'.-')&lt;br /&gt;
title(u'sygnał przepróbkowany prawidłowo')&lt;br /&gt;
 &lt;br /&gt;
subplot(4,1,4)&lt;br /&gt;
ss3 = s[::k]&lt;br /&gt;
plot(t2,ss3,'.-')&lt;br /&gt;
title(u'sygnał przepróbkowany nieprawidłowo, bez filtrowania dolnoprzepustowego')&lt;br /&gt;
show()&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Zmiana częstości o wymierną ilość razy: ===&lt;br /&gt;
&lt;br /&gt;
Zmieniamy częstość próbkowania o wymierną &amp;lt;math&amp;gt;\frac{P}{Q}&amp;lt;/math&amp;gt; liczbę razy — uzyskujemy składając powyższe kroki tzn. najpierw zwiększamy częstość P-krotnie, a następnie zmniejszamy Q-krotnie.&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 6 ===&lt;br /&gt;
&lt;br /&gt;
Proszę napisać funkcję, która będzie przepróbkowywać sygnał o wymierną liczbę razy. Funkcja powinna przyjmować sygnał, częstość próbkowania, parametry P i Q i zwracać przepróbkowany sygnał i nową częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;def resample(s,fs,P=1,Q=1):&lt;br /&gt;
    if P&amp;gt;1 and isinstance(P,int):&lt;br /&gt;
        sP = np.zeros(P*len(s))&lt;br /&gt;
        sP[...] = s&lt;br /&gt;
        fs = ...&lt;br /&gt;
        [b,a] = butter(...)&lt;br /&gt;
        s = filtfilt(...)&lt;br /&gt;
    if Q&amp;gt;1 and isinstance(Q,int):&lt;br /&gt;
        fs = fs/Q &lt;br /&gt;
        [b,a] = butter(...) &lt;br /&gt;
        s = filtfilt(...)&lt;br /&gt;
        s = s[...]&lt;br /&gt;
    return s,fs&lt;br /&gt;
&lt;br /&gt;
fs = 1000&lt;br /&gt;
t = np.arange(0,0.05,0.001) # czas&lt;br /&gt;
s1 = np.sin(2*np.pi*30*t) + np.sin(2*np.pi*60*t) # sygnał&lt;br /&gt;
 &lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(s1,'.')&lt;br /&gt;
y,fs2 = resample(s1,fs,P=10,Q=1)&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(y,'.')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
fs = 128.0&lt;br /&gt;
t = np.arange(0,1,1.0/fs)&lt;br /&gt;
f1 = 6 # Hz&lt;br /&gt;
f2 = 40&lt;br /&gt;
fi = np.pi/2&lt;br /&gt;
s2 = np.sin(2*np.pi*t*f1+fi) + np.sin(2*np.pi*t*f2+fi)&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(s2,'.-')&lt;br /&gt;
y,fs2 = resample(s2,fs,P=1,Q=2)&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(y,'.-')&lt;br /&gt;
py.show()&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6206</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6206"/>
		<updated>2016-12-09T12:56:16Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;ProcesyAR&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
    /*!&lt;br /&gt;
*&lt;br /&gt;
* Twitter Bootstrap&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
/*!&lt;br /&gt;
 * Bootstrap v3.3.6 (http://getbootstrap.com)&lt;br /&gt;
 * Copyright 2011-2015 Twitter, Inc.&lt;br /&gt;
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)&lt;br /&gt;
 */&lt;br /&gt;
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */&lt;br /&gt;
html {&lt;br /&gt;
  font-family: sans-serif;&lt;br /&gt;
  -ms-text-size-adjust: 100%;&lt;br /&gt;
  -webkit-text-size-adjust: 100%;&lt;br /&gt;
}&lt;br /&gt;
body {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
article,&lt;br /&gt;
aside,&lt;br /&gt;
details,&lt;br /&gt;
figcaption,&lt;br /&gt;
figure,&lt;br /&gt;
footer,&lt;br /&gt;
header,&lt;br /&gt;
hgroup,&lt;br /&gt;
main,&lt;br /&gt;
menu,&lt;br /&gt;
nav,&lt;br /&gt;
section,&lt;br /&gt;
summary {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
audio,&lt;br /&gt;
canvas,&lt;br /&gt;
progress,&lt;br /&gt;
video {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
}&lt;br /&gt;
audio:not([controls]) {&lt;br /&gt;
  display: none;&lt;br /&gt;
  height: 0;&lt;br /&gt;
}&lt;br /&gt;
[hidden],&lt;br /&gt;
template {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
a {&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
a:active,&lt;br /&gt;
a:hover {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
abbr[title] {&lt;br /&gt;
  border-bottom: 1px dotted;&lt;br /&gt;
}&lt;br /&gt;
b,&lt;br /&gt;
strong {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
dfn {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
h1 {&lt;br /&gt;
  font-size: 2em;&lt;br /&gt;
  margin: 0.67em 0;&lt;br /&gt;
}&lt;br /&gt;
mark {&lt;br /&gt;
  background: #ff0;&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
small {&lt;br /&gt;
  font-size: 80%;&lt;br /&gt;
}&lt;br /&gt;
sub,&lt;br /&gt;
sup {&lt;br /&gt;
  font-size: 75%;&lt;br /&gt;
  line-height: 0;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
}&lt;br /&gt;
sup {&lt;br /&gt;
  top: -0.5em;&lt;br /&gt;
}&lt;br /&gt;
sub {&lt;br /&gt;
  bottom: -0.25em;&lt;br /&gt;
}&lt;br /&gt;
img {&lt;br /&gt;
  border: 0;&lt;br /&gt;
}&lt;br /&gt;
svg:not(:root) {&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
figure {&lt;br /&gt;
  margin: 1em 40px;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
  box-sizing: content-box;&lt;br /&gt;
  height: 0;&lt;br /&gt;
}&lt;br /&gt;
pre {&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
code,&lt;br /&gt;
kbd,&lt;br /&gt;
pre,&lt;br /&gt;
samp {&lt;br /&gt;
  font-family: monospace, monospace;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
}&lt;br /&gt;
button,&lt;br /&gt;
input,&lt;br /&gt;
optgroup,&lt;br /&gt;
select,&lt;br /&gt;
textarea {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  font: inherit;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
button {&lt;br /&gt;
  overflow: visible;&lt;br /&gt;
}&lt;br /&gt;
button,&lt;br /&gt;
select {&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
}&lt;br /&gt;
button,&lt;br /&gt;
html input[type=&amp;quot;button&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;reset&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;] {&lt;br /&gt;
  -webkit-appearance: button;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
button[disabled],&lt;br /&gt;
html input[disabled] {&lt;br /&gt;
  cursor: default;&lt;br /&gt;
}&lt;br /&gt;
button::-moz-focus-inner,&lt;br /&gt;
input::-moz-focus-inner {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
input {&lt;br /&gt;
  line-height: normal;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;checkbox&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;radio&amp;quot;] {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;number&amp;quot;]::-webkit-inner-spin-button,&lt;br /&gt;
input[type=&amp;quot;number&amp;quot;]::-webkit-outer-spin-button {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;] {&lt;br /&gt;
  -webkit-appearance: textfield;&lt;br /&gt;
  box-sizing: content-box;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;]::-webkit-search-cancel-button,&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;]::-webkit-search-decoration {&lt;br /&gt;
  -webkit-appearance: none;&lt;br /&gt;
}&lt;br /&gt;
fieldset {&lt;br /&gt;
  border: 1px solid #c0c0c0;&lt;br /&gt;
  margin: 0 2px;&lt;br /&gt;
  padding: 0.35em 0.625em 0.75em;&lt;br /&gt;
}&lt;br /&gt;
legend {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
textarea {&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
optgroup {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
table {&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  border-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
td,&lt;br /&gt;
th {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */&lt;br /&gt;
@media print {&lt;br /&gt;
  *,&lt;br /&gt;
  *:before,&lt;br /&gt;
  *:after {&lt;br /&gt;
    background: transparent !important;&lt;br /&gt;
    color: #000 !important;&lt;br /&gt;
    box-shadow: none !important;&lt;br /&gt;
    text-shadow: none !important;&lt;br /&gt;
  }&lt;br /&gt;
  a,&lt;br /&gt;
  a:visited {&lt;br /&gt;
    text-decoration: underline;&lt;br /&gt;
  }&lt;br /&gt;
  a[href]:after {&lt;br /&gt;
    content: &amp;quot; (&amp;quot; attr(href) &amp;quot;)&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  abbr[title]:after {&lt;br /&gt;
    content: &amp;quot; (&amp;quot; attr(title) &amp;quot;)&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  a[href^=&amp;quot;#&amp;quot;]:after,&lt;br /&gt;
  a[href^=&amp;quot;javascript:&amp;quot;]:after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  pre,&lt;br /&gt;
  blockquote {&lt;br /&gt;
    border: 1px solid #999;&lt;br /&gt;
    page-break-inside: avoid;&lt;br /&gt;
  }&lt;br /&gt;
  thead {&lt;br /&gt;
    display: table-header-group;&lt;br /&gt;
  }&lt;br /&gt;
  tr,&lt;br /&gt;
  img {&lt;br /&gt;
    page-break-inside: avoid;&lt;br /&gt;
  }&lt;br /&gt;
  img {&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
  }&lt;br /&gt;
  p,&lt;br /&gt;
  h2,&lt;br /&gt;
  h3 {&lt;br /&gt;
    orphans: 3;&lt;br /&gt;
    widows: 3;&lt;br /&gt;
  }&lt;br /&gt;
  h2,&lt;br /&gt;
  h3 {&lt;br /&gt;
    page-break-after: avoid;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
  .btn &amp;gt; .caret,&lt;br /&gt;
  .dropup &amp;gt; .btn &amp;gt; .caret {&lt;br /&gt;
    border-top-color: #000 !important;&lt;br /&gt;
  }&lt;br /&gt;
  .label {&lt;br /&gt;
    border: 1px solid #000;&lt;br /&gt;
  }&lt;br /&gt;
  .table {&lt;br /&gt;
    border-collapse: collapse !important;&lt;br /&gt;
  }&lt;br /&gt;
  .table td,&lt;br /&gt;
  .table th {&lt;br /&gt;
    background-color: #fff !important;&lt;br /&gt;
  }&lt;br /&gt;
  .table-bordered th,&lt;br /&gt;
  .table-bordered td {&lt;br /&gt;
    border: 1px solid #ddd !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: 'Glyphicons Halflings';&lt;br /&gt;
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot');&lt;br /&gt;
  src: url('../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');&lt;br /&gt;
}&lt;br /&gt;
.glyphicon {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: 1px;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font-family: 'Glyphicons Halflings';&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-asterisk:before {&lt;br /&gt;
  content: &amp;quot;\002a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-plus:before {&lt;br /&gt;
  content: &amp;quot;\002b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-euro:before,&lt;br /&gt;
.glyphicon-eur:before {&lt;br /&gt;
  content: &amp;quot;\20ac&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-minus:before {&lt;br /&gt;
  content: &amp;quot;\2212&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-cloud:before {&lt;br /&gt;
  content: &amp;quot;\2601&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-envelope:before {&lt;br /&gt;
  content: &amp;quot;\2709&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-pencil:before {&lt;br /&gt;
  content: &amp;quot;\270f&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-glass:before {&lt;br /&gt;
  content: &amp;quot;\e001&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-music:before {&lt;br /&gt;
  content: &amp;quot;\e002&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-search:before {&lt;br /&gt;
  content: &amp;quot;\e003&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-heart:before {&lt;br /&gt;
  content: &amp;quot;\e005&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-star:before {&lt;br /&gt;
  content: &amp;quot;\e006&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-star-empty:before {&lt;br /&gt;
  content: &amp;quot;\e007&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-user:before {&lt;br /&gt;
  content: &amp;quot;\e008&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-film:before {&lt;br /&gt;
  content: &amp;quot;\e009&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-th-large:before {&lt;br /&gt;
  content: &amp;quot;\e010&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-th:before {&lt;br /&gt;
  content: &amp;quot;\e011&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-th-list:before {&lt;br /&gt;
  content: &amp;quot;\e012&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ok:before {&lt;br /&gt;
  content: &amp;quot;\e013&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-remove:before {&lt;br /&gt;
  content: &amp;quot;\e014&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-zoom-in:before {&lt;br /&gt;
  content: &amp;quot;\e015&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-zoom-out:before {&lt;br /&gt;
  content: &amp;quot;\e016&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-off:before {&lt;br /&gt;
  content: &amp;quot;\e017&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-signal:before {&lt;br /&gt;
  content: &amp;quot;\e018&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-cog:before {&lt;br /&gt;
  content: &amp;quot;\e019&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-trash:before {&lt;br /&gt;
  content: &amp;quot;\e020&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-home:before {&lt;br /&gt;
  content: &amp;quot;\e021&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-file:before {&lt;br /&gt;
  content: &amp;quot;\e022&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-time:before {&lt;br /&gt;
  content: &amp;quot;\e023&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-road:before {&lt;br /&gt;
  content: &amp;quot;\e024&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-download-alt:before {&lt;br /&gt;
  content: &amp;quot;\e025&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-download:before {&lt;br /&gt;
  content: &amp;quot;\e026&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-upload:before {&lt;br /&gt;
  content: &amp;quot;\e027&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-inbox:before {&lt;br /&gt;
  content: &amp;quot;\e028&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-play-circle:before {&lt;br /&gt;
  content: &amp;quot;\e029&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-repeat:before {&lt;br /&gt;
  content: &amp;quot;\e030&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-refresh:before {&lt;br /&gt;
  content: &amp;quot;\e031&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-list-alt:before {&lt;br /&gt;
  content: &amp;quot;\e032&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-lock:before {&lt;br /&gt;
  content: &amp;quot;\e033&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-flag:before {&lt;br /&gt;
  content: &amp;quot;\e034&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-headphones:before {&lt;br /&gt;
  content: &amp;quot;\e035&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-volume-off:before {&lt;br /&gt;
  content: &amp;quot;\e036&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-volume-down:before {&lt;br /&gt;
  content: &amp;quot;\e037&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-volume-up:before {&lt;br /&gt;
  content: &amp;quot;\e038&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-qrcode:before {&lt;br /&gt;
  content: &amp;quot;\e039&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-barcode:before {&lt;br /&gt;
  content: &amp;quot;\e040&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tag:before {&lt;br /&gt;
  content: &amp;quot;\e041&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tags:before {&lt;br /&gt;
  content: &amp;quot;\e042&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-book:before {&lt;br /&gt;
  content: &amp;quot;\e043&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bookmark:before {&lt;br /&gt;
  content: &amp;quot;\e044&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-print:before {&lt;br /&gt;
  content: &amp;quot;\e045&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-camera:before {&lt;br /&gt;
  content: &amp;quot;\e046&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-font:before {&lt;br /&gt;
  content: &amp;quot;\e047&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bold:before {&lt;br /&gt;
  content: &amp;quot;\e048&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-italic:before {&lt;br /&gt;
  content: &amp;quot;\e049&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-text-height:before {&lt;br /&gt;
  content: &amp;quot;\e050&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-text-width:before {&lt;br /&gt;
  content: &amp;quot;\e051&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-align-left:before {&lt;br /&gt;
  content: &amp;quot;\e052&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-align-center:before {&lt;br /&gt;
  content: &amp;quot;\e053&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-align-right:before {&lt;br /&gt;
  content: &amp;quot;\e054&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-align-justify:before {&lt;br /&gt;
  content: &amp;quot;\e055&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-list:before {&lt;br /&gt;
  content: &amp;quot;\e056&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-indent-left:before {&lt;br /&gt;
  content: &amp;quot;\e057&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-indent-right:before {&lt;br /&gt;
  content: &amp;quot;\e058&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-facetime-video:before {&lt;br /&gt;
  content: &amp;quot;\e059&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-picture:before {&lt;br /&gt;
  content: &amp;quot;\e060&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-map-marker:before {&lt;br /&gt;
  content: &amp;quot;\e062&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-adjust:before {&lt;br /&gt;
  content: &amp;quot;\e063&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tint:before {&lt;br /&gt;
  content: &amp;quot;\e064&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-edit:before {&lt;br /&gt;
  content: &amp;quot;\e065&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-share:before {&lt;br /&gt;
  content: &amp;quot;\e066&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-check:before {&lt;br /&gt;
  content: &amp;quot;\e067&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-move:before {&lt;br /&gt;
  content: &amp;quot;\e068&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-step-backward:before {&lt;br /&gt;
  content: &amp;quot;\e069&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-fast-backward:before {&lt;br /&gt;
  content: &amp;quot;\e070&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-backward:before {&lt;br /&gt;
  content: &amp;quot;\e071&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-play:before {&lt;br /&gt;
  content: &amp;quot;\e072&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-pause:before {&lt;br /&gt;
  content: &amp;quot;\e073&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-stop:before {&lt;br /&gt;
  content: &amp;quot;\e074&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-forward:before {&lt;br /&gt;
  content: &amp;quot;\e075&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-fast-forward:before {&lt;br /&gt;
  content: &amp;quot;\e076&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-step-forward:before {&lt;br /&gt;
  content: &amp;quot;\e077&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-eject:before {&lt;br /&gt;
  content: &amp;quot;\e078&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-chevron-left:before {&lt;br /&gt;
  content: &amp;quot;\e079&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-chevron-right:before {&lt;br /&gt;
  content: &amp;quot;\e080&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-plus-sign:before {&lt;br /&gt;
  content: &amp;quot;\e081&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-minus-sign:before {&lt;br /&gt;
  content: &amp;quot;\e082&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-remove-sign:before {&lt;br /&gt;
  content: &amp;quot;\e083&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ok-sign:before {&lt;br /&gt;
  content: &amp;quot;\e084&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-question-sign:before {&lt;br /&gt;
  content: &amp;quot;\e085&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-info-sign:before {&lt;br /&gt;
  content: &amp;quot;\e086&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-screenshot:before {&lt;br /&gt;
  content: &amp;quot;\e087&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-remove-circle:before {&lt;br /&gt;
  content: &amp;quot;\e088&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ok-circle:before {&lt;br /&gt;
  content: &amp;quot;\e089&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ban-circle:before {&lt;br /&gt;
  content: &amp;quot;\e090&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-arrow-left:before {&lt;br /&gt;
  content: &amp;quot;\e091&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-arrow-right:before {&lt;br /&gt;
  content: &amp;quot;\e092&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-arrow-up:before {&lt;br /&gt;
  content: &amp;quot;\e093&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-arrow-down:before {&lt;br /&gt;
  content: &amp;quot;\e094&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-share-alt:before {&lt;br /&gt;
  content: &amp;quot;\e095&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-resize-full:before {&lt;br /&gt;
  content: &amp;quot;\e096&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-resize-small:before {&lt;br /&gt;
  content: &amp;quot;\e097&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-exclamation-sign:before {&lt;br /&gt;
  content: &amp;quot;\e101&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-gift:before {&lt;br /&gt;
  content: &amp;quot;\e102&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-leaf:before {&lt;br /&gt;
  content: &amp;quot;\e103&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-fire:before {&lt;br /&gt;
  content: &amp;quot;\e104&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-eye-open:before {&lt;br /&gt;
  content: &amp;quot;\e105&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-eye-close:before {&lt;br /&gt;
  content: &amp;quot;\e106&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-warning-sign:before {&lt;br /&gt;
  content: &amp;quot;\e107&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-plane:before {&lt;br /&gt;
  content: &amp;quot;\e108&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-calendar:before {&lt;br /&gt;
  content: &amp;quot;\e109&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-random:before {&lt;br /&gt;
  content: &amp;quot;\e110&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-comment:before {&lt;br /&gt;
  content: &amp;quot;\e111&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-magnet:before {&lt;br /&gt;
  content: &amp;quot;\e112&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-chevron-up:before {&lt;br /&gt;
  content: &amp;quot;\e113&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-chevron-down:before {&lt;br /&gt;
  content: &amp;quot;\e114&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-retweet:before {&lt;br /&gt;
  content: &amp;quot;\e115&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-shopping-cart:before {&lt;br /&gt;
  content: &amp;quot;\e116&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-folder-close:before {&lt;br /&gt;
  content: &amp;quot;\e117&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-folder-open:before {&lt;br /&gt;
  content: &amp;quot;\e118&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-resize-vertical:before {&lt;br /&gt;
  content: &amp;quot;\e119&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-resize-horizontal:before {&lt;br /&gt;
  content: &amp;quot;\e120&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hdd:before {&lt;br /&gt;
  content: &amp;quot;\e121&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bullhorn:before {&lt;br /&gt;
  content: &amp;quot;\e122&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bell:before {&lt;br /&gt;
  content: &amp;quot;\e123&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-certificate:before {&lt;br /&gt;
  content: &amp;quot;\e124&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-thumbs-up:before {&lt;br /&gt;
  content: &amp;quot;\e125&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-thumbs-down:before {&lt;br /&gt;
  content: &amp;quot;\e126&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hand-right:before {&lt;br /&gt;
  content: &amp;quot;\e127&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hand-left:before {&lt;br /&gt;
  content: &amp;quot;\e128&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hand-up:before {&lt;br /&gt;
  content: &amp;quot;\e129&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hand-down:before {&lt;br /&gt;
  content: &amp;quot;\e130&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-circle-arrow-right:before {&lt;br /&gt;
  content: &amp;quot;\e131&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-circle-arrow-left:before {&lt;br /&gt;
  content: &amp;quot;\e132&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-circle-arrow-up:before {&lt;br /&gt;
  content: &amp;quot;\e133&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-circle-arrow-down:before {&lt;br /&gt;
  content: &amp;quot;\e134&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-globe:before {&lt;br /&gt;
  content: &amp;quot;\e135&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-wrench:before {&lt;br /&gt;
  content: &amp;quot;\e136&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tasks:before {&lt;br /&gt;
  content: &amp;quot;\e137&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-filter:before {&lt;br /&gt;
  content: &amp;quot;\e138&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-briefcase:before {&lt;br /&gt;
  content: &amp;quot;\e139&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-fullscreen:before {&lt;br /&gt;
  content: &amp;quot;\e140&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-dashboard:before {&lt;br /&gt;
  content: &amp;quot;\e141&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-paperclip:before {&lt;br /&gt;
  content: &amp;quot;\e142&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-heart-empty:before {&lt;br /&gt;
  content: &amp;quot;\e143&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-link:before {&lt;br /&gt;
  content: &amp;quot;\e144&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-phone:before {&lt;br /&gt;
  content: &amp;quot;\e145&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-pushpin:before {&lt;br /&gt;
  content: &amp;quot;\e146&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-usd:before {&lt;br /&gt;
  content: &amp;quot;\e148&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-gbp:before {&lt;br /&gt;
  content: &amp;quot;\e149&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort:before {&lt;br /&gt;
  content: &amp;quot;\e150&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort-by-alphabet:before {&lt;br /&gt;
  content: &amp;quot;\e151&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort-by-alphabet-alt:before {&lt;br /&gt;
  content: &amp;quot;\e152&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort-by-order:before {&lt;br /&gt;
  content: &amp;quot;\e153&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort-by-order-alt:before {&lt;br /&gt;
  content: &amp;quot;\e154&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort-by-attributes:before {&lt;br /&gt;
  content: &amp;quot;\e155&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sort-by-attributes-alt:before {&lt;br /&gt;
  content: &amp;quot;\e156&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-unchecked:before {&lt;br /&gt;
  content: &amp;quot;\e157&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-expand:before {&lt;br /&gt;
  content: &amp;quot;\e158&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-collapse-down:before {&lt;br /&gt;
  content: &amp;quot;\e159&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-collapse-up:before {&lt;br /&gt;
  content: &amp;quot;\e160&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-log-in:before {&lt;br /&gt;
  content: &amp;quot;\e161&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-flash:before {&lt;br /&gt;
  content: &amp;quot;\e162&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-log-out:before {&lt;br /&gt;
  content: &amp;quot;\e163&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-new-window:before {&lt;br /&gt;
  content: &amp;quot;\e164&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-record:before {&lt;br /&gt;
  content: &amp;quot;\e165&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-save:before {&lt;br /&gt;
  content: &amp;quot;\e166&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-open:before {&lt;br /&gt;
  content: &amp;quot;\e167&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-saved:before {&lt;br /&gt;
  content: &amp;quot;\e168&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-import:before {&lt;br /&gt;
  content: &amp;quot;\e169&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-export:before {&lt;br /&gt;
  content: &amp;quot;\e170&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-send:before {&lt;br /&gt;
  content: &amp;quot;\e171&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-floppy-disk:before {&lt;br /&gt;
  content: &amp;quot;\e172&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-floppy-saved:before {&lt;br /&gt;
  content: &amp;quot;\e173&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-floppy-remove:before {&lt;br /&gt;
  content: &amp;quot;\e174&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-floppy-save:before {&lt;br /&gt;
  content: &amp;quot;\e175&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-floppy-open:before {&lt;br /&gt;
  content: &amp;quot;\e176&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-credit-card:before {&lt;br /&gt;
  content: &amp;quot;\e177&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-transfer:before {&lt;br /&gt;
  content: &amp;quot;\e178&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-cutlery:before {&lt;br /&gt;
  content: &amp;quot;\e179&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-header:before {&lt;br /&gt;
  content: &amp;quot;\e180&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-compressed:before {&lt;br /&gt;
  content: &amp;quot;\e181&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-earphone:before {&lt;br /&gt;
  content: &amp;quot;\e182&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-phone-alt:before {&lt;br /&gt;
  content: &amp;quot;\e183&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tower:before {&lt;br /&gt;
  content: &amp;quot;\e184&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-stats:before {&lt;br /&gt;
  content: &amp;quot;\e185&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sd-video:before {&lt;br /&gt;
  content: &amp;quot;\e186&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hd-video:before {&lt;br /&gt;
  content: &amp;quot;\e187&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-subtitles:before {&lt;br /&gt;
  content: &amp;quot;\e188&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sound-stereo:before {&lt;br /&gt;
  content: &amp;quot;\e189&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sound-dolby:before {&lt;br /&gt;
  content: &amp;quot;\e190&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sound-5-1:before {&lt;br /&gt;
  content: &amp;quot;\e191&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sound-6-1:before {&lt;br /&gt;
  content: &amp;quot;\e192&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sound-7-1:before {&lt;br /&gt;
  content: &amp;quot;\e193&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-copyright-mark:before {&lt;br /&gt;
  content: &amp;quot;\e194&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-registration-mark:before {&lt;br /&gt;
  content: &amp;quot;\e195&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-cloud-download:before {&lt;br /&gt;
  content: &amp;quot;\e197&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-cloud-upload:before {&lt;br /&gt;
  content: &amp;quot;\e198&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tree-conifer:before {&lt;br /&gt;
  content: &amp;quot;\e199&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tree-deciduous:before {&lt;br /&gt;
  content: &amp;quot;\e200&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-cd:before {&lt;br /&gt;
  content: &amp;quot;\e201&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-save-file:before {&lt;br /&gt;
  content: &amp;quot;\e202&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-open-file:before {&lt;br /&gt;
  content: &amp;quot;\e203&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-level-up:before {&lt;br /&gt;
  content: &amp;quot;\e204&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-copy:before {&lt;br /&gt;
  content: &amp;quot;\e205&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-paste:before {&lt;br /&gt;
  content: &amp;quot;\e206&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-alert:before {&lt;br /&gt;
  content: &amp;quot;\e209&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-equalizer:before {&lt;br /&gt;
  content: &amp;quot;\e210&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-king:before {&lt;br /&gt;
  content: &amp;quot;\e211&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-queen:before {&lt;br /&gt;
  content: &amp;quot;\e212&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-pawn:before {&lt;br /&gt;
  content: &amp;quot;\e213&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bishop:before {&lt;br /&gt;
  content: &amp;quot;\e214&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-knight:before {&lt;br /&gt;
  content: &amp;quot;\e215&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-baby-formula:before {&lt;br /&gt;
  content: &amp;quot;\e216&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-tent:before {&lt;br /&gt;
  content: &amp;quot;\26fa&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-blackboard:before {&lt;br /&gt;
  content: &amp;quot;\e218&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bed:before {&lt;br /&gt;
  content: &amp;quot;\e219&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-apple:before {&lt;br /&gt;
  content: &amp;quot;\f8ff&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-erase:before {&lt;br /&gt;
  content: &amp;quot;\e221&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-hourglass:before {&lt;br /&gt;
  content: &amp;quot;\231b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-lamp:before {&lt;br /&gt;
  content: &amp;quot;\e223&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-duplicate:before {&lt;br /&gt;
  content: &amp;quot;\e224&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-piggy-bank:before {&lt;br /&gt;
  content: &amp;quot;\e225&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-scissors:before {&lt;br /&gt;
  content: &amp;quot;\e226&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-bitcoin:before {&lt;br /&gt;
  content: &amp;quot;\e227&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-btc:before {&lt;br /&gt;
  content: &amp;quot;\e227&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-xbt:before {&lt;br /&gt;
  content: &amp;quot;\e227&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-yen:before {&lt;br /&gt;
  content: &amp;quot;\00a5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-jpy:before {&lt;br /&gt;
  content: &amp;quot;\00a5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ruble:before {&lt;br /&gt;
  content: &amp;quot;\20bd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-rub:before {&lt;br /&gt;
  content: &amp;quot;\20bd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-scale:before {&lt;br /&gt;
  content: &amp;quot;\e230&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ice-lolly:before {&lt;br /&gt;
  content: &amp;quot;\e231&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-ice-lolly-tasted:before {&lt;br /&gt;
  content: &amp;quot;\e232&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-education:before {&lt;br /&gt;
  content: &amp;quot;\e233&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-option-horizontal:before {&lt;br /&gt;
  content: &amp;quot;\e234&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-option-vertical:before {&lt;br /&gt;
  content: &amp;quot;\e235&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-menu-hamburger:before {&lt;br /&gt;
  content: &amp;quot;\e236&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-modal-window:before {&lt;br /&gt;
  content: &amp;quot;\e237&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-oil:before {&lt;br /&gt;
  content: &amp;quot;\e238&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-grain:before {&lt;br /&gt;
  content: &amp;quot;\e239&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-sunglasses:before {&lt;br /&gt;
  content: &amp;quot;\e240&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-text-size:before {&lt;br /&gt;
  content: &amp;quot;\e241&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-text-color:before {&lt;br /&gt;
  content: &amp;quot;\e242&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-text-background:before {&lt;br /&gt;
  content: &amp;quot;\e243&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-object-align-top:before {&lt;br /&gt;
  content: &amp;quot;\e244&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-object-align-bottom:before {&lt;br /&gt;
  content: &amp;quot;\e245&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-object-align-horizontal:before {&lt;br /&gt;
  content: &amp;quot;\e246&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-object-align-left:before {&lt;br /&gt;
  content: &amp;quot;\e247&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-object-align-vertical:before {&lt;br /&gt;
  content: &amp;quot;\e248&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-object-align-right:before {&lt;br /&gt;
  content: &amp;quot;\e249&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-triangle-right:before {&lt;br /&gt;
  content: &amp;quot;\e250&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-triangle-left:before {&lt;br /&gt;
  content: &amp;quot;\e251&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-triangle-bottom:before {&lt;br /&gt;
  content: &amp;quot;\e252&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-triangle-top:before {&lt;br /&gt;
  content: &amp;quot;\e253&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-console:before {&lt;br /&gt;
  content: &amp;quot;\e254&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-superscript:before {&lt;br /&gt;
  content: &amp;quot;\e255&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-subscript:before {&lt;br /&gt;
  content: &amp;quot;\e256&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-menu-left:before {&lt;br /&gt;
  content: &amp;quot;\e257&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-menu-right:before {&lt;br /&gt;
  content: &amp;quot;\e258&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-menu-down:before {&lt;br /&gt;
  content: &amp;quot;\e259&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.glyphicon-menu-up:before {&lt;br /&gt;
  content: &amp;quot;\e260&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
* {&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
*:before,&lt;br /&gt;
*:after {&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
html {&lt;br /&gt;
  font-size: 10px;&lt;br /&gt;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
body {&lt;br /&gt;
  font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
input,&lt;br /&gt;
button,&lt;br /&gt;
select,&lt;br /&gt;
textarea {&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
a {&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
a:hover,&lt;br /&gt;
a:focus {&lt;br /&gt;
  color: #23527c;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
a:focus {&lt;br /&gt;
  outline: thin dotted;&lt;br /&gt;
  outline: 5px auto -webkit-focus-ring-color;&lt;br /&gt;
  outline-offset: -2px;&lt;br /&gt;
}&lt;br /&gt;
figure {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
img {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.img-responsive,&lt;br /&gt;
.thumbnail &amp;gt; img,&lt;br /&gt;
.thumbnail a &amp;gt; img,&lt;br /&gt;
.carousel-inner &amp;gt; .item &amp;gt; img,&lt;br /&gt;
.carousel-inner &amp;gt; .item &amp;gt; a &amp;gt; img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.img-rounded {&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.img-thumbnail {&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-transition: all 0.2s ease-in-out;&lt;br /&gt;
  -o-transition: all 0.2s ease-in-out;&lt;br /&gt;
  transition: all 0.2s ease-in-out;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.img-circle {&lt;br /&gt;
  border-radius: 50%;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
  margin-top: 18px;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  border: 0;&lt;br /&gt;
  border-top: 1px solid #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
.sr-only {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  width: 1px;&lt;br /&gt;
  height: 1px;&lt;br /&gt;
  margin: -1px;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  clip: rect(0, 0, 0, 0);&lt;br /&gt;
  border: 0;&lt;br /&gt;
}&lt;br /&gt;
.sr-only-focusable:active,&lt;br /&gt;
.sr-only-focusable:focus {&lt;br /&gt;
  position: static;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  overflow: visible;&lt;br /&gt;
  clip: auto;&lt;br /&gt;
}&lt;br /&gt;
[role=&amp;quot;button&amp;quot;] {&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
h1,&lt;br /&gt;
h2,&lt;br /&gt;
h3,&lt;br /&gt;
h4,&lt;br /&gt;
h5,&lt;br /&gt;
h6,&lt;br /&gt;
.h1,&lt;br /&gt;
.h2,&lt;br /&gt;
.h3,&lt;br /&gt;
.h4,&lt;br /&gt;
.h5,&lt;br /&gt;
.h6 {&lt;br /&gt;
  font-family: inherit;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  line-height: 1.1;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
h1 small,&lt;br /&gt;
h2 small,&lt;br /&gt;
h3 small,&lt;br /&gt;
h4 small,&lt;br /&gt;
h5 small,&lt;br /&gt;
h6 small,&lt;br /&gt;
.h1 small,&lt;br /&gt;
.h2 small,&lt;br /&gt;
.h3 small,&lt;br /&gt;
.h4 small,&lt;br /&gt;
.h5 small,&lt;br /&gt;
.h6 small,&lt;br /&gt;
h1 .small,&lt;br /&gt;
h2 .small,&lt;br /&gt;
h3 .small,&lt;br /&gt;
h4 .small,&lt;br /&gt;
h5 .small,&lt;br /&gt;
h6 .small,&lt;br /&gt;
.h1 .small,&lt;br /&gt;
.h2 .small,&lt;br /&gt;
.h3 .small,&lt;br /&gt;
.h4 .small,&lt;br /&gt;
.h5 .small,&lt;br /&gt;
.h6 .small {&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
h1,&lt;br /&gt;
.h1,&lt;br /&gt;
h2,&lt;br /&gt;
.h2,&lt;br /&gt;
h3,&lt;br /&gt;
.h3 {&lt;br /&gt;
  margin-top: 18px;&lt;br /&gt;
  margin-bottom: 9px;&lt;br /&gt;
}&lt;br /&gt;
h1 small,&lt;br /&gt;
.h1 small,&lt;br /&gt;
h2 small,&lt;br /&gt;
.h2 small,&lt;br /&gt;
h3 small,&lt;br /&gt;
.h3 small,&lt;br /&gt;
h1 .small,&lt;br /&gt;
.h1 .small,&lt;br /&gt;
h2 .small,&lt;br /&gt;
.h2 .small,&lt;br /&gt;
h3 .small,&lt;br /&gt;
.h3 .small {&lt;br /&gt;
  font-size: 65%;&lt;br /&gt;
}&lt;br /&gt;
h4,&lt;br /&gt;
.h4,&lt;br /&gt;
h5,&lt;br /&gt;
.h5,&lt;br /&gt;
h6,&lt;br /&gt;
.h6 {&lt;br /&gt;
  margin-top: 9px;&lt;br /&gt;
  margin-bottom: 9px;&lt;br /&gt;
}&lt;br /&gt;
h4 small,&lt;br /&gt;
.h4 small,&lt;br /&gt;
h5 small,&lt;br /&gt;
.h5 small,&lt;br /&gt;
h6 small,&lt;br /&gt;
.h6 small,&lt;br /&gt;
h4 .small,&lt;br /&gt;
.h4 .small,&lt;br /&gt;
h5 .small,&lt;br /&gt;
.h5 .small,&lt;br /&gt;
h6 .small,&lt;br /&gt;
.h6 .small {&lt;br /&gt;
  font-size: 75%;&lt;br /&gt;
}&lt;br /&gt;
h1,&lt;br /&gt;
.h1 {&lt;br /&gt;
  font-size: 33px;&lt;br /&gt;
}&lt;br /&gt;
h2,&lt;br /&gt;
.h2 {&lt;br /&gt;
  font-size: 27px;&lt;br /&gt;
}&lt;br /&gt;
h3,&lt;br /&gt;
.h3 {&lt;br /&gt;
  font-size: 23px;&lt;br /&gt;
}&lt;br /&gt;
h4,&lt;br /&gt;
.h4 {&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
}&lt;br /&gt;
h5,&lt;br /&gt;
.h5 {&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
}&lt;br /&gt;
h6,&lt;br /&gt;
.h6 {&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
}&lt;br /&gt;
p {&lt;br /&gt;
  margin: 0 0 9px;&lt;br /&gt;
}&lt;br /&gt;
.lead {&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  font-weight: 300;&lt;br /&gt;
  line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .lead {&lt;br /&gt;
    font-size: 19.5px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
small,&lt;br /&gt;
.small {&lt;br /&gt;
  font-size: 92%;&lt;br /&gt;
}&lt;br /&gt;
mark,&lt;br /&gt;
.mark {&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
  padding: .2em;&lt;br /&gt;
}&lt;br /&gt;
.text-left {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
.text-right {&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.text-center {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.text-justify {&lt;br /&gt;
  text-align: justify;&lt;br /&gt;
}&lt;br /&gt;
.text-nowrap {&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.text-lowercase {&lt;br /&gt;
  text-transform: lowercase;&lt;br /&gt;
}&lt;br /&gt;
.text-uppercase {&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.text-capitalize {&lt;br /&gt;
  text-transform: capitalize;&lt;br /&gt;
}&lt;br /&gt;
.text-muted {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.text-primary {&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
a.text-primary:hover,&lt;br /&gt;
a.text-primary:focus {&lt;br /&gt;
  color: #286090;&lt;br /&gt;
}&lt;br /&gt;
.text-success {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
a.text-success:hover,&lt;br /&gt;
a.text-success:focus {&lt;br /&gt;
  color: #2b542c;&lt;br /&gt;
}&lt;br /&gt;
.text-info {&lt;br /&gt;
  color: #31708f;&lt;br /&gt;
}&lt;br /&gt;
a.text-info:hover,&lt;br /&gt;
a.text-info:focus {&lt;br /&gt;
  color: #245269;&lt;br /&gt;
}&lt;br /&gt;
.text-warning {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
a.text-warning:hover,&lt;br /&gt;
a.text-warning:focus {&lt;br /&gt;
  color: #66512c;&lt;br /&gt;
}&lt;br /&gt;
.text-danger {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
a.text-danger:hover,&lt;br /&gt;
a.text-danger:focus {&lt;br /&gt;
  color: #843534;&lt;br /&gt;
}&lt;br /&gt;
.bg-primary {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
a.bg-primary:hover,&lt;br /&gt;
a.bg-primary:focus {&lt;br /&gt;
  background-color: #286090;&lt;br /&gt;
}&lt;br /&gt;
.bg-success {&lt;br /&gt;
  background-color: #dff0d8;&lt;br /&gt;
}&lt;br /&gt;
a.bg-success:hover,&lt;br /&gt;
a.bg-success:focus {&lt;br /&gt;
  background-color: #c1e2b3;&lt;br /&gt;
}&lt;br /&gt;
.bg-info {&lt;br /&gt;
  background-color: #d9edf7;&lt;br /&gt;
}&lt;br /&gt;
a.bg-info:hover,&lt;br /&gt;
a.bg-info:focus {&lt;br /&gt;
  background-color: #afd9ee;&lt;br /&gt;
}&lt;br /&gt;
.bg-warning {&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
}&lt;br /&gt;
a.bg-warning:hover,&lt;br /&gt;
a.bg-warning:focus {&lt;br /&gt;
  background-color: #f7ecb5;&lt;br /&gt;
}&lt;br /&gt;
.bg-danger {&lt;br /&gt;
  background-color: #f2dede;&lt;br /&gt;
}&lt;br /&gt;
a.bg-danger:hover,&lt;br /&gt;
a.bg-danger:focus {&lt;br /&gt;
  background-color: #e4b9b9;&lt;br /&gt;
}&lt;br /&gt;
.page-header {&lt;br /&gt;
  padding-bottom: 8px;&lt;br /&gt;
  margin: 36px 0 18px;&lt;br /&gt;
  border-bottom: 1px solid #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
ul,&lt;br /&gt;
ol {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-bottom: 9px;&lt;br /&gt;
}&lt;br /&gt;
ul ul,&lt;br /&gt;
ol ul,&lt;br /&gt;
ul ol,&lt;br /&gt;
ol ol {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.list-unstyled {&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
}&lt;br /&gt;
.list-inline {&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  margin-left: -5px;&lt;br /&gt;
}&lt;br /&gt;
.list-inline &amp;gt; li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding-left: 5px;&lt;br /&gt;
  padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
dl {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
}&lt;br /&gt;
dt,&lt;br /&gt;
dd {&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
}&lt;br /&gt;
dt {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
dd {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .dl-horizontal dt {&lt;br /&gt;
    float: left;&lt;br /&gt;
    width: 160px;&lt;br /&gt;
    clear: left;&lt;br /&gt;
    text-align: right;&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    text-overflow: ellipsis;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
  }&lt;br /&gt;
  .dl-horizontal dd {&lt;br /&gt;
    margin-left: 180px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
abbr[title],&lt;br /&gt;
abbr[data-original-title] {&lt;br /&gt;
  cursor: help;&lt;br /&gt;
  border-bottom: 1px dotted #777777;&lt;br /&gt;
}&lt;br /&gt;
.initialism {&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
blockquote {&lt;br /&gt;
  padding: 9px 18px;&lt;br /&gt;
  margin: 0 0 18px;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  border-left: 5px solid #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
blockquote p:last-child,&lt;br /&gt;
blockquote ul:last-child,&lt;br /&gt;
blockquote ol:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
blockquote footer,&lt;br /&gt;
blockquote small,&lt;br /&gt;
blockquote .small {&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-size: 80%;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
blockquote footer:before,&lt;br /&gt;
blockquote small:before,&lt;br /&gt;
blockquote .small:before {&lt;br /&gt;
  content: '\2014 \00A0';&lt;br /&gt;
}&lt;br /&gt;
.blockquote-reverse,&lt;br /&gt;
blockquote.pull-right {&lt;br /&gt;
  padding-right: 15px;&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  border-right: 5px solid #eeeeee;&lt;br /&gt;
  border-left: 0;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
}&lt;br /&gt;
.blockquote-reverse footer:before,&lt;br /&gt;
blockquote.pull-right footer:before,&lt;br /&gt;
.blockquote-reverse small:before,&lt;br /&gt;
blockquote.pull-right small:before,&lt;br /&gt;
.blockquote-reverse .small:before,&lt;br /&gt;
blockquote.pull-right .small:before {&lt;br /&gt;
  content: '';&lt;br /&gt;
}&lt;br /&gt;
.blockquote-reverse footer:after,&lt;br /&gt;
blockquote.pull-right footer:after,&lt;br /&gt;
.blockquote-reverse small:after,&lt;br /&gt;
blockquote.pull-right small:after,&lt;br /&gt;
.blockquote-reverse .small:after,&lt;br /&gt;
blockquote.pull-right .small:after {&lt;br /&gt;
  content: '\00A0 \2014';&lt;br /&gt;
}&lt;br /&gt;
address {&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
}&lt;br /&gt;
code,&lt;br /&gt;
kbd,&lt;br /&gt;
pre,&lt;br /&gt;
samp {&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
}&lt;br /&gt;
code {&lt;br /&gt;
  padding: 2px 4px;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  color: #c7254e;&lt;br /&gt;
  background-color: #f9f2f4;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
kbd {&lt;br /&gt;
  padding: 2px 4px;&lt;br /&gt;
  font-size: 90%;&lt;br /&gt;
  color: #888;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);&lt;br /&gt;
}&lt;br /&gt;
kbd kbd {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
pre {&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 8.5px;&lt;br /&gt;
  margin: 0 0 9px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  word-break: break-all;&lt;br /&gt;
  word-wrap: break-word;&lt;br /&gt;
  color: #333333;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
pre code {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  white-space: pre-wrap;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.pre-scrollable {&lt;br /&gt;
  max-height: 340px;&lt;br /&gt;
  overflow-y: scroll;&lt;br /&gt;
}&lt;br /&gt;
.container {&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
  padding-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .container {&lt;br /&gt;
    width: 768px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) {&lt;br /&gt;
  .container {&lt;br /&gt;
    width: 940px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .container {&lt;br /&gt;
    width: 1140px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.container-fluid {&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
  padding-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
.row {&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  min-height: 1px;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
  padding-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-12 {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-11 {&lt;br /&gt;
  width: 91.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-10 {&lt;br /&gt;
  width: 83.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-9 {&lt;br /&gt;
  width: 75%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-8 {&lt;br /&gt;
  width: 66.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-7 {&lt;br /&gt;
  width: 58.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-6 {&lt;br /&gt;
  width: 50%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-5 {&lt;br /&gt;
  width: 41.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-4 {&lt;br /&gt;
  width: 33.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-3 {&lt;br /&gt;
  width: 25%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-2 {&lt;br /&gt;
  width: 16.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-1 {&lt;br /&gt;
  width: 8.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-12 {&lt;br /&gt;
  right: 100%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-11 {&lt;br /&gt;
  right: 91.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-10 {&lt;br /&gt;
  right: 83.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-9 {&lt;br /&gt;
  right: 75%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-8 {&lt;br /&gt;
  right: 66.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-7 {&lt;br /&gt;
  right: 58.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-6 {&lt;br /&gt;
  right: 50%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-5 {&lt;br /&gt;
  right: 41.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-4 {&lt;br /&gt;
  right: 33.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-3 {&lt;br /&gt;
  right: 25%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-2 {&lt;br /&gt;
  right: 16.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-1 {&lt;br /&gt;
  right: 8.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-pull-0 {&lt;br /&gt;
  right: auto;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-12 {&lt;br /&gt;
  left: 100%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-11 {&lt;br /&gt;
  left: 91.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-10 {&lt;br /&gt;
  left: 83.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-9 {&lt;br /&gt;
  left: 75%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-8 {&lt;br /&gt;
  left: 66.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-7 {&lt;br /&gt;
  left: 58.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-6 {&lt;br /&gt;
  left: 50%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-5 {&lt;br /&gt;
  left: 41.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-4 {&lt;br /&gt;
  left: 33.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-3 {&lt;br /&gt;
  left: 25%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-2 {&lt;br /&gt;
  left: 16.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-1 {&lt;br /&gt;
  left: 8.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-push-0 {&lt;br /&gt;
  left: auto;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-12 {&lt;br /&gt;
  margin-left: 100%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-11 {&lt;br /&gt;
  margin-left: 91.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-10 {&lt;br /&gt;
  margin-left: 83.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-9 {&lt;br /&gt;
  margin-left: 75%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-8 {&lt;br /&gt;
  margin-left: 66.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-7 {&lt;br /&gt;
  margin-left: 58.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-6 {&lt;br /&gt;
  margin-left: 50%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-5 {&lt;br /&gt;
  margin-left: 41.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-4 {&lt;br /&gt;
  margin-left: 33.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-3 {&lt;br /&gt;
  margin-left: 25%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-2 {&lt;br /&gt;
  margin-left: 16.66666667%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-1 {&lt;br /&gt;
  margin-left: 8.33333333%;&lt;br /&gt;
}&lt;br /&gt;
.col-xs-offset-0 {&lt;br /&gt;
  margin-left: 0%;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {&lt;br /&gt;
    float: left;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-12 {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-11 {&lt;br /&gt;
    width: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-10 {&lt;br /&gt;
    width: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-9 {&lt;br /&gt;
    width: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-8 {&lt;br /&gt;
    width: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-7 {&lt;br /&gt;
    width: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-6 {&lt;br /&gt;
    width: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-5 {&lt;br /&gt;
    width: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-4 {&lt;br /&gt;
    width: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-3 {&lt;br /&gt;
    width: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-2 {&lt;br /&gt;
    width: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-1 {&lt;br /&gt;
    width: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-12 {&lt;br /&gt;
    right: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-11 {&lt;br /&gt;
    right: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-10 {&lt;br /&gt;
    right: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-9 {&lt;br /&gt;
    right: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-8 {&lt;br /&gt;
    right: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-7 {&lt;br /&gt;
    right: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-6 {&lt;br /&gt;
    right: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-5 {&lt;br /&gt;
    right: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-4 {&lt;br /&gt;
    right: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-3 {&lt;br /&gt;
    right: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-2 {&lt;br /&gt;
    right: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-1 {&lt;br /&gt;
    right: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-pull-0 {&lt;br /&gt;
    right: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-12 {&lt;br /&gt;
    left: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-11 {&lt;br /&gt;
    left: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-10 {&lt;br /&gt;
    left: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-9 {&lt;br /&gt;
    left: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-8 {&lt;br /&gt;
    left: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-7 {&lt;br /&gt;
    left: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-6 {&lt;br /&gt;
    left: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-5 {&lt;br /&gt;
    left: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-4 {&lt;br /&gt;
    left: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-3 {&lt;br /&gt;
    left: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-2 {&lt;br /&gt;
    left: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-1 {&lt;br /&gt;
    left: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-push-0 {&lt;br /&gt;
    left: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-12 {&lt;br /&gt;
    margin-left: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-11 {&lt;br /&gt;
    margin-left: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-10 {&lt;br /&gt;
    margin-left: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-9 {&lt;br /&gt;
    margin-left: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-8 {&lt;br /&gt;
    margin-left: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-7 {&lt;br /&gt;
    margin-left: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-6 {&lt;br /&gt;
    margin-left: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-5 {&lt;br /&gt;
    margin-left: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-4 {&lt;br /&gt;
    margin-left: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-3 {&lt;br /&gt;
    margin-left: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-2 {&lt;br /&gt;
    margin-left: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-1 {&lt;br /&gt;
    margin-left: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-sm-offset-0 {&lt;br /&gt;
    margin-left: 0%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) {&lt;br /&gt;
  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {&lt;br /&gt;
    float: left;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-12 {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-11 {&lt;br /&gt;
    width: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-10 {&lt;br /&gt;
    width: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-9 {&lt;br /&gt;
    width: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-8 {&lt;br /&gt;
    width: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-7 {&lt;br /&gt;
    width: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-6 {&lt;br /&gt;
    width: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-5 {&lt;br /&gt;
    width: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-4 {&lt;br /&gt;
    width: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-3 {&lt;br /&gt;
    width: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-2 {&lt;br /&gt;
    width: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-1 {&lt;br /&gt;
    width: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-12 {&lt;br /&gt;
    right: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-11 {&lt;br /&gt;
    right: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-10 {&lt;br /&gt;
    right: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-9 {&lt;br /&gt;
    right: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-8 {&lt;br /&gt;
    right: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-7 {&lt;br /&gt;
    right: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-6 {&lt;br /&gt;
    right: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-5 {&lt;br /&gt;
    right: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-4 {&lt;br /&gt;
    right: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-3 {&lt;br /&gt;
    right: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-2 {&lt;br /&gt;
    right: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-1 {&lt;br /&gt;
    right: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-pull-0 {&lt;br /&gt;
    right: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-12 {&lt;br /&gt;
    left: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-11 {&lt;br /&gt;
    left: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-10 {&lt;br /&gt;
    left: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-9 {&lt;br /&gt;
    left: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-8 {&lt;br /&gt;
    left: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-7 {&lt;br /&gt;
    left: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-6 {&lt;br /&gt;
    left: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-5 {&lt;br /&gt;
    left: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-4 {&lt;br /&gt;
    left: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-3 {&lt;br /&gt;
    left: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-2 {&lt;br /&gt;
    left: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-1 {&lt;br /&gt;
    left: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-push-0 {&lt;br /&gt;
    left: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-12 {&lt;br /&gt;
    margin-left: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-11 {&lt;br /&gt;
    margin-left: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-10 {&lt;br /&gt;
    margin-left: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-9 {&lt;br /&gt;
    margin-left: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-8 {&lt;br /&gt;
    margin-left: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-7 {&lt;br /&gt;
    margin-left: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-6 {&lt;br /&gt;
    margin-left: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-5 {&lt;br /&gt;
    margin-left: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-4 {&lt;br /&gt;
    margin-left: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-3 {&lt;br /&gt;
    margin-left: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-2 {&lt;br /&gt;
    margin-left: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-1 {&lt;br /&gt;
    margin-left: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-md-offset-0 {&lt;br /&gt;
    margin-left: 0%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {&lt;br /&gt;
    float: left;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-12 {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-11 {&lt;br /&gt;
    width: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-10 {&lt;br /&gt;
    width: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-9 {&lt;br /&gt;
    width: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-8 {&lt;br /&gt;
    width: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-7 {&lt;br /&gt;
    width: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-6 {&lt;br /&gt;
    width: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-5 {&lt;br /&gt;
    width: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-4 {&lt;br /&gt;
    width: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-3 {&lt;br /&gt;
    width: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-2 {&lt;br /&gt;
    width: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-1 {&lt;br /&gt;
    width: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-12 {&lt;br /&gt;
    right: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-11 {&lt;br /&gt;
    right: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-10 {&lt;br /&gt;
    right: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-9 {&lt;br /&gt;
    right: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-8 {&lt;br /&gt;
    right: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-7 {&lt;br /&gt;
    right: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-6 {&lt;br /&gt;
    right: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-5 {&lt;br /&gt;
    right: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-4 {&lt;br /&gt;
    right: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-3 {&lt;br /&gt;
    right: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-2 {&lt;br /&gt;
    right: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-1 {&lt;br /&gt;
    right: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-pull-0 {&lt;br /&gt;
    right: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-12 {&lt;br /&gt;
    left: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-11 {&lt;br /&gt;
    left: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-10 {&lt;br /&gt;
    left: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-9 {&lt;br /&gt;
    left: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-8 {&lt;br /&gt;
    left: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-7 {&lt;br /&gt;
    left: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-6 {&lt;br /&gt;
    left: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-5 {&lt;br /&gt;
    left: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-4 {&lt;br /&gt;
    left: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-3 {&lt;br /&gt;
    left: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-2 {&lt;br /&gt;
    left: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-1 {&lt;br /&gt;
    left: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-push-0 {&lt;br /&gt;
    left: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-12 {&lt;br /&gt;
    margin-left: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-11 {&lt;br /&gt;
    margin-left: 91.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-10 {&lt;br /&gt;
    margin-left: 83.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-9 {&lt;br /&gt;
    margin-left: 75%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-8 {&lt;br /&gt;
    margin-left: 66.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-7 {&lt;br /&gt;
    margin-left: 58.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-6 {&lt;br /&gt;
    margin-left: 50%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-5 {&lt;br /&gt;
    margin-left: 41.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-4 {&lt;br /&gt;
    margin-left: 33.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-3 {&lt;br /&gt;
    margin-left: 25%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-2 {&lt;br /&gt;
    margin-left: 16.66666667%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-1 {&lt;br /&gt;
    margin-left: 8.33333333%;&lt;br /&gt;
  }&lt;br /&gt;
  .col-lg-offset-0 {&lt;br /&gt;
    margin-left: 0%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
table {&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
caption {&lt;br /&gt;
  padding-top: 8px;&lt;br /&gt;
  padding-bottom: 8px;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
th {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
.table {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; td {&lt;br /&gt;
  padding: 8px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
  border-top: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th {&lt;br /&gt;
  vertical-align: bottom;&lt;br /&gt;
  border-bottom: 2px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; caption + thead &amp;gt; tr:first-child &amp;gt; th,&lt;br /&gt;
.table &amp;gt; colgroup + thead &amp;gt; tr:first-child &amp;gt; th,&lt;br /&gt;
.table &amp;gt; thead:first-child &amp;gt; tr:first-child &amp;gt; th,&lt;br /&gt;
.table &amp;gt; caption + thead &amp;gt; tr:first-child &amp;gt; td,&lt;br /&gt;
.table &amp;gt; colgroup + thead &amp;gt; tr:first-child &amp;gt; td,&lt;br /&gt;
.table &amp;gt; thead:first-child &amp;gt; tr:first-child &amp;gt; td {&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; tbody + tbody {&lt;br /&gt;
  border-top: 2px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.table .table {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.table-condensed &amp;gt; thead &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-condensed &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-condensed &amp;gt; tfoot &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-condensed &amp;gt; thead &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.table-condensed &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.table-condensed &amp;gt; tfoot &amp;gt; tr &amp;gt; td {&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
}&lt;br /&gt;
.table-bordered {&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
.table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td {&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th,&lt;br /&gt;
.table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td {&lt;br /&gt;
  border-bottom-width: 2px;&lt;br /&gt;
}&lt;br /&gt;
.table-striped &amp;gt; tbody &amp;gt; tr:nth-of-type(odd) {&lt;br /&gt;
  background-color: #f9f9f9;&lt;br /&gt;
}&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr:hover {&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
table col[class*=&amp;quot;col-&amp;quot;] {&lt;br /&gt;
  position: static;&lt;br /&gt;
  float: none;&lt;br /&gt;
  display: table-column;&lt;br /&gt;
}&lt;br /&gt;
table td[class*=&amp;quot;col-&amp;quot;],&lt;br /&gt;
table th[class*=&amp;quot;col-&amp;quot;] {&lt;br /&gt;
  position: static;&lt;br /&gt;
  float: none;&lt;br /&gt;
  display: table-cell;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; td.active,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; td.active,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; td.active,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th.active,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; th.active,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; th.active,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.active &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.active &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.active &amp;gt; td,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.active &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.active &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.active &amp;gt; th {&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; td.active:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; th.active:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.active:hover &amp;gt; td,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr:hover &amp;gt; .active,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.active:hover &amp;gt; th {&lt;br /&gt;
  background-color: #e8e8e8;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; td.success,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; td.success,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; td.success,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th.success,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; th.success,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; th.success,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.success &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.success &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.success &amp;gt; td,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.success &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.success &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.success &amp;gt; th {&lt;br /&gt;
  background-color: #dff0d8;&lt;br /&gt;
}&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; td.success:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; th.success:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.success:hover &amp;gt; td,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr:hover &amp;gt; .success,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.success:hover &amp;gt; th {&lt;br /&gt;
  background-color: #d0e9c6;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; td.info,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; td.info,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; td.info,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th.info,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; th.info,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; th.info,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.info &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.info &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.info &amp;gt; td,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.info &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.info &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.info &amp;gt; th {&lt;br /&gt;
  background-color: #d9edf7;&lt;br /&gt;
}&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; td.info:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; th.info:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.info:hover &amp;gt; td,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr:hover &amp;gt; .info,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.info:hover &amp;gt; th {&lt;br /&gt;
  background-color: #c4e3f3;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; td.warning,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; td.warning,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; td.warning,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th.warning,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; th.warning,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; th.warning,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.warning &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.warning &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.warning &amp;gt; td,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.warning &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.warning &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.warning &amp;gt; th {&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
}&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; td.warning:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; th.warning:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.warning:hover &amp;gt; td,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr:hover &amp;gt; .warning,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.warning:hover &amp;gt; th {&lt;br /&gt;
  background-color: #faf2cc;&lt;br /&gt;
}&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; td.danger,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; td.danger,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; td.danger,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr &amp;gt; th.danger,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr &amp;gt; th.danger,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr &amp;gt; th.danger,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.danger &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.danger &amp;gt; td,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.danger &amp;gt; td,&lt;br /&gt;
.table &amp;gt; thead &amp;gt; tr.danger &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tbody &amp;gt; tr.danger &amp;gt; th,&lt;br /&gt;
.table &amp;gt; tfoot &amp;gt; tr.danger &amp;gt; th {&lt;br /&gt;
  background-color: #f2dede;&lt;br /&gt;
}&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; td.danger:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr &amp;gt; th.danger:hover,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.danger:hover &amp;gt; td,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr:hover &amp;gt; .danger,&lt;br /&gt;
.table-hover &amp;gt; tbody &amp;gt; tr.danger:hover &amp;gt; th {&lt;br /&gt;
  background-color: #ebcccc;&lt;br /&gt;
}&lt;br /&gt;
.table-responsive {&lt;br /&gt;
  overflow-x: auto;&lt;br /&gt;
  min-height: 0.01%;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (max-width: 767px) {&lt;br /&gt;
  .table-responsive {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    margin-bottom: 13.5px;&lt;br /&gt;
    overflow-y: hidden;&lt;br /&gt;
    -ms-overflow-style: -ms-autohiding-scrollbar;&lt;br /&gt;
    border: 1px solid #ddd;&lt;br /&gt;
  }&lt;br /&gt;
  .table-responsive &amp;gt; .table {&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .table-responsive &amp;gt; .table &amp;gt; thead &amp;gt; tr &amp;gt; th,&lt;br /&gt;
  .table-responsive &amp;gt; .table &amp;gt; tbody &amp;gt; tr &amp;gt; th,&lt;br /&gt;
  .table-responsive &amp;gt; .table &amp;gt; tfoot &amp;gt; tr &amp;gt; th,&lt;br /&gt;
  .table-responsive &amp;gt; .table &amp;gt; thead &amp;gt; tr &amp;gt; td,&lt;br /&gt;
  .table-responsive &amp;gt; .table &amp;gt; tbody &amp;gt; tr &amp;gt; td,&lt;br /&gt;
  .table-responsive &amp;gt; .table &amp;gt; tfoot &amp;gt; tr &amp;gt; td {&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
  }&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered {&lt;br /&gt;
    border: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td:first-child {&lt;br /&gt;
    border-left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td:last-child {&lt;br /&gt;
    border-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:last-child &amp;gt; th,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr:last-child &amp;gt; th,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:last-child &amp;gt; td,&lt;br /&gt;
  .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr:last-child &amp;gt; td {&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
fieldset {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  border: 0;&lt;br /&gt;
  min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
legend {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  font-size: 19.5px;&lt;br /&gt;
  line-height: inherit;&lt;br /&gt;
  color: #333333;&lt;br /&gt;
  border: 0;&lt;br /&gt;
  border-bottom: 1px solid #e5e5e5;&lt;br /&gt;
}&lt;br /&gt;
label {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;] {&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
  margin: 4px 0 0;&lt;br /&gt;
  margin-top: 1px \9;&lt;br /&gt;
  line-height: normal;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;file&amp;quot;] {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;range&amp;quot;] {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
select[multiple],&lt;br /&gt;
select[size] {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;file&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;radio&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;checkbox&amp;quot;]:focus {&lt;br /&gt;
  outline: thin dotted;&lt;br /&gt;
  outline: 5px auto -webkit-focus-ring-color;&lt;br /&gt;
  outline-offset: -2px;&lt;br /&gt;
}&lt;br /&gt;
output {&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding-top: 7px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #555555;&lt;br /&gt;
}&lt;br /&gt;
.form-control {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #555555;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;&lt;br /&gt;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;&lt;br /&gt;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;&lt;br /&gt;
}&lt;br /&gt;
.form-control:focus {&lt;br /&gt;
  border-color: #66afe9;&lt;br /&gt;
  outline: 0;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);&lt;br /&gt;
}&lt;br /&gt;
.form-control::-moz-placeholder {&lt;br /&gt;
  color: #999;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.form-control:-ms-input-placeholder {&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
.form-control::-webkit-input-placeholder {&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
.form-control::-ms-expand {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.form-control[disabled],&lt;br /&gt;
.form-control[readonly],&lt;br /&gt;
fieldset[disabled] .form-control {&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.form-control[disabled],&lt;br /&gt;
fieldset[disabled] .form-control {&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
textarea.form-control {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;search&amp;quot;] {&lt;br /&gt;
  -webkit-appearance: none;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (-webkit-min-device-pixel-ratio: 0) {&lt;br /&gt;
  input[type=&amp;quot;date&amp;quot;].form-control,&lt;br /&gt;
  input[type=&amp;quot;time&amp;quot;].form-control,&lt;br /&gt;
  input[type=&amp;quot;datetime-local&amp;quot;].form-control,&lt;br /&gt;
  input[type=&amp;quot;month&amp;quot;].form-control {&lt;br /&gt;
    line-height: 32px;&lt;br /&gt;
  }&lt;br /&gt;
  input[type=&amp;quot;date&amp;quot;].input-sm,&lt;br /&gt;
  input[type=&amp;quot;time&amp;quot;].input-sm,&lt;br /&gt;
  input[type=&amp;quot;datetime-local&amp;quot;].input-sm,&lt;br /&gt;
  input[type=&amp;quot;month&amp;quot;].input-sm,&lt;br /&gt;
  .input-group-sm input[type=&amp;quot;date&amp;quot;],&lt;br /&gt;
  .input-group-sm input[type=&amp;quot;time&amp;quot;],&lt;br /&gt;
  .input-group-sm input[type=&amp;quot;datetime-local&amp;quot;],&lt;br /&gt;
  .input-group-sm input[type=&amp;quot;month&amp;quot;] {&lt;br /&gt;
    line-height: 30px;&lt;br /&gt;
  }&lt;br /&gt;
  input[type=&amp;quot;date&amp;quot;].input-lg,&lt;br /&gt;
  input[type=&amp;quot;time&amp;quot;].input-lg,&lt;br /&gt;
  input[type=&amp;quot;datetime-local&amp;quot;].input-lg,&lt;br /&gt;
  input[type=&amp;quot;month&amp;quot;].input-lg,&lt;br /&gt;
  .input-group-lg input[type=&amp;quot;date&amp;quot;],&lt;br /&gt;
  .input-group-lg input[type=&amp;quot;time&amp;quot;],&lt;br /&gt;
  .input-group-lg input[type=&amp;quot;datetime-local&amp;quot;],&lt;br /&gt;
  .input-group-lg input[type=&amp;quot;month&amp;quot;] {&lt;br /&gt;
    line-height: 45px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.form-group {&lt;br /&gt;
  margin-bottom: 15px;&lt;br /&gt;
}&lt;br /&gt;
.radio,&lt;br /&gt;
.checkbox {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin-top: 10px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
}&lt;br /&gt;
.radio label,&lt;br /&gt;
.checkbox label {&lt;br /&gt;
  min-height: 18px;&lt;br /&gt;
  padding-left: 20px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.radio input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
.radio-inline input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
.checkbox input[type=&amp;quot;checkbox&amp;quot;],&lt;br /&gt;
.checkbox-inline input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  margin-left: -20px;&lt;br /&gt;
  margin-top: 4px \9;&lt;br /&gt;
}&lt;br /&gt;
.radio + .radio,&lt;br /&gt;
.checkbox + .checkbox {&lt;br /&gt;
  margin-top: -5px;&lt;br /&gt;
}&lt;br /&gt;
.radio-inline,&lt;br /&gt;
.checkbox-inline {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding-left: 20px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.radio-inline + .radio-inline,&lt;br /&gt;
.checkbox-inline + .checkbox-inline {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-left: 10px;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;radio&amp;quot;][disabled],&lt;br /&gt;
input[type=&amp;quot;checkbox&amp;quot;][disabled],&lt;br /&gt;
input[type=&amp;quot;radio&amp;quot;].disabled,&lt;br /&gt;
input[type=&amp;quot;checkbox&amp;quot;].disabled,&lt;br /&gt;
fieldset[disabled] input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
fieldset[disabled] input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.radio-inline.disabled,&lt;br /&gt;
.checkbox-inline.disabled,&lt;br /&gt;
fieldset[disabled] .radio-inline,&lt;br /&gt;
fieldset[disabled] .checkbox-inline {&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.radio.disabled label,&lt;br /&gt;
.checkbox.disabled label,&lt;br /&gt;
fieldset[disabled] .radio label,&lt;br /&gt;
fieldset[disabled] .checkbox label {&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.form-control-static {&lt;br /&gt;
  padding-top: 7px;&lt;br /&gt;
  padding-bottom: 7px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  min-height: 31px;&lt;br /&gt;
}&lt;br /&gt;
.form-control-static.input-lg,&lt;br /&gt;
.form-control-static.input-sm {&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  padding-right: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-sm {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
select.input-sm {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  line-height: 30px;&lt;br /&gt;
}&lt;br /&gt;
textarea.input-sm,&lt;br /&gt;
select[multiple].input-sm {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.form-group-sm .form-control {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.form-group-sm select.form-control {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  line-height: 30px;&lt;br /&gt;
}&lt;br /&gt;
.form-group-sm textarea.form-control,&lt;br /&gt;
.form-group-sm select[multiple].form-control {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.form-group-sm .form-control-static {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  min-height: 30px;&lt;br /&gt;
  padding: 6px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.input-lg {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.3333333;&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
select.input-lg {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  line-height: 45px;&lt;br /&gt;
}&lt;br /&gt;
textarea.input-lg,&lt;br /&gt;
select[multiple].input-lg {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.form-group-lg .form-control {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.3333333;&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.form-group-lg select.form-control {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  line-height: 45px;&lt;br /&gt;
}&lt;br /&gt;
.form-group-lg textarea.form-control,&lt;br /&gt;
.form-group-lg select[multiple].form-control {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.form-group-lg .form-control-static {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  min-height: 35px;&lt;br /&gt;
  padding: 11px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.3333333;&lt;br /&gt;
}&lt;br /&gt;
.has-feedback {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.has-feedback .form-control {&lt;br /&gt;
  padding-right: 40px;&lt;br /&gt;
}&lt;br /&gt;
.form-control-feedback {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  line-height: 32px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.input-lg + .form-control-feedback,&lt;br /&gt;
.input-group-lg + .form-control-feedback,&lt;br /&gt;
.form-group-lg .form-control + .form-control-feedback {&lt;br /&gt;
  width: 45px;&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  line-height: 45px;&lt;br /&gt;
}&lt;br /&gt;
.input-sm + .form-control-feedback,&lt;br /&gt;
.input-group-sm + .form-control-feedback,&lt;br /&gt;
.form-group-sm .form-control + .form-control-feedback {&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  line-height: 30px;&lt;br /&gt;
}&lt;br /&gt;
.has-success .help-block,&lt;br /&gt;
.has-success .control-label,&lt;br /&gt;
.has-success .radio,&lt;br /&gt;
.has-success .checkbox,&lt;br /&gt;
.has-success .radio-inline,&lt;br /&gt;
.has-success .checkbox-inline,&lt;br /&gt;
.has-success.radio label,&lt;br /&gt;
.has-success.checkbox label,&lt;br /&gt;
.has-success.radio-inline label,&lt;br /&gt;
.has-success.checkbox-inline label {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
.has-success .form-control {&lt;br /&gt;
  border-color: #3c763d;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
}&lt;br /&gt;
.has-success .form-control:focus {&lt;br /&gt;
  border-color: #2b542c;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;&lt;br /&gt;
}&lt;br /&gt;
.has-success .input-group-addon {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
  border-color: #3c763d;&lt;br /&gt;
  background-color: #dff0d8;&lt;br /&gt;
}&lt;br /&gt;
.has-success .form-control-feedback {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
.has-warning .help-block,&lt;br /&gt;
.has-warning .control-label,&lt;br /&gt;
.has-warning .radio,&lt;br /&gt;
.has-warning .checkbox,&lt;br /&gt;
.has-warning .radio-inline,&lt;br /&gt;
.has-warning .checkbox-inline,&lt;br /&gt;
.has-warning.radio label,&lt;br /&gt;
.has-warning.checkbox label,&lt;br /&gt;
.has-warning.radio-inline label,&lt;br /&gt;
.has-warning.checkbox-inline label {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
.has-warning .form-control {&lt;br /&gt;
  border-color: #8a6d3b;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
}&lt;br /&gt;
.has-warning .form-control:focus {&lt;br /&gt;
  border-color: #66512c;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;&lt;br /&gt;
}&lt;br /&gt;
.has-warning .input-group-addon {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
  border-color: #8a6d3b;&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
}&lt;br /&gt;
.has-warning .form-control-feedback {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
.has-error .help-block,&lt;br /&gt;
.has-error .control-label,&lt;br /&gt;
.has-error .radio,&lt;br /&gt;
.has-error .checkbox,&lt;br /&gt;
.has-error .radio-inline,&lt;br /&gt;
.has-error .checkbox-inline,&lt;br /&gt;
.has-error.radio label,&lt;br /&gt;
.has-error.checkbox label,&lt;br /&gt;
.has-error.radio-inline label,&lt;br /&gt;
.has-error.checkbox-inline label {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
.has-error .form-control {&lt;br /&gt;
  border-color: #a94442;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
}&lt;br /&gt;
.has-error .form-control:focus {&lt;br /&gt;
  border-color: #843534;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;&lt;br /&gt;
}&lt;br /&gt;
.has-error .input-group-addon {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
  border-color: #a94442;&lt;br /&gt;
  background-color: #f2dede;&lt;br /&gt;
}&lt;br /&gt;
.has-error .form-control-feedback {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
.has-feedback label ~ .form-control-feedback {&lt;br /&gt;
  top: 23px;&lt;br /&gt;
}&lt;br /&gt;
.has-feedback label.sr-only ~ .form-control-feedback {&lt;br /&gt;
  top: 0;&lt;br /&gt;
}&lt;br /&gt;
.help-block {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
  color: #404040;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .form-inline .form-group {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .form-control {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: auto;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .form-control-static {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .input-group {&lt;br /&gt;
    display: inline-table;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .input-group .input-group-addon,&lt;br /&gt;
  .form-inline .input-group .input-group-btn,&lt;br /&gt;
  .form-inline .input-group .form-control {&lt;br /&gt;
    width: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .input-group &amp;gt; .form-control {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .control-label {&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .radio,&lt;br /&gt;
  .form-inline .checkbox {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .radio label,&lt;br /&gt;
  .form-inline .checkbox label {&lt;br /&gt;
    padding-left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .radio input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
  .form-inline .checkbox input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .form-inline .has-feedback .form-control-feedback {&lt;br /&gt;
    top: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.form-horizontal .radio,&lt;br /&gt;
.form-horizontal .checkbox,&lt;br /&gt;
.form-horizontal .radio-inline,&lt;br /&gt;
.form-horizontal .checkbox-inline {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  padding-top: 7px;&lt;br /&gt;
}&lt;br /&gt;
.form-horizontal .radio,&lt;br /&gt;
.form-horizontal .checkbox {&lt;br /&gt;
  min-height: 25px;&lt;br /&gt;
}&lt;br /&gt;
.form-horizontal .form-group {&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .form-horizontal .control-label {&lt;br /&gt;
    text-align: right;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    padding-top: 7px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.form-horizontal .has-feedback .form-control-feedback {&lt;br /&gt;
  right: 0px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .form-horizontal .form-group-lg .control-label {&lt;br /&gt;
    padding-top: 11px;&lt;br /&gt;
    font-size: 17px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .form-horizontal .form-group-sm .control-label {&lt;br /&gt;
    padding-top: 6px;&lt;br /&gt;
    font-size: 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.btn {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  touch-action: manipulation;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  border: 1px solid transparent;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-user-select: none;&lt;br /&gt;
  -moz-user-select: none;&lt;br /&gt;
  -ms-user-select: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
}&lt;br /&gt;
.btn:focus,&lt;br /&gt;
.btn:active:focus,&lt;br /&gt;
.btn.active:focus,&lt;br /&gt;
.btn.focus,&lt;br /&gt;
.btn:active.focus,&lt;br /&gt;
.btn.active.focus {&lt;br /&gt;
  outline: thin dotted;&lt;br /&gt;
  outline: 5px auto -webkit-focus-ring-color;&lt;br /&gt;
  outline-offset: -2px;&lt;br /&gt;
}&lt;br /&gt;
.btn:hover,&lt;br /&gt;
.btn:focus,&lt;br /&gt;
.btn.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.btn:active,&lt;br /&gt;
.btn.active {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);&lt;br /&gt;
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);&lt;br /&gt;
}&lt;br /&gt;
.btn.disabled,&lt;br /&gt;
.btn[disabled],&lt;br /&gt;
fieldset[disabled] .btn {&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
  opacity: 0.65;&lt;br /&gt;
  filter: alpha(opacity=65);&lt;br /&gt;
  -webkit-box-shadow: none;&lt;br /&gt;
  box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
a.btn.disabled,&lt;br /&gt;
fieldset[disabled] a.btn {&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-default {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
.btn-default:focus,&lt;br /&gt;
.btn-default.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
.btn-default:hover {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #adadad;&lt;br /&gt;
}&lt;br /&gt;
.btn-default:active,&lt;br /&gt;
.btn-default.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-default {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #adadad;&lt;br /&gt;
}&lt;br /&gt;
.btn-default:active:hover,&lt;br /&gt;
.btn-default.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-default:hover,&lt;br /&gt;
.btn-default:active:focus,&lt;br /&gt;
.btn-default.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-default:focus,&lt;br /&gt;
.btn-default:active.focus,&lt;br /&gt;
.btn-default.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-default.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #d4d4d4;&lt;br /&gt;
  border-color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
.btn-default:active,&lt;br /&gt;
.btn-default.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-default {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-default.disabled:hover,&lt;br /&gt;
.btn-default[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-default:hover,&lt;br /&gt;
.btn-default.disabled:focus,&lt;br /&gt;
.btn-default[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-default:focus,&lt;br /&gt;
.btn-default.disabled.focus,&lt;br /&gt;
.btn-default[disabled].focus,&lt;br /&gt;
fieldset[disabled] .btn-default.focus {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
.btn-default .badge {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
  border-color: #2e6da4;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary:focus,&lt;br /&gt;
.btn-primary.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #286090;&lt;br /&gt;
  border-color: #122b40;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #286090;&lt;br /&gt;
  border-color: #204d74;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary:active,&lt;br /&gt;
.btn-primary.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-primary {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #286090;&lt;br /&gt;
  border-color: #204d74;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary:active:hover,&lt;br /&gt;
.btn-primary.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-primary:hover,&lt;br /&gt;
.btn-primary:active:focus,&lt;br /&gt;
.btn-primary.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-primary:focus,&lt;br /&gt;
.btn-primary:active.focus,&lt;br /&gt;
.btn-primary.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-primary.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #204d74;&lt;br /&gt;
  border-color: #122b40;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary:active,&lt;br /&gt;
.btn-primary.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-primary {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary.disabled:hover,&lt;br /&gt;
.btn-primary[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-primary:hover,&lt;br /&gt;
.btn-primary.disabled:focus,&lt;br /&gt;
.btn-primary[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-primary:focus,&lt;br /&gt;
.btn-primary.disabled.focus,&lt;br /&gt;
.btn-primary[disabled].focus,&lt;br /&gt;
fieldset[disabled] .btn-primary.focus {&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
  border-color: #2e6da4;&lt;br /&gt;
}&lt;br /&gt;
.btn-primary .badge {&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.btn-success {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #5cb85c;&lt;br /&gt;
  border-color: #4cae4c;&lt;br /&gt;
}&lt;br /&gt;
.btn-success:focus,&lt;br /&gt;
.btn-success.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
  border-color: #255625;&lt;br /&gt;
}&lt;br /&gt;
.btn-success:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
  border-color: #398439;&lt;br /&gt;
}&lt;br /&gt;
.btn-success:active,&lt;br /&gt;
.btn-success.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-success {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
  border-color: #398439;&lt;br /&gt;
}&lt;br /&gt;
.btn-success:active:hover,&lt;br /&gt;
.btn-success.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-success:hover,&lt;br /&gt;
.btn-success:active:focus,&lt;br /&gt;
.btn-success.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-success:focus,&lt;br /&gt;
.btn-success:active.focus,&lt;br /&gt;
.btn-success.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-success.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #398439;&lt;br /&gt;
  border-color: #255625;&lt;br /&gt;
}&lt;br /&gt;
.btn-success:active,&lt;br /&gt;
.btn-success.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-success {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-success.disabled:hover,&lt;br /&gt;
.btn-success[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-success:hover,&lt;br /&gt;
.btn-success.disabled:focus,&lt;br /&gt;
.btn-success[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-success:focus,&lt;br /&gt;
.btn-success.disabled.focus,&lt;br /&gt;
.btn-success[disabled].focus,&lt;br /&gt;
fieldset[disabled] .btn-success.focus {&lt;br /&gt;
  background-color: #5cb85c;&lt;br /&gt;
  border-color: #4cae4c;&lt;br /&gt;
}&lt;br /&gt;
.btn-success .badge {&lt;br /&gt;
  color: #5cb85c;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.btn-info {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #5bc0de;&lt;br /&gt;
  border-color: #46b8da;&lt;br /&gt;
}&lt;br /&gt;
.btn-info:focus,&lt;br /&gt;
.btn-info.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
  border-color: #1b6d85;&lt;br /&gt;
}&lt;br /&gt;
.btn-info:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
  border-color: #269abc;&lt;br /&gt;
}&lt;br /&gt;
.btn-info:active,&lt;br /&gt;
.btn-info.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-info {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
  border-color: #269abc;&lt;br /&gt;
}&lt;br /&gt;
.btn-info:active:hover,&lt;br /&gt;
.btn-info.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-info:hover,&lt;br /&gt;
.btn-info:active:focus,&lt;br /&gt;
.btn-info.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-info:focus,&lt;br /&gt;
.btn-info:active.focus,&lt;br /&gt;
.btn-info.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-info.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #269abc;&lt;br /&gt;
  border-color: #1b6d85;&lt;br /&gt;
}&lt;br /&gt;
.btn-info:active,&lt;br /&gt;
.btn-info.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-info {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-info.disabled:hover,&lt;br /&gt;
.btn-info[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-info:hover,&lt;br /&gt;
.btn-info.disabled:focus,&lt;br /&gt;
.btn-info[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-info:focus,&lt;br /&gt;
.btn-info.disabled.focus,&lt;br /&gt;
.btn-info[disabled].focus,&lt;br /&gt;
fieldset[disabled] .btn-info.focus {&lt;br /&gt;
  background-color: #5bc0de;&lt;br /&gt;
  border-color: #46b8da;&lt;br /&gt;
}&lt;br /&gt;
.btn-info .badge {&lt;br /&gt;
  color: #5bc0de;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #f0ad4e;&lt;br /&gt;
  border-color: #eea236;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning:focus,&lt;br /&gt;
.btn-warning.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
  border-color: #985f0d;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
  border-color: #d58512;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning:active,&lt;br /&gt;
.btn-warning.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-warning {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
  border-color: #d58512;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning:active:hover,&lt;br /&gt;
.btn-warning.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-warning:hover,&lt;br /&gt;
.btn-warning:active:focus,&lt;br /&gt;
.btn-warning.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-warning:focus,&lt;br /&gt;
.btn-warning:active.focus,&lt;br /&gt;
.btn-warning.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-warning.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #d58512;&lt;br /&gt;
  border-color: #985f0d;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning:active,&lt;br /&gt;
.btn-warning.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-warning {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning.disabled:hover,&lt;br /&gt;
.btn-warning[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-warning:hover,&lt;br /&gt;
.btn-warning.disabled:focus,&lt;br /&gt;
.btn-warning[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-warning:focus,&lt;br /&gt;
.btn-warning.disabled.focus,&lt;br /&gt;
.btn-warning[disabled].focus,&lt;br /&gt;
fieldset[disabled] .btn-warning.focus {&lt;br /&gt;
  background-color: #f0ad4e;&lt;br /&gt;
  border-color: #eea236;&lt;br /&gt;
}&lt;br /&gt;
.btn-warning .badge {&lt;br /&gt;
  color: #f0ad4e;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #d9534f;&lt;br /&gt;
  border-color: #d43f3a;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger:focus,&lt;br /&gt;
.btn-danger.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
  border-color: #761c19;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
  border-color: #ac2925;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger:active,&lt;br /&gt;
.btn-danger.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-danger {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
  border-color: #ac2925;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger:active:hover,&lt;br /&gt;
.btn-danger.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-danger:hover,&lt;br /&gt;
.btn-danger:active:focus,&lt;br /&gt;
.btn-danger.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-danger:focus,&lt;br /&gt;
.btn-danger:active.focus,&lt;br /&gt;
.btn-danger.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-danger.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ac2925;&lt;br /&gt;
  border-color: #761c19;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger:active,&lt;br /&gt;
.btn-danger.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.btn-danger {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger.disabled:hover,&lt;br /&gt;
.btn-danger[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-danger:hover,&lt;br /&gt;
.btn-danger.disabled:focus,&lt;br /&gt;
.btn-danger[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-danger:focus,&lt;br /&gt;
.btn-danger.disabled.focus,&lt;br /&gt;
.btn-danger[disabled].focus,&lt;br /&gt;
fieldset[disabled] .btn-danger.focus {&lt;br /&gt;
  background-color: #d9534f;&lt;br /&gt;
  border-color: #d43f3a;&lt;br /&gt;
}&lt;br /&gt;
.btn-danger .badge {&lt;br /&gt;
  color: #d9534f;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.btn-link {&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-link,&lt;br /&gt;
.btn-link:active,&lt;br /&gt;
.btn-link.active,&lt;br /&gt;
.btn-link[disabled],&lt;br /&gt;
fieldset[disabled] .btn-link {&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  -webkit-box-shadow: none;&lt;br /&gt;
  box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-link,&lt;br /&gt;
.btn-link:hover,&lt;br /&gt;
.btn-link:focus,&lt;br /&gt;
.btn-link:active {&lt;br /&gt;
  border-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.btn-link:hover,&lt;br /&gt;
.btn-link:focus {&lt;br /&gt;
  color: #23527c;&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.btn-link[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .btn-link:hover,&lt;br /&gt;
.btn-link[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .btn-link:focus {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-lg,&lt;br /&gt;
.btn-group-lg &amp;gt; .btn {&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.3333333;&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.btn-sm,&lt;br /&gt;
.btn-group-sm &amp;gt; .btn {&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.btn-xs,&lt;br /&gt;
.btn-group-xs &amp;gt; .btn {&lt;br /&gt;
  padding: 1px 5px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.btn-block {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.btn-block + .btn-block {&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
}&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].btn-block,&lt;br /&gt;
input[type=&amp;quot;reset&amp;quot;].btn-block,&lt;br /&gt;
input[type=&amp;quot;button&amp;quot;].btn-block {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.fade {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  -webkit-transition: opacity 0.15s linear;&lt;br /&gt;
  -o-transition: opacity 0.15s linear;&lt;br /&gt;
  transition: opacity 0.15s linear;&lt;br /&gt;
}&lt;br /&gt;
.fade.in {&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.collapse {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.collapse.in {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
tr.collapse.in {&lt;br /&gt;
  display: table-row;&lt;br /&gt;
}&lt;br /&gt;
tbody.collapse.in {&lt;br /&gt;
  display: table-row-group;&lt;br /&gt;
}&lt;br /&gt;
.collapsing {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  height: 0;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  -webkit-transition-property: height, visibility;&lt;br /&gt;
  transition-property: height, visibility;&lt;br /&gt;
  -webkit-transition-duration: 0.35s;&lt;br /&gt;
  transition-duration: 0.35s;&lt;br /&gt;
  -webkit-transition-timing-function: ease;&lt;br /&gt;
  transition-timing-function: ease;&lt;br /&gt;
}&lt;br /&gt;
.caret {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 0;&lt;br /&gt;
  height: 0;&lt;br /&gt;
  margin-left: 2px;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  border-top: 4px dashed;&lt;br /&gt;
  border-top: 4px solid \9;&lt;br /&gt;
  border-right: 4px solid transparent;&lt;br /&gt;
  border-left: 4px solid transparent;&lt;br /&gt;
}&lt;br /&gt;
.dropup,&lt;br /&gt;
.dropdown {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-toggle:focus {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 100%;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 1000;&lt;br /&gt;
  display: none;&lt;br /&gt;
  float: left;&lt;br /&gt;
  min-width: 160px;&lt;br /&gt;
  padding: 5px 0;&lt;br /&gt;
  margin: 2px 0 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border: 1px solid rgba(0, 0, 0, 0.15);&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);&lt;br /&gt;
  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);&lt;br /&gt;
  background-clip: padding-box;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu.pull-right {&lt;br /&gt;
  right: 0;&lt;br /&gt;
  left: auto;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu .divider {&lt;br /&gt;
  height: 1px;&lt;br /&gt;
  margin: 8px 0;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  background-color: #e5e5e5;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu &amp;gt; li &amp;gt; a {&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 3px 20px;&lt;br /&gt;
  clear: both;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #333333;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.dropdown-menu &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  color: #262626;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu &amp;gt; .active &amp;gt; a,&lt;br /&gt;
.dropdown-menu &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
.dropdown-menu &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  outline: 0;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu &amp;gt; .disabled &amp;gt; a,&lt;br /&gt;
.dropdown-menu &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
.dropdown-menu &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
.dropdown-menu &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.open &amp;gt; .dropdown-menu {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.open &amp;gt; a {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu-right {&lt;br /&gt;
  left: auto;&lt;br /&gt;
  right: 0;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-menu-left {&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: auto;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-header {&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 3px 20px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  z-index: 990;&lt;br /&gt;
}&lt;br /&gt;
.pull-right &amp;gt; .dropdown-menu {&lt;br /&gt;
  right: 0;&lt;br /&gt;
  left: auto;&lt;br /&gt;
}&lt;br /&gt;
.dropup .caret,&lt;br /&gt;
.navbar-fixed-bottom .dropdown .caret {&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
  border-bottom: 4px dashed;&lt;br /&gt;
  border-bottom: 4px solid \9;&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.dropup .dropdown-menu,&lt;br /&gt;
.navbar-fixed-bottom .dropdown .dropdown-menu {&lt;br /&gt;
  top: auto;&lt;br /&gt;
  bottom: 100%;&lt;br /&gt;
  margin-bottom: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-right .dropdown-menu {&lt;br /&gt;
    left: auto;&lt;br /&gt;
    right: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-right .dropdown-menu-left {&lt;br /&gt;
    left: 0;&lt;br /&gt;
    right: auto;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.btn-group,&lt;br /&gt;
.btn-group-vertical {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn:hover,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn:hover,&lt;br /&gt;
.btn-group &amp;gt; .btn:focus,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn:focus,&lt;br /&gt;
.btn-group &amp;gt; .btn:active,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn:active,&lt;br /&gt;
.btn-group &amp;gt; .btn.active,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn.active {&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
}&lt;br /&gt;
.btn-group .btn + .btn,&lt;br /&gt;
.btn-group .btn + .btn-group,&lt;br /&gt;
.btn-group .btn-group + .btn,&lt;br /&gt;
.btn-group .btn-group + .btn-group {&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
}&lt;br /&gt;
.btn-toolbar {&lt;br /&gt;
  margin-left: -5px;&lt;br /&gt;
}&lt;br /&gt;
.btn-toolbar .btn,&lt;br /&gt;
.btn-toolbar .btn-group,&lt;br /&gt;
.btn-toolbar .input-group {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.btn-toolbar &amp;gt; .btn,&lt;br /&gt;
.btn-toolbar &amp;gt; .btn-group,&lt;br /&gt;
.btn-toolbar &amp;gt; .input-group {&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn:first-child {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn:first-child:not(:last-child):not(.dropdown-toggle) {&lt;br /&gt;
  border-bottom-right-radius: 0;&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn:last-child:not(:first-child),&lt;br /&gt;
.btn-group &amp;gt; .dropdown-toggle:not(:first-child) {&lt;br /&gt;
  border-bottom-left-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn-group {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn-group:not(:first-child):not(:last-child) &amp;gt; .btn {&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn-group:first-child:not(:last-child) &amp;gt; .btn:last-child,&lt;br /&gt;
.btn-group &amp;gt; .btn-group:first-child:not(:last-child) &amp;gt; .dropdown-toggle {&lt;br /&gt;
  border-bottom-right-radius: 0;&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn-group:last-child:not(:first-child) &amp;gt; .btn:first-child {&lt;br /&gt;
  border-bottom-left-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group .dropdown-toggle:active,&lt;br /&gt;
.btn-group.open .dropdown-toggle {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn + .dropdown-toggle {&lt;br /&gt;
  padding-left: 8px;&lt;br /&gt;
  padding-right: 8px;&lt;br /&gt;
}&lt;br /&gt;
.btn-group &amp;gt; .btn-lg + .dropdown-toggle {&lt;br /&gt;
  padding-left: 12px;&lt;br /&gt;
  padding-right: 12px;&lt;br /&gt;
}&lt;br /&gt;
.btn-group.open .dropdown-toggle {&lt;br /&gt;
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);&lt;br /&gt;
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);&lt;br /&gt;
}&lt;br /&gt;
.btn-group.open .dropdown-toggle.btn-link {&lt;br /&gt;
  -webkit-box-shadow: none;&lt;br /&gt;
  box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.btn .caret {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-lg .caret {&lt;br /&gt;
  border-width: 5px 5px 0;&lt;br /&gt;
  border-bottom-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.dropup .btn-lg .caret {&lt;br /&gt;
  border-width: 0 5px 5px;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group &amp;gt; .btn {&lt;br /&gt;
  display: block;&lt;br /&gt;
  float: none;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group &amp;gt; .btn {&lt;br /&gt;
  float: none;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn + .btn,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn + .btn-group,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group + .btn,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group + .btn-group {&lt;br /&gt;
  margin-top: -1px;&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn:not(:first-child):not(:last-child) {&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn:first-child:not(:last-child) {&lt;br /&gt;
  border-top-right-radius: 2px;&lt;br /&gt;
  border-top-left-radius: 2px;&lt;br /&gt;
  border-bottom-right-radius: 0;&lt;br /&gt;
  border-bottom-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn:last-child:not(:first-child) {&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
  border-bottom-right-radius: 2px;&lt;br /&gt;
  border-bottom-left-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:not(:first-child):not(:last-child) &amp;gt; .btn {&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:first-child:not(:last-child) &amp;gt; .btn:last-child,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:first-child:not(:last-child) &amp;gt; .dropdown-toggle {&lt;br /&gt;
  border-bottom-right-radius: 0;&lt;br /&gt;
  border-bottom-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:last-child:not(:first-child) &amp;gt; .btn:first-child {&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-justified {&lt;br /&gt;
  display: table;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  table-layout: fixed;&lt;br /&gt;
  border-collapse: separate;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-justified &amp;gt; .btn,&lt;br /&gt;
.btn-group-justified &amp;gt; .btn-group {&lt;br /&gt;
  float: none;&lt;br /&gt;
  display: table-cell;&lt;br /&gt;
  width: 1%;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-justified &amp;gt; .btn-group .btn {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.btn-group-justified &amp;gt; .btn-group .dropdown-menu {&lt;br /&gt;
  left: auto;&lt;br /&gt;
}&lt;br /&gt;
[data-toggle=&amp;quot;buttons&amp;quot;] &amp;gt; .btn input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
[data-toggle=&amp;quot;buttons&amp;quot;] &amp;gt; .btn-group &amp;gt; .btn input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
[data-toggle=&amp;quot;buttons&amp;quot;] &amp;gt; .btn input[type=&amp;quot;checkbox&amp;quot;],&lt;br /&gt;
[data-toggle=&amp;quot;buttons&amp;quot;] &amp;gt; .btn-group &amp;gt; .btn input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  clip: rect(0, 0, 0, 0);&lt;br /&gt;
  pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
.input-group {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: table;&lt;br /&gt;
  border-collapse: separate;&lt;br /&gt;
}&lt;br /&gt;
.input-group[class*=&amp;quot;col-&amp;quot;] {&lt;br /&gt;
  float: none;&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  padding-right: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group .form-control {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  float: left;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group .form-control:focus {&lt;br /&gt;
  z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
.input-group-lg &amp;gt; .form-control,&lt;br /&gt;
.input-group-lg &amp;gt; .input-group-addon,&lt;br /&gt;
.input-group-lg &amp;gt; .input-group-btn &amp;gt; .btn {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.3333333;&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
select.input-group-lg &amp;gt; .form-control,&lt;br /&gt;
select.input-group-lg &amp;gt; .input-group-addon,&lt;br /&gt;
select.input-group-lg &amp;gt; .input-group-btn &amp;gt; .btn {&lt;br /&gt;
  height: 45px;&lt;br /&gt;
  line-height: 45px;&lt;br /&gt;
}&lt;br /&gt;
textarea.input-group-lg &amp;gt; .form-control,&lt;br /&gt;
textarea.input-group-lg &amp;gt; .input-group-addon,&lt;br /&gt;
textarea.input-group-lg &amp;gt; .input-group-btn &amp;gt; .btn,&lt;br /&gt;
select[multiple].input-group-lg &amp;gt; .form-control,&lt;br /&gt;
select[multiple].input-group-lg &amp;gt; .input-group-addon,&lt;br /&gt;
select[multiple].input-group-lg &amp;gt; .input-group-btn &amp;gt; .btn {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.input-group-sm &amp;gt; .form-control,&lt;br /&gt;
.input-group-sm &amp;gt; .input-group-addon,&lt;br /&gt;
.input-group-sm &amp;gt; .input-group-btn &amp;gt; .btn {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
select.input-group-sm &amp;gt; .form-control,&lt;br /&gt;
select.input-group-sm &amp;gt; .input-group-addon,&lt;br /&gt;
select.input-group-sm &amp;gt; .input-group-btn &amp;gt; .btn {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  line-height: 30px;&lt;br /&gt;
}&lt;br /&gt;
textarea.input-group-sm &amp;gt; .form-control,&lt;br /&gt;
textarea.input-group-sm &amp;gt; .input-group-addon,&lt;br /&gt;
textarea.input-group-sm &amp;gt; .input-group-btn &amp;gt; .btn,&lt;br /&gt;
select[multiple].input-group-sm &amp;gt; .form-control,&lt;br /&gt;
select[multiple].input-group-sm &amp;gt; .input-group-addon,&lt;br /&gt;
select[multiple].input-group-sm &amp;gt; .input-group-btn &amp;gt; .btn {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon,&lt;br /&gt;
.input-group-btn,&lt;br /&gt;
.input-group .form-control {&lt;br /&gt;
  display: table-cell;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon:not(:first-child):not(:last-child),&lt;br /&gt;
.input-group-btn:not(:first-child):not(:last-child),&lt;br /&gt;
.input-group .form-control:not(:first-child):not(:last-child) {&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon,&lt;br /&gt;
.input-group-btn {&lt;br /&gt;
  width: 1%;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon {&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  color: #555555;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon.input-sm {&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon.input-lg {&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
.input-group-addon input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group .form-control:first-child,&lt;br /&gt;
.input-group-addon:first-child,&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .btn,&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .btn-group &amp;gt; .btn,&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .dropdown-toggle,&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .btn:not(:last-child):not(.dropdown-toggle),&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .btn-group:not(:last-child) &amp;gt; .btn {&lt;br /&gt;
  border-bottom-right-radius: 0;&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon:first-child {&lt;br /&gt;
  border-right: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group .form-control:last-child,&lt;br /&gt;
.input-group-addon:last-child,&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .btn,&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .btn-group &amp;gt; .btn,&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .dropdown-toggle,&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .btn:not(:first-child),&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .btn-group:not(:first-child) &amp;gt; .btn {&lt;br /&gt;
  border-bottom-left-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group-addon:last-child {&lt;br /&gt;
  border-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.input-group-btn {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  font-size: 0;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.input-group-btn &amp;gt; .btn {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.input-group-btn &amp;gt; .btn + .btn {&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
}&lt;br /&gt;
.input-group-btn &amp;gt; .btn:hover,&lt;br /&gt;
.input-group-btn &amp;gt; .btn:focus,&lt;br /&gt;
.input-group-btn &amp;gt; .btn:active {&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
}&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .btn,&lt;br /&gt;
.input-group-btn:first-child &amp;gt; .btn-group {&lt;br /&gt;
  margin-right: -1px;&lt;br /&gt;
}&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .btn,&lt;br /&gt;
.input-group-btn:last-child &amp;gt; .btn-group {&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
}&lt;br /&gt;
.nav {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
}&lt;br /&gt;
.nav &amp;gt; li {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.nav &amp;gt; li &amp;gt; a {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 10px 15px;&lt;br /&gt;
}&lt;br /&gt;
.nav &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.nav &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
.nav &amp;gt; li.disabled &amp;gt; a {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.nav &amp;gt; li.disabled &amp;gt; a:hover,&lt;br /&gt;
.nav &amp;gt; li.disabled &amp;gt; a:focus {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.nav .open &amp;gt; a,&lt;br /&gt;
.nav .open &amp;gt; a:hover,&lt;br /&gt;
.nav .open &amp;gt; a:focus {&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
  border-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.nav .nav-divider {&lt;br /&gt;
  height: 1px;&lt;br /&gt;
  margin: 8px 0;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  background-color: #e5e5e5;&lt;br /&gt;
}&lt;br /&gt;
.nav &amp;gt; li &amp;gt; a &amp;gt; img {&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs {&lt;br /&gt;
  border-bottom: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs &amp;gt; li {&lt;br /&gt;
  float: left;&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs &amp;gt; li &amp;gt; a {&lt;br /&gt;
  margin-right: 2px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  border: 1px solid transparent;&lt;br /&gt;
  border-radius: 2px 2px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs &amp;gt; li &amp;gt; a:hover {&lt;br /&gt;
  border-color: #eeeeee #eeeeee #ddd;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs &amp;gt; li.active &amp;gt; a,&lt;br /&gt;
.nav-tabs &amp;gt; li.active &amp;gt; a:hover,&lt;br /&gt;
.nav-tabs &amp;gt; li.active &amp;gt; a:focus {&lt;br /&gt;
  color: #555555;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-bottom-color: transparent;&lt;br /&gt;
  cursor: default;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs.nav-justified {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  border-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; li {&lt;br /&gt;
  float: none;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; .dropdown .dropdown-menu {&lt;br /&gt;
  top: auto;&lt;br /&gt;
  left: auto;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .nav-tabs.nav-justified &amp;gt; li {&lt;br /&gt;
    display: table-cell;&lt;br /&gt;
    width: 1%;&lt;br /&gt;
  }&lt;br /&gt;
  .nav-tabs.nav-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
  margin-right: 0;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; .active &amp;gt; a,&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
.nav-tabs.nav-justified &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .nav-tabs.nav-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
    border-bottom: 1px solid #ddd;&lt;br /&gt;
    border-radius: 2px 2px 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  .nav-tabs.nav-justified &amp;gt; .active &amp;gt; a,&lt;br /&gt;
  .nav-tabs.nav-justified &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
  .nav-tabs.nav-justified &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
    border-bottom-color: #fff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.nav-pills &amp;gt; li {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.nav-pills &amp;gt; li &amp;gt; a {&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.nav-pills &amp;gt; li + li {&lt;br /&gt;
  margin-left: 2px;&lt;br /&gt;
}&lt;br /&gt;
.nav-pills &amp;gt; li.active &amp;gt; a,&lt;br /&gt;
.nav-pills &amp;gt; li.active &amp;gt; a:hover,&lt;br /&gt;
.nav-pills &amp;gt; li.active &amp;gt; a:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.nav-stacked &amp;gt; li {&lt;br /&gt;
  float: none;&lt;br /&gt;
}&lt;br /&gt;
.nav-stacked &amp;gt; li + li {&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-justified {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.nav-justified &amp;gt; li {&lt;br /&gt;
  float: none;&lt;br /&gt;
}&lt;br /&gt;
.nav-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
.nav-justified &amp;gt; .dropdown .dropdown-menu {&lt;br /&gt;
  top: auto;&lt;br /&gt;
  left: auto;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .nav-justified &amp;gt; li {&lt;br /&gt;
    display: table-cell;&lt;br /&gt;
    width: 1%;&lt;br /&gt;
  }&lt;br /&gt;
  .nav-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs-justified {&lt;br /&gt;
  border-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
  margin-right: 0;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs-justified &amp;gt; .active &amp;gt; a,&lt;br /&gt;
.nav-tabs-justified &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
.nav-tabs-justified &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .nav-tabs-justified &amp;gt; li &amp;gt; a {&lt;br /&gt;
    border-bottom: 1px solid #ddd;&lt;br /&gt;
    border-radius: 2px 2px 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  .nav-tabs-justified &amp;gt; .active &amp;gt; a,&lt;br /&gt;
  .nav-tabs-justified &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
  .nav-tabs-justified &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
    border-bottom-color: #fff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.tab-content &amp;gt; .tab-pane {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.tab-content &amp;gt; .active {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.nav-tabs .dropdown-menu {&lt;br /&gt;
  margin-top: -1px;&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.navbar {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  min-height: 30px;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  border: 1px solid transparent;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar {&lt;br /&gt;
    border-radius: 2px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-header {&lt;br /&gt;
    float: left;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-collapse {&lt;br /&gt;
  overflow-x: visible;&lt;br /&gt;
  padding-right: 0px;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
  border-top: 1px solid transparent;&lt;br /&gt;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);&lt;br /&gt;
  -webkit-overflow-scrolling: touch;&lt;br /&gt;
}&lt;br /&gt;
.navbar-collapse.in {&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-collapse {&lt;br /&gt;
    width: auto;&lt;br /&gt;
    border-top: 0;&lt;br /&gt;
    box-shadow: none;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-collapse.collapse {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
    padding-bottom: 0;&lt;br /&gt;
    overflow: visible !important;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-collapse.in {&lt;br /&gt;
    overflow-y: visible;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-fixed-top .navbar-collapse,&lt;br /&gt;
  .navbar-static-top .navbar-collapse,&lt;br /&gt;
  .navbar-fixed-bottom .navbar-collapse {&lt;br /&gt;
    padding-left: 0;&lt;br /&gt;
    padding-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-fixed-top .navbar-collapse,&lt;br /&gt;
.navbar-fixed-bottom .navbar-collapse {&lt;br /&gt;
  max-height: 340px;&lt;br /&gt;
}&lt;br /&gt;
@media (max-device-width: 540px) and (orientation: landscape) {&lt;br /&gt;
  .navbar-fixed-top .navbar-collapse,&lt;br /&gt;
  .navbar-fixed-bottom .navbar-collapse {&lt;br /&gt;
    max-height: 200px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.container &amp;gt; .navbar-header,&lt;br /&gt;
.container-fluid &amp;gt; .navbar-header,&lt;br /&gt;
.container &amp;gt; .navbar-collapse,&lt;br /&gt;
.container-fluid &amp;gt; .navbar-collapse {&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .container &amp;gt; .navbar-header,&lt;br /&gt;
  .container-fluid &amp;gt; .navbar-header,&lt;br /&gt;
  .container &amp;gt; .navbar-collapse,&lt;br /&gt;
  .container-fluid &amp;gt; .navbar-collapse {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-static-top {&lt;br /&gt;
  z-index: 1000;&lt;br /&gt;
  border-width: 0 0 1px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-static-top {&lt;br /&gt;
    border-radius: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-fixed-top,&lt;br /&gt;
.navbar-fixed-bottom {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 1030;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-fixed-top,&lt;br /&gt;
  .navbar-fixed-bottom {&lt;br /&gt;
    border-radius: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-fixed-top {&lt;br /&gt;
  top: 0;&lt;br /&gt;
  border-width: 0 0 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-fixed-bottom {&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  border-width: 1px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.navbar-brand {&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 0px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 18px;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-brand:hover,&lt;br /&gt;
.navbar-brand:focus {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.navbar-brand &amp;gt; img {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar &amp;gt; .container .navbar-brand,&lt;br /&gt;
  .navbar &amp;gt; .container-fluid .navbar-brand {&lt;br /&gt;
    margin-left: 0px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-toggle {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  float: right;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
  padding: 9px 10px;&lt;br /&gt;
  margin-top: -2px;&lt;br /&gt;
  margin-bottom: -2px;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  border: 1px solid transparent;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-toggle:focus {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
.navbar-toggle .icon-bar {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 22px;&lt;br /&gt;
  height: 2px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-toggle .icon-bar + .icon-bar {&lt;br /&gt;
  margin-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-toggle {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-nav {&lt;br /&gt;
  margin: 3px 0px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-nav &amp;gt; li &amp;gt; a {&lt;br /&gt;
  padding-top: 10px;&lt;br /&gt;
  padding-bottom: 10px;&lt;br /&gt;
  line-height: 18px;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  .navbar-nav .open .dropdown-menu {&lt;br /&gt;
    position: static;&lt;br /&gt;
    float: none;&lt;br /&gt;
    width: auto;&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
    border: 0;&lt;br /&gt;
    box-shadow: none;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a,&lt;br /&gt;
  .navbar-nav .open .dropdown-menu .dropdown-header {&lt;br /&gt;
    padding: 5px 15px 5px 25px;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a {&lt;br /&gt;
    line-height: 18px;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
  .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
    background-image: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-nav {&lt;br /&gt;
    float: left;&lt;br /&gt;
    margin: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-nav &amp;gt; li {&lt;br /&gt;
    float: left;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-nav &amp;gt; li &amp;gt; a {&lt;br /&gt;
    padding-top: 6px;&lt;br /&gt;
    padding-bottom: 6px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-form {&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
  padding: 10px 0px;&lt;br /&gt;
  border-top: 1px solid transparent;&lt;br /&gt;
  border-bottom: 1px solid transparent;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);&lt;br /&gt;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);&lt;br /&gt;
  margin-top: -1px;&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .navbar-form .form-group {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .form-control {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    width: auto;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .form-control-static {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .input-group {&lt;br /&gt;
    display: inline-table;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .input-group .input-group-addon,&lt;br /&gt;
  .navbar-form .input-group .input-group-btn,&lt;br /&gt;
  .navbar-form .input-group .form-control {&lt;br /&gt;
    width: auto;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .input-group &amp;gt; .form-control {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .control-label {&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .radio,&lt;br /&gt;
  .navbar-form .checkbox {&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .radio label,&lt;br /&gt;
  .navbar-form .checkbox label {&lt;br /&gt;
    padding-left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .radio input[type=&amp;quot;radio&amp;quot;],&lt;br /&gt;
  .navbar-form .checkbox input[type=&amp;quot;checkbox&amp;quot;] {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .has-feedback .form-control-feedback {&lt;br /&gt;
    top: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  .navbar-form .form-group {&lt;br /&gt;
    margin-bottom: 5px;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-form .form-group:last-child {&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-form {&lt;br /&gt;
    width: auto;&lt;br /&gt;
    border: 0;&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
    padding-top: 0;&lt;br /&gt;
    padding-bottom: 0;&lt;br /&gt;
    -webkit-box-shadow: none;&lt;br /&gt;
    box-shadow: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-nav &amp;gt; li &amp;gt; .dropdown-menu {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.navbar-fixed-bottom .navbar-nav &amp;gt; li &amp;gt; .dropdown-menu {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  border-top-right-radius: 2px;&lt;br /&gt;
  border-top-left-radius: 2px;&lt;br /&gt;
  border-bottom-right-radius: 0;&lt;br /&gt;
  border-bottom-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.navbar-btn {&lt;br /&gt;
  margin-top: -1px;&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-btn.btn-sm {&lt;br /&gt;
  margin-top: 0px;&lt;br /&gt;
  margin-bottom: 0px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-btn.btn-xs {&lt;br /&gt;
  margin-top: 4px;&lt;br /&gt;
  margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
.navbar-text {&lt;br /&gt;
  margin-top: 6px;&lt;br /&gt;
  margin-bottom: 6px;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-text {&lt;br /&gt;
    float: left;&lt;br /&gt;
    margin-left: 0px;&lt;br /&gt;
    margin-right: 0px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 541px) {&lt;br /&gt;
  .navbar-left {&lt;br /&gt;
    float: left !important;&lt;br /&gt;
    float: left;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-right {&lt;br /&gt;
    float: right !important;&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-right: 0px;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-right ~ .navbar-right {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-default {&lt;br /&gt;
  background-color: #f8f8f8;&lt;br /&gt;
  border-color: #e7e7e7;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-brand {&lt;br /&gt;
  color: #777;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-brand:hover,&lt;br /&gt;
.navbar-default .navbar-brand:focus {&lt;br /&gt;
  color: #5e5e5e;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-text {&lt;br /&gt;
  color: #777;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; li &amp;gt; a {&lt;br /&gt;
  color: #777;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .active &amp;gt; a,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
  color: #555;&lt;br /&gt;
  background-color: #e7e7e7;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .disabled &amp;gt; a,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-toggle {&lt;br /&gt;
  border-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-toggle:hover,&lt;br /&gt;
.navbar-default .navbar-toggle:focus {&lt;br /&gt;
  background-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-toggle .icon-bar {&lt;br /&gt;
  background-color: #888;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-collapse,&lt;br /&gt;
.navbar-default .navbar-form {&lt;br /&gt;
  border-color: #e7e7e7;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .open &amp;gt; a,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .open &amp;gt; a:hover,&lt;br /&gt;
.navbar-default .navbar-nav &amp;gt; .open &amp;gt; a:focus {&lt;br /&gt;
  background-color: #e7e7e7;&lt;br /&gt;
  color: #555;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a {&lt;br /&gt;
    color: #777;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
    color: #333;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; .active &amp;gt; a,&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
    color: #555;&lt;br /&gt;
    background-color: #e7e7e7;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; .disabled &amp;gt; a,&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
  .navbar-default .navbar-nav .open .dropdown-menu &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
    color: #ccc;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-link {&lt;br /&gt;
  color: #777;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .navbar-link:hover {&lt;br /&gt;
  color: #333;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .btn-link {&lt;br /&gt;
  color: #777;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .btn-link:hover,&lt;br /&gt;
.navbar-default .btn-link:focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
}&lt;br /&gt;
.navbar-default .btn-link[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .navbar-default .btn-link:hover,&lt;br /&gt;
.navbar-default .btn-link[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .navbar-default .btn-link:focus {&lt;br /&gt;
  color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse {&lt;br /&gt;
  background-color: #222;&lt;br /&gt;
  border-color: #080808;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-brand {&lt;br /&gt;
  color: #9d9d9d;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-brand:hover,&lt;br /&gt;
.navbar-inverse .navbar-brand:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-text {&lt;br /&gt;
  color: #9d9d9d;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; li &amp;gt; a {&lt;br /&gt;
  color: #9d9d9d;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .active &amp;gt; a,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #080808;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .disabled &amp;gt; a,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
  color: #444;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-toggle {&lt;br /&gt;
  border-color: #333;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-toggle:hover,&lt;br /&gt;
.navbar-inverse .navbar-toggle:focus {&lt;br /&gt;
  background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-toggle .icon-bar {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-collapse,&lt;br /&gt;
.navbar-inverse .navbar-form {&lt;br /&gt;
  border-color: #101010;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .open &amp;gt; a,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .open &amp;gt; a:hover,&lt;br /&gt;
.navbar-inverse .navbar-nav &amp;gt; .open &amp;gt; a:focus {&lt;br /&gt;
  background-color: #080808;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .dropdown-header {&lt;br /&gt;
    border-color: #080808;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {&lt;br /&gt;
    background-color: #080808;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a {&lt;br /&gt;
    color: #9d9d9d;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; li &amp;gt; a:focus {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .active &amp;gt; a,&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .active &amp;gt; a:focus {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    background-color: #080808;&lt;br /&gt;
  }&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .disabled &amp;gt; a,&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
  .navbar-inverse .navbar-nav .open .dropdown-menu &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
    color: #444;&lt;br /&gt;
    background-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-link {&lt;br /&gt;
  color: #9d9d9d;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .navbar-link:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .btn-link {&lt;br /&gt;
  color: #9d9d9d;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .btn-link:hover,&lt;br /&gt;
.navbar-inverse .btn-link:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.navbar-inverse .btn-link[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .navbar-inverse .btn-link:hover,&lt;br /&gt;
.navbar-inverse .btn-link[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .navbar-inverse .btn-link:focus {&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
.breadcrumb {&lt;br /&gt;
  padding: 8px 15px;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.breadcrumb &amp;gt; li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.breadcrumb &amp;gt; li + li:before {&lt;br /&gt;
  content: &amp;quot;/\00a0&amp;quot;;&lt;br /&gt;
  padding: 0 5px;&lt;br /&gt;
  color: #5e5e5e;&lt;br /&gt;
}&lt;br /&gt;
.breadcrumb &amp;gt; .active {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.pagination {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  margin: 18px 0;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; li {&lt;br /&gt;
  display: inline;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; li &amp;gt; a,&lt;br /&gt;
.pagination &amp;gt; li &amp;gt; span {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; li:first-child &amp;gt; a,&lt;br /&gt;
.pagination &amp;gt; li:first-child &amp;gt; span {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
  border-bottom-left-radius: 2px;&lt;br /&gt;
  border-top-left-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; li:last-child &amp;gt; a,&lt;br /&gt;
.pagination &amp;gt; li:last-child &amp;gt; span {&lt;br /&gt;
  border-bottom-right-radius: 2px;&lt;br /&gt;
  border-top-right-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.pagination &amp;gt; li &amp;gt; span:hover,&lt;br /&gt;
.pagination &amp;gt; li &amp;gt; a:focus,&lt;br /&gt;
.pagination &amp;gt; li &amp;gt; span:focus {&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  color: #23527c;&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
  border-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; .active &amp;gt; a,&lt;br /&gt;
.pagination &amp;gt; .active &amp;gt; span,&lt;br /&gt;
.pagination &amp;gt; .active &amp;gt; a:hover,&lt;br /&gt;
.pagination &amp;gt; .active &amp;gt; span:hover,&lt;br /&gt;
.pagination &amp;gt; .active &amp;gt; a:focus,&lt;br /&gt;
.pagination &amp;gt; .active &amp;gt; span:focus {&lt;br /&gt;
  z-index: 3;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
  border-color: #337ab7;&lt;br /&gt;
  cursor: default;&lt;br /&gt;
}&lt;br /&gt;
.pagination &amp;gt; .disabled &amp;gt; span,&lt;br /&gt;
.pagination &amp;gt; .disabled &amp;gt; span:hover,&lt;br /&gt;
.pagination &amp;gt; .disabled &amp;gt; span:focus,&lt;br /&gt;
.pagination &amp;gt; .disabled &amp;gt; a,&lt;br /&gt;
.pagination &amp;gt; .disabled &amp;gt; a:hover,&lt;br /&gt;
.pagination &amp;gt; .disabled &amp;gt; a:focus {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ddd;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.pagination-lg &amp;gt; li &amp;gt; a,&lt;br /&gt;
.pagination-lg &amp;gt; li &amp;gt; span {&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 17px;&lt;br /&gt;
  line-height: 1.3333333;&lt;br /&gt;
}&lt;br /&gt;
.pagination-lg &amp;gt; li:first-child &amp;gt; a,&lt;br /&gt;
.pagination-lg &amp;gt; li:first-child &amp;gt; span {&lt;br /&gt;
  border-bottom-left-radius: 3px;&lt;br /&gt;
  border-top-left-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.pagination-lg &amp;gt; li:last-child &amp;gt; a,&lt;br /&gt;
.pagination-lg &amp;gt; li:last-child &amp;gt; span {&lt;br /&gt;
  border-bottom-right-radius: 3px;&lt;br /&gt;
  border-top-right-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.pagination-sm &amp;gt; li &amp;gt; a,&lt;br /&gt;
.pagination-sm &amp;gt; li &amp;gt; span {&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
}&lt;br /&gt;
.pagination-sm &amp;gt; li:first-child &amp;gt; a,&lt;br /&gt;
.pagination-sm &amp;gt; li:first-child &amp;gt; span {&lt;br /&gt;
  border-bottom-left-radius: 1px;&lt;br /&gt;
  border-top-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pagination-sm &amp;gt; li:last-child &amp;gt; a,&lt;br /&gt;
.pagination-sm &amp;gt; li:last-child &amp;gt; span {&lt;br /&gt;
  border-bottom-right-radius: 1px;&lt;br /&gt;
  border-top-right-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.pager {&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  margin: 18px 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.pager li {&lt;br /&gt;
  display: inline;&lt;br /&gt;
}&lt;br /&gt;
.pager li &amp;gt; a,&lt;br /&gt;
.pager li &amp;gt; span {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 5px 14px;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 15px;&lt;br /&gt;
}&lt;br /&gt;
.pager li &amp;gt; a:hover,&lt;br /&gt;
.pager li &amp;gt; a:focus {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
.pager .next &amp;gt; a,&lt;br /&gt;
.pager .next &amp;gt; span {&lt;br /&gt;
  float: right;&lt;br /&gt;
}&lt;br /&gt;
.pager .previous &amp;gt; a,&lt;br /&gt;
.pager .previous &amp;gt; span {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.pager .disabled &amp;gt; a,&lt;br /&gt;
.pager .disabled &amp;gt; a:hover,&lt;br /&gt;
.pager .disabled &amp;gt; a:focus,&lt;br /&gt;
.pager .disabled &amp;gt; span {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.label {&lt;br /&gt;
  display: inline;&lt;br /&gt;
  padding: .2em .6em .3em;&lt;br /&gt;
  font-size: 75%;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
  border-radius: .25em;&lt;br /&gt;
}&lt;br /&gt;
a.label:hover,&lt;br /&gt;
a.label:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.label:empty {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.btn .label {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -1px;&lt;br /&gt;
}&lt;br /&gt;
.label-default {&lt;br /&gt;
  background-color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.label-default[href]:hover,&lt;br /&gt;
.label-default[href]:focus {&lt;br /&gt;
  background-color: #5e5e5e;&lt;br /&gt;
}&lt;br /&gt;
.label-primary {&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.label-primary[href]:hover,&lt;br /&gt;
.label-primary[href]:focus {&lt;br /&gt;
  background-color: #286090;&lt;br /&gt;
}&lt;br /&gt;
.label-success {&lt;br /&gt;
  background-color: #5cb85c;&lt;br /&gt;
}&lt;br /&gt;
.label-success[href]:hover,&lt;br /&gt;
.label-success[href]:focus {&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
}&lt;br /&gt;
.label-info {&lt;br /&gt;
  background-color: #5bc0de;&lt;br /&gt;
}&lt;br /&gt;
.label-info[href]:hover,&lt;br /&gt;
.label-info[href]:focus {&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
}&lt;br /&gt;
.label-warning {&lt;br /&gt;
  background-color: #f0ad4e;&lt;br /&gt;
}&lt;br /&gt;
.label-warning[href]:hover,&lt;br /&gt;
.label-warning[href]:focus {&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
}&lt;br /&gt;
.label-danger {&lt;br /&gt;
  background-color: #d9534f;&lt;br /&gt;
}&lt;br /&gt;
.label-danger[href]:hover,&lt;br /&gt;
.label-danger[href]:focus {&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
}&lt;br /&gt;
.badge {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  min-width: 10px;&lt;br /&gt;
  padding: 3px 7px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  white-space: nowrap;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  background-color: #777777;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
}&lt;br /&gt;
.badge:empty {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.btn .badge {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -1px;&lt;br /&gt;
}&lt;br /&gt;
.btn-xs .badge,&lt;br /&gt;
.btn-group-xs &amp;gt; .btn .badge {&lt;br /&gt;
  top: 0;&lt;br /&gt;
  padding: 1px 5px;&lt;br /&gt;
}&lt;br /&gt;
a.badge:hover,&lt;br /&gt;
a.badge:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.active &amp;gt; .badge,&lt;br /&gt;
.nav-pills &amp;gt; .active &amp;gt; a &amp;gt; .badge {&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item &amp;gt; .badge {&lt;br /&gt;
  float: right;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item &amp;gt; .badge + .badge {&lt;br /&gt;
  margin-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
.nav-pills &amp;gt; li &amp;gt; a &amp;gt; .badge {&lt;br /&gt;
  margin-left: 3px;&lt;br /&gt;
}&lt;br /&gt;
.jumbotron {&lt;br /&gt;
  padding-top: 30px;&lt;br /&gt;
  padding-bottom: 30px;&lt;br /&gt;
  margin-bottom: 30px;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
}&lt;br /&gt;
.jumbotron h1,&lt;br /&gt;
.jumbotron .h1 {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.jumbotron p {&lt;br /&gt;
  margin-bottom: 15px;&lt;br /&gt;
  font-size: 20px;&lt;br /&gt;
  font-weight: 200;&lt;br /&gt;
}&lt;br /&gt;
.jumbotron &amp;gt; hr {&lt;br /&gt;
  border-top-color: #d5d5d5;&lt;br /&gt;
}&lt;br /&gt;
.container .jumbotron,&lt;br /&gt;
.container-fluid .jumbotron {&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
  padding-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
.jumbotron .container {&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  .jumbotron {&lt;br /&gt;
    padding-top: 48px;&lt;br /&gt;
    padding-bottom: 48px;&lt;br /&gt;
  }&lt;br /&gt;
  .container .jumbotron,&lt;br /&gt;
  .container-fluid .jumbotron {&lt;br /&gt;
    padding-left: 60px;&lt;br /&gt;
    padding-right: 60px;&lt;br /&gt;
  }&lt;br /&gt;
  .jumbotron h1,&lt;br /&gt;
  .jumbotron .h1 {&lt;br /&gt;
    font-size: 59px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.thumbnail {&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-transition: border 0.2s ease-in-out;&lt;br /&gt;
  -o-transition: border 0.2s ease-in-out;&lt;br /&gt;
  transition: border 0.2s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
.thumbnail &amp;gt; img,&lt;br /&gt;
.thumbnail a &amp;gt; img {&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
}&lt;br /&gt;
a.thumbnail:hover,&lt;br /&gt;
a.thumbnail:focus,&lt;br /&gt;
a.thumbnail.active {&lt;br /&gt;
  border-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.thumbnail .caption {&lt;br /&gt;
  padding: 9px;&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
.alert {&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  border: 1px solid transparent;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.alert h4 {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.alert .alert-link {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.alert &amp;gt; p,&lt;br /&gt;
.alert &amp;gt; ul {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.alert &amp;gt; p + p {&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
}&lt;br /&gt;
.alert-dismissable,&lt;br /&gt;
.alert-dismissible {&lt;br /&gt;
  padding-right: 35px;&lt;br /&gt;
}&lt;br /&gt;
.alert-dismissable .close,&lt;br /&gt;
.alert-dismissible .close {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -2px;&lt;br /&gt;
  right: -21px;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.alert-success {&lt;br /&gt;
  background-color: #dff0d8;&lt;br /&gt;
  border-color: #d6e9c6;&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
.alert-success hr {&lt;br /&gt;
  border-top-color: #c9e2b3;&lt;br /&gt;
}&lt;br /&gt;
.alert-success .alert-link {&lt;br /&gt;
  color: #2b542c;&lt;br /&gt;
}&lt;br /&gt;
.alert-info {&lt;br /&gt;
  background-color: #d9edf7;&lt;br /&gt;
  border-color: #bce8f1;&lt;br /&gt;
  color: #31708f;&lt;br /&gt;
}&lt;br /&gt;
.alert-info hr {&lt;br /&gt;
  border-top-color: #a6e1ec;&lt;br /&gt;
}&lt;br /&gt;
.alert-info .alert-link {&lt;br /&gt;
  color: #245269;&lt;br /&gt;
}&lt;br /&gt;
.alert-warning {&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
  border-color: #faebcc;&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
.alert-warning hr {&lt;br /&gt;
  border-top-color: #f7e1b5;&lt;br /&gt;
}&lt;br /&gt;
.alert-warning .alert-link {&lt;br /&gt;
  color: #66512c;&lt;br /&gt;
}&lt;br /&gt;
.alert-danger {&lt;br /&gt;
  background-color: #f2dede;&lt;br /&gt;
  border-color: #ebccd1;&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
.alert-danger hr {&lt;br /&gt;
  border-top-color: #e4b9c0;&lt;br /&gt;
}&lt;br /&gt;
.alert-danger .alert-link {&lt;br /&gt;
  color: #843534;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes progress-bar-stripes {&lt;br /&gt;
  from {&lt;br /&gt;
    background-position: 40px 0;&lt;br /&gt;
  }&lt;br /&gt;
  to {&lt;br /&gt;
    background-position: 0 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes progress-bar-stripes {&lt;br /&gt;
  from {&lt;br /&gt;
    background-position: 40px 0;&lt;br /&gt;
  }&lt;br /&gt;
  to {&lt;br /&gt;
    background-position: 0 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.progress {&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  height: 18px;&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);&lt;br /&gt;
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);&lt;br /&gt;
}&lt;br /&gt;
.progress-bar {&lt;br /&gt;
  float: left;&lt;br /&gt;
  width: 0%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 18px;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);&lt;br /&gt;
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);&lt;br /&gt;
  -webkit-transition: width 0.6s ease;&lt;br /&gt;
  -o-transition: width 0.6s ease;&lt;br /&gt;
  transition: width 0.6s ease;&lt;br /&gt;
}&lt;br /&gt;
.progress-striped .progress-bar,&lt;br /&gt;
.progress-bar-striped {&lt;br /&gt;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-size: 40px 40px;&lt;br /&gt;
}&lt;br /&gt;
.progress.active .progress-bar,&lt;br /&gt;
.progress-bar.active {&lt;br /&gt;
  -webkit-animation: progress-bar-stripes 2s linear infinite;&lt;br /&gt;
  -o-animation: progress-bar-stripes 2s linear infinite;&lt;br /&gt;
  animation: progress-bar-stripes 2s linear infinite;&lt;br /&gt;
}&lt;br /&gt;
.progress-bar-success {&lt;br /&gt;
  background-color: #5cb85c;&lt;br /&gt;
}&lt;br /&gt;
.progress-striped .progress-bar-success {&lt;br /&gt;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
}&lt;br /&gt;
.progress-bar-info {&lt;br /&gt;
  background-color: #5bc0de;&lt;br /&gt;
}&lt;br /&gt;
.progress-striped .progress-bar-info {&lt;br /&gt;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
}&lt;br /&gt;
.progress-bar-warning {&lt;br /&gt;
  background-color: #f0ad4e;&lt;br /&gt;
}&lt;br /&gt;
.progress-striped .progress-bar-warning {&lt;br /&gt;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
}&lt;br /&gt;
.progress-bar-danger {&lt;br /&gt;
  background-color: #d9534f;&lt;br /&gt;
}&lt;br /&gt;
.progress-striped .progress-bar-danger {&lt;br /&gt;
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);&lt;br /&gt;
}&lt;br /&gt;
.media {&lt;br /&gt;
  margin-top: 15px;&lt;br /&gt;
}&lt;br /&gt;
.media:first-child {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
.media,&lt;br /&gt;
.media-body {&lt;br /&gt;
  zoom: 1;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.media-body {&lt;br /&gt;
  width: 10000px;&lt;br /&gt;
}&lt;br /&gt;
.media-object {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.media-object.img-thumbnail {&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
.media-right,&lt;br /&gt;
.media &amp;gt; .pull-right {&lt;br /&gt;
  padding-left: 10px;&lt;br /&gt;
}&lt;br /&gt;
.media-left,&lt;br /&gt;
.media &amp;gt; .pull-left {&lt;br /&gt;
  padding-right: 10px;&lt;br /&gt;
}&lt;br /&gt;
.media-left,&lt;br /&gt;
.media-right,&lt;br /&gt;
.media-body {&lt;br /&gt;
  display: table-cell;&lt;br /&gt;
  vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
.media-middle {&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.media-bottom {&lt;br /&gt;
  vertical-align: bottom;&lt;br /&gt;
}&lt;br /&gt;
.media-heading {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
.media-list {&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
}&lt;br /&gt;
.list-group {&lt;br /&gt;
  margin-bottom: 20px;&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: block;&lt;br /&gt;
  padding: 10px 15px;&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item:first-child {&lt;br /&gt;
  border-top-right-radius: 2px;&lt;br /&gt;
  border-top-left-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item:last-child {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  border-bottom-right-radius: 2px;&lt;br /&gt;
  border-bottom-left-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item,&lt;br /&gt;
button.list-group-item {&lt;br /&gt;
  color: #555;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item .list-group-item-heading,&lt;br /&gt;
button.list-group-item .list-group-item-heading {&lt;br /&gt;
  color: #333;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item:hover,&lt;br /&gt;
button.list-group-item:hover,&lt;br /&gt;
a.list-group-item:focus,&lt;br /&gt;
button.list-group-item:focus {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  color: #555;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
button.list-group-item {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.disabled,&lt;br /&gt;
.list-group-item.disabled:hover,&lt;br /&gt;
.list-group-item.disabled:focus {&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.disabled .list-group-item-heading,&lt;br /&gt;
.list-group-item.disabled:hover .list-group-item-heading,&lt;br /&gt;
.list-group-item.disabled:focus .list-group-item-heading {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.disabled .list-group-item-text,&lt;br /&gt;
.list-group-item.disabled:hover .list-group-item-text,&lt;br /&gt;
.list-group-item.disabled:focus .list-group-item-text {&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.active,&lt;br /&gt;
.list-group-item.active:hover,&lt;br /&gt;
.list-group-item.active:focus {&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
  border-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.active .list-group-item-heading,&lt;br /&gt;
.list-group-item.active:hover .list-group-item-heading,&lt;br /&gt;
.list-group-item.active:focus .list-group-item-heading,&lt;br /&gt;
.list-group-item.active .list-group-item-heading &amp;gt; small,&lt;br /&gt;
.list-group-item.active:hover .list-group-item-heading &amp;gt; small,&lt;br /&gt;
.list-group-item.active:focus .list-group-item-heading &amp;gt; small,&lt;br /&gt;
.list-group-item.active .list-group-item-heading &amp;gt; .small,&lt;br /&gt;
.list-group-item.active:hover .list-group-item-heading &amp;gt; .small,&lt;br /&gt;
.list-group-item.active:focus .list-group-item-heading &amp;gt; .small {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item.active .list-group-item-text,&lt;br /&gt;
.list-group-item.active:hover .list-group-item-text,&lt;br /&gt;
.list-group-item.active:focus .list-group-item-text {&lt;br /&gt;
  color: #c7ddef;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item-success {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
  background-color: #dff0d8;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-success,&lt;br /&gt;
button.list-group-item-success {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-success .list-group-item-heading,&lt;br /&gt;
button.list-group-item-success .list-group-item-heading {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-success:hover,&lt;br /&gt;
button.list-group-item-success:hover,&lt;br /&gt;
a.list-group-item-success:focus,&lt;br /&gt;
button.list-group-item-success:focus {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
  background-color: #d0e9c6;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-success.active,&lt;br /&gt;
button.list-group-item-success.active,&lt;br /&gt;
a.list-group-item-success.active:hover,&lt;br /&gt;
button.list-group-item-success.active:hover,&lt;br /&gt;
a.list-group-item-success.active:focus,&lt;br /&gt;
button.list-group-item-success.active:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #3c763d;&lt;br /&gt;
  border-color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item-info {&lt;br /&gt;
  color: #31708f;&lt;br /&gt;
  background-color: #d9edf7;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-info,&lt;br /&gt;
button.list-group-item-info {&lt;br /&gt;
  color: #31708f;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-info .list-group-item-heading,&lt;br /&gt;
button.list-group-item-info .list-group-item-heading {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-info:hover,&lt;br /&gt;
button.list-group-item-info:hover,&lt;br /&gt;
a.list-group-item-info:focus,&lt;br /&gt;
button.list-group-item-info:focus {&lt;br /&gt;
  color: #31708f;&lt;br /&gt;
  background-color: #c4e3f3;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-info.active,&lt;br /&gt;
button.list-group-item-info.active,&lt;br /&gt;
a.list-group-item-info.active:hover,&lt;br /&gt;
button.list-group-item-info.active:hover,&lt;br /&gt;
a.list-group-item-info.active:focus,&lt;br /&gt;
button.list-group-item-info.active:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31708f;&lt;br /&gt;
  border-color: #31708f;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item-warning {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-warning,&lt;br /&gt;
button.list-group-item-warning {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-warning .list-group-item-heading,&lt;br /&gt;
button.list-group-item-warning .list-group-item-heading {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-warning:hover,&lt;br /&gt;
button.list-group-item-warning:hover,&lt;br /&gt;
a.list-group-item-warning:focus,&lt;br /&gt;
button.list-group-item-warning:focus {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
  background-color: #faf2cc;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-warning.active,&lt;br /&gt;
button.list-group-item-warning.active,&lt;br /&gt;
a.list-group-item-warning.active:hover,&lt;br /&gt;
button.list-group-item-warning.active:hover,&lt;br /&gt;
a.list-group-item-warning.active:focus,&lt;br /&gt;
button.list-group-item-warning.active:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #8a6d3b;&lt;br /&gt;
  border-color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item-danger {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
  background-color: #f2dede;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-danger,&lt;br /&gt;
button.list-group-item-danger {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-danger .list-group-item-heading,&lt;br /&gt;
button.list-group-item-danger .list-group-item-heading {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-danger:hover,&lt;br /&gt;
button.list-group-item-danger:hover,&lt;br /&gt;
a.list-group-item-danger:focus,&lt;br /&gt;
button.list-group-item-danger:focus {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
  background-color: #ebcccc;&lt;br /&gt;
}&lt;br /&gt;
a.list-group-item-danger.active,&lt;br /&gt;
button.list-group-item-danger.active,&lt;br /&gt;
a.list-group-item-danger.active:hover,&lt;br /&gt;
button.list-group-item-danger.active:hover,&lt;br /&gt;
a.list-group-item-danger.active:focus,&lt;br /&gt;
button.list-group-item-danger.active:focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #a94442;&lt;br /&gt;
  border-color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item-heading {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
}&lt;br /&gt;
.list-group-item-text {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
.panel {&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid transparent;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);&lt;br /&gt;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);&lt;br /&gt;
}&lt;br /&gt;
.panel-body {&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
}&lt;br /&gt;
.panel-heading {&lt;br /&gt;
  padding: 10px 15px;&lt;br /&gt;
  border-bottom: 1px solid transparent;&lt;br /&gt;
  border-top-right-radius: 1px;&lt;br /&gt;
  border-top-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel-heading &amp;gt; .dropdown .dropdown-toggle {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.panel-title {&lt;br /&gt;
  margin-top: 0;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  font-size: 15px;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.panel-title &amp;gt; a,&lt;br /&gt;
.panel-title &amp;gt; small,&lt;br /&gt;
.panel-title &amp;gt; .small,&lt;br /&gt;
.panel-title &amp;gt; small &amp;gt; a,&lt;br /&gt;
.panel-title &amp;gt; .small &amp;gt; a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
}&lt;br /&gt;
.panel-footer {&lt;br /&gt;
  padding: 10px 15px;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
  border-top: 1px solid #ddd;&lt;br /&gt;
  border-bottom-right-radius: 1px;&lt;br /&gt;
  border-bottom-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .list-group,&lt;br /&gt;
.panel &amp;gt; .panel-collapse &amp;gt; .list-group {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .list-group .list-group-item,&lt;br /&gt;
.panel &amp;gt; .panel-collapse &amp;gt; .list-group .list-group-item {&lt;br /&gt;
  border-width: 1px 0;&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .list-group:first-child .list-group-item:first-child,&lt;br /&gt;
.panel &amp;gt; .panel-collapse &amp;gt; .list-group:first-child .list-group-item:first-child {&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
  border-top-right-radius: 1px;&lt;br /&gt;
  border-top-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .list-group:last-child .list-group-item:last-child,&lt;br /&gt;
.panel &amp;gt; .panel-collapse &amp;gt; .list-group:last-child .list-group-item:last-child {&lt;br /&gt;
  border-bottom: 0;&lt;br /&gt;
  border-bottom-right-radius: 1px;&lt;br /&gt;
  border-bottom-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .panel-heading + .panel-collapse &amp;gt; .list-group .list-group-item:first-child {&lt;br /&gt;
  border-top-right-radius: 0;&lt;br /&gt;
  border-top-left-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel-heading + .list-group .list-group-item:first-child {&lt;br /&gt;
  border-top-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.list-group + .panel-footer {&lt;br /&gt;
  border-top-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table,&lt;br /&gt;
.panel &amp;gt; .panel-collapse &amp;gt; .table {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table caption,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table caption,&lt;br /&gt;
.panel &amp;gt; .panel-collapse &amp;gt; .table caption {&lt;br /&gt;
  padding-left: 15px;&lt;br /&gt;
  padding-right: 15px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child {&lt;br /&gt;
  border-top-right-radius: 1px;&lt;br /&gt;
  border-top-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child {&lt;br /&gt;
  border-top-left-radius: 1px;&lt;br /&gt;
  border-top-right-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child th:first-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child th:first-child {&lt;br /&gt;
  border-top-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; thead:first-child &amp;gt; tr:first-child th:last-child,&lt;br /&gt;
.panel &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:first-child &amp;gt; .table:first-child &amp;gt; tbody:first-child &amp;gt; tr:first-child th:last-child {&lt;br /&gt;
  border-top-right-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child {&lt;br /&gt;
  border-bottom-right-radius: 1px;&lt;br /&gt;
  border-bottom-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child {&lt;br /&gt;
  border-bottom-left-radius: 1px;&lt;br /&gt;
  border-bottom-right-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child td:first-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child th:first-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child th:first-child {&lt;br /&gt;
  border-bottom-left-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child td:last-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tbody:last-child &amp;gt; tr:last-child th:last-child,&lt;br /&gt;
.panel &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive:last-child &amp;gt; .table:last-child &amp;gt; tfoot:last-child &amp;gt; tr:last-child th:last-child {&lt;br /&gt;
  border-bottom-right-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .panel-body + .table,&lt;br /&gt;
.panel &amp;gt; .panel-body + .table-responsive,&lt;br /&gt;
.panel &amp;gt; .table + .panel-body,&lt;br /&gt;
.panel &amp;gt; .table-responsive + .panel-body {&lt;br /&gt;
  border-top: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table &amp;gt; tbody:first-child &amp;gt; tr:first-child th,&lt;br /&gt;
.panel &amp;gt; .table &amp;gt; tbody:first-child &amp;gt; tr:first-child td {&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table-bordered,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered {&lt;br /&gt;
  border: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th:first-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td:first-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td:first-child {&lt;br /&gt;
  border-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; th:last-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td:last-child,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr &amp;gt; td:last-child {&lt;br /&gt;
  border-right: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr:first-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr:first-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:first-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:first-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr:first-child &amp;gt; th,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; thead &amp;gt; tr:first-child &amp;gt; th,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:first-child &amp;gt; th,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:first-child &amp;gt; th {&lt;br /&gt;
  border-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:last-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:last-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr:last-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr:last-child &amp;gt; td,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:last-child &amp;gt; th,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tbody &amp;gt; tr:last-child &amp;gt; th,&lt;br /&gt;
.panel &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr:last-child &amp;gt; th,&lt;br /&gt;
.panel &amp;gt; .table-responsive &amp;gt; .table-bordered &amp;gt; tfoot &amp;gt; tr:last-child &amp;gt; th {&lt;br /&gt;
  border-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel &amp;gt; .table-responsive {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel-group {&lt;br /&gt;
  margin-bottom: 18px;&lt;br /&gt;
}&lt;br /&gt;
.panel-group .panel {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.panel-group .panel + .panel {&lt;br /&gt;
  margin-top: 5px;&lt;br /&gt;
}&lt;br /&gt;
.panel-group .panel-heading {&lt;br /&gt;
  border-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel-group .panel-heading + .panel-collapse &amp;gt; .panel-body,&lt;br /&gt;
.panel-group .panel-heading + .panel-collapse &amp;gt; .list-group {&lt;br /&gt;
  border-top: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel-group .panel-footer {&lt;br /&gt;
  border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
.panel-group .panel-footer + .panel-collapse .panel-body {&lt;br /&gt;
  border-bottom: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel-default {&lt;br /&gt;
  border-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel-default &amp;gt; .panel-heading {&lt;br /&gt;
  color: #333333;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
  border-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel-default &amp;gt; .panel-heading + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-top-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel-default &amp;gt; .panel-heading .badge {&lt;br /&gt;
  color: #f5f5f5;&lt;br /&gt;
  background-color: #333333;&lt;br /&gt;
}&lt;br /&gt;
.panel-default &amp;gt; .panel-footer + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-bottom-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.panel-primary {&lt;br /&gt;
  border-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.panel-primary &amp;gt; .panel-heading {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #337ab7;&lt;br /&gt;
  border-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.panel-primary &amp;gt; .panel-heading + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-top-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.panel-primary &amp;gt; .panel-heading .badge {&lt;br /&gt;
  color: #337ab7;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.panel-primary &amp;gt; .panel-footer + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-bottom-color: #337ab7;&lt;br /&gt;
}&lt;br /&gt;
.panel-success {&lt;br /&gt;
  border-color: #d6e9c6;&lt;br /&gt;
}&lt;br /&gt;
.panel-success &amp;gt; .panel-heading {&lt;br /&gt;
  color: #3c763d;&lt;br /&gt;
  background-color: #dff0d8;&lt;br /&gt;
  border-color: #d6e9c6;&lt;br /&gt;
}&lt;br /&gt;
.panel-success &amp;gt; .panel-heading + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-top-color: #d6e9c6;&lt;br /&gt;
}&lt;br /&gt;
.panel-success &amp;gt; .panel-heading .badge {&lt;br /&gt;
  color: #dff0d8;&lt;br /&gt;
  background-color: #3c763d;&lt;br /&gt;
}&lt;br /&gt;
.panel-success &amp;gt; .panel-footer + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-bottom-color: #d6e9c6;&lt;br /&gt;
}&lt;br /&gt;
.panel-info {&lt;br /&gt;
  border-color: #bce8f1;&lt;br /&gt;
}&lt;br /&gt;
.panel-info &amp;gt; .panel-heading {&lt;br /&gt;
  color: #31708f;&lt;br /&gt;
  background-color: #d9edf7;&lt;br /&gt;
  border-color: #bce8f1;&lt;br /&gt;
}&lt;br /&gt;
.panel-info &amp;gt; .panel-heading + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-top-color: #bce8f1;&lt;br /&gt;
}&lt;br /&gt;
.panel-info &amp;gt; .panel-heading .badge {&lt;br /&gt;
  color: #d9edf7;&lt;br /&gt;
  background-color: #31708f;&lt;br /&gt;
}&lt;br /&gt;
.panel-info &amp;gt; .panel-footer + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-bottom-color: #bce8f1;&lt;br /&gt;
}&lt;br /&gt;
.panel-warning {&lt;br /&gt;
  border-color: #faebcc;&lt;br /&gt;
}&lt;br /&gt;
.panel-warning &amp;gt; .panel-heading {&lt;br /&gt;
  color: #8a6d3b;&lt;br /&gt;
  background-color: #fcf8e3;&lt;br /&gt;
  border-color: #faebcc;&lt;br /&gt;
}&lt;br /&gt;
.panel-warning &amp;gt; .panel-heading + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-top-color: #faebcc;&lt;br /&gt;
}&lt;br /&gt;
.panel-warning &amp;gt; .panel-heading .badge {&lt;br /&gt;
  color: #fcf8e3;&lt;br /&gt;
  background-color: #8a6d3b;&lt;br /&gt;
}&lt;br /&gt;
.panel-warning &amp;gt; .panel-footer + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-bottom-color: #faebcc;&lt;br /&gt;
}&lt;br /&gt;
.panel-danger {&lt;br /&gt;
  border-color: #ebccd1;&lt;br /&gt;
}&lt;br /&gt;
.panel-danger &amp;gt; .panel-heading {&lt;br /&gt;
  color: #a94442;&lt;br /&gt;
  background-color: #f2dede;&lt;br /&gt;
  border-color: #ebccd1;&lt;br /&gt;
}&lt;br /&gt;
.panel-danger &amp;gt; .panel-heading + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-top-color: #ebccd1;&lt;br /&gt;
}&lt;br /&gt;
.panel-danger &amp;gt; .panel-heading .badge {&lt;br /&gt;
  color: #f2dede;&lt;br /&gt;
  background-color: #a94442;&lt;br /&gt;
}&lt;br /&gt;
.panel-danger &amp;gt; .panel-footer + .panel-collapse &amp;gt; .panel-body {&lt;br /&gt;
  border-bottom-color: #ebccd1;&lt;br /&gt;
}&lt;br /&gt;
.embed-responsive {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: block;&lt;br /&gt;
  height: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.embed-responsive .embed-responsive-item,&lt;br /&gt;
.embed-responsive iframe,&lt;br /&gt;
.embed-responsive embed,&lt;br /&gt;
.embed-responsive object,&lt;br /&gt;
.embed-responsive video {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  border: 0;&lt;br /&gt;
}&lt;br /&gt;
.embed-responsive-16by9 {&lt;br /&gt;
  padding-bottom: 56.25%;&lt;br /&gt;
}&lt;br /&gt;
.embed-responsive-4by3 {&lt;br /&gt;
  padding-bottom: 75%;&lt;br /&gt;
}&lt;br /&gt;
.well {&lt;br /&gt;
  min-height: 20px;&lt;br /&gt;
  padding: 19px;&lt;br /&gt;
  margin-bottom: 20px;&lt;br /&gt;
  background-color: #f5f5f5;&lt;br /&gt;
  border: 1px solid #e3e3e3;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);&lt;br /&gt;
}&lt;br /&gt;
.well blockquote {&lt;br /&gt;
  border-color: #ddd;&lt;br /&gt;
  border-color: rgba(0, 0, 0, 0.15);&lt;br /&gt;
}&lt;br /&gt;
.well-lg {&lt;br /&gt;
  padding: 24px;&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
}&lt;br /&gt;
.well-sm {&lt;br /&gt;
  padding: 9px;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
}&lt;br /&gt;
.close {&lt;br /&gt;
  float: right;&lt;br /&gt;
  font-size: 19.5px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  text-shadow: 0 1px 0 #fff;&lt;br /&gt;
  opacity: 0.2;&lt;br /&gt;
  filter: alpha(opacity=20);&lt;br /&gt;
}&lt;br /&gt;
.close:hover,&lt;br /&gt;
.close:focus {&lt;br /&gt;
  color: #000;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
  filter: alpha(opacity=50);&lt;br /&gt;
}&lt;br /&gt;
button.close {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background: transparent;&lt;br /&gt;
  border: 0;&lt;br /&gt;
  -webkit-appearance: none;&lt;br /&gt;
}&lt;br /&gt;
.modal-open {&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.modal {&lt;br /&gt;
  display: none;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 1050;&lt;br /&gt;
  -webkit-overflow-scrolling: touch;&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
.modal.fade .modal-dialog {&lt;br /&gt;
  -webkit-transform: translate(0, -25%);&lt;br /&gt;
  -ms-transform: translate(0, -25%);&lt;br /&gt;
  -o-transform: translate(0, -25%);&lt;br /&gt;
  transform: translate(0, -25%);&lt;br /&gt;
  -webkit-transition: -webkit-transform 0.3s ease-out;&lt;br /&gt;
  -moz-transition: -moz-transform 0.3s ease-out;&lt;br /&gt;
  -o-transition: -o-transform 0.3s ease-out;&lt;br /&gt;
  transition: transform 0.3s ease-out;&lt;br /&gt;
}&lt;br /&gt;
.modal.in .modal-dialog {&lt;br /&gt;
  -webkit-transform: translate(0, 0);&lt;br /&gt;
  -ms-transform: translate(0, 0);&lt;br /&gt;
  -o-transform: translate(0, 0);&lt;br /&gt;
  transform: translate(0, 0);&lt;br /&gt;
}&lt;br /&gt;
.modal-open .modal {&lt;br /&gt;
  overflow-x: hidden;&lt;br /&gt;
  overflow-y: auto;&lt;br /&gt;
}&lt;br /&gt;
.modal-dialog {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin: 10px;&lt;br /&gt;
}&lt;br /&gt;
.modal-content {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border: 1px solid #999;&lt;br /&gt;
  border: 1px solid rgba(0, 0, 0, 0.2);&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);&lt;br /&gt;
  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);&lt;br /&gt;
  background-clip: padding-box;&lt;br /&gt;
  outline: 0;&lt;br /&gt;
}&lt;br /&gt;
.modal-backdrop {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 1040;&lt;br /&gt;
  background-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.modal-backdrop.fade {&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  filter: alpha(opacity=0);&lt;br /&gt;
}&lt;br /&gt;
.modal-backdrop.in {&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
  filter: alpha(opacity=50);&lt;br /&gt;
}&lt;br /&gt;
.modal-header {&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  border-bottom: 1px solid #e5e5e5;&lt;br /&gt;
}&lt;br /&gt;
.modal-header .close {&lt;br /&gt;
  margin-top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.modal-title {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
}&lt;br /&gt;
.modal-body {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
}&lt;br /&gt;
.modal-footer {&lt;br /&gt;
  padding: 15px;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  border-top: 1px solid #e5e5e5;&lt;br /&gt;
}&lt;br /&gt;
.modal-footer .btn + .btn {&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.modal-footer .btn-group .btn + .btn {&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
}&lt;br /&gt;
.modal-footer .btn-block + .btn-block {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
.modal-scrollbar-measure {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: -9999px;&lt;br /&gt;
  width: 50px;&lt;br /&gt;
  height: 50px;&lt;br /&gt;
  overflow: scroll;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .modal-dialog {&lt;br /&gt;
    width: 600px;&lt;br /&gt;
    margin: 30px auto;&lt;br /&gt;
  }&lt;br /&gt;
  .modal-content {&lt;br /&gt;
    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);&lt;br /&gt;
    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);&lt;br /&gt;
  }&lt;br /&gt;
  .modal-sm {&lt;br /&gt;
    width: 300px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) {&lt;br /&gt;
  .modal-lg {&lt;br /&gt;
    width: 900px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.tooltip {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  z-index: 1070;&lt;br /&gt;
  display: block;&lt;br /&gt;
  font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  letter-spacing: normal;&lt;br /&gt;
  line-break: auto;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  text-align: start;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  text-shadow: none;&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  white-space: normal;&lt;br /&gt;
  word-break: normal;&lt;br /&gt;
  word-spacing: normal;&lt;br /&gt;
  word-wrap: normal;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  filter: alpha(opacity=0);&lt;br /&gt;
}&lt;br /&gt;
.tooltip.in {&lt;br /&gt;
  opacity: 0.9;&lt;br /&gt;
  filter: alpha(opacity=90);&lt;br /&gt;
}&lt;br /&gt;
.tooltip.top {&lt;br /&gt;
  margin-top: -3px;&lt;br /&gt;
  padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.right {&lt;br /&gt;
  margin-left: 3px;&lt;br /&gt;
  padding: 0 5px;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.bottom {&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
  padding: 5px 0;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.left {&lt;br /&gt;
  margin-left: -3px;&lt;br /&gt;
  padding: 0 5px;&lt;br /&gt;
}&lt;br /&gt;
.tooltip-inner {&lt;br /&gt;
  max-width: 200px;&lt;br /&gt;
  padding: 3px 8px;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  background-color: #000;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.tooltip-arrow {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  width: 0;&lt;br /&gt;
  height: 0;&lt;br /&gt;
  border-color: transparent;&lt;br /&gt;
  border-style: solid;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.top .tooltip-arrow {&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -5px;&lt;br /&gt;
  border-width: 5px 5px 0;&lt;br /&gt;
  border-top-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.top-left .tooltip-arrow {&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  right: 5px;&lt;br /&gt;
  margin-bottom: -5px;&lt;br /&gt;
  border-width: 5px 5px 0;&lt;br /&gt;
  border-top-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.top-right .tooltip-arrow {&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  left: 5px;&lt;br /&gt;
  margin-bottom: -5px;&lt;br /&gt;
  border-width: 5px 5px 0;&lt;br /&gt;
  border-top-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.right .tooltip-arrow {&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  margin-top: -5px;&lt;br /&gt;
  border-width: 5px 5px 5px 0;&lt;br /&gt;
  border-right-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.left .tooltip-arrow {&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  margin-top: -5px;&lt;br /&gt;
  border-width: 5px 0 5px 5px;&lt;br /&gt;
  border-left-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.bottom .tooltip-arrow {&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -5px;&lt;br /&gt;
  border-width: 0 5px 5px;&lt;br /&gt;
  border-bottom-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.bottom-left .tooltip-arrow {&lt;br /&gt;
  top: 0;&lt;br /&gt;
  right: 5px;&lt;br /&gt;
  margin-top: -5px;&lt;br /&gt;
  border-width: 0 5px 5px;&lt;br /&gt;
  border-bottom-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.tooltip.bottom-right .tooltip-arrow {&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 5px;&lt;br /&gt;
  margin-top: -5px;&lt;br /&gt;
  border-width: 0 5px 5px;&lt;br /&gt;
  border-bottom-color: #000;&lt;br /&gt;
}&lt;br /&gt;
.popover {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  z-index: 1060;&lt;br /&gt;
  display: none;&lt;br /&gt;
  max-width: 276px;&lt;br /&gt;
  padding: 1px;&lt;br /&gt;
  font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  letter-spacing: normal;&lt;br /&gt;
  line-break: auto;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  text-align: start;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  text-shadow: none;&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
  white-space: normal;&lt;br /&gt;
  word-break: normal;&lt;br /&gt;
  word-spacing: normal;&lt;br /&gt;
  word-wrap: normal;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  background-clip: padding-box;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border: 1px solid rgba(0, 0, 0, 0.2);&lt;br /&gt;
  border-radius: 3px;&lt;br /&gt;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);&lt;br /&gt;
  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);&lt;br /&gt;
}&lt;br /&gt;
.popover.top {&lt;br /&gt;
  margin-top: -10px;&lt;br /&gt;
}&lt;br /&gt;
.popover.right {&lt;br /&gt;
  margin-left: 10px;&lt;br /&gt;
}&lt;br /&gt;
.popover.bottom {&lt;br /&gt;
  margin-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.popover.left {&lt;br /&gt;
  margin-left: -10px;&lt;br /&gt;
}&lt;br /&gt;
.popover-title {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 8px 14px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  background-color: #f7f7f7;&lt;br /&gt;
  border-bottom: 1px solid #ebebeb;&lt;br /&gt;
  border-radius: 2px 2px 0 0;&lt;br /&gt;
}&lt;br /&gt;
.popover-content {&lt;br /&gt;
  padding: 9px 14px;&lt;br /&gt;
}&lt;br /&gt;
.popover &amp;gt; .arrow,&lt;br /&gt;
.popover &amp;gt; .arrow:after {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 0;&lt;br /&gt;
  height: 0;&lt;br /&gt;
  border-color: transparent;&lt;br /&gt;
  border-style: solid;&lt;br /&gt;
}&lt;br /&gt;
.popover &amp;gt; .arrow {&lt;br /&gt;
  border-width: 11px;&lt;br /&gt;
}&lt;br /&gt;
.popover &amp;gt; .arrow:after {&lt;br /&gt;
  border-width: 10px;&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.popover.top &amp;gt; .arrow {&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -11px;&lt;br /&gt;
  border-bottom-width: 0;&lt;br /&gt;
  border-top-color: #999999;&lt;br /&gt;
  border-top-color: rgba(0, 0, 0, 0.25);&lt;br /&gt;
  bottom: -11px;&lt;br /&gt;
}&lt;br /&gt;
.popover.top &amp;gt; .arrow:after {&lt;br /&gt;
  content: &amp;quot; &amp;quot;;&lt;br /&gt;
  bottom: 1px;&lt;br /&gt;
  margin-left: -10px;&lt;br /&gt;
  border-bottom-width: 0;&lt;br /&gt;
  border-top-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.popover.right &amp;gt; .arrow {&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  left: -11px;&lt;br /&gt;
  margin-top: -11px;&lt;br /&gt;
  border-left-width: 0;&lt;br /&gt;
  border-right-color: #999999;&lt;br /&gt;
  border-right-color: rgba(0, 0, 0, 0.25);&lt;br /&gt;
}&lt;br /&gt;
.popover.right &amp;gt; .arrow:after {&lt;br /&gt;
  content: &amp;quot; &amp;quot;;&lt;br /&gt;
  left: 1px;&lt;br /&gt;
  bottom: -10px;&lt;br /&gt;
  border-left-width: 0;&lt;br /&gt;
  border-right-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.popover.bottom &amp;gt; .arrow {&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -11px;&lt;br /&gt;
  border-top-width: 0;&lt;br /&gt;
  border-bottom-color: #999999;&lt;br /&gt;
  border-bottom-color: rgba(0, 0, 0, 0.25);&lt;br /&gt;
  top: -11px;&lt;br /&gt;
}&lt;br /&gt;
.popover.bottom &amp;gt; .arrow:after {&lt;br /&gt;
  content: &amp;quot; &amp;quot;;&lt;br /&gt;
  top: 1px;&lt;br /&gt;
  margin-left: -10px;&lt;br /&gt;
  border-top-width: 0;&lt;br /&gt;
  border-bottom-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.popover.left &amp;gt; .arrow {&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  right: -11px;&lt;br /&gt;
  margin-top: -11px;&lt;br /&gt;
  border-right-width: 0;&lt;br /&gt;
  border-left-color: #999999;&lt;br /&gt;
  border-left-color: rgba(0, 0, 0, 0.25);&lt;br /&gt;
}&lt;br /&gt;
.popover.left &amp;gt; .arrow:after {&lt;br /&gt;
  content: &amp;quot; &amp;quot;;&lt;br /&gt;
  right: 1px;&lt;br /&gt;
  border-right-width: 0;&lt;br /&gt;
  border-left-color: #fff;&lt;br /&gt;
  bottom: -10px;&lt;br /&gt;
}&lt;br /&gt;
.carousel {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .item {&lt;br /&gt;
  display: none;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  -webkit-transition: 0.6s ease-in-out left;&lt;br /&gt;
  -o-transition: 0.6s ease-in-out left;&lt;br /&gt;
  transition: 0.6s ease-in-out left;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .item &amp;gt; img,&lt;br /&gt;
.carousel-inner &amp;gt; .item &amp;gt; a &amp;gt; img {&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
@media all and (transform-3d), (-webkit-transform-3d) {&lt;br /&gt;
  .carousel-inner &amp;gt; .item {&lt;br /&gt;
    -webkit-transition: -webkit-transform 0.6s ease-in-out;&lt;br /&gt;
    -moz-transition: -moz-transform 0.6s ease-in-out;&lt;br /&gt;
    -o-transition: -o-transform 0.6s ease-in-out;&lt;br /&gt;
    transition: transform 0.6s ease-in-out;&lt;br /&gt;
    -webkit-backface-visibility: hidden;&lt;br /&gt;
    -moz-backface-visibility: hidden;&lt;br /&gt;
    backface-visibility: hidden;&lt;br /&gt;
    -webkit-perspective: 1000px;&lt;br /&gt;
    -moz-perspective: 1000px;&lt;br /&gt;
    perspective: 1000px;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-inner &amp;gt; .item.next,&lt;br /&gt;
  .carousel-inner &amp;gt; .item.active.right {&lt;br /&gt;
    -webkit-transform: translate3d(100%, 0, 0);&lt;br /&gt;
    transform: translate3d(100%, 0, 0);&lt;br /&gt;
    left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-inner &amp;gt; .item.prev,&lt;br /&gt;
  .carousel-inner &amp;gt; .item.active.left {&lt;br /&gt;
    -webkit-transform: translate3d(-100%, 0, 0);&lt;br /&gt;
    transform: translate3d(-100%, 0, 0);&lt;br /&gt;
    left: 0;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-inner &amp;gt; .item.next.left,&lt;br /&gt;
  .carousel-inner &amp;gt; .item.prev.right,&lt;br /&gt;
  .carousel-inner &amp;gt; .item.active {&lt;br /&gt;
    -webkit-transform: translate3d(0, 0, 0);&lt;br /&gt;
    transform: translate3d(0, 0, 0);&lt;br /&gt;
    left: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .active,&lt;br /&gt;
.carousel-inner &amp;gt; .next,&lt;br /&gt;
.carousel-inner &amp;gt; .prev {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .active {&lt;br /&gt;
  left: 0;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .next,&lt;br /&gt;
.carousel-inner &amp;gt; .prev {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .next {&lt;br /&gt;
  left: 100%;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .prev {&lt;br /&gt;
  left: -100%;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .next.left,&lt;br /&gt;
.carousel-inner &amp;gt; .prev.right {&lt;br /&gt;
  left: 0;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .active.left {&lt;br /&gt;
  left: -100%;&lt;br /&gt;
}&lt;br /&gt;
.carousel-inner &amp;gt; .active.right {&lt;br /&gt;
  left: 100%;&lt;br /&gt;
}&lt;br /&gt;
.carousel-control {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  bottom: 0;&lt;br /&gt;
  width: 15%;&lt;br /&gt;
  opacity: 0.5;&lt;br /&gt;
  filter: alpha(opacity=50);&lt;br /&gt;
  font-size: 20px;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);&lt;br /&gt;
  background-color: rgba(0, 0, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
.carousel-control.left {&lt;br /&gt;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);&lt;br /&gt;
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);&lt;br /&gt;
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);&lt;br /&gt;
}&lt;br /&gt;
.carousel-control.right {&lt;br /&gt;
  left: auto;&lt;br /&gt;
  right: 0;&lt;br /&gt;
  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);&lt;br /&gt;
  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);&lt;br /&gt;
  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);&lt;br /&gt;
  background-repeat: repeat-x;&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);&lt;br /&gt;
}&lt;br /&gt;
.carousel-control:hover,&lt;br /&gt;
.carousel-control:focus {&lt;br /&gt;
  outline: 0;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  opacity: 0.9;&lt;br /&gt;
  filter: alpha(opacity=90);&lt;br /&gt;
}&lt;br /&gt;
.carousel-control .icon-prev,&lt;br /&gt;
.carousel-control .icon-next,&lt;br /&gt;
.carousel-control .glyphicon-chevron-left,&lt;br /&gt;
.carousel-control .glyphicon-chevron-right {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 50%;&lt;br /&gt;
  margin-top: -10px;&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.carousel-control .icon-prev,&lt;br /&gt;
.carousel-control .glyphicon-chevron-left {&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  margin-left: -10px;&lt;br /&gt;
}&lt;br /&gt;
.carousel-control .icon-next,&lt;br /&gt;
.carousel-control .glyphicon-chevron-right {&lt;br /&gt;
  right: 50%;&lt;br /&gt;
  margin-right: -10px;&lt;br /&gt;
}&lt;br /&gt;
.carousel-control .icon-prev,&lt;br /&gt;
.carousel-control .icon-next {&lt;br /&gt;
  width: 20px;&lt;br /&gt;
  height: 20px;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
  font-family: serif;&lt;br /&gt;
}&lt;br /&gt;
.carousel-control .icon-prev:before {&lt;br /&gt;
  content: '\2039';&lt;br /&gt;
}&lt;br /&gt;
.carousel-control .icon-next:before {&lt;br /&gt;
  content: '\203a';&lt;br /&gt;
}&lt;br /&gt;
.carousel-indicators {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  bottom: 10px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  z-index: 15;&lt;br /&gt;
  width: 60%;&lt;br /&gt;
  margin-left: -30%;&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  list-style: none;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.carousel-indicators li {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 10px;&lt;br /&gt;
  height: 10px;&lt;br /&gt;
  margin: 1px;&lt;br /&gt;
  text-indent: -999px;&lt;br /&gt;
  border: 1px solid #fff;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  background-color: #000 \9;&lt;br /&gt;
  background-color: rgba(0, 0, 0, 0);&lt;br /&gt;
}&lt;br /&gt;
.carousel-indicators .active {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  width: 12px;&lt;br /&gt;
  height: 12px;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.carousel-caption {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 15%;&lt;br /&gt;
  right: 15%;&lt;br /&gt;
  bottom: 20px;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
  padding-top: 20px;&lt;br /&gt;
  padding-bottom: 20px;&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);&lt;br /&gt;
}&lt;br /&gt;
.carousel-caption .btn {&lt;br /&gt;
  text-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
@media screen and (min-width: 768px) {&lt;br /&gt;
  .carousel-control .glyphicon-chevron-left,&lt;br /&gt;
  .carousel-control .glyphicon-chevron-right,&lt;br /&gt;
  .carousel-control .icon-prev,&lt;br /&gt;
  .carousel-control .icon-next {&lt;br /&gt;
    width: 30px;&lt;br /&gt;
    height: 30px;&lt;br /&gt;
    margin-top: -10px;&lt;br /&gt;
    font-size: 30px;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-control .glyphicon-chevron-left,&lt;br /&gt;
  .carousel-control .icon-prev {&lt;br /&gt;
    margin-left: -10px;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-control .glyphicon-chevron-right,&lt;br /&gt;
  .carousel-control .icon-next {&lt;br /&gt;
    margin-right: -10px;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-caption {&lt;br /&gt;
    left: 20%;&lt;br /&gt;
    right: 20%;&lt;br /&gt;
    padding-bottom: 30px;&lt;br /&gt;
  }&lt;br /&gt;
  .carousel-indicators {&lt;br /&gt;
    bottom: 20px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.clearfix:before,&lt;br /&gt;
.clearfix:after,&lt;br /&gt;
.dl-horizontal dd:before,&lt;br /&gt;
.dl-horizontal dd:after,&lt;br /&gt;
.container:before,&lt;br /&gt;
.container:after,&lt;br /&gt;
.container-fluid:before,&lt;br /&gt;
.container-fluid:after,&lt;br /&gt;
.row:before,&lt;br /&gt;
.row:after,&lt;br /&gt;
.form-horizontal .form-group:before,&lt;br /&gt;
.form-horizontal .form-group:after,&lt;br /&gt;
.btn-toolbar:before,&lt;br /&gt;
.btn-toolbar:after,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:before,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:after,&lt;br /&gt;
.nav:before,&lt;br /&gt;
.nav:after,&lt;br /&gt;
.navbar:before,&lt;br /&gt;
.navbar:after,&lt;br /&gt;
.navbar-header:before,&lt;br /&gt;
.navbar-header:after,&lt;br /&gt;
.navbar-collapse:before,&lt;br /&gt;
.navbar-collapse:after,&lt;br /&gt;
.pager:before,&lt;br /&gt;
.pager:after,&lt;br /&gt;
.panel-body:before,&lt;br /&gt;
.panel-body:after,&lt;br /&gt;
.modal-header:before,&lt;br /&gt;
.modal-header:after,&lt;br /&gt;
.modal-footer:before,&lt;br /&gt;
.modal-footer:after,&lt;br /&gt;
.item_buttons:before,&lt;br /&gt;
.item_buttons:after {&lt;br /&gt;
  content: &amp;quot; &amp;quot;;&lt;br /&gt;
  display: table;&lt;br /&gt;
}&lt;br /&gt;
.clearfix:after,&lt;br /&gt;
.dl-horizontal dd:after,&lt;br /&gt;
.container:after,&lt;br /&gt;
.container-fluid:after,&lt;br /&gt;
.row:after,&lt;br /&gt;
.form-horizontal .form-group:after,&lt;br /&gt;
.btn-toolbar:after,&lt;br /&gt;
.btn-group-vertical &amp;gt; .btn-group:after,&lt;br /&gt;
.nav:after,&lt;br /&gt;
.navbar:after,&lt;br /&gt;
.navbar-header:after,&lt;br /&gt;
.navbar-collapse:after,&lt;br /&gt;
.pager:after,&lt;br /&gt;
.panel-body:after,&lt;br /&gt;
.modal-header:after,&lt;br /&gt;
.modal-footer:after,&lt;br /&gt;
.item_buttons:after {&lt;br /&gt;
  clear: both;&lt;br /&gt;
}&lt;br /&gt;
.center-block {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
}&lt;br /&gt;
.pull-right {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
}&lt;br /&gt;
.pull-left {&lt;br /&gt;
  float: left !important;&lt;br /&gt;
}&lt;br /&gt;
.hide {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.show {&lt;br /&gt;
  display: block !important;&lt;br /&gt;
}&lt;br /&gt;
.invisible {&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
}&lt;br /&gt;
.text-hide {&lt;br /&gt;
  font: 0/0 a;&lt;br /&gt;
  color: transparent;&lt;br /&gt;
  text-shadow: none;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  border: 0;&lt;br /&gt;
}&lt;br /&gt;
.hidden {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.affix {&lt;br /&gt;
  position: fixed;&lt;br /&gt;
}&lt;br /&gt;
@-ms-viewport {&lt;br /&gt;
  width: device-width;&lt;br /&gt;
}&lt;br /&gt;
.visible-xs,&lt;br /&gt;
.visible-sm,&lt;br /&gt;
.visible-md,&lt;br /&gt;
.visible-lg {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
.visible-xs-block,&lt;br /&gt;
.visible-xs-inline,&lt;br /&gt;
.visible-xs-inline-block,&lt;br /&gt;
.visible-sm-block,&lt;br /&gt;
.visible-sm-inline,&lt;br /&gt;
.visible-sm-inline-block,&lt;br /&gt;
.visible-md-block,&lt;br /&gt;
.visible-md-inline,&lt;br /&gt;
.visible-md-inline-block,&lt;br /&gt;
.visible-lg-block,&lt;br /&gt;
.visible-lg-inline,&lt;br /&gt;
.visible-lg-inline-block {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  .visible-xs {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
  table.visible-xs {&lt;br /&gt;
    display: table !important;&lt;br /&gt;
  }&lt;br /&gt;
  tr.visible-xs {&lt;br /&gt;
    display: table-row !important;&lt;br /&gt;
  }&lt;br /&gt;
  th.visible-xs,&lt;br /&gt;
  td.visible-xs {&lt;br /&gt;
    display: table-cell !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  .visible-xs-block {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  .visible-xs-inline {&lt;br /&gt;
    display: inline !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  .visible-xs-inline-block {&lt;br /&gt;
    display: inline-block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) and (max-width: 991px) {&lt;br /&gt;
  .visible-sm {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
  table.visible-sm {&lt;br /&gt;
    display: table !important;&lt;br /&gt;
  }&lt;br /&gt;
  tr.visible-sm {&lt;br /&gt;
    display: table-row !important;&lt;br /&gt;
  }&lt;br /&gt;
  th.visible-sm,&lt;br /&gt;
  td.visible-sm {&lt;br /&gt;
    display: table-cell !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) and (max-width: 991px) {&lt;br /&gt;
  .visible-sm-block {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) and (max-width: 991px) {&lt;br /&gt;
  .visible-sm-inline {&lt;br /&gt;
    display: inline !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) and (max-width: 991px) {&lt;br /&gt;
  .visible-sm-inline-block {&lt;br /&gt;
    display: inline-block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) and (max-width: 1199px) {&lt;br /&gt;
  .visible-md {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
  table.visible-md {&lt;br /&gt;
    display: table !important;&lt;br /&gt;
  }&lt;br /&gt;
  tr.visible-md {&lt;br /&gt;
    display: table-row !important;&lt;br /&gt;
  }&lt;br /&gt;
  th.visible-md,&lt;br /&gt;
  td.visible-md {&lt;br /&gt;
    display: table-cell !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) and (max-width: 1199px) {&lt;br /&gt;
  .visible-md-block {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) and (max-width: 1199px) {&lt;br /&gt;
  .visible-md-inline {&lt;br /&gt;
    display: inline !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) and (max-width: 1199px) {&lt;br /&gt;
  .visible-md-inline-block {&lt;br /&gt;
    display: inline-block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .visible-lg {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
  table.visible-lg {&lt;br /&gt;
    display: table !important;&lt;br /&gt;
  }&lt;br /&gt;
  tr.visible-lg {&lt;br /&gt;
    display: table-row !important;&lt;br /&gt;
  }&lt;br /&gt;
  th.visible-lg,&lt;br /&gt;
  td.visible-lg {&lt;br /&gt;
    display: table-cell !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .visible-lg-block {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .visible-lg-inline {&lt;br /&gt;
    display: inline !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .visible-lg-inline-block {&lt;br /&gt;
    display: inline-block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  .hidden-xs {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) and (max-width: 991px) {&lt;br /&gt;
  .hidden-sm {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 992px) and (max-width: 1199px) {&lt;br /&gt;
  .hidden-md {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 1200px) {&lt;br /&gt;
  .hidden-lg {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.visible-print {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .visible-print {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
  table.visible-print {&lt;br /&gt;
    display: table !important;&lt;br /&gt;
  }&lt;br /&gt;
  tr.visible-print {&lt;br /&gt;
    display: table-row !important;&lt;br /&gt;
  }&lt;br /&gt;
  th.visible-print,&lt;br /&gt;
  td.visible-print {&lt;br /&gt;
    display: table-cell !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.visible-print-block {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .visible-print-block {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.visible-print-inline {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .visible-print-inline {&lt;br /&gt;
    display: inline !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.visible-print-inline-block {&lt;br /&gt;
  display: none !important;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .visible-print-inline-block {&lt;br /&gt;
    display: inline-block !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .hidden-print {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* Font Awesome&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
/*!&lt;br /&gt;
 *  Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome&lt;br /&gt;
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)&lt;br /&gt;
 */&lt;br /&gt;
/* FONT PATH&lt;br /&gt;
 * -------------------------- */&lt;br /&gt;
@font-face {&lt;br /&gt;
  font-family: 'FontAwesome';&lt;br /&gt;
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0');&lt;br /&gt;
  src: url('../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&amp;amp;v=4.2.0') format('embedded-opentype'), url('../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0') format('woff'), url('../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0') format('truetype'), url('../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular') format('svg');&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
  font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
.fa {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
}&lt;br /&gt;
/* makes the font 33% larger relative to the icon container */&lt;br /&gt;
.fa-lg {&lt;br /&gt;
  font-size: 1.33333333em;&lt;br /&gt;
  line-height: 0.75em;&lt;br /&gt;
  vertical-align: -15%;&lt;br /&gt;
}&lt;br /&gt;
.fa-2x {&lt;br /&gt;
  font-size: 2em;&lt;br /&gt;
}&lt;br /&gt;
.fa-3x {&lt;br /&gt;
  font-size: 3em;&lt;br /&gt;
}&lt;br /&gt;
.fa-4x {&lt;br /&gt;
  font-size: 4em;&lt;br /&gt;
}&lt;br /&gt;
.fa-5x {&lt;br /&gt;
  font-size: 5em;&lt;br /&gt;
}&lt;br /&gt;
.fa-fw {&lt;br /&gt;
  width: 1.28571429em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.fa-ul {&lt;br /&gt;
  padding-left: 0;&lt;br /&gt;
  margin-left: 2.14285714em;&lt;br /&gt;
  list-style-type: none;&lt;br /&gt;
}&lt;br /&gt;
.fa-ul &amp;gt; li {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.fa-li {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: -2.14285714em;&lt;br /&gt;
  width: 2.14285714em;&lt;br /&gt;
  top: 0.14285714em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.fa-li.fa-lg {&lt;br /&gt;
  left: -1.85714286em;&lt;br /&gt;
}&lt;br /&gt;
.fa-border {&lt;br /&gt;
  padding: .2em .25em .15em;&lt;br /&gt;
  border: solid 0.08em #eee;&lt;br /&gt;
  border-radius: .1em;&lt;br /&gt;
}&lt;br /&gt;
.pull-right {&lt;br /&gt;
  float: right;&lt;br /&gt;
}&lt;br /&gt;
.pull-left {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.fa.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.fa.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.fa-spin {&lt;br /&gt;
  -webkit-animation: fa-spin 2s infinite linear;&lt;br /&gt;
  animation: fa-spin 2s infinite linear;&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes fa-spin {&lt;br /&gt;
  0% {&lt;br /&gt;
    -webkit-transform: rotate(0deg);&lt;br /&gt;
    transform: rotate(0deg);&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    -webkit-transform: rotate(359deg);&lt;br /&gt;
    transform: rotate(359deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@keyframes fa-spin {&lt;br /&gt;
  0% {&lt;br /&gt;
    -webkit-transform: rotate(0deg);&lt;br /&gt;
    transform: rotate(0deg);&lt;br /&gt;
  }&lt;br /&gt;
  100% {&lt;br /&gt;
    -webkit-transform: rotate(359deg);&lt;br /&gt;
    transform: rotate(359deg);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.fa-rotate-90 {&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);&lt;br /&gt;
  -webkit-transform: rotate(90deg);&lt;br /&gt;
  -ms-transform: rotate(90deg);&lt;br /&gt;
  transform: rotate(90deg);&lt;br /&gt;
}&lt;br /&gt;
.fa-rotate-180 {&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);&lt;br /&gt;
  -webkit-transform: rotate(180deg);&lt;br /&gt;
  -ms-transform: rotate(180deg);&lt;br /&gt;
  transform: rotate(180deg);&lt;br /&gt;
}&lt;br /&gt;
.fa-rotate-270 {&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);&lt;br /&gt;
  -webkit-transform: rotate(270deg);&lt;br /&gt;
  -ms-transform: rotate(270deg);&lt;br /&gt;
  transform: rotate(270deg);&lt;br /&gt;
}&lt;br /&gt;
.fa-flip-horizontal {&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);&lt;br /&gt;
  -webkit-transform: scale(-1, 1);&lt;br /&gt;
  -ms-transform: scale(-1, 1);&lt;br /&gt;
  transform: scale(-1, 1);&lt;br /&gt;
}&lt;br /&gt;
.fa-flip-vertical {&lt;br /&gt;
  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);&lt;br /&gt;
  -webkit-transform: scale(1, -1);&lt;br /&gt;
  -ms-transform: scale(1, -1);&lt;br /&gt;
  transform: scale(1, -1);&lt;br /&gt;
}&lt;br /&gt;
:root .fa-rotate-90,&lt;br /&gt;
:root .fa-rotate-180,&lt;br /&gt;
:root .fa-rotate-270,&lt;br /&gt;
:root .fa-flip-horizontal,&lt;br /&gt;
:root .fa-flip-vertical {&lt;br /&gt;
  filter: none;&lt;br /&gt;
}&lt;br /&gt;
.fa-stack {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 2em;&lt;br /&gt;
  height: 2em;&lt;br /&gt;
  line-height: 2em;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.fa-stack-1x,&lt;br /&gt;
.fa-stack-2x {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.fa-stack-1x {&lt;br /&gt;
  line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
.fa-stack-2x {&lt;br /&gt;
  font-size: 2em;&lt;br /&gt;
}&lt;br /&gt;
.fa-inverse {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
}&lt;br /&gt;
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen&lt;br /&gt;
   readers do not read off random characters that represent icons */&lt;br /&gt;
.fa-glass:before {&lt;br /&gt;
  content: &amp;quot;\f000&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-music:before {&lt;br /&gt;
  content: &amp;quot;\f001&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-search:before {&lt;br /&gt;
  content: &amp;quot;\f002&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-envelope-o:before {&lt;br /&gt;
  content: &amp;quot;\f003&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-heart:before {&lt;br /&gt;
  content: &amp;quot;\f004&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-star:before {&lt;br /&gt;
  content: &amp;quot;\f005&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-star-o:before {&lt;br /&gt;
  content: &amp;quot;\f006&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-user:before {&lt;br /&gt;
  content: &amp;quot;\f007&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-film:before {&lt;br /&gt;
  content: &amp;quot;\f008&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-th-large:before {&lt;br /&gt;
  content: &amp;quot;\f009&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-th:before {&lt;br /&gt;
  content: &amp;quot;\f00a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-th-list:before {&lt;br /&gt;
  content: &amp;quot;\f00b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-check:before {&lt;br /&gt;
  content: &amp;quot;\f00c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-remove:before,&lt;br /&gt;
.fa-close:before,&lt;br /&gt;
.fa-times:before {&lt;br /&gt;
  content: &amp;quot;\f00d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-search-plus:before {&lt;br /&gt;
  content: &amp;quot;\f00e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-search-minus:before {&lt;br /&gt;
  content: &amp;quot;\f010&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-power-off:before {&lt;br /&gt;
  content: &amp;quot;\f011&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-signal:before {&lt;br /&gt;
  content: &amp;quot;\f012&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-gear:before,&lt;br /&gt;
.fa-cog:before {&lt;br /&gt;
  content: &amp;quot;\f013&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-trash-o:before {&lt;br /&gt;
  content: &amp;quot;\f014&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-home:before {&lt;br /&gt;
  content: &amp;quot;\f015&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-o:before {&lt;br /&gt;
  content: &amp;quot;\f016&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-clock-o:before {&lt;br /&gt;
  content: &amp;quot;\f017&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-road:before {&lt;br /&gt;
  content: &amp;quot;\f018&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-download:before {&lt;br /&gt;
  content: &amp;quot;\f019&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-o-down:before {&lt;br /&gt;
  content: &amp;quot;\f01a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-o-up:before {&lt;br /&gt;
  content: &amp;quot;\f01b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-inbox:before {&lt;br /&gt;
  content: &amp;quot;\f01c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-play-circle-o:before {&lt;br /&gt;
  content: &amp;quot;\f01d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-rotate-right:before,&lt;br /&gt;
.fa-repeat:before {&lt;br /&gt;
  content: &amp;quot;\f01e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-refresh:before {&lt;br /&gt;
  content: &amp;quot;\f021&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-list-alt:before {&lt;br /&gt;
  content: &amp;quot;\f022&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-lock:before {&lt;br /&gt;
  content: &amp;quot;\f023&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-flag:before {&lt;br /&gt;
  content: &amp;quot;\f024&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-headphones:before {&lt;br /&gt;
  content: &amp;quot;\f025&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-volume-off:before {&lt;br /&gt;
  content: &amp;quot;\f026&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-volume-down:before {&lt;br /&gt;
  content: &amp;quot;\f027&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-volume-up:before {&lt;br /&gt;
  content: &amp;quot;\f028&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-qrcode:before {&lt;br /&gt;
  content: &amp;quot;\f029&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-barcode:before {&lt;br /&gt;
  content: &amp;quot;\f02a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tag:before {&lt;br /&gt;
  content: &amp;quot;\f02b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tags:before {&lt;br /&gt;
  content: &amp;quot;\f02c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-book:before {&lt;br /&gt;
  content: &amp;quot;\f02d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bookmark:before {&lt;br /&gt;
  content: &amp;quot;\f02e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-print:before {&lt;br /&gt;
  content: &amp;quot;\f02f&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-camera:before {&lt;br /&gt;
  content: &amp;quot;\f030&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-font:before {&lt;br /&gt;
  content: &amp;quot;\f031&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bold:before {&lt;br /&gt;
  content: &amp;quot;\f032&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-italic:before {&lt;br /&gt;
  content: &amp;quot;\f033&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-text-height:before {&lt;br /&gt;
  content: &amp;quot;\f034&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-text-width:before {&lt;br /&gt;
  content: &amp;quot;\f035&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-align-left:before {&lt;br /&gt;
  content: &amp;quot;\f036&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-align-center:before {&lt;br /&gt;
  content: &amp;quot;\f037&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-align-right:before {&lt;br /&gt;
  content: &amp;quot;\f038&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-align-justify:before {&lt;br /&gt;
  content: &amp;quot;\f039&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-list:before {&lt;br /&gt;
  content: &amp;quot;\f03a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-dedent:before,&lt;br /&gt;
.fa-outdent:before {&lt;br /&gt;
  content: &amp;quot;\f03b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-indent:before {&lt;br /&gt;
  content: &amp;quot;\f03c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-video-camera:before {&lt;br /&gt;
  content: &amp;quot;\f03d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-photo:before,&lt;br /&gt;
.fa-image:before,&lt;br /&gt;
.fa-picture-o:before {&lt;br /&gt;
  content: &amp;quot;\f03e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pencil:before {&lt;br /&gt;
  content: &amp;quot;\f040&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-map-marker:before {&lt;br /&gt;
  content: &amp;quot;\f041&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-adjust:before {&lt;br /&gt;
  content: &amp;quot;\f042&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tint:before {&lt;br /&gt;
  content: &amp;quot;\f043&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-edit:before,&lt;br /&gt;
.fa-pencil-square-o:before {&lt;br /&gt;
  content: &amp;quot;\f044&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-share-square-o:before {&lt;br /&gt;
  content: &amp;quot;\f045&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-check-square-o:before {&lt;br /&gt;
  content: &amp;quot;\f046&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrows:before {&lt;br /&gt;
  content: &amp;quot;\f047&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-step-backward:before {&lt;br /&gt;
  content: &amp;quot;\f048&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-fast-backward:before {&lt;br /&gt;
  content: &amp;quot;\f049&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-backward:before {&lt;br /&gt;
  content: &amp;quot;\f04a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-play:before {&lt;br /&gt;
  content: &amp;quot;\f04b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pause:before {&lt;br /&gt;
  content: &amp;quot;\f04c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-stop:before {&lt;br /&gt;
  content: &amp;quot;\f04d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-forward:before {&lt;br /&gt;
  content: &amp;quot;\f04e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-fast-forward:before {&lt;br /&gt;
  content: &amp;quot;\f050&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-step-forward:before {&lt;br /&gt;
  content: &amp;quot;\f051&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-eject:before {&lt;br /&gt;
  content: &amp;quot;\f052&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-left:before {&lt;br /&gt;
  content: &amp;quot;\f053&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-right:before {&lt;br /&gt;
  content: &amp;quot;\f054&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-plus-circle:before {&lt;br /&gt;
  content: &amp;quot;\f055&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-minus-circle:before {&lt;br /&gt;
  content: &amp;quot;\f056&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-times-circle:before {&lt;br /&gt;
  content: &amp;quot;\f057&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-check-circle:before {&lt;br /&gt;
  content: &amp;quot;\f058&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-question-circle:before {&lt;br /&gt;
  content: &amp;quot;\f059&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-info-circle:before {&lt;br /&gt;
  content: &amp;quot;\f05a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-crosshairs:before {&lt;br /&gt;
  content: &amp;quot;\f05b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-times-circle-o:before {&lt;br /&gt;
  content: &amp;quot;\f05c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-check-circle-o:before {&lt;br /&gt;
  content: &amp;quot;\f05d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ban:before {&lt;br /&gt;
  content: &amp;quot;\f05e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-left:before {&lt;br /&gt;
  content: &amp;quot;\f060&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-right:before {&lt;br /&gt;
  content: &amp;quot;\f061&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-up:before {&lt;br /&gt;
  content: &amp;quot;\f062&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-down:before {&lt;br /&gt;
  content: &amp;quot;\f063&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-mail-forward:before,&lt;br /&gt;
.fa-share:before {&lt;br /&gt;
  content: &amp;quot;\f064&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-expand:before {&lt;br /&gt;
  content: &amp;quot;\f065&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-compress:before {&lt;br /&gt;
  content: &amp;quot;\f066&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-plus:before {&lt;br /&gt;
  content: &amp;quot;\f067&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-minus:before {&lt;br /&gt;
  content: &amp;quot;\f068&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-asterisk:before {&lt;br /&gt;
  content: &amp;quot;\f069&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-exclamation-circle:before {&lt;br /&gt;
  content: &amp;quot;\f06a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-gift:before {&lt;br /&gt;
  content: &amp;quot;\f06b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-leaf:before {&lt;br /&gt;
  content: &amp;quot;\f06c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-fire:before {&lt;br /&gt;
  content: &amp;quot;\f06d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-eye:before {&lt;br /&gt;
  content: &amp;quot;\f06e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-eye-slash:before {&lt;br /&gt;
  content: &amp;quot;\f070&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-warning:before,&lt;br /&gt;
.fa-exclamation-triangle:before {&lt;br /&gt;
  content: &amp;quot;\f071&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-plane:before {&lt;br /&gt;
  content: &amp;quot;\f072&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-calendar:before {&lt;br /&gt;
  content: &amp;quot;\f073&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-random:before {&lt;br /&gt;
  content: &amp;quot;\f074&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-comment:before {&lt;br /&gt;
  content: &amp;quot;\f075&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-magnet:before {&lt;br /&gt;
  content: &amp;quot;\f076&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-up:before {&lt;br /&gt;
  content: &amp;quot;\f077&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-down:before {&lt;br /&gt;
  content: &amp;quot;\f078&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-retweet:before {&lt;br /&gt;
  content: &amp;quot;\f079&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-shopping-cart:before {&lt;br /&gt;
  content: &amp;quot;\f07a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-folder:before {&lt;br /&gt;
  content: &amp;quot;\f07b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-folder-open:before {&lt;br /&gt;
  content: &amp;quot;\f07c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrows-v:before {&lt;br /&gt;
  content: &amp;quot;\f07d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrows-h:before {&lt;br /&gt;
  content: &amp;quot;\f07e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bar-chart-o:before,&lt;br /&gt;
.fa-bar-chart:before {&lt;br /&gt;
  content: &amp;quot;\f080&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-twitter-square:before {&lt;br /&gt;
  content: &amp;quot;\f081&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-facebook-square:before {&lt;br /&gt;
  content: &amp;quot;\f082&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-camera-retro:before {&lt;br /&gt;
  content: &amp;quot;\f083&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-key:before {&lt;br /&gt;
  content: &amp;quot;\f084&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-gears:before,&lt;br /&gt;
.fa-cogs:before {&lt;br /&gt;
  content: &amp;quot;\f085&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-comments:before {&lt;br /&gt;
  content: &amp;quot;\f086&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-thumbs-o-up:before {&lt;br /&gt;
  content: &amp;quot;\f087&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-thumbs-o-down:before {&lt;br /&gt;
  content: &amp;quot;\f088&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-star-half:before {&lt;br /&gt;
  content: &amp;quot;\f089&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-heart-o:before {&lt;br /&gt;
  content: &amp;quot;\f08a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sign-out:before {&lt;br /&gt;
  content: &amp;quot;\f08b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-linkedin-square:before {&lt;br /&gt;
  content: &amp;quot;\f08c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-thumb-tack:before {&lt;br /&gt;
  content: &amp;quot;\f08d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-external-link:before {&lt;br /&gt;
  content: &amp;quot;\f08e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sign-in:before {&lt;br /&gt;
  content: &amp;quot;\f090&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-trophy:before {&lt;br /&gt;
  content: &amp;quot;\f091&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-github-square:before {&lt;br /&gt;
  content: &amp;quot;\f092&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-upload:before {&lt;br /&gt;
  content: &amp;quot;\f093&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-lemon-o:before {&lt;br /&gt;
  content: &amp;quot;\f094&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-phone:before {&lt;br /&gt;
  content: &amp;quot;\f095&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-square-o:before {&lt;br /&gt;
  content: &amp;quot;\f096&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bookmark-o:before {&lt;br /&gt;
  content: &amp;quot;\f097&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-phone-square:before {&lt;br /&gt;
  content: &amp;quot;\f098&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-twitter:before {&lt;br /&gt;
  content: &amp;quot;\f099&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-facebook:before {&lt;br /&gt;
  content: &amp;quot;\f09a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-github:before {&lt;br /&gt;
  content: &amp;quot;\f09b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-unlock:before {&lt;br /&gt;
  content: &amp;quot;\f09c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-credit-card:before {&lt;br /&gt;
  content: &amp;quot;\f09d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-rss:before {&lt;br /&gt;
  content: &amp;quot;\f09e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hdd-o:before {&lt;br /&gt;
  content: &amp;quot;\f0a0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bullhorn:before {&lt;br /&gt;
  content: &amp;quot;\f0a1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bell:before {&lt;br /&gt;
  content: &amp;quot;\f0f3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-certificate:before {&lt;br /&gt;
  content: &amp;quot;\f0a3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hand-o-right:before {&lt;br /&gt;
  content: &amp;quot;\f0a4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hand-o-left:before {&lt;br /&gt;
  content: &amp;quot;\f0a5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hand-o-up:before {&lt;br /&gt;
  content: &amp;quot;\f0a6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hand-o-down:before {&lt;br /&gt;
  content: &amp;quot;\f0a7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-left:before {&lt;br /&gt;
  content: &amp;quot;\f0a8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-right:before {&lt;br /&gt;
  content: &amp;quot;\f0a9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-up:before {&lt;br /&gt;
  content: &amp;quot;\f0aa&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-down:before {&lt;br /&gt;
  content: &amp;quot;\f0ab&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-globe:before {&lt;br /&gt;
  content: &amp;quot;\f0ac&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-wrench:before {&lt;br /&gt;
  content: &amp;quot;\f0ad&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tasks:before {&lt;br /&gt;
  content: &amp;quot;\f0ae&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-filter:before {&lt;br /&gt;
  content: &amp;quot;\f0b0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-briefcase:before {&lt;br /&gt;
  content: &amp;quot;\f0b1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrows-alt:before {&lt;br /&gt;
  content: &amp;quot;\f0b2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-group:before,&lt;br /&gt;
.fa-users:before {&lt;br /&gt;
  content: &amp;quot;\f0c0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chain:before,&lt;br /&gt;
.fa-link:before {&lt;br /&gt;
  content: &amp;quot;\f0c1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cloud:before {&lt;br /&gt;
  content: &amp;quot;\f0c2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-flask:before {&lt;br /&gt;
  content: &amp;quot;\f0c3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cut:before,&lt;br /&gt;
.fa-scissors:before {&lt;br /&gt;
  content: &amp;quot;\f0c4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-copy:before,&lt;br /&gt;
.fa-files-o:before {&lt;br /&gt;
  content: &amp;quot;\f0c5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-paperclip:before {&lt;br /&gt;
  content: &amp;quot;\f0c6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-save:before,&lt;br /&gt;
.fa-floppy-o:before {&lt;br /&gt;
  content: &amp;quot;\f0c7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-square:before {&lt;br /&gt;
  content: &amp;quot;\f0c8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-navicon:before,&lt;br /&gt;
.fa-reorder:before,&lt;br /&gt;
.fa-bars:before {&lt;br /&gt;
  content: &amp;quot;\f0c9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-list-ul:before {&lt;br /&gt;
  content: &amp;quot;\f0ca&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-list-ol:before {&lt;br /&gt;
  content: &amp;quot;\f0cb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-strikethrough:before {&lt;br /&gt;
  content: &amp;quot;\f0cc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-underline:before {&lt;br /&gt;
  content: &amp;quot;\f0cd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-table:before {&lt;br /&gt;
  content: &amp;quot;\f0ce&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-magic:before {&lt;br /&gt;
  content: &amp;quot;\f0d0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-truck:before {&lt;br /&gt;
  content: &amp;quot;\f0d1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pinterest:before {&lt;br /&gt;
  content: &amp;quot;\f0d2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pinterest-square:before {&lt;br /&gt;
  content: &amp;quot;\f0d3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-google-plus-square:before {&lt;br /&gt;
  content: &amp;quot;\f0d4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-google-plus:before {&lt;br /&gt;
  content: &amp;quot;\f0d5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-money:before {&lt;br /&gt;
  content: &amp;quot;\f0d6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-caret-down:before {&lt;br /&gt;
  content: &amp;quot;\f0d7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-caret-up:before {&lt;br /&gt;
  content: &amp;quot;\f0d8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-caret-left:before {&lt;br /&gt;
  content: &amp;quot;\f0d9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-caret-right:before {&lt;br /&gt;
  content: &amp;quot;\f0da&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-columns:before {&lt;br /&gt;
  content: &amp;quot;\f0db&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-unsorted:before,&lt;br /&gt;
.fa-sort:before {&lt;br /&gt;
  content: &amp;quot;\f0dc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-down:before,&lt;br /&gt;
.fa-sort-desc:before {&lt;br /&gt;
  content: &amp;quot;\f0dd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-up:before,&lt;br /&gt;
.fa-sort-asc:before {&lt;br /&gt;
  content: &amp;quot;\f0de&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-envelope:before {&lt;br /&gt;
  content: &amp;quot;\f0e0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-linkedin:before {&lt;br /&gt;
  content: &amp;quot;\f0e1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-rotate-left:before,&lt;br /&gt;
.fa-undo:before {&lt;br /&gt;
  content: &amp;quot;\f0e2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-legal:before,&lt;br /&gt;
.fa-gavel:before {&lt;br /&gt;
  content: &amp;quot;\f0e3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-dashboard:before,&lt;br /&gt;
.fa-tachometer:before {&lt;br /&gt;
  content: &amp;quot;\f0e4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-comment-o:before {&lt;br /&gt;
  content: &amp;quot;\f0e5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-comments-o:before {&lt;br /&gt;
  content: &amp;quot;\f0e6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-flash:before,&lt;br /&gt;
.fa-bolt:before {&lt;br /&gt;
  content: &amp;quot;\f0e7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sitemap:before {&lt;br /&gt;
  content: &amp;quot;\f0e8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-umbrella:before {&lt;br /&gt;
  content: &amp;quot;\f0e9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-paste:before,&lt;br /&gt;
.fa-clipboard:before {&lt;br /&gt;
  content: &amp;quot;\f0ea&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-lightbulb-o:before {&lt;br /&gt;
  content: &amp;quot;\f0eb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-exchange:before {&lt;br /&gt;
  content: &amp;quot;\f0ec&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cloud-download:before {&lt;br /&gt;
  content: &amp;quot;\f0ed&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cloud-upload:before {&lt;br /&gt;
  content: &amp;quot;\f0ee&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-user-md:before {&lt;br /&gt;
  content: &amp;quot;\f0f0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-stethoscope:before {&lt;br /&gt;
  content: &amp;quot;\f0f1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-suitcase:before {&lt;br /&gt;
  content: &amp;quot;\f0f2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bell-o:before {&lt;br /&gt;
  content: &amp;quot;\f0a2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-coffee:before {&lt;br /&gt;
  content: &amp;quot;\f0f4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cutlery:before {&lt;br /&gt;
  content: &amp;quot;\f0f5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-text-o:before {&lt;br /&gt;
  content: &amp;quot;\f0f6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-building-o:before {&lt;br /&gt;
  content: &amp;quot;\f0f7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hospital-o:before {&lt;br /&gt;
  content: &amp;quot;\f0f8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ambulance:before {&lt;br /&gt;
  content: &amp;quot;\f0f9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-medkit:before {&lt;br /&gt;
  content: &amp;quot;\f0fa&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-fighter-jet:before {&lt;br /&gt;
  content: &amp;quot;\f0fb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-beer:before {&lt;br /&gt;
  content: &amp;quot;\f0fc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-h-square:before {&lt;br /&gt;
  content: &amp;quot;\f0fd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-plus-square:before {&lt;br /&gt;
  content: &amp;quot;\f0fe&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-double-left:before {&lt;br /&gt;
  content: &amp;quot;\f100&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-double-right:before {&lt;br /&gt;
  content: &amp;quot;\f101&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-double-up:before {&lt;br /&gt;
  content: &amp;quot;\f102&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-double-down:before {&lt;br /&gt;
  content: &amp;quot;\f103&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-left:before {&lt;br /&gt;
  content: &amp;quot;\f104&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-right:before {&lt;br /&gt;
  content: &amp;quot;\f105&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-up:before {&lt;br /&gt;
  content: &amp;quot;\f106&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angle-down:before {&lt;br /&gt;
  content: &amp;quot;\f107&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-desktop:before {&lt;br /&gt;
  content: &amp;quot;\f108&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-laptop:before {&lt;br /&gt;
  content: &amp;quot;\f109&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tablet:before {&lt;br /&gt;
  content: &amp;quot;\f10a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-mobile-phone:before,&lt;br /&gt;
.fa-mobile:before {&lt;br /&gt;
  content: &amp;quot;\f10b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-circle-o:before {&lt;br /&gt;
  content: &amp;quot;\f10c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-quote-left:before {&lt;br /&gt;
  content: &amp;quot;\f10d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-quote-right:before {&lt;br /&gt;
  content: &amp;quot;\f10e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-spinner:before {&lt;br /&gt;
  content: &amp;quot;\f110&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-circle:before {&lt;br /&gt;
  content: &amp;quot;\f111&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-mail-reply:before,&lt;br /&gt;
.fa-reply:before {&lt;br /&gt;
  content: &amp;quot;\f112&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-github-alt:before {&lt;br /&gt;
  content: &amp;quot;\f113&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-folder-o:before {&lt;br /&gt;
  content: &amp;quot;\f114&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-folder-open-o:before {&lt;br /&gt;
  content: &amp;quot;\f115&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-smile-o:before {&lt;br /&gt;
  content: &amp;quot;\f118&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-frown-o:before {&lt;br /&gt;
  content: &amp;quot;\f119&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-meh-o:before {&lt;br /&gt;
  content: &amp;quot;\f11a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-gamepad:before {&lt;br /&gt;
  content: &amp;quot;\f11b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-keyboard-o:before {&lt;br /&gt;
  content: &amp;quot;\f11c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-flag-o:before {&lt;br /&gt;
  content: &amp;quot;\f11d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-flag-checkered:before {&lt;br /&gt;
  content: &amp;quot;\f11e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-terminal:before {&lt;br /&gt;
  content: &amp;quot;\f120&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-code:before {&lt;br /&gt;
  content: &amp;quot;\f121&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-mail-reply-all:before,&lt;br /&gt;
.fa-reply-all:before {&lt;br /&gt;
  content: &amp;quot;\f122&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-star-half-empty:before,&lt;br /&gt;
.fa-star-half-full:before,&lt;br /&gt;
.fa-star-half-o:before {&lt;br /&gt;
  content: &amp;quot;\f123&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-location-arrow:before {&lt;br /&gt;
  content: &amp;quot;\f124&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-crop:before {&lt;br /&gt;
  content: &amp;quot;\f125&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-code-fork:before {&lt;br /&gt;
  content: &amp;quot;\f126&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-unlink:before,&lt;br /&gt;
.fa-chain-broken:before {&lt;br /&gt;
  content: &amp;quot;\f127&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-question:before {&lt;br /&gt;
  content: &amp;quot;\f128&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-info:before {&lt;br /&gt;
  content: &amp;quot;\f129&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-exclamation:before {&lt;br /&gt;
  content: &amp;quot;\f12a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-superscript:before {&lt;br /&gt;
  content: &amp;quot;\f12b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-subscript:before {&lt;br /&gt;
  content: &amp;quot;\f12c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-eraser:before {&lt;br /&gt;
  content: &amp;quot;\f12d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-puzzle-piece:before {&lt;br /&gt;
  content: &amp;quot;\f12e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-microphone:before {&lt;br /&gt;
  content: &amp;quot;\f130&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-microphone-slash:before {&lt;br /&gt;
  content: &amp;quot;\f131&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-shield:before {&lt;br /&gt;
  content: &amp;quot;\f132&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-calendar-o:before {&lt;br /&gt;
  content: &amp;quot;\f133&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-fire-extinguisher:before {&lt;br /&gt;
  content: &amp;quot;\f134&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-rocket:before {&lt;br /&gt;
  content: &amp;quot;\f135&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-maxcdn:before {&lt;br /&gt;
  content: &amp;quot;\f136&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-circle-left:before {&lt;br /&gt;
  content: &amp;quot;\f137&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-circle-right:before {&lt;br /&gt;
  content: &amp;quot;\f138&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-circle-up:before {&lt;br /&gt;
  content: &amp;quot;\f139&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-chevron-circle-down:before {&lt;br /&gt;
  content: &amp;quot;\f13a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-html5:before {&lt;br /&gt;
  content: &amp;quot;\f13b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-css3:before {&lt;br /&gt;
  content: &amp;quot;\f13c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-anchor:before {&lt;br /&gt;
  content: &amp;quot;\f13d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-unlock-alt:before {&lt;br /&gt;
  content: &amp;quot;\f13e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bullseye:before {&lt;br /&gt;
  content: &amp;quot;\f140&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ellipsis-h:before {&lt;br /&gt;
  content: &amp;quot;\f141&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ellipsis-v:before {&lt;br /&gt;
  content: &amp;quot;\f142&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-rss-square:before {&lt;br /&gt;
  content: &amp;quot;\f143&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-play-circle:before {&lt;br /&gt;
  content: &amp;quot;\f144&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ticket:before {&lt;br /&gt;
  content: &amp;quot;\f145&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-minus-square:before {&lt;br /&gt;
  content: &amp;quot;\f146&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-minus-square-o:before {&lt;br /&gt;
  content: &amp;quot;\f147&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-level-up:before {&lt;br /&gt;
  content: &amp;quot;\f148&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-level-down:before {&lt;br /&gt;
  content: &amp;quot;\f149&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-check-square:before {&lt;br /&gt;
  content: &amp;quot;\f14a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pencil-square:before {&lt;br /&gt;
  content: &amp;quot;\f14b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-external-link-square:before {&lt;br /&gt;
  content: &amp;quot;\f14c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-share-square:before {&lt;br /&gt;
  content: &amp;quot;\f14d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-compass:before {&lt;br /&gt;
  content: &amp;quot;\f14e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-toggle-down:before,&lt;br /&gt;
.fa-caret-square-o-down:before {&lt;br /&gt;
  content: &amp;quot;\f150&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-toggle-up:before,&lt;br /&gt;
.fa-caret-square-o-up:before {&lt;br /&gt;
  content: &amp;quot;\f151&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-toggle-right:before,&lt;br /&gt;
.fa-caret-square-o-right:before {&lt;br /&gt;
  content: &amp;quot;\f152&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-euro:before,&lt;br /&gt;
.fa-eur:before {&lt;br /&gt;
  content: &amp;quot;\f153&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-gbp:before {&lt;br /&gt;
  content: &amp;quot;\f154&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-dollar:before,&lt;br /&gt;
.fa-usd:before {&lt;br /&gt;
  content: &amp;quot;\f155&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-rupee:before,&lt;br /&gt;
.fa-inr:before {&lt;br /&gt;
  content: &amp;quot;\f156&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cny:before,&lt;br /&gt;
.fa-rmb:before,&lt;br /&gt;
.fa-yen:before,&lt;br /&gt;
.fa-jpy:before {&lt;br /&gt;
  content: &amp;quot;\f157&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ruble:before,&lt;br /&gt;
.fa-rouble:before,&lt;br /&gt;
.fa-rub:before {&lt;br /&gt;
  content: &amp;quot;\f158&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-won:before,&lt;br /&gt;
.fa-krw:before {&lt;br /&gt;
  content: &amp;quot;\f159&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bitcoin:before,&lt;br /&gt;
.fa-btc:before {&lt;br /&gt;
  content: &amp;quot;\f15a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file:before {&lt;br /&gt;
  content: &amp;quot;\f15b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-text:before {&lt;br /&gt;
  content: &amp;quot;\f15c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-alpha-asc:before {&lt;br /&gt;
  content: &amp;quot;\f15d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-alpha-desc:before {&lt;br /&gt;
  content: &amp;quot;\f15e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-amount-asc:before {&lt;br /&gt;
  content: &amp;quot;\f160&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-amount-desc:before {&lt;br /&gt;
  content: &amp;quot;\f161&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-numeric-asc:before {&lt;br /&gt;
  content: &amp;quot;\f162&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sort-numeric-desc:before {&lt;br /&gt;
  content: &amp;quot;\f163&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-thumbs-up:before {&lt;br /&gt;
  content: &amp;quot;\f164&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-thumbs-down:before {&lt;br /&gt;
  content: &amp;quot;\f165&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-youtube-square:before {&lt;br /&gt;
  content: &amp;quot;\f166&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-youtube:before {&lt;br /&gt;
  content: &amp;quot;\f167&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-xing:before {&lt;br /&gt;
  content: &amp;quot;\f168&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-xing-square:before {&lt;br /&gt;
  content: &amp;quot;\f169&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-youtube-play:before {&lt;br /&gt;
  content: &amp;quot;\f16a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-dropbox:before {&lt;br /&gt;
  content: &amp;quot;\f16b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-stack-overflow:before {&lt;br /&gt;
  content: &amp;quot;\f16c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-instagram:before {&lt;br /&gt;
  content: &amp;quot;\f16d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-flickr:before {&lt;br /&gt;
  content: &amp;quot;\f16e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-adn:before {&lt;br /&gt;
  content: &amp;quot;\f170&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bitbucket:before {&lt;br /&gt;
  content: &amp;quot;\f171&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bitbucket-square:before {&lt;br /&gt;
  content: &amp;quot;\f172&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tumblr:before {&lt;br /&gt;
  content: &amp;quot;\f173&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tumblr-square:before {&lt;br /&gt;
  content: &amp;quot;\f174&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-long-arrow-down:before {&lt;br /&gt;
  content: &amp;quot;\f175&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-long-arrow-up:before {&lt;br /&gt;
  content: &amp;quot;\f176&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-long-arrow-left:before {&lt;br /&gt;
  content: &amp;quot;\f177&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-long-arrow-right:before {&lt;br /&gt;
  content: &amp;quot;\f178&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-apple:before {&lt;br /&gt;
  content: &amp;quot;\f179&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-windows:before {&lt;br /&gt;
  content: &amp;quot;\f17a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-android:before {&lt;br /&gt;
  content: &amp;quot;\f17b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-linux:before {&lt;br /&gt;
  content: &amp;quot;\f17c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-dribbble:before {&lt;br /&gt;
  content: &amp;quot;\f17d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-skype:before {&lt;br /&gt;
  content: &amp;quot;\f17e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-foursquare:before {&lt;br /&gt;
  content: &amp;quot;\f180&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-trello:before {&lt;br /&gt;
  content: &amp;quot;\f181&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-female:before {&lt;br /&gt;
  content: &amp;quot;\f182&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-male:before {&lt;br /&gt;
  content: &amp;quot;\f183&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-gittip:before {&lt;br /&gt;
  content: &amp;quot;\f184&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sun-o:before {&lt;br /&gt;
  content: &amp;quot;\f185&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-moon-o:before {&lt;br /&gt;
  content: &amp;quot;\f186&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-archive:before {&lt;br /&gt;
  content: &amp;quot;\f187&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bug:before {&lt;br /&gt;
  content: &amp;quot;\f188&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-vk:before {&lt;br /&gt;
  content: &amp;quot;\f189&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-weibo:before {&lt;br /&gt;
  content: &amp;quot;\f18a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-renren:before {&lt;br /&gt;
  content: &amp;quot;\f18b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pagelines:before {&lt;br /&gt;
  content: &amp;quot;\f18c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-stack-exchange:before {&lt;br /&gt;
  content: &amp;quot;\f18d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-o-right:before {&lt;br /&gt;
  content: &amp;quot;\f18e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-arrow-circle-o-left:before {&lt;br /&gt;
  content: &amp;quot;\f190&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-toggle-left:before,&lt;br /&gt;
.fa-caret-square-o-left:before {&lt;br /&gt;
  content: &amp;quot;\f191&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-dot-circle-o:before {&lt;br /&gt;
  content: &amp;quot;\f192&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-wheelchair:before {&lt;br /&gt;
  content: &amp;quot;\f193&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-vimeo-square:before {&lt;br /&gt;
  content: &amp;quot;\f194&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-turkish-lira:before,&lt;br /&gt;
.fa-try:before {&lt;br /&gt;
  content: &amp;quot;\f195&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-plus-square-o:before {&lt;br /&gt;
  content: &amp;quot;\f196&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-space-shuttle:before {&lt;br /&gt;
  content: &amp;quot;\f197&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-slack:before {&lt;br /&gt;
  content: &amp;quot;\f198&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-envelope-square:before {&lt;br /&gt;
  content: &amp;quot;\f199&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-wordpress:before {&lt;br /&gt;
  content: &amp;quot;\f19a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-openid:before {&lt;br /&gt;
  content: &amp;quot;\f19b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-institution:before,&lt;br /&gt;
.fa-bank:before,&lt;br /&gt;
.fa-university:before {&lt;br /&gt;
  content: &amp;quot;\f19c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-mortar-board:before,&lt;br /&gt;
.fa-graduation-cap:before {&lt;br /&gt;
  content: &amp;quot;\f19d&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-yahoo:before {&lt;br /&gt;
  content: &amp;quot;\f19e&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-google:before {&lt;br /&gt;
  content: &amp;quot;\f1a0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-reddit:before {&lt;br /&gt;
  content: &amp;quot;\f1a1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-reddit-square:before {&lt;br /&gt;
  content: &amp;quot;\f1a2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-stumbleupon-circle:before {&lt;br /&gt;
  content: &amp;quot;\f1a3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-stumbleupon:before {&lt;br /&gt;
  content: &amp;quot;\f1a4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-delicious:before {&lt;br /&gt;
  content: &amp;quot;\f1a5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-digg:before {&lt;br /&gt;
  content: &amp;quot;\f1a6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pied-piper:before {&lt;br /&gt;
  content: &amp;quot;\f1a7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pied-piper-alt:before {&lt;br /&gt;
  content: &amp;quot;\f1a8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-drupal:before {&lt;br /&gt;
  content: &amp;quot;\f1a9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-joomla:before {&lt;br /&gt;
  content: &amp;quot;\f1aa&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-language:before {&lt;br /&gt;
  content: &amp;quot;\f1ab&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-fax:before {&lt;br /&gt;
  content: &amp;quot;\f1ac&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-building:before {&lt;br /&gt;
  content: &amp;quot;\f1ad&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-child:before {&lt;br /&gt;
  content: &amp;quot;\f1ae&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-paw:before {&lt;br /&gt;
  content: &amp;quot;\f1b0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-spoon:before {&lt;br /&gt;
  content: &amp;quot;\f1b1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cube:before {&lt;br /&gt;
  content: &amp;quot;\f1b2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cubes:before {&lt;br /&gt;
  content: &amp;quot;\f1b3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-behance:before {&lt;br /&gt;
  content: &amp;quot;\f1b4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-behance-square:before {&lt;br /&gt;
  content: &amp;quot;\f1b5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-steam:before {&lt;br /&gt;
  content: &amp;quot;\f1b6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-steam-square:before {&lt;br /&gt;
  content: &amp;quot;\f1b7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-recycle:before {&lt;br /&gt;
  content: &amp;quot;\f1b8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-automobile:before,&lt;br /&gt;
.fa-car:before {&lt;br /&gt;
  content: &amp;quot;\f1b9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cab:before,&lt;br /&gt;
.fa-taxi:before {&lt;br /&gt;
  content: &amp;quot;\f1ba&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tree:before {&lt;br /&gt;
  content: &amp;quot;\f1bb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-spotify:before {&lt;br /&gt;
  content: &amp;quot;\f1bc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-deviantart:before {&lt;br /&gt;
  content: &amp;quot;\f1bd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-soundcloud:before {&lt;br /&gt;
  content: &amp;quot;\f1be&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-database:before {&lt;br /&gt;
  content: &amp;quot;\f1c0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-pdf-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-word-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-excel-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-powerpoint-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-photo-o:before,&lt;br /&gt;
.fa-file-picture-o:before,&lt;br /&gt;
.fa-file-image-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-zip-o:before,&lt;br /&gt;
.fa-file-archive-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-sound-o:before,&lt;br /&gt;
.fa-file-audio-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-movie-o:before,&lt;br /&gt;
.fa-file-video-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-file-code-o:before {&lt;br /&gt;
  content: &amp;quot;\f1c9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-vine:before {&lt;br /&gt;
  content: &amp;quot;\f1ca&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-codepen:before {&lt;br /&gt;
  content: &amp;quot;\f1cb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-jsfiddle:before {&lt;br /&gt;
  content: &amp;quot;\f1cc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-life-bouy:before,&lt;br /&gt;
.fa-life-buoy:before,&lt;br /&gt;
.fa-life-saver:before,&lt;br /&gt;
.fa-support:before,&lt;br /&gt;
.fa-life-ring:before {&lt;br /&gt;
  content: &amp;quot;\f1cd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-circle-o-notch:before {&lt;br /&gt;
  content: &amp;quot;\f1ce&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ra:before,&lt;br /&gt;
.fa-rebel:before {&lt;br /&gt;
  content: &amp;quot;\f1d0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ge:before,&lt;br /&gt;
.fa-empire:before {&lt;br /&gt;
  content: &amp;quot;\f1d1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-git-square:before {&lt;br /&gt;
  content: &amp;quot;\f1d2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-git:before {&lt;br /&gt;
  content: &amp;quot;\f1d3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-hacker-news:before {&lt;br /&gt;
  content: &amp;quot;\f1d4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tencent-weibo:before {&lt;br /&gt;
  content: &amp;quot;\f1d5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-qq:before {&lt;br /&gt;
  content: &amp;quot;\f1d6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-wechat:before,&lt;br /&gt;
.fa-weixin:before {&lt;br /&gt;
  content: &amp;quot;\f1d7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-send:before,&lt;br /&gt;
.fa-paper-plane:before {&lt;br /&gt;
  content: &amp;quot;\f1d8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-send-o:before,&lt;br /&gt;
.fa-paper-plane-o:before {&lt;br /&gt;
  content: &amp;quot;\f1d9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-history:before {&lt;br /&gt;
  content: &amp;quot;\f1da&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-circle-thin:before {&lt;br /&gt;
  content: &amp;quot;\f1db&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-header:before {&lt;br /&gt;
  content: &amp;quot;\f1dc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-paragraph:before {&lt;br /&gt;
  content: &amp;quot;\f1dd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-sliders:before {&lt;br /&gt;
  content: &amp;quot;\f1de&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-share-alt:before {&lt;br /&gt;
  content: &amp;quot;\f1e0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-share-alt-square:before {&lt;br /&gt;
  content: &amp;quot;\f1e1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bomb:before {&lt;br /&gt;
  content: &amp;quot;\f1e2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-soccer-ball-o:before,&lt;br /&gt;
.fa-futbol-o:before {&lt;br /&gt;
  content: &amp;quot;\f1e3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-tty:before {&lt;br /&gt;
  content: &amp;quot;\f1e4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-binoculars:before {&lt;br /&gt;
  content: &amp;quot;\f1e5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-plug:before {&lt;br /&gt;
  content: &amp;quot;\f1e6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-slideshare:before {&lt;br /&gt;
  content: &amp;quot;\f1e7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-twitch:before {&lt;br /&gt;
  content: &amp;quot;\f1e8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-yelp:before {&lt;br /&gt;
  content: &amp;quot;\f1e9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-newspaper-o:before {&lt;br /&gt;
  content: &amp;quot;\f1ea&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-wifi:before {&lt;br /&gt;
  content: &amp;quot;\f1eb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-calculator:before {&lt;br /&gt;
  content: &amp;quot;\f1ec&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-paypal:before {&lt;br /&gt;
  content: &amp;quot;\f1ed&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-google-wallet:before {&lt;br /&gt;
  content: &amp;quot;\f1ee&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc-visa:before {&lt;br /&gt;
  content: &amp;quot;\f1f0&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc-mastercard:before {&lt;br /&gt;
  content: &amp;quot;\f1f1&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc-discover:before {&lt;br /&gt;
  content: &amp;quot;\f1f2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc-amex:before {&lt;br /&gt;
  content: &amp;quot;\f1f3&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc-paypal:before {&lt;br /&gt;
  content: &amp;quot;\f1f4&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc-stripe:before {&lt;br /&gt;
  content: &amp;quot;\f1f5&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bell-slash:before {&lt;br /&gt;
  content: &amp;quot;\f1f6&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bell-slash-o:before {&lt;br /&gt;
  content: &amp;quot;\f1f7&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-trash:before {&lt;br /&gt;
  content: &amp;quot;\f1f8&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-copyright:before {&lt;br /&gt;
  content: &amp;quot;\f1f9&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-at:before {&lt;br /&gt;
  content: &amp;quot;\f1fa&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-eyedropper:before {&lt;br /&gt;
  content: &amp;quot;\f1fb&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-paint-brush:before {&lt;br /&gt;
  content: &amp;quot;\f1fc&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-birthday-cake:before {&lt;br /&gt;
  content: &amp;quot;\f1fd&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-area-chart:before {&lt;br /&gt;
  content: &amp;quot;\f1fe&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-pie-chart:before {&lt;br /&gt;
  content: &amp;quot;\f200&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-line-chart:before {&lt;br /&gt;
  content: &amp;quot;\f201&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-lastfm:before {&lt;br /&gt;
  content: &amp;quot;\f202&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-lastfm-square:before {&lt;br /&gt;
  content: &amp;quot;\f203&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-toggle-off:before {&lt;br /&gt;
  content: &amp;quot;\f204&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-toggle-on:before {&lt;br /&gt;
  content: &amp;quot;\f205&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bicycle:before {&lt;br /&gt;
  content: &amp;quot;\f206&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-bus:before {&lt;br /&gt;
  content: &amp;quot;\f207&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-ioxhost:before {&lt;br /&gt;
  content: &amp;quot;\f208&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-angellist:before {&lt;br /&gt;
  content: &amp;quot;\f209&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-cc:before {&lt;br /&gt;
  content: &amp;quot;\f20a&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-shekel:before,&lt;br /&gt;
.fa-sheqel:before,&lt;br /&gt;
.fa-ils:before {&lt;br /&gt;
  content: &amp;quot;\f20b&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.fa-meanpath:before {&lt;br /&gt;
  content: &amp;quot;\f20c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* IPython base&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
.modal.fade .modal-dialog {&lt;br /&gt;
  -webkit-transform: translate(0, 0);&lt;br /&gt;
  -ms-transform: translate(0, 0);&lt;br /&gt;
  -o-transform: translate(0, 0);&lt;br /&gt;
  transform: translate(0, 0);&lt;br /&gt;
}&lt;br /&gt;
code {&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
pre {&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  line-height: inherit;&lt;br /&gt;
}&lt;br /&gt;
label {&lt;br /&gt;
  font-weight: normal;&lt;br /&gt;
}&lt;br /&gt;
/* Make the page background atleast 100% the height of the view port */&lt;br /&gt;
/* Make the page itself atleast 70% the height of the view port */&lt;br /&gt;
.border-box-sizing {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
.corner-all {&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.no-padding {&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
}&lt;br /&gt;
/* Flexible box model classes */&lt;br /&gt;
/* Taken from Alex Russell http://infrequently.org/2009/08/css-3-progress/ */&lt;br /&gt;
/* This file is a compatability layer.  It allows the usage of flexible box &lt;br /&gt;
model layouts accross multiple browsers, including older browsers.  The newest,&lt;br /&gt;
universal implementation of the flexible box model is used when available (see&lt;br /&gt;
`Modern browsers` comments below).  Browsers that are known to implement this &lt;br /&gt;
new spec completely include:&lt;br /&gt;
&lt;br /&gt;
    Firefox 28.0+&lt;br /&gt;
    Chrome 29.0+&lt;br /&gt;
    Internet Explorer 11+ &lt;br /&gt;
    Opera 17.0+&lt;br /&gt;
&lt;br /&gt;
Browsers not listed, including Safari, are supported via the styling under the&lt;br /&gt;
`Old browsers` comments below.&lt;br /&gt;
*/&lt;br /&gt;
.hbox {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
.hbox &amp;gt; * {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 0;&lt;br /&gt;
  -moz-box-flex: 0;&lt;br /&gt;
  box-flex: 0;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: none;&lt;br /&gt;
}&lt;br /&gt;
.vbox {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
.vbox &amp;gt; * {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 0;&lt;br /&gt;
  -moz-box-flex: 0;&lt;br /&gt;
  box-flex: 0;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: none;&lt;br /&gt;
}&lt;br /&gt;
.hbox.reverse,&lt;br /&gt;
.vbox.reverse,&lt;br /&gt;
.reverse {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-direction: reverse;&lt;br /&gt;
  -moz-box-direction: reverse;&lt;br /&gt;
  box-direction: reverse;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex-direction: row-reverse;&lt;br /&gt;
}&lt;br /&gt;
.hbox.box-flex0,&lt;br /&gt;
.vbox.box-flex0,&lt;br /&gt;
.box-flex0 {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 0;&lt;br /&gt;
  -moz-box-flex: 0;&lt;br /&gt;
  box-flex: 0;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: none;&lt;br /&gt;
  width: auto;&lt;br /&gt;
}&lt;br /&gt;
.hbox.box-flex1,&lt;br /&gt;
.vbox.box-flex1,&lt;br /&gt;
.box-flex1 {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 1;&lt;br /&gt;
  -moz-box-flex: 1;&lt;br /&gt;
  box-flex: 1;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: 1;&lt;br /&gt;
}&lt;br /&gt;
.hbox.box-flex,&lt;br /&gt;
.vbox.box-flex,&lt;br /&gt;
.box-flex {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 1;&lt;br /&gt;
  -moz-box-flex: 1;&lt;br /&gt;
  box-flex: 1;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: 1;&lt;br /&gt;
}&lt;br /&gt;
.hbox.box-flex2,&lt;br /&gt;
.vbox.box-flex2,&lt;br /&gt;
.box-flex2 {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 2;&lt;br /&gt;
  -moz-box-flex: 2;&lt;br /&gt;
  box-flex: 2;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: 2;&lt;br /&gt;
}&lt;br /&gt;
.box-group1 {&lt;br /&gt;
  /*  Deprecated */&lt;br /&gt;
  -webkit-box-flex-group: 1;&lt;br /&gt;
  -moz-box-flex-group: 1;&lt;br /&gt;
  box-flex-group: 1;&lt;br /&gt;
}&lt;br /&gt;
.box-group2 {&lt;br /&gt;
  /* Deprecated */&lt;br /&gt;
  -webkit-box-flex-group: 2;&lt;br /&gt;
  -moz-box-flex-group: 2;&lt;br /&gt;
  box-flex-group: 2;&lt;br /&gt;
}&lt;br /&gt;
.hbox.start,&lt;br /&gt;
.vbox.start,&lt;br /&gt;
.start {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-pack: start;&lt;br /&gt;
  -moz-box-pack: start;&lt;br /&gt;
  box-pack: start;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  justify-content: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.hbox.end,&lt;br /&gt;
.vbox.end,&lt;br /&gt;
.end {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-pack: end;&lt;br /&gt;
  -moz-box-pack: end;&lt;br /&gt;
  box-pack: end;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
}&lt;br /&gt;
.hbox.center,&lt;br /&gt;
.vbox.center,&lt;br /&gt;
.center {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-pack: center;&lt;br /&gt;
  -moz-box-pack: center;&lt;br /&gt;
  box-pack: center;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
.hbox.baseline,&lt;br /&gt;
.vbox.baseline,&lt;br /&gt;
.baseline {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-pack: baseline;&lt;br /&gt;
  -moz-box-pack: baseline;&lt;br /&gt;
  box-pack: baseline;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  justify-content: baseline;&lt;br /&gt;
}&lt;br /&gt;
.hbox.stretch,&lt;br /&gt;
.vbox.stretch,&lt;br /&gt;
.stretch {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-pack: stretch;&lt;br /&gt;
  -moz-box-pack: stretch;&lt;br /&gt;
  box-pack: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  justify-content: stretch;&lt;br /&gt;
}&lt;br /&gt;
.hbox.align-start,&lt;br /&gt;
.vbox.align-start,&lt;br /&gt;
.align-start {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-align: start;&lt;br /&gt;
  -moz-box-align: start;&lt;br /&gt;
  box-align: start;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  align-items: flex-start;&lt;br /&gt;
}&lt;br /&gt;
.hbox.align-end,&lt;br /&gt;
.vbox.align-end,&lt;br /&gt;
.align-end {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-align: end;&lt;br /&gt;
  -moz-box-align: end;&lt;br /&gt;
  box-align: end;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  align-items: flex-end;&lt;br /&gt;
}&lt;br /&gt;
.hbox.align-center,&lt;br /&gt;
.vbox.align-center,&lt;br /&gt;
.align-center {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-align: center;&lt;br /&gt;
  -moz-box-align: center;&lt;br /&gt;
  box-align: center;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  align-items: center;&lt;br /&gt;
}&lt;br /&gt;
.hbox.align-baseline,&lt;br /&gt;
.vbox.align-baseline,&lt;br /&gt;
.align-baseline {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-align: baseline;&lt;br /&gt;
  -moz-box-align: baseline;&lt;br /&gt;
  box-align: baseline;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  align-items: baseline;&lt;br /&gt;
}&lt;br /&gt;
.hbox.align-stretch,&lt;br /&gt;
.vbox.align-stretch,&lt;br /&gt;
.align-stretch {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
div.error {&lt;br /&gt;
  margin: 2em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
div.error &amp;gt; h1 {&lt;br /&gt;
  font-size: 500%;&lt;br /&gt;
  line-height: normal;&lt;br /&gt;
}&lt;br /&gt;
div.error &amp;gt; p {&lt;br /&gt;
  font-size: 200%;&lt;br /&gt;
  line-height: normal;&lt;br /&gt;
}&lt;br /&gt;
div.traceback-wrapper {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  max-width: 800px;&lt;br /&gt;
  margin: auto;&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Primary styles&lt;br /&gt;
 *&lt;br /&gt;
 * Author: Jupyter Development Team&lt;br /&gt;
 */&lt;br /&gt;
body {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  /* This makes sure that the body covers the entire window and needs to&lt;br /&gt;
       be in a different element than the display: box in wrapper below */&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 0px;&lt;br /&gt;
  right: 0px;&lt;br /&gt;
  top: 0px;&lt;br /&gt;
  bottom: 0px;&lt;br /&gt;
  overflow: visible;&lt;br /&gt;
}&lt;br /&gt;
body &amp;gt; #header {&lt;br /&gt;
  /* Initially hidden to prevent FLOUC */&lt;br /&gt;
  display: none;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  /* Display over codemirror */&lt;br /&gt;
  position: relative;&lt;br /&gt;
  z-index: 100;&lt;br /&gt;
}&lt;br /&gt;
body &amp;gt; #header #header-container {&lt;br /&gt;
  padding-bottom: 5px;&lt;br /&gt;
  padding-top: 5px;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
body &amp;gt; #header .header-bar {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 1px;&lt;br /&gt;
  background: #e7e7e7;&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  body &amp;gt; #header {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#header-spacer {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  #header-spacer {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#ipython_notebook {&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
  padding-top: 1px;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 991px) {&lt;br /&gt;
  #ipython_notebook {&lt;br /&gt;
    margin-left: 10px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#noscript {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  padding-top: 16px;&lt;br /&gt;
  padding-bottom: 16px;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  font-size: 22px;&lt;br /&gt;
  color: red;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
#ipython_notebook img {&lt;br /&gt;
  height: 28px;&lt;br /&gt;
}&lt;br /&gt;
#site {&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  display: none;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  #site {&lt;br /&gt;
    height: auto !important;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/* Smaller buttons */&lt;br /&gt;
.ui-button .ui-button-text {&lt;br /&gt;
  padding: 0.2em 0.8em;&lt;br /&gt;
  font-size: 77%;&lt;br /&gt;
}&lt;br /&gt;
input.ui-button {&lt;br /&gt;
  padding: 0.3em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget {&lt;br /&gt;
  float: right;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button,&lt;br /&gt;
#logout {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button:focus,&lt;br /&gt;
#logout:focus,&lt;br /&gt;
span#login_widget &amp;gt; .button.focus,&lt;br /&gt;
#logout.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button:hover,&lt;br /&gt;
#logout:hover {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #adadad;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button:active,&lt;br /&gt;
#logout:active,&lt;br /&gt;
span#login_widget &amp;gt; .button.active,&lt;br /&gt;
#logout.active,&lt;br /&gt;
.open &amp;gt; .dropdown-togglespan#login_widget &amp;gt; .button,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle#logout {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #adadad;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button:active:hover,&lt;br /&gt;
#logout:active:hover,&lt;br /&gt;
span#login_widget &amp;gt; .button.active:hover,&lt;br /&gt;
#logout.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-togglespan#login_widget &amp;gt; .button:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle#logout:hover,&lt;br /&gt;
span#login_widget &amp;gt; .button:active:focus,&lt;br /&gt;
#logout:active:focus,&lt;br /&gt;
span#login_widget &amp;gt; .button.active:focus,&lt;br /&gt;
#logout.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-togglespan#login_widget &amp;gt; .button:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle#logout:focus,&lt;br /&gt;
span#login_widget &amp;gt; .button:active.focus,&lt;br /&gt;
#logout:active.focus,&lt;br /&gt;
span#login_widget &amp;gt; .button.active.focus,&lt;br /&gt;
#logout.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-togglespan#login_widget &amp;gt; .button.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle#logout.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #d4d4d4;&lt;br /&gt;
  border-color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button:active,&lt;br /&gt;
#logout:active,&lt;br /&gt;
span#login_widget &amp;gt; .button.active,&lt;br /&gt;
#logout.active,&lt;br /&gt;
.open &amp;gt; .dropdown-togglespan#login_widget &amp;gt; .button,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle#logout {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button.disabled:hover,&lt;br /&gt;
#logout.disabled:hover,&lt;br /&gt;
span#login_widget &amp;gt; .button[disabled]:hover,&lt;br /&gt;
#logout[disabled]:hover,&lt;br /&gt;
fieldset[disabled] span#login_widget &amp;gt; .button:hover,&lt;br /&gt;
fieldset[disabled] #logout:hover,&lt;br /&gt;
span#login_widget &amp;gt; .button.disabled:focus,&lt;br /&gt;
#logout.disabled:focus,&lt;br /&gt;
span#login_widget &amp;gt; .button[disabled]:focus,&lt;br /&gt;
#logout[disabled]:focus,&lt;br /&gt;
fieldset[disabled] span#login_widget &amp;gt; .button:focus,&lt;br /&gt;
fieldset[disabled] #logout:focus,&lt;br /&gt;
span#login_widget &amp;gt; .button.disabled.focus,&lt;br /&gt;
#logout.disabled.focus,&lt;br /&gt;
span#login_widget &amp;gt; .button[disabled].focus,&lt;br /&gt;
#logout[disabled].focus,&lt;br /&gt;
fieldset[disabled] span#login_widget &amp;gt; .button.focus,&lt;br /&gt;
fieldset[disabled] #logout.focus {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
span#login_widget &amp;gt; .button .badge,&lt;br /&gt;
#logout .badge {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
.nav-header {&lt;br /&gt;
  text-transform: none;&lt;br /&gt;
}&lt;br /&gt;
#header &amp;gt; span {&lt;br /&gt;
  margin-top: 10px;&lt;br /&gt;
}&lt;br /&gt;
.modal_stretch .modal-dialog {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  min-height: 80vh;&lt;br /&gt;
}&lt;br /&gt;
.modal_stretch .modal-dialog .modal-body {&lt;br /&gt;
  max-height: calc(100vh - 200px);&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
  flex: 1;&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  .modal .modal-dialog {&lt;br /&gt;
    width: 700px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) {&lt;br /&gt;
  select.form-control {&lt;br /&gt;
    margin-left: 12px;&lt;br /&gt;
    margin-right: 12px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* IPython auth&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
.center-nav {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  margin-bottom: -4px;&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* IPython tree view&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
/* We need an invisible input field on top of the sentense*/&lt;br /&gt;
/* &amp;quot;Drag file onto the list ...&amp;quot; */&lt;br /&gt;
.alternate_upload {&lt;br /&gt;
  background-color: none;&lt;br /&gt;
  display: inline;&lt;br /&gt;
}&lt;br /&gt;
.alternate_upload.form {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.alternate_upload input.fileinput {&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  display: inline;&lt;br /&gt;
  opacity: 0;&lt;br /&gt;
  z-index: 2;&lt;br /&gt;
  width: 12ex;&lt;br /&gt;
  margin-right: -12ex;&lt;br /&gt;
}&lt;br /&gt;
.alternate_upload .btn-upload {&lt;br /&gt;
  height: 22px;&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Primary styles&lt;br /&gt;
 *&lt;br /&gt;
 * Author: Jupyter Development Team&lt;br /&gt;
 */&lt;br /&gt;
ul#tabs {&lt;br /&gt;
  margin-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
ul#tabs a {&lt;br /&gt;
  padding-top: 6px;&lt;br /&gt;
  padding-bottom: 4px;&lt;br /&gt;
}&lt;br /&gt;
ul.breadcrumb a:focus,&lt;br /&gt;
ul.breadcrumb a:hover {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
ul.breadcrumb i.icon-home {&lt;br /&gt;
  font-size: 16px;&lt;br /&gt;
  margin-right: 4px;&lt;br /&gt;
}&lt;br /&gt;
ul.breadcrumb span {&lt;br /&gt;
  color: #5e5e5e;&lt;br /&gt;
}&lt;br /&gt;
.list_toolbar {&lt;br /&gt;
  padding: 4px 0 4px 0;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.list_toolbar .tree-buttons {&lt;br /&gt;
  padding-top: 1px;&lt;br /&gt;
}&lt;br /&gt;
.dynamic-buttons {&lt;br /&gt;
  padding-top: 3px;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.list_toolbar [class*=&amp;quot;span&amp;quot;] {&lt;br /&gt;
  min-height: 24px;&lt;br /&gt;
}&lt;br /&gt;
.list_header {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  background-color: #EEE;&lt;br /&gt;
}&lt;br /&gt;
.list_placeholder {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
  padding-bottom: 4px;&lt;br /&gt;
  padding-left: 7px;&lt;br /&gt;
  padding-right: 7px;&lt;br /&gt;
}&lt;br /&gt;
.list_container {&lt;br /&gt;
  margin-top: 4px;&lt;br /&gt;
  margin-bottom: 20px;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.list_container &amp;gt; div {&lt;br /&gt;
  border-bottom: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
.list_container &amp;gt; div:hover .list-item {&lt;br /&gt;
  background-color: red;&lt;br /&gt;
}&lt;br /&gt;
.list_container &amp;gt; div:last-child {&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
.list_item:hover .list_item {&lt;br /&gt;
  background-color: #ddd;&lt;br /&gt;
}&lt;br /&gt;
.list_item a {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.list_item:hover {&lt;br /&gt;
  background-color: #fafafa;&lt;br /&gt;
}&lt;br /&gt;
.list_header &amp;gt; div,&lt;br /&gt;
.list_item &amp;gt; div {&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
  padding-bottom: 4px;&lt;br /&gt;
  padding-left: 7px;&lt;br /&gt;
  padding-right: 7px;&lt;br /&gt;
  line-height: 22px;&lt;br /&gt;
}&lt;br /&gt;
.list_header &amp;gt; div input,&lt;br /&gt;
.list_item &amp;gt; div input {&lt;br /&gt;
  margin-right: 7px;&lt;br /&gt;
  margin-left: 14px;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
  line-height: 22px;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -1px;&lt;br /&gt;
}&lt;br /&gt;
.list_header &amp;gt; div .item_link,&lt;br /&gt;
.list_item &amp;gt; div .item_link {&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
  line-height: 22px;&lt;br /&gt;
}&lt;br /&gt;
.new-file input[type=checkbox] {&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
}&lt;br /&gt;
.item_name {&lt;br /&gt;
  line-height: 22px;&lt;br /&gt;
  height: 24px;&lt;br /&gt;
}&lt;br /&gt;
.item_icon {&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  color: #5e5e5e;&lt;br /&gt;
  margin-right: 7px;&lt;br /&gt;
  margin-left: 7px;&lt;br /&gt;
  line-height: 22px;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
}&lt;br /&gt;
.item_buttons {&lt;br /&gt;
  line-height: 1em;&lt;br /&gt;
  margin-left: -5px;&lt;br /&gt;
}&lt;br /&gt;
.item_buttons .btn,&lt;br /&gt;
.item_buttons .btn-group,&lt;br /&gt;
.item_buttons .input-group {&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.item_buttons &amp;gt; .btn,&lt;br /&gt;
.item_buttons &amp;gt; .btn-group,&lt;br /&gt;
.item_buttons &amp;gt; .input-group {&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
.item_buttons .btn {&lt;br /&gt;
  min-width: 13ex;&lt;br /&gt;
}&lt;br /&gt;
.item_buttons .running-indicator {&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
  color: #5cb85c;&lt;br /&gt;
}&lt;br /&gt;
.item_buttons .kernel-name {&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
  color: #5bc0de;&lt;br /&gt;
  margin-right: 7px;&lt;br /&gt;
  float: left;&lt;br /&gt;
}&lt;br /&gt;
.toolbar_info {&lt;br /&gt;
  height: 24px;&lt;br /&gt;
  line-height: 24px;&lt;br /&gt;
}&lt;br /&gt;
.list_item input:not([type=checkbox]) {&lt;br /&gt;
  padding-top: 3px;&lt;br /&gt;
  padding-bottom: 3px;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  line-height: 14px;&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
}&lt;br /&gt;
.highlight_text {&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
#project_name {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding-left: 7px;&lt;br /&gt;
  margin-left: -2px;&lt;br /&gt;
}&lt;br /&gt;
#project_name &amp;gt; .breadcrumb {&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  margin-bottom: 0px;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
#tree-selector {&lt;br /&gt;
  padding-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
#button-select-all {&lt;br /&gt;
  min-width: 50px;&lt;br /&gt;
}&lt;br /&gt;
#select-all {&lt;br /&gt;
  margin-left: 7px;&lt;br /&gt;
  margin-right: 2px;&lt;br /&gt;
}&lt;br /&gt;
.menu_icon {&lt;br /&gt;
  margin-right: 2px;&lt;br /&gt;
}&lt;br /&gt;
.tab-content .row {&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
}&lt;br /&gt;
.folder_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f114&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.folder_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.folder_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.notebook_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f02d&amp;quot;;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -1px;&lt;br /&gt;
}&lt;br /&gt;
.notebook_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.notebook_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.running_notebook_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f02d&amp;quot;;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -1px;&lt;br /&gt;
  color: #5cb85c;&lt;br /&gt;
}&lt;br /&gt;
.running_notebook_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.running_notebook_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.file_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f016&amp;quot;;&lt;br /&gt;
  position: relative;&lt;br /&gt;
  top: -2px;&lt;br /&gt;
}&lt;br /&gt;
.file_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.file_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
#notebook_toolbar .pull-right {&lt;br /&gt;
  padding-top: 0px;&lt;br /&gt;
  margin-right: -1px;&lt;br /&gt;
}&lt;br /&gt;
ul#new-menu {&lt;br /&gt;
  left: auto;&lt;br /&gt;
  right: 0;&lt;br /&gt;
}&lt;br /&gt;
.kernel-menu-icon {&lt;br /&gt;
  padding-right: 12px;&lt;br /&gt;
  width: 24px;&lt;br /&gt;
  content: &amp;quot;\f096&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.kernel-menu-icon:before {&lt;br /&gt;
  content: &amp;quot;\f096&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.kernel-menu-icon-current:before {&lt;br /&gt;
  content: &amp;quot;\f00c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
#tab_content {&lt;br /&gt;
  padding-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel {&lt;br /&gt;
  margin-top: 3px;&lt;br /&gt;
  margin-bottom: 1em;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel .panel-heading {&lt;br /&gt;
  background-color: #EEE;&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
  padding-bottom: 4px;&lt;br /&gt;
  padding-left: 7px;&lt;br /&gt;
  padding-right: 7px;&lt;br /&gt;
  line-height: 22px;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel .panel-heading a:focus,&lt;br /&gt;
#running .panel-group .panel .panel-heading a:hover {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel .panel-body {&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel .panel-body .list_container {&lt;br /&gt;
  margin-top: 0px;&lt;br /&gt;
  margin-bottom: 0px;&lt;br /&gt;
  border: 0px;&lt;br /&gt;
  border-radius: 0px;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel .panel-body .list_container .list_item {&lt;br /&gt;
  border-bottom: 1px solid #ddd;&lt;br /&gt;
}&lt;br /&gt;
#running .panel-group .panel .panel-body .list_container .list_item:last-child {&lt;br /&gt;
  border-bottom: 0px;&lt;br /&gt;
}&lt;br /&gt;
.delete-button {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.duplicate-button {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.rename-button {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.shutdown-button {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.dynamic-instructions {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* IPython text editor webapp&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
.selected-keymap i.fa {&lt;br /&gt;
  padding: 0px 5px;&lt;br /&gt;
}&lt;br /&gt;
.selected-keymap i.fa:before {&lt;br /&gt;
  content: &amp;quot;\f00c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
#mode-menu {&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
  max-height: 20em;&lt;br /&gt;
}&lt;br /&gt;
.edit_app #header {&lt;br /&gt;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
}&lt;br /&gt;
.edit_app #menubar .navbar {&lt;br /&gt;
  /* Use a negative 1 bottom margin, so the border overlaps the border of the&lt;br /&gt;
    header */&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-dirty {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-dirty.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-dirty.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-clean {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  width: 20px;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-clean.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-clean.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-clean:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f00c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-clean:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dirty-indicator-clean:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
#filename {&lt;br /&gt;
  font-size: 16pt;&lt;br /&gt;
  display: table;&lt;br /&gt;
  padding: 0px 5px;&lt;br /&gt;
}&lt;br /&gt;
#current-mode {&lt;br /&gt;
  padding-left: 5px;&lt;br /&gt;
  padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
#texteditor-backdrop {&lt;br /&gt;
  padding-top: 20px;&lt;br /&gt;
  padding-bottom: 20px;&lt;br /&gt;
}&lt;br /&gt;
@media not print {&lt;br /&gt;
  #texteditor-backdrop {&lt;br /&gt;
    background-color: #EEE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,&lt;br /&gt;
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media not print {&lt;br /&gt;
  #texteditor-backdrop #texteditor-container .CodeMirror-gutter,&lt;br /&gt;
  #texteditor-backdrop #texteditor-container .CodeMirror-gutters {&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media not print {&lt;br /&gt;
  #texteditor-backdrop #texteditor-container {&lt;br /&gt;
    padding: 0px;&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* IPython notebook&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
/* CSS font colors for translated ANSI colors. */&lt;br /&gt;
.ansibold {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
/* use dark versions for foreground, to improve visibility */&lt;br /&gt;
.ansiblack {&lt;br /&gt;
  color: black;&lt;br /&gt;
}&lt;br /&gt;
.ansired {&lt;br /&gt;
  color: darkred;&lt;br /&gt;
}&lt;br /&gt;
.ansigreen {&lt;br /&gt;
  color: darkgreen;&lt;br /&gt;
}&lt;br /&gt;
.ansiyellow {&lt;br /&gt;
  color: #c4a000;&lt;br /&gt;
}&lt;br /&gt;
.ansiblue {&lt;br /&gt;
  color: darkblue;&lt;br /&gt;
}&lt;br /&gt;
.ansipurple {&lt;br /&gt;
  color: darkviolet;&lt;br /&gt;
}&lt;br /&gt;
.ansicyan {&lt;br /&gt;
  color: steelblue;&lt;br /&gt;
}&lt;br /&gt;
.ansigray {&lt;br /&gt;
  color: gray;&lt;br /&gt;
}&lt;br /&gt;
/* and light for background, for the same reason */&lt;br /&gt;
.ansibgblack {&lt;br /&gt;
  background-color: black;&lt;br /&gt;
}&lt;br /&gt;
.ansibgred {&lt;br /&gt;
  background-color: red;&lt;br /&gt;
}&lt;br /&gt;
.ansibggreen {&lt;br /&gt;
  background-color: green;&lt;br /&gt;
}&lt;br /&gt;
.ansibgyellow {&lt;br /&gt;
  background-color: yellow;&lt;br /&gt;
}&lt;br /&gt;
.ansibgblue {&lt;br /&gt;
  background-color: blue;&lt;br /&gt;
}&lt;br /&gt;
.ansibgpurple {&lt;br /&gt;
  background-color: magenta;&lt;br /&gt;
}&lt;br /&gt;
.ansibgcyan {&lt;br /&gt;
  background-color: cyan;&lt;br /&gt;
}&lt;br /&gt;
.ansibggray {&lt;br /&gt;
  background-color: gray;&lt;br /&gt;
}&lt;br /&gt;
div.cell {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  border-width: 1px;&lt;br /&gt;
  border-style: solid;&lt;br /&gt;
  border-color: transparent;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  /* This acts as a spacer between cells, that is outside the border */&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  border-left-width: 1px;&lt;br /&gt;
  padding-left: 5px;&lt;br /&gt;
  background: linear-gradient(to right, transparent -40px, transparent 1px, transparent 1px, transparent 100%);&lt;br /&gt;
}&lt;br /&gt;
div.cell.jupyter-soft-selected {&lt;br /&gt;
  border-left-color: #90CAF9;&lt;br /&gt;
  border-left-color: #E3F2FD;&lt;br /&gt;
  border-left-width: 1px;&lt;br /&gt;
  padding-left: 5px;&lt;br /&gt;
  border-right-color: #E3F2FD;&lt;br /&gt;
  border-right-width: 1px;&lt;br /&gt;
  background: #E3F2FD;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  div.cell.jupyter-soft-selected {&lt;br /&gt;
    border-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.cell.selected {&lt;br /&gt;
  border-color: #ababab;&lt;br /&gt;
  border-left-width: 0px;&lt;br /&gt;
  padding-left: 6px;&lt;br /&gt;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 5px, transparent 5px, transparent 100%);&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  div.cell.selected {&lt;br /&gt;
    border-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.cell.selected.jupyter-soft-selected {&lt;br /&gt;
  border-left-width: 0;&lt;br /&gt;
  padding-left: 6px;&lt;br /&gt;
  background: linear-gradient(to right, #42A5F5 -40px, #42A5F5 7px, #E3F2FD 7px, #E3F2FD 100%);&lt;br /&gt;
}&lt;br /&gt;
.edit_mode div.cell.selected {&lt;br /&gt;
  border-color: #66BB6A;&lt;br /&gt;
  border-left-width: 0px;&lt;br /&gt;
  padding-left: 6px;&lt;br /&gt;
  background: linear-gradient(to right, #66BB6A -40px, #66BB6A 5px, transparent 5px, transparent 100%);&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .edit_mode div.cell.selected {&lt;br /&gt;
    border-color: transparent;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.prompt {&lt;br /&gt;
  /* This needs to be wide enough for 3 digit prompt numbers: In[100]: */&lt;br /&gt;
  min-width: 14ex;&lt;br /&gt;
  /* This padding is tuned to match the padding on the CodeMirror editor. */&lt;br /&gt;
  padding: 0.4em;&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  /* This has to match that of the the CodeMirror class line-height below */&lt;br /&gt;
  line-height: 1.21429em;&lt;br /&gt;
  /* Don't highlight prompt number selection */&lt;br /&gt;
  -webkit-touch-callout: none;&lt;br /&gt;
  -webkit-user-select: none;&lt;br /&gt;
  -khtml-user-select: none;&lt;br /&gt;
  -moz-user-select: none;&lt;br /&gt;
  -ms-user-select: none;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  /* Use default cursor */&lt;br /&gt;
  cursor: default;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  .prompt {&lt;br /&gt;
    text-align: left;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.inner_cell {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 1;&lt;br /&gt;
  -moz-box-flex: 1;&lt;br /&gt;
  box-flex: 1;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: 1;&lt;br /&gt;
}&lt;br /&gt;
@-moz-document url-prefix() {&lt;br /&gt;
  div.inner_cell {&lt;br /&gt;
    overflow-x: hidden;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/* input_area and input_prompt must match in top border and margin for alignment */&lt;br /&gt;
div.input_area {&lt;br /&gt;
  border: 1px solid #cfcfcf;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  background: #f7f7f7;&lt;br /&gt;
  line-height: 1.21429em;&lt;br /&gt;
}&lt;br /&gt;
/* This is needed so that empty prompt areas can collapse to zero height when there&lt;br /&gt;
   is no content in the output_subarea and the prompt. The main purpose of this is&lt;br /&gt;
   to make sure that empty JavaScript output_subareas have no height. */&lt;br /&gt;
div.prompt:empty {&lt;br /&gt;
  padding-top: 0;&lt;br /&gt;
  padding-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
div.unrecognized_cell {&lt;br /&gt;
  padding: 5px 5px 5px 0px;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
div.unrecognized_cell .inner_cell {&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: red;&lt;br /&gt;
  border: 1px solid #cfcfcf;&lt;br /&gt;
  background: #eaeaea;&lt;br /&gt;
}&lt;br /&gt;
div.unrecognized_cell .inner_cell a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
div.unrecognized_cell .inner_cell a:hover {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  div.unrecognized_cell &amp;gt; div.prompt {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.code_cell {&lt;br /&gt;
  /* avoid page breaking on code cells when printing */&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  div.code_cell {&lt;br /&gt;
    page-break-inside: avoid;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/* any special styling for code cells that are currently running goes here */&lt;br /&gt;
div.input {&lt;br /&gt;
  page-break-inside: avoid;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  div.input {&lt;br /&gt;
    /* Old browsers */&lt;br /&gt;
    display: -webkit-box;&lt;br /&gt;
    -webkit-box-orient: vertical;&lt;br /&gt;
    -webkit-box-align: stretch;&lt;br /&gt;
    display: -moz-box;&lt;br /&gt;
    -moz-box-orient: vertical;&lt;br /&gt;
    -moz-box-align: stretch;&lt;br /&gt;
    display: box;&lt;br /&gt;
    box-orient: vertical;&lt;br /&gt;
    box-align: stretch;&lt;br /&gt;
    /* Modern browsers */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/* input_area and input_prompt must match in top border and margin for alignment */&lt;br /&gt;
div.input_prompt {&lt;br /&gt;
  color: #303F9F;&lt;br /&gt;
  border-top: 1px solid transparent;&lt;br /&gt;
}&lt;br /&gt;
div.input_area &amp;gt; div.highlight {&lt;br /&gt;
  margin: 0.4em;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
div.input_area &amp;gt; div.highlight &amp;gt; pre {&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
/* The following gets added to the &amp;lt;head&amp;gt; if it is detected that the user has a&lt;br /&gt;
 * monospace font with inconsistent normal/bold/italic height.  See&lt;br /&gt;
 * notebookmain.js.  Such fonts will have keywords vertically offset with&lt;br /&gt;
 * respect to the rest of the text.  The user should select a better font.&lt;br /&gt;
 * See: https://github.com/ipython/ipython/issues/1503&lt;br /&gt;
 *&lt;br /&gt;
 * .CodeMirror span {&lt;br /&gt;
 *      vertical-align: bottom;&lt;br /&gt;
 * }&lt;br /&gt;
 */&lt;br /&gt;
.CodeMirror {&lt;br /&gt;
  line-height: 1.21429em;&lt;br /&gt;
  /* Changed from 1em to our global default */&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  height: auto;&lt;br /&gt;
  /* Changed to auto to autogrow */&lt;br /&gt;
  background: none;&lt;br /&gt;
  /* Changed from white to allow our bg to show through */&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
  /*  The CodeMirror docs are a bit fuzzy on if overflow-y should be hidden or visible.*/&lt;br /&gt;
  /*  We have found that if it is visible, vertical scrollbars appear with font size changes.*/&lt;br /&gt;
  overflow-y: hidden;&lt;br /&gt;
  overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-lines {&lt;br /&gt;
  /* In CM2, this used to be 0.4em, but in CM3 it went to 4px. We need the em value because */&lt;br /&gt;
  /* we have set a different line-height and want this to scale with that. */&lt;br /&gt;
  padding: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
  padding: 0 8px 0 4px;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
  border-bottom-left-radius: 2px;&lt;br /&gt;
  border-top-left-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
  /* In CM3 this went to 4px from 0 in CM2. We need the 0 value because of how we size */&lt;br /&gt;
  /* .CodeMirror-lines */&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: 0;&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
Original style from softwaremaniacs.org (c) Ivan Sagalaev &amp;lt;Maniac@SoftwareManiacs.Org&amp;gt;&lt;br /&gt;
Adapted from GitHub theme&lt;br /&gt;
&lt;br /&gt;
*/&lt;br /&gt;
.highlight-base {&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
.highlight-variable {&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
.highlight-variable-2 {&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
}&lt;br /&gt;
.highlight-variable-3 {&lt;br /&gt;
  color: #333333;&lt;br /&gt;
}&lt;br /&gt;
.highlight-string {&lt;br /&gt;
  color: #BA2121;&lt;br /&gt;
}&lt;br /&gt;
.highlight-comment {&lt;br /&gt;
  color: #408080;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
.highlight-number {&lt;br /&gt;
  color: #080;&lt;br /&gt;
}&lt;br /&gt;
.highlight-atom {&lt;br /&gt;
  color: #88F;&lt;br /&gt;
}&lt;br /&gt;
.highlight-keyword {&lt;br /&gt;
  color: #008000;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.highlight-builtin {&lt;br /&gt;
  color: #008000;&lt;br /&gt;
}&lt;br /&gt;
.highlight-error {&lt;br /&gt;
  color: #f00;&lt;br /&gt;
}&lt;br /&gt;
.highlight-operator {&lt;br /&gt;
  color: #AA22FF;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.highlight-meta {&lt;br /&gt;
  color: #AA22FF;&lt;br /&gt;
}&lt;br /&gt;
/* previously not defined, copying from default codemirror */&lt;br /&gt;
.highlight-def {&lt;br /&gt;
  color: #00f;&lt;br /&gt;
}&lt;br /&gt;
.highlight-string-2 {&lt;br /&gt;
  color: #f50;&lt;br /&gt;
}&lt;br /&gt;
.highlight-qualifier {&lt;br /&gt;
  color: #555;&lt;br /&gt;
}&lt;br /&gt;
.highlight-bracket {&lt;br /&gt;
  color: #997;&lt;br /&gt;
}&lt;br /&gt;
.highlight-tag {&lt;br /&gt;
  color: #170;&lt;br /&gt;
}&lt;br /&gt;
.highlight-attribute {&lt;br /&gt;
  color: #00c;&lt;br /&gt;
}&lt;br /&gt;
.highlight-header {&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
.highlight-quote {&lt;br /&gt;
  color: #090;&lt;br /&gt;
}&lt;br /&gt;
.highlight-link {&lt;br /&gt;
  color: #00c;&lt;br /&gt;
}&lt;br /&gt;
/* apply the same style to codemirror */&lt;br /&gt;
.cm-s-ipython span.cm-keyword {&lt;br /&gt;
  color: #008000;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-atom {&lt;br /&gt;
  color: #88F;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-number {&lt;br /&gt;
  color: #080;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-def {&lt;br /&gt;
  color: #00f;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-variable {&lt;br /&gt;
  color: #000;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-operator {&lt;br /&gt;
  color: #AA22FF;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-variable-2 {&lt;br /&gt;
  color: #1a1a1a;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-variable-3 {&lt;br /&gt;
  color: #333333;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-comment {&lt;br /&gt;
  color: #408080;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-string {&lt;br /&gt;
  color: #BA2121;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-string-2 {&lt;br /&gt;
  color: #f50;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-meta {&lt;br /&gt;
  color: #AA22FF;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-qualifier {&lt;br /&gt;
  color: #555;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-builtin {&lt;br /&gt;
  color: #008000;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-bracket {&lt;br /&gt;
  color: #997;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-tag {&lt;br /&gt;
  color: #170;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-attribute {&lt;br /&gt;
  color: #00c;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-header {&lt;br /&gt;
  color: blue;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-quote {&lt;br /&gt;
  color: #090;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-link {&lt;br /&gt;
  color: #00c;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-error {&lt;br /&gt;
  color: #f00;&lt;br /&gt;
}&lt;br /&gt;
.cm-s-ipython span.cm-tab {&lt;br /&gt;
  background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=);&lt;br /&gt;
  background-position: right;&lt;br /&gt;
  background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
div.output_wrapper {&lt;br /&gt;
  /* this position must be relative to enable descendents to be absolute within it */&lt;br /&gt;
  position: relative;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
/* class for the output area when it should be height-limited */&lt;br /&gt;
div.output_scroll {&lt;br /&gt;
  /* ideally, this would be max-height, but FF barfs all over that */&lt;br /&gt;
  height: 24em;&lt;br /&gt;
  /* FF needs this *and the wrapper* to specify full width, or it will shrinkwrap */&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);&lt;br /&gt;
  box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.8);&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
/* output div while it is collapsed */&lt;br /&gt;
div.output_collapsed {&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
div.out_prompt_overlay {&lt;br /&gt;
  height: 100%;&lt;br /&gt;
  padding: 0px 0.4em;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
div.out_prompt_overlay:hover {&lt;br /&gt;
  /* use inner shadow to get border that is computed the same on WebKit/FF */&lt;br /&gt;
  -webkit-box-shadow: inset 0 0 1px #000;&lt;br /&gt;
  box-shadow: inset 0 0 1px #000;&lt;br /&gt;
  background: rgba(240, 240, 240, 0.5);&lt;br /&gt;
}&lt;br /&gt;
div.output_prompt {&lt;br /&gt;
  color: #D84315;&lt;br /&gt;
}&lt;br /&gt;
/* This class is the outer container of all output sections. */&lt;br /&gt;
div.output_area {&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  page-break-inside: avoid;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
div.output_area .MathJax_Display {&lt;br /&gt;
  text-align: left !important;&lt;br /&gt;
}&lt;br /&gt;
div.output_area .rendered_html table {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
  margin-right: 0;&lt;br /&gt;
}&lt;br /&gt;
div.output_area .rendered_html img {&lt;br /&gt;
  margin-left: 0;&lt;br /&gt;
  margin-right: 0;&lt;br /&gt;
}&lt;br /&gt;
div.output_area img,&lt;br /&gt;
div.output_area svg {&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
div.output_area img.unconfined,&lt;br /&gt;
div.output_area svg.unconfined {&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
/* This is needed to protect the pre formating from global settings such&lt;br /&gt;
   as that of bootstrap */&lt;br /&gt;
.output {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: vertical;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: vertical;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: vertical;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: column;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  div.output_area {&lt;br /&gt;
    /* Old browsers */&lt;br /&gt;
    display: -webkit-box;&lt;br /&gt;
    -webkit-box-orient: vertical;&lt;br /&gt;
    -webkit-box-align: stretch;&lt;br /&gt;
    display: -moz-box;&lt;br /&gt;
    -moz-box-orient: vertical;&lt;br /&gt;
    -moz-box-align: stretch;&lt;br /&gt;
    display: box;&lt;br /&gt;
    box-orient: vertical;&lt;br /&gt;
    box-align: stretch;&lt;br /&gt;
    /* Modern browsers */&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    align-items: stretch;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.output_area pre {&lt;br /&gt;
  margin: 0;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: 0;&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
  color: black;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
/* This class is for the output subarea inside the output_area and after&lt;br /&gt;
   the prompt div. */&lt;br /&gt;
div.output_subarea {&lt;br /&gt;
  overflow-x: auto;&lt;br /&gt;
  padding: 0.4em;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 1;&lt;br /&gt;
  -moz-box-flex: 1;&lt;br /&gt;
  box-flex: 1;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: 1;&lt;br /&gt;
  max-width: calc(100% - 14ex);&lt;br /&gt;
}&lt;br /&gt;
div.output_scroll div.output_subarea {&lt;br /&gt;
  overflow-x: visible;&lt;br /&gt;
}&lt;br /&gt;
/* The rest of the output_* classes are for special styling of the different&lt;br /&gt;
   output types */&lt;br /&gt;
/* all text output has this class: */&lt;br /&gt;
div.output_text {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  /* This has to match that of the the CodeMirror class line-height below */&lt;br /&gt;
  line-height: 1.21429em;&lt;br /&gt;
}&lt;br /&gt;
/* stdout/stderr are 'text' as well as 'stream', but execute_result/error are *not* streams */&lt;br /&gt;
div.output_stderr {&lt;br /&gt;
  background: #fdd;&lt;br /&gt;
  /* very light red background for stderr */&lt;br /&gt;
}&lt;br /&gt;
div.output_latex {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
/* Empty output_javascript divs should have no height */&lt;br /&gt;
div.output_javascript:empty {&lt;br /&gt;
  padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.js-error {&lt;br /&gt;
  color: darkred;&lt;br /&gt;
}&lt;br /&gt;
/* raw_input styles */&lt;br /&gt;
div.raw_input_container {&lt;br /&gt;
  line-height: 1.21429em;&lt;br /&gt;
  padding-top: 5px;&lt;br /&gt;
}&lt;br /&gt;
pre.raw_input_prompt {&lt;br /&gt;
  /* nothing needed here. */&lt;br /&gt;
}&lt;br /&gt;
input.raw_input {&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  /* make sure input baseline aligns with prompt */&lt;br /&gt;
  vertical-align: baseline;&lt;br /&gt;
  /* padding + margin = 0.5em between prompt and cursor */&lt;br /&gt;
  padding: 0em 0.25em;&lt;br /&gt;
  margin: 0em 0.25em;&lt;br /&gt;
}&lt;br /&gt;
input.raw_input:focus {&lt;br /&gt;
  box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
p.p-space {&lt;br /&gt;
  margin-bottom: 10px;&lt;br /&gt;
}&lt;br /&gt;
div.output_unrecognized {&lt;br /&gt;
  padding: 5px;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  color: red;&lt;br /&gt;
}&lt;br /&gt;
div.output_unrecognized a {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
div.output_unrecognized a:hover {&lt;br /&gt;
  color: inherit;&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html {&lt;br /&gt;
  color: #000;&lt;br /&gt;
  /* any extras will just be numbers: */&lt;br /&gt;
}&lt;br /&gt;
.rendered_html em {&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html strong {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html u {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html :link {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html :visited {&lt;br /&gt;
  text-decoration: underline;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h1 {&lt;br /&gt;
  font-size: 185.7%;&lt;br /&gt;
  margin: 1.08em 0 0 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.0;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h2 {&lt;br /&gt;
  font-size: 157.1%;&lt;br /&gt;
  margin: 1.27em 0 0 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.0;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h3 {&lt;br /&gt;
  font-size: 128.6%;&lt;br /&gt;
  margin: 1.55em 0 0 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.0;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h4 {&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  margin: 2em 0 0 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.0;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h5 {&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  margin: 2em 0 0 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.0;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h6 {&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  margin: 2em 0 0 0;&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  line-height: 1.0;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h1:first-child {&lt;br /&gt;
  margin-top: 0.538em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h2:first-child {&lt;br /&gt;
  margin-top: 0.636em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h3:first-child {&lt;br /&gt;
  margin-top: 0.777em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h4:first-child {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h5:first-child {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html h6:first-child {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ul {&lt;br /&gt;
  list-style: disc;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ul ul {&lt;br /&gt;
  list-style: square;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ul ul ul {&lt;br /&gt;
  list-style: circle;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ol {&lt;br /&gt;
  list-style: decimal;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
  padding-left: 0px;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ol ol {&lt;br /&gt;
  list-style: upper-alpha;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ol ol ol {&lt;br /&gt;
  list-style: lower-alpha;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ol ol ol ol {&lt;br /&gt;
  list-style: lower-roman;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html ol ol ol ol ol {&lt;br /&gt;
  list-style: decimal;&lt;br /&gt;
  margin: 0em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html * + ul {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html * + ol {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html hr {&lt;br /&gt;
  color: black;&lt;br /&gt;
  background-color: black;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html pre {&lt;br /&gt;
  margin: 1em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html pre,&lt;br /&gt;
.rendered_html code {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html blockquote {&lt;br /&gt;
  margin: 1em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html table {&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
  border: 1px solid black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html tr,&lt;br /&gt;
.rendered_html th,&lt;br /&gt;
.rendered_html td {&lt;br /&gt;
  border: 1px solid black;&lt;br /&gt;
  border-collapse: collapse;&lt;br /&gt;
  margin: 1em 2em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html td,&lt;br /&gt;
.rendered_html th {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  padding: 4px;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html th {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html * + table {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html p {&lt;br /&gt;
  text-align: left;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html * + p {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html img {&lt;br /&gt;
  display: block;&lt;br /&gt;
  margin-left: auto;&lt;br /&gt;
  margin-right: auto;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html * + img {&lt;br /&gt;
  margin-top: 1em;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html img,&lt;br /&gt;
.rendered_html svg {&lt;br /&gt;
  max-width: 100%;&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.rendered_html img.unconfined,&lt;br /&gt;
.rendered_html svg.unconfined {&lt;br /&gt;
  max-width: none;&lt;br /&gt;
}&lt;br /&gt;
div.text_cell {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 540px) {&lt;br /&gt;
  div.text_cell &amp;gt; div.prompt {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.text_cell_render {&lt;br /&gt;
  /*font-family: &amp;quot;Helvetica Neue&amp;quot;, Arial, Helvetica, Geneva, sans-serif;*/&lt;br /&gt;
  outline: none;&lt;br /&gt;
  resize: none;&lt;br /&gt;
  width: inherit;&lt;br /&gt;
  border-style: none;&lt;br /&gt;
  padding: 0.5em 0.5em 0.5em 0.4em;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
a.anchor-link:link {&lt;br /&gt;
  text-decoration: none;&lt;br /&gt;
  padding: 0px 20px;&lt;br /&gt;
  visibility: hidden;&lt;br /&gt;
}&lt;br /&gt;
h1:hover .anchor-link,&lt;br /&gt;
h2:hover .anchor-link,&lt;br /&gt;
h3:hover .anchor-link,&lt;br /&gt;
h4:hover .anchor-link,&lt;br /&gt;
h5:hover .anchor-link,&lt;br /&gt;
h6:hover .anchor-link {&lt;br /&gt;
  visibility: visible;&lt;br /&gt;
}&lt;br /&gt;
.text_cell.rendered .input_area {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.text_cell.rendered .rendered_html {&lt;br /&gt;
  overflow-x: auto;&lt;br /&gt;
  overflow-y: hidden;&lt;br /&gt;
}&lt;br /&gt;
.text_cell.unrendered .text_cell_render {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-1,&lt;br /&gt;
.cm-header-2,&lt;br /&gt;
.cm-header-3,&lt;br /&gt;
.cm-header-4,&lt;br /&gt;
.cm-header-5,&lt;br /&gt;
.cm-header-6 {&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
  font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-1 {&lt;br /&gt;
  font-size: 185.7%;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-2 {&lt;br /&gt;
  font-size: 157.1%;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-3 {&lt;br /&gt;
  font-size: 128.6%;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-4 {&lt;br /&gt;
  font-size: 110%;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-5 {&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
.cm-header-6 {&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
/*!&lt;br /&gt;
*&lt;br /&gt;
* IPython notebook webapp&lt;br /&gt;
*&lt;br /&gt;
*/&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  .notebook_app {&lt;br /&gt;
    padding-left: 0px;&lt;br /&gt;
    padding-right: 0px;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
#ipython-main-app {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
}&lt;br /&gt;
div#notebook_panel {&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
}&lt;br /&gt;
div#notebook {&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  line-height: 20px;&lt;br /&gt;
  overflow-y: hidden;&lt;br /&gt;
  overflow-x: auto;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  /* This spaces the page away from the edge of the notebook area */&lt;br /&gt;
  padding-top: 20px;&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  min-height: 100%;&lt;br /&gt;
}&lt;br /&gt;
@media not print {&lt;br /&gt;
  #notebook-container {&lt;br /&gt;
    padding: 15px;&lt;br /&gt;
    background-color: #fff;&lt;br /&gt;
    min-height: 0;&lt;br /&gt;
    -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
    box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  #notebook-container {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
div.ui-widget-content {&lt;br /&gt;
  border: 1px solid #ababab;&lt;br /&gt;
  outline: none;&lt;br /&gt;
}&lt;br /&gt;
pre.dialog {&lt;br /&gt;
  background-color: #f7f7f7;&lt;br /&gt;
  border: 1px solid #ddd;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  padding: 0.4em;&lt;br /&gt;
  padding-left: 2em;&lt;br /&gt;
}&lt;br /&gt;
p.dialog {&lt;br /&gt;
  padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
/* Word-wrap output correctly.  This is the CSS3 spelling, though Firefox seems&lt;br /&gt;
   to not honor it correctly.  Webkit browsers (Chrome, rekonq, Safari) do.&lt;br /&gt;
 */&lt;br /&gt;
pre,&lt;br /&gt;
code,&lt;br /&gt;
kbd,&lt;br /&gt;
samp {&lt;br /&gt;
  white-space: pre-wrap;&lt;br /&gt;
}&lt;br /&gt;
#fonttest {&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
}&lt;br /&gt;
p {&lt;br /&gt;
  margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
.end_space {&lt;br /&gt;
  min-height: 100px;&lt;br /&gt;
  transition: height .2s ease;&lt;br /&gt;
}&lt;br /&gt;
.notebook_app &amp;gt; #header {&lt;br /&gt;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
}&lt;br /&gt;
@media not print {&lt;br /&gt;
  .notebook_app {&lt;br /&gt;
    background-color: #EEE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
kbd {&lt;br /&gt;
  border-style: solid;&lt;br /&gt;
  border-width: 1px;&lt;br /&gt;
  box-shadow: none;&lt;br /&gt;
  margin: 2px;&lt;br /&gt;
  padding-left: 2px;&lt;br /&gt;
  padding-right: 2px;&lt;br /&gt;
  padding-top: 1px;&lt;br /&gt;
  padding-bottom: 1px;&lt;br /&gt;
}&lt;br /&gt;
/* CSS for the cell toolbar */&lt;br /&gt;
.celltoolbar {&lt;br /&gt;
  border: thin solid #CFCFCF;&lt;br /&gt;
  border-bottom: none;&lt;br /&gt;
  background: #EEE;&lt;br /&gt;
  border-radius: 2px 2px 0px 0px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 29px;&lt;br /&gt;
  padding-right: 4px;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-pack: end;&lt;br /&gt;
  -moz-box-pack: end;&lt;br /&gt;
  box-pack: end;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  justify-content: flex-end;&lt;br /&gt;
  display: -webkit-flex;&lt;br /&gt;
}&lt;br /&gt;
@media print {&lt;br /&gt;
  .celltoolbar {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.ctb_hideshow {&lt;br /&gt;
  display: none;&lt;br /&gt;
  vertical-align: bottom;&lt;br /&gt;
}&lt;br /&gt;
/* ctb_show is added to the ctb_hideshow div to show the cell toolbar.&lt;br /&gt;
   Cell toolbars are only shown when the ctb_global_show class is also set.&lt;br /&gt;
*/&lt;br /&gt;
.ctb_global_show .ctb_show.ctb_hideshow {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.ctb_global_show .ctb_show + .input_area,&lt;br /&gt;
.ctb_global_show .ctb_show + div.text_cell_input,&lt;br /&gt;
.ctb_global_show .ctb_show ~ div.text_cell_render {&lt;br /&gt;
  border-top-right-radius: 0px;&lt;br /&gt;
  border-top-left-radius: 0px;&lt;br /&gt;
}&lt;br /&gt;
.ctb_global_show .ctb_show ~ div.text_cell_render {&lt;br /&gt;
  border: 1px solid #cfcfcf;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar {&lt;br /&gt;
  font-size: 87%;&lt;br /&gt;
  padding-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select {&lt;br /&gt;
  display: block;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
  padding: 6px 12px;&lt;br /&gt;
  font-size: 13px;&lt;br /&gt;
  line-height: 1.42857143;&lt;br /&gt;
  color: #555555;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  background-image: none;&lt;br /&gt;
  border: 1px solid #ccc;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);&lt;br /&gt;
  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;&lt;br /&gt;
  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;&lt;br /&gt;
  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
  font-size: 12px;&lt;br /&gt;
  line-height: 1.5;&lt;br /&gt;
  border-radius: 1px;&lt;br /&gt;
  width: inherit;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  height: 22px;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select:focus {&lt;br /&gt;
  border-color: #66afe9;&lt;br /&gt;
  outline: 0;&lt;br /&gt;
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);&lt;br /&gt;
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select::-moz-placeholder {&lt;br /&gt;
  color: #999;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select:-ms-input-placeholder {&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select::-webkit-input-placeholder {&lt;br /&gt;
  color: #999;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select::-ms-expand {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select[disabled],&lt;br /&gt;
.celltoolbar select[readonly],&lt;br /&gt;
fieldset[disabled] .celltoolbar select {&lt;br /&gt;
  background-color: #eeeeee;&lt;br /&gt;
  opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar select[disabled],&lt;br /&gt;
fieldset[disabled] .celltoolbar select {&lt;br /&gt;
  cursor: not-allowed;&lt;br /&gt;
}&lt;br /&gt;
textarea.celltoolbar select {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
select.celltoolbar select {&lt;br /&gt;
  height: 30px;&lt;br /&gt;
  line-height: 30px;&lt;br /&gt;
}&lt;br /&gt;
textarea.celltoolbar select,&lt;br /&gt;
select[multiple].celltoolbar select {&lt;br /&gt;
  height: auto;&lt;br /&gt;
}&lt;br /&gt;
.celltoolbar label {&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
.completions {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  z-index: 110;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  border: 1px solid #ababab;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;&lt;br /&gt;
  box-shadow: 0px 6px 10px -1px #adadad;&lt;br /&gt;
  line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.completions select {&lt;br /&gt;
  background: white;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  border: none;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  font-size: 110%;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  width: auto;&lt;br /&gt;
}&lt;br /&gt;
.completions select option.context {&lt;br /&gt;
  color: #286090;&lt;br /&gt;
}&lt;br /&gt;
#kernel_logo_widget {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  float: right;&lt;br /&gt;
}&lt;br /&gt;
#kernel_logo_widget .current_kernel_logo {&lt;br /&gt;
  display: none;&lt;br /&gt;
  margin-top: -1px;&lt;br /&gt;
  margin-bottom: -1px;&lt;br /&gt;
  width: 32px;&lt;br /&gt;
  height: 32px;&lt;br /&gt;
}&lt;br /&gt;
#menubar {&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
  margin-top: 1px;&lt;br /&gt;
}&lt;br /&gt;
#menubar .navbar {&lt;br /&gt;
  border-top: 1px;&lt;br /&gt;
  border-radius: 0px 0px 2px 2px;&lt;br /&gt;
  margin-bottom: 0px;&lt;br /&gt;
}&lt;br /&gt;
#menubar .navbar-toggle {&lt;br /&gt;
  float: left;&lt;br /&gt;
  padding-top: 7px;&lt;br /&gt;
  padding-bottom: 7px;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
#menubar .navbar-collapse {&lt;br /&gt;
  clear: left;&lt;br /&gt;
}&lt;br /&gt;
.nav-wrapper {&lt;br /&gt;
  border-bottom: 1px solid #e7e7e7;&lt;br /&gt;
}&lt;br /&gt;
i.menu-icon {&lt;br /&gt;
  padding-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
ul#help_menu li a {&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding-right: 2.2em;&lt;br /&gt;
}&lt;br /&gt;
ul#help_menu li a i {&lt;br /&gt;
  margin-right: -1.2em;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu {&lt;br /&gt;
  position: relative;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu &amp;gt; .dropdown-menu {&lt;br /&gt;
  top: 0;&lt;br /&gt;
  left: 100%;&lt;br /&gt;
  margin-top: -6px;&lt;br /&gt;
  margin-left: -1px;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu:hover &amp;gt; .dropdown-menu {&lt;br /&gt;
  display: block;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu &amp;gt; a:after {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  display: block;&lt;br /&gt;
  content: &amp;quot;\f0da&amp;quot;;&lt;br /&gt;
  float: right;&lt;br /&gt;
  color: #333333;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  margin-right: -10px;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu &amp;gt; a:after.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu &amp;gt; a:after.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu:hover &amp;gt; a:after {&lt;br /&gt;
  color: #262626;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu.pull-left {&lt;br /&gt;
  float: none;&lt;br /&gt;
}&lt;br /&gt;
.dropdown-submenu.pull-left &amp;gt; .dropdown-menu {&lt;br /&gt;
  left: -100%;&lt;br /&gt;
  margin-left: 10px;&lt;br /&gt;
}&lt;br /&gt;
#notification_area {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  float: right;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
}&lt;br /&gt;
.indicator_area {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  float: right;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-right: 5px;&lt;br /&gt;
  width: 11px;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: auto;&lt;br /&gt;
}&lt;br /&gt;
#kernel_indicator {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  float: right;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-right: 5px;&lt;br /&gt;
  width: 11px;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  border-left: 1px solid;&lt;br /&gt;
}&lt;br /&gt;
#kernel_indicator .kernel_indicator_name {&lt;br /&gt;
  padding-left: 5px;&lt;br /&gt;
  padding-right: 5px;&lt;br /&gt;
}&lt;br /&gt;
#modal_indicator {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  float: right;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-right: 5px;&lt;br /&gt;
  width: 11px;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: auto;&lt;br /&gt;
}&lt;br /&gt;
#readonly-indicator {&lt;br /&gt;
  float: right !important;&lt;br /&gt;
  float: right;&lt;br /&gt;
  color: #777;&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-right: 5px;&lt;br /&gt;
  width: 11px;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  width: auto;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  margin-bottom: 0px;&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.modal_indicator:before {&lt;br /&gt;
  width: 1.28571429em;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
}&lt;br /&gt;
.edit_mode .modal_indicator:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f040&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.edit_mode .modal_indicator:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.edit_mode .modal_indicator:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.command_mode .modal_indicator:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: ' ';&lt;br /&gt;
}&lt;br /&gt;
.command_mode .modal_indicator:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.command_mode .modal_indicator:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_idle_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f10c&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.kernel_idle_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_idle_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_busy_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f111&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.kernel_busy_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_busy_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_dead_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f1e2&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.kernel_dead_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_dead_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_disconnected_icon:before {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  font: normal normal normal 14px/1 FontAwesome;&lt;br /&gt;
  font-size: inherit;&lt;br /&gt;
  text-rendering: auto;&lt;br /&gt;
  -webkit-font-smoothing: antialiased;&lt;br /&gt;
  -moz-osx-font-smoothing: grayscale;&lt;br /&gt;
  content: &amp;quot;\f127&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
.kernel_disconnected_icon:before.pull-left {&lt;br /&gt;
  margin-right: .3em;&lt;br /&gt;
}&lt;br /&gt;
.kernel_disconnected_icon:before.pull-right {&lt;br /&gt;
  margin-left: .3em;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget {&lt;br /&gt;
  color: #777;&lt;br /&gt;
  z-index: 10;&lt;br /&gt;
  background: rgba(240, 240, 240, 0.5);&lt;br /&gt;
  margin-right: 4px;&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget:focus,&lt;br /&gt;
.notification_widget.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget:hover {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #adadad;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget:active,&lt;br /&gt;
.notification_widget.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
  border-color: #adadad;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget:active:hover,&lt;br /&gt;
.notification_widget.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget:hover,&lt;br /&gt;
.notification_widget:active:focus,&lt;br /&gt;
.notification_widget.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget:focus,&lt;br /&gt;
.notification_widget:active.focus,&lt;br /&gt;
.notification_widget.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.focus {&lt;br /&gt;
  color: #333;&lt;br /&gt;
  background-color: #d4d4d4;&lt;br /&gt;
  border-color: #8c8c8c;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget:active,&lt;br /&gt;
.notification_widget.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.disabled:hover,&lt;br /&gt;
.notification_widget[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .notification_widget:hover,&lt;br /&gt;
.notification_widget.disabled:focus,&lt;br /&gt;
.notification_widget[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .notification_widget:focus,&lt;br /&gt;
.notification_widget.disabled.focus,&lt;br /&gt;
.notification_widget[disabled].focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.focus {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  border-color: #ccc;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget .badge {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #333;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #f0ad4e;&lt;br /&gt;
  border-color: #eea236;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning:focus,&lt;br /&gt;
.notification_widget.warning.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
  border-color: #985f0d;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
  border-color: #d58512;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning:active,&lt;br /&gt;
.notification_widget.warning.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.warning {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ec971f;&lt;br /&gt;
  border-color: #d58512;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning:active:hover,&lt;br /&gt;
.notification_widget.warning.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.warning:hover,&lt;br /&gt;
.notification_widget.warning:active:focus,&lt;br /&gt;
.notification_widget.warning.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.warning:focus,&lt;br /&gt;
.notification_widget.warning:active.focus,&lt;br /&gt;
.notification_widget.warning.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.warning.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #d58512;&lt;br /&gt;
  border-color: #985f0d;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning:active,&lt;br /&gt;
.notification_widget.warning.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.warning {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning.disabled:hover,&lt;br /&gt;
.notification_widget.warning[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .notification_widget.warning:hover,&lt;br /&gt;
.notification_widget.warning.disabled:focus,&lt;br /&gt;
.notification_widget.warning[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.warning:focus,&lt;br /&gt;
.notification_widget.warning.disabled.focus,&lt;br /&gt;
.notification_widget.warning[disabled].focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.warning.focus {&lt;br /&gt;
  background-color: #f0ad4e;&lt;br /&gt;
  border-color: #eea236;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.warning .badge {&lt;br /&gt;
  color: #f0ad4e;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #5cb85c;&lt;br /&gt;
  border-color: #4cae4c;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success:focus,&lt;br /&gt;
.notification_widget.success.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
  border-color: #255625;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
  border-color: #398439;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success:active,&lt;br /&gt;
.notification_widget.success.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.success {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #449d44;&lt;br /&gt;
  border-color: #398439;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success:active:hover,&lt;br /&gt;
.notification_widget.success.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.success:hover,&lt;br /&gt;
.notification_widget.success:active:focus,&lt;br /&gt;
.notification_widget.success.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.success:focus,&lt;br /&gt;
.notification_widget.success:active.focus,&lt;br /&gt;
.notification_widget.success.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.success.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #398439;&lt;br /&gt;
  border-color: #255625;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success:active,&lt;br /&gt;
.notification_widget.success.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.success {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success.disabled:hover,&lt;br /&gt;
.notification_widget.success[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .notification_widget.success:hover,&lt;br /&gt;
.notification_widget.success.disabled:focus,&lt;br /&gt;
.notification_widget.success[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.success:focus,&lt;br /&gt;
.notification_widget.success.disabled.focus,&lt;br /&gt;
.notification_widget.success[disabled].focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.success.focus {&lt;br /&gt;
  background-color: #5cb85c;&lt;br /&gt;
  border-color: #4cae4c;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.success .badge {&lt;br /&gt;
  color: #5cb85c;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #5bc0de;&lt;br /&gt;
  border-color: #46b8da;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info:focus,&lt;br /&gt;
.notification_widget.info.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
  border-color: #1b6d85;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
  border-color: #269abc;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info:active,&lt;br /&gt;
.notification_widget.info.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.info {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #31b0d5;&lt;br /&gt;
  border-color: #269abc;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info:active:hover,&lt;br /&gt;
.notification_widget.info.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.info:hover,&lt;br /&gt;
.notification_widget.info:active:focus,&lt;br /&gt;
.notification_widget.info.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.info:focus,&lt;br /&gt;
.notification_widget.info:active.focus,&lt;br /&gt;
.notification_widget.info.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.info.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #269abc;&lt;br /&gt;
  border-color: #1b6d85;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info:active,&lt;br /&gt;
.notification_widget.info.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.info {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info.disabled:hover,&lt;br /&gt;
.notification_widget.info[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .notification_widget.info:hover,&lt;br /&gt;
.notification_widget.info.disabled:focus,&lt;br /&gt;
.notification_widget.info[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.info:focus,&lt;br /&gt;
.notification_widget.info.disabled.focus,&lt;br /&gt;
.notification_widget.info[disabled].focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.info.focus {&lt;br /&gt;
  background-color: #5bc0de;&lt;br /&gt;
  border-color: #46b8da;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.info .badge {&lt;br /&gt;
  color: #5bc0de;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #d9534f;&lt;br /&gt;
  border-color: #d43f3a;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger:focus,&lt;br /&gt;
.notification_widget.danger.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
  border-color: #761c19;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger:hover {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
  border-color: #ac2925;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger:active,&lt;br /&gt;
.notification_widget.danger.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.danger {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #c9302c;&lt;br /&gt;
  border-color: #ac2925;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger:active:hover,&lt;br /&gt;
.notification_widget.danger.active:hover,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.danger:hover,&lt;br /&gt;
.notification_widget.danger:active:focus,&lt;br /&gt;
.notification_widget.danger.active:focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.danger:focus,&lt;br /&gt;
.notification_widget.danger:active.focus,&lt;br /&gt;
.notification_widget.danger.active.focus,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.danger.focus {&lt;br /&gt;
  color: #fff;&lt;br /&gt;
  background-color: #ac2925;&lt;br /&gt;
  border-color: #761c19;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger:active,&lt;br /&gt;
.notification_widget.danger.active,&lt;br /&gt;
.open &amp;gt; .dropdown-toggle.notification_widget.danger {&lt;br /&gt;
  background-image: none;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger.disabled:hover,&lt;br /&gt;
.notification_widget.danger[disabled]:hover,&lt;br /&gt;
fieldset[disabled] .notification_widget.danger:hover,&lt;br /&gt;
.notification_widget.danger.disabled:focus,&lt;br /&gt;
.notification_widget.danger[disabled]:focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.danger:focus,&lt;br /&gt;
.notification_widget.danger.disabled.focus,&lt;br /&gt;
.notification_widget.danger[disabled].focus,&lt;br /&gt;
fieldset[disabled] .notification_widget.danger.focus {&lt;br /&gt;
  background-color: #d9534f;&lt;br /&gt;
  border-color: #d43f3a;&lt;br /&gt;
}&lt;br /&gt;
.notification_widget.danger .badge {&lt;br /&gt;
  color: #d9534f;&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
}&lt;br /&gt;
div#pager {&lt;br /&gt;
  background-color: #fff;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
  line-height: 20px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  display: none;&lt;br /&gt;
  position: fixed;&lt;br /&gt;
  bottom: 0px;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  max-height: 50%;&lt;br /&gt;
  padding-top: 8px;&lt;br /&gt;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  /* Display over codemirror */&lt;br /&gt;
  z-index: 100;&lt;br /&gt;
  /* Hack which prevents jquery ui resizable from changing top. */&lt;br /&gt;
  top: auto !important;&lt;br /&gt;
}&lt;br /&gt;
div#pager pre {&lt;br /&gt;
  line-height: 1.21429em;&lt;br /&gt;
  color: #000;&lt;br /&gt;
  background-color: #f7f7f7;&lt;br /&gt;
  padding: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
div#pager #pager-button-area {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  top: 8px;&lt;br /&gt;
  right: 20px;&lt;br /&gt;
}&lt;br /&gt;
div#pager #pager-contents {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
  width: 100%;&lt;br /&gt;
  height: 100%;&lt;br /&gt;
}&lt;br /&gt;
div#pager #pager-contents #pager-container {&lt;br /&gt;
  position: relative;&lt;br /&gt;
  padding: 15px 0px;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
div#pager .ui-resizable-handle {&lt;br /&gt;
  top: 0px;&lt;br /&gt;
  height: 8px;&lt;br /&gt;
  background: #f7f7f7;&lt;br /&gt;
  border-top: 1px solid #cfcfcf;&lt;br /&gt;
  border-bottom: 1px solid #cfcfcf;&lt;br /&gt;
  /* This injects handle bars (a short, wide = symbol) for &lt;br /&gt;
        the resize handle. */&lt;br /&gt;
}&lt;br /&gt;
div#pager .ui-resizable-handle::after {&lt;br /&gt;
  content: '';&lt;br /&gt;
  top: 2px;&lt;br /&gt;
  left: 50%;&lt;br /&gt;
  height: 3px;&lt;br /&gt;
  width: 30px;&lt;br /&gt;
  margin-left: -15px;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  border-top: 1px solid #cfcfcf;&lt;br /&gt;
}&lt;br /&gt;
.quickhelp {&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  display: -webkit-box;&lt;br /&gt;
  -webkit-box-orient: horizontal;&lt;br /&gt;
  -webkit-box-align: stretch;&lt;br /&gt;
  display: -moz-box;&lt;br /&gt;
  -moz-box-orient: horizontal;&lt;br /&gt;
  -moz-box-align: stretch;&lt;br /&gt;
  display: box;&lt;br /&gt;
  box-orient: horizontal;&lt;br /&gt;
  box-align: stretch;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  display: flex;&lt;br /&gt;
  flex-direction: row;&lt;br /&gt;
  align-items: stretch;&lt;br /&gt;
  line-height: 1.8em;&lt;br /&gt;
}&lt;br /&gt;
.shortcut_key {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  width: 20ex;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
}&lt;br /&gt;
.shortcut_descr {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  /* Old browsers */&lt;br /&gt;
  -webkit-box-flex: 1;&lt;br /&gt;
  -moz-box-flex: 1;&lt;br /&gt;
  box-flex: 1;&lt;br /&gt;
  /* Modern browsers */&lt;br /&gt;
  flex: 1;&lt;br /&gt;
}&lt;br /&gt;
span.save_widget {&lt;br /&gt;
  margin-top: 6px;&lt;br /&gt;
}&lt;br /&gt;
span.save_widget span.filename {&lt;br /&gt;
  height: 1em;&lt;br /&gt;
  line-height: 1em;&lt;br /&gt;
  padding: 3px;&lt;br /&gt;
  margin-left: 16px;&lt;br /&gt;
  border: none;&lt;br /&gt;
  font-size: 146.5%;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
span.save_widget span.filename:hover {&lt;br /&gt;
  background-color: #e6e6e6;&lt;br /&gt;
}&lt;br /&gt;
span.checkpoint_status,&lt;br /&gt;
span.autosave_status {&lt;br /&gt;
  font-size: small;&lt;br /&gt;
}&lt;br /&gt;
@media (max-width: 767px) {&lt;br /&gt;
  span.save_widget {&lt;br /&gt;
    font-size: small;&lt;br /&gt;
  }&lt;br /&gt;
  span.checkpoint_status,&lt;br /&gt;
  span.autosave_status {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@media (min-width: 768px) and (max-width: 991px) {&lt;br /&gt;
  span.checkpoint_status {&lt;br /&gt;
    display: none;&lt;br /&gt;
  }&lt;br /&gt;
  span.autosave_status {&lt;br /&gt;
    font-size: x-small;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
.toolbar {&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  margin-left: -5px;&lt;br /&gt;
  margin-top: 2px;&lt;br /&gt;
  margin-bottom: 5px;&lt;br /&gt;
  box-sizing: border-box;&lt;br /&gt;
  -moz-box-sizing: border-box;&lt;br /&gt;
  -webkit-box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
.toolbar select,&lt;br /&gt;
.toolbar label {&lt;br /&gt;
  width: auto;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  margin-right: 2px;&lt;br /&gt;
  margin-bottom: 0px;&lt;br /&gt;
  display: inline;&lt;br /&gt;
  font-size: 92%;&lt;br /&gt;
  margin-left: 0.3em;&lt;br /&gt;
  margin-right: 0.3em;&lt;br /&gt;
  padding: 0px;&lt;br /&gt;
  padding-top: 3px;&lt;br /&gt;
}&lt;br /&gt;
.toolbar .btn {&lt;br /&gt;
  padding: 2px 8px;&lt;br /&gt;
}&lt;br /&gt;
.toolbar .btn-group {&lt;br /&gt;
  margin-top: 0px;&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
}&lt;br /&gt;
#maintoolbar {&lt;br /&gt;
  margin-bottom: -3px;&lt;br /&gt;
  margin-top: -8px;&lt;br /&gt;
  border: 0px;&lt;br /&gt;
  min-height: 27px;&lt;br /&gt;
  margin-left: 0px;&lt;br /&gt;
  padding-top: 11px;&lt;br /&gt;
  padding-bottom: 3px;&lt;br /&gt;
}&lt;br /&gt;
#maintoolbar .navbar-text {&lt;br /&gt;
  float: none;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  text-align: right;&lt;br /&gt;
  margin-left: 5px;&lt;br /&gt;
  margin-right: 0px;&lt;br /&gt;
  margin-top: 0px;&lt;br /&gt;
}&lt;br /&gt;
.select-xs {&lt;br /&gt;
  height: 24px;&lt;br /&gt;
}&lt;br /&gt;
.pulse,&lt;br /&gt;
.dropdown-menu &amp;gt; li &amp;gt; a.pulse,&lt;br /&gt;
li.pulse &amp;gt; a.dropdown-toggle,&lt;br /&gt;
li.pulse.open &amp;gt; a.dropdown-toggle {&lt;br /&gt;
  background-color: #F37626;&lt;br /&gt;
  color: white;&lt;br /&gt;
}&lt;br /&gt;
/**&lt;br /&gt;
 * Primary styles&lt;br /&gt;
 *&lt;br /&gt;
 * Author: Jupyter Development Team&lt;br /&gt;
 */&lt;br /&gt;
/** WARNING IF YOU ARE EDITTING THIS FILE, if this is a .css file, It has a lot&lt;br /&gt;
 * of chance of beeing generated from the ../less/[samename].less file, you can&lt;br /&gt;
 * try to get back the less file by reverting somme commit in history&lt;br /&gt;
 **/&lt;br /&gt;
/*&lt;br /&gt;
 * We'll try to get something pretty, so we&lt;br /&gt;
 * have some strange css to have the scroll bar on&lt;br /&gt;
 * the left with fix button on the top right of the tooltip&lt;br /&gt;
 */&lt;br /&gt;
@-moz-keyframes fadeOut {&lt;br /&gt;
  from {&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
  }&lt;br /&gt;
  to {&lt;br /&gt;
    opacity: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes fadeOut {&lt;br /&gt;
  from {&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
  }&lt;br /&gt;
  to {&lt;br /&gt;
    opacity: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-moz-keyframes fadeIn {&lt;br /&gt;
  from {&lt;br /&gt;
    opacity: 0;&lt;br /&gt;
  }&lt;br /&gt;
  to {&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
@-webkit-keyframes fadeIn {&lt;br /&gt;
  from {&lt;br /&gt;
    opacity: 0;&lt;br /&gt;
  }&lt;br /&gt;
  to {&lt;br /&gt;
    opacity: 1;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
/*properties of tooltip after &amp;quot;expand&amp;quot;*/&lt;br /&gt;
.bigtooltip {&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
  height: 200px;&lt;br /&gt;
  -webkit-transition-property: height;&lt;br /&gt;
  -webkit-transition-duration: 500ms;&lt;br /&gt;
  -moz-transition-property: height;&lt;br /&gt;
  -moz-transition-duration: 500ms;&lt;br /&gt;
  transition-property: height;&lt;br /&gt;
  transition-duration: 500ms;&lt;br /&gt;
}&lt;br /&gt;
/*properties of tooltip before &amp;quot;expand&amp;quot;*/&lt;br /&gt;
.smalltooltip {&lt;br /&gt;
  -webkit-transition-property: height;&lt;br /&gt;
  -webkit-transition-duration: 500ms;&lt;br /&gt;
  -moz-transition-property: height;&lt;br /&gt;
  -moz-transition-duration: 500ms;&lt;br /&gt;
  transition-property: height;&lt;br /&gt;
  transition-duration: 500ms;&lt;br /&gt;
  text-overflow: ellipsis;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  height: 80px;&lt;br /&gt;
}&lt;br /&gt;
.tooltipbuttons {&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  padding-right: 15px;&lt;br /&gt;
  top: 0px;&lt;br /&gt;
  right: 0px;&lt;br /&gt;
}&lt;br /&gt;
.tooltiptext {&lt;br /&gt;
  /*avoid the button to overlap on some docstring*/&lt;br /&gt;
  padding-right: 30px;&lt;br /&gt;
}&lt;br /&gt;
.ipython_tooltip {&lt;br /&gt;
  max-width: 700px;&lt;br /&gt;
  /*fade-in animation when inserted*/&lt;br /&gt;
  -webkit-animation: fadeOut 400ms;&lt;br /&gt;
  -moz-animation: fadeOut 400ms;&lt;br /&gt;
  animation: fadeOut 400ms;&lt;br /&gt;
  -webkit-animation: fadeIn 400ms;&lt;br /&gt;
  -moz-animation: fadeIn 400ms;&lt;br /&gt;
  animation: fadeIn 400ms;&lt;br /&gt;
  vertical-align: middle;&lt;br /&gt;
  background-color: #f7f7f7;&lt;br /&gt;
  overflow: visible;&lt;br /&gt;
  border: #ababab 1px solid;&lt;br /&gt;
  outline: none;&lt;br /&gt;
  padding: 3px;&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  padding-left: 7px;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  min-height: 50px;&lt;br /&gt;
  -moz-box-shadow: 0px 6px 10px -1px #adadad;&lt;br /&gt;
  -webkit-box-shadow: 0px 6px 10px -1px #adadad;&lt;br /&gt;
  box-shadow: 0px 6px 10px -1px #adadad;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  z-index: 1000;&lt;br /&gt;
}&lt;br /&gt;
.ipython_tooltip a {&lt;br /&gt;
  float: right;&lt;br /&gt;
}&lt;br /&gt;
.ipython_tooltip .tooltiptext pre {&lt;br /&gt;
  border: 0;&lt;br /&gt;
  border-radius: 0;&lt;br /&gt;
  font-size: 100%;&lt;br /&gt;
  background-color: #f7f7f7;&lt;br /&gt;
}&lt;br /&gt;
.pretooltiparrow {&lt;br /&gt;
  left: 0px;&lt;br /&gt;
  margin: 0px;&lt;br /&gt;
  top: -16px;&lt;br /&gt;
  width: 40px;&lt;br /&gt;
  height: 16px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
}&lt;br /&gt;
.pretooltiparrow:before {&lt;br /&gt;
  background-color: #f7f7f7;&lt;br /&gt;
  border: 1px #ababab solid;&lt;br /&gt;
  z-index: 11;&lt;br /&gt;
  content: &amp;quot;&amp;quot;;&lt;br /&gt;
  position: absolute;&lt;br /&gt;
  left: 15px;&lt;br /&gt;
  top: 10px;&lt;br /&gt;
  width: 25px;&lt;br /&gt;
  height: 25px;&lt;br /&gt;
  -webkit-transform: rotate(45deg);&lt;br /&gt;
  -moz-transform: rotate(45deg);&lt;br /&gt;
  -ms-transform: rotate(45deg);&lt;br /&gt;
  -o-transform: rotate(45deg);&lt;br /&gt;
}&lt;br /&gt;
ul.typeahead-list i {&lt;br /&gt;
  margin-left: -10px;&lt;br /&gt;
  width: 18px;&lt;br /&gt;
}&lt;br /&gt;
ul.typeahead-list {&lt;br /&gt;
  max-height: 80vh;&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
ul.typeahead-list &amp;gt; li &amp;gt; a {&lt;br /&gt;
  /** Firefox bug **/&lt;br /&gt;
  /* see https://github.com/jupyter/notebook/issues/559 */&lt;br /&gt;
  white-space: normal;&lt;br /&gt;
}&lt;br /&gt;
.cmd-palette .modal-body {&lt;br /&gt;
  padding: 7px;&lt;br /&gt;
}&lt;br /&gt;
.cmd-palette form {&lt;br /&gt;
  background: white;&lt;br /&gt;
}&lt;br /&gt;
.cmd-palette input {&lt;br /&gt;
  outline: none;&lt;br /&gt;
}&lt;br /&gt;
.no-shortcut {&lt;br /&gt;
  display: none;&lt;br /&gt;
}&lt;br /&gt;
.command-shortcut:before {&lt;br /&gt;
  content: &amp;quot;(command)&amp;quot;;&lt;br /&gt;
  padding-right: 3px;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
.edit-shortcut:before {&lt;br /&gt;
  content: &amp;quot;(edit)&amp;quot;;&lt;br /&gt;
  padding-right: 3px;&lt;br /&gt;
  color: #777777;&lt;br /&gt;
}&lt;br /&gt;
#find-and-replace #replace-preview .match,&lt;br /&gt;
#find-and-replace #replace-preview .insert {&lt;br /&gt;
  background-color: #BBDEFB;&lt;br /&gt;
  border-color: #90CAF9;&lt;br /&gt;
  border-style: solid;&lt;br /&gt;
  border-width: 1px;&lt;br /&gt;
  border-radius: 0px;&lt;br /&gt;
}&lt;br /&gt;
#find-and-replace #replace-preview .replace .match {&lt;br /&gt;
  background-color: #FFCDD2;&lt;br /&gt;
  border-color: #EF9A9A;&lt;br /&gt;
  border-radius: 0px;&lt;br /&gt;
}&lt;br /&gt;
#find-and-replace #replace-preview .replace .insert {&lt;br /&gt;
  background-color: #C8E6C9;&lt;br /&gt;
  border-color: #A5D6A7;&lt;br /&gt;
  border-radius: 0px;&lt;br /&gt;
}&lt;br /&gt;
#find-and-replace #replace-preview {&lt;br /&gt;
  max-height: 60vh;&lt;br /&gt;
  overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
#find-and-replace #replace-preview pre {&lt;br /&gt;
  padding: 5px 10px;&lt;br /&gt;
}&lt;br /&gt;
.terminal-app {&lt;br /&gt;
  background: #EEE;&lt;br /&gt;
}&lt;br /&gt;
.terminal-app #header {&lt;br /&gt;
  background: #fff;&lt;br /&gt;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.2);&lt;br /&gt;
}&lt;br /&gt;
.terminal-app .terminal {&lt;br /&gt;
  float: left;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  color: white;&lt;br /&gt;
  background: black;&lt;br /&gt;
  padding: 0.4em;&lt;br /&gt;
  border-radius: 2px;&lt;br /&gt;
  -webkit-box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);&lt;br /&gt;
  box-shadow: 0px 0px 12px 1px rgba(87, 87, 87, 0.4);&lt;br /&gt;
}&lt;br /&gt;
.terminal-app .terminal,&lt;br /&gt;
.terminal-app .terminal dummy-screen {&lt;br /&gt;
  line-height: 1em;&lt;br /&gt;
  font-size: 14px;&lt;br /&gt;
}&lt;br /&gt;
.terminal-app .terminal-cursor {&lt;br /&gt;
  color: black;&lt;br /&gt;
  background: white;&lt;br /&gt;
}&lt;br /&gt;
.terminal-app #terminado-container {&lt;br /&gt;
  margin-top: 20px;&lt;br /&gt;
}&lt;br /&gt;
/*# sourceMappingURL=style.min.css.map */&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
    .highlight .hll { background-color: #ffffcc }&lt;br /&gt;
.highlight  { background: #f8f8f8; }&lt;br /&gt;
.highlight .c { color: #408080; font-style: italic } /* Comment */&lt;br /&gt;
.highlight .err { border: 1px solid #FF0000 } /* Error */&lt;br /&gt;
.highlight .k { color: #008000; font-weight: bold } /* Keyword */&lt;br /&gt;
.highlight .o { color: #666666 } /* Operator */&lt;br /&gt;
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */&lt;br /&gt;
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */&lt;br /&gt;
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */&lt;br /&gt;
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */&lt;br /&gt;
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */&lt;br /&gt;
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */&lt;br /&gt;
.highlight .gd { color: #A00000 } /* Generic.Deleted */&lt;br /&gt;
.highlight .ge { font-style: italic } /* Generic.Emph */&lt;br /&gt;
.highlight .gr { color: #FF0000 } /* Generic.Error */&lt;br /&gt;
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */&lt;br /&gt;
.highlight .gi { color: #00A000 } /* Generic.Inserted */&lt;br /&gt;
.highlight .go { color: #888888 } /* Generic.Output */&lt;br /&gt;
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */&lt;br /&gt;
.highlight .gs { font-weight: bold } /* Generic.Strong */&lt;br /&gt;
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */&lt;br /&gt;
.highlight .gt { color: #0044DD } /* Generic.Traceback */&lt;br /&gt;
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */&lt;br /&gt;
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */&lt;br /&gt;
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */&lt;br /&gt;
.highlight .kp { color: #008000 } /* Keyword.Pseudo */&lt;br /&gt;
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */&lt;br /&gt;
.highlight .kt { color: #B00040 } /* Keyword.Type */&lt;br /&gt;
.highlight .m { color: #666666 } /* Literal.Number */&lt;br /&gt;
.highlight .s { color: #BA2121 } /* Literal.String */&lt;br /&gt;
.highlight .na { color: #7D9029 } /* Name.Attribute */&lt;br /&gt;
.highlight .nb { color: #008000 } /* Name.Builtin */&lt;br /&gt;
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */&lt;br /&gt;
.highlight .no { color: #880000 } /* Name.Constant */&lt;br /&gt;
.highlight .nd { color: #AA22FF } /* Name.Decorator */&lt;br /&gt;
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */&lt;br /&gt;
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */&lt;br /&gt;
.highlight .nf { color: #0000FF } /* Name.Function */&lt;br /&gt;
.highlight .nl { color: #A0A000 } /* Name.Label */&lt;br /&gt;
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */&lt;br /&gt;
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */&lt;br /&gt;
.highlight .nv { color: #19177C } /* Name.Variable */&lt;br /&gt;
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */&lt;br /&gt;
.highlight .w { color: #bbbbbb } /* Text.Whitespace */&lt;br /&gt;
.highlight .mb { color: #666666 } /* Literal.Number.Bin */&lt;br /&gt;
.highlight .mf { color: #666666 } /* Literal.Number.Float */&lt;br /&gt;
.highlight .mh { color: #666666 } /* Literal.Number.Hex */&lt;br /&gt;
.highlight .mi { color: #666666 } /* Literal.Number.Integer */&lt;br /&gt;
.highlight .mo { color: #666666 } /* Literal.Number.Oct */&lt;br /&gt;
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */&lt;br /&gt;
.highlight .sc { color: #BA2121 } /* Literal.String.Char */&lt;br /&gt;
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */&lt;br /&gt;
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */&lt;br /&gt;
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */&lt;br /&gt;
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */&lt;br /&gt;
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */&lt;br /&gt;
.highlight .sx { color: #008000 } /* Literal.String.Other */&lt;br /&gt;
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */&lt;br /&gt;
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */&lt;br /&gt;
.highlight .ss { color: #19177C } /* Literal.String.Symbol */&lt;br /&gt;
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */&lt;br /&gt;
.highlight .vc { color: #19177C } /* Name.Variable.Class */&lt;br /&gt;
.highlight .vg { color: #19177C } /* Name.Variable.Global */&lt;br /&gt;
.highlight .vi { color: #19177C } /* Name.Variable.Instance */&lt;br /&gt;
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
/* Temporary definitions which will become obsolete with Notebook release 5.0 */&lt;br /&gt;
.ansi-black-fg { color: #3E424D; }&lt;br /&gt;
.ansi-black-bg { background-color: #3E424D; }&lt;br /&gt;
.ansi-black-intense-fg { color: #282C36; }&lt;br /&gt;
.ansi-black-intense-bg { background-color: #282C36; }&lt;br /&gt;
.ansi-red-fg { color: #E75C58; }&lt;br /&gt;
.ansi-red-bg { background-color: #E75C58; }&lt;br /&gt;
.ansi-red-intense-fg { color: #B22B31; }&lt;br /&gt;
.ansi-red-intense-bg { background-color: #B22B31; }&lt;br /&gt;
.ansi-green-fg { color: #00A250; }&lt;br /&gt;
.ansi-green-bg { background-color: #00A250; }&lt;br /&gt;
.ansi-green-intense-fg { color: #007427; }&lt;br /&gt;
.ansi-green-intense-bg { background-color: #007427; }&lt;br /&gt;
.ansi-yellow-fg { color: #DDB62B; }&lt;br /&gt;
.ansi-yellow-bg { background-color: #DDB62B; }&lt;br /&gt;
.ansi-yellow-intense-fg { color: #B27D12; }&lt;br /&gt;
.ansi-yellow-intense-bg { background-color: #B27D12; }&lt;br /&gt;
.ansi-blue-fg { color: #208FFB; }&lt;br /&gt;
.ansi-blue-bg { background-color: #208FFB; }&lt;br /&gt;
.ansi-blue-intense-fg { color: #0065CA; }&lt;br /&gt;
.ansi-blue-intense-bg { background-color: #0065CA; }&lt;br /&gt;
.ansi-magenta-fg { color: #D160C4; }&lt;br /&gt;
.ansi-magenta-bg { background-color: #D160C4; }&lt;br /&gt;
.ansi-magenta-intense-fg { color: #A03196; }&lt;br /&gt;
.ansi-magenta-intense-bg { background-color: #A03196; }&lt;br /&gt;
.ansi-cyan-fg { color: #60C6C8; }&lt;br /&gt;
.ansi-cyan-bg { background-color: #60C6C8; }&lt;br /&gt;
.ansi-cyan-intense-fg { color: #258F8F; }&lt;br /&gt;
.ansi-cyan-intense-bg { background-color: #258F8F; }&lt;br /&gt;
.ansi-white-fg { color: #C5C1B4; }&lt;br /&gt;
.ansi-white-bg { background-color: #C5C1B4; }&lt;br /&gt;
.ansi-white-intense-fg { color: #A1A6B2; }&lt;br /&gt;
.ansi-white-intense-bg { background-color: #A1A6B2; }&lt;br /&gt;
&lt;br /&gt;
.ansi-bold { font-weight: bold; }&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
/* Overrides of notebook CSS for static HTML export */&lt;br /&gt;
body {&lt;br /&gt;
  overflow: visible;&lt;br /&gt;
  padding: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
div#notebook {&lt;br /&gt;
  overflow: visible;&lt;br /&gt;
  border-top: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
  div.cell {&lt;br /&gt;
    display: block;&lt;br /&gt;
    page-break-inside: avoid;&lt;br /&gt;
  } &lt;br /&gt;
  div.output_wrapper { &lt;br /&gt;
    display: block;&lt;br /&gt;
    page-break-inside: avoid; &lt;br /&gt;
  }&lt;br /&gt;
  div.output { &lt;br /&gt;
    display: block;&lt;br /&gt;
    page-break-inside: avoid; &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Custom stylesheet, it must be in the same directory as the html file --&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;custom.css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Loading mathjax macro --&amp;gt;&lt;br /&gt;
&amp;lt;!-- Load mathjax --&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MathJax configuration --&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/x-mathjax-config&amp;quot;&amp;gt;&lt;br /&gt;
    MathJax.Hub.Config({&lt;br /&gt;
        tex2jax: {&lt;br /&gt;
            inlineMath: [ ['$','$'], [&amp;quot;\\(&amp;quot;,&amp;quot;\\)&amp;quot;] ],&lt;br /&gt;
            displayMath: [ ['$$','$$'], [&amp;quot;\\[&amp;quot;,&amp;quot;\\]&amp;quot;] ],&lt;br /&gt;
            processEscapes: true,&lt;br /&gt;
            processEnvironments: true&lt;br /&gt;
        },&lt;br /&gt;
        // Center justify equations in code and markdown cells. Elsewhere&lt;br /&gt;
        // we use CSS to left justify single line equations in code cells.&lt;br /&gt;
        displayAlign: 'center',&lt;br /&gt;
        &amp;quot;HTML-CSS&amp;quot;: {&lt;br /&gt;
            styles: {'.MathJax_Display': {&amp;quot;margin&amp;quot;: 0}},&lt;br /&gt;
            linebreaks: { automatic: true }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;!-- End of mathjax configuration --&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;div tabindex=&amp;quot;-1&amp;quot; id=&amp;quot;notebook&amp;quot; class=&amp;quot;border-box-sizing&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;container&amp;quot; id=&amp;quot;notebook-container&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Najpierw importujemy biblioteki wykorzystywane w tym notebooku:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[1]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nn&amp;quot;&amp;gt;numpy&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;as&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nn&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nn&amp;quot;&amp;gt;pylab&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;as&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nn&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;Procesy-AR&amp;quot;&amp;gt;Procesy AR&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Procesy-AR&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h1&amp;gt;&amp;lt;h2 id=&amp;quot;Dla-przypomnienia:&amp;quot;&amp;gt;Dla przypomnienia:&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Dla-przypomnienia:&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;proces AR generowany jest tak, że kolejna próbka jest ważoną sumą $p$ poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji $\sigma^2$:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$x[n] = \sum_{k=1}^p a[k] * x[n-k] +\varepsilon[n]$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;i $\varepsilon[n] \sim N(0,\sigma^2)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Proces AR można zatem scharakteryzować podając:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;współczynniki $a$ oraz &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$\sigma^2$. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Zadanie:-ilustracja-realizacji-procesu&amp;quot;&amp;gt;Zadanie: ilustracja realizacji procesu&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Zadanie:-ilustracja-realizacji-procesu&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;współczynniki:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[3]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.7&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;wariancję $\sigma^2 = 1$:&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[4]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Teraz definiujemy funkcję, która wytwarza jedną realizację procesu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[5]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nf&amp;quot;&amp;gt;realizacjaAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;&amp;amp;#39;&amp;amp;#39;&amp;amp;#39;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    a: współczynniki &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    sigma: standardowe odchylenie&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    N: liczba próbek w realizacji&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    &amp;amp;#39;&amp;amp;#39;&amp;amp;#39;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#kolejno tworzymy próbki w realizacji&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;random&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;randn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Wykorzystajmy teraz tą funkcję do wytworzenia 5 realizacji po 500 próbek każda:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[6]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_realizacji&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# liczba realizacji&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;5000&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#liczba punktów w realizacji&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;realizacja&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_realizacji&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;));&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# macierz na wszystkie realizacje&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_realizacji&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;    &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#generujemy realizacje procesu&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;realizacja&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,:]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;realizacjaAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Wykreślmy te realizacje:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[7]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_realizacji&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#rysujemy realizacje procesu&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;realizacja&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,:])&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;realizacja&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;str&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhAAAAFyCAYAAACk1ONFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXm8D9X/x1/nXnvKGlmKpNAXyVJUimRpoSRkSQlp+5Ur&lt;br /&gt;
LVK29FV2bXxRClFIKFJJkmS9Zb92sma79uXe6/P+/fH+nObMfGbmM/O5n8/nXjrPx2MeM3PmbHPm&lt;br /&gt;
zDnv8z6bICJoNBqNRqPR+CEhqyOg0Wg0Go3m4kMLEBqNRqPRaHyjBQiNRqPRaDS+0QKERqPRaDQa&lt;br /&gt;
32gBQqPRaDQajW+0AKHRaDQajcY3WoDQaDQajUbjGy1AaDQajUaj8Y0WIDQajUaj0fhGCxAazb8E&lt;br /&gt;
IUQZIURACNFBMesrhAhkcbx2CiE+yco4aDQa/2gBQqP5d0MAslSACIYf8Zr6QohOQogNQoizQojN&lt;br /&gt;
Qojnoxg3jUbjgBYgNJp/N28ByJfFcagA4KlIHAohugIYC2AtgOcBLAHwnhDi5ehFT6PR2CH0Zloa&lt;br /&gt;
TfZDCJGPiM5E2c8yAHYAeIKIJkTT76xACJEHwG4AS4joQcV8IoAHAVxNRMezKn4azaWO1kBoNFmM&lt;br /&gt;
HIcghKgkhJgshDgK4Nfgs4pCiOlCiCNBFf0KIURTi/tCQoghQog1QoiTQojjQoi5QoiqXsNW7scH&lt;br /&gt;
42J39A7aySmE6C+EWCmEOCaEOCWEWCSEqGfjvxBCvBiM21khxEEhxHdCiOqKHdMYCB/vUx9AYQAf&lt;br /&gt;
Wcw/BJAfwP3h3l+j0UROjqyOgEaj+af/fxqAzQB6guveGwH8BmAPgIEATgNoBWCmEOJhIpoVdFcO&lt;br /&gt;
QLOg+x0AigPoCmChEOJGIjoQJmxVDTkawI8WO/cCaAvg7+D9FQCeBDAFwBgAlwPoBGCeEOIWIlqj&lt;br /&gt;
uP0EwOMA5oC7GnIAqAugNoBky/tLvL7PzcHzKov7VeBxFTcDmOzy7hqNJhNoAUKjyT78QUSPyRsh&lt;br /&gt;
xHwAOwHUIqKMoPEoIcRiAO8CkALEGiK6QfUoqMbfBK7Y3/YaASJaBmCZ4s914Bb9D2BhAQCOAiir&lt;br /&gt;
xAlCiLHB8P4PQJegWX2w8DCCiLorwQwPEw2v71MCwAUiOmx5h3QhxBEAJcO+sEajiRjdhaHRZA8I&lt;br /&gt;
wP/kjRCiEFhFPw1AASFEEXmAK/PrhRAlAK4wFXcJQojCAM6AK9zqiBAhRD4AMwEcAdCWggOmiMkI&lt;br /&gt;
2hHBuOYCsNISXguwJqC/n3B9vE9eAGkO3pwLPtdoNDFCayA0muzDDuW6PAABniUxwMYuASgGYL8Q&lt;br /&gt;
QgDoBuAZANcCSFTsHLZx65VxQf/qEFGq+kAI8TiA7gAqAsipPNquXJcDsI+IjvkJ1Mf7nAULLnbk&lt;br /&gt;
CT7XaDQxQgsQGk32Qa3wpHZwCIDvHexvDZ57gVv54wC8Ae5iCAAYiQi1jEKIFwG0BtCOiNZanrUH&lt;br /&gt;
MB7ADACDABwEcAHA62ChIbN4fZ/9ABKFEEXVbgwhRE4ARQDsi0JcNBqNA1qA0GiyJ7Iln05EC8LY&lt;br /&gt;
bQFgARGZ1lIQQhQEcMhvwEKIugAGAxhORF84hLeNiB6xuLN2VWwD0EgIUdCnFsLr+/wJ1tLUBDBP&lt;br /&gt;
Ma8FFjT+9BGmRqPxiR4DodFkQ4joEICFALoKIa6yPhdCFFVuL4ArUvV5SwCl/IYbDOtLAIsAvOJg&lt;br /&gt;
7YKNu1sB1LEYfwUuY/r4jIbX91kA1k48YzF/BjxjZY7PcDUajQ+0BkKjyb48B14PYm1wlsN28JTG&lt;br /&gt;
OuDKVE5j/BbAm8G1FJYAqAKgHVgD4Jf3ARQF8A2ANjwc4R/WBLszvgXwsBBiJriSLgeeZrkevP4C&lt;br /&gt;
AICIFgZnT7wghLgBrCVIAE/jXEBE1vUbJJ7eh4jOCSHeBPCBEGIquKvnTvCU09f9jr3QaDT+0AKE&lt;br /&gt;
RpNNIaKNQoia4Bb84+B+/YMA/gDQT7H6X/By1G3B60SsAnAfgHcQusaC3dKzqllR8KDFYTb2+gFY&lt;br /&gt;
S0SfCiHk2gyNAGwAV/CtwBW4yhMAVoOnXw4CcBw8W2OJw2v7eh8iGiWESAPwEoCm4JUpuxHR+y7+&lt;br /&gt;
azSaKKCXstZoNFmKEOIvAPOsYx40Gk32JuZjIIQQJYUQE4UQh4UQZ4QQq9VlbDUazb8XIUQOsGYl&lt;br /&gt;
M9NNNRpNFhDTLozgqOnfAPwEoDG4kLgeQKqbO41Gc+kjhGgEoA14zYafsjg6Go3GJzHtwhBCvANe&lt;br /&gt;
hOaumAWi0WguSoQQCwBcB+AjIno3q+Oj0Wj8EWsBYj145PXVAO4CsBdcWIyLWaAajUaj0WhiTqwF&lt;br /&gt;
iLPgUdNDAUwHcAt4NbmuRDTRxn4RcFfHTvBa9hqNRqPRaLyRB0BZAN8T0ZFYBxZrAeI8gOVEVFcx&lt;br /&gt;
GwmgJhHdbmO/LYDPYxYhjUaj0WgufdoRUcy3so/1OhD7AWy0mG0E8LCD/Z0AMGnSJFSqVCmG0dKo&lt;br /&gt;
JCUlYfjwcDssayQZGcDLLwPduwNXXx2ZHzrN449O8/ij0zy+bNy4Ee3btweCdWmsibUA8RuAChaz&lt;br /&gt;
CgB2Odg/BwCVKlVC9ereZnp++y3QqBGQy2lPPk1YChQo4Dm9NcDGjcCiRUC5csD48ZH5odM8/ug0&lt;br /&gt;
jz86zbOMuAwBiPU6EMMB1BZC9BRCDBJCBMDL834QDc+3bweaNgX6W7fw0WhiiOz1M6/yrPk3MGkS&lt;br /&gt;
sCDc1mYxYPp0YPXq+If7b2b3buDrr7M6FtmbmAoQRLQSQHMATwLoAeA8gJ8ddvjzzdng5scHDvh3&lt;br /&gt;
e+ECkDMnMCcbb7cTCBiVVXbj44//vQWa3Tc5ezayfBgpmzcDl10GpKS42zt5Mj7x+bfw2GNAgwbe&lt;br /&gt;
7NauDfzyS3TCbdkSqFYtOn5Fi7//BubOzepYmElNBdLTo+NXgwbAw06d7RoA8dmNcxGAAIB7ACwF&lt;br /&gt;
b7jji2XLgNatzWalSwOVK0ceqXPnuC97mN2K/9mExESgZ8+sjoU9nTtHp0ALBDLvhx+IgDZtgFWr&lt;br /&gt;
Mu+XEMArrwCzZgH33guUKJF5P72yYAFw5gyfnYTMrVuBK67I3kJyPDlxIn75jYjLrVec9jPNJMeO&lt;br /&gt;
Ac88E16AjCX33gvcf3/8wvvxR2CJ2w4qAAoXBtq14+vVqzMnTBzOxNqoR48CzZpd+gJ8PASIDwF8&lt;br /&gt;
Q0QRK/66dAGmTjWb7d1rXGemlZ5dW/iSiSGTXaNPmzZtYh+IDfv3s5D07bfxCzMQAL74AujYMby9&lt;br /&gt;
v/6yf6bmmcGDgYceMlqaGRne4hGtNH/uOeB9h22jdgVHGi1dGpWgLmr27gV++aUNhgxxt9enD5A7&lt;br /&gt;
d+bDuxDc8Hz5cq7Qevc2P586FXjppcj9L1QIGD0aiPdY83ffNRpd+/aFt9+mTRscPcot+VOnMhd2&lt;br /&gt;
o0bA7SFz90L55hsWHKpVA/7v/yIPT3ZR1q4NvPACcOgQsGmTN7eff87x+OabyMO/GIipACGEeBRA&lt;br /&gt;
NQCZakd7reQDgfi3aDPDhQvmCmfGDKBhQ7OdBJcvdOAAcPfdwHffZS4eWSlAAPFtIcv8sXatUcjb&lt;br /&gt;
MWwYUKYMtySsuI2BeOEFb/GwS3MiHpzpBTXsH36wtyPzTmb+ie3bWVuXWT77jAvgrOL0aQBog7Vr&lt;br /&gt;
3e317w+kpWU+PDVvTZ4MvPWW+Xnr1rHRfqakAL//btyfPAl06+btnTZv5ny1cqWzndde8yf4tGnT&lt;br /&gt;
BuPH81iCzJRTfsYiJCYa6b94sXd3R44Y3eIqy5axkF61KlCxoje/5P8ZzQbqjh0siGanRm/MBAgh&lt;br /&gt;
RGkAI8DzUX0pkp5+OgnNmjVDs2bNcMstzbBuXTMAU8K6q1kTKFDAbLZjh32CZ4ePULmyOb4dOwLz&lt;br /&gt;
55vtuAkQHTsCP/8M3Hefs50WLbi7ITuSNy+fz5yJX5jqdz9+3Nme7OI4dszZjp0AMWoUMGYMkD8/&lt;br /&gt;
5z0/fPEFcNddwMKF/tw5EU6ASEsLX7Fcdx3QqVPm4hEIAE88weMHMssnn0Q2eDVnTj5Hq388HFnV&lt;br /&gt;
kKlUCbjtNuP+gw+AkSOBefPCu/3jDz6PGeNtoKiXMvS334AePULNx45l4dQLx46FjkX49lvurrCL&lt;br /&gt;
Q2KiYU7EWkK7hoCVokWBevWMe2vZq45xeuqp+Gv2OnRgQbRVK2D9emDKlCn/1JPySEpKimucYqmB&lt;br /&gt;
qAHgSgDJQoh0IUQ6eDnrF4UQaUI4FwMrVgzHhAmzMXv2bKxYMRvAbABtQMRqZWtmIAL+/JN/AFVN&lt;br /&gt;
duAAT7V7773QMOQP7qUw6tkTaNKEr48eZbebNgF79oR360ZKirnytItLYqKzey8twxkzeMAjwJm+&lt;br /&gt;
Xz9/cYwl8t0mTIi+319+yelpFRImK0uruBWAdhXOuXNcuEozp7zTtSu3eGfPDn22bp1zuDI/Rdr3&lt;br /&gt;
mp4OFClidKfI+DlpWkqWBEqVCu+vtd95+nRgzRrv8dq9m8+HD3PrdvPmUDvr1rEmyk0r9PvvhjDj&lt;br /&gt;
t4KWrfJIBIi0tNA4h6s83d4jK7DLq5MmmfOaFCbHjuUBhJ9+ynkkM6hLQKhxeOopoHFjd7cnTzoL&lt;br /&gt;
8P/9Lw+YtOsyTEgw8sdff/E4lG7dvMV3+XL7+FoZO9YYa2FHLDQQ0q/p0/md2rRpg9mzZ6NFi9lY&lt;br /&gt;
uJDry3ivuRFLAWI+gPcApIBnXxwHcAwsDdxEYZbAtGuVErFa+T//CX2mfniJLCx+/TX0mcxgXj7w&lt;br /&gt;
O+8A33/PdosUAdq3Z1VWJIsIEQEDBhjSvoqaYWX83DQQdsJF//5w7OcdOxbo29f+2c6dfADccvZa&lt;br /&gt;
0L7zjjd7dsRSCyRHh8tuEoDXb1DHPvgRINLTWWPStSu3aCJh3TqgShVW50vS040uHBkft28usRZu&lt;br /&gt;
b7zBa6EcPWqoxl9+mc9Ole2RI+YKZPt24ODB8GG1bAncdBNfp6W5j/tYtgwoW5avMzKAWrWACsGV&lt;br /&gt;
YaZONbo1qlQBHnjAfdCwfB+A4+1HiJCFfSSagZdf5jiPHGmYWTWFViLVQKSnR9YwEcK9wrPm9UCA&lt;br /&gt;
NUJPPGGYdehgttOxo/n/URk+3MgrRDzWYMOGUHtueTncmIgyZXisx4svhj7LEVzBaOlSY6ySTPNj&lt;br /&gt;
x4xrae/EiVA/Ro8GrrzSOfxwjUu38sNOgHjuOdYe+GXXLm642IV3+DDw6qtZN1gzZgIEEZ0GLxo1&lt;br /&gt;
GEAtAPXBszHuRoSrZMlMYZ0uR2SfUaWZXWUYSeUl3UwJ35viyLZtwJtvAta1Vfr0MUvbslB2+wFz&lt;br /&gt;
2CwD1qePUdA6zTSwUx1eey0fAGttcuXidMvI4ErJqZuhZ09/hSVRfDK7HAh3/rxhZtXYuOWBTz4x&lt;br /&gt;
36szfvxoCH76yUhvWeBu2WI8Hz6cK861a/1pxVTmzAHefjvUXArVRFwILVwIjBvHGjm7Sv+66zgP&lt;br /&gt;
HDzIlYdste3YYWgRrOTOzUKBHfPn8wA0ifU/bN2aZ8SoqKr2qVPNLf/ffjOuixfnVqhfIun++PNP&lt;br /&gt;
PqutWKtmq0MH9nvVKq4k1q0L9efgQW582I19IOJ3f/HF0IaJ14G5KhMnundPybwmtbnhBCKAW76S&lt;br /&gt;
7t2N67NnuavkySfN9qdN40OFyFD9q1qaFi04b6qkpvLZTkMpy7477zQLqBI1rwD2adGrl/2/zONl&lt;br /&gt;
oiNAqHz0UWh62JGRwceyZawlevBBbrio4cly7coreTptVhHrdSDuI6KJRLSRiNaCl7G+Aty9EcZt&lt;br /&gt;
qNkRh61B5s61r2hLl+azWsHt28cJHkkLwaubpUs5A6mDmSR2qs39+82LYV15pSEZb9niPNrZKkCo&lt;br /&gt;
abZwIfD00/burrvOfK9WrGr8cuXicSVFijhXEoC7tmLSJHOX05AhPLUwLc0slMycGfrNJ0zgdExK&lt;br /&gt;
4n7djAz+Bp9+6l1FrP7I1tVK1fD27GG7K1aYzYn4mVqRybC9VEb33MP90qNGGV1JgwaxEJWezqPa&lt;br /&gt;
AXOePHIkfF7z29qsVg2oX59nNL34YqgWRb7fmTOsVfr0U3OL227wmBxwJitYK1u3OsdLXlv/afW7&lt;br /&gt;
tm7tPlV71ix780CABSrZ6vQzY8uu5ehllVs5W6pmTa4k7FTmxYvz6Hy7QYhz5vC0yFGjjHeQvPaa&lt;br /&gt;
e9jbtoWadejAwp21UgZ4eqNMZznw3Dp4246WLe3NZVytArpda3vCBKBOHb4+dAj/DGqdMYPzJsDC&lt;br /&gt;
l1v+/u9/eeyXhIgPtRyS2g31Pa3IMKzl6y23mJ9nBiL+p6QwZMeIEWbNcMmS3IirXZu1RFKgUfnp&lt;br /&gt;
J+dZYvEkHtM4VTqCtRBhh7RUqxY6or2Gg9hx8KD7KF2Zedav5z7fq67yVkDLDC3xOg1JFgLqYCY3&lt;br /&gt;
rP2Mhw+bVW5O/qhdGK1bm9chWLbMfZCgJCPDGMwIhI5ClotFbdjAdu0GBjoJEOfP8w+gDuKUI7HT&lt;br /&gt;
0riwlTRvbu5q2r0bePxxvh4xgoWxI0f4x+nYkVV6kjVruLBatswwk983LY1/4hkzgK++MsdPrazk&lt;br /&gt;
e373ndk8EDBrMQCj8PJawKSlAc8+a4y/yMhgTdGYMYZwlZpqVFpduvBgqbNn7UeFr1vHfcheCQRC&lt;br /&gt;
+5JV1fTrrxvdCoB9xSyFPbXCDzd2xW06pPp9Bg0yzHfu5DEc8r3dhNOVKw1t4O2383RagLsH33jD&lt;br /&gt;
EMplQ8KOv/9mjZ21S1OteGV3lh+8lhXbtrEwaRWkzp0DHn0USE4OnZljFYLKl3f2X2q/pIC6ciWX&lt;br /&gt;
rZ8HtywMBFgj6ka4slL+LzJev//uLKipwhzAMxvy5TObVaniHl6vXqFmPXua84qMs9RKqPGxCjql&lt;br /&gt;
SpndbtjA38/r/33mjNnP3buNcUhEPFOucGFn90lJPDZt0SIuDw4dMmv81AGhKtZByVkxcDduAkRw&lt;br /&gt;
0OQIAIuJyKa3zMzhw6Hz262ZT8VtLQGZ8Gprxq5PLBDg1qYslKzSe6FCoW7spECnFsu6dZGp7+V8&lt;br /&gt;
fiuqADF1qlmV9dprZlW5FVmATJpkNndTz/fowZKxdfU5JxVro0Z8/vpro4CU3yI9PTTDyznWFy4A&lt;br /&gt;
11wT6t+SJUYl3KsX/+CBAPfHT5vGEvvWrTzVSfpdqxa3uFu04EpbRRUUpLB19qy5MLlwwXkgqxwz&lt;br /&gt;
EgnWSqNVK7Og8v33rMouUiQ0zuEKWCt22hrVbOBA8zO30fHqGAX1+x04YI5/376sVVJRC0DpdsMG&lt;br /&gt;
7sOVnDnDI+HVVjqRIZRbkVNYlyxhwadkSUPIdcqXkyYZY5BefZW1YtY0UAfA2mk3Dx3iPnQn7AQ/&lt;br /&gt;
O8qX59a/tbI6c4YHAj/7rPnZ9u2RDdB86inWOknBcX1wOb9AIPw06nCzcGQ6BwLcbXbbbc7CpV23&lt;br /&gt;
q9e0cuPddw0NH2CkkfRb5rd587jBtG2bOf9aZz5dfrnz+A9rhV6smFlDe801/O0kasMG4LJGxksd&lt;br /&gt;
jHzXXbw1gxVZV1nLS6vmJEsG7hJRXA4AowBsB1DCxU51AASsIkMx5f+QyPvGjYlWr7a3W6cOUSBA&lt;br /&gt;
9PXXfF+qlPn5uXPuYfXuTSHYxWXnTr6/+urMvZPKI4/4c6/eV6kSahbuqFbN3vzgQaJTp4hefpno&lt;br /&gt;
/Hn7dGjSxGx24IC9X3PmECUlRf7t5dG8uXGdJ4+9nZ077eN6/LhxvXw50Y4dkcWhbVvnZ489RtSr&lt;br /&gt;
l9lMzXs1ath/+337wofbtKn5nZ55JtROs2aR5cHHHzfuGzY0P8+Z0z49ndLe7fkDDxjXa9c623vi&lt;br /&gt;
CaLffrN/1qULUXKy+/t06mTcT50a+vzCBS4/rG4TEvg8cybbsT6/5hp/aTthgr25Ne8uXRq+THJL&lt;br /&gt;
05kzzWY330xUtaq7OyGIhg1zfr54MZ9vvJHoxx+d7T31lLc8Fsm7hTsaNGC/33iD7+fMISpY0Hju&lt;br /&gt;
Fm/rkZFhfOPBgw3z2rWJdu822x0/3tmfQoW4zIzWO773HtGqVauI61BUJ4pDvR6XQHjzrF0Arglj&lt;br /&gt;
LyhA3ElAU8sx2XNCWgsxa0FnPapUMReMfo/Ro4k+/5wLIGvFSES0Zk3mM4cdrVv7c6/eX3UVUYkS&lt;br /&gt;
mY8XQDRvnlHATJvGYX38sdnOTTcRnT5t3P/1V3TCdjrq1zeur7jC3k5KCsc7Pd1sfuSIcf3770Rb&lt;br /&gt;
tkQ/fm3ahAoQRYu6f3trmrodavq6CTKxOFThx+kYMcK7fytWOD9r0IDonXcii6cqKNod5855E7Qm&lt;br /&gt;
TQo1szZEwh1OAoT1WLbM/B/5Pbp0Md/fdBOXf9H47pUqES1YkDk/zpyJTlysR/36/A9VqmSYFShg&lt;br /&gt;
XM+f792vU6ecn730kvl+3LjYvA8fk8laT9555510SQkQQeFhN4ByHuxGRQNx+DDRyZPG/T33xPIj&lt;br /&gt;
uh8nTxLdemvm/UlMJBo0iOiGG4jKlyeaMcOfAPH55/F53ylTiNq1CzW/8UZzgb1tW2zjoaZ5kSLe&lt;br /&gt;
7QJcqMrr224zWpvRPFq1ImrRwptdSeHC8fmG8Thy5sz6OMybFx1/Ro+OX5zvuiu6/lWpQvSf/0TH&lt;br /&gt;
rwoVMu9HgwaxSbd69Yg2bDCbqQ2LIUNiE64qpMTj+PLLS0gDAeAjAGcA7ANwFsAqAI0B5ImlAAEQ&lt;br /&gt;
FStmXN99d3w/onpcdVXWhZ0Vx1tv2ZsXLBi7n/RiPPx2ZRERXXll1sf7UjoWLoyOP//7X9a/S6RH&lt;br /&gt;
yZLRqfgBomuvzfr38XNcfnnWxyHaR+nS8RUgRLDijglCiAAAEXwhCl4LAM8R0Uc29quzkLEqKEto&lt;br /&gt;
NBqAB/vJKZ+a6HDHHf72SnCiXr3oLT+u0WSGXLmSkZZWAwBqEFFyrMOL9SyM5QDeI6IEIkoEkAhg&lt;br /&gt;
L4D8MQ5Xo7mk0MJD9ImG8ABo4UGTfYjGRnB+iOVmWjnBC0b9JM2I1R3zAdSJVbgajUaj0WhiTyw1&lt;br /&gt;
EEXBGgfrQpt/A7gqhuFqNBqNRqOJMTbLemQHkgBY9uVGm+Ch0Wg0Gs2/nSnBQ8XD8sNRJJYCxGEA&lt;br /&gt;
FwAUt5gXB3Ag1LrKcOhBlBqNRqPROGHXqE6Gh62mokZMujCEEGXAK09eAPCVEGKLEKJvcFxEAwBL&lt;br /&gt;
YhGuRqPRaDSa+BCrMRAVwdM1BwHIAPANgOcArACQD8CnMQo36vTrl9Ux0Gg0Go0m+xGTLgwi+h7A&lt;br /&gt;
9wAghDgA4BUABcHTN+sS0aFYhBsLrJsZZRVjxvjbgVGj0Wg0mlgS8904iegjIioL4F0Aa4loZazD&lt;br /&gt;
jCZ2u8fFm9y5eYvn+fNj4/9ll7k/f+453nZXE1+s29lrNBr/TJhg3jJeEz3isp23EKI8gOcBuGyA&lt;br /&gt;
Gzus26n6wWkrZzfCbX/rl1On+BztRUN//53P4fa9f/99YMEC5+dEzluYA+5brf9badky1GzIEPN9&lt;br /&gt;
vnzxiUussL7PxUSDBpG5a9w4vJ0OHSLz+2Igd+6sjkEojz0GvPwyUKFCVsfk0sOXACGEGCiECLgc&lt;br /&gt;
F4QQN1jclALwHYAvieiTaEbeK1deGbnbcJWrHU8/HXl4dkgtSJUq0fOzbl2gdm2+vvded7tCcFeO&lt;br /&gt;
FGBqKIN8X3qJz3YroFWuzOeyZYFatSKL53HLrKQNG7y7rV8/sjDt2Lgxen7ZccMNRlpKMrOqXGpq&lt;br /&gt;
ZO6uvdb52SefhF91sUkT4/qll4CGDSOLhxfeeit2fs+fD/Tv799d4cLh7QQCoWbFivkPKxpEW0jt&lt;br /&gt;
3Dlz7gMBoEcP/+5uvhkoVcrdzvXXG9c33OBsD+C8Hk28arLvvtu4vvXW6MYhFvjVQAwBD5B0OioB&lt;br /&gt;
2C4tCyFKAlgAYDERdfUeTBKAZpbDOt/Vmc8+M98n2LxluXJ8/vJL4K67zM86dnR3a6VOHc7AknCa&lt;br /&gt;
gjJlwvtpR3HrhFgfWH/Kvn35fOAAMGmSYV7DMgOoUSPz/R9/AD/9ZNzLVub06aFhyh+ACPjxRyAl&lt;br /&gt;
Bdi61V+8r7jCfF+pkjd3s2ax1iTZw2rwXgrvSDRRmeGXX8wCxMcfA5Mne3dfsGBk4Vas6PzsiSdC&lt;br /&gt;
84cVWTk++SSfS5eOLB5eaNfO/N9JvvrK3d2NN3rzv1cvb40PKVT17s37a4RDCO4WVPFaweTKBbRo&lt;br /&gt;
4c2uF+z+23DkyeP8LNKGgkQIo+Hx11/cgPDiZ6lS4YX8Cxe8xWHvXq4DunSx1xSqyLrm3XfdB9yn&lt;br /&gt;
p4eavfdeqFmzZsa103c2BKEpCK0nk9wjHG1iuBNnKQCbAEwCeNMuD27C7sbptDX2pEl8TkggCgTM&lt;br /&gt;
z/76i8/lyhlmmzYRPfkk7+2ucvKkeU/68eNDwxo2zLhes4bo2DH2T5r9+SdR06Z8/fLLfK5cmWjH&lt;br /&gt;
Dr4eOtTfDmsqvXvzlt5+d2nbv998v2CB2V9pXq+e2V7jxmTLsmVEM2eazZo0Mbvt3NlII8nevfbx&lt;br /&gt;
s25T3KYNb5Osxk2mhbzOk8dbmkmzs2fNdmrW5POzz4ZPv61b/ae5W75dtMh8X6GCOa5ERF278vUf&lt;br /&gt;
f9i/j9ORkOBs7/Rpd7fNmhm7FJYubd6a3Uv4cjvmAwfY7vHjRLVrR5ZmH33k/nzXLt4+3mo+Ywaf&lt;br /&gt;
u3Thbz5unPn5nj3hw5Zs3+5ub/x487e5cMHd/hVXEP39N9GLL5rNr7/efF+8uHO8Rowwm3Xr5i09&lt;br /&gt;
p00LNZs717guXdre3ezZ5vvcuZ3DsJa9fg8i9mPfPiNNvfyfzZqx3fbtnb/lqFGGmbUMlfloxAjz&lt;br /&gt;
99y2LXx8jx/nOKv+A+Zt3u3+GyLjf0xIIBo+3Fw+nj9vtv/YY7zbcdu2fL94sV2cLoHtvAGUBLAF&lt;br /&gt;
wA8AygBYByAAoF4YdyYBwu4nuv12TmzVbMsW4wPZFZ779xPt3Gl86P37KSwyM0yYEBqHkSNDMycR&lt;br /&gt;
0blzLMgQET3wAD/fu5cFiiNH2PzChfA/mRD2P4CK+vyGG4h+/pkLypIlQ/27+26igwfNZgsX2vtn&lt;br /&gt;
3fq8SZPwaSU5eNCcXlKAWL3abEc+79TJuN63jyhnTuNaZc0a+x9RFmSdO3MBULUqUXIy0ZIl9u9m&lt;br /&gt;
TbdHHmEBMiPDMLv11tAKZt06Q/jzczRqZHxPiRQK/vyTqEwZY4vu114LjesTT/D1+vXO39569OrF&lt;br /&gt;
FRQRUaFCoc+J3Cuc++7jrdcBoqVLQ+Ok3qv59Pbb+bvVrcv3J04Y9rt3d49zmTL25kRmod967NnD&lt;br /&gt;
dtLSzOZff82F74ULRhzuucc5HziF7SW97XCz/8EHbEcKEHPncqVgFVBbtHAOT/0fpNk33xB9+qlz&lt;br /&gt;
uDly2MdSeudJAAAgAElEQVRtzhzj2kmAsLrLlcve3rJlbNdue/OmTYmuuspfuku8CBDNmzunvyQQ&lt;br /&gt;
4DoA4DKzeXPDjpMAceCA9/ha35uI/wsp3Ejzxx/nrc/V+ObKxdcyfkCoMCo5dIjo3XfNZdKKFSyA&lt;br /&gt;
DBhwaQgQj4MXkboQFBzkS10I484kQPTsSVSlijkR69Y1Ci5ZKBw7ZnwIOwHi4EHyzZkzRK+8wkKB&lt;br /&gt;
NdOoZk40buwetlumtAoY4dxff71hXqKEYb52LZ/r12cBRnXzyy/2/skWpDzuvddfuhERDRhANGQI&lt;br /&gt;
V2YAUUqK8UyVqqWAId/xrbeIEhPd35eI6NVXiaZONQSIcDgVhKmpoXYyMkLtBQLc2g1XiAFEgwcT&lt;br /&gt;
5cvH1/Pn8/n1141wnn6azf74g8NKTyc6fNio7NS4ypa0Gk9r3NwKtDp1nJ9/9RXfS6FN/jvJyYbG&lt;br /&gt;
wC791HupqQBYWCIyNC3p6Yb9iRPZ7Lrr7ONs1Qyp4Z04wQKR3XMplKenm81nzQrNA24CxI8/uqej&lt;br /&gt;
1/T2Yv/DD9mOFCBUYVe1JwUIq2BhZ9dL2A8+aH7esyefv/vOMCtVyvkdU1NZQLTmGfVYscKIhyqY&lt;br /&gt;
yPDthCKr0GLHM88Yz1u1MtsfO9ZIL6c0UJHa5QoVzALX5Ml8tgoQfr7/mDHu7yLjvnlzqP85cxr3&lt;br /&gt;
hQsb7j/4gK/VMkRl0iRzWb5qVXwFiJjMwiCiz4i3734AwEbw2AgCYNNj6czTT4f2ySYk8OexmrkR&lt;br /&gt;
yVTMvHm5X0uOKn7wQe4bO3iQzXLmdHffsyf31xct6j9svwM31ZHPcnAQEVCypGFu7cO3pqscX2EN&lt;br /&gt;
O5JBpL168QC6N9/k/mh19HOuXEY/n3WA3RtvABkZ4f1/5x3um7TmAydmzuSxG1bsxglY02n7dk4D&lt;br /&gt;
r2MgrrkG+PNPYN48Y2yFHG8DAFdfzed8+djPHDl4gKpdHm7enN8x0vEMkl9+CTW7804+DxkC7NzJ&lt;br /&gt;
sw5OneIxBXPmAL/9Ft5fNW+UL8/niRP5+6v/XLt2wL59xviX//4X+OEH43mePDwWRzJ5svG9Lr/c&lt;br /&gt;
eYxK3rx8TkxkezVrhsZLIvPKddeZzSdONNLCL48+6t+NHOjn9b+K1tibzz/n84MP8rlECT7L/GjF&lt;br /&gt;
Opi2YEHDDRHPzHIrK+67zzx+Sggea7Vjh9lN377AypU86PfIEfu4qGMXZPkwYgRPz5SzXryMVQPM&lt;br /&gt;
6dm6dehzu+8i8zYAbNrE7waETm1X3Xbv7hwHu7iqZZk6EPe55/jZ22/b+9WuXeT5NyrESjIB73mx&lt;br /&gt;
Gyw0lAFrIqqGcfOPBqJ/f5aopNQ6ZAifFywwJDzZWj550pDk7DQQqjo1ElJTueWskiOHs8TsBRm3&lt;br /&gt;
O+5gSXj5crPkGk4ql60BgOi33wzzo0eNVs2xY/y8Xj1DNdaggb1/R4+ySvj//o/ttW7N5/vvj/wd&lt;br /&gt;
veD2juHsSVVqJOFZ3fXrR/Trr87hWceQOB3Tppn9TU5mDYYkPZ3ohx/8vafbO7i1iKQ24NgxbqVY&lt;br /&gt;
u3b27DHHzYn167lFaQ3/ppv4vGQJaxH8Yo2z27tb37N69dC49+/Pz775JtS9LCt27w4NS+3CsouD&lt;br /&gt;
XTp37Bj+vazH778bcQ6ngXj4YSO+0mzMGHu7dmGr13PnGs/T0rg8zMgw8ru0p3Z/3nGHs/+yO+SL&lt;br /&gt;
L8zxUDUQRKwJUt9HonZpffqpczpK1K7OqVP5fOYMP9u50yivJMePsybQLv5SW1WpEt8PGsRdJJ9/&lt;br /&gt;
zuYjR4aGL8enhOPjj9ne2LH2z2WZun272Rwwa15nzeIxc5EQbw1E7DwG5gLoGbwu40eAmD591T+q&lt;br /&gt;
ZKlqPX3anOB+BAjVbbSIlgAhB5upZuq1Wxjhnp88yc/vustQEw8e7B6vc+dYmJH9ymrhEwu8ChDz&lt;br /&gt;
54cOWJOq1EjC81pJS5zU6Nbjq6/8xSdcuOHewa3iq1WLzawDhTOLDCslhSuRSLn/frOA6keAsGPf&lt;br /&gt;
PhaW7RoMsgtD/m9Wfw4dMszatnUPG+D/wwkv38ZJgLj8cu56lF2gR4/yGByr0Gnt/pN07070/fd8&lt;br /&gt;
vWqVITC54VeAkJVdcjLfV67M5+XLQ/2WA9jVLoZ33jH8tv7TdsixQHbfXTaSPvnE+b1UZPfwjTea&lt;br /&gt;
zT/5hM3lwG0VrwLEsWM83sHa5SiRAsSOHaHxlPVWZom3AOFLuS+EGAjgVTeFBri7ogl42ep3pVM/&lt;br /&gt;
4Vx7raFqevhhzgYqdesCv/5qqILU59Ls++9ZfT5mTGym4NWuDSxenHl/nKZm9u1rTLV0YupUoIB1&lt;br /&gt;
13MF+d5ErCY+ejS8Ojx3bmPalDXdY4WXaa12C/tcdx1PDY0HXvOQV1VqZsif31hcDAAGD+aFcqxI&lt;br /&gt;
1W+0V1PNmZOnpVWokLnFeSJZYOzjj53zS4kSwM8/u7uX3yclxdz1p3Y1SnW/G+G6MFUuuww4fdps&lt;br /&gt;
duedwMiR5mmup06xv7lycfdprlz8fxcqBPznP2b3Y8dyF+GuXWbzoUON6+o+NjS++Wbg77+Ne6mO&lt;br /&gt;
f/zxULuyXLj5ZuDYMe56XLfOvryQ/41aTqmqfi9ljNv0ywIFgDNnjO6scDh1Hcn42a0l4bW7qUAB&lt;br /&gt;
nj4ejniVq/HAb9EyBMD4MHZ2AKgPoA6A88Kc+iuFEJ8TUUdbl0GSkpJQwFIztmnTBm3a8Nalc+cC&lt;br /&gt;
hw9z5vz4Yy5QJTLDNmrElU7PnrFZHW3uXGD//sjdr17NYyqc6NMnvAARbo6ytTIrVMhT1OLKli3e&lt;br /&gt;
Ft+xY+FCYPPmqEbnH/bsMRccdmMzhg8HkizTrjMrQJQsySvnuXHsGFfc27bxfY8e7gKEn8rOC8uX&lt;br /&gt;
83eLNgULuq9oChjrS0SK/D5Ogk/PnuH96NPHX5h2eefhh1lgUJeRV69vugmYPdvd32uu4SOznDvH&lt;br /&gt;
5abql6zk/ve/UPvqQnkFChj/iV3FWLIkMG6cuayyjpUIR//+PFbFCSfhoUMH/o/tsC7f37w5j1uy&lt;br /&gt;
rnsDAFddFZ1ypk0bXnfIurYNEJlQMWXKFEyZYl4f6bh15b1YEwu1BoDSAG5UjnvAMzIeAlDSxV11&lt;br /&gt;
ALRq1aqI1DcAj4C/WLGq3OrWNfrqIkFOA7JT7/1b8dqFYUXtJ1+xwujzt6qpFy+OfpztOHzY/B52&lt;br /&gt;
7yRnMF0snD/v3DUA8LTuSJFdGHLmhh9k2k6axOu9eLU/bx6P2VqyhOjNN/2HG2/kDK7nniN64QW+&lt;br /&gt;
VmfTOCFnSaxc6S2cQYPYvnW8kBvbtplnc2WG0aO5a8Urf//NM6Kigd2YI4DHK0WDbN2F4UMo2QMA&lt;br /&gt;
Qoj7AbwJ4CbwqpfPE9E9sQhTEg8Vcqx45BGzSnPRosz5Zzdj5d9O4cLcleNXG5OYCFSrxjMsatQI&lt;br /&gt;
VWuuX88apdtvj15c3ShSBHjgAaNld/XVwO7dZju1agFr18YnPtHATfuwfXvkmirA+F6RlA9ffgmc&lt;br /&gt;
Pcsj3v2g7otRp47/cOONLCs++IBXQX32WW/dX3KVRa+aLrlcc7Vq3uOmzmTKLF19rIkM8Cyg5s2j&lt;br /&gt;
E7Zdd0hKijHD5WIjZntNCiFaABgD4DUAKQAWggdWxpSLWYCYNi2rY3Dpc+QI95lGMj1VYuf2xhu9&lt;br /&gt;
L5EcLb75xrhesSK0S+yjj7yp5C8G3Pbo8EMk5UOrVv7sf/MNcP68/3CymubNgVGj+DpXLu/jW2R3&lt;br /&gt;
gNdxCDVq6IaNysW8yVdMBAghRCKAEQBeIqJPg8Yx302gUyfuZ9Jo3Ih0A6EePYD27aMbl2hRvHjo&lt;br /&gt;
gNzcuc1z2DWZExy98sADsQ8jFrz/Pg/e9MuAAbzRn7pZlebfQaza69XBy1lDCJEshNgnhJgrhPhP&lt;br /&gt;
GHeZYty4yLfh1WjC0a5daMupTZv4VErRYNeuXUhISMCECRP+Mevbty8SslhtV7ZsWTyZ2dGRmkwj&lt;br /&gt;
F+TyS/783HjT/PuIVclRDjx1sw+A/gDuB5AKYKEQIpPr6mk02YfJk+23Z75YEEJkuQCRkJAAEaEU&lt;br /&gt;
NmrUKLRq1QplypRBQkKCFkQ0mjgSq3UgZIk0gIhmBt12BLAHQEsAY93CCTeNU6PRRIc333wTPbN4&lt;br /&gt;
oMSmTZsiFmIGDRqEU6dO4ZZbbsEBdT1sC9dfz1vKx3tbdo0mVmSHaZyxWAdiO4LdF+B9MAAARJQm&lt;br /&gt;
hNgOIOzM5eHDh6O6n1VQNJpLjDNnziBfpIM1fJCQkIBc4RZfiDE5M7FQxaJFi3B1cEOHy13070OH&lt;br /&gt;
chdUHJJUo4kLdo3q5ORk1KhRI25x8CX2E9ERItoc5sgAsApAGoAPhBCHhBDHhRCLAdwAYJdrIJq4&lt;br /&gt;
Y5ViNbFHTXM5DmHjxo1o27YtChcujLp16wIAUlJS8Mgjj6BIkSLImzcvatWqhW/U6RcAUlNT0aNH&lt;br /&gt;
D1StWhWXX345ChQogPvuuw9r1qwJGw/rGIiOHTsiISHB9ujfvz8AID09Hb1790bNmjVRsGBB5M+f&lt;br /&gt;
H3feeScWLlwY4j8RYeTIkahatSry5s2LYsWK4d5770VycvI/dqxjIPy8z9VOu0FZyJMH2LVL5/N4&lt;br /&gt;
o8uWS5tY7cZ5EsBZABUB9ATwMIBCAAoCCLPYrCbe6J88/qhpLvv/W7ZsiXPnzmHgwIHo0qULNmzY&lt;br /&gt;
gDp16mDTpk3o2bMnhg0bhvz58+Ohhx7CLGXN3O3bt2P27Nlo2rQphg8fjldeeQXr1q1DvXr1XNX6&lt;br /&gt;
Mmx1/MHTTz+NSZMmmY527dpBCIHiwWkeJ06cwCeffIL69etj0KBB6NevHw4fPowmTZqEVPJPPvkk&lt;br /&gt;
kpKSUKZMGQwaNAg9e/ZE3rx5sXTp0pD3j8b7uKHzefzRaX6JE4vVqQAUAW+e9TmA/QCOAZgfNLvb&lt;br /&gt;
xV2mVqLUREbTpk2zOgr/OtQ079u3LwkhqH379iY7DRo0oGrVqlG6ZTnA22+/nSpUqPDPfZrN8o27&lt;br /&gt;
du2iPHny0IABA/4x27lzJwkh6LPPPjOFneCyk8/WrVupYMGC1KRJEwoEl9ELBAIhcTp+/DhdddVV&lt;br /&gt;
1Llz53/MFixYQEIISkpKcvSfiKhs2bLUUdne0uv7WMmfP7/JHys6n8cfnebxJd4rUcZKA3EEvHjU&lt;br /&gt;
KQDXASgK4HsAf4O7NzQajYIQAl2VJfJSU1Px888/o2XLljh+/DiOHDnyz9GoUSNs2bIF+4Obsahj&lt;br /&gt;
CAKBAI4ePYp8+fKhQoUKpq4Cv5w5cwYPPfQQihQpgsmTJ/+jKRBCIEdwiUIiQmpqKtLS0lCzZk1T&lt;br /&gt;
eF999RUSEhLQu3dvX+HG6n00Gk10idlKlAAaApgJ4CRY8/A3gCZEFOfdPjSai4NrleUWt27dCiLC&lt;br /&gt;
m2++iTfeeCPErhACBw8eRIkSJUBEGDFiBEaNGoUdO3bgQnAXLSEEiqrbTPqkc+fO2LFjB37//XcU&lt;br /&gt;
sqz9/dlnn2HYsGFISUlBulzLGEA5Zc3h7du3o2TJkigYbgtYC7F6H41GE11iMo2TiDYD+AgsNNwO&lt;br /&gt;
4ByAzgC+FULUJKK/HdznAYCNGzc6PNbEguPHj+uWXZxR01xqEjZv3oy/g3sqb9iwAQDw2GOPoXbt&lt;br /&gt;
2rZ+nDp1CsnJyRg3bhxGjx6Nhx56CE8++SQKFCgAIQSGDBliG87OnTtDzKzff/Lkyfjyyy8xYMAA&lt;br /&gt;
pKenm57PnTsXvXv3xt13342WLVuicOHCSEhIwPjx47F3795/7J44cQJpaWlh81ZaWhqOHDnyjz2v&lt;br /&gt;
72MlEAiY/LGi83n80WkeX5S6M088whPkY1FyIUQR8PgGN7YDuAvAPAAFiei04n4zgHFENMjB/7bg&lt;br /&gt;
cRMajUaj0Wgiox0RTY51IL40EMGxDUfC2RNC5AVrI6xr9AXgPvPjewDtAOwEay00mn8DTwHoAqAB&lt;br /&gt;
gBOK+WgA1wNohdD/riB4cDIATAKPN3paeX4PgHcArFTMrwLwLXiF2DmWsGsF74sAmAxuCDwL/o+t&lt;br /&gt;
DAJPyX5IMasMXiNmP4BmQbMaAP4HYAqAoTb+SL4JxrOfz/ex8it4sHY/h+cazaVOHgBlwXVpzInV&lt;br /&gt;
GIjfwYXbBCHEW+ApnU+BX2yOk6OggBJzqUmjyU4IIfYHL9cQ0VHF/HFwpTgZvHrrdgDFAdQBUIqI&lt;br /&gt;
bg7amwrgTQDPA1gCoApYEN8G4BQRJQftlQl6vUsx2w8Ayv00AAWCYVa0RHUNEa0VQkwC8AmA3uD/&lt;br /&gt;
uRyArgDWA8gv/QKQLIS4A0B7sMAzD9yAqAtgARF9FAwzDcARJQ6e3ido9wEAN4GXzk8EUBrAvcHH&lt;br /&gt;
s4honVvaazSXIEviFVBMBAgiOiKEaALgbQA/AcgJLlyaEdHaWISp0VxqENFGIURNsMbgcbB24CCA&lt;br /&gt;
P2BuZf8XQD4AbcHailUA7gO32K0aBDuNgmpWFFwRD7Ox1w/AWiL6VAhRHCw0NAKwAVzBtwJwp8XN&lt;br /&gt;
EwBWA+gE1lwcB2sR3Ao5P+/TAkAH5b5a8ACA3QC0AKHRxAhfYyA0Go0m2ggh/gIwj4ieyuq4aDQa&lt;br /&gt;
78R8Gz4hREkhxEQhxGEhxBkhxGohhN7oQqPRQAiRA6xZOZzVcdFoNP6I5ToQCG7d/Ru4G6MxuJC4&lt;br /&gt;
Hry1t0aj+RcjhGgEoA144NdPWRwdjUbjk1hrIF4D8BcRdSaiVUS0i4jmE9EOq0UhxHNCiB1CiLNC&lt;br /&gt;
iKVCiFo2/mlsEELUFULMFkLsFUIEhBDNbOz0F0LsC2qBfhRClLc8zy2E+DCoKTophJguhChmsVNI&lt;br /&gt;
CPF5cHO0VCHEOCHEZbF+v+yGEKKnEGK5EOKEEOJvIcTXQogbbOzpNHfnNQB3A3idiFwFCCHE00Ht&lt;br /&gt;
5fHgsSQ4zkq1o9M7hgghXguWL8Ms5jrdo4QQok8wjdVjg8VO9knvWK6TDR44ORTAVPCiUskAOtvY&lt;br /&gt;
aw2ettkBPPL7fwCOAigaj/W8L/YDQBMA/QE8COACeLCq+vzVYHo+AJ5uNxM8oj2XYmcUePrsXQBu&lt;br /&gt;
Bg9y+9Xiz3fBb1gTwG0ANgOYlNXvnwXpPRfAYwAqgWcIfBtMu7w6zWOW5vcH8/l1AMoDGADgPHjh&lt;br /&gt;
Op3esU//WuBZQH8AGKaY63SPbjr3AbAGwJUAigWPwtk1vWOdGGcBnAHwFniqVZfg/WMWe0sBjFTu&lt;br /&gt;
BYA9AF7J6g96sR3gtTasAsQ+AEnK/RXBb9NKuT8PoLlip0LQr1uC95WC9zcrdhoDyABwVVa/dxan&lt;br /&gt;
edFg2tyh0zyu6X4EQEed3jFP5/wANoG1RT/DLEDodI9uWvcBkOzyPFuld0zHQIC7SJYT0ZvB+9VC&lt;br /&gt;
iMrghWAmAoAQIid4wZn/Cl7psjFYekoG0EQIMT/GcbwUKacMVC0JXkBon2Xw6noADwohtoJbFzkA&lt;br /&gt;
HLbYOQCgpRAiA7w40AkAQrFzBDytro0Q4pfYvU62pzQ4HYoH00aneWwR4L12LgNwTPBaEDq9Y0c/&lt;br /&gt;
AMvAa/vkB1BM5/OYUQJABSHEQbAgsAbAB2ANvpf0vg2c3n/Ih0S0SfBMpzoAlgOoDSCViP5Q/JgP&lt;br /&gt;
Tu9bAczyHNsYS1M7AYyxmD0NYLdyXwIsDd0KnvdN+tCHPvShD33oI+KjraXeXQZgYPC6J4CNNvX1&lt;br /&gt;
3wC6ZicNxG9g9YlKBQC7HOzvBIBJkyahUqVKMYyWRiUpKQnDhw8PMV+7FnjiCaBtW+Cll+Ifr4uF&lt;br /&gt;
tDSgQwdgwACgfPnw9gHnNNfEDp3m8ScWaf7330CRIkCOWNdeFyEbN25E+/btgWBdGmti/QmGA/hN&lt;br /&gt;
CNETQCEAPcD9LOrKcYfBA/+Kg8c9oFKlSqheXS8VES8KFChgm95paXwuXhzQn8OZjRuBLVuAuXOB&lt;br /&gt;
Tz/15qZAgQIoU6Y6cucG8uePafQ0QZzyuSZ2xCLNhQCeegr43/+i6u2lRqLlvji42wjBs3VWRiKA&lt;br /&gt;
woodT8R0GicRrQTQHMCTYOHhPICfiegLxU46eKnaBrGMi8Y/rNXShCMh+Bf5Ta+iRYEbb4x+fDSa&lt;br /&gt;
S52ffzauU1OBCxeyLi6ZZd064Nix8PZ8cou8EEJUAHANeI8qBM8FhRA3K/YbgMcWLfMTSMxXogSw&lt;br /&gt;
CDzG4R7wbIv1NnaGgWdo3B+H+MQcIYAePbI6FppIWb8eaNECCFj3knVACD57ta+ye7d/N5rICASA&lt;br /&gt;
PXtiH056emR5QeOd9HTjunBh4JVXsi4umaVKFaCBTfM5IwP48ceIve0uhKgnhKgB3vjuNyJaDgBE&lt;br /&gt;
lALerXOsEKKWEOJ2AO8DmEJE2UcDEeRDAN8Q0QInC0Q0FayheMb67MQJYMeOGMYuRgx127z4IkNW&lt;br /&gt;
kNmFGTOAWHZl9+jBYRw/7s2+TB+tsck8aWnA1q2Ruz940PnZmjXA1VdH7rdXcuUC7rRuKRaG8+eB&lt;br /&gt;
u+7K3Lv/m8jIMN/Pm8fC4blzWROfzJKcHGo2ZAjQqBGQkuLsrnFjgIc8hPArgOkAFoKnfrawPG8L&lt;br /&gt;
IAU8++JbcEO/q994x1SAEEI8Ct4Zr2c4u8Rb+z4AcN/WmTNsXr8+UK6cYW/dJb633t69nGnk+8eD&lt;br /&gt;
Nm3a2JrLCjGrKsbly4HcuYFTp/i+SROgWzegVSuge/fYhLl/PxdGfvAqQLz8MvDdd3ztlObxpEMH&lt;br /&gt;
4LHHsjoWZv7v/4Drr/dmd/VqTvt9+/h+3ToerzNnjr39c+e8p3kgkDm1+G+/Ab//Ht6eJCUFWLQo&lt;br /&gt;
Ng0Poqz7h2OVz1UNhOTqqx0r02yPXSNNastOn3Z298MPwOef2z4aRERFiehyImpJRCbRmoiOEVF7&lt;br /&gt;
IipARIWIqAsR+a51YiZACCFKAxgBoF1wnINnxoxJQs2azdCsWTMkJzcD0AxTpkzBL7+wuuebbyKP&lt;br /&gt;
V79+XHBmVz78kNVWS5fGL8xIfvI9e4AFjjole7ZuBRYv9m5/zBhukUoN1PffAyNHOhfsqanAn3/6&lt;br /&gt;
i5OVjh39u5E/v7VVZGXIEOC++/g6WgVrr16cZyJh4kRg0iT/7g4eBDZsCG8vEpb56IGV5cCqVXyW&lt;br /&gt;
+WT1anv7+fN7T/OHH/Y/yj85GTh61Lj3qk3o1g2oVs3dzooVhhBw4QLw8cfeu0kSEng2VSyYMYP/&lt;br /&gt;
SSfUfN6nD1DBOidPIRBgAd4Na6PGmgYLF7q7dyMjA+jUyRBI7QgEeBaIE+vWhX8HvzhpgKdMmQJe&lt;br /&gt;
QoPrymbNmiEpKSm6gYcjhmtAyGWV0wCkB4+AYiZs3FQHQMAqGjiQiEjKznw9aRJfv/ce+WbvXqKM&lt;br /&gt;
DLN/Bw8SnT7t369wqGGE48IFou7difbt4/tevdjtjz+6uzt8mOjECftnCxYQff45XwcCRBs3ho/H&lt;br /&gt;
li1EffsSnTxpmC1ezHHp2DHUfqlS3t9R4iddiIiefJLt9+hhdu/kT/Xq4f1PSXF/fuedhv+HD7vb&lt;br /&gt;
ffFFomrViLZv9/ZuVjvh3KSmEpUoQbRpk3c/7cjIIDp1KjK3dhQrFt5dpUpESUn+/a5Shf0OBMLb&lt;br /&gt;
fftttjtrFt9/8w3fDxhgb79sWX4+bVp4v+3SJhAgGjKE6MgRdzfymDCBzS9ccH6ftDSzm6efDrWz&lt;br /&gt;
fj0/+/BDvh8/nu8nT3Z/h0CAaPPmyL+zF/z47WZ31Cjj+dmznGZ16hAtWcLPx40jqlqVzQGiK69k&lt;br /&gt;
c5l+N97I56JFI3+XNWvYj86d+T4jI/S7DRzIduz+J/mO+fMb7rdt47MbAJEQoebPPsvPVq2yd6fm&lt;br /&gt;
HcmqVavkOhDVKUZ1u3rEsgtjPoD3wP0s5wEcB69kNhvATZxw/ohUDTd3LlCqFGsfJMeOAcWKAbff&lt;br /&gt;
zi0qIcwtl4MHgRde8K7G/PVX/y1yANi2DRg2jNXbgDd1+Isv8gh+J2n+7ruBdu34+rPPgEqVwrcY&lt;br /&gt;
b7kF6NsXsGsYjx8farZ3r70/DRsCX31l3J86Bbz7buYGlQ0Z4v78+++573PNGnd7c+cCFSvyt/JC&lt;br /&gt;
uDiPHMkaj0cf9eafEz162H/v5GRuzUyYEPqMiKeO2rF4sdEa37QJqFcvelNFv/jCPM5A9jkvWmT+&lt;br /&gt;
VzZuzNw4lSVLgJ073e1YB6+6/Ts//mj417JlZHH66y/+VklJrBn744/wbgAgMRF4802z2aZNnF65&lt;br /&gt;
coV3nxrcu3jbNj6fPcvntm3dNTaTJwM3hGzxlj1R15lJT+cxIb//DvQMdn4//zz/3/Jby7NV43D4&lt;br /&gt;
sPexS1Zy5+bzuHH8fXPkAD76yGxHlh3yG9ghu1z79AGuuw7o3Jk1NQMHOrshMtzZPbPTbn7xhXFd&lt;br /&gt;
sCCPh4g3MRMgiOg0eNGoweDlTOuDNRB3w8MiF1a1zeOPA717G89SUviHVlm1yn46zP3BuR0//GCY&lt;br /&gt;
FSrE5z//BD75hK+nTzee9+kDvP8+L6aUlMSDok6f5gVM7AqOO+8MHUm7dCnHVVVrWsmZk89SLeZl&lt;br /&gt;
RP977/E5nKrs+uuBJ580+++ELKSkOjhS5s9nNaBk8GDgtde4QvDKoEEcDy8C46FDPDaip8som9mz&lt;br /&gt;
OV/ISnWXsozZyZPGuIQdO8z5zqvwuHy587N69bgAcWPoUPsCQk4PtYvH1KnOlUPdujxuaMgQFpjs&lt;br /&gt;
uo3CVc5WNm3itFIFTCGAvHn5fNddwDvvsLma1+Q4hc2bnWcnHTvGBSxgfPM77gCuvdZs74svzPnI&lt;br /&gt;
On3WTYAYPNjbe1qx62s/e5YF/urVvQ/a++wz4zojg7/LMyFDxu3V1fI9ZZmQqMzwtw6+S042/LUO&lt;br /&gt;
vjt1iv2XDZ3nnze61KLFoUPcYFC/QenSnF8lP/0UKuwnWlYtsH5D67clAlau5PFiVmR3UHq6exmy&lt;br /&gt;
aBE3rmS6qsKc7MaYOdM5HjI9nQSDRYv4PHEiz+p6/XXnuACcdnZ07GjUEypqHXH8uLl+ixexXgfi&lt;br /&gt;
PiKaSEQbiWgtgI3gzT5q+PVrwgSjAiDiD1+mjNlOzZrAAw8Y94MGmfuznPqSZOUjP8hbbwGjR/P1&lt;br /&gt;
+fPAiBEseW7ZwsLAmDHe4jxxIp83buQ4BwI8qwRgoeWvv4wfZ35wx49I1xQAuJ9UfcetW819hRs3&lt;br /&gt;
mitPO/bvB/7zH/Zn7lzDXB1YuN5uIq7C+fP8s5w8aYRvNyh0/HgORw6MPXuWNRuvvgrcdlv4NEhJ&lt;br /&gt;
MSqZ7duNdz9/ns9C8OqQDz7IAuMLL7C56u9TT3EhOm0aV7pqgSwr7r17WTtDxAXfvfcai2xZOXmS&lt;br /&gt;
zyFO9bMAACAASURBVAsWAM2aAb/8wv3V4ZBxBliY2749tOKQZGR403pIrZaV9PTQylmyfTunRWoq&lt;br /&gt;
MGUK/2dHj3KFV7mye3jS3S23GGayMF+xgs92gwS7duUC1q7AP3zYuG7ThjWG3boBZcuyYAp400CE&lt;br /&gt;
y0szZ7JAZh2wlisXcOQIX6v/psyzMuxp00L9VP9FNXwplIQbZPndd+yHtG8nQOzcyRWypF07LrsO&lt;br /&gt;
Hw4V2mWDQ2oUP/zQEJ737OH/YOhQoH9/w82RI+a4Fy9un/cCAc4vzz/P30Vt3OzdC7zxhnF/zz3A&lt;br /&gt;
TTeZ3avvpA5gtQqHMg2OHgVq1QqNB8Bpkp7O3+6DD+ztANwgTUkx/mWnf1pFjcfmzXxtJxhMnmzE&lt;br /&gt;
1WtDxFpGyndfu9ZsPn8+x+Prr735G0viMY1TpSNYC+HSJme8Th20/oSyG+LsWa6IZAvcC4EAkCeP&lt;br /&gt;
oekAzJnKmpkB/sHUQWyq+l4WfidP8o+VmAgUKGAM1nnggdCCzanSsMbBDimw2BEI8KJFZcvyQFRV&lt;br /&gt;
sra2smR3x3//a5jde69xHa71eu4cS+WDBxtqQauq8dgx49vIgY+tW3NrRcY3XKFfqZJR4Kt28+Qx&lt;br /&gt;
uqvUylumaYcOrBVYtswQqOQ7SwFAtf/00+xfaip3W8yb56z9ueIKPjdo4G+w7+WXG4JZrVqs+pR5&lt;br /&gt;
YcsWLoTXreP4qapLldWrnQcQSvbscVeb33MPz3Jp3pxV5CkpxqI9Vo2fXfg1aoS3Z51qKe/fey80&lt;br /&gt;
369ezfnkF2U7pZEjzYKwnQCxfj3nvy5dWLvhptGbMoXfd8sW+3n38n1UYVxeDxnC961a2futtpgl&lt;br /&gt;
Utvklr/HjAHefpuvpUpe2lcr20GD+JtJ5LMrrwztUnXSaP3wA89g+O471hD16cPmBw9yV6nU0I4f&lt;br /&gt;
z2Zffsn3ajkwcybnF6lpSExkAUYKDuH+5XAChKxcnfyxdtFKgdyqQVCReUL6qU69DVfp22kM1Yq+&lt;br /&gt;
XTv7uFasyBpCO9TvaMdXX3E5IOubWTZbXsV7GmvcBAghhADPylhMRJkaw61W4LfdZn5m/TnVgiac&lt;br /&gt;
UBIImFuCgLllIf08cYK7B7ZtA557joUDySOPGNfyp7j3XkOjARiZ88SJ0Iwq4zhhgn0mtWZKGd+z&lt;br /&gt;
Z7nLxQk1nHXruMUnBGtX1Pi7cfw4CxXqz+6mvl++3ChArJWeuraHfGd1dTmrAOEmHAFcWauCUN++&lt;br /&gt;
fHYqcD7+GKhd20gXu5HX11/PAor8DikphiDUrZtzXLqGmU3t1G8tKy/Z1y0L/K+/ZsGqShUWUJym&lt;br /&gt;
XlarFn40f7h1EGRBrVbYdmp8J5zWbFG/Q82axnVKitGvbDcWJCODKy43jYtV8yAEq7ZfeYX7s1u0&lt;br /&gt;
cK8Q1C6m5s1Dn6elsd/Sj0DAaN336WN03Vg5dSq0kgIMf+zSlYj/6a5deSqoav/99/nd3Na6sHYF&lt;br /&gt;
qMixRIGAuSx0WmdAqtRlPKyNMXXZdmvrXQjWFkkhKFx3qxrvCxecBT63NRFUpCZ6wYLwizHJsNSu&lt;br /&gt;
N6c8L9PNqi0jCi1H7bptN21ynol2ILiE0/nzrGGx/guPPMLdtW7CcCSzqjJFPEZqBsdLjgKwHUAJ&lt;br /&gt;
Fzv/zMIYNIhnSFhHNgNEDRua79XRrDlz8vWJE6HubrvN3j959Ojh/nzlSjKN+H3gAXf7TseZM0Zc&lt;br /&gt;
hTDMZ8822xsxInTkrV2aZGQQtW/vHuacOfbmhQsTlSvnLd6PPsrnoUPN5jNmmL9BuOORR8z3csZI&lt;br /&gt;
4cJm87x5I0vfaB6rVhE1aZJ5f/74w3xvHX0PEA0ebE7DpCTv/h89Gt6OOsNEPVJTeWaBnPVhfV6/&lt;br /&gt;
fubf/7PPzPcXLtjnl4oV7d1fcYW7/xs3Gnm8VCmihAR3+yqXXWZ+Jmc9qMdrrxE1bcrXzZp5f+9z&lt;br /&gt;
54zrr77i7z5zprubH38030+fHj4c+Q/dfHN4uy1bmu9Hjgy1M3Uq0Xff8XWnTqHfynr/3nvm+337&lt;br /&gt;
wsdjzx6iRo2Ivv7abL5/P8+QA+zzo9/DbmYLEdEddxjhqd8JIMqXj88NG5rdyG+/ZQvRihWG/fR0&lt;br /&gt;
orp1vcdpxQr7MpOIqHFjvs6VK9RdsWJGPrQ7cuSI7yyMmAdARADvZ74LwDVh7AUFiDupUqWmdMMN&lt;br /&gt;
TQmQx2THRJs+3fwTHD1K9Ouv/jNa9+7uz6UAUbOmf7+9HNYKs18/ntJ07px9ZpPHwoWRh5kvn3cB&lt;br /&gt;
wimdhg1jwcauUvRyNGzI7osWNcwSE2OTxn6PJk2MHzqaR6tWoWZyumwk/m3dGnlcpPCZkEBUsmRs&lt;br /&gt;
0rF371CzSN/V7pgwgah4ce/2Dx0iOnCA/zHrs3Bp4KfhcOqU+f6JJ2KTvoAxxTHcYRUyrJW/9ejS&lt;br /&gt;
JfRbnT3r7iYz+REwppBH6zh/3ihDV60ieuqp8A1KgKeG16nDeeXMGXPaLV9uXJ8+bQgkXo5HH2Uh&lt;br /&gt;
KTXVbO7vn5hMRv0ojzvpkhIggsLDbgDlPNj9RwMxeDDRK69ENxOFO8K1+L78Mr7x6dfPLIWqEq96&lt;br /&gt;
qBVvVhyyALrnnsj96N49VAPxbzx++ikyd3PnRh5mpJq0zB5yPYOsOq6+OjJ399/v3e6xY/F7ny1b&lt;br /&gt;
InP31lvuz7t2DdXKdOyYtd/O7zF0qCFAVK7MZnXqeHffqVOoWbduxvWePUS33+4/XlLTIY/MC9WX&lt;br /&gt;
kAYCwEcAzoDX4j4L3nWzMYA84QSIrMhkaoa4mI6CBbM2/A8/zLwfHToQFSqU9WmZ1UeklZo+4neo&lt;br /&gt;
3Y7hjkg0oZEe6oJm0TyeeSbr0zxaR2oq0U038XWNGlkfH+txsQkQsR5E+TSAvACuApALwM0A5oG3&lt;br /&gt;
9852jBiR1TGIjBhsBesLu9HAfvn6a2Mtin8zenfO7A+Rd7vDhsUuHlb8rLXih1GjYuNvVtC1q7FE&lt;br /&gt;
eXbceEtOd75Y8Lnau2+WA1hGRC8C/8zE2A0gSuviabID0VjARJ0+qdFcKmzcGL+wLtaNpOKJuqCV&lt;br /&gt;
38XU4oG6hsrFQCw308oJXjDqn2VOWD2D+QDqxCpcjUajyS54nXaoiT9uu1xqvBHLLoyiABIBWBdR&lt;br /&gt;
/hvcpaHRaDQajeYiJdZdGBGSBKCAxaxN8NBoNBqN5t/OlOChEuFOYhESSwHiMHjr7uIW8+IADrg7&lt;br /&gt;
HQ6ekKHRaDQajSYUu0Z1MiLYaipiYrkbZzp42uY/e1QGB1E2ABCj8cIajUaj0WjiQUw0EEKIMgDe&lt;br /&gt;
BHAtgFuFEK0BTAeQG0A+AJ/GIlyNRqPRaC4Gcub0t89MdiRWGoiKAASAtmBBQgB4DsB9ABoTkcPO&lt;br /&gt;
5/8O7r/fu93quifnkkLuNmpHVs8Bf/XVrA1fc3HQoEF4Oxp3Dhxw3lX3YiImAgQRfU9EnYjoJyIa&lt;br /&gt;
QETFAbwM4CwRrYxFmJEid22LJ1WqeLfrdVtzlVtv9e8mEo4ciU84lxKXXeb8TN2lMhIyU7APH66n&lt;br /&gt;
tWnCc9llwJtvZnUs/CN3mc0uJCYau29ezMRtO28ABQEcjWN4nnBbVe7FF+MXDyfC7Utvh5+V8gDn&lt;br /&gt;
/emtvPKK2e8cOYDkZH9hZRXjxmV1DJhnngGKFOGzypVXZs7fnDmB+fMjd08EPP44UKxY6LNSpYzr&lt;br /&gt;
eAmn8eCWWzj/zp4d3u5NN8U+Ppnh4Yej61+TJvbmQngrL664wvlZjjAd507b1fvBmk/z5gUKF3Z3&lt;br /&gt;
U7as87NixfgfycjIdNQAsAARLh0AoGHD6IQXK+IiQAghygN4HsDoaPkpV11r1Ai4667I/XHbW/2d&lt;br /&gt;
d7igv+660Gc9e5rvy5XzvhS2H61CWpr78xIlvPul8uyzfF65EmjjcXZsYiKf//wTGDiQC4mbb7a3&lt;br /&gt;
G88Ke9Gi8HaKFo19PFScKpwSJYDDh4GkJLN5y5Z8/v13e3fhVvv8z3/8xc9KIMAakL+tq7aAlxmX&lt;br /&gt;
+BFO+/QJNXvhhVCzEyeAzp29++sFdcVBJ265hfNvgodS0It/Vq6/3vlZzpz+/XOjcmV7berAgaFm&lt;br /&gt;
dt9AIoXFfPnsnwvhLb1uvBEoXx4oVCj02ZQp3F2nCqYqw4eH9z8cdv9fOI1puXKhZo0asfDw8st8&lt;br /&gt;
L8tAyT338IqWhw/7i19iYvh6YNMm83+fK5e/MOKBLwFCCDFQCBFwOS4IIW6wuCkF4DsAXxLRJ95C&lt;br /&gt;
SgLQzHQ0a2ae7/rpp8BrrwFffgksXAjMmOG8J8SsWUD//vbP3ArEnDmBjz4COnUymw8cGKoS+/hj&lt;br /&gt;
d/W0ihDA9One7Hbrxj9stWqhrYK6dYEtW0LduL3Te+9xXD/8kO3VqAEUt060dUBKzDfdxGlvRe3f&lt;br /&gt;
96OOz2zlcccdQN++7na8SPt+6NXL/flVDkulNWrEZ2sFIscf1K4dWXxk3nvjDWc7bi3HRx81rj/6&lt;br /&gt;
iM+JiUDz5v4E3pIljWs7rUqjRsCYMXzdti23sC6/nPdbcCvgly0DPnEpPcaO5cJc4tYwkC3NOsH1&lt;br /&gt;
cNVKYdcuYO/eUDfWykUta7Zvtw8nPd1+H4nEROCDD5zj54adoFi5Mncr2P331nEtpUsDI0ca91dc&lt;br /&gt;
Ybx/9eqGAOv0zb3+R3nzctl0332hz/Ln5/KhbVvDbN063geGiDV05ct7C8cvDRty489OIFcFo+bN&lt;br /&gt;
Wdvw3XfA/v1Ajx6h9nfuBH78EShThuMcDlVg8iJA3HCD+X7sWOu+Q1Og1pHlyjVDvnyWlkms8bm7&lt;br /&gt;
ZhEAN4Q5cij2SwLYBGC8R/8dd+Ps1St01zI77Ha/kxQoEPqscWPz/cmTRCVKmN0NHGi2EwgQTZvG&lt;br /&gt;
1xs38l7xRETjxrnvlDZ2LJ9ff53tr1rF93nyEGVkmO0mJhr2JF9/bbZz3332u7fVquW+25uVQIDo&lt;br /&gt;
jz+Ipkxxj3/fvvbu5fP69Y3r1au9pcXatUQnTrjb9bKDnV06yKNyZaK9eyPzW275O3RoaJhu7mbP&lt;br /&gt;
DjU7csSI665dzt8lf37zszVriH780T28devCp4PbdvUqcuvmTp34Xt1G3i1vAbwt+4QJfP3hh5yP&lt;br /&gt;
5bM9e9i/jz/m+//9zzkvyUPuTrp2LdHOne7xT0837v/6i8/TpxPt2EE0YIDx7LnniA4dMsL84Qf3&lt;br /&gt;
vFSxYqi507V6vPYa/1sHDxpm3boZfj30UPj89+ij5vvWrYmqVjWbtW/P/t13n2G2cSOnl/o9AaKy&lt;br /&gt;
Zc3xvflmooQEvj56lMs/gMsC61bT8jvYva+1bKpXj+21axdq94cf+FkgQFS8OJsFAuZ8EC5tbrvN&lt;br /&gt;
/bm1/LFDPitWjM9NmhhmLVrYu3Ej3Le89lrj+vx5olmzzM+XLiXq0iU0zu+9x/cTJ/L9qFH2/j/3&lt;br /&gt;
HNENN2Tj3TiJ6AgRbQ5zZAD/aB5+Bq8FcXNQQ1HVSzh26uaKFb3F8Y47zKNbVVXczz8b1zNnyncC&lt;br /&gt;
qiqxyp8fmDfPXc0nBPDII8DZsxyvcC34zz9nNbCUquW4BjnDonx5lkjVzV0yMoC33zb7I9393//x&lt;br /&gt;
Wbay0tPNGg0i9/jYvU+1aix1u2FV30kOHQLmzOE+dInaV9i1a6ibTp2A48e59eSkEt20yT0+X33l&lt;br /&gt;
ba+BtWvD938C3ELIyADOn+f7mjU5XUeMALp3D+9epWFD7ss9dIi/4w8/mOOgfqMdO8xurRuL3Xij&lt;br /&gt;
e4u6fHlvXRh33OFt2phsKcluQrWl5Ja3uncH3nrLsCME/08At+ylv02bshbroYdC/VD/xe7djT7g&lt;br /&gt;
xETn/CdRW8dXX83xaNGCNQ5qn3iOHOYyxotKPhIGDuQ0UDUxqnp+yJDwfkyxLDQ4ZozxPfLmBerX&lt;br /&gt;
N7Rhl19u2KtYkVvGgHEGQlu9339vXBcqxN+LiDVS69ezdlelcmXjunBhoFkzHkciv6XsUm3Vis92&lt;br /&gt;
+UWmtxCGWt4aL79lmBU1H4XLNykpwNChwLXXGmaRDF530h7Kd0lIMLRfOXPyf/Cksi/1rbca2jkV&lt;br /&gt;
WZbK/H3NNfbhpKfHLi87EZPghBAlASwEsAvAaQAHwVKRh2IceP11Pt99t2FWuDBQsKC38Fu3BurV&lt;br /&gt;
4+vNmw1ztb9ePrcrmKtWNav5VFR1e5485mdOma5tW/7BpH1ZQQH8g8rBb2XKOKu+AUOAyJ3bHPcc&lt;br /&gt;
OcyVUyQDLwH+mXv3dn7u1EVTtCirKtu1M8zUmSajRwNbt5rdCGEMtHL6wcOpBS+/HKhQwbi3FnYA&lt;br /&gt;
sGEDn/PkMeJ03Ga112HDgD17OC65cvGP+NJLrJKPZDBtnjzAhAmcNq+/HjoYSu0bdhu8BXBcVIHM&lt;br /&gt;
OujPTbiw+mNVQZcuHTrOpkABLvTkPyK/e7jBbc8+ywK7KkAsXQp89pm50LvySh5HYzdgU+2CIQIe&lt;br /&gt;
fJCvS5RwzidNm7rHS/olkf+PJFwFo3LHHe7PK1WyN+/ePXSsUcmS/E3U7iPAnKdVVqwwD07MnRtY&lt;br /&gt;
sMBoXMmuJyvq+1nLqCuvdB6rUbaseXyZOv388GH+X2bNMsrVmTO5q+n0aWOQsJo3a9QIjY/1W0jk&lt;br /&gt;
dz91CujQwTCXXX8tWnA+9UK42UmFCvH3USvfSCriL78Mb0emgRB8eNnuXf778t0bNuQxVIMHm+2l&lt;br /&gt;
p0cm+GSGWMkrDQGUA6862Tl4ToCyM6cbUnrMk8fc9+QncWSBYa3ku3Xjn05mEKkAApx/XEmhQtwP&lt;br /&gt;
5USzZsa13UAg+aNL6RzgH1TVYIwe7dxXbRUgnKR0tbJ5912War0UkkIA/frZPxs61Bh46YRaOVn7&lt;br /&gt;
+O0GokqsP+vo0VypqeZ2gpU1P8j7l1/mfstjx8wFuvQvf/7QQttasV64EGrHrnJwey833EapA1zx&lt;br /&gt;
SoQwC4XWCtOPAAEAjRub/Q43oK9iRdagjRvHLXs7tmwx0kIVICpWNFcA4XjkEeM6EOB/iogbD055&lt;br /&gt;
2MssCvVfqWrRg/qpLH7+2WgAzJrF5YkaB+vgasnQocDkyWazvHn5u06ebBZ+nQYgy3FFMr7WeDtp&lt;br /&gt;
2fLkMQR4+Y+0b2+k5y+/AIsX27sFWLs4ezbw7beGWZEiHH+VBx/k/KFqfWXe3LXL0Kiq/8ycOfaa&lt;br /&gt;
mCeeYOHhssvM304K3rfcAmzbZh9fqZWcMYPHe6mDgN1Qy5NIKuJrrjG/S82awB9/8HXO/2fvyuN9&lt;br /&gt;
qN7/+7mW7K59aSEV+VYISZaKJCVCqUSFKC3f6n61UNlKPyV7abWWKKJIUipFqQhZciPZsu9X1nvd&lt;br /&gt;
+/z+eD7HnJnPzHzm87mf+dyLeb9e85qZM2fOOfPMWZ7znOd5Tj6ZSLz/vlmy6oUJUlJD1UflyyeM&lt;br /&gt;
h1Uv44yRQDDzRIj+w3aIXkMViATCQWffjKJFpZI995whAgViYyCsA8Pw4SL2sxPL/v67fVoq7tix&lt;br /&gt;
7nmWLi2V4++/jY5FR3Ky5HWNy2bmt93mbFWgBhHV8HXmSB+QdAaiShWge3dR2rJ2nJGgNI83bBAO&lt;br /&gt;
3Wm2kF1YK33evNJI1Hc2aiQMgRVqhmwFszAc1sap/iORMRtUCrJeGKyGDc33aWmyPKIUIxW8msW6&lt;br /&gt;
zZyvvtpYqgJkiUnHxImGeNtarpkz7ZU81ffPnQscPy7XXkXFbdqIZGb8eCNMWVlcf71Z6U1nIKKF&lt;br /&gt;
23KJXVnd2pIONZC1bWtW3gOi63Tz5jXE7q1bGxOFW2+VpUpdCucVROaZfiQph6JRNOVWyxjq3Q8+&lt;br /&gt;
MPqJcuXC65COW27xJuWxgy6+v+km+Q86E1q1qkj6rCAyJF86o9Kpk0wAGzUSJsbOckJNBNu2lSUC&lt;br /&gt;
J4sSuzztrqOB/m1NmhjtNj3dKItVOdKKBQvMTIaamNar5/5evnxnCAMRwngAbzLz8mhfzJtXOGa9&lt;br /&gt;
Uns1H1JQHYbTwKAGwzvvNCp5PAbIqlXtK3U8oBgINTCqNWrAEI0BZjopOvToAaxY4S2f77+XuIMH&lt;br /&gt;
C230tUE/YP1H1hmWOltFn1bmUInEnfRllJUIkTGzvflmCbMzN7PCOoAVKxY+C2vZ0ptZKSD6FW6W&lt;br /&gt;
B8OHA7t3y/X55wOTJhla7ffdJxKSzZvDGdvWrYGBA+Va92Sq1wtFy2jXmnWmrH9/MfucM8ccp2VL&lt;br /&gt;
6cR1iVwsiFS2Y8eARR531VEMU7164YODUx/hZGZoByJhTBLRgeuMcLTv6HoSiYDqf3S9h2jx6qtm&lt;br /&gt;
PxdNmhjXusSUKLrlxpUrzUvcetni8R9jHU8aNzYzGZdfLm3BzWR/2DCRfuTqJQyvZpxE9DiAIgBe&lt;br /&gt;
Va/GWkDF0ZUqZR4kI0F1Pk6dQ758EufBB40wJ+Kr2b11sEg0lE7ARRdJ2fWlEABYuFDEn0pBFIhN&lt;br /&gt;
Gem666KXVniBmmnoUiXAeSnCykBEmiFceimQmmpWTNLxwQciMtXRtq2IkO+6K3L5FS11pTQrollP&lt;br /&gt;
z5/fXbkzTx6zAl7HjuHlv+AC545q3TqZrdmVLVYGAhD9ICVyL1s2vF2ULStiZDd9Hi+wKq6WKydS&lt;br /&gt;
lwoVZKnAujwJyHq3ncmdEps3aBD+zG7pct067wx3vJCUZEizOnY09026VCsaT7Z62t26ifl7IvH0&lt;br /&gt;
0zKhyo6jtORkoy5Y62unTrKk1KWLMNteffEAQkdd/0NNJgCz/l000PslJwmpFY8+6i4BcsO4cVJX&lt;br /&gt;
U1KkL0m0BCIqkw14M+PMB+BTABmWIwtAOlxMOhEy47z22mu5VatWp46GDVvx5MmTT5kYOZnl6FBm&lt;br /&gt;
PunpkeNedpl7mhkZzOPHh5saRcKtt3orq1dkZTF/8423cig6/f13/PL3Av3/LF7M/NFH5ucHDtj/&lt;br /&gt;
E90caepUCTtyRO6bNpV7Zc4EiOlrotG5s+SdmmoOb97cKFebNokvVySoss2bFx5+wQU5UyY3/P13&lt;br /&gt;
OI3jgcOHnZ9VrmzfVgGzGacXeO2jrMjMlMOKXbuYjx417o8eFZPNJUvil3dux7p18l12pr/xxqFD&lt;br /&gt;
0ff1Cnv3Ml90EfOGDfEtkx0mT55sGidbtWrFxYpdm1AzTn8SBc4D8B/taAYgE0AbABVd3qsNgJcu&lt;br /&gt;
XepINMCwMXZD/foS165BWrFuHfNLL0WOFy0yM70xMGcSihaNrQMDmLt0Ef8Q6p+dOCHhuv+JUqVy&lt;br /&gt;
joFYvJg5OVkYGx26L5F27RJfrkhQZZs/Pzy8WrUcKVKuw969zGvXhocDzK1aRZdWTg7iCxcy//hj&lt;br /&gt;
zuTtN9asiX1gP1tQp05i/UD4sp03M28FACJqCdmNsyZkueQxZm7m9m4kbNhgb/5lxejR4orai0jn&lt;br /&gt;
kkvcPfjFiqSkHBAp5TC2bo3NX/yGDbLmrLtrzZ9fNpzRxZ+cTfvw7OCqq4ADB8LD47126hesOiP9&lt;br /&gt;
+oVbmpytKFXK3mx40SKz74PcjkgKmKcznExkAxhIdP/jCwMBAER0O4B3AfQC8CfEL8Qct3e8wKtC&lt;br /&gt;
X+3asfmvD5A9RDJPdILTf7U66cpJBsILIpm65iSsHXAk998BvFt5BAiQG3DJJeIvJFHwhYEgojwA&lt;br /&gt;
RgDoycwTQsFRqJcFCGCPEiXspQC5AQcPenduk0isXi0Kh1789QcIEOD0Rc+e4f5G/IRfAo/aED8Q&lt;br /&gt;
IKJlRLSdiOYQUTb3DAxwtkO3KgjgDZddJlYImzdvRlJSEt5///1Tz/r374+kHF53qVy5Mro6mc4E&lt;br /&gt;
CBAg18KvnqMKxHSzH4AXAbQEcADA90Tk0SF1gADhcDOhzCkoZ1ReHdbkJhBRjjMQSUlJoBgM2Ldu&lt;br /&gt;
3YoBAwbg6quvRsmSJVGmTBk0adIE337ryeFtgAABsomoljCIaBCAZ12iMIDqMBiTgcz8WejdLgC2&lt;br /&gt;
AmgPwMUhNJCSkoLiFllwhw4d0MHqTD7AWQvdQVJO4447cr9uhhP69OmD3k7+lxOEtWvXxsTEzJw5&lt;br /&gt;
E6+99hratGmDzp074+TJk3j//fdx4403Yvz48bhf390tQIAzDFOmTMEUy25raXYb/fgI4ih6PiIq&lt;br /&gt;
BfEF4YYNABoB+A5AI2Y+5SuOiH4BMI+Z+zikXxvA0qVLl6J2bhohAuQq/PGHeJXMjfoG8cLRo0dR&lt;br /&gt;
KM4ijc2bN+PCCy/EhAkTcF80G1TkUqSmpqJcuXIoqXnjSk9PR61atXDkyBFs3rw5R8qlhCmnK1MZ&lt;br /&gt;
4PTFsmXLUEc8LtZh5mV+5+fXdt5LAZwAcMrHGxHlA1AZskNngFwEKxeb23HZZac/86DTXOkhpKam&lt;br /&gt;
4p577kHJkiXROOR68M8//8Qdd9yBUqVKoWDBgrjqqqvw+eefm9I6cOAAnnrqKdSoUQNFixZF8eLF&lt;br /&gt;
ccstt2DlypURy2HVgejSpQuSkpJsjxdffBEAkJGRgb59+6Ju3bpITk5GkSJFcO211+J7m+1QmRkj&lt;br /&gt;
R45EjRo1ULBgQZQtWxY333wzli0z+jarDoTX76levbqJeQCA/Pnz45ZbbsHWrVtx5MgRR5oHSAwC&lt;br /&gt;
mp/Z8GszrX8BfARgNBEdJKJ/AfwD8VI5zY88A8SOoJEnHjrN1fp/+/btcfz4cQwaNAjdu3fHmjVr&lt;br /&gt;
cM0112Dt2rXo3bs3hg0bhiJFiqBNmzaYOXPmqfc3bNiAWbNmoVWrVhg+fDieeeYZrF69Gtdffz12&lt;br /&gt;
7tzpWg4iMukf9OjRA5MmTTIdHTt2BBGhXMim9tChQxg3bhyaNGmCwYMHY8CAAdi7dy9atGgRNsh3&lt;br /&gt;
7doVKSkpqFSpEgYPHozevXujYMGC+EXbbtSq/5Cd7wGAHTt2oFChQmESnKCeJx4Bzc9w+OWhCsA6&lt;br /&gt;
AOsB7AFwCMAWAEcAlHV5J6InygDxR6toXe0FyDZ0mvfv35+JiDt16mSKc8MNN3CtWrU4IyPDFN6w&lt;br /&gt;
YUOuprmQTLdxd7p582YuUKAADxw48FTYpk2bmIh44sSJpryTkpIcy7l+/XpOTk7mFi1acFbIDWBW&lt;br /&gt;
VlZYmdLS0rh8+fLcrVu3U2HfffcdExGnpKQ4ps/MXLlyZe7SpUvU32OHv/76iwsWLMidO3cOe5ao&lt;br /&gt;
er5wIfOECQnJKtcj6FsSi6VLE+uJ0hcJREhX4mIA9zNzGWYuBnFpXRDAaeTXLUCAxICI8NBDD526&lt;br /&gt;
P3DgAObPn4/27dsjLS0N+/btO3U0b94cf/31F3aE9jjPly/fqfeysrKwf/9+FCpUCNWqVTMtFUSL&lt;br /&gt;
o0ePok2bNihVqhQmT558SlJARMgbcmvJzDhw4ADS09NRt25dU37Tp09HUlIS+vbtG1W+sX7P6JBQ&lt;br /&gt;
4QAAIABJREFUsWPH0L59exQqVAiDBg2KKs94olEjINDfDHA2wC9X1vuI6E8A9xHRcsgmWg8D2AXR&lt;br /&gt;
jwgQIIAFF2ruONevXw9mRp8+ffCCjZ91IsLu3btRoUIFMDNGjBiBt956Cxs3bkRmaN93IkLp0qVj&lt;br /&gt;
Lk+3bt2wceNG/Pzzzyhh2e984sSJGDZsGP78809kZGScCq+i7WW/YcMGVKxYEcnJ0Vlux/I9WVlZ&lt;br /&gt;
uOuuu/Dnn39i7ty5KJ/drUADBAgQEb65sgZwI4DPAPwL2YlzF4AWzOxmZ1IAEO3qAIlDWlpatmaq&lt;br /&gt;
AaKHTnMlSVi3bh127doFAFizZg0A4N5770X9+vVt0zh8+DCWLVuGMWPG4O2330abNm3QtWtXFC9e&lt;br /&gt;
HESEIUOG2OazadOmsDDr/588eTI+/vhjDBw4EBkZGabnc+bMQd++fdG0aVO0b98eJUuWRFJSEsaP&lt;br /&gt;
H49t27adinvo0CGkp6dHrFvp6enYt2/fqXhev0fHgAEDMGfOHAwcOBBFixa1jRPU88QjoHlioY2d&lt;br /&gt;
Npvdxx/RmnF68gPBzOuIaCbEffVAAMcBdANwG4C6zLzLIf17AHzouUABAgQIECBAACs6MrPvTq39&lt;br /&gt;
8gNxHYC5AJKZ+ZQtFRGtAzCGmQe7pH8TgE0QpiNAgLMBDwLoDuAGiMKxwtsALgFwJ4B9lneSARwM&lt;br /&gt;
XU8CcBhAD+15MwCvAPhNCy8PYDbEQ+wXlryvCt2XAjAZ0o4fgUwKrBgMoCqANlrY5QDGA9gBoHUo&lt;br /&gt;
rA6AdwBMATDUJh2Fz0PlHBDl9wDAfQAeBzAGQq8AAc5mFIC4S/iKma19RtwR1RJGqEARC0VEBSEd&lt;br /&gt;
T5blURZcTEdD6SdwK5AAAXIeRLQjdLmSmfdr4fcDWAhpE+9BBvVyAK4BcC4zXxmKNxVAHwCPAVgE&lt;br /&gt;
4AoAHQH8DeAwhxzKEJFyBL5ZC9sBANr9NADFQ3leainqSmZeRUSTAIwD0BfCiFQB8BCAPwAUYcOB&lt;br /&gt;
zTIiagSgE4ThmQtp/40BfMfMb4byTAewTyuD1+9pC2Ee1gH4AeIFV8fXzLzHkfABApyZWBQ5Snzg&lt;br /&gt;
lw7Ez5DZ0ftE9BKAY5CZTmUYM58AAQK4gJlTiaguRGJwP0Q6sBvAchizdQD4PwCFANwDkVYsBXAL&lt;br /&gt;
ZMZulSDYSRT0sNKQpcdhNvEGAFjFzBOIqByEaWgOYA1kgL8TwLWWdzoDWAHgAYjkIg0iRXDr5Lx+&lt;br /&gt;
T43Q/SUA3kc4mkDMyAMECOADolrCiCphcUv9MoC6EAdSfwAYwMxf+5JhgAABTksQ0RYAc5n5wZwu&lt;br /&gt;
S4AAAbzDt234QmLGlpB1yf0ArgTwJhGF26QFCBDgrAQR5YVIVvbmdFkCBAgQHfw04wSAXhAx530Q&lt;br /&gt;
MWddABOI6CAzv+Fz3gECBMjFIKLmADpAFL+CPbgDBDjN4JsEIoRrAMxk5rnMvIWZZwD4GkA9a0Qi&lt;br /&gt;
epSINhLRMSL6hYiuCkstgC2IqDERzSKibUSURUStbeK8SETbiegoEc0joostz88hotFEtJeI/iWi&lt;br /&gt;
T4iorCVOCSL6kIjSiOgAEY0hosJ+f19uAxH1JqLFRHSIiHYR0adEVNUmXkBzd/QC0BTAc8zsykAQ&lt;br /&gt;
UQ8iWhGiQxoRLSKiFpY4Ab19BBH1CvUvwyzhAd3jBCLqF6KxfqyxxMk99PbTTzaA3hDN8UtC9zUh&lt;br /&gt;
Zl53W+LdBTHbvA+i+f0OZNmjdCL8eZ/uB4AWAF6E+NnIBNDa8vzZED1vhZjbfQbRaM+vxXkLYj57&lt;br /&gt;
HWS5aRGAhZZ0vgSwDCJJagDRfp+U09+fA/SeA+BeiNb/FRDTyE0ACgY0943mLUP1/CKIm/yBkB1/&lt;br /&gt;
qwf0Tgj9rwr15csBDNPCA7rHl879AKwEUAZA2dBRMrfS229iEIBBkEEtHcBJAM/axPsFwEjLe1sB&lt;br /&gt;
PJPTP/R0OyCmslYGYjuAFO2+GMQy5k7t/gSAtlqcaqG06oXuq4fur9Ti3BT6p+Vz+rtzmOalQ7Rp&lt;br /&gt;
FNA8oXTfB6BLQG/f6VwEwFqItGg+zAxEQPf40rofgGUuz3MVvf3WgbgLYop1N0QHohaAkUS0nZk/&lt;br /&gt;
AAAiygdxOPN/ZHYktQxACyL6xucynomoErKCAYCKEAdC27UwQKxibiOi9ZDZRV4Aey1xdgJoT0Qn&lt;br /&gt;
Ic6BDgEgLc4+iBldByL6wb/PyfU4D0KHciHaBDT3FwRxlV8YwEEiuhUBvf3EAAC/QkzziwAoG9Rz&lt;br /&gt;
31ABQDUi2g1hBFYCeAOyFYQXejeA0Hu5esjMa0ksna4BsBhAfQAHmHm5lsY3EHpfDWCm59L6zE1t&lt;br /&gt;
AfCwJex5AGu0+woQbuhqCLPBwREcwREcwREcwRHzcY9l3P0VwKDQdW8AqTbj9S4AD+UmCUQhyPKF&lt;br /&gt;
DjdvlJsAYNKkSahe3epULoBfSElJwfDhw3O6GGcVAponHgHNE4+A5olFamoqOnXqBITGUr/hNwPx&lt;br /&gt;
OYB+RHQXRJmjMIR50L3G7YUwGeUgeg+oXr06ateujQCJQfHixQN6JxgBzROPM4HmzMDKlUDNmjld&lt;br /&gt;
Em84E2h+miKP5b4cZNkIobPVKiMPgJJaHE/w24zzeciaWT0ABSEKIFMgipUAAGbOgLiqvcHnsgQI&lt;br /&gt;
ECDAaY2pU4FatYBff83pkgTI5TjlKoGIqgG4ALLFBELnZCK6Uot/A0S3KKqa5bcE4nEAvzPzdRHi&lt;br /&gt;
DQMwAYE3ugABAgRwxIYNct6xwz1egLMe/yOipQD+BTAKwE/MvBgAmPlPIvoKwHtE9DCA/ABeBzCF&lt;br /&gt;
mXOVBKIVgN+IaCqJw51lRNTNGomZpwJ4CsDDPpcnQIAAAU5bEOV0CQKcJlgI4BMA30Mk/7dbnt8D&lt;br /&gt;
4E+I9cVsAAsgXqOjgt8SiCoQpmAoZGOtegBGEdEJZcapwMxvEtEvkOWMAAlEhw4dcroIZx0Cmice&lt;br /&gt;
ZxLNRWk+9+NMovlphsHMfLfTQ2Y+CKBTdjPxbTdOACCiEwAWM3NjLWwkgLrM3NAmfm0AS6+99loU&lt;br /&gt;
L17c9KxDhw65ojJ++ilQqRIQ6AUFCBAg0Xj1VaBXL2D6dKBdu5wuTYCcxJQpUzBlyhRTWFpaGhYs&lt;br /&gt;
WAAAdVg2tPQVfksgdgBItYSlAnCt+sOHD8+1mruq0Z4uM4AAAQKcOQiWMAIo2E2qly1bhjp16iSs&lt;br /&gt;
DH7rQPwEcaN5aiMWAN0BbPY53wABAuQw9u4Fvvgip0sRIKeQkQH8+Wf0723YAJw4Ef/yZBcZGcDn&lt;br /&gt;
n+d0KXIX/GYghgOoT0RvAHgE4pnyCohrzgABci2OH5cBMLdh714gJQXI1Nyzbd2ac+VxQ/v2wK23&lt;br /&gt;
5nQpziwoCYSdBHTZMlneyC149VWgenXgwIHo3rvoIqBHD3/KlB289hrQujWwalXkuEuWADujsmc4&lt;br /&gt;
PeErA8HMvwHoAKAbxHFFGQDzmfkjP/MNED26dQOGDMnpUsSOTZukc124MD7p3XYbUKZMfNKKJ/r2&lt;br /&gt;
BUaMMDqx774Dzj8f+OmnnC2XHQJTw/jDjYFo1UoG7dyCtWvlvG9f9O8uXuz+vEYN4K67ok83O9i1&lt;br /&gt;
S85Hj0aOW6+eHH5i+nTg5EnjPisL+Oorf/O0wm8JBCBbTL/BzAUgG3n8Ee8Mli4F/v473qme+Zg9&lt;br /&gt;
G/j4Y7keOxZ4+unElyErKz76JKkhTZvvvst+WgDw9dfxSSfeUANIVpacVSe9fn3OlMcNSYnoXRKI&lt;br /&gt;
8eOBAQNyuhTOSKR+RGZmZKZVtetYyhXpnVWrxKnWX39Fn3ai8M8//qW9ZAlwxx3AyJFG2LRpwHPP&lt;br /&gt;
+ZenHXxt4kR0N2QHzt5+5lO3LnDxxX7mcGaiVSvgbkdDn+jw2Wf2g1iZMsBbbzm/lyePNITTCQcO&lt;br /&gt;
AIcOAenpic9bDcrMUoaMjOjenz0bWLQo/uWyg9tsObfilVeAChXsn3XtCvTvn9DihMFtYE0kAzFs&lt;br /&gt;
GNCoEbBunXOcaP57Sgpw6aX2TMeePcAttwD//hv+XtWq3vPILnJTfT52TM579hhhaWmJL4dvDAQR&lt;br /&gt;
nQdgBICOIXfVOYYbbwTGjQN+/NEgfHYR7fr4v/9KA8nNHHMkVKvmPANr2xa48kpzWEaG0OmFF4yw&lt;br /&gt;
PXuANWvM8WbMMK779cteRxivxp3H6kleQ8mSQPHiwDnnAGPGxCc/r1C0GT9eyvDEE/bxvv5a4lqV&lt;br /&gt;
0Vq1AhqGGVD7A8XsZFq308vF6N3b29r1kSM5s8btNojZtZv33/dnKWnTJjnbDepWeGmTI0aINE1J&lt;br /&gt;
1lavNp5NmAB8+aUhnldx/MBvvwH799s/y00WMFZJZE7BTwlEHYjOwzIiyiCiDADXAXiCiNKJnH9H&lt;br /&gt;
SkoKWrdubTqs9q7R4JtvgAceABo3Bh5/POZkTIi2U1y+XBpIogecWPDMM8AHH4SHr1tnzMB27Ajv&lt;br /&gt;
GA4fNt/nzy9n/U/XqAFcdplz3q+/7q2MixaZGY94N243BkKHXgaFP/7wTzqhBuXRo83h1n+hnh88&lt;br /&gt;
6E85AOCTT5xn60B4JzdkiPhRiRfWrDGWcGLBgAHelfWsjNi119p/+9Spwti5Yc8e4MMP3eN8+aU7&lt;br /&gt;
g2L93z/+aC8yv/9+UWaNN7zMxtUztzgZGWYmxK5fteb12mvm5w89JP1KtJg1y8i7cWNJ56qrZMLp&lt;br /&gt;
Bv17jh4VGvvZzuwg/cAUzJhhjJGjR7cGkJLYgkSz93c0B2Tnzf9YjsUAJgKo7vBObQC8dOlSZmY+&lt;br /&gt;
epR5/37mtDR2hfzSyM8B5qZN3dNSmDOHefdu57S2b/eWjsL338t7zz4b3XtOOHiQ+aabmLdtYx46&lt;br /&gt;
lLlcOaGXV0ydaqab07UOFb5vn5xHjAh/Zhe/VCnneNb7EiXc/6XTe19+Kfd9+zJ/9x1zVpbxLDOT&lt;br /&gt;
ecGCyGmuX29c589vpL97N/PIkXK9apW5Pl1/vTmNkycl/LHHIucXC5580py/OsaPlzqZmirxWreW&lt;br /&gt;
8J07ze9b6TZxInO9erGVRaWl05qZ+YsvmBcuZK5RQ56rehmpncaaf3bf//TTyGlOmmQ827bNOd5l&lt;br /&gt;
l0l4RobUSYWvvmKeN0+e1aljT7eNGyV8+XI516gRnv7QofLs44/tv8WaLiBlUjh2jHnQIKmn2cEj&lt;br /&gt;
j0jaS5Y4x7n7bomzdq0RlpXF3KuX1FVFB/04diycttZv7tjRvg04IT2d+YknpM9UUPl07Cj3ejoF&lt;br /&gt;
C4anoT9ftMgIV/3osGH28WNBx47MXbowHz8u3/733+Fx6taV9P/3PyPsnXeYgaUMgAHUZp/Gdv3w&lt;br /&gt;
TQLBzEcgCpQTAPwCYD6ACwFkMrPVuZQtqlUzxMV+YeNG4XBbtjSH33ILcIPL/qBs4arffNN+NmqN&lt;br /&gt;
H8tMOSsr3J7+669FpPfRR0DPnqIhXKiQt/Ruvx24887I8WrVsg8fMULOv/wiHPjx4+7pRPPNVrpG&lt;br /&gt;
ixdfBJo2FQ1lhTFjZMa4VHOSnpYGvP02sHu3zEKXLhU9mmnTwtN86CFZKjh4UEScdnj6aZF0qRnU&lt;br /&gt;
778b75YrF7ncAwcaGyW5wU0xsVIlMZuLBo88Ymi8L1kCXHCB+X+uWCH/76WXgJkz7dOw/v+WLWVG&lt;br /&gt;
p8pq1dP4+efsiV5//z37koxUrQfyYvqol9fJQmDGDGMdetQo4OabjXpw003GzFbVQ+tse1nIb+C8&lt;br /&gt;
eXLevj08Dy9tSZVVtSW97K+/Lss0btr648aJfsO8ebG3x8xM6Zus+W/dKnom3bqZ26P+nsLmkLeg&lt;br /&gt;
8ePlHG1ZZs8WKdW334qy4bBhxjNVJjtJaqL6q4MHzVLbnTulXB9+KN98zz3StzduHP6u6ofO5CUM&lt;br /&gt;
AGgM2eXragDNINuF3k5EBb287EWL9bPPoiuQ9YerRjtnjpz1CuymIGQdXB99VAbmSPnGwkCMHSv2&lt;br /&gt;
9ESGTbWqOLFoursxOjpWrJD1QKveyEsvyZkZKFwYKGjzN3/80bgmAr7/3vztR45EVWQTlDkV4Cw6&lt;br /&gt;
nDTJ6IDVefdu43nPnsDDD8sA/847xv+/804Z4PR6osr60kuiuKiDWTqhIUNkgFD1R/2fd98152uH&lt;br /&gt;
9u2BPn2Ae+91jwc4159nn41eoRIw/7sRI6TN6X4lXn5Zzn37Am3a2KfhxECqsv73v+bwBg2cFWu7&lt;br /&gt;
dzczf3a48srY3Dh36CAd73//C/znP0a4+lduW2TrdG/b1rjW6/Httxu0U3oHf/5pDKRWTJpkztMq&lt;br /&gt;
qrcbnFR+bgOXGoQefti4V1Bt2W0J9oEHxMKieXPRoVBpEBkM9ptvGvEzMuTZ5ZcbYXpd1suaL5+c&lt;br /&gt;
VXuzYuNG47pyZTkrfYhvvpHv99LnXXaZ6PtcdhmwbZuE2bWdw4fD04uFgXB7R9ft0FGiBHDhhXK9&lt;br /&gt;
bp0siemm9KqfPnBAlkR1k02FM5qBYOZbmPkDZk5l5lUALgVQFKIfERfojdkL5s8H3tDcWOmVe88e&lt;br /&gt;
IG9eWdu1PrNCab8ePQoUKBA537Fj7cOZ7SvBwYNGI9fXQvv3l5lzNGjQQGYVKj83LFlivi9VCrju&lt;br /&gt;
Ou9rfIMHy9mq6W/V/dAVKwFpQJMnG/moBrl3L1CzppkGuraxk07LzJmGsqDi8jMypDOaMcPoiBUD&lt;br /&gt;
qjo2QOilD8aKZsOGhSstMgMVKxr3jRqZ31E4elRmpV26hJdV1Tdd70JnkrzAyqTMmhVeDjUYKKhB&lt;br /&gt;
QUHlr9dHO4kMYDaXdapTf/xhny9gKOFZMWaMYZWzc2d42kWL2r8XCcwykPfoYW7/gPG99eub43sx&lt;br /&gt;
De/eXd4fNMgcrgalDh3ksEOXLpIns0gYVRr6N3fsKP/ol1/kvk+f8DhWZGYCnToJY2yN269f5G/S&lt;br /&gt;
oQZfNXjpZoMKqm/5QzPQ11XW9Pwj9T9ujOGYMUCRIt4GeF1RW1mHjRtn0E/9czs9E5X+kiXG90eC&lt;br /&gt;
U5k2bBDleScfO0oZv1o1Odvpnp08KQrbDRq4lyEnHMol2lI7GbI+46DnKpg7NzysRAkRQwNCZKvC&lt;br /&gt;
HuDd/ak+I9IrtJo1KO7Yi3hq2zbnfJmlYk2daihNWSva3XdLx330qAxmKs8SJWRQW7vWXI5Ro2Rm&lt;br /&gt;
4cb5MsvMZuRIsZf++WeZVfz1l2g028VXsHN+smSJlMcKOw3sZ58NpwdReDmtM/n166WztGLuXGDl&lt;br /&gt;
SmNW+u+/xqwYMJgJOzqoQWroUDl/8glwxRUyU7TOOvI67AqjVjO9Qkm0fv5ZGB+FHj2E+dDp/957&lt;br /&gt;
ZvNjxcRMmACUL++983KDPtMcNcr8rGlTgxEmMjovLwrC+vKeHl/28RHoiqRWZUcr0zxyJPDUU8b9&lt;br /&gt;
7t0yI1ODoIJdu9cxYIB5eUJh9mw529UTOwb+kkvk3zz1lCFKt8OPP8ogYbW/j2ZmOH26SBgV866/&lt;br /&gt;
O3mynKdONdNW4fvvgeefd8/brv4yCxMYiZ6KXk51IiMj3HzbSuOsLGl7RPazaB1+WKmpPP/5R5YK&lt;br /&gt;
AZlIAsCWLeHxVfnr1bNfEly9WpYVMjIM2j75pL0Tu4sukvMyj9ta6dYnCmoys2SJu58HJRlOKBKh&lt;br /&gt;
aMFCZYLsO/6DS5zaABgQJUo7RZlKleRcpgyHxXnnHQl78UXm5GRDucRN4ebjj40wpfTVqZOc8+Zl&lt;br /&gt;
/vBD5vvus0/rt98kL2u606YxHzpkhFWubFw/+qjEee89US6yluuzz0TpTw977rnweFOmyHnECPvv&lt;br /&gt;
szvat2d+5pnw8IkTvafh5ZgwgXnwYOO+XDmhoR7nvvtEMdEtHev/SUsLL3+rVhJv7lz7NPT/oB9W&lt;br /&gt;
RSwnOmZmMt9wg3MZGzeOnj4K5cqFp8XMfM89cv/XXxyGe++NLq8tW0SJUacjwLx1q/M7K1c6t50h&lt;br /&gt;
Q0RRVQ9Tipp79zqn2aKFMx3s8klNlXPnzvJ81izm5s3d6anSKVRI/juzKO3p316vXvj7lSoZ+dkd&lt;br /&gt;
tWqZlSj149xzRcnNGv7EE97/0SuvRI7z8MPm+8mTDWVm62EXruhhDVdKhMzM3bszV6tmfj5okCgc&lt;br /&gt;
fvSREda/v3M59+8PD1MK5IAoKkdTf/PlCw9r2NBbPXD6FwsWuOdZuDDzHXc4P8+TR85//x3erznV&lt;br /&gt;
53btzOVTyuJAeNuMdOjp//e/1jwTq0TpewanMgLeArABQAWXOKcYiFdfjUzI6tXN923bMp9zTuSf&lt;br /&gt;
qT/TG4ZTRQGYZ8xwTsvu6NbN+ZldI/P6rjomT/ZeFnXccYc9A9G2bfRpRTp69jSuy5cPf67/J6cj&lt;br /&gt;
K0s05NX9a6/ZWyE89xzz9On2aXTtah+umER1vPGGczmaNnV+ZjcgRToUSpe2f9a+vVyvXy8MzLRp&lt;br /&gt;
hmZ9tHlNmsR8zTXh4ePHO7+ja9Z7yWP7dhlkVq50jtOsmTMdlEa5figGuW1bwzohEj318tasyfz7&lt;br /&gt;
7zIJ0OPWrx/+/vnnu6dfpQrz++87P581Kzzsscei/1dux0MPhYc51Xm747ff7P9no0YyCC1ZYv/e&lt;br /&gt;
K68wv/6693xKlnR/3rlzfOmiH5MnC7Nw5Ig5XFmMxPtYty48bOdO+7puZSCyk6/+fps21jTPQAYC&lt;br /&gt;
snnWZgAXRIgXYiCuZaCV5ZgcNaEPHnRu+BkZQnTVUXk5Lr7Ye1y3QWfPnuxVIMC+kkY6KlTwxpzE&lt;br /&gt;
+7BjILwc27ebZzuvvOJsxuh02A0YQPhM/u23ndOIRcrgdiiUKhX+rG9f6RQA6aA++STx/0svo5e4&lt;br /&gt;
L77IfN117nGaNAkP++QT5zyef964Jopc1qyscMmI3eE0e410VKni/MxultyjR3z/x0UXhYfNnOn9&lt;br /&gt;
/d9+Yy5ePLbv+9//4vstfh/Wtty9uz/52EnV7KTF+pGZmX0GYvNmdT2ZgVZcq1YrrlBBjZPX8hnF&lt;br /&gt;
QISYh38AVPEQ95QEIh4/WImC7Y7ChZlPnIhtJp/d45ZbEp9nTh4VKsQnHTVbikda999vvh82LHH0&lt;br /&gt;
GDNGBrxIs7UffojcIfl11KrF3KBB/NJr1Mjbf4jl+P575scfzxk6OR1ug3W8jrfeil9abkx+bqNt&lt;br /&gt;
tEeXLonL68473Z/ffLP7ZCX7R2IlEBQauH0BEb0JoDOAgwBKAFgD4LmQHkSY8RcR1QawFFga4iX8&lt;br /&gt;
x4cf2ivvBYgfSpSIfktfJ5xzjndlWTe0bBnuWyNAgAABsoOc71eWIWTkWIeZPapuxg6/rTB6ACgI&lt;br /&gt;
oDyA/ACuBDAXQFef8/WM77/P6RKc+YgX8wDEh3kAcrqRBwgQ4EyEm5v+MxF+MxCLAYxi5iRmzgMg&lt;br /&gt;
D4BtAIr4nK9nvPdeTpcgQIAAAQKcCVB+cM4W+LkbZz6ILOVbFSbKI/gGwDV+5RsgQIAAAQIE8B9+&lt;br /&gt;
SiBKQyQOVp96uyBLGgECBAgQIECA0xQO/vdyGikArDtodQgdAQIECBAgwNmOKaFDR5pdRN/gJwOx&lt;br /&gt;
F0AmAOtehOUAuOx0DwDDkSgrjAABAgQIEOD0g92k+pQVRkLgyxIGEVWCeJ7MBDCdiP4iov4hvYgb&lt;br /&gt;
ACxyTSBAgAABIuDtt4Hk5JwuRYAAZy/80oG4FLL3xWAAJwF8DuBRAEsAFAIwwad8AwQIcJbgoou8&lt;br /&gt;
bYEeIEAAf+ALA8HMXzHzA8zcF0BPAO0gO3FWA3ATM+/xI98AAQJkH6+9BuTPn9OliIw8ecT3nkKk&lt;br /&gt;
7Y4D+IO6dXO6BAFyCr5v583MbzJzZQCvAljFzL/5nWd2cdNNOV2C+KFHD6BrrnHbdXbjf//L6RJ4&lt;br /&gt;
Q8+e4vEzt8O6bbTTluwAcOGF/pblTISi76uvusebOtV8n+T7qHL2IRJDP2cOkC9fYsqiIyG/mogu&lt;br /&gt;
BvAYgLcTkZ8T1qyJHKdXL+Daa437r74C5s3zr0xu+OAD8/3NN0efxltvAYUKxac8icQllzg/sw4c&lt;br /&gt;
8UaLFv6km90G7kaTeIIo/p1RxYrxTc8OWVnOz9au9T//RKNoUX/Tb9JEzsUtBnFXXWW+L1AAuPxy&lt;br /&gt;
494Lo3z//dkrm46cWMay0sRvuNVtQMYGv/tFO0TFQBDRICLKcjkyiaiq5Z1zAXwJ4GNmHhfPwjvh&lt;br /&gt;
4ovtw71u+6H/iObNgWbNvOddtiwwZIhc9+8f7uny9tvl7DbDO/dcOVsraaycfefO5vtevaJ7v3//&lt;br /&gt;
6OLHMgDv32+eQT72mH28efP8G+AVop19e+3I8+SJHOepp4DbbrN/dt113suUXbjN5mOBdQY1apSc&lt;br /&gt;
9br4+OPRpckMnDxp3LstYcT7e3ID9Pp0113xT//uu4EBA8wTl2rVpI7qyJ/fPMmqWTNy2kU8+iJe&lt;br /&gt;
ty5ynKFDvaUVL1x9NXDwoD3NW7b0J89IDARwGjAQAIZAFCSdjuoANqjIRFQRwHcAfmTmh7xnkwKi&lt;br /&gt;
1mjVqjUAdVjtXZ2xbp10TPXrA+U0I1IrA5GRES7azMoyd0oKX34JTJ8eOe+mTYUDT08H+vUDihUz&lt;br /&gt;
Px8/Xs52eSg4LaHYDUBEQNWq4eE66tQxxylQwD2+FddcA7z8svf4sYiLS5Qwz3qdGkOzZrE1lAsu&lt;br /&gt;
8B432tmF19m1FwY2b17g9dftn73wgrd8vv02chzAYCzLlJFzs2bGf9alcAr6LDNaWCUaahZbW7PW&lt;br /&gt;
dqrHbm0lPd24rl8//LliVPzuXPPnD2fUvWDkyNjd6etMUYUKxnXz5sCgQea4kb5fT0sx0EWLAn37&lt;br /&gt;
mhnkDz4ASpUyv5ucDJTXXAN62a/GCzMNeGtbbsxhq1b24Xff7S1/ALjhBvO9omXr1uFxp03znm40&lt;br /&gt;
uO8+OZcvDxw6pJi0KVDjY+vWrZGR0RriQymB8HEb73MBrAUwCZBdP6Pdzps5ti1NdUybZoSvWmWO&lt;br /&gt;
l5UVnsfTTzNffLF9WmlpRniBAvZ5Hzlifufjj83PMzLs38uf38gvNVWud+40x2nTJvy9AgWYq1b1&lt;br /&gt;
Ros//mCeO5e5f3/vdFy2TM5ffWUf55lnmP/zn/Awa7waNcz3+jbO06ZJHoUKGWFvvMGntr+1lqll&lt;br /&gt;
S+91YcAA2Y64cmVz+LffOn/zvfdGV9/0+uJ2DB8eOU6fPsxbtzqXzUs+e/dGjvN//8d89CjzJ58w&lt;br /&gt;
t2ghYf/8Y9SVY8eY1683v3PFFc7pNWvGXLo084QJ9s/Vu88+a+SxZo35m44di+67v/2WecUK497a&lt;br /&gt;
1tS7Cips3z7mJUuYO3Qwx3300fD3jxxhnjTJPV56engeXg+399y2Or/qKuZy5Yx7fctL3wReAAAg&lt;br /&gt;
AElEQVRtuzQnTGDu2tU5vWnTmOfMkeu+feU8ZYqkc/CgEW/FCuZvvjHu69ULz+/1153zadRI8vK6&lt;br /&gt;
Rfjx4+Z71U/q/W9amrTvYsVkG3q9/bZqZX7/wQelDx45Uu6HDDE/f/dd5ocfNocdO8bcr59xX7++&lt;br /&gt;
8c0VK0pYqVJyzsw0vzt+PHPv3sb9okWyDfsPP0RXT1S6DRtKvjVryv2vvzIvXChhhQszJ3o7b38S&lt;br /&gt;
BSoC+AvA1wAqAVgNIAvA9RHeqw2ACxRYyi+8YN+wfv2V+dAhd2Lr0BmIlSvt4+lhPXvKYZeWHrdd&lt;br /&gt;
O+b33jPuFy82OkQdU6eG56mur7vO/P4rr4S/v28f8/LlRp47dxoNHWBu25b5kku80UJBMRBujIf1&lt;br /&gt;
XScGYtgw82A8dCjz4cP2aT3/vHzL0qXyrQBz585GHgULGvFHj5ZOXmfaVDq33moOu/56529RqFLF&lt;br /&gt;
CGvQwAhfvVrCmjRhHjVKwpwYiKFDmcuXDw9/+WV3OgLMF10kA41eZ+yOF19k3r49PHzDhvC66vbf&lt;br /&gt;
9Hs7ZlfHTTdJ2O7d4XVFH6RUp2U9RoxgPnHCeCdPnvA4zz4r5169wvNQcbKymF96iblaNffvUce3&lt;br /&gt;
38qz+vXlftYs49lzz5kZIj0NhbvvDs9nxAh7Oulh1kHNLg8vx6RJxnt29Xf06PAyquPkSXP/MXeu&lt;br /&gt;
e5mZwydQ+jFrlvGeooEdA5GVZW7v+mCqwpwYYID5t98k7n//K/fz5xuDMMDctKk5vj4gL1jAvHYt&lt;br /&gt;
88yZBgMAyHiQkWEwcjoT27q1cV2kiFFWxeS8/z7z5s2RaccszADAfM01Rpgqe7Fi9nVV4aefhFFX&lt;br /&gt;
cKOR3cEsTMe+fXKt2mJGhpHm778znykMxP0QJ1KZIcZBfVRmhPdqA+ClS5eafmTevAYhlyyR8H37&lt;br /&gt;
pMNzIrbCJ5+YG91jj7lXlq++ks7QLi09bvv25sFAn4XocGMgrNdOyMhgvvZa4f6ZDe710UeFO9Zn&lt;br /&gt;
wAMGGNcffWSfnoqjv/faa0YDAYRR06EzEHfcYXzX4MHMs2e70/Tvv8PLkJYmnP7x40aYGujKlmXe&lt;br /&gt;
ssUIr1PHnP6mTcb95ZcLU6I64Esvte9M1bfu2yc0U1BMZbduRlinTubyqxno8uUyI7XWt7VrjW/W&lt;br /&gt;
66p+WOn599/MJUow33671MsdO5iTkkT6ZNe52NFVPypVCi8LwFy8uOTl1kZuvFHCDh4M/086A3Hl&lt;br /&gt;
lczz5jFv3CjfY6WbQokS5ryysmSgAOwZiJEjpU4rZGUZ786d6/zd339vxJ81y/yeHazP7rpL7j/8&lt;br /&gt;
UMrHHC4lUli8WO6TkuzTsubhdpx7rkjbdBw4EB7vrbecGQhm5v375ZrIvkx63WA2mGV13HOP9GOA&lt;br /&gt;
NwaiXTu51xkInRnX82/UyLnczEY/vHixpK8mNXofVLWqxFWSGCdaHz1qDh83znj211/SBlS/onD4&lt;br /&gt;
sDAxx44ZDHudOuFp79xphKWnS5jOQKSkSJia/OjvOtVDZmnvVtoULepcZ6xQDERmppUmiWUg/PID&lt;br /&gt;
MZFl++5bAaRCdCMYwJXZTVutP5UsaazdKvz0E7BsmfO7efLI+rLTeuzcubJ+mD8/0K2beV3PCqtC&lt;br /&gt;
o9M6nFVjWSGaNdm8eYEffgBq1JD7xo2BMWOA4cPD9Rnat5fz/fdHVqxSijm//SaKUbpmdL16zu9N&lt;br /&gt;
nQoULizXx48b2tp2qFwZqFIlPLxYMeDNN80Ki8xy3rULOP/88HeaN5dzpUqGnsCCBUCtWgY9ly+3&lt;br /&gt;
1yEZOhS47DKpNzrNMjPlrP9PVQ5A1v07dpSwWrXMFi1t24qCqW4dYVduIPx/V6kiiqOffCL1snx5&lt;br /&gt;
Kcull4oS7dixwI4dkS1o/vkH+OILI32lR/D226KotmmTPf11qG+3q8N6ufPkET2JypWlXg8ebL99&lt;br /&gt;
8Y8/hqehaGpX7x9/3KxzQQQ8+aRcu5lUq/ISyVp3tHoOqkwNGwLXX28OA4ApmtqVascqj0WLpK7F&lt;br /&gt;
gg0bgAMHzGHJycB558n1W2/JOZLpXokSwOrVwJYt7vEmTpSzTp9x44D33/em8Fi8ODB6NPDOO+HP&lt;br /&gt;
vCh233yzHD16GGF6fShe3L6vVZYz48aJvpoTChY03yvvpCNGiEL9wYNCywEDjDiFC4t+TIECxjco&lt;br /&gt;
5XUdug6d3bcOGQIcO+ZePjvYpaX67mhgrfNO+lN+wc/tvMsBeBdAJwDHspNW5cp6us7xGjQArrSw&lt;br /&gt;
KHbx1aChsGiRVFI1QAGi2LRjh3NeSUnmtJ3KVbmymZcEpDEuXeqcdiQQAQ88YDBCd95pPLv4YlHu&lt;br /&gt;
6dMncjp1Qi7Ty5Y10vWav1J+u/lmGeT+/RfYo7kHm+Jd5/UUrP/OCl1B6dFHhdEoUcIoE+CsINq6&lt;br /&gt;
tXS2VigmSlfqUkpgGzcCq1Y5l2fGDFGU1el2zjnAzJmilX7PPUa4VfEsErp2lU61Z0/75yVKSH06&lt;br /&gt;
7zzglluENv/9r/H8oYfkn6jOVOi0GdLk3z8Vr3///vj66yS89FJkZkXv9IiAp5826K+jWrXwMDcG&lt;br /&gt;
onLlyuhqcVYybFh4OwWMugrYMzzPPGNT8BD69TMrA6sy6d+l08BN0e6aa4ShjBZz58pgZsccfPSR&lt;br /&gt;
tOuLLpJ7q9muHaN+2WUG42GF1dpK0f7qq4EuXaTOq2/Q+1g7PPIIULq0OR3A2RxTZ8SIxE+BYoys&lt;br /&gt;
zwGD8bWzoEtKsv/XxYrZD5ht2kif/sQTRtiJE2YGRof6nkj9n6onHTqYwwoUkP+q2p/T/9Bhp0Sq&lt;br /&gt;
K9NWrQosXiwTCjs4tadEO1Pz0w/EeABvMnOMfLpg/nyZZSrEasrYpo1xbTWJyZtXGlQ0MxidgVCz&lt;br /&gt;
F6945JHIg2U0GDjQuM6XTwYw1Qm5oUsXYOtW51mzDittypeXSqy80BUpYnQwgNH5WjsKN3z5JbBi&lt;br /&gt;
hfNz6wCmDyYjRthr4UdCtWoy89A7FyVdcTLPbNgQmDw5PHzYMODzz4VZadYM+PBDqWtr1kSWAjjh&lt;br /&gt;
xRe90bBuXcPiwA4rVgjjCpgHeCJCUlISXnghcv136oCtsGujbt+QlJQEsmROFJ5O7dpAaqphtle6&lt;br /&gt;
9HE88MADuOKKK5CcnIyiRYviq69qYeTIUThpY7rRvz/w3HPh+etZZ9fp2j33mBl6heRkkWS5SVQa&lt;br /&gt;
NhTJ4o03AuvXi6RRza6/+krqVixQtFfWRe3aGc9athRG/Iorok8PEEmtwpNPmvtZL2ko2jdpAmze&lt;br /&gt;
DDRq5L0caWn25t5EwuDFG0qSpjPqCjfcYLS/f/6RydT69c5pWet2x47msFGjROr1yy8ykbGibdvo&lt;br /&gt;
y+8HorKOJqJBAJ51icKQ5YoWAIpAvE8Csi9GTLAOzl5EbjpUBdUHl2LFxBQmO3j1VeDrr+W6QzZ2&lt;br /&gt;
GX/55ew7hIlWdKvM8c47z15sFy/Urg08/7z3+MnJ9psjVa4sEhs3/ww33RSbB9HChYWJ0jFihDAA&lt;br /&gt;
TlIDq4heIcXGgooIqF49+nLFG+efb4jh9Vl2nz590Lt3b8f3lJlkNIwgEbBwoQyACm4SiLVr1yIp&lt;br /&gt;
wsxg3z6Z6RUqJGbSDz4IZGQcQ2pqKlq2bInKlSsjKSkJixYtQkpKChYvXoxJkya5pmn3TfnyydKS&lt;br /&gt;
nfTDCz78UM4DB8osslYt4N13hcGLpp2qCcDQobJ0eeON0bdza/yKFUUKZ62POiMOGFIJp9mv1TRd&lt;br /&gt;
Yfhwb+UAjHauSwyjMbXO7Shd2jyhskKnydGjhkSKWfojJcUoXtzerLxfP+BZt5E4QYjWvcoQiGTB&lt;br /&gt;
DRsBNAFwDYATlpnFb0T0ITN3cUsgJSUFxcOoJluXRtuImjWTpYkuWo5LlgArV0aXjkKTJiIVOfdc&lt;br /&gt;
46d7tWm2g92MKFZ49e7Wrp2sjVeq5D3tWOzos7NMo+Pdd4XrT5Sr1uRkoFOnxOTlhKNHj6KQy5pC&lt;br /&gt;
NAO6glpuuPVWIywpKQn5XRbbY6W5dSapBAJ2ouh8HjIpWdJ8L46ISmDRIvPGvg8++CCKFSuG0aNH&lt;br /&gt;
Y9iwYShrHR01ODE1dssyCl7bgfKFkpTkrAflBSVKGPogkdC0qT0DrteVyy6LnM5118ns3olR8LL3&lt;br /&gt;
hZ6nrkeg0KePMCheynMmQtWj5s3DdTi8LIEQAZ99NgVTLGvFaWlpcSqhR/ihmQngPAD/0Y5mEIuM&lt;br /&gt;
NgAqurwXZoVhaJfaa6Nu2yammm+/Hf7MDxw/LtrPzKKV++KLZhO2nEJmpuHXIlpMnjz51LUTnefN&lt;br /&gt;
i6xZnJuwaBHzjBk5XQpn6DTv168fExGvWbOGO3TowCVKlODatWszM3NqairffvvtXLJkSS5QoAAD&lt;br /&gt;
dRmYxcnJRlr79+/nnj178hVXXMFFihThYsWK8c0338wrlNlOCJs2bWIi4okTJ4blrdC5c2cmIttj&lt;br /&gt;
wIABzMycnp7Offr04Tp16nDx4sW5cOHC3LhxY56vTBlCkPqSxSNGjOBKla5goAAXLlyGW7RoYWrj&lt;br /&gt;
lSpV4i5dukT9PU4YMmQIJyUl8VplkmJDc2axKgCkD/ECQKxsvODkyXDN/nggmjao/A989118y8As&lt;br /&gt;
FmGLFzs/b9BA8u7YcTKnpUWXdqL7GeVv57bbElcGZereo0d80126NLFWGL44eGXmrQBARC0B9AFQ&lt;br /&gt;
E6Jv8RgzR+EY2sCtt9qvI1esCNxxR+xljRbnnGOI0vPl86asmAhkZwObKVOmoENoHeaLL8I1xE9H&lt;br /&gt;
+LEGGk/oNFdSuvbt26Nq1aoYNGgQmBlr1qxBw4YNcd5556F3794oXLgwHnlkKoA2yMiYAUB8Xm/Y&lt;br /&gt;
sAGzZs1C+/btceGFF2LXrl145513cP3112PNmjUo72JOREQm/YMePXrgxhtvNMX58ssvMXnyZJQL&lt;br /&gt;
TSUPHTqEcePGoUOHDnjwwQfx77//YuzYsWjRogUWL16MGiFzoQ0bgGee6YqUlImoU6clNm/ujqZN&lt;br /&gt;
TyJv3oX45ZdfUDukiWvVf4j2ezIyMnDo0CEcO3YMS5YswdChQ1G5cmVcbNHI02kOyNLAjBnR7RXj&lt;br /&gt;
VQKh2mNOuBdW8DNvZRHmBPWL0tKmoFixbKzxJgDKrba+BFqokKFk7gcKFxbLuuxIp3IF/OJMANwO&lt;br /&gt;
YB+A7gAaQyQQ/4vwjqMEIoB/aNWqVcQ4ym753XcTUKCzADrN+/fvz0TEnTp1MsW54YYbuFatWpyh&lt;br /&gt;
eYtZuJAZaMhJSdVOhaXbOCHZvHkzFyhQgAcOHHgqzE4C0b9/f05Szg1ssH79ek5OTuYWLVpwVkjE&lt;br /&gt;
lZWVZSoTM3NaWhqXL1+eu2mOIb777jsmIk5JSeETJ8Rm/t9/w/OoXLmySQLh9XsUPvroI5OkpF69&lt;br /&gt;
erx69eqweNZ6fvKkvfM3JwDM+fJFF793b+/xvUD5RPGC6dMl7rp18S2DFxw4wPzpp976FiuipXM8&lt;br /&gt;
cORI7BLc3IQzQgJBRHkAjADQk5knhIKzoSkQIKehrC4C+AMiwkMPGdvFHDhwAPPnz8dLL71kWtcU&lt;br /&gt;
BbjmyMoagB07dqBChQomHYKsrCwcPHgQhQoVQrVq1bDMzTFKBBw9ehRt2rRBqVKlMHny5FOSAiJC&lt;br /&gt;
3pAyAzPj4MGDyMzMRN26dU35TZ8+HUlJSejbty/y5xcrFS+I9nuaNm2Kb775BgcPHsS3336LFStW&lt;br /&gt;
4PDhwxHzyZPHXwXXPXvc9Sliwc8/e1fwbNdOyuCmzOcXkpPFImNcDNsnrl/vfbOteOF03LE4N8Av&lt;br /&gt;
M87aEHfWIKJlRLSdiOYQ0VmqMhMgQGRcqO1Ctn79ejAz+vTpgzJlypgOoD+SkoDdu3cDkEF8+PDh&lt;br /&gt;
qFq1Ks455xyULl0aZcuWxapVq7KlVNWtWzds3LgRn376KUpYRsKJEyeiZs2aKFCgAEqVKoWyZcvi&lt;br /&gt;
iy++MOW3YcMGVKxYEcl2mn0uiPZ7ypQpg6ZNm6Jdu3YYPXo0WrZsiRtvvPEUfXIKpUtnT8HaDvny&lt;br /&gt;
RbcZXk4wD9nFRRfZK14GyH3wa5PbKhDTzX6Q7cE2A3gKwPdEdAkzH3R4rwAApKam+lSsAHZIS0vL&lt;br /&gt;
1kw1QPTQab4j5LFs3bp12LVrFwBgzZo1AIB7770X9R0cXBw+fBjLli3DmDFj8Pbbb6NNmzbo2rUr&lt;br /&gt;
ihcvDiLCkCFDbPPZtGlTWJj1/0+ePBkff/wxBg4ciIyMDNPzOXPmoG/fvmjatCnat2+PkiVLIikp&lt;br /&gt;
CePHj8e2bdtOxT106BDS09Mj1q309HTs27fvVDyv3+OE6tWr4/Dhwxg1ahTaaU4P4lHPy5Z193Yb&lt;br /&gt;
wIygb0kstLEzyj2XYwNxFHLpKPxA1AHwIYDuzDw29G5+AFsBPM/MthvYEtE9ofcCBAgQIECAALGh&lt;br /&gt;
IzPbuLuLL/zwA7EBoeULyD4YAABmTieiDQDc3IV8BaAjgE0AjkdZtgABTlc8CFE2vgGA7uLsbQCX&lt;br /&gt;
ALgTopCsIxmAkuRNAnAYgO4rshmAVwD8poWXBzAbIhn8wpK30gcvBWAypB0/ApkUWDEYQFWIWbbC&lt;br /&gt;
5ZC+YQeA1qGwOgDeATAFwFCbdBQ+D5VT7Vbg9XuKA7Bbo3kGQPtQvDh5IwkQ4LRAAQCVIWOp74iK&lt;br /&gt;
gWDmfQjvyMJAREsBnABQDcCiUFg+yIdtjpC+71xTgAC5CUSkdl1Zycz7tfD7ASyEtIn3IIN6OYiT&lt;br /&gt;
tnOZ+cpQvKkQc+nHIO3tCggj/jeAw8y8LBRPuQ7brIXtAADtfhpkYJ4MwOqLcCUzryKiSQDGAegL&lt;br /&gt;
YUSqAHgIwB8Aiqi0ACwjokaQ/XCSAcyF6F01BvAdM78ZyjMdwD6tDF6/5wkIk/BZiDZFAdwEYTZm&lt;br /&gt;
OUk6AwQ4w7EocpT4wC8/EP8S0dsABhDRVgjT8AxkNjPN9eUAAQIAAJg5lYjqQiQG90OkA7sBLIcx&lt;br /&gt;
WweA/wNQCMA9EGnFUgC3QGbsVgmCnURBDysNsZiys5kYAGAVM08IbZb3EIDmANZABvg7AVxreacz&lt;br /&gt;
gBUAHoBILtIgUgS3Ts7r9/wIYabuhjBWJwGshehdveGSfoAAAeKAqHQgokpYTDkHAbgXQEEAvwJ4&lt;br /&gt;
kpkDDckAAQKcAhFtATCXmR/M6bIECBDAO3zbjZOZM5n5Gcg66Oeh81IiWkFEtf3KN0CAAKcPiCgv&lt;br /&gt;
RLKyN6fLEiBAgOjglxknAICIkgH8BOBbyNrkXohS2BngLDlAgADZARE1h+ySVwDSRwQIEOA0gm8S&lt;br /&gt;
iBB6AdjCzN2YeSkzb2bmb5g5bIdzInqUiDYS0TEi+oWITncv4QkDETUmollEtI2IsoiotU2cF0MO&lt;br /&gt;
vY4S0Twiutjy/BwiGk1Ee4noXyL6hIjKWuKUIKIPiSiNiA4Q0RgiKuz39+U2EFFvIlpMRIeIaBcR&lt;br /&gt;
fUpEVW3iBTR3Ry8ATQE8x8yuDAQR9QhJL9NCxyIiamGJE9DbRxBRr1D/MswSHtA9TiCifiEa68ca&lt;br /&gt;
S5zcQ28//WRDtLKHApgKYBeAZQC62cS7C2K2eR9E8/sdAPsBlE6EP+/T/QDQAsCLkN2VMgG0tjx/&lt;br /&gt;
NkTPWyHmdp9BNNrza3HegpjPXgfgSoiS20JLOl+G/mFdAA0ArAMwKae/PwfoPQei21MdYiEwO0S7&lt;br /&gt;
ggHNfaN5y1A9vwjAxQAGQiy9qgf0Tgj9r4JYuiwHMEwLD+geXzr3A7ASQBkAZUNHydxKb7+JcQzA&lt;br /&gt;
UQAvQXbk7B66v9cS7xcAI7V7gjideianf+jpdgDIQjgDsR1AinZfLPRv7tTuTwBoq8WpFkqrXui+&lt;br /&gt;
euj+Si3OTRDN9/I5/d05TPPSIdo0CmieULrvA9AloLfvdC4CsW5pCmA+zAxEQPf40rofgGUuz3MV&lt;br /&gt;
vX3VgYAskSxmZrXp9Qoiuhxiu/0BcMo/RB0A/0dEpUIfsgnCHbUgom98LuOZiCqaompFiAOh7Rbl&lt;br /&gt;
1T8A3EZE6yGzi7wA9lri7ATQnohOQpwDHQJAWpx9ELO6DkT0g3+fk+txHoQO5UK0CWjuLwjAjQAK&lt;br /&gt;
AzhIRLcioLefGACxojsIYSbKBvXcN1QAUI2IdkMYgZUQk+Rd8EbvBhB6L1cPmXktiaXTNQAWA6gP&lt;br /&gt;
4AAzL9fS+AZC76sBzPRcWp+5qU0A3rWE9QDwj3ZfAcINXQ2x++bgCI7gCI7gCI7giPm4xzLu/gpg&lt;br /&gt;
UOi6N4BUm/F6F4CHcpME4ieI+ERHNTh7o9wEAJMmTUJ1P/fZzWEwA/v3A6VK5XRJBCkpKRg+fHhO&lt;br /&gt;
F+OsQkDzxCOgeeIR0DyxSE1NRadOnYDQWOo3/GYghgP4iYh6QxQprwbQDaILobAXovhXDqL3gOrV&lt;br /&gt;
q6N27dPLVcSrrwK//AJ8+mnkuCNHAk8+KUyEZZfkHEHx4sVzjN7MwMqVQM2aOZJ9jiEnaX62IqB5&lt;br /&gt;
4hHQPMdg3Ui+HGTZCKGz1SojD4CSWhxP8NWMk5l/A9AWYuudCtlpcxEzf6TFyYC4qr3Bz7L4jV69&lt;br /&gt;
gM8+8xb3p5/kfOiQe7yzAe+8A9SqBfz5Z06XJEBuQJs2wIQJOZP3woUiFUxPz5n8cwKzZwNEwNGj&lt;br /&gt;
OV2SAHFGPXVBRNUgm1j+HAr6GUAyEV2pxb8Bolv0azSZ+O0HAsw8B+IHfyuA3yEKH1YMg0glWvpd&lt;br /&gt;
ntwAIn/TV0skpwP++kvOp0t5A/iLmTOBLl1yJu9hw6Qe7j2LfGJOnCjnfRG3SIwPjh8HChUSZi2A&lt;br /&gt;
r/gfEV1PRHUgG9/9xMyLAYCZ/4Ts1vkeEV1FRA0BvA5gCjPnHgkEABBREcj2vN1gbD9sAjNPBfAU&lt;br /&gt;
gIf9Lk88sWaNDNbRIpZ3vOLIESApSWZSaXYbHQeIiPR0YGmwCfRZB8XY+9k+/cSttwJVqkT3TqK/&lt;br /&gt;
ddcu4Ngx4M03E5tvbseqVcCjj8Y1yYUAPgHwPcT083bL83sA/AmxvpgNYAFkc7yo4DsDAWA0gM+Z&lt;br /&gt;
+Tu3SCxb+94ar0wzM4H33pOzGzIygPHjvTekWbOko1m5ErjsMmDs2NjL6Ick4p9/jGu7JZJ584Cd&lt;br /&gt;
Fh6zQ4cO8S+IR+TGTvvZZ4G6dYHDh7OXzqpVwDcORsg5SXMdR44AGzfGJ63WrYEff4zt3ZMnpS36&lt;br /&gt;
iUg0z4110Q21a0vfpfDFF7H/S7+kok40P11onCjcd1/cmarBzFyamYsyc3tm3q0/ZOaDzNyJmYsz&lt;br /&gt;
cwlm7s7MUS9k+cpAENHdAGpBzEbiisOHgddft6+IzEDXrsCDDwJTpwIrVshhh9dfl7heRWpjxshZ&lt;br /&gt;
id7XrYu+7H4iSfujdrRp3hxo1swclhsGs2g7lMmTgcI+ObpV+hjZHdBq1ABuvFGuf/tNOumRI+U+&lt;br /&gt;
WpozhzN+8cBtt0U/a7XDd98Bn38OPPJIbO/Xrg3kz5/9crghEs1V2/FzcDtwQJi27EAxtsuXZ3/W&lt;br /&gt;
6vdAbqV5NIzKvn25r3/1C4ouWVk5W45o4RsDQUTnARgBoGNIUTJqpKXJgGe3JtmvH/D448Dq1XKf&lt;br /&gt;
ng68/LJ0+pMmAe+/L+H794uSXq1a9nmoWfrx43rZgcGDnb5LztlpeH42Wr2BOlVGXUrhhK+/FlEj&lt;br /&gt;
APz+u6S7Y0f2yxcvvPRSuOLXqlVSVivWrAFuv9174/RjJnpVaGeXUaNie3/YMKBChfgr3ka7Fv3v&lt;br /&gt;
v0C1auEd+w0hFehYabZqVXgYEfD8887vbNokcX75xQgrUCB2JUz9v588CXTuDGzdGltaOjIzgXPP&lt;br /&gt;
FWlUyZLOfZEXzJwJFC0q367KGg+4DezHj+eMwnft2lLXvGDbNv8lWIlAJIl5JDz+eHzK4RV+SiDq&lt;br /&gt;
QPx5LyOiDCLKgPjmfoKI0omcq2xKSgpat26NJk1aY948OU+ZMsUUR3HxiuAffgi88ALw8cfAnj1G&lt;br /&gt;
vMce81ZYa0N8/XX7eGqWEg9O8d57nZ/FWpF0CYRTGSPNAtauBW66CbjiCmnAM0N+yZYvD4+7bVts&lt;br /&gt;
nVhGhnTO8RSd1qgBXHllePjTTwMzZsjszwu8MBA//STxohUZx9rJ/RzSn85py53ffxfm4b337J8z&lt;br /&gt;
C8Mfr878//5PzgMGGPVQYeVKOX+rbcN14oRMJGKB/t/XrhUFw/79Y0tLR3o6sH07MHCg3K9f7/3d&lt;br /&gt;
rCwZFDaHPOfMny9nJY2Kph/asSO2JY5GjYDixeV62TJnaW408NJnbNliH75/P/Daa+Y0zjsPuP/+&lt;br /&gt;
7JcrVmRlZa/Oq7oXTb//2mtTQNQaTZu2RuvWcqxenRJ7IWKAnwzEN5CNhmpB9sGoCeA3iEJlTWbn&lt;br /&gt;
KjR8+HDMmjULPXvOAjAL3bvPiih+7NpVzunp5kHUK6yl0SUSOlTaCxbI2esAmJkpHZLe4FUaVixY&lt;br /&gt;
AOTNK51YtNC//cAB6bSs36bKPHOmMF5WKOXLv/+WwcLpGzdskIb7wQfeypaVZUgIHn8cOP/82Gf7&lt;br /&gt;
0TAesc7S3N77/ns5r1njHMcOJ0+Gh/39d7g0JT1d9GuYgbZtgenTJTy7MxRrWdxMFg8dch6gTp6U&lt;br /&gt;
Qd3aTpiBMmWM9hgv9O8vJp52sDJVsTL3X30lZ2Z/pFCx/Lvdu2UyU7ky8L//hdf7aMpXsWL4cpV6&lt;br /&gt;
3+1/6QrFdepkT4ISy4TB2mZeeAF45hmjfxw9Ws6qjbhh9Ghg7tzo8vdC4x49jCW4f/6R71y8WO6z&lt;br /&gt;
sgwG0IqxY8UXkBMDwezMcCYndwAwC82azcKwYbMwa9YsVKmSWKddvjEQzHyEmdfoB4AjAPYxc6rb&lt;br /&gt;
u7fcIh1bLI2YOTYG4uhRs9KcmklZxfYqbVVp3RrEkSNG5/bxxyISnT498vcokaxanrHi5Eng5puB&lt;br /&gt;
P+wMYjX06SOHnVgfkA5ZnJYJV69Mubw2ckUblb7bd73xBpAnj0gINmwAfoiTd3s/loPU98+YAdx1&lt;br /&gt;
l3vcW6NU+92xQ9JXuhEAcPHFwB13mOO98QbQrZvoTOj+RewYkFjh9G2XXCLKecWLA889Zx/n889l&lt;br /&gt;
UH/7bXO4+h92jKlfsC43ZmVJOx00KDzu0qUyKNtBMc56H5Kd+vXHH1I/1Mw0ln+n92W6Q0dVrljK&lt;br /&gt;
pyYFev/x9dfRpxMLYimvrlfzzjvAW2/JteqvlfKhl37rscek77TD6tXh/+iKK+ylmlaoJXPAkNAo&lt;br /&gt;
hnTUKGEA7co3YABwULNNzMyUvnjbNrn/4ANpj0raZofnn5c4QOKVU/1WouxNRKRNM1oAACAASURB&lt;br /&gt;
VIuJ6BAR7YJsP5oc6b1du2TwtiN4VpZUdiW2tM7S3RiITz4xro8fFwVLlcftt8va4rJlRj5lygjX&lt;br /&gt;
rlC/vjkN+Ubn77jgAumEu3UzZmpjx0bmlM85R85OXi337RMu2q5z12dfKk8vlapUKaB0abn2ykCo&lt;br /&gt;
dJOSpJG7MW6q0QPyf63QlxcGDwaWLAmPs2ABcM015jIqa5vbbjPHzcgAevYUBi5WHxMPPSR1pECB&lt;br /&gt;
+Cs3Wa0zlHMxBdWpWGf42ZFA7NoldFMd3IwZ9vHWr5fZLiCa/XZQ5cjIMGZagHlgszIX8YZTvc7M&lt;br /&gt;
lGd9+4Y/q1sXaNjQuM/KAl55xSwBysqKXalt9Ghjtvncc0I/xbDE8u+sbco6qYqlXiq9gmisz6xg&lt;br /&gt;
Fn2O2bOjf08/K6SnOy8BvPeeobTeo4cRbseQff21WSK1ZQuQ6jJd3bpV2tqePcIsPPGE+fnq1UZ7&lt;br /&gt;
2bLFWTJtpwCs/pXOqJ04YY6j+nr1HzMzgUqVRLK7YYOxLFOzZvhY5zQ+JhJ+m3E2hjiouBpAM4iX&lt;br /&gt;
q6ZEVDDSi06EeO89WZ9XYp277w5/L4/ViWcIyoICkNnJXXeFr3HWqeOc/68efHT16mXoZ6iBa+xY&lt;br /&gt;
4IEH5FpxpTr++cdcyVRldJrF5csn51mzhPE591xxvjNqlMxmFdQ3WCtatGJEa6eVliZSEj39d9+V&lt;br /&gt;
682bIytbKuVMHYoBGDtWzCjr1QtnkJ5+WvI9edLcwT/4oNBCx7x5ong4aJDx3/ROq149YUIPHhT6&lt;br /&gt;
z54tjXf79vC11xMn7EWL8cShQ+aOT9G2dxztl5SkyI5xOHxY6KGYVrW0sXateXal6K7rAulOiPRO&lt;br /&gt;
7mHNq0tmpnmW2727mal0g5XhTksLV7p89lnjWtHOacavi4QXLBAav/aa+f1YJRCPPSZLTvq7qjz6&lt;br /&gt;
QOaVmbBatVjbYnYkEVb6ROMN9uRJYfpV/8ksjNgllxiTuwkTZCJ44IBRn5z69XPOcZ/p2y3nHj4s&lt;br /&gt;
OjLq20+ckLFB9bWADMb/+Y8wJ1bfLsyyjFqzJqC2XnIzpaxUCejY0f6Z6pN1TJsmkgP9mdU0PG9o&lt;br /&gt;
MwlFn8xMI86IEea4Vkaoe3eE4YxiIJj5Fmb+gJlTmXkVgM4Ql5p1Ir3rRAi7wUkfkJidG5O+3hvJ&lt;br /&gt;
lEpP49gx53V+fUYHyJ4Y1ap5H6QHDBBJxeWXG+WKZM6ml23GDBn0JkyQ5Qod+gB/9Kgxy7eW7aOP&lt;br /&gt;
zPfWiql3WvPnA8nJIglQnWBSkszSARHV6VIbaxrWb7By9L16GddWEbRqbDoX71RPVPgrrxhhmZli&lt;br /&gt;
RfDSSyLheP55oGxZoX+rVrK2e+659hYB1nx0Wi9fHh+RfY0azvkpeB0oDh9270ys6RQtKua97drJ&lt;br /&gt;
vfovGRn2ymlOy4vW+02bpE28+6507kqyNGaMu8mn3j6tyzutWwut9HY/eLChYGj33Vu2GIqoOtSs&lt;br /&gt;
V5e0rF0bnQRi9myzVM06y1Q00QcPJ8mOFdOmme/t2tGOHYZHyWhgXR6LZv9CxXyoerJ8uTBi69fL&lt;br /&gt;
OSNDJjWdO4ukQjFVip529VhNopYtA66+2vwsPd2wPFEYOFDasHVgtRsjXnxR9CZ0qAF6yxYzE+wk&lt;br /&gt;
ZQDs/bqMG2cv5VR7/OhLZuvXm5ePrAxgmTJGXOu/1hlwp37gjGIgbJAM2Wo0olA5K8uYFejEsiOc&lt;br /&gt;
PtPJynJnIPbtk0Eikk29/iMKFRJHH06wKhWp9Ssv0CUghw4BRYrIkocbnPzWW8WdaoAnEtFtyZL2&lt;br /&gt;
71ktTqw6E2qwZAaaNjWXV6XvxDBlZEhDd1LWs+ZttwzCLJ2E4uR79TIaoFODsZvhZWUJ86BE24UL&lt;br /&gt;
m8WmTjonbvkAYm6mdEmU+NurYqkOXdHKKb+0NHtaHj1qHlCLFpVvVdi50yyJcVLqipS/VU9GWSw4&lt;br /&gt;
4a675H8py6g9e4Avv3TPG3C3FlDrwVa9ajWQ2JW9Zk2gQYPwcNVX6EtmrVqZ67wT/vpLvqdVK5md&lt;br /&gt;
KjpY24JdeWLV2Ldj3NasCbeQSkszT2yiVfaNhEKFzOXRvzFfPqN8ailuzhw5R/ruESNECqwvi6n3&lt;br /&gt;
rFZUVkZNwc5KZN688P9iJw0G3KVDdnnqEg/m8HLqEjSlfG1ldu3+j7W8b71lMMFO/WSiXJIrJIyB&lt;br /&gt;
CJltjgDwY0ih0hWHDhmNQhft2jVo3YwLcDbdZJZ1/u3bw3UZ7OJ6gZ2iVqxQplI6tm0L1xlw0oK2&lt;br /&gt;
VirVWGvVMnPpROY0Fy0yP3OC9ZnyaZCU5G7p0aePsYap4OQgxq5hTJokYkjVyN54w3jm1NjtOu2s&lt;br /&gt;
LPMsJhplW5XPBReIboQTlAKsvlzmBKLwfxlJJH311faKm0WKSKfeqZPxrlrW2bFDfEj06yf3R44A&lt;br /&gt;
F14YuXx2UJYQ+kCW4mI5pmaqivlLTw+ffduJzt0YNqclStVx29UJXVEtkrM1wJDKWZ9v3GjoSVWt&lt;br /&gt;
augTnDgBXHqpXHvRU1DSPKuEwSus5dL9iyxcKFIaVbeWLhWvubFAby9O7t2XLjUcpAEiKVTfbNXt&lt;br /&gt;
UYq7el+i9z9OdSkzM5yOTv/u8GHz/waEeba2d6V/YIXd/1K+iE6cMC/9WMvw+OPuk00lWVNSZrdx&lt;br /&gt;
RqepQoMGwNCh9vE/+MBev8xP+L2dt443AfwHQMNIEQHgqaeM6379gBYtZPDXXbcq6M5e3GzA9VlG&lt;br /&gt;
pCWG3OIR7Lzz5KwqmptSoLVjdVoD3rcP/9/eeYdZUXN//JtdegeRIqL0ooJKsaGIYAEVRBB0EVF8&lt;br /&gt;
FbDLTwRFsaCvWBBEeRFEFFBYRUAFRClSpIrsiiBVem/LsgtSlmXP749zw2Tmzsyde/fOvQvk8zx5&lt;br /&gt;
ZiaTSTKZTHJy0lChQvhxsabZnMDi5AkJzullV9ivX2/v/rvv7DVDUvhR1/eQhOrCsNqpBbbTMtNu&lt;br /&gt;
/u3YYYz3sKOJp9xtYG0tffcdFzLW/k+VWbNYbb54MQuw+/ebZz/I7hT5/a2tEqswFwkyPULtQCsr&lt;br /&gt;
W1l4nzpl/jbTpnEL3srXXzuHm8+h1Hr1VXPcnJBxycxkFbsbavdDQoIxDVKqpb2sLWL3H548aWjz&lt;br /&gt;
iPg6f/7QQq1duWXtt2/alLsZJY0ahY6jlRYteHqxqqmy80dqN1V++83+G6xaZWiPJk7k63r1vP0z&lt;br /&gt;
OTnBfrp95+HDg8uLWbOM8+3bnfPRnj38TVStjtq1kD8/a06ffjpYWFUbN3ZIQaR0aT6GsyaIRK0b&lt;br /&gt;
Vaxam1gQEwFCCDEUwJ0AbiIiD+sZ9sSsWebm+LXXJqFs2aSQO+W5dR+o6rNQGga7gX7xZssW92WH&lt;br /&gt;
rT+M3cJPuWHCBHt7IezT85lnjFkTKk593x07Bttt3Oj+rZxU8XYqwRdfdPYnFLkRKMNZwbNPn+C+&lt;br /&gt;
XjvUStepy0tWXNZKSapPw0WtCDdt4qPdbBk7ZMWXnW1OS6cCVB3UqJKYaD/GRsXuW6l5NCGBBZuG&lt;br /&gt;
IUdiAcnJXCH36WOucMqVc35GCNZUyRVf7QQI2eUlKVSI/5dQK5XK8TlqWWY3KFa2wL0unia5+WbW&lt;br /&gt;
YHjVwMp8YMXuG6hjfIj42utgUjsNhNtmgaEGH196qfO92rX5+zktZAXwt3r66fAX1ZJ5IScnGt1K&lt;br /&gt;
yQHDsGYvxjsoEpGvBsBQADsAVPPgtgEAAlLIGA7pjylQwF//o22IiKpWjX88nNIyf377e1demXv/&lt;br /&gt;
+/QJz/2SJdF/x4MHiU6fDv2N4pH+TZo43+vaNTphbN9O9MADkT//3nt8HDuW6LHHDPtSpcL36+KL&lt;br /&gt;
vbvt2ZNowACiwoUNO6e8Gi1Tv775+uefvT1XqhTRH38QffIJnSG3cWnVyt93dTKbNnlzN29efOIX&lt;br /&gt;
DZOTE/4zjz7qX3yqVSPiuhMEoIHfdXsge/oqPAwDkA6ezlleMYXiLUCcbUYtAM8mc9llufejUaPw&lt;br /&gt;
3E+YEP33mDOH6IMP3N3ES4CIhbn0UqJChXLvz9ChRDffHN93yZcv/ukZylxxRfzjoI27+eqr+Mch&lt;br /&gt;
2MRWgPC7C0Mu+6Eu2pwDoCuAscHONU7kxS4VL9jNjw6X5ctz70duad7cfXAUkLsukrxOqFkbXvG6&lt;br /&gt;
N42fRHM1T79wmxGkyRs4dbOdT/g9CyMJQBaAhwHUBfAZuJNmus/has5jIt2NMRRjQ4i8Awf6E65G&lt;br /&gt;
o8l7uC0vfb7gtwDRE8AIIhpLROvAGoljAKK81Y4mrxKNnfvCZboWTzUajcZ3fBMghBD5wStOnlml&lt;br /&gt;
gfuIMRuAzdh8jUaj0Wg0Zwt+aiDKAkgEYF3aYh+ACFYh0Gg0Go1Gk1eI9VLWGo1Go9FozgH8nIVx&lt;br /&gt;
EMBp8LRNlfIAQuxE0ROAdV3npIDRaDQajeZ8x7yQFBPbhaR8EyCI6JQQIgVACwBTgDP7YbQAEGK9&lt;br /&gt;
tcHgJSE0Go1Go9EEY9eoToWHza6jht/rQAwCMDogSCwDqxaKABjtc7gajUaj0Wh8xJcxEEKIS4UQ&lt;br /&gt;
nwN4FyykjAKwCsCVAO4gIpttkTSavM1zz8U7BprcYrfjrUajiQy/BlHWASAAPA6gFoB7AaQB+I2I&lt;br /&gt;
8sC6ghpNeFSrBvToEdqdJm/jtANjJITa0VdzdvLQQ7wbqSY0vggQRDSDiP5DRL8S0VYimgZgIIB2&lt;br /&gt;
foQXDuoudppzg/LlgcqV/Q3jq6/styaPNU5bH6en80r40SIaS5B7xW1nxGijfsPHH8+dX//+m7vn&lt;br /&gt;
vaBuIx0JH34YnXhEizJl4h2D0MQy75/txHIaZykAh8J5wG7L3P/7PwfPS3nz09oCSbYMYv3sM/vn&lt;br /&gt;
nLZMzg316gFdu3p3/8IL0Y9DbrjqqtiF5VbJCOF/a/CGG6LbegWAbt3Cf6ZwYXt7r/nfCxddFNsW&lt;br /&gt;
2LXX+ud3gQLm6yJFjHOnbeXtULdEX7IEWLSIvwURb8UNAGPGRB7PUOG+805kzxco4Jxn4kGsu5Bm&lt;br /&gt;
zw7/mcqV7bcZf/VVb89b81wsaNUq9mECMRIghBA1ADwNYHg4z/33v8F2dvvMA+FtkLNrl3H+wAPm&lt;br /&gt;
e3YV0ahRwJVXevffK+XLA088YVy/9567+4EDgR9/jH48IiE7G0hJiV14JUq434+FOtmLBqJYMe/+&lt;br /&gt;
Va0afhwSwvhja9Uyzr//nvP9mDFAjRruG3/t2mVOz6VL3cOpWTN0XNwq6wpRXlbuvvuMc2th3r27&lt;br /&gt;
cS4rfi80a2acX3cdC5RWQm22ZmXYsNBu5Hfo3Dk8vyWJid7Lxg0bjPNGjSILLxR16vjjrxORCMKv&lt;br /&gt;
vGIWIC69FNi/H7jrLrO7DIcZk5E0DHJL0aKxDxMIU4AQQgwQQuS4mNNCiFqWZyoB+BnAt0T0hbeQ&lt;br /&gt;
egJogylT2gCQhlUFTi3RcHb5K29dmUJBFtDvvmvY3XILULCgd//DQRWIbrwx+P7//gdMmgQMGcLX&lt;br /&gt;
bdoAjzzize9oZ6rSpY3zxMTwKjOVSAonJ9U9wK1AtcJ75pnw/fdCKA1Et27AihX2gy3tNtqKJP1C&lt;br /&gt;
CUotWxrnaiVXvjxrFrp0Af75B3j/fW/h3H135BoCNa4ff2z/706fbv7XooH6naxCQqFCRtdFOP90&lt;br /&gt;
lSrO90IJt3ZUrx5c0ezYEexOCq2R/mtVq5obKW6oguCSJUCHDt7LGq+EI7TFi/z5zUKXENyVZP33&lt;br /&gt;
nL77J5+Yr3/6KdiNVZCSQnTTpuHENBmyflyyRNaTPcPxINeEmy0HggdIOpm6ADZLx0KIiwDMAbCQ&lt;br /&gt;
iLoH+ebIYABTMGXKFOzdOwX79k2BnO/a3cGXAQO8+25tSS5aZJzLH1VVtSUmev+RbrrJ/b61IFAF&lt;br /&gt;
CLsW7k03Ae3aAc8+a9h5abn27g1MnmxcV68ONHBYWuPWW43ziy5y9jPSQqxxY/O1m4rPbsfLTz5x&lt;br /&gt;
b92pAsRbb0W+K+bEie735fe5/HL7+/fcw+n80Udm+0WL7Ct+mZ5vvuk9jgkJwNSpzvfHjgXWrGHt&lt;br /&gt;
UL16wWE58dxzwIQJwMKFfC2FbKta/o8/vMfVmrelQDt+vGHfqpWzir2nTVm4erW92+HDgZdfNsKS&lt;br /&gt;
qEIvwN/h44+B1NTw8vMnnwDFiwPffRd8b+FCHiMDcHoNGWLWWNixcaM5nuXLAxdfbFw//7wR30jp&lt;br /&gt;
3ZsFyiFDgEMhOo/btjXHJV8+zg9feGzy5Ra7LgPJb79xnlYbBk4NimuuMc5TU/nopL2RAq1duavG&lt;br /&gt;
56WX+BhOfvn8c+O8fn0+qt0M1sZd+/Z8dCsbly2z2iSBl1iagu7dpwTOB3uPZBQIq0ogojQi2hDC&lt;br /&gt;
ZANnNA9zAfyBXOy+Wb68eSxEbvqhf/jB3l5tqckfVh2QlpjofWDNiBHu962ZUC08K1YMdm8nsVsH&lt;br /&gt;
DNqpzV95Bbj5ZuN6wwbWXtghW2TNmpm7d6yEM4jwjjuAhg25W2bpUmC5MvfGLi3r1AHS0oLt33zT&lt;br /&gt;
WWiUPPig8d369uWfMDUVOHzYe3wB+/RXkXnPqVB3Sp9q1eztrw9sKVe3rtl+3Dhgb2CtVqtAmpDA&lt;br /&gt;
WgEVWekD3FKqW5eFRTUPhyr8hOAWpyyYP/6YK0s56K1LFy6c7bRHXis5KVDIQr5diCHVduOdLrvM&lt;br /&gt;
3m2jRlzBA0BWlmF/yy3mQlkI/qeuvtr8vFXItVKkCJCZae4ekdSsaVRSXbqwsD93rnH/ttvc/XZD&lt;br /&gt;
LY/+/ju0ezUPy4oLYEFKajHz5WOhdtas4Oe3b+fK2hq+JLcDde3yyp49ofNn3bqcJyW1awODbepK&lt;br /&gt;
qYnu2NH4xk5x/v57Pj5qUzv16WOcy/JHjXuoPK+WydKtEJx/6tfnfw0Afg1sNSnz6DXXOGtp3PJo&lt;br /&gt;
377csAyVj6ONX+tAXARgHoBtAHoDKCeEKC+EcOk88Ea4I+ELFzZ+bmvL0a4PUmZktfUUjuQZqo/P&lt;br /&gt;
6lfduqy2WrwYuOQS3v5arRDs+pdVbcj27fajyYmMsG68kc+d+kKtaWrXvwu4qx+lBA0AM2cCP//M&lt;br /&gt;
QkPv3hx2zZpcud11F7fSrFtuFy3KlZX1Z+/Xz114+/JL1jioPynAhYfdgK1ly4B58+z9ClU4ynQ6&lt;br /&gt;
edL+vlM+cUq3Jk24srOrFKVf1oLKLoxatYLtAPP7hCrwrIJ5sWLmynLMGOD330OH44bs2jl2jI+q&lt;br /&gt;
duB6m/15pUDghcRE1v4ARktv4kTWHFxyieHOTgAAvKv5I8FtEOPbb/NRfp+ZM80Vu1oeOWm+VNRZ&lt;br /&gt;
G9aBtU89xcL8gQP8j6uaRxl+5crOMyVyO4hbfh8AeOMN4zycMTBSCCpRwshPateY7AZW87tT/pT/&lt;br /&gt;
sxDc4FGxE26ln4UKATt3usfTTngXgoXyv/7icvH0acNd0aLctdi/v3NDT2XlyuB32byZNXGxxK9B&lt;br /&gt;
lLcBqAZetnoHeO+LvQB2R+rh2LHAp596a+2oqlsh7DMQkbnQkP2hdgJEKKHlnnvM4bmRmGiooog4&lt;br /&gt;
3PnzjQK0fn2uWMaPB1atsvdDDaNyZbP6UZKQYMRbtuTUHzgx0ZCy5bs6DQCUfbV2wtHatcCRI4bK&lt;br /&gt;
9quvuMVl11+4fz8wbRr/8F5Hhls1QtZW6cMP87taBQgnGjc2a2ZUnAboSmQcLrjA/r5TPilePDhe&lt;br /&gt;
sq/TSThS30dVh0r7QYO4m2LPHuepfl4FiFde8T7C3A6rRiQpyZi1VLOm0R3SowfHqXp1FpzVLgqr&lt;br /&gt;
sPfRR2a7UAM1ExO5Vbd2Lc9syslhobZAAbPAqHbRObUoa9RwDytcEhLMAxRV+vY13AD879x6q3Fd&lt;br /&gt;
tiwfrXlLtjQ//dRsX7gwV0yTJwN33mm+l5jI41lUwSKcsWOya3DxYuCbb4AFC1go8cJ//8vdNrLl&lt;br /&gt;
/eKLnH+dhHkV9ds8+yzw7bfsnxCGYLtqFVegds/IcUHTpnHDRiL/DyGMLiiVRx4x/5+yi+nrr927&lt;br /&gt;
ep3ib81vCQlGmSME57vERG8C+RVX+DfWKyyIyFcD4CMA08Aba9UP4bYBAPrllxTas4cc4SQ2G2mf&lt;br /&gt;
mEiUlmbYFytG9OCDfP7PP85+FijAbsaN4+OQIYYfBw44h6uGbT1Xze7dfCxenGjfPj6//Xbn+IRC&lt;br /&gt;
DY+I31vaTZtm/0xODtHmzUY69erF5/Pncxpt2MDuOnUyx/2DD4jmziVKTw8OVyLTa9w4b/HPySEa&lt;br /&gt;
Ppxo2DB+rlEjth89OjhtiYh++42vZZyt92vWtI/X998bbpcsMeyt3ychgeiPP8x2d95pDufECT4f&lt;br /&gt;
PpwoKyvYD5lPiIh69DA/O3iw2W3TpobbtWvN98aPN/Jws2ZEo0YZ99q29Za+ROb/YPny4PtO3zIU&lt;br /&gt;
1vc+fdr+mxDxvezs0H6OHWvvh7w+dMj4f+3+r7//9hZnlZwcov/+l7/bl18abmrXJpo3j2jLlsjT&lt;br /&gt;
SA2zXbvgeFvdVapktktPJ3rpJaLMTM4PVj/lf7xhg9nf994LL467dvFz994b+j3sWL/euVyU5q67&lt;br /&gt;
uMwLhdPzCxZ4f59Nm/iZBx4w22dlBYezYgUfe/QI/Z6SkydDx5mIKDmZzz/6iGjvXj5v3TrYv59+&lt;br /&gt;
4nv9+xt233zj7K/T/yFJSUkhAASgAZG/dTsR+TuNUwjRCqyN6AVemdITF14Y+dSuxESzCi7cQUhu&lt;br /&gt;
Ggi1a8GN1at54I+KlGTV2QvRXJho2zbj3DrdSCKEeQCmHCiUPz9L1bKV99lnrGqTA8aEYA1DqVKs&lt;br /&gt;
xrSbky7Ty2t3jxDctyhbqvI7OU27knHNl89QgXtB1c5cd529m3Ll2P9GjXjg2OWX83u88orZXcGC&lt;br /&gt;
3A3UrZv5PceO5d9YthYBo2Woqs8BQ1ug5svatbnFLQdTCmGkp3WmQDj5uUwZ/1TzDRrwoMXRo92/&lt;br /&gt;
uaoJc+Ohh+zt332X/6XSpd01A5HMOBKCNQBly5rTtWRJ1lK5zbwINxwgvIWrSpXigeHFi7NGx0rV&lt;br /&gt;
qpzn5D9bpgxw4oT79Fw/qFULOH7cPMgb4K5VybRp9mv6OJGbPEvER+t/YtX03Xsv/+dduoSnfbMO&lt;br /&gt;
cvw4xLaQoZDdymr87r+f3+PHHw2tsapVr13b7Ec8l2f3TYAIjHf4DEBnAMf9CseKtS/XqQvDCVWA&lt;br /&gt;
kH2EsgBs0sR+qpWVyy5zno2hxi/SWQ12VKrEhbnbCH0rspKyFvBFi3JfsV26DRxojHa38yvcd7K6&lt;br /&gt;
v/hisyrSLq523R/hCoqVKhkFs/pshw7cR3nypH2/fGKieeGqGjWcKz/pXkWqgdW0FYL7c2UXkhBc&lt;br /&gt;
cZQuzRWcGr9w09epQM0Ne/dypf7OO9yFBBizZwYNil44AHezhZrZBESvsgeMwXUA8PrrwV0B4SK/&lt;br /&gt;
mdMidYD377N+PU+xVJk/n6cPFywY+XfOTf4oVIjHJsiugrS03K0MO2xYeGW2ihxE6rbwX0YGd4Pk&lt;br /&gt;
y8ddIJUqRRYWwN0IJ04E28sGj1r/2KWxFCDsJge0acPdPkTGmIddu8wzoVatAtatizz+ucXP3Ti/&lt;br /&gt;
BDCMiP4UQlwaTY+JnDO89UOoBa7bT/L111wBSzc5OcaHV/0I1U/uRlISj/iNtLINhSzMvUBkZHIv&lt;br /&gt;
I/S9klsBQqVTJ+NcxtWpNauuMOgFOQjKuhKpWxgqXtNEaiDsZvdYUQuaggWNqXeqQBXtPBMJduuo&lt;br /&gt;
yHhFe7VON3bvDq8v2iuqn+pgv0jx8s285ie7AbPhrR0QWbhe6NmThZlI1sUAeOZEbt4F4HIglPAR&lt;br /&gt;
afycKFiQB4yrM5TkN69QwV2AkJp2r+NurPn9iivCi2u0Cet3F0IMANDHxQmB14JoCaAYALm2YljZ&lt;br /&gt;
tGfPnihp0cskJSUhyUaXN3q0MTq5ffvgpaFLlzYGv7jNIujQgY2U7mrXNgbc5FaAaNmS4yHnv8sp&lt;br /&gt;
ernpwrjhBufZAF65/35g6FDz4EqVcFoB3bsD+/Z5G0GsIn8qddSzXbiNG/PgS6f1IL7/3n7BFi/0&lt;br /&gt;
6hX+M14K3unTzfPSAVZVXnyxvdpUVg7Wbg+V3Gggtm3bhqpVq2L06NHo0qULliwBxo17AwkJ/ZGT&lt;br /&gt;
G8kY3gQkJ6pUqYLmzZsDCG/RgVDTbsPBz5VMvXTHxmtjrkhb+nbcfru5e3Hy5PC6lr79NnpxiTUN&lt;br /&gt;
G5qvO3ZkzcR99xnlvd03vuEG1iJEIggkJycj2dICynBaHtMnwm0vDARrFtzYAuAWANcDOCnMqbZc&lt;br /&gt;
CDGOiLraPhlg8ODBaOC06pEFtdVttxDQnDkstd16qzdVVePG3OKrWtVYEMhuSlC7djz6N1QfWLly&lt;br /&gt;
5pG/gNFnFY7GwIq6+FUkPPggT3ny2iIORdGioZfidiIry9xytQu3VClg61bjulEjc2VapYr3EeEq&lt;br /&gt;
oQrQ9esjF9TUhWNkOImJzt1grVvzaH3rjAP1PcMdee32Da+7DpgxQyAhCmqN3AgQCQkJUMuJcKcL&lt;br /&gt;
3n8/HxcuXIimTZtCCIEDBw6gjGU+onW9DRUZvHUVwdzQrh1PyfSyyF28d/b0I/x7783d8507s2Y4&lt;br /&gt;
3mnjlZQUYNMmPk9MDG7MOr1HpFoEu0Z1amoqGlqlGR8JS4AgojTwttyuCCGeAaAOQbsIwAwAHQEE&lt;br /&gt;
raflF5UqGX2j4SzmIgcavvsut07VgWxVqgCvvcbTn7zslGe3PLXchCdeHDvmbcMXuy4cP7AOcJLT&lt;br /&gt;
JNVlma2EsyJibnBaYyFcQnXBSOymK8qCZ9gw9yW9I6Ffv3542W5QS5jkRoBYv349EhISzqx6GGrH&lt;br /&gt;
xrvvNrQ0J0+y8ElEeOaZZ1CsWDH8a7NN5u7d7vuU+FFJTZrkzV27dpEJv9HA6/dyGpjtJ9HeI8Vv&lt;br /&gt;
GjSwX+1XrmeSmwXF8ip+bee9k4jWSAPgH3A3xmYiingtiHDJbcXXuDH36VnHUbz5pjfhYcsWlqDz&lt;br /&gt;
GoULmysyqxpM4rXSizalSrFWItINhPIi1nEvTmkuOWYz1SSSylkOBHZS9yckJKBAFLYPVMcOhUv+&lt;br /&gt;
/PmRGEYmmzqV94gBWBBOSABGjBiBXbt24TGH0XMVKwLTprmneSywG+w5aRLQvHnMo2LCTYA6fNi8&lt;br /&gt;
LH44hMrnbnTsyMdYbcDVvbt5TZ9oUbw4cPQor4NyruH3NM67hBBLAawDCxBRHqPtzFVX2S91Gkuq&lt;br /&gt;
VMlbW+k64fSTyxHCsRYgAO9Lh8cbr9voWoUxNc3feOMNJCQkYO3atejUsqMhFwAAIABJREFUqRPK&lt;br /&gt;
lCmDmwJTD9atW4dPPrkPwAV4/vnCaNy4MaZaptqkp6ejV69eqF+/PooXL46SJUvizjvvxMqVK9Gh&lt;br /&gt;
AwtjThvIybAlXbt2RUJCgq3p378/AODUqVN47bXX0KhRI5QqVQrFihXDgAFNAcwL2jCLiDBkyBDU&lt;br /&gt;
r18fhQsXRrly5dCqVSukyo0KwGMgHlXWEz5+3Pl97EhPT0e/fv3w1ltvBY2dUvFSmfmtGVy5khdU&lt;br /&gt;
yytIbY+bsF6yZORbVOdGgGjcmL+H08Jt0Wb4cOftDnJL0aJnT1dMOPg2ZloI0R48jfMl8IZa+QFE&lt;br /&gt;
bcxo9+7uex38+We0QvKO29Shs5F4aSCizY4d/swOOHTI+4hupymzAM70/3fo0AG1atXCgAEDQERY&lt;br /&gt;
s2YNmjRpgooVL0aZMi+jV6+imDlzAtq2bYvJkyfjnkBzafPmzZgyZQo6dOiAqlWrYt++fRgxYgSa&lt;br /&gt;
NWuGNWvWoIKLLlgIYRp/0KNHD9xm0bX+/PPPGD9+PMoHpJDMzEx88cUXSEpKQrdu3XDkyBGMGjUK&lt;br /&gt;
BQq0RI0aywAYmzA8+uijGDNmDO666y48/vjjyM7OxoIFC7B06dIz45xk+C++CHzwAXDo0GbMmuX9&lt;br /&gt;
fV599VVUrFgR3bp1OyPkhMttt7FW0Y8WqErx4uEt0e038e5O1Zzl+LE6FYBE8BLWj4T5XAMAlJKS&lt;br /&gt;
Erxkl8Y3WtstkUZEI0bwKmeffx7jCJ2DTJzIafnnn3ytpvkbb7xBQgjq3Lmz6ZkWLVrQVVddRadO&lt;br /&gt;
nTLZN2nShGrXrn3mOktdZi/Atm3bqFChQvT222+fsdu6dSsJIWjMmDGmsBMSEhzjvXHjRipVqhS1&lt;br /&gt;
bNmScnJyiIgoJycnKE4ZGRlUoUIFeuyxx87YzZkzh4QQ1LNnT0f/iYiqVKlCXbt2palTOY3efNPb&lt;br /&gt;
+xAR/fXXX5QvXz6aPXu26X3S0tKC/HDK5xr/0GkeW86VlSgbgAdOQgiRKoTYLYSYLoTwsB2MJq9w&lt;br /&gt;
//08NVauX6+JnPbtebOcq66yvy+EQHdl29H09HTMnTsXHTp0QEZGBtLS0s6Y22+/Hf/88w/27NkD&lt;br /&gt;
gMcQSHJycnDo0CEUKVIEtWvXNnUVhMuxY8fQtm1bXHDBBRg/fvwZTYEQAvkCKh0iQnp6OrKystCo&lt;br /&gt;
USNTeJMmTUJCQgJee+21sMJNTPT+Ps8++yzuuusutHBawlSj0fiGX10Y1cBjHl4H0BO8K2cvAPOE&lt;br /&gt;
EDWJyKnzoRAArF271qdoaezIyMhwrGj69uXV0DTRQSazmuZSEDh69OgZu9WrV4OI0K9fP7xqs2iE&lt;br /&gt;
EALz589HrVq1QEQYP348Jk6ciF27dp1Z00EIgYIFCwaFs3Xr1iA7u+/ft29fbNq0CV9++SW2bNmC&lt;br /&gt;
LVu2nLk3depUjBs3Dlu3bkW2ss1rpUqVzvi1YsUKlC1bFpvtlhZVyMrKQlpaGtLT+bmcHMILL4R+&lt;br /&gt;
n5kzZ2LJkiWYMGFC0Pv89ddfQeMh3PK5xh90mscWpe50WfUoeggKowMsjIWkGgIYB+BxIhoVeLYA&lt;br /&gt;
gJ0AXiGikQ7+dwo8p9FoNBqNJjIeJKLxfgfix0JSmxHovgBwRhwioiwhxGYALuvsYQaABwFsBWCz&lt;br /&gt;
wrhGc07SDcDjAFoAyAzYlQIwG7w847AQz48HkAHAug3RdADbAcgJZBXAO+O+DkCu2ynDbqw8dzWA&lt;br /&gt;
4QCSwbvpWhkIoAYA60byowBcCECuR9obwH0AmgM46hL/qQCWA3gzzPdZDm60OI1vXw8uTzSa84VC&lt;br /&gt;
AKqA61Lf8WshqRQAJwHUBrA4YJcf/GLbnJ4L+O+71KTR5CWEEHsCpyuJ6JBiPw/APQBeJaK9lmfK&lt;br /&gt;
EtHBwPlRAEeJKFW53wFAOQBrpL2yJ802xW4PACjXUsiYDx4EHbSygxDiEICTlvCuBU+/UP0eDl48&lt;br /&gt;
7l4i6uny/lkA0pTnvL6PVYABgKRAmA8B2KX6odGcJyyOVUC+jIEgoiOBwuNNIcROsNDQG9xa+M6P&lt;br /&gt;
MDWac5CnACwAsEoIMRKs3SsPXia+ElhTAHCF308I8QW48KgHbnlviiDMTwCUBWsFkixL0a8kolWB&lt;br /&gt;
8NoJIX4AazKqAegOYDV4DxwAABHNE0J8BeBZIUQtAL+A1565CcAcInLSrHh6HyKaYn1QCCHT5BdV&lt;br /&gt;
GNNoNNHHz73zegE4BWAsgMIAfgfQnIhiu9uHRnOWQkRrhRCNwF0ODwO4AMB+AH/CUPcDwDsAigDo&lt;br /&gt;
BG59pwC4E8C7YKHd5K1dUMp5WfA0bLtF394EsIqIRgshyoOFhtsBrAFX8B0BWPdTfATAXwD+A+B9&lt;br /&gt;
cNfEcri3ksJ5H41GEyfCGkQZtudCJIALnQfB/a+7AYwmord9C1Sj0ZxVCCG2gzUG3eIdF41G4x0/&lt;br /&gt;
NRAAr0LZHUAXcCulEYDRQojDRDTU57A1Gk0eRwiRD6xZORjvuGg0mvDweZ9FXA/gRyL6hYi2E9Fk&lt;br /&gt;
ADMBXGN1KIR4SgixRQhxXAixVAjROMg3jS1CiJuEEFOEELuEEDlCiDY2bvoHFvQ6JoSYJYSoYblf&lt;br /&gt;
UAjxPyHEQSHEESHERCFEOYub0kKIcUKIDCFEuhDicyFEUb/fL68hhHhZCLFMCJEphNgnhPg+0Mdv&lt;br /&gt;
dafT3AUhxO0ARoJHjv8awm0PIcRfgXTIEEIsFkK0tLjR6e0jQoiXAuXLIIu9TvcoIYR4PZDGqllj&lt;br /&gt;
cZN30tvPZS4BvAwe+FUzcH0lgD0AHrC4ux88bbMLgDoARgA4BKBsLJbjPNsNgJYA+oNH7J8G0MZy&lt;br /&gt;
v08gPe8G70fyA3hAWgHFzafg6bM3gwfnLQawwOLPzwBSwZqkGwBsAPB1vN8/Duk9HTzKvy54gN+0&lt;br /&gt;
QNoV1mkeVjrOAQ+w7uPB7V2BfF4dPIX0bfBMr7o6vWPyrRoHyvI/AQxS7HW6RzedXwewEjwdulzA&lt;br /&gt;
lMmr6e13YggAA8CVWhaAbLvCAsBSAEMsz+0E0DveH/RsMwByECxA7AbQU7kuAeA4gI7K9UnwdDvp&lt;br /&gt;
pnbAr2sC13UD11crbu4IfNMK8X7vOKd52UDa3KjTPKbpngagq05v39O5GHhNjeYA5sIsQOh0j25a&lt;br /&gt;
vw4g1eV+nkpvv8dA3A8eSf0AeAzEVQCGCCF2E9FXwJn1IRoCeEcIcUHgRbaCpaOWQojZPsfxXKSa&lt;br /&gt;
EKJB4PwiBAawKnYAT7m7RwixEdy6yAfgoMXNXgAdhBDZ4MWBMgEIxU0aeFR8khBivn+vk+e5GJwO&lt;br /&gt;
5QNpo9PcXwSA2wAUBXBYCHE3dHr7yZvgWXSHwcJEOZ3PfaMigNpCiP1gQWAlgKEA9sFbet8ATu8z&lt;br /&gt;
+1ET0XrBA5WvB7AMwHUA0olI3bN6Nji9rwXwo+fY+ixNbQfwhMXuFfBiMPK6IlgauhYsbJA22mij&lt;br /&gt;
jTbaaBOx6WSpd38HMCBw/jKAtTb19T4A3fOSBqIIgGKCF5NpFbjOgPMy1VsB4Ouvv0bdunV9jppG&lt;br /&gt;
0rNnTwwePDje0Tiv0Gkee3Saxx6d5rFl7dq16Ny5MxCoS/3GbwFiBngMxGzwQjiVALwHYLLi5iB4&lt;br /&gt;
jER58LgH1K1bFw0aNIAmNpQsWVKnd4zRaR57dJrHHp3mcSPRcl0e3G2EwNE6KyMRQBnFjSf8nsa5&lt;br /&gt;
FzzrojaACQBeBPAxgOekAyI6BV5proXPcdFoNBqN5nzgzFIJQoja4E0slwSslgAoJYxl3wGufwW4&lt;br /&gt;
q8MzfmsgWoIFh8rgKSVHAOwgomyLu0EARkMvJqPRaDQaTW75P8GbWh4BN9oXEdEyACCidUKIGQBG&lt;br /&gt;
CiGeAFAAvAdOMlk27QuF3xqIauAtedeD18z/FMDHQoiHVEdENAG8d4Z1+16N5rxkxAigb994x0Kj&lt;br /&gt;
0ZylLAAwEcA88NTP9pb7nQCsAw8vmAbgN/Cq0WHhtwYiAcAyIuoXuP5LCHEFgB4AvlIdEtEwIcRS&lt;br /&gt;
cHeGJoYkJSXFOwrnHaHSvEcPPr7zTgwic56g83ns0WkeN94nogecbhLRYQCdcxuI35tpbQUwk5RN&lt;br /&gt;
coQQPQC8QkSVbdw3AJDStGlTlCxZ0nQvKSlJZ0bNeYPcRdvH31Oj0ZzFJCcnIzk52WSXkZGB3377&lt;br /&gt;
DQAaElGq33HwW4AYB+BiIrpZCPESeJvePwEcJ6Ibbdw3AJCSkpISk5G7p08DJ08CRYr4HlTMWbUK&lt;br /&gt;
yMkBrrwy3jHRRIIWIDRnO2vWADVqAAUKxDsm5w+pqalo2LAhECMBwu8xEIMBXCeEGArgSfDCUvXA&lt;br /&gt;
K2vFnWeeAYqeo9u11K8PXHVVvGORe95/H5g5M96x0Gg04XDqFHD55UCvXvGOicZPfBUgiGg5gCQA&lt;br /&gt;
j4HnnV4IYC4RfeNnuF6ZMCH2YWZnAx07Aps3A3/8oVuYoejTB7jjDuP65Eng1ls5/fxk8WJg3z5/&lt;br /&gt;
w/BC06bR9e/UKWDWrOj6qTl7GD6cG05+c/o0H1eu9D8sTfzwWwMB8A6RQ4moEHgd7tUxCBMAcPSo&lt;br /&gt;
+/1E61IbMWDLFuC771iIuOYa/qHPNv78k1Xsu3fHPuw1a4Bff2XNhJ80aQLcGNTJZiY72ygo/WLB&lt;br /&gt;
guj6N2AAcPvtwKZN0fX3bCUlBZg61T//V60CDh3yz39JcjKwbRuwbBlwySUsaNvxxBPA0Bjof3Ny&lt;br /&gt;
+Ci74vISGRnAsGHujbfnnwc++ih2cTpb8VWAEEI8AN5A62U/w7Fj3z6geHH+sZyIZeYuVAh44QUj&lt;br /&gt;
zPR0Pp6NBflPP/Hxzz/d3flBbscG7NwZWnuxcaP56ET+/CxonC0cPAisXcvnx4/HNy55hUaNgDZt&lt;br /&gt;
/PO/fn3gpptyL2ju2gW8+67z/U6dWDM3cCCwY0f8tWdSgMiL9OkDPPUU/99O8RwyBOjZE0j1fRRB&lt;br /&gt;
eHzzDcctr+DbNE4hxMUAPgJwa2C1Sc/07NnT8yyMI0eA9eu5IFCR2oepUwGnyRsJsdC/BDh5Ehg0&lt;br /&gt;
CHjySXPYfrdgvUAETJkCtG7tLU3y5+fjqbC+anisWGFf0edWgKhcOfTzapfJpk1A9erObn+3rNu2&lt;br /&gt;
Zw9rlpYtAypWjCyOU6aEdjNpEjBjBvDZZ978/PtvoF69yOITipQU4Ngxriid+M9/gBIlgLNpW4Tu&lt;br /&gt;
3Tl91byycydQuLBhvDRC1qwB8uXLXXflI48As2dzpVawoL2bgwedW/45OfZx3b8fuPDC3DWmjh/n&lt;br /&gt;
tLCGB8S2jPWK1M7UqsXC448ue08mJwPhjudfsYL/if/8x5v7e+7hcmSvhyWcZF323HPOszBiio87&lt;br /&gt;
cd4D3uMiC8CpgMlR7ITNMw0AUEpKCnnlzjuJgGD7TZvYvlMn52cvuojdnD7tObiImDKFwwGINm7k&lt;br /&gt;
Y82afHz2Wftnjh8nWr068jBleF78mDuX3dar583vgQPZ/XffRR6/48ed7338sRF/aSR//cXXjz0W&lt;br /&gt;
WbjSv0WLDLsnnyTKn9+4rljRPmwnv1RGjGC7zz+PLH6qv27hh4obEb/jokXG91XNqlWGu7//Jpo5&lt;br /&gt;
kygnx/z8gQNEXn5FL3Hx4sYPdu3i75udbX8/3DQGiIoW5eP774cO30s+cmP/fqLMTKKbbmI/Tpxg&lt;br /&gt;
+wMHiH77jc9Xrzbi1a4dn+/cGRyP++4zx2X//tx/l/Xr+flZs8z2hw6xfYsW9s8tXsz3Dx0KL7yc&lt;br /&gt;
HI63V/78MziMbt28/1+9eoUXP/XZcN3v3EmUmhqZ3/PmEa1cSZSSkiJ342xAPtXtqvFTPpwNXkJz&lt;br /&gt;
HXhf8wzwfvJTAFzJieHMiy+y+i8Ua9bY26u+Hz/OLTbJ6dOsepZ9+OG0pI8dA6ZPD7bftAlo3hzI&lt;br /&gt;
zAy+95WyZJaU9OXRToU2YABL9JdfHpkq8J9/jPMhQzisH35wdi/jvGqVu79ZWazxkSOr3dJtzx7g&lt;br /&gt;
pZc47EsvNd9bt47fb+5c+2effdbZX1UDQQQcOMB5JVtZHH31anMaSFRtT5Mm7NeWLdwfeuoU++ek&lt;br /&gt;
2p85k93L7hsnZL4TgtXIarwyM+39HzQIGDnS2c8DB9zDVNm/n9MvO5vfsUkTVmlb6d3bOL/iCh4X&lt;br /&gt;
MWyY2U2TJgDPCIse69fHVuvWty+/V6juKDes3+zff/k4dSowZgxrBsKldevgGWD79wePXShXjjVH&lt;br /&gt;
Ml/JtGvVigfYCmF8I5mHAXuNwsSJ5utIx2Zs28b/zcKFwOTAtoi89AAzY4Z91+zy5cDYsXwuy+My&lt;br /&gt;
ZYCff+bzXbs43m5djIMGcZqEGt8mufpqs0YRYG2QE2lp5rFdssvPDvlvnz7Nz1l58UU+/vsvayVC&lt;br /&gt;
ccUVhrZj3jxOC6/jVZo181ZfRh0/pRMA0wE8BKAuePrmQbAgUdjB/RkNhKwijh4luvdeljpTU7lF&lt;br /&gt;
oVKlir1E9s8/dEYD8fzzfL59O987eNAsgcrW8KlTfExJIfrf/8z+ydaZlF7T0833X3uN7WfPDo5L&lt;br /&gt;
hw5GWJs387F2bT4+8YTZ7a5d5rgdPRrsnxvWlmbr1nzs2tX5GVVD4kROTrDf48YFu9u3j2joUOO7&lt;br /&gt;
SHP//Yab6dPZrn17ouXL2W7VKqJff7V/B1VLtGoVXz/6KFH37sb9IUOC0+Cjj8xx69Mn2N8BA4zz&lt;br /&gt;
t9/mo50Gon1743rPHnM4KsOHs90XX/CxRw+2l/mxShWi3buNluTOncH+2L2/FSf7Z59l+99/N9y8&lt;br /&gt;
9JK7n/L68cftw/j33+BwJD/+aLh77z3jPzlwgDVJdu/05pv2fk2cSDRsmHNYp08TPf000ZYtfJ2T&lt;br /&gt;
w/+yGzJMqYnLzCQ6doyfO3bMPh1PnOBvLO/VqWP/Htdfb5y/8457+NYwpJ2qGQG4rLNz16QJHzt3&lt;br /&gt;
ZvtSpYK/Z4ECRPfcw+fWctLqdvBgLqvs4jZ+PNGRI1wOXnutUW46+QUQvfii/f3rrjP+XTWsfv2C&lt;br /&gt;
06ZGDT4fOpTL1x9/DE7PVq3YzciR3OoOBUCUL5/Z7sknzWGvW0c0YQJ/d7t3AzgNduxgzTYR0dKl&lt;br /&gt;
bL9yJdEzzzj/vytWGGWHWxytaXHlle75xvpPGs/HVgPhewCmwHh9bgJwo8P9IAHCWtCXLMkJtnkz&lt;br /&gt;
H6tWZfvEREMtm53NHw5gASIpic83biQ6eZLogQfMfh89yoWXteCV3HEHUUKCcQ5wAany6qtsP2sW&lt;br /&gt;
0eHD3B2wdSvfUwUIqW6sU4fOVDCzZ7NgkpNj2Euzbx+FJDubC461a4MzoxQgHnkk+LlTp/jnnjrV&lt;br /&gt;
PrNKjh8n6t072O+vv+b78+cTFSvGP6BUobpVWFaV+vjxxvnKlc7PP/+8cb9aNXv/ZReHNCNGGOE2&lt;br /&gt;
bOjsN8CFJUBUunSwv6oAkZzMdnZp9umnbNe3Lx9r1LAXvmRFYQ1n7173tNu2jdNZCLafP5/tV69m&lt;br /&gt;
weTll9n+11/d3xUgWrjQHAdVgGjWzOx20yauVMaMMb/vRx+Z3ckKXarL09KC31O+e758/N9I1HfN&lt;br /&gt;
ySF6911D/SyFToDzGkD01luG3Ycfki1qvpLX8h9T88PUqSwAlSlD1LZtcFpJtblq16iR+Tojg92k&lt;br /&gt;
p7Mwav3udvFSu/IAosKF+SgFfqe8ULJksH3+/ERt2vD5l19yJWcNz8lIgVZ2azz2GJepAAsBBw9y&lt;br /&gt;
+enk14svEmVlcUVsdy8jwxz/118Pfid5PnQo5xEguHv51lud03TUKO4asUtngOibbzjcxx4z2xcq&lt;br /&gt;
xMfUVOf0mTTJHObQofbf5dQpZz8kmZnm+sPOXf367vmmUyf+HjLPGc+f2wJEDfAYiMsc7jcAQO+8&lt;br /&gt;
EyxA9OhhnMuW4rJl5ork5Zc5MTt3Nuzy5TP7Y/fjvfOOcS4LfvXDqde33cbnVk2DlKhnzCCaNo3P&lt;br /&gt;
u3Sxr+gAQwOhtqK3bQt2Z+3LJOJ+bcBoiVm1FqqRBcrNN3MFkJVlfq8bbjCnrR1Sg2M1V13Fgpwq&lt;br /&gt;
IMkxKXbmiSeIatUi+u9/nd3kxhw5Yp/e3brxezRu7P5806Z8zJ/fbE9kFozGj2ehU70/ciQX2Jdd&lt;br /&gt;
Zn62enXncK0VTHa2kb+sxk07I1vCRYsaafvDD97SbPly41yOK8nODnY3cCB/P4BbYpIPPzS7O3jQ&lt;br /&gt;
/F5SoFDdtG1rthszhmjNGnN6yrFCxYoR9e9vny5yHBHAWiMiop9+MlqJ1nC7dvWWJgULBttNnBjs&lt;br /&gt;
31VXBbvbtMnQAs2cGZyPiAwhU+ZZu7jKe3bxIyIqUSLYPn9+orvvtg8z1Du3bMnupObF6o/qn529&lt;br /&gt;
VePoZipUCNZAzJtnnA8dauRptbwi4nLM7v3UeBFxQ0KWw16+L+AuQFjDVDUE0pw+bTQk7czYsfzs&lt;br /&gt;
1Ve7f5u33jILEFYtlTXvmYWqc1SAAO81Pg3AfBc3DfjlgwUIOzNhQnCFQRQsNIQyUnVml1GsGfP2&lt;br /&gt;
243r7783VLayC+O22wxthhfzyCPG+bZtrOmw/liSnBwWUN54g+/9/DPb79vn7L/UQMgfF+BWY7ly&lt;br /&gt;
7u+8fj1L6zk57loFq5Eq1LxmiIiuucbdjbXVrT6rXiclmb+bXSEgTfXqzvektkCa/v3d4+gWjjRy&lt;br /&gt;
AOrDD3tLl6++Ms4fe4y1eC1aBLtr0MDQ3EnBlSi4e2T/fnMr7OBBom+/Dc4jbu9irXidjCroVahg&lt;br /&gt;
+FmiBMfDqz9ezKRJ3tLfqpGxfj+r9nPNGtYEWbtV3QyRvQDh5NZuEK2dWbGC6IMP+Fx2FUSSB3Nr&lt;br /&gt;
VAFi924WMGX38g03BMeHiLWhXuPoJEB4NarG1mqkRtzJXHed+dpJU6gKEMuX80Bn9b3q1XMK49wV&lt;br /&gt;
ID4FsBlARRc3AQGiKQGtLWZ8UGJ99llwAhIRFS+euwyimueeM/vdsqV9mKpKzq4A9mLmzLG3l1hV&lt;br /&gt;
pjNnsr3bD+HUknAyhw8Ha2nU0duhjJ36Ny8YouCf12qcBIinnnJ/Th0HkBsTSvjyUnjL0fqRmP/8&lt;br /&gt;
x/2+VGnLuNjF55dfiB580LiWY36s7+nUOgSIXngh/LirAoQfZvLk3Ptv97wUBIoU8e6P7Ab1Yn76&lt;br /&gt;
Kbrp4GcaS2NXng0dStSxY7D9kiVEf/xhtsvK8jd+gwdHzy+n8Umh0v7yy4m4TrTWk03pnBIgADwF&lt;br /&gt;
IBM8hTMVQOPQAoQ3DYTaVaEmctmy/mSc9HR7e7UbAjBUVNEyr77KA32s9k884S4NA+ELEOeqOXiQ&lt;br /&gt;
qHJldzdyel5eNbNmxT8O0owebV+ZROPfCyWwOZndu/1738mT7ceyhGNk1+PZbNz6+P00bl0D54tR&lt;br /&gt;
NWp16zq5i60Gwu/dOO8HMA488+J+AB0CphYRHbRx3wBACpASkCXceeQRYPToKEY4StSvr9eAz2sU&lt;br /&gt;
L85TUDXRIycnby4U5AcTJnD+8bo4kEbjJ3Xq8HT4YFIBxG43Tt9WogwwBEA2gLYANgBYBaA1gG7g&lt;br /&gt;
rb1zRV4UHoC8vYzr+YoWHqKP28qT5xodO8Y7BhqNQV5YwRjwcS8MIUR+AOUB5AcwD8DugKkAoJ1f&lt;br /&gt;
4eYF8srH1Wj8ZNGieMdAozk/ySuNVD8VkGXBfTE3EFGiNAA+AC9rfc7itnqZRqPRaDS5Ia9swnie&lt;br /&gt;
9GBqNBqNRqOJJn6OgTgIXjSqvMW+PIAQ+471BFDSYpcUMBqNRqPRnO8kB4xKbHfj9EWAEEJcCqAf&lt;br /&gt;
WICYJITYCp6N8V8ALcCbbLkwGF5mYWg0Go1Gc35i16g+MwsjJvjVhVEHvPLk++BZGFPB60H8AaAI&lt;br /&gt;
gNE+havRaDQajSYG+CJAENEMIvoPEb0G4AXwrItSAGoDuIOIwtigWKPRaDQa4Lrr4h0DM9Z1UDp1&lt;br /&gt;
ik884oXvgyiJaBgRVQHwHoBVRLTcr7DatPHL5/ObO+6Idww0KkLEOwb+UaOG8/t9/nls43K+07Rp&lt;br /&gt;
sF2s1sOwfuvWrfnYpElswlfp0AFo3tz+nlWAeCfXqxt5o3jx2IQTipjMwhBC1ADwNIDhkTz/ww/e&lt;br /&gt;
3A0fzit0haK8dVinR5Kt41XiyJ13xi6shmF0qQ0b5l88IuWSS6LvZ6tW0ffTjXvuMc5Xr45t2OHQ&lt;br /&gt;
wGbokix869cP/TwRkD+//b1rrok8XpJI//1oMGKEvf3MmcC2bc7PvfCC+fqyy6IXJzfsGg633BId&lt;br /&gt;
vzMz3e+XVMbQjxkDTJwIvPWW+T/46SegWjXj+ocfgA8+AD76KDpxlEyYAJw8aX8vnzKKsFo1oGLF&lt;br /&gt;
6IbtxOTJQGJibMJyIywBQggxQAiR42JOCyFqWZ6pBOBnAN8S0RfeQuoJoM0ZM2pUG6ijTZ0K0AIF&lt;br /&gt;
gGLFnH2tUIHXaLj1Vm+xGDPGfF2jRuhnMjLsC9Fo89NP5utvv42Ov5UrG+dypUEvi5a88QZw4oSz&lt;br /&gt;
pB5PFi3iH+7DD0O73bEj2O7OO4E5c8x2b7wRlah5ZvRoYOdOYP9+oG7d6Pj57LO5e37jxmC7Fi2A&lt;br /&gt;
ffvMdhMm8FHVLDz0kL2fRM7/T7167vGZP9/9PgB89x23Zr//3v5+SgoLzM89F3xvwYLQ/rtRtqy9&lt;br /&gt;
fd269kKuk+A+bZpzGI0ahR8vJ7Kzg+0KFHB236GDd79DtaALFwZGjuTzrCwO99VXuYwBgFde4f9y&lt;br /&gt;
9WqgZ0/g7bdZuOjVy/7bhcNHHwULsV26GOfbtxsCX2IicOgQm3XrzAJFbujWzXytlssA/0sffpiM&lt;br /&gt;
Jk2MepJNz+hEwCthbox1AYBaIUw+xf1FANYD+NKj/7abaVk37SEi2rWL6OhRs316OtHzzztvRnLR&lt;br /&gt;
RfysdWOqVq2Ctxz+4Qd2+8svht3+/cH+AUSlSxNdey27JSI6ciSyzVLsdi784guiY8eC7a1psnWr&lt;br /&gt;
93Dcdu/84gvjfNIkPvbuze/0yiv2z0yfbmxrvmED29WqRbRxo/c4WbdUv/DC8NJu2zZ7+88+ozPs&lt;br /&gt;
3RvaH7sNk+66K/jbLF3qPW59+vBRbsMerpk7l4KwuvnwQ6LZs4PtN2yw33inXLlgf0Ltxsk7ABrm&lt;br /&gt;
9Gnj/OqreVfS48fN/jZuTJSZyef16xPt3Mnnf/xBlJZGtGNHcD44dIioUiW+3rWLqHBhPrfGV91c&lt;br /&gt;
6Ikn7NPFalSsu/bed59zGleo4O0fu/hie/srriA6eTLY/pJLnL9p8+Z87NXLbJ+W5hx+OPnSuptx&lt;br /&gt;
6dLma3UDK7kj72+/8bFYMT7KbyPTNjOTaMECsz/duwfv0hvqW2X2KfSUAAATQUlEQVRmEk2cyOdj&lt;br /&gt;
xxppdOgQly2bNwf/E07frls372ki49awYXCeufNOvj5xwgijRInQ/6aTKVDA+d7Qoebre+7h+u7l&lt;br /&gt;
l/l69myn8M6R7bwBVAoID+MBrADvxlk/xDMmAaJtW96f3ppIKiNHmjOd21aun3xiPLdkiVEhDh/O&lt;br /&gt;
dqNGcQEmdxokMiqOVq2C41GpEtFXX3EhHUkmWrCA45+ZycKJ3XOqf+pWzURE+fIRlS9PNGwYV3zv&lt;br /&gt;
vuscltwqmoiob19nd+vWGT+7/IFffJGfU7csd/oeUoDo3Nn8Pi+9xBW4aif9kz+DtK9e3by1trUA&lt;br /&gt;
VcOVlZr6fGYm0ZNP8vnIkUbcrAKg1Rw6ZP8Ntm0LFlDUgtq6zbo0sjLZsIHfMSuLaNUq9zh88kmw&lt;br /&gt;
3bx5zvlLhjFmDNGBA/ZplJ0dbN+0qdmfN97ga1nYrlgR/IxVACIiSk7m8wYN7OP38MOGANywYfB7&lt;br /&gt;
WNP7ssvYTu4iu28fCxkpKcFu1etvvgm+36YN0fLlxvWNN5rDte6+6hYvgGj79mC7AQOM848/Nm/t&lt;br /&gt;
3rq1cX74MPs5b55h9/vvLIRZwzt8mKh9e8Mva/7PyHDOPydP8rN296zbUI8aZZynphLt2WO+/+uv&lt;br /&gt;
xnlWFgsPREQTJhjbhMv/TE0/666o8+cHv6Nd+kojBN8/fZobNNnZ9vnGDfUdcnLshWsnQ2ROG8ne&lt;br /&gt;
vUT/+585jNKlQ+cbJzNlCgtHW7YE/89q+ACX30SGAPHrr8Hh1apFdE4IEAHNwz8AZgIYGTieBtAs&lt;br /&gt;
xHNnBIgePZw/ihXZev33X75euZLotdecM7Hk5EmuTGWryY6sLKI77uCKlYioYkXzx3ZCDXv6dD5K&lt;br /&gt;
Kd7pPazPWTOvqomQ8T91yv35hQuJunZlqfnoUXbTr5/ZjWxVAETr13P63XwzpxlA9MIL/NyhQ8Hp&lt;br /&gt;
an0Pqd156CEjPmXK2McxK4sLItW+Vy/WJDVtarhTC9AbbzSHm5nJBZZ8vl49Pv/0U77+4gvD/4MH&lt;br /&gt;
3X9ouzSsUYPt1Mpj6VKiv//m8y+/DG5xSTNhAtHbbxvaGav/ffsS3XYbn0+dyoWG3Te0y7sAV8iy&lt;br /&gt;
IJ8922jph3ongL+vai95/HG+DiVASMFMVmZW4WDKFLbv0sXYAvraa4Pfg4gr8muuIapdm2jaNLaT&lt;br /&gt;
rb2DB81u1bRW479rl/l69GizNsTuX1Vbz3b/o/X97QQIuzTMyuKyaMIEtm/f3t5fp/AkUkh9801z&lt;br /&gt;
mEePEg0ZQtSjh/P3tmpXvvyS7XfvJho0yLCzPjdhAjfapObOKa5//MH2Tz8d7MYqqK9aZdwbOZLz&lt;br /&gt;
PRGXC9KNWiZNnhwcXriUK8d+SQFNCkNt2riXAQsXGn5MmsRloRMAb19vZw+wIPTEE85hybyuPrN0&lt;br /&gt;
KQvL33zD192781EKEC+9xNdz5gQ/W6sW0axZ54YA8XBAYDgdeJkzxxDPNQBAH3+c4vhR7DJzzZps&lt;br /&gt;
L1VLkvR0tps5M/iZSMnJMVqJlSs7u/v5ZyND7tplFCTPPOP8HkTm97RT07k9a32+Th17N3YtyT17&lt;br /&gt;
uPtHbREtXsz3e/a0D2POHG65qKxdy/cefthwK1u36vOJic7vQGRUrAALEH//zUYN38rx41x4E3Fr&lt;br /&gt;
EOBCQJKe7vwzFy5suFOlfzsBQrJ6tSEcvPIK0ddfm/2000yp8c/KMtTUUvuh3pdGtvxUjhwx8vuK&lt;br /&gt;
FcHPbtjArW8nP1u0MOxVNexjj7HdX38FPzNsGNEtt/D5jh1GPAAWAFSkmn30aE6jatWIZsywT4/T&lt;br /&gt;
p4OFrJYt+fm0NOf0k+cXXGDcGzOGhUere9l9qZKQ4F6uqPduvTW4C2PWrOD4qHz3HdsPHGi2l40Q&lt;br /&gt;
t/ci4pb34MHBXZhqOVevnmGflGTYv/++87tJ9fiYMd7KE6kRUJHdk6qqXaIK6oMGOft9+LDh7vhx&lt;br /&gt;
Pt50k7P7cJg8mahQIeN67lz2X3YnAkYjQJpx48ILo3VrcwNIovqvXkvz77/cEFMbf0OGcENTIgWe&lt;br /&gt;
d97hY7t2bC/jr3ZrSn+//ZYoJeUcECCICOAlq3cAuBrApeF0YaSkhCdA1K7N9tbWuJ8A5v5LOzZu&lt;br /&gt;
5GNODleCO3YYqvB8+Zz9jeSHtj7vJkCsXOmenpJ//+U+bPkeknvvdX5u9Wq+17Wrs79Fi/KP4cbu&lt;br /&gt;
3Yb03quX+V6oeBNxofvmm+Y84ab6/esvw50s+EMJEHZMnMjChOySsmPIENZqERmaFqkdUt9PmgUL&lt;br /&gt;
3MNUueQS+ziq/vXvz+9DxIKjKrzYCRAlSvDxxx+D/f33X77XpEnwPfWdwmXjRv7+VsFCfRd53qWL&lt;br /&gt;
u1+XXmruR5fI1p0sqK1s2WJ0ybVsaVY1A0SLFgXHR0WOIZLdsJK0NBZGrLz7LsfJDjVcNU9LARSw&lt;br /&gt;
f8cdOwxhTyKFa1XgdeLwYaP7xcrKlcaYoYIFDXtVgAiVB6S7nBxuXW/a5O4+UmTX0YsvBr+z7NqR&lt;br /&gt;
3WC5xeq/+u0SErz78/PPRrkjG2G9e5OjAEF0bgkQ0wG8HDj3VYCoU8fIhLEC4IIpErZs4f5qJ39D&lt;br /&gt;
CRD587vfl6Z2bfd4FCoUukK0IzubK2g7ZB//o4+G76+VhQspYgHCDrfBrWqrTqqeAaNF5FWACBfZ&lt;br /&gt;
JSM1J0RG61uabdu8+7dpk1GxqaiqVDf27yf6v/8zj5sYPZqFGLv/SwoQt9ziPY65RX2Pbdu4Ky+3&lt;br /&gt;
fk2YYH//xAm+/913hgAq1eNLl7Kbfv0oqMuViGjNGnZnN4YlXNQBjup32L/f6O5JTvbm19Sp7F7t&lt;br /&gt;
uswNW7bwWBWJqjEJNX7Bj3/KDvmuvXpxl+D48ca9gQONbxwNAGPMHBELhh98wJpop3LfjaVLjXTc&lt;br /&gt;
upXo+uvtGxxEsRcgwpp0IoQYAKCPixMCUBdASwDFwItHAbystWd69uyJkiXNm2lVr56ETZvsN9OS&lt;br /&gt;
i3nEcoGdIkWA116L7NkqVZzvdegQerGUCy5wvlenDk95WrmSs5Ube/cCp0+7u7EjMZGnWdlRoQIf&lt;br /&gt;
z4bFp55/3pgzri4II9OtRQvgm2/4XE5fK1cuunF4/XWesqVO/xozxrxeQTjrWFSrZp4bLxk2DJg7&lt;br /&gt;
l6eauXHhhcZ0119/5TRo0MB5CqWc7ta5s/c4RhM/1vhQKVjQ/B8R8fTXTz4x8kz//vbP1q0LHD8O&lt;br /&gt;
FCqU+3ikpfG77txpLucuvJCnKL//PtC+vTe/7r6bpz9Gaz0Ja3lWuDBw8CCwe3fotQo2bQq9JkQ0&lt;br /&gt;
kGlGFLxAlpymbl0UKlL27QNKlDCu+7jVmB649lrj/NJLgcWL+Tw5ORnJyuJEbdoAGRmx3UwrXK2C&lt;br /&gt;
l2mc+QF8D+AUeB+MHLBgQYHzL138d9RAWCUtFTl183zgq6+CuxRUcnKM6XWPPx67eKlEqytp0SI6&lt;br /&gt;
o3ZUadUqdBeIHVYNBBHR999z/7jaqpMDmD780Pz8Tz85a16iiXUmUbQ4cMCYzeCVI0eiF360qFAh&lt;br /&gt;
eukyYgT7NXWq92eeeoqfUceYxAI5Qj+axEoDEG9OnOCu1507g+/J8QarV8c+XtHgrNFAEFEagLRQ&lt;br /&gt;
7oQQzwCYB+BNAIMAbAFvoDUQwJBwwlR5+WX7Fds++IDvnQ+EaukJwWbnzui3lr0SrcVUrr0W6N07&lt;br /&gt;
+NtOnx6Zf8WKceu+a1egZk22a9uWjUqtwFJoV15pto/V6p9+adLKlnVezMgJt4XZ4sWqVUB6enT8&lt;br /&gt;
evRR1qLcdZf3Z6LdYtX4T8GCrKmxo3lz4MiRvJnXvfDpp8ZibbFGUCg9dySeCpEIYCuAfkQ0OrC9&lt;br /&gt;
9xYAVxHRSpfnGgBISUlJQYNYLOeoOS/xUgEcOgSUKROb+FjJyTGrfn34RTW5YM8eXhVxxIjoCcte&lt;br /&gt;
ePBBYPz46OaHefO4uyxaq5tq4ktqaioa8hKmDYko1e/w/JKhG4DXgoAQIhXAMvA4iOo+hafReCYh&lt;br /&gt;
IXTrMV7CA2DWQMyeHb94aOypWBEYNSq2wgMAfPEFsHVrdP1s1kwLD5rI8UuAqAYWGF4H0B88qHI8&lt;br /&gt;
gM+EEKV8ClOjOSdQBYhmzeIWDU0eo2BBHkSn0eQV/NpMS/r7NhH9QER/AugKHtwRxpYrGs35je5n&lt;br /&gt;
12g0eZVwlXADAXwZws1mBLovAKyVlkSUJYTYDCDkxCu7aZxJSUlISrKfxqnJHcnJyTptY0yoNK9Z&lt;br /&gt;
E/jnn9hOTT7X0fk89ug09w/rNE4g9tM4/RpEWRzAAQBrAFQGUADAKgCXAehNRJ87PKcHUcaBNm3a&lt;br /&gt;
YMqUKfGOxnlFqDSvXh3YvFkPoIwmOp/HHp3mseWcGERJREcAHAdQB8DLANoBKA2gFIC5foSp0ZxL&lt;br /&gt;
dOoU7xhoNBqNO74IEEKICwCUBC8o9RaASQD2BG7rYUAaTQj69weys+MdC41Go3HGLw1EGoB1AI6C&lt;br /&gt;
p26WBTADwD4AKX6EqdGcSwgRehlgjUajiSd+zmS+DcAPAI6Al7DeB6AlEbmN8igEAGvXrnVxook2&lt;br /&gt;
GRkZSE31vbtMo6DTPPboNI89Os1ji1J3RmEHltCENYjS62ZaRLRBCPEjgEQAbwM4AeAxAPcAaERE&lt;br /&gt;
+xz87wRgnOcIaTQajUajsfIgEY33O5BwBYgLwBtqubEZwM0AfgFQioj+VZ7fAOBzInrfxf87wMtg&lt;br /&gt;
n/AcMY1Go9FoNIUAVAEwIzCUwFf82kyrMIzdN1Vy4DLuIuC/71KTRqPRaDTnKItjFZBf69wtAXAY&lt;br /&gt;
wFghRH0hRE0hxAdgyegnn8LUaDQajUYTI/ychdESQDEAvwL4A8ANANoQ0So/wtRoNBqNRhM7fFmJ&lt;br /&gt;
UqPRaDQazbmN3qpHo9FoNBpN2GgBQqPRaDQaTdjkGQFCCPGUEGKLEOK4EGKpEKJxvON0tiCEuEkI&lt;br /&gt;
MUUIsSuwrXobGzf9hRC7hRDHhBCzhBA1LPcLCiH+J4Q4KIQ4IoSYKIQoZ3FTWggxTgiRIYRIF0J8&lt;br /&gt;
LoQo6vf75TWEEC8LIZYJITKFEPuEEN8HtrG3utNpHiWEED2EEH8F0iFDCLFYCNHS4kant48IIV4K&lt;br /&gt;
lC+DLPY63aOEEOL1QBqrZo3FTZ5J7zwhQAgh7gfwIYDXAVwN4C8AM4QQZeMasbOHogBWAHgSPH3W&lt;br /&gt;
hBCiD4CnAXQDcA2Af8HpW0Bx9hGAuwC0B9AUvCX7JItX4wHUBdAi4LYpgBHRfJGzhJsAfALgWgC3&lt;br /&gt;
AsgPYGZg+jIAneY+sAO8iF0DAA0BzAHwoxCiLqDT228CDbpu4LJZtdfpHn3+BlAeQIWAuVHeyHPp&lt;br /&gt;
TURxNwCWAhiiXAsAO8Fbf8c9fmeTAa+10cZitxtAT+W6BHi31I7K9UkA9ypuagf8uiZwXTdwfbXi&lt;br /&gt;
5g4A2QAqxPu945zmZQNpc6NO85imexqArjq9fU/nYgDWA2gO3k15kHJPp3t00/p1AKku9/NUesdd&lt;br /&gt;
AyGEyA9uUfwq7YjfaDaA6+MVr3MFIURVsBSrpm8mgN9hpG8j8KJiqpv1ALYrbq4DkE5EfyrezwZr&lt;br /&gt;
PK71K/5nCaXA6XAI0GnuN0KIBCHEAwCKAFis09t3/gdgKhHNUS11uvtGTcHd0ZuEEF8LISoDeTO9&lt;br /&gt;
/dxMyytlwXtmWPfH2AeWnDS5owI4Y9ilb4XAeXkAWYHM6OSmAoD96k0iOi2EOKS4Oe8QQgiwynAh&lt;br /&gt;
Ecm+Sp3mPiCEuAK8SF0h8CZ99xLReiHE9dDp7QsBQe0qcMVkRefz6LMUwCNgjU9FAG8A+C2Q9/Nc&lt;br /&gt;
eucFAUKjOZsZBuAyAE3iHZHzgHUArgRQEsB94JVum8Y3SucuQoiLwcLxrUR0Kt7xOR8gohnK5d9C&lt;br /&gt;
iGUAtgHoCM7/eYq4d2EAOAjgNFhyUikPYG/so3POsRc8psQtffcCKCCEKBHCjXUkbyKAMjhPv5MQ&lt;br /&gt;
YiiAOwE0I6I9yi2d5j5ARNlEtJmI/iSiV8AD+p6DTm+/aAjgQgCpQohTQohT4I0SnxNCZIFbtTrd&lt;br /&gt;
fYSIMgBsAFADeTCfx12ACEi2KeDRoADOqIVbIIabgpyrENEWcKZQ07cEuK9Lpm8KeACN6qY2gEvA&lt;br /&gt;
KmMEjqWEEFcr3rcAZ+jf/Yp/XiUgPNwD4BYi2q7e02keMxIAFNTp7RuzAdQDd2FcGTDLAXwN4Eoi&lt;br /&gt;
2gyd7r4ihCgGFh5258l8Hu9Rp4ERoB0BHAPQBUAd8HSSNAAXxjtuZ4MBT+O8Evyj5wB4PnBdOXC/&lt;br /&gt;
dyA9W4MLhB8A/AOggOLHMABbADQDtzwWAVhgCWc6uABpDFbZrwfwVbzfPw7pPQxAOng6Z3nFFFLc&lt;br /&gt;
6DSPbpq/E0jvSwFcAWAAuKBsrtM7pt/BOgtDp3t00/cD8JTKS8H7R80Ca3ouyIvpHfcEU17oSQBb&lt;br /&gt;
wVNSlgBoFO84nS0GrFbMAXcFqeYLxc0b4ClAxwDMAFDD4kdB8NoGB8ED1L4DUM7iphS49ZEBrkBH&lt;br /&gt;
AigS7/ePQ3rbpfVpAF0s7nSaRy/NPwewOVA+7AUwEwHhQad3TL/DHCgChE73qKdvMngJg+PgmRPj&lt;br /&gt;
AVTNq+mtN9PSaDQajUYTNnEfA6HRaDQajebsQwsQGo1Go9FowkYLEBqNRqPRaMJGCxAajUaj0WjC&lt;br /&gt;
RgsQGo1Go9FowkYLEBqNRqPRaMJGCxAajUaj0WjCRgsQGo1Go9FowkYLEBqNRqPRaMJGCxAajUaj&lt;br /&gt;
0WjCRgsQGo1Go9Fowub/ATTBek26IJSnAAAAAElFTkSuQmCC&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Zadanie:-ilustracja-funkcji-autokorelacji-procesu&amp;quot;&amp;gt;Zadanie: ilustracja funkcji autokorelacji procesu&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Zadanie:-ilustracja-funkcji-autokorelacji-procesu&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Dla współczynników  $a$, dla których proces ten jest stacjonarny,  charakteryzuje się on też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji &amp;lt;em&amp;gt;N&amp;lt;/em&amp;gt; od 50 do 5000?&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[8]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;legenda&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_realizacji&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;   &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#rysujemy funkcję autokorelacji poszczególnych realizacji&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f_corr&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;correlate&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;realizacja&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,:],&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;realizacja&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,:],&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;full&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# ...&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;tau&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ind&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;tau&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ind&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;],&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f_corr&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ind&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;])&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;legenda&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;append&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;fragment funkcji autokorelacji&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;legend&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;legenda&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAisAAAFyCAYAAAA0x5qKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xd4VFX6wPHvm0oSIEACIYRektAJgYQiiCIiLbgWXF3F&lt;br /&gt;
XeuuDVH3Z1sb6lp2FdcO6qKioohSBBUs9E5I6KGGTgIhCQHSM+f3x524YQjSZnKH8H6eZx7IuWfu&lt;br /&gt;
ee+dycybc849V4wxKKWUUkp5Kx+7A1BKKaWU+j2arCillFLKq2myopRSSimvpsmKUkoppbyaJitK&lt;br /&gt;
KaWU8mqarCillFLKq2myopRSSimvpsmKUkoppbyaJitKKaWU8mqarKhqR0S6ichiETkmImUi0snu&lt;br /&gt;
mC5EItJaROaISK7zPCZ5qJ1nRcQhIvXctS+Xsp0i8t/z3bcdnLHPsDuOikRknoj86sH9n/B6icil&lt;br /&gt;
zvdHX0+1qbyfn90BKOVOIuIHTAHygQed/+6yNSgvICJBwP8Bc40xC87waZ8CzYAngFxglYfCM86H&lt;br /&gt;
u/blcClzuHH/Z0xEegJXAmONMXnnuBtvvB+Kp2Oq7PXyxvOgqpAmK6q6aQU0BW43xkywOxgvEgw8&lt;br /&gt;
g/Whf9pkRURqAD2A540x73o4Nnd6HnjJpSyGkxOYqtALeBqYAJxrsnIxOuH1MsbMF5EgY0yxjTEp&lt;br /&gt;
m+kwkKpuIpz/HjldRREJ9nAs3kTOsn4D57+nPY/exBjjcP1SM8aUGGPKbAjnbM95lRNLoN1xVFTZ&lt;br /&gt;
66WJitJkRVUbIjIBmIfVezDFOc79q3PbxyJyVERaisj3IpIHfObcdomITBaRXSJSKCK7ReR1Z++C&lt;br /&gt;
axvXi8gGESkQkbUicrVz3+kV6jRztv2QiNwjIttF5LiIzBaRKGedp0Rkj4jki8g0EalTSVuDRGSB&lt;br /&gt;
c+5NnojMFJF2LnXKj6uRcz9HReSgiPxLRKQ8HuCg87yUzw9xiMjTpziPzwA7nfX/7ay7o0J76ZU8&lt;br /&gt;
p7K5Ig4ReVNEhovIOue5XS8iAyt/BU94bjMR2eY8x/UrlCc6X79s53lZIyIPnCaOM5qzIiKPOOc6&lt;br /&gt;
ZTlfl1Uicm0lcTlEZGQlz//tnDrP4avOTTud28pEpKlzu6/zPbDNeV7SReRFEQk4gzhvFZESEXml&lt;br /&gt;
QlmwiLzmfO8WikiaiDx8ihjfFJGbRGQ9UAgMdG4TEXnQ+RoViEiGiLxf2XvTZZ/+IjLGeb5yna/L&lt;br /&gt;
AhHpV0ldEZFRzte1wPle/UFEulaoo3NW1El0GEhVJ+8De4Engf8AK4FM5zaD9X6fDSwEHsaazwJw&lt;br /&gt;
PRAEvAscBhKA+4Eo4IbynYvIEOBLYA3wGFAX+AjYR+Vj6jcD/sCbQD3gUeBrsRKoS4GXgdbAA8C/&lt;br /&gt;
gTsqtHUL8DHwI9Zck2Dgb8BCEYkzxuyucFw+zuNa5jyuK4CHgG3AOOAQ8Ffn+fnW+QBYe4rz+A2Q&lt;br /&gt;
A7wBfAF8Dxyr0F5lx3qq8j7ANVjn9qjzWKeISFNjTE5ljYtIK+BXZ9wDyuuJyADgO2C/M7YMoC0w&lt;br /&gt;
BOscnyqOM53v8AAwHSuJDQD+CEwWkaHGmB/OcB/lvgWinfsYhfW+wnlMYL1vRgKTsV77ROBxIBY4&lt;br /&gt;
IUGqSETuAt4DXjDGPFNh03dY76kPsd6fA4F/iUgjY4xr0tIfGAG8DWRhJaYA450x/Rfr96cF1u9B&lt;br /&gt;
FxHp/Tu9U7WB24BJzn3UAm4HfhSRBGNMxffZf4FbgVnAB1i/k32whhxXO+uc6v2lLmbGGH3oo9o8&lt;br /&gt;
sD6wHcA1LuUTgDKsD3nX5wRWUvYoUAo0rlC2FmuyblCFsj7O9nZUKGvmLMsAalYof9FZvhrwqVD+&lt;br /&gt;
OVAA+Dt/DgGygfdcYqqPlUS8X8lxPeFSNxlYUeHnMGfbT5/heSw/hocqOY87Kqn/DFDmUuZwHlfz&lt;br /&gt;
CmUdneX3uD4XK6GLxUo4lwKhFer4ADuA7UCt34m7sjjSgf+ewTEHuvzs63zNf6rkvIys5PknnF+s&lt;br /&gt;
xLEMaOpSr5Oz7vsu5a8661/qEvsM5/8fcG5/3OV5w537e8ylfLLzPdzCJcYSIMal7iXObTe4lA9w&lt;br /&gt;
lv+xQtlc4NcKPwvg5/K82sAB4IMKZZc59/X6aV6HE14vrN/pMqDvmbx39VE9HzoMpC4277sWGGOK&lt;br /&gt;
yv/v7E4Pw/qy9AHinOWRQAfgE2NMQYXnLgTWnaKtycaYYxV+Xu78d6IxxuFSHoDVkwPWFSShwJci&lt;br /&gt;
Elb+wPrrcjnWh76rcS4/LwRaniKuqvSTMWZn+Q/GmHVYk00ri60j1jDeDqwelYrzZeKA5sAbxpij&lt;br /&gt;
ngjU5X1QB6vnbCHQ9ZRPOjeDsV7LsS7lr2F98Q9xfYKI/B2rN+nvxhjXCcSDsJKStyrZn49ze0Xz&lt;br /&gt;
jDGbXcquw7ri6xeX91wKVq9aZe85AIyl1BmniEhdrPfzKk48d9diJStjTrUvpU5Fh4HUxaTUGLPX&lt;br /&gt;
tVBEmmBdRTIM6wuqnMFKGsD6ixqsv+xdbcOZ1LjY4/Jz+Zevawzl5XWxuuRbY31pza1kn4aTrywp&lt;br /&gt;
NMYcdinL4cRjsYvrOYDKYxOsoYwM4CpjTL7L9lZYx77B7RGWByAyFGsIsQtQcdKpu68kKu+d2Vax&lt;br /&gt;
0BiTKSK5/O+9Vq4fMBR42Rjz+in2t98Yc9ylfFOF7RXtrGQfbYA6WHObXBn+N+G6UiJyK9bQYyzW&lt;br /&gt;
0Ge5HRX+39IZZ+7v7Uupymiyoi4mRa4FIuID/Iz1Qf0SsBk4jtXL8QnnNwn9VGP8pyovv3rEB+sL&lt;br /&gt;
4mb+N+emotIz3J8nnGrugO8pyk93rBX3OwVrPsPNWHMfqoyI9MGarzIPa27QAazhktuAG13irOz5&lt;br /&gt;
5/I+OdN5GOux3p+3iMj4ij1V56igkjIfrPfaTVR+FdOhSsoAEJGbsYYHv8UayjqIc2gS7+jdU9WA&lt;br /&gt;
JivqYtcR66/KW4wxn5cXisgVLvXKF5ZrXck+Kis7H9uxvjAOGWPctVKouyYo5mB9cbpq7oZ9/x3r&lt;br /&gt;
S+5dEckzxnxZYVv5OemANfnW3a7B+hIfWD6kASAit7vUK58U7HoOXHsv4NTnfBdWctAGKzkub6uB&lt;br /&gt;
c7+uixhmYQ3TLMYapultjMlw2V9/EQlx6V1pW2H76WzHmni7pOJw2Bm6FthujLmuYqGIuA73bAeu&lt;br /&gt;
FJE62ruizpbOWVEXu/K//F1/Fx6kwpeNMeYA1l+4I6XC+iwicilWwuNOs7GGep4Qa0XeE4hI+Dns&lt;br /&gt;
s3xY5XcvQz0D24FQEelQIZ5I4Orz3C9Y5/surB6WT53DMuVWY028fFBEQit78nkq439XjAEgIs2x&lt;br /&gt;
Jq/+L0BrvkwW4HoZ7b2cnJyUJw6u5/x7rMTrQZfyh537mOUanDFmP9ZVXkHAT855IRX35wfc5/K0&lt;br /&gt;
0VjDTWdyJdNk5z5OupzdeZn1753zk3rPRCQR6OlS/A3W79kzrvWVOh3tWVEXuzSsL+DXRKQxVpJw&lt;br /&gt;
LZV/qT8BTAOWiLWmSz2sL6l1QM3zjOO3rndjzFER+RvWcverReRLrG74pliTLxdhXRlyxowxhSKy&lt;br /&gt;
EbhBRLZiXW203hhztnNAvgReAaaJyJtYVy79FauH4LwnohpjjHNYYRrWZd6DjTFzneV/A2YAqc7z&lt;br /&gt;
fwBrjkQ7Y4zrJNKzNQtrzsVsEfkCa3HBe4CtWFfvVPQh8JiIfIA1ibQvVi+J6/BJsrPsn87XsATr&lt;br /&gt;
yp61IvIJcJcz6ZiPdenySOBbY8z8ygI0xmwXkSuxhqrmiMjlzuTpO6z5TS+KSAv+d+nyMKyl/k9a&lt;br /&gt;
F6eSfS8QkXHO4+oCzHHGG43Vq/MA/7vk3dVM4BoRmYZ1HlsCd2PNL/rt98IYM09EJgIPiEg01mX5&lt;br /&gt;
PlhX1P1qfn+lZK9fYE95lvasqOroVN3vJ5U7u/yHYl318BjWX5absb44XOvOxJq/4I+1Rso1WHMa&lt;br /&gt;
tmAtruXa1tmsF3FCuTFmEla3/F7gEawrQW5wxul6G4EzPd7bsdaEeR1r/ZRTrudR4fmucWVj9aIc&lt;br /&gt;
x0pabsE6bzPP5PmnKS9voxTrC3IpVlLU3Vk+B+uqlM1YicVrwOVYCcxZHUclbc7Fei0jsK7SuQFr&lt;br /&gt;
fZtplVQfg5WwXIt1DgTripsT2jHGrAL+gZXsTMA65+UL3N2O1cPQzdleP6xL2yvOjzkpdmPMemdb&lt;br /&gt;
bYAZIhJojDFYickbWMnsWKwk7hFjzCNnei6MMX/D6tmq74zln864PsUagnLdT/nzPsZaI6YT1vos&lt;br /&gt;
A4A/YSVrrm39GWu4rznW/JbHgRrAkspiqqw9dXES632ulDpXIpICHDTGnHZlVuVZznkSjxljTrsS&lt;br /&gt;
rPJOIrIb+NEYc5fdsSjv4dGeFRHpIyIzRGSfc7nkJJftE+R/S3+XP753qRMoIu+ItQT2URGZ4pyI&lt;br /&gt;
VrFOXRH5XESOiEiOiHwoIiEudZqIyCyxlj3PEJFXz3EGv7pIiYifiPi6lPUDOlP5Zcaq6jXCmlOi&lt;br /&gt;
LkDOOVph6GuoXHh6zkoIkIq1tPSpxjt/wOoaLB+TdJ2J/gZWt+e1WPMJ3sGaqNWnQp3yMeb+WIsR&lt;br /&gt;
fYy1SNbN8Ntlhd9jLdPdA+sDbSJQjNVNq9SZiAJ+FpHPsN5LbbHG5vdz8qJsqgo552pcgzV8dLph&lt;br /&gt;
IeWFnPNxbsQaFvrF5nCUl6myYSCxbi52tTFmRoWyCVhLal9ziufUxppY+EdjzFRnWQzWYkc9jDEr&lt;br /&gt;
RKQt1kSueGNMirPOQKyJXo2NMRkiMgjrAyzSGJPlrHM31ryD+hUvVVTqVJzvx3FAb6xx/eNYa7Q8&lt;br /&gt;
fiaTGJXnOBcl+w9WD9ddxphTrguivJNY98xqBbxrjHnldPXVxcUbrgbqJyKZWOsX/Ar8wzmJDyAe&lt;br /&gt;
K8bfsmxjzGbnmGZPYAVWT0lOeaLi9DPWhKxErIWeegDryhMVp9lYNwRrjzV7XqnfZYzJ4+QJkMoL&lt;br /&gt;
GGM+wVrET12gjDGX2x2D8l52Jys/YA3ppGNl1C8B34tIT+cM94ZAsfNLoqJM5zac/56wRLQxpkxE&lt;br /&gt;
sl3quK4EmllhW6XJivPeGAOxlqd2vdpDKaWUUqdWA+vKr9mV3BLkrNiarBhjJlf4cYOIrMNa86If&lt;br /&gt;
3jFhcSDWHXGVUkopdW7+hDW39JzZ3bNyAmNMuohkYS1fPhfrpmYBIlLbpXclwrkN57+uVwf5Yi3Y&lt;br /&gt;
VbFOd5fmIipsO5WdAJ999hlt27b9nWrqQjF69GjGjnW92a26UOnrWb3o61m9bNq0iZtvvhkqv3nm&lt;br /&gt;
WfGqZMW5gmgY1sqUYC0qVIp1lU/FCbZNsRaMwvlvHRGJqzBvpT/W1UXLK9R5QkTCK8xbuRLrbrcb&lt;br /&gt;
fyekQoC2bdvStau77xKv7BAaGqqvZTWir2f1oq9ntXXe0yg8mqw41zopv909QEsR6Yy11Hc21gqO&lt;br /&gt;
32D1brTGWg1yC9bkV4wxeSLyEfC6iOQAR4E3gcXGmBXOOmkiMhv4wLkcdwDwFjCpws2+5mAlJRNF&lt;br /&gt;
5FEgEngeeNsYU+LJc6CUUkqp8+PpnpVuWMM55Us8v+Ys/wTrvhudsJY1r4O1VsVs4GmXBGI01o2y&lt;br /&gt;
pgCBWPeTuNelnZuAt7GuAnI4644q32iMcThvivYe1rLOx7HWYtEbaimllFJezqPJivOGXL+3SuxV&lt;br /&gt;
Z7CPIuB+5+NUdXJxLgD3O3X2YN0DRimllFIXEF1uXl1UbrxRl0mpTvT1rF709VSnosmKuqjoh2H1&lt;br /&gt;
oq9n9aKvpzoVr7oaSCmllPI2u3fvJitL763oKjw8nKZNm1ZJW5qsKKUuTAcOQFERNG9udySqGtu9&lt;br /&gt;
ezdt27YlPz/f7lC8TnBwMJs2baqShEWTFaXUBenAsLvwP7iX8N0pp6+s1DnKysoiPz9fFwd1Ub7g&lt;br /&gt;
W1ZWliYrSilVqaIi6qT8SpAjH8e+A/hERdodkarmdHFQe+kEW6XUBSdr+mKCHFa3/K4Pf7I5GqWU&lt;br /&gt;
p2myopS64Bz4ZA7J9dsxo8kVHJs6x+5wlFIepsNASqkLTs0lsxnx1GMcbFCH1NtuB4cDfPRvL6Wq&lt;br /&gt;
K/3tVkpdUMr2ZxJRsIk1nRqzu3EtjtWBo4vW2B2WUsqDNFlRSl1Q0sf/xNy4OEr8rPujTk3sw87x&lt;br /&gt;
s22OSinlSZqsKKUuKMenzmFi4hCaB9agd+3aTO51Ff6/6rwVpc5FcXExjz76KFFRUQQHB9OjRw9+&lt;br /&gt;
/vlnu8M6iSYrSqkLh8NB1KY5zOvdlRF5tbkuoybJXVvS+NAyzNFjdken1AXn1ltv5Y033uCWW27h&lt;br /&gt;
zTffxM/Pj8GDB7NkyRK7QzuBJitKqQtG7sJ1HG4YQGb9YAa8eJyuDxymMNCXFR1j2T1xvt3hKXVB&lt;br /&gt;
WbFiBV999RUvv/wyL7/8MnfccQe//PILzZo14//+7//sDu8EmqwopS4YO8fNZnrCJdQ5Bv5L83Fs&lt;br /&gt;
L6LLAX++ShzA4Uk6b0WpszFlyhT8/Py48847fysLDAzk9ttvZ+nSpezbt8/G6E6kyYpS6oLhP28O&lt;br /&gt;
U3oNYOSmEEypQfyEm9bUYHbvnoSv1nkrSp2N1NRUoqOjqVmz5gnlCQkJv233FpqsKKUuCI6jx4nM&lt;br /&gt;
WUFKp2ZcusKHkI4h1L2iLp2XONjVuA7UzCF/0y67w1TqgnHgwAEiI0++VUVkZCTGGPbv329DVJXT&lt;br /&gt;
ReGUUheE9E8WsKlLexziQ/i8AsLuaERAVADZo7dT6zjMSuxB73fn0OmtO0+/M6U8ID8f0tI8305s&lt;br /&gt;
LAQHn/9+CgoKCAwMPKm8Ro0av233FpqsKKUuCNmTZjM5sT/9dgTgyCpmdtPZ7A/ZT//S/ty0IZiv&lt;br /&gt;
egykx39nA5qsKHukpUF8vOfbSU4Gd9xTMSgoiKKiopPKCwsLf9vuLTRZUUpdEOqnzmbOg//imbkB&lt;br /&gt;
+NVz8FL+S2RlZzG03VAuX+nDp7dH03jM01BaCn760aaqXmyslUhURTvuEBkZWelQz4EDBwBo1KiR&lt;br /&gt;
expyA/2NVkp5vaMbdlMYdpzM+jWJXlSK9BP2HNsDQG6vXCKmh1D4Nz/Wtm9GzNSVNL6+p80Rq4tR&lt;br /&gt;
cLB7ejyqSpcuXZg3bx7Hjh07YZLtsmXLEBG6dOliY3Qn0gm2Simvt+3dOcxK7EHkIfBdV8ia9msI&lt;br /&gt;
DQylVd1WzG85H3OolF7b/Jia0If9E/QSZqXOxHXXXUdpaSnjx4//ray4uJiPP/6YHj16EBUVZWN0&lt;br /&gt;
J9KeFaWU13P8OIcp9w7glrXB4JvP53U+Z3CzwUTViuLjlI8ZXHcwI1IDGdurD/d+9RrwrN0hK+X1&lt;br /&gt;
EhISuP7663n88cfJzMykdevWfPzxx+zatYsJEybYHd4JtGdFKeXVTGkZERmLWNWpFb2WQY3EGiw5&lt;br /&gt;
uoSkmCSSYpI4UHgA09fQblEZO5uEERiQTlFGjt1hK3VBmDhxIg8++CCfffYZo0aNoqysjFmzZtG7&lt;br /&gt;
d2+7QzuBJitKKa+265tVpHRujk+ZD3WWFLIrfhd+Pn5c1foqejbpSVhQGKntUvFbV0iDgzAnoTub&lt;br /&gt;
3/vV7rCVuiAEBATwyiuvsG/fPvLz81m2bBlXXHGF3WGdRJMVpZRXO/DxbKYl9uGq9f6YfAczomZw&lt;br /&gt;
abNLqVOjDn4+fgyJHsJn9T4DH/jTuiCm9OhP/jSdt6JUdaLJilLKq9VaNocfevYiaXUAAc0D+Lro&lt;br /&gt;
a5Jikn7bnhSdxIrjKwhMCOSSZcLiru1psO1XMMbGqJVS7qTJilLKaxVkHMHU3s+B+qG0WFjMkV5H&lt;br /&gt;
KDElJyQrA1sPJMA3gPS4dOotKaTMx48dsaFkLNhiY+RKKXfSZEUp5bU2vfMrPyV2o006+OwpYX6r&lt;br /&gt;
+XSK6ETzOs1/q1MzoCb9W/RnetR0yHdw+VpfZib2JH2c3thQqepCkxWllNcqmDabbxP7cdPaIHxC&lt;br /&gt;
fJgQMIGk6KST6iXFJPFN6Tf4N/Xn6tRAZvS8lIC5Om9FqepCkxWllHcyhvBd81jRKYbuSwyOXg4O&lt;br /&gt;
lh08YQio3NDooZRRRm7PXNosLCG9cX2CzAZKj5983xOl1IVHkxWllFfaM3cbmzuGEZTvS0hyIWva&lt;br /&gt;
rSGyZiTxjU6+U1zj2o2Jj4xnXqt5+O4uoVU6zE/sRNp/l9gQuVLK3TRZUUp5pZ3j5zAzoQeDV/uB&lt;br /&gt;
Az4N+5Rh0cPwkco/tpJikphQYwI+wT6MWFOD6Yl9yP5S560oVR1osqKU8koB82fzXc8+DF7tj18n&lt;br /&gt;
P1Y7Vlc6BFQuKSaJw47DlPYspccymB/fmdANv1RhxEopT9FkRSnldYqPFeMTuI2DYXVovKiYnV13&lt;br /&gt;
EuwfTP+W/U/5nM4RnWka2pTUtqnUTi7Ev8ifg60dHNpwsAojV0p5giYrSimvs+HDpSxI6ECX9SC5&lt;br /&gt;
ZcxoNIOBrQZSw6/GKZ8jIiRFJ/Fp2KdQBgNW+fBDYiJb3vmpCiNXSnmCJitKKa+TM3kOMxIv4frU&lt;br /&gt;
QHzr+/KN3ze/OwRULikmiTWyBt8OvgxNCWB6Yl8cs3XeilIXOk1WlFJep+bmeSzp3J4uSwy5PXMx&lt;br /&gt;
PoYhbYac9nmXNr+UWgG1SI9Lp9niEnZGRRBYmIKjTJfeV6oyx48f55lnnmHQoEGEhYXh4+PDp59+&lt;br /&gt;
andYJ9FkRSnlVTLWHWJfWyH8kC81thQzv+V8ejXpRf2Q+qd9boBvAIPaDGJ61HR8csrouMGwqntL&lt;br /&gt;
0iavrYLIlbrwZGVl8fzzz5OWlkaXLl0QEbtDqpQmK0opr7L5nZ+ZnZDAkOU+iL8woeaEMxoCKpcU&lt;br /&gt;
ncS0gGn4hvtyXXIgMxN6cuATHQpSqjKNGjUiIyOD9PR0Xn31VYyX3gBUkxWllFcxs2czo0cfrljt&lt;br /&gt;
T0n3ErL9ss8qWRnUZhDiK2QnZtN1ueHX+K7USP7ZgxErdeHy9/enQYMGdodxWpqsKKW8RlmpAdlA&lt;br /&gt;
Tq26RKwoJrVtKtFh0cSGx57xPuoF1aNvs77MazmP4M0l1MnxJ6d5Hrn78z0YuVLKkzRZUUp5jfVf&lt;br /&gt;
rmdV95YkJhukyDAxfGKlNy48naSYJD6u/TH4wZXLhF8SurL+nfnuD1gpVSX87A5AKaXKZXw6h5lX&lt;br /&gt;
9eQPiwKRliWsDVrL2zFvn/V+hkUPY7T/aEriS7gqpSZP396bwf+aAy8O8kDUSlnyS/JJy0rzeDux&lt;br /&gt;
4bEE+wd7vB1vosmKUspr+K+dy+K/j+bJV8vY2WcnYUFh9GzS86z306peK9rXb09K2xS6T0pk32ON&lt;br /&gt;
8MldhTHgpRc7qGogLSuN+PEn32jT3ZLvSqZrZFePt+NNNFlRSnmFw3sLyGp9nOY7ffHPLGN61HSG&lt;br /&gt;
RA/Bz+fcPqaSYpKYmD6RhKIEuiUb0rqF0/iXPcRc0cTNkStliQ2PJfmu5Cpp52KjyYpSyiuse2cB&lt;br /&gt;
vyR2ZfBSQWrBjNoz+Cr6q3PeX1JMEi8tegmaw/Bkf75PSKD1+DnEXHG7+4JWqoJg/+CLrsejqugE&lt;br /&gt;
W6WUVyiYMYeZib24NNmPnO45+Ab4cmWrK895fwlRCUSERJAel06nZYZf4+KRpXoXZqUuRNqzopSy&lt;br /&gt;
ncMBJUVrKfAbRt11JUy/Yx79W/SnVmCtc96nj/gwLHoY03ZNY3TGaKL2BpAXmcHxvDJCavu6MXql&lt;br /&gt;
LmzvvPMOubm57Nu3D4AZM2awZ88eAB544AFq1Tr330N30WRFKWW7TT/vY3O3MHovMwjCxLoTeTHm&lt;br /&gt;
xfPeb1JMEtesvIaHaj7EwMWGRQntaPhhMpc8lOCGqJWqHv7973+ze/duwLp7+dSpU5k6dSoAt9xy&lt;br /&gt;
i1ckKzoMpJSy3c7xc/g+MZEhyf4UdywmOzibodFDz3u//Vv2x7+GP4e7HeayFH9mJvYkd/JsN0Ss&lt;br /&gt;
VPWRnp5OWVlZpY+mTZvaHR7g4WRFRPqIyAwR2SciDhE5aXUnERkjIvtFJF9EfhKR1i7bA0XkHRHJ&lt;br /&gt;
EpGjIjJFRBq41KkrIp+LyBERyRGRD0UkxKVOExGZJSLHRSRDRF4VEU3WlPICZSvnsiy2E21WOEht&lt;br /&gt;
l0p8ZDyNazc+7/0G+wczoNUA5rWYR9jaEg7XjKLk4Eo3RKyUqkqe/rIOAVKBe4CT7o4kIo8C9wF3&lt;br /&gt;
AQnAcWC2iARUqPYGMAS4FugLNAK+cdnVF0BboL+zbl9gXIV2fIDvsYa9egC3An8Gxpzn8SmlzlNe&lt;br /&gt;
Thk5TbNot9EX32MOvqj/xVndC+h0kqKT+CL8C8RAz2WG3Z392ZFyxG37V0p5nkeTFWPMj8aYp40x&lt;br /&gt;
04HKlmIaBTxvjJlpjFkPjMRKRq4GEJHawG3AaGPMfGNMCvAXoLeIJDjrtAUGArcbY1YZY5YA9wN/&lt;br /&gt;
FJGGznYGArHAn4wx64wxs4GngHtFROftKGWj1R+lsDixHQOXgmloWFNvjVuTlaHRQ8kOyaaoQxFD&lt;br /&gt;
VvoyJ7E7ae/Nddv+lVKeZ9swiIi0ABoCv11LaIzJA5YD5UtWdsPqDalYZzOwu0KdHkCOM5Ep9zNW&lt;br /&gt;
T05ihTrrjDFZFerMBkKB9m46JKXUOcidPJtZiT3otcqXnXE7aVqnKZ0jOrtt/xE1I0hsnEhK2xRi&lt;br /&gt;
VhnmdexK0Vy9C7NSFxI752w0xEooMl3KM53bACKAYmcSc6o6DYGDFTcaY8qAbJc6lbVDhTpKqSpm&lt;br /&gt;
DBzPS8WnMJyau8qY1mgaSdFJiJvXxB8eM5xJ9Sfhd9QQvSWA3Hp7KCpyaxNKKQ/SIZAzMHr0aEJD&lt;br /&gt;
Q08ou/HGG7nxxhttikip6mFrch674wLos8QBgT7MiZjDjJgZbm8nKSaJx+s/jqO+gwGLhNSEpsR8&lt;br /&gt;
tY1eI1uf/slKqdOaNGkSkyZNOqHsyBH3zQ2zM1nJwJrHEsGJvR4RQEqFOgEiUtuldyXCua28juvV&lt;br /&gt;
Qb5APZc63V3aj6iw7XeNHTuWrl11CWWl3C3tvbnMTuzOXz7zI7tLFv41/bm0+aVub6dteFta1WtF&lt;br /&gt;
elw6lyRH8/AfetDv49mgyYpSblHZH/CrV68mPt49N3a0bRjIGJOOlSj0Ly9zTqhNBJY4i5KBUpc6&lt;br /&gt;
MUBTYKmzaClQR0TiKuy+P1YitLxCnY4iEl6hzpXAEWCjmw5JKXWWChb+SkqLDjRd42Beq3kMajOI&lt;br /&gt;
AN+A0z/xLIkISTFJTI+aTu1dZRQQxfE9y0//RKWUV/D0OishItJZRLo4i1o6fy6/7ekbwD9EZJiI&lt;br /&gt;
dAQ+BfYC0+G3CbcfAa+LSD8RiQf+Cyw2xqxw1knDmiz7gYh0F5HewFvAJGNMea/JHKykZKKIdBKR&lt;br /&gt;
gcDzwNshHzbPAAAgAElEQVTGmBJPngOlVOUKCuBw5AG6pPohpTC5wWSSot13FZCrpJgkfmr4EwRA&lt;br /&gt;
7yUODrQvYe+OYo+1p5RyH0/3rHTDGtJJxppM+xqwGngOwBjzKlZiMQ6rFyQIGGSMqfgJMhqYCUwB&lt;br /&gt;
5gH7sdZcqegmIA3rKqCZwALg7vKNxhgHMBQow+q1+RT4GHjGTceplDpLKyZtJ6V7U65c5KCoVRFZ&lt;br /&gt;
dbMY1GaQx9rr3aQ3QaFBHO58mIHLfZib0Jk145Z5rD2llPt4ep2V+cYYH2OMr8vjtgp1njXGNDLG&lt;br /&gt;
BBtjBhpjtrnso8gYc78xJtwYU8sYc70xxvXqn1xjzM3GmFBjTF1jzJ3GmHyXOnuMMUONMTWNMRHG&lt;br /&gt;
mEedSYxSygaZn83hx+6JdFvtS0q7FPo060O9oHoea8/f15/BbQYzt+Vcmq+D5dFx5P3wk8faU0q5&lt;br /&gt;
jy43r5SyRc6h1dQ6XJ/AbMPXEV8zPGa4x9scHjOcbxp+g08JdFgXSFZIOqWlHm9WKXWeNFlRSlW5&lt;br /&gt;
9C0lZHQo4ZIlDhyhDlIjUxkWPczj7Q5sPZDDYYcpbFHI5YsdbOlej+TZWad/olLKVpqsKKWq3Jrx&lt;br /&gt;
y/m1Rxz9l/uQ3jmdtg2tS4s9rXZgbS5rcRkpbVNITPblx+6J7PpIV7NVF6dVq1Zx33330aFDB2rW&lt;br /&gt;
rEmzZs244YYb2Lp1q92hnUSTFaVUlcv96WfSGnYgYhvMiJrh1nsBnU5SdBJfN/yaGtkGv2NR5GxZ&lt;br /&gt;
cvonKVUNvfLKK0ydOpUrrriCN998k7vvvpsFCxbQtWtXNm70rlU9dAVbpVSVKi6GzLp76L7SF+ML&lt;br /&gt;
c5vM5fGYx6us/WExw3gg6gHKajnotQQyY45xMNPQIMK9S/wr5e0efvhhJk2ahJ/f/1KBESNG0LFj&lt;br /&gt;
R15++WU+/fRTG6M7kfasKKWq1IofDrM5IYz+ixzktM0mqH4QCVEJVdZ+09CmdIrqRHqnHfRfJixJ&lt;br /&gt;
jGXFhA1V1r5S3qJHjx4nJCoArVu3pn379mzatMmmqCqnyYpSqkrt/O8v/Nq5Ox3X+DCv1TyGRQ/D&lt;br /&gt;
R6r2oygpOonvGn9Ho23C2iZdODhNL2FWqlxmZibh4eGnr1iFdBhIKVWlDu5ZQYN9Q/ErtOarvBnz&lt;br /&gt;
ZpXHkBSTxBvN3uBBnweJWx1Apu9WHA7w0T/f1PnIz4e0NM+3ExsLwcEe2fVnn33Gvn37eOGFFzyy&lt;br /&gt;
/3OlyYpSqsrs32c4GHucPoscFEaWcDDyIFe0vKLK4+ga2ZVaEbXIjs3m8kV12Na9BqlLC+jaO6jK&lt;br /&gt;
Y1HVSFoauOnGfb8rORk8cHPdtLQ07rvvPnr37s3IkSPdvv/zocmKUqrKLP94E0sSYnnoZSG1QwoD&lt;br /&gt;
Wg8g2N8zfyH+nvIbG85tOZfhv1zH+LviueSDhXTtfWWVx6KqkdhYK5GoinbcLDMzkyFDhlC3bl2+&lt;br /&gt;
/vprRLxrwrkmK0qpKnNg5i/su6MDdTKFaQOmcWf0nbbFkhSTxD1N7uG6gusIPRRF5vq5WDdjV+oc&lt;br /&gt;
BQd7pMfD0/Ly8rjqqqvIy8tj0aJFNGzY0O6QTqIjtEqpKlFWBhlB20lY4UtZDQcpzVIYGj3Utngu&lt;br /&gt;
a34ZhxofojCiiF5LHGQ2P0xurm3hKGWLoqIihg4dyrZt25g1axYxMTF2h1QpTVaUUlVi1aJCdnYP&lt;br /&gt;
5rJFZezqsJOuLboSUTPCtngC/QIZ2HogKW1Xc+kyITWhGYu/3m9bPEpVNYfDwYgRI1i+fDlTpkwh&lt;br /&gt;
IaHqlhA4W5qsKKWqRNpHi1gaG0+bNF9mNZ5FUnTVrVp7KkkxSUxvNJ26mUJ63c7s+UovYVYXj4ce&lt;br /&gt;
eojvvvuOQYMGkZWVxeeff37Cw5vonBWlVJXYu3UpTZv1QRywoOUCxsSMsTskBrcZzN0t76Ys0EHX&lt;br /&gt;
5AD2lmzEGPCyuYVKecSaNWsQEb777ju+++67k7b/6U9/siGqymnPilLK4w4fhsyWuVyy2EF2yxxC&lt;br /&gt;
m4XSrn47u8MiPDichFYJ7GyXTr9FZRzoImxc77A7LKWqxNy5cykrKzvlw5tosqKU8riFkw+wplsz&lt;br /&gt;
eqwU5rWaS1JMktdcGpkUncSsJrOI3uTD8g6dWf1RFVx6qpQ6K5qsKKU8bue3P3NE2hN0TPip2U9V&lt;br /&gt;
epfl00mKSWJhq4X4OIQGeyLZs3Kh3SEppVxosqKU8iiHA/awmYQVvhTWLeZgy4P0btLb7rB+0yas&lt;br /&gt;
DeGtwjncPIfeix0caJTJ8eN2R6WUqkiTFaWUR61NdbC/qy+XLipjTWwKg2IG4e/rb3dYJ0iKTmJe&lt;br /&gt;
y1/puULY3K0BC78/andISqkKNFlRSnlU8oQU1jfvQtQeX75v8r1XDQGVS4pJ4pcWvxB8TDgU0Ikt&lt;br /&gt;
X8y1OySlVAWarCilPCp93WJap9XF4WdY03oNV7W+yu6QTtKjcQ8OtzlMYWgx3Vb5s/PoOrtDUkpV&lt;br /&gt;
oMmKUspj8vIgo0kWvZc42Bm9k8S2idQOrG13WCfx9fFlSOwQUmNW03dxGZkdi9m+3e6olFLlNFlR&lt;br /&gt;
SnnMgu+Psa1zBF3WCLOb/ugVq9aeSlJMErObzqbJLl82t2jPks81W1HKW2iyopTymE1fzaO0IBa/&lt;br /&gt;
EmFxm8UMixlmd0inNKDlANZGr8Xha2i8owFbF8y3OySllJMmK0opj9lZvIHEFb5kN8qjfvv6NA1t&lt;br /&gt;
andIpxQSEELP9j3ZGb2LXksd7AvbS2mp3VEppUCTFaWUh+Tlwf4ODi5Z4mBRy3lePQRULikmiTlN&lt;br /&gt;
fiQuRdjdOZRtW3TpfaW8gSYrSimP2JScz8GwGOpm+zCv5TyvvGTZ1dDooSyJXoJ/iVBU2o4t89Lt&lt;br /&gt;
DkkphSYrSikPSZu/kZab61EcVMLh9ofpGtnV7pBOq1GtRjTs2JCciKN0W+XPxvWb7A5JKY/ZuHEj&lt;br /&gt;
I0aMoFWrVoSEhFC/fn0uvfRSZs6caXdoJ9FkRSnlEZv3bKPnUlgbk8aQ9kO85saFpzM8djgLWi+g&lt;br /&gt;
51LYfXy/3eEo5TG7du3i2LFj/PnPf+bNN9/k6aefRkRISkriww8/tDu8E/jZHYBSqnrKKMvm8i0R&lt;br /&gt;
vD3wV/4ac7fd4ZyxpJgk/tbkbwxfPIRjUmJ3OEp5zKBBgxg0aNAJZffddx9du3bl9ddf54477rAp&lt;br /&gt;
spNpz4pSyu2MAYfxxa9M2N9kH5c1v8zukM5YhwYdKGxTCIA/NcnPtzkgpaqQiNCkSRNyc3PtDuUE&lt;br /&gt;
2rOilHK7jAwIoC4ArXq2ItAv0OaIzpyI0LtHbwpqFBNYFM6mtSXE9/CuGy8q5U75+fkUFBRw5MgR&lt;br /&gt;
pk+fzg8//MCNN95od1gn0GRFKeV2G5bmEJRXj6x6R+jTro/d4Zy1/q36syfiAPUzmrF+3mbie3Sw&lt;br /&gt;
OySlPObhhx9m3LhxAPj4+HDttdfy1ltv2RzViTRZUUq53foVG2i2y4+dEbu5JLK73eGctbiGcfyn&lt;br /&gt;
4ft02t6MtJ1bAU1W1Onll5WRVgXjhrHBwQT7+rptf6NHj+b6669n//79TJ48mbKyMoqKity2f3fQ&lt;br /&gt;
ZEUp5XY7Du2i//YopnfbwD0Rt9sdzllrXLsxu5vuYPAKw/yCQ3aHoy4Qafn5xCcne7yd5Ph4utaq&lt;br /&gt;
5bb9RUdHEx0dDcDNN9/MwIEDSUpKYtmyZW5r43xpsqKUcru8kuOE5kF+6yME+wfbHc5ZExFqtPfH&lt;br /&gt;
52vBUea+v2BV9RYbHExyfHyVtONJ1113HX/961/ZunUrbdq08WhbZ0qTFaWUW5WVgZ+jBgB14kJt&lt;br /&gt;
jubcRcVH4RBDUFktsrIgPNzuiJS3C/b1dWuPh10KCgoAOHLkiM2R/I9euqyUcqsd2w1BRXUoqFFM&lt;br /&gt;
m47e8VfZuejSvAuHwnMIPlqP9cl6/bKqfg4dOnmIs7S0lE8++YSgoCDatWtnQ1SV054VpZRbrV2c&lt;br /&gt;
Qb2sWuxvsJeujbx/if1TiYuMY1qDWTTbFceaJRvpN7Cb3SEp5VZ33303eXl59O3bl6ioKDIyMvj8&lt;br /&gt;
88/ZvHkzr7/+OsEeHm46G9qzopRyq3XrN9Jqu7A9YitdGnaxO5xz1rpea7Y23kzLHbA1Q29oqKqf&lt;br /&gt;
P/7xj/j6+vL+++9zzz33MHbsWJo0acKMGTMYNWqU3eGdQHtWlFJutT/nAH33RvFzrz3UDaprdzjn&lt;br /&gt;
zEd8KGlbRMhsyD9+zO5wlHK7ESNGMGLECLvDOCPas6KUcquywlJ8jBDSuYbdoZy3Bt3qA+Bf4o8x&lt;br /&gt;
Ngej1EVMkxWllNsUFECNkmAcYmjSrYnd4Zy3tm3bciykkJCiUHbtsjsapS5emqwopdxm4wYHtY6F&lt;br /&gt;
khV+hM7NOtsdznmLaxTHgQYZhB2qSeqyHLvDUeqipcmKUsptUpbuJGpvIHvr7yYuMs7ucM5bu/rt&lt;br /&gt;
2NlgOy13CGvWbLA7HKUuWpqsKKXcZuO2LbTcAbuj0omsGWl3OOctwDeArNhDRGbA3oP77Q5HqYuW&lt;br /&gt;
JitKKbfJO3yYkHwo6lKIiNgdjlvU6lrT+s+xYnsDUeoipsmKUspt/AqtBCWiW4TNkbhPi24tKPV1&lt;br /&gt;
EFRcg2LNV5SyhSYrSim3yM6GmkUhHAspon279naH4zZxTeI4VD+H0KO12LLF7miUujhpsqKUcovU&lt;br /&gt;
NaXUO1yLzAaZF/Qy+646R3Rmf/huovYGsmKpzltRyg62Jysi8oyIOFweG13qjBGR/SKSLyI/iUhr&lt;br /&gt;
l+2BIvKOiGSJyFERmSIiDVzq1BWRz0XkiIjkiMiHIhJSFceo1MVg5fLNtEj3YX+DnbSo28LucNwm&lt;br /&gt;
JCCEQ0330SIdNqRttjscpS5KticrTuuBCKCh83FJ+QYReRS4D7gLSACOA7NFJKDC898AhgDXAn2B&lt;br /&gt;
RsA3Lm18AbQF+jvr9gXGeeBYlLoo7dqVTmQG5MZk4yPe8tHiHiXxhsBiOJqZZXcoSl2UvOXeQKXG&lt;br /&gt;
mJPvVW0ZBTxvjJkJICIjgUzgamCyiNQGbgP+aIyZ76zzF2CTiCQYY1aISFtgIBBvjElx1rkfmCUi&lt;br /&gt;
jxhjMjx6dEpdBEoPHwdqEpJYy+5Q3C6qZxQA/scdNkei1MXJW/78aSMi+0Rku4h8JiJNAESkBVZP&lt;br /&gt;
yy/lFY0xecByoKezqBtW0lWxzmZgd4U6PYCc8kTF6WfAAImeOSR11oyB1avRm7BceIyBoEJfSn0d&lt;br /&gt;
tE5oY3c4btc5pjNHQguoWRjE0aN2R6POSWoqlJbaHYXXe/HFF/Hx8aFTp052h3ICb0hWlgF/xur5&lt;br /&gt;
+CvQAljgnE/SECuhyHR5TqZzG1jDR8XOJOZUdRoCBytuNMaUAdkV6ig7FRXBrbdCfDyMH293NOos&lt;br /&gt;
7dkDdY+GkFX/CHFNLvyVa13FRcZxMDyT8KyapK7V3pULzvffQ1wcDBsGR47YHY3X2rdvHy+99BI1&lt;br /&gt;
a9a0O5ST2D4MZIyZXeHH9SKyAtgFjADS7InqRKNHjyY0NPSEshtvvJEbb7zRpoiqmYMH4Q9/gORk&lt;br /&gt;
K1kZMwZGjoSgILsjU2doZcpxGh4IIjN8G9eGD7U7HLerF1SPQxF7iN7cnOWr0unTu5XdIakz5XDA&lt;br /&gt;
E09A+/awdCn06gUzZ0KL6jMJ3F0efvhhevbsSWlpKYcPHz6r506aNIlJkyadUHbEjYmh7cmKK2PM&lt;br /&gt;
ERHZArQG5gGC1XtSsXclAigf0skAAkSktkvvSoRzW3kd16uDfIF6Feqc0tixY+natfpciulVNmyA&lt;br /&gt;
oUOt2/XOm0dG3bo07NAB3nkHHnnE7ujUGVq9ehN902FZ/wP4+/rbHY5HFMXmEb4E5qVtAzRZuWBM&lt;br /&gt;
ngxr1pCxcCERYWHIsGGQkABTp8Ill5z++ReJBQsW8O2335KSksJ999131s+v7A/41atXEx8f75b4&lt;br /&gt;
vGEY6AQiUhMrUdlvjEnHSib6V9heG2ueyRJnUTJQ6lInBmgKLHUWLQXqiEjF/un+WInQcs8ciTqt&lt;br /&gt;
H3+Enj2hdm12LV7MtTVrEnngAFOffhpeekm7ay8gh3fuJ7AYqMY5fc2+4QCUHdJJKxeMkhJ46imW&lt;br /&gt;
3347UaWlXFFUxMb586FdO+jfHyZOtDtCr+BwOHjggQe48847ad/eOxd0tD1ZEZF/iUhfEWkmIr2A&lt;br /&gt;
qUAJ8KWzyhvAP0RkmIh0BD4F9gLT4bcJtx8Br4tIPxGJB/4LLDbGrHDWSQNmAx+ISHcR6Q28BUzS&lt;br /&gt;
K4FsYAy8+SYMGUJh//48//XXxO7bx7K8PDqEhPBs//44CgrgtdfsjlSdIb/cIgAi+zW3NxAPiu3e&lt;br /&gt;
juKAMoLzReeAXygmTIBt2xjz5z/TrEYN9hQV0XnbNh4eP568v/zFGm5+4glrqOgi9t5777F7926e&lt;br /&gt;
f/55u0M5JW8YBmqMtQZKGHAIWAT0MMYcBjDGvCoiwVhrotQBFgKDjDEV79IxGigDpgCBwI/AvS7t&lt;br /&gt;
3AS8jXUVkMNZd5SHjkmdSkkJPPAA5v33mfnKKzzYty97DhxgdOPG/KNZM1KPHaNvairfjRnD8Gef&lt;br /&gt;
hfvugwYNTrtbZZ+SEqhVEMCR0EI6x3a2OxyPiWscx/z6y6hztCaZmdBQp+Z7t4ICeO45Vt1/P9+X&lt;br /&gt;
lvJFmzZcU78+Y/fs4fldu/j8llv4V0ICN99xB7J5M3z6KYSc3zqhZfll5Kflu+kATi04NhjfYF+3&lt;br /&gt;
7Cs7O5tnnnmGp59+mnr16rlln55ge7JijDntLFVjzLPAs7+zvQi43/k4VZ1c4Oazj1C5TW4uXH89&lt;br /&gt;
W7du5cGZM/k+JIQBQUHM6tiR2JAQjq09RvhrBxh2U23GXHIJSb6+yD//CW+8YXfk6nds2WIIyw7h&lt;br /&gt;
UPh+BkT0tTscj4mqFUVW2H4a7e/E8tQihl8VaHdI6ve88w4cPMjzN91Ep+PQ5bEcCm4L5LE+zfhT&lt;br /&gt;
RAR/376dkS1bMm7OHN4ePZouffvCjBkQFXXOTean5ZMcn+zGg6hcfHI8tbq6Zz2jJ598krCwsHOa&lt;br /&gt;
p1KVbE9W1EVi2zaOX3MN/+zbl38/8QSRNWrwbevWXB0eDg7Y/cpu0p9Kx5QYRhfX5fK7C/n+n/9k&lt;br /&gt;
yEMPwUMPQdOmdh+BOoUFKTk03+nHzuj9BPsH2x2Ox4gI+U0P0f4HmLtqC8Ov6mh3SOpU8vLgpZdI&lt;br /&gt;
efhhZhQWMn16GJkfZ5D5SQZN/t6EFmNa8GX79tydk8N9W7cS/9Zb/PXnn3n+ssuoN2mSdVXiOQiO&lt;br /&gt;
DSY+2T0TSk/Xjjts27aNDz74gP/85z/s27cPAGMMhYWFlJSUsGvXLmrXrk3dunXd0t750GRFeZyZ&lt;br /&gt;
N48p//43Dz37LIfq1eOxZs14tGlTgn19KUgvIG1kGkcWHyF7QBN+WhXADV9t59o/1GRM9+4MDg1F&lt;br /&gt;
nnsOPvrI7sNQp7AlJY22h2FbTPWfeBrY3Re/mXBky15AkxWv9dprkJ/PC9deS9eMUmp/kMOPdZvQ&lt;br /&gt;
LtEfGZtO9o/ZtJ3Ylss61SW1Wzfe3rePZ3x8+KpnT1564QVuu+UWfK+55qyb9Q32dVuPR1XYt28f&lt;br /&gt;
xhgeeOAB7r//5IGJli1bMmrUKF5//XUbojuR7RNsVfW2ceJErkhJYcQjj9C1eXM2JibyXIsWBPn4&lt;br /&gt;
cOCjA6zqtIrju4r4vHsXrp3TiillUWQH1uCe/wor8vOZ8/LL8PHHkOYVS+6oShTvtu6XU6dffZsj&lt;br /&gt;
8bzGV7YFwCfnuM2RqFM6dAhef511jz/Ot8eP88yUGhQ6fPikpCl/nt2UN2LjKSqE5O7J7H51N35G&lt;br /&gt;
GN2kCVsSExnSrBl3jRpFj4MHWf7WW9V+Ne0OHTowdepUpk6dyrRp0357tG/fnmbNmjFt2jRuv/12&lt;br /&gt;
u8MEtGdFeUheURHPff45bzZtSvM6dZjVti2DIyIAKM4sZvOdmzn83WGOX9qQO1NbY0r8mDkT/P19&lt;br /&gt;
eGVgC56avYkbrg/muc6duLJxY+Spp+Drr20+KlWZoGMlFAc4iOldfSfXlotr05V1YVsJPe5PWRn4&lt;br /&gt;
umeOo3Knf/4TfHx4YdgwErcVUPvzI7xX1pJ/vu9PdDTcemtNBu+L56M+6ZjHdnB45mFiP4mlYYsg&lt;br /&gt;
PunQgbtycrjv6FF61KrFbR98wI3t2tl9RB4TFhZGUlLSSeVjx45FRBg2bJgNUVVOe1aUWxlj+GzX&lt;br /&gt;
LmJ+/pn3IyMZc/Ag6wcP/i1ROTTtECs7riR3aR6zenZg6PxY+g32Y/16GDIErrwSfK9owO7Amtw5&lt;br /&gt;
HpYePcavL78MU6ZYK9wqr3L8ONTNCyKrfi5xjavfMvuuWtVrxeGwg4QfDmHHjur9V/cFafduePdd&lt;br /&gt;
Nj79NF8fOcKTEwM44hfI1nZRjBwJvXvDmjUw8nYfRvzSik+6dOF4ehGrOq3iwEcHMMbQu25dVg0d&lt;br /&gt;
yru5uUyNjOQPKSmnb7caEhG7QziBJivKbVKPHqXv8uXckp5O39WrSQMev+kmAn19Kc0rJe0vaWz4&lt;br /&gt;
wwbyW9TmNrozYUs4kyfDF19AUO18xswfQ9TrUdz46BLeKWqB74p8bkkNYkxMDMTGwpNP2n2IykXK&lt;br /&gt;
egcNM4LICcugTo06dofjcT7iw9EGGTTf6cf81Oo/R+eCM2YMhIby4oABXJLuT63vjjG+qDl/e347&lt;br /&gt;
Ld5sykOzH6LEN5e334affoJfsupwbW43crrUZ/Mdm1k/fD3FmcX4ivC3q69mS1gYV6am2n1UVW7u&lt;br /&gt;
3LmsWbPG7jBOoMmKOm85JSXct2UL8cnJZG/bxi+vvMJXV19Nk0GDAMidn8vKTis5+M0hFvaK4coV&lt;br /&gt;
HWjbM4D16+G66wyT1k0i9u1YXlz4Ij7iw3+23Uubm0PZ4F+HkeMcLMrJY97LL8Ps2TB/vs1Hqypa&lt;br /&gt;
sHIfzXYJRY0P2R1KlfGLOU5oHqQt32J3KKqizZthwgQ2P/ccX2Zn838T/MkICKawXwTf5o+iqKyI&lt;br /&gt;
8cnjafNWG95b+R79Li9l3ToYfJ0fwxfFMq1bB3KX5LGy40oOTbPez+G9evHkOUy0Ve6nyYo6Zw5j&lt;br /&gt;
+HD/fqJXrODTvXv51/jxpL7/Ppd/8gl07EhZYRnbHtlG6mWpFNSuwaiQbvx7fSQTJgjTp8PushX0&lt;br /&gt;
/m9vbvr2Jro16sbGezYy5foprMlcQ9ubP2Q8LfHbXMRtiwIZ06yZdTnh449X+0lvF5LM1O34lUGt&lt;br /&gt;
uIvno6TBFY0BKNp5wOZI1AmeegqionixTx+uWOtHzYX5vFPcgmF//54ft//IuKHj2Hr/VoZGD+We&lt;br /&gt;
7+8hblwcKw//zIQJMH06fLknnJFl3TnWrDYb/rCBtL+kUZpXCpGRdh+ZQpMVdY5W5OXRY/Vq7tyy&lt;br /&gt;
hUF797L5+ut5yMcH/59/hgYNOJp6lNXdV7PvrX2s6dGSAeu6ENY+iHXrYMA1+7h12kgSP0wkvySf&lt;br /&gt;
X0f+yrc3fEureq1IbJzIrZ1vZeyaf9B3VBlLfMMZ8YGDRQdzWfjSS9ZdU2fOtPvwVbnMbAAaJ3Wy&lt;br /&gt;
OZCqE3tpIgVBZQTlFZ++sqoaq1fD11+z7YUX+PxQFg986MtW/1o0urEW72wfzRUtr2B4zHAia0Uy&lt;br /&gt;
YfgEVt25ijo16jBg4gCSJiXRtvdW1q+HblcEcNWqDsztHsPBKYdY2WklR5N1uM8baLKizsrR0lLu&lt;br /&gt;
SEsjcfVqisvKWDh9Op/+8Y9Ejh4NEydi/APZ9dIuVies5nghPN0gnifWNOXNt4Vps/L5OH0M0W9H&lt;br /&gt;
8+O2Hxk/dDzJdyVzWYvLTmjjpf4vUVRWRHHvZ5gU0gLf/SX89ccAnm/QAPr1s+auXOT38vAWoUd9&lt;br /&gt;
yA4rpEvbBLtDqTLtG7Qnq34uYblBFBbaHY0CrPv7xMbyz27dGLbYj5B1RYxztKTFjW+SnpPOf676&lt;br /&gt;
zwkTRuMbxbPgzwuYfN1k1maupf277Xkp+WHGf5rLpEnCW9siubdGN/Jr1mDzXZttPDBVTpMVdVae&lt;br /&gt;
Sk/ny4MHeTsiglWjR3PJ++9bt2D/xz8o2FFISt8U0v+Rzta4JgzcFk9p05qkpBjq9Z1Eu3djeWHB&lt;br /&gt;
C9zb/V623r+VO+PvxNfn5Gs/I2tF8nTfp/lo7bsMfDKdH2lI0oQyFu/NYekLL8C6dfDll5VEp6rS&lt;br /&gt;
wYNQ/3AI2WGHiKx18XSV+/v6kxeWQWRGEGs3atJsu/nzYfZs0l98kc/3H+SuD4Vk33p0HVXIO+uf&lt;br /&gt;
576E+2hX/+TLj0WE69tfz6Z7N/Fsv2cZlzyO6LfbkNPqPVLXltI0IYgrN3RhU7tzX35fuY8mK+qM&lt;br /&gt;
HSgqYtyBA/w9MJB7r7oKv/R0WLAAc9117B+/n5WdV3J0VzGvNY3j3tSWvPCqD/+etII/L7TmpcQ3&lt;br /&gt;
imfjvRt5dcCrhNYI/d22RvUYRcu6LUluMIo5jZpDnoN7p/rxfK1aMGwYPP20dQc9ZZtFa4poutuf&lt;br /&gt;
/PBMu0Opco6obKL2CfNWXTwTi72SMVavSnw8L7Vvz7VzfAneVcJnQS3I6/4YNfxq8Gy/Z393F0H+&lt;br /&gt;
QTzR5wm23L/lt/ksQ76L48E3f2b8h8K49IsnEfdmmqyoM/avPXsIdDgYNXw41KsHK1ZQ1KQT64at&lt;br /&gt;
Y8vdW9gbE8HQA93YVzeU7xftY13rkfSakMjxkuP8MvIXpt4wldb1Wp9RWwG+AYwdOJZ5u36l31Pf&lt;br /&gt;
M8XRmIFflLFsWzYrn3sOduzQJfhttnrJTkLzILDNxbeaa3i3AHwdsH+lDhHYatYsWLKEXS++yKSd&lt;br /&gt;
Bxg5AX6VBvR6cgNfbf6UFy9/8YwvqW9UqxEThk9g5Z0rCQ0M5crPBjAjZDhjJ+z28EGoM6HJijoj&lt;br /&gt;
mcXFvL9/P6MWLqROgwawcCGHlgeyssNKcpYd5cNWHRi5Job7/1FM0mvPk/TT/+alrL5rNZe3uPys&lt;br /&gt;
2xwSPYTBbQYzreAh1nZuQHGxD/dP8uV5Pz+46SZrTYV8z9+OXVUub+N2AKL6RdgcSdVrcXV3HGKQ&lt;br /&gt;
A9qzYhuHw5q/dumlvNKiBTdM9cH/sINZDZuxvO4DxDWM4/a4s18qvlujbiz8y0K+uu4r1mSs4b55&lt;br /&gt;
13sgeHW2dLl9dUb+tXs3/g4HD776KqVvT2DrPXvInJhJTodw7t4cTVgDf577ZhLjdjxKxqIMHuzx&lt;br /&gt;
IE/2efK0wz2nM3bgWDq824HLRr3BZ7eN5PZp6Xzwh8OkPPkkcV99BW+/Df/3f246SnU2grILyA8K&lt;br /&gt;
JE43IsQAACAASURBVHbwZaevXM10bJvI9/XnU+eIfoTa5ssvYe1a9i5ezFdb9jPpcx9mmEjinpzM&lt;br /&gt;
RxkrWfiXhZXOiTsTIsKI9iMYFj2MRz55hHd5l02b/p+9+w6rsv7/OP68z+EwDnujAoKIoqDg3miu&lt;br /&gt;
nFlmmZq7YamZlZptG2pLW1pZlrk1V5bl3hsHLsCF7L03nHH//jjVz/pWLuA+wOdxXV5dwQ336yic&lt;br /&gt;
8z6f9Y6u5AdQs1X334f4TRNuKaOigsUpKbx48iSWrq2JeL0BFblZbAgMYvFFT0bMiOB64PO8FnmM&lt;br /&gt;
B4Me5MM+H972dM+tNHFtwrQO01gUMY8uA8ZQsMOS55breaelgU1PPAHz58PTT4PjvRVFwp0xGsE1&lt;br /&gt;
z5psjwIauQcqHafa2VrakueahWdmPXJzwdlZ6UR1jE5nWrc2eDAfuLvz+KIU5FKIaOlCbOlsRoSM&lt;br /&gt;
oKtv13u+jY3Ghll9Z7FMu4zHH3+8EoLXLlqtFjc3t2q5lyhWhFv6KDERC1lm+rvvcq3hWgrSVTyt&lt;br /&gt;
b4dsmU3fr8ayOm0FLQ0t2TNmz11N99zK691fZ8X5FagfmsX3v37M8zuv8u3xLM7PnEnLH36Ajz6C&lt;br /&gt;
d96p9PsK/y72hky9NBuK3BNRSXVzNrncLQP/074cO1fBgB6WSsepW777DmJjSd2wgU2RySzbILHa&lt;br /&gt;
4EP9yfM5l1XIB30+qLRb+fr6Eh0dTVZWFlGZUXx09CPOpZ2jjVs42b9MJ/diPd50vYarppDA9Kk8&lt;br /&gt;
tOgLWrm68l6jRpWWwVy5ubnh6+tbLfcSxYrwnzIrKliUnMz0s2dR2bQn96KWeeoGeDz/IZec53Om&lt;br /&gt;
wJavB33NxFYT73rI9VYcrByY33s+438aT/8nniH1exumLi3n3U4lrJ86FRYuhClTwLPurZ1Qyp7T&lt;br /&gt;
hTROURHTIkfpKIqxa1yK7SHYeyiBAT0qZyRRuA2lpab1aiNG8KGdHWOW51NqUHOjXxmH0z/lre5v&lt;br /&gt;
4e3gXam39PX1xdfXl9a0ZlTfUay/tJ6Zu2eSOuxRWg+ZytL3X+CLiqs08h/Lm9euMaVpUz4JCqKp&lt;br /&gt;
VlupOeqyuvmWSLhtHycmopJlnp/zNte004m1VHNmdhciHd/h2XbPcnXqVZ5q81SVFSp/GBM6hvYN&lt;br /&gt;
2hPfchrfqxoSetzIlV2ZXJo2DdRqU1t4odpcORSN2gieYVX7727OGvcyvSDmXYxROEkd88UXkJFB&lt;br /&gt;
+ptv8suxZHpvk1luaEjFAy/g4+DDi51frNLbS5LE8JDhxEyO4c3ub3LR+mtuvBLGca3M9eIRjP/k&lt;br /&gt;
c+oD78bHV2mOukYUK8K/yqqo4IvkZKZGRaGS21AUZ8u3Pb+lvrs9UZOj+LDvh/e8gPZ2qSQVn/X7&lt;br /&gt;
jKicc6he2sJVlR2Tv5V4LzcXZsyAr74C8eRQbYxxyRhUMs0GtVY6imKaDexHob0eu6xypaPUHfn5&lt;br /&gt;
pnVqTzzBx2o1Y5fKZKutyJ1wjqMZ21lw/wKsLayrJYqNxoZXw1/lytQrhDUIYtnQOVRkqMl1G8nL&lt;br /&gt;
e/awOj2dK2K3YqURxYrwrxYkJYEsM/2NN7lqM40o23KOdVjOkiGLK20B7Z34o2/QKcfXWOnkQeAl&lt;br /&gt;
mcTNmcQ8/TQ4OcGcOdWeqa5yylGR7V5G0w49lI6iGFeneuS45+OWYyN6a1aXjz+G0lIyZ89m1+4k&lt;br /&gt;
uhyAZZI314P/v/9PdatvX5+lD37DtcZH2O+azbXSkYyfvwAvSeI98Qaq0ohiRfhH2TodnycnM+Xq&lt;br /&gt;
VSgOozTNjqUDP+LBJsMIbxiuWK55veahM1Ygv/QRpyUnnv4W5qVnms5b+OEHENsLq1x5OXhmacl3&lt;br /&gt;
ycZCrVE6jqJKnDOon2pNQqKoVqpcRgYsWABTp7JQp2Pc1zJxFjYUv7CGxKL/7f9TnYLcgni23WR+&lt;br /&gt;
GPYaunwLcuwf4+XDh1mVns41MbpSKUSxIvyjhYmJGI1GXnj9Ta5ZT+WMcw7nmx9i4YAPFc1Vz74e&lt;br /&gt;
r4e/zlHdYrY0kfGOh8wVGVwbMwZ8fExt4oUqdTZKj0+SBp1LhtJRFKfyzMUrXcXeEwVKR6n95s4F&lt;br /&gt;
tZqcF17g8JZkQs/CKgcXTjv8e/+f6jTnvjfJ9s5kl891YssfY8LbH+ChUvFegjgBtzKIYkX4Hzk6&lt;br /&gt;
HZ8lJzM5IQE5O5TyXHuWDnmHFzu/iJ+Tn9Lx/uwblDvxJfar3Bi/DObHp8Jbb8HGjXDqlNIRa7V9&lt;br /&gt;
B1KxLZGw9RPvGH1bmbYsXzx4SeEktVx8PHz5JcyYwSdFxYz52sgFC3typ7+LtebW/X+qg7ONM/P6&lt;br /&gt;
vs0PD72BrlRDtuUjzDp5khVpaVwvLVU6Xo0nihXhfyxMSsIgy7z4+hyuWT7L0XpxpDZO57Xus5WO&lt;br /&gt;
Bpj6Bn3S7xMulexlV/hVXDKh6Ot0bgwbBkFBpikhocqknb4IQPNuYqt42OB26Cxk5BupSkep3d5+&lt;br /&gt;
G5ycyJsyhTMrEml8FTYGlHPasJy5Pefedv+fqvZ026ew8XXhl6YniK14jAlvvo+7Wi3WrlQCUawI&lt;br /&gt;
f5Gr0/FZUhLPpKRgSGqOrtiO7x54lwUD52Fnaad0vD8NCBzAgMABXL9/Or+q3Ri5Ej6KSYR334Wd&lt;br /&gt;
O2H/fqUj1lralGIK7A0ED+qrdBTFebXpQpZnKS7Z4qm0ysTEwLJl8OqrfJ6Zy8hvZI5pnEgc9zyt&lt;br /&gt;
vFoxodUEpRP+yUJlwdcPLWTlgI/Q6dRkGYcyMzKS5WlpxIrRlXsifsOEv/gkKQmdLPPiG+9y3eJp&lt;br /&gt;
9jWKRNPEhTGho5WO9j8W3r+QHF0KBx/ZhlWphO7TdOIHDIC2bWH2bMQWjarhkW1NjkcB2gYNlY6i&lt;br /&gt;
OMnCgkLnbOpl2KLXK52mlnr9dfD2pmDiRC59lYhXKvzc5SKx5RF81v+zKj/j6U71btSbls06syVs&lt;br /&gt;
B/G6R5jw+oe4WVgwV4yu3BNRrAh/ytPp+DQpiUlZWRiuNUVXruX7/gtY+sgnZnmkehPXJjzf8Xku&lt;br /&gt;
Np/DBisHhm6AT0/HmRbiHT8OP/+sdMRaJy9Ppn6qllIn0W34DwanDLyTNJyPEtVKpTt9GjZsgLfe&lt;br /&gt;
YnFCBo8sM7Lb2onoPi8yssXISun/UxW+eugj1vb6jjIgq+QBZkRH80N6OnFidOWumd8rkKCYT5OT&lt;br /&gt;
KZdlXnpzPrHqCewMPkiL1l3p7NNZ6Wj/6rXw13C0duDohIXoZBXSR+kkdesGPXqY1q4YDEpHrFX2&lt;br /&gt;
HS3EM0OFyjVb6Shmw7FhKVYVEjt231A6Su3zyisQFEThiBHELkzEIQ92PriRCop4v/f7Sqf7V4Gu&lt;br /&gt;
gQzvPJYfO2wgwfAgE2Z/hLNazVyxM+iuiWJFACBfr+eTpCSeLihAfzGACoM1K3su46uHzfcJAf6/&lt;br /&gt;
b1CU6wrWOhvp/wssOnwD5s2DixdNbeSFSnNsv2nXi2+weQ29K6l1j/oApJ0Rx+5Xqv37TevP3n2X&lt;br /&gt;
by6nMmS1ka0ONpwLms8rXV+p9P4/lW1e/9f4udt2SlR6snL7MyM2lu/T0ogvK1M6Wo0kihUBgM+S&lt;br /&gt;
kig1GHjxnQXcUI1hW+tfebT3WHwcfZSOdkt/9A06MH4GuVZqrOalk9qqFTzwgKmNfEWF0hFrDf3l&lt;br /&gt;
ZHQWMh36hykdxWw06dOTHBc9diniRajSyLJpVKVtW4qHDCFpfiKSTmLPqA/wcaz6/j+VwdHakdcH&lt;br /&gt;
v8qa8JUkyYOY+PJCnNRq5om1K3dFFCsCBXo9C5OSeKqsDP3JhlRgwebuO3m3/0ylo92WP/oGJVud&lt;br /&gt;
YrV/Mj32wpLt1+G99+DGDVi6VOmItYZLuooMr3JcOnRUOorZUPk2JM8tH89MG6Wj1B6//ALHjsHc&lt;br /&gt;
uXx3KoF+G4386FVOtPumau3/c6+e7TSBY52vUGBZSkZqH15KTua7tDQSxOjKHRPFisDnyckUGwy8&lt;br /&gt;
NHcR8dJwNnXYxGuPzkarqTntzf/oG7Tn4edIcFRj924G6U2awKhR8M47II68vmeyDPUybClyzgYH&lt;br /&gt;
B6XjmA9JoswxE+9kLcXFSoepBYxG03qz++6j9L77yHonkWKNxI4RLyjW/+duqVVqloz9kBU9fiCV&lt;br /&gt;
+5k463Mc1Grmi7Urd0wUK3VcoV7PgsREnjQY0B2sT7kKDne/ysT2I5SOdsfm9ZoH1mWsanWcNqdg&lt;br /&gt;
2fqrplNtMzPh88+Vjlfjxccb8E62xOAgjtn/O0uXHFxyVezYl650lJpvzRq4cAHmzmX5wQTCt8us&lt;br /&gt;
bZJIhjZG0f4/d6tX4+6k3acmT5tHRvx9vJiZydLUVJLE6ModEcVKHfdFcjJFBgMvvf8tiTzEui7r&lt;br /&gt;
+erpeTXuCQH+v2/Q7u6zifaUcHwvkwxvb3jySXj/fcjLUzpijbbl1xisKiQc6xUpHcXsNAq2AODo&lt;br /&gt;
/iiFk9RwOp1pndkDD1DWrh35byaSYS/x66CpZtH/524tf3I+3/dYRTr3MWHW19iJ0ZU7JoqVOqxI&lt;br /&gt;
r+fjxEQmShIVO90p01SQ1FdNF792Ske7a9M6TiPAtRHLu60lKAZWf3vVdKhUWRl89JHS8Wq02FOm&lt;br /&gt;
rbltu3gonMT8dO4TRpmVjHxZnD9zT5YuNa0ze+891my7QfvDMivbnsDa3sIs+v/crUYu/jg+2Iwc&lt;br /&gt;
+zQyrnblhYICvklNJbm8XOloNYYoVuqwRSkpFBgMvPDxKlIYxKouG/luyhylY92TP/oGHQ/5ipP+&lt;br /&gt;
BlzfzyLbyRWeew4++QTSxTD93bKLLyHb1UDT7u2VjmJ2rFuHkV6vDLd0C6Wj1FwlJaYeQKNGUdas&lt;br /&gt;
GaWvJ3PdC37r8jJze5lP/5+7tXjMy3zXYzPZdGX8rO+xVat5X4yu3DZRrNRRRXo9HyUmMsHSEv1W&lt;br /&gt;
J0oti7Ae3hRvx/pKR7tnf/QNWt7nI3wSYe2CGJg5E9RqWLxY6Xg1lle6DTnuhaZmkcJfeXhQ4pRF&lt;br /&gt;
/TRbpZPUXKtWQUYGzJnDhtWxND8v80P3jYTVDzOr/j93y97Knk4TB5LhGEfmxfZMLytjSUoKKWJ0&lt;br /&gt;
5baIYqWO+jIlhXy9nhc+3kAafVnRdRufTXxe6ViVZuH9C7ncYA97Wpbg+UkOORZaGDgQfv1V6Wg1&lt;br /&gt;
ksEADVK1VDhkgI3YovtPZPsM6qdaEhcvdp7dlW3boEsXKnwbop+TwrlGBg4FfWGW/X/u1isPjGH5&lt;br /&gt;
fQfIpR1jZ67BRq3mAzG6cltEsVIHFRsMfJiYyDitFt1GW0qss2k95X5sNLXnRaiJaxOmd3qeZb1e&lt;br /&gt;
wykXNrx9Gfr1g1OnTO/ehDuy+0A8rjlqNA5ZSkcxWy5eJWj0Ehu2nFc6Ss1TUQF79kC/fmxcfA2/&lt;br /&gt;
6zJL+y5mZEvz7f9zN1SSiomvTiTd+QrZZ0N53mDg69RUUsXoyi2JYqUO+iolhVy9nuc+3komPVnb&lt;br /&gt;
9QgvPjhM6ViV7rXw1yj3SuGXTtnU+zqXnDY9TJ/YtUvRXDXRvt2XAfALUDiIGevY0R2AhLMpCiep&lt;br /&gt;
gY4ehaIiKnr2RTUvjcOhZVxrsN2s+//crYfadmVj32vk05IRL27ESpL4MDFR6VhmTxQrdUyJwcAH&lt;br /&gt;
CQmMtbfHuM6GYptkhr87tkZuVb4VBysHPug7n+XdXsZCB5sXZENYGGzfrnS0GqcsOocyK5lu3UW1&lt;br /&gt;
8m/8OrQg3dOAQ5xo73DHtm8HDw82/2aDW4bM0t7v82q4+ff/uVuvvT+ZNJdLFJwOZppazVcpKaSL&lt;br /&gt;
tiD/SRQrdczXKSlk63Q89cFv5NCZn++7ysAOrZWOVWXGhI6hUUMXNvZOoMGqfLLDHzI1RzMalY5W&lt;br /&gt;
o3gkW5DWoAKb0BZKRzFfwcHkuRdQTyyyvXM7dlDRaxBWn2aws3M+xvrxNaL/z91q2bAhex8so4im&lt;br /&gt;
PDR1MxpJ4kOxduU/iWKlDik1GPggMZGxTk5YrLemWBvHc4smKR2rSqkkFYsGfsbatm9QYSnzc3y4&lt;br /&gt;
ac1KZKTS0WqUBml2FDtlQWCg0lHMl5MTOrs0fFK0VOj0SqepOVJTITKSn9VDsS2CZd3n8emAmtP/&lt;br /&gt;
527N/2QSaS6RVJxpzjRLaxanpJAhRlf+lShW6pAlqalkVlQw6t3fKJDbcKhfIc39vJSOVeU6eHdg&lt;br /&gt;
aMseHG6bhSZCAnt7MRV0B1LSc6ifagXadNBolI5j1qzss3AoVLNjjzjJ9rbt3AmSRPZZB862KKV5&lt;br /&gt;
gH2N6v9zt1zsbYke70EJ/vSZtAkLSeIjsXblX4lipY4oMxh4PyGB0c7O2G9yoER7jVnfP6l0rGrz&lt;br /&gt;
Qd/5HGsaQYMUmdSuI0Sxcgc2bDqPRi/h6FqgdBSzF+BvWvt1eO8NhZPUINu3U9Y6nEYxeo6GnGfR&lt;br /&gt;
oJrX/+duvfH+CNJdzqCJDGGqpZZFyclkitGVfySKlTrim9RUMioqGPz6LxTLwVwepsXZoXYPs97M&lt;br /&gt;
y84Lm5Byyi1hv2aAafdBfr7SsWqE66dMW73bhNornMT8dezkQ5GtTEWM6J90WwwG2LmTw/5jsDBI&lt;br /&gt;
JDeJr7H9f+6GWi1R8mJrymhAlyc3oJIkPhajK/9IFCt1QJnBwPyEBEY4O1P/F3dKbWKY8u1jSseq&lt;br /&gt;
ds/16s+psGKKYxxMT5J79igdqUbQ3tCT6mUkqI1Yr3Ir2hYhpDYoxyvZUukoNcOpU5CTw7X4hlxp&lt;br /&gt;
rGdUeBulE1W78a/0INvlDE4XWvGUhQ1fJCeTJUZX/ocoVuqApWlppFVUcN/MLZTJTSh8yg+Npu79&lt;br /&gt;
098f2IvjzaPxvwalge3EVNBt8k6xJcejECkkROko5q9ZM0ods/BOtUeWZaXTmL/t2zE6uuFzScWR&lt;br /&gt;
0DhGt31Q6USKcH6/JxW40n7iBgAWJCUpnMj81L1XrDqm3GhkXnw8D9vb03R3Q3Q2l3hkYT+lYylC&lt;br /&gt;
o9ZQEFyAJEscaTLRVKyIF5T/VFJRgk+KHQbbNPDzUzqO+dNqUdmk4JVuxeV4sW7llrZvJ6rdU9iW&lt;br /&gt;
SFxtkoir1lXpRIro+UQYha6RNIhuzyijms+Tk8nW6ZSOZVZEsVLLLU1NJbWigk4vbUJn9MNmRjB1&lt;br /&gt;
ZO3aP5rcuwvRQXpik/wgMRGio5WOZNYOHD6PQ6EaS5sMUImni9vh4lSI2ijxy0+XlI5i3rKz4eRJ&lt;br /&gt;
TpZ2JM1Dpk83P6UTKarxkgcwYE/HZ37CKMssEGtX/qLOPftIkjRZkqQbkiSVSpJ0XJKkdkpnqirl&lt;br /&gt;
RiPzEhK439KCtgebI2vP0XVOD6VjKeqhFj052jIe3xhLDFZiC/OtHNoVD4BPffEu73a1amaDQQUJ&lt;br /&gt;
Z3OVjmLedu9GNhqxj9FytE0m03rU/u3K/6XZ0EDK3c4TENONQYVlfJ6cTI4YXflTnSpWJEkaDnwM&lt;br /&gt;
vAm0As4BOyRJclM0WBX5PjWV5PJyOr68FYOxHvXfaqV0JMVp1BqSgvKwLpeIbv20KFZuoSS6jCJb&lt;br /&gt;
6BjmonSUGiOoVQDJDYzY36hTT693bscOMoMG4Z6t5kKTZFxsxM9Y6MoHAEt6vLgTgyyzUKxd+VNd&lt;br /&gt;
+22aDnwty/JyWZZjgElACTBB2ViVr+L3UZUu+gq6H2mLRnuWpjPClY5lFh7r2ZKkBjIR+o5w8CCU&lt;br /&gt;
lCgdyWx5JlmR7FOBa4u6s530XkkhIeS6F+CTIrZ6/ytZhu3bOeg6jCJbaPZ7E8i6zvP+QFQe52l+&lt;br /&gt;
uSedUzP4LCmJXDG6AtShYkWSJA3QBvhzv6psWq6/G+ikVK6qsiwtjcTycrq99Ruy0ZWA+aFKRzIb&lt;br /&gt;
T3a9j6Ots3C64oRcXgEHDigdySzpjXp8kx0pccoGsRPo9gUGImtT8U22J70wXek05unCBUhNpTTB&lt;br /&gt;
i5NtSpgzcKDSicxG6JoBqJAZ/MYJdLKRT8ToClCHihXADVADf3/2SAdq1ZnzFUYjc+PjaVmQQ99j&lt;br /&gt;
4dhpT+I1pZfSscyGhcqCy01zcc5Xk+HTW0wF/Yuo+Gi8MqxRWyVDvXpKx6k5LC2xtkpHW6ri0EHR&lt;br /&gt;
g+ofbd9OmbUPPolWnApKw93eWelEZsO+ZzBar3O0vNKbFteu82lSEnlidAULpQPUBNOnT8fR0fEv&lt;br /&gt;
HxsxYgQjRoxQKNF/+yEtjfjycobPP4Rk7E/gB8HU6S1A/6BTt0bkL4FDHo8wbPtHSscxS3t/iybM&lt;br /&gt;
6IGjbbb4+blDvh6lAJzam8IwMWjwv7Zv53jzp9GfA/s2dkqnMTshK/sQ0TuVEe9f4eUljfgkKYm3&lt;br /&gt;
/P2VjvWf1qxZw5o1a/7ysfxKPCW8LhUrWYAB8Pzbxz2BtP/6woULF9K6deuqylWpksrKmBUbS5O0&lt;br /&gt;
ePqd6Imz9giOz7ypdCyz81q/7sxpu5sW0T6QegViY6FRI6VjmZW4iAJaqDwI8hWFyp1q29yZI05Q&lt;br /&gt;
fsWodBTzU1gIhw8T5/cc2S0NzB3SW+lEZseqVzuc671B2JXeBJ47y3wkHnZ3p4Wd+RZ2//QG/syZ&lt;br /&gt;
M7RpUzmnEteZaSBZlnXAaeDP+RDJ1C2rF3BUqVyVySDLjImJQYOBBxccR23UEDgvSJyP8Q+sLTWc&lt;br /&gt;
a5pD/VRritXesGOH0pHMjs0NC5K8ZVoFN1A6So3jERJEsk859RJtlY5ifvbtQ6/T0CDWkRMhWQR4&lt;br /&gt;
il1A/6Tp0p5oKODJzzKopzYwMjqaUoNB6ViKqWuvYguAJyVJGiNJUhDwFaAFlimaqpJ8mJDA/rw8&lt;br /&gt;
HI8t4f5TD+Ch3YvNs48oHcts1etYjwoNnGw6Xqxb+RtZlvFNdiTbswjLFmJx7R0LCaHUKRu/ZCcK&lt;br /&gt;
ykW36r/Yvp2rvg+jMUgUtxQ9lP6NRb/ueNU7QsvrvbH5+ROulpQwMzZW6ViKqVPFiizL64GXgLeB&lt;br /&gt;
s0BL4H5ZljMVDVYJIgoKeD0ujoZ5J3j8e280soFGcwLBoi7N9N2Z+UO6cibMQFJJmKmpoWge9qfY&lt;br /&gt;
nFgaJjtgtE2F4GCl49Q8/v5oLBLwyLLm7GWxyPZPsgy//cYZm95cbyQzY1A3pROZL0nCf3FPrMhi&lt;br /&gt;
2spwXJM280VyMtuys5VOpog6VawAyLK8WJZlP1mWbWRZ7iTL8imlM92rIr2eUdHRuOhzaLrsIOHR&lt;br /&gt;
/fGzX4/llNFKRzNr7o6WRIQUUD/BGV2xCo4cUTqS2Th94jzaUjU26iRwq5VnJlYttRonqywATuy6&lt;br /&gt;
rnAYM3L1Ksa4RJwS63O0VRE9gsTP1n9RDRlAgO9Wmqa0pec3eXiWxjE+Joa08nKlo1W7Oles1EbT&lt;br /&gt;
rl0jvrQY5y0LmbF1Ol5sw/ubQWBtrXQ0syeHOaE2SlxzHySmgm5ydp9pzXk9OzGFcbea1jOgs4Dk&lt;br /&gt;
s+LQwT/t2EGWVVtsSyxIai4Wbt+SJOGxchIN+YEJB8biv2YVJRVFjL98GWMda8IqipUa7seMDL5L&lt;br /&gt;
S8P25FfMWzILJ67SZEIh0vBHlY5WI8we1JHoIIi07yuKlZuUXoZcJwj1s1E6So3Vurk38Q1lbOPF&lt;br /&gt;
3+Gftm/nmPcjZLrBw30qZ5dIrdetG35v+uPGUd5cNQOX3Z+xPSeHz+rYYXGiWKnBEsrKeCImGsvU&lt;br /&gt;
o7zz4WDc9XpCGq9A9fkCpaPVGO0a2XA8tASnZB+M56MhJUXpSGbBM9GBhIY6GrVorHSUGssqJJhs&lt;br /&gt;
z0L8k1wo19e9Yfv/UVaGvHcfhpxmHG2nY2LnWnUWZ5WSXn+VZl0O4kQmcz99AtsrW5l5/TrnioqU&lt;br /&gt;
jlZtRLFSQxlkmccunaeoNItn50kEZ9cnxOItrDYtAa1W6Xg1SmawFptyNZmqNrBzp9JxFJdWlEaj&lt;br /&gt;
JBeKnXOQxDH7dy8k5Pdj9x24kHJB6TTKO3SI4jJPXHK1xDQ1oFaLaaDbplZjse47WjrMx6dUy+x3&lt;br /&gt;
gzAW3GDYhcg6s51ZFCs11HtxsRwrKGLA10cZcqETTeQFOH02SfRwuQsj7g8l1QsiGjwspoKAs1fO&lt;br /&gt;
4pllg6VFAjQXDQzvWoMG2BGHlU7FuWMXlU6jvO3bueDxICU2ENpd/FzdsQYN0K6YR4jxTTonBjL6&lt;br /&gt;
w3iul5Yw9Uq00smqhShWaqDj+fm8FRdP8O49TNsyiPqWv1J/mBaeekrpaDXSyLZOHG2nx5AfjHHH&lt;br /&gt;
Tqgj71T+zfkDpt0rjqpksBedg++aJOGlzQUg5kiOwmHMwPbtJEmdiWhr5KXe4qDBuzJoEK7Pd6KR&lt;br /&gt;
+nvGHu5Bl7X7WJqexaaM/zyEvVYQxUoNU6jXM+DMUVzjrvPOhz1xto2jsddG+OYb0b/lLqlVEleD&lt;br /&gt;
LHAssKE4zx0iIpSOpKiU0+XoLCDAsVTpKDVeWH0bMt3AcFWjdBRlJSRQHpWGe7o7Z5rrcbNTK52o&lt;br /&gt;
5po/H9+Wl3CzPc2rS/vid+YsIy9GklJWpnSyKiWKlRpmUMQuikpl3n6xHu4aHS1KZqBatwqcnJSO&lt;br /&gt;
VqO17R5EoR1cch5Q56eCtPF2xPnJtG7krnSUGi8gOIB4Px1eyc4YjHV4xG7HDhKt7sOgkrFv56d0&lt;br /&gt;
mprNygpp3VqCmI+zXS7vvh6CJqeYHid21urtzKJYqUHejT7CwTIbps8uoFmhLS1LnsfyvZegY0el&lt;br /&gt;
o9V4z/dw40R7IymqLsh1uFjJK8ujYbI7mV4lOLVopnScGk8KCaHEKZuAJHcuZ19WOo5ytm/nonM/&lt;br /&gt;
LrSQeK6Pj9Jpar7AQCy+WkjLgil4G1W8Pl3Ndb0DT56pvRsERLFSQxzJuMbryXk8uDSZ/ue9CLJd&lt;br /&gt;
jENvH5g5U+lotYKbrQWRzVS4ZLtRdiIe6uiR1pFJkfgnOaG3TROLtStDcDCWFvG45lpx7tI5pdMo&lt;br /&gt;
Q6dDt/Mgtln+nAg10N5XnDtTKR5/HJuxfWnBG7RLdmLi3DS+y1exLu600smqhChWaoDcsnx6nThA&lt;br /&gt;
6Ck9U1c3oEHDk3hZHYQVK0RH5Urk1t4PnYVMiiYcdu1SOo4ioiKisNKpsOc6NG2qdJyaz90dV2Mc&lt;br /&gt;
AFePJCibRSknTpBb1AyNXk1hS0+l09QuX3yBi28Wjev/xMi9Xty3rZCRUTFcz09WOlmlE690Zk5v&lt;br /&gt;
1NP6l89xKvLjnTlOODcqICB+tqlQ8RKHKlWmyb08iQyTiHLsi7z9N6XjKCL2uGn3ioc6VbRrqCT+&lt;br /&gt;
tqWUWUHWudq7nuA/bd/ORZcBxDWEYfd5K52mdrGzg3Xr8M5YjEfTRGZ/5op/ojttd62gRFe7+O0y&lt;br /&gt;
KAAAIABJREFU2jyIYsXMPfzLe6RqO/HeiypcnSA4bjyqWTOgb1+lo9U67RrYcDIUtDn+lP68F4xG&lt;br /&gt;
pSNVO/1lazLdoLmj2K1RWVp7u3LDHxwSHJFr8QLIf1P2y1bKS8M40kFmVJiD0nFqn7AwpI8/ounl&lt;br /&gt;
J3Dy1TNvpiVGTUe6bXoLo1x7nsNEsWLGPjj6FVstAnnpXZnGuWpaqt7Asm0gvPOO0tFqrbKWXqiN&lt;br /&gt;
KgpymsD580rHqValulLqJbtxw99ASKBYBFlZXFo2I6NeMf4p9YjPj1c6TvXKyKDsHNiUWpMQ5IhG&lt;br /&gt;
TFtXjSlTUD/QjxY5k/FSq5gz00ikYxcmbX9X6WSVRvzkmKntV3cwKyGRRzd70vuYBc1abceuKBLW&lt;br /&gt;
rAFNHT+zoQoNC/fiSiDEOPbDWMemgi5kXCAg2ZNCl1w0LcXi2koTEoLRNhXfFAfOxp9VOk312rmT&lt;br /&gt;
eOte5DhD6y71lU5Te0kSfPcd1nbFtPD5lrBYNZMW2/FNmS3fnPpB6XSVQhQrZuhSxiUG7/6Ctol9&lt;br /&gt;
mPSdGt/+uXgcmwfffgv+/krHq9VGtHDgWDsoLwslb/NGpeNUq/NR53HLtUZjmQDBwUrHqT2aN8fB&lt;br /&gt;
eBWNQcXVk1eVTlOtCrb8SLKmG0c7yUzr4qp0nNrN1RVWr8bp4ioC+17hkZ/V9D3ZmqfP7eRg3CGl&lt;br /&gt;
090zUayYmYziDMKXj8PDZjJvzZFw7WKJ/77RpqP0H3lE6Xi1nqVaRWIzJ6zKLTGeAgoLlY5UbeKP&lt;br /&gt;
m1rOu1Zchsai23KlcXDAy2ia/kmOqDs/TxiN6HZcRlvowoXmNnjZihHhKtetG7z5JvV/m4TXAJjx&lt;br /&gt;
sUSTsgncv/EFruVcUzrdPRHFihkp05dx35KhlNR7kvfessbFy5JmWc8jBfjBwoVKx6sz2nf2JN0D&lt;br /&gt;
kjT3Ydi9W+k41SbnvEyZFfiqcsHCQuk4tUozawuS64Pqmp3SUarPmTPkl7Sh1ErGrZ3YuVhtXn0V&lt;br /&gt;
KbwbgZHjcWppw3tvqrFxn0G3b4aSW5pbLRH0eti3D95/v/K+pyhWzIQsyzy6aiJRDk15+esm+GWp&lt;br /&gt;
aNlmC5obF2DtWtBqlY5YZ0zt6MrRTpCm7krqhmVKx6kWeqMepwTTrpVQZ7Fjo7KFBDQgzs+IT2p9&lt;br /&gt;
MoozlI5TLbI2reK6bR9OtZN4tqub0nHqDrUaVq1CXV5IC5dPcLfQMOdDD7I8HqDv0mHoDLoquW15&lt;br /&gt;
OWzbBhMngnvjRHpOX87W/Lcq7fuLYsVMvLLjHX7OOc+oo4/T/RAEP5uH7foP4NNPxUmi1aye1pKL&lt;br /&gt;
zbVYlzgib78BdWC7aUxWDI1SvUnxLsMnREwBVTbL0BCKXHIISPLkbErdWGRbuGU3FoUNORmmpnM9&lt;br /&gt;
W6Xj1C0NGsAPP2C1ay2hI6IJuQxTtvTmlCwzdv2USttCX1QEP/4IQ0Yn4xS+kkFLnmCFcwB5433h&lt;br /&gt;
obF4t46ulPuAKFbMwsrItcw/9QGdsj9mwvcSPs854r5kjGmNypNPKh2vTvJs60GxVqYirw2GmMr7&lt;br /&gt;
hTNXZxLO4JvihN4uDamFKI4rXUgIlpp4HIssuXjhotJpql5eHpoYH2QJykLdkERH+Oo3cCBMn47j&lt;br /&gt;
4sk0nWXFkK0w6NprrInbxNz9d7+sICcHPl2aSptxa3B8/CkePRTI1sbelA0YTWCPEzzVcwAbH9xI&lt;br /&gt;
XIc4Pkr5qNIejpiYVtjRhGOM3TwOH9USXv3EEtsBjjQ6MRmcnWHJEtOWNKHaPdvJjV3t47A+2RPj&lt;br /&gt;
msUEvv2F0pGq1PWT1/E1+GInX4eQHkrHqX2CgnAv/wJoQ2pEGgxVOlDVStmyggTr3lwKkHi0vYfS&lt;br /&gt;
cequefPgwAHqrxtL9oSNTFucTdysb3ntwMM092zMQ80fuK1vc/56Op9u3c+Oy/tI1uwHt8vgD56q&lt;br /&gt;
ZvQJ7MuQlvPoKHdEOiSRsySHvD153Ci6QbZz5fVYEyMrCorLi6Pv9w9io5/Eu0t9saxvSZumm5BO&lt;br /&gt;
nTSdp+LkpHTEOquLly0nWlmgLvGhdHPN3/Z3K1lnigCoXxoFvr4Kp6mFbGzw02VRZAsllyyVTlPl&lt;br /&gt;
0tatprSiBUc7SIwOFs9jirGyMq15TE0luOxjLNra8taXjriVz+fRdSM5mxr5j1+WWZzJF/t+pMvc&lt;br /&gt;
yWhnNCd0pRffFTxGruN+uvncx5e91pLyTAqX2h7ijWPP4/OQD9dCrnFt6jX0uXocZ9aneE8AEcvc&lt;br /&gt;
K+2hiJEVhRSUFxD+1WBKSv2Ze+BBPPMkunxajMXE90zVcMeOSkes0yRJQt/SDYMqFfsoP/TFhVjY&lt;br /&gt;
2isdq0oYZSMW1x1Jrg+BkiyaY1aREHt7fgoA9+R6FJQX4GBVSxcyyzL2hzQUGDQkBDtirRatGxQV&lt;br /&gt;
GAhffYXq8cfp/Flv9sxtyNtb2jJtUD96fjOYqOkn0ag17I87wKYz+9lzfR8ZXAJAygnE19iD/v6v&lt;br /&gt;
M3lgOP7FTuRszyHnnRyuHLiCXC6j9rGksIeWmOe17Gth4IRUTKYuHwD7jPRKexiiWFGA3qjn/m+H&lt;br /&gt;
k1iQwjPXNtP+hJHAH+qhnREOvXvDjBlKRxSAx9q6cy40DZvoXuRvWEzY2FlKR6oSN3Jv0DC1IbGN&lt;br /&gt;
ZAbXE7s2qkrD4ABSSssIPutDZFok4Q3DlY5UJWKP/EJpeVcSvWU6txZTQGZh1CjYvRvL2ZPosOwY&lt;br /&gt;
FqOymRk5lfdCIwlY2IxS2VRckBOAJrkHnVxnM7ZHd4aHe6E7kUvO9hyy5ycQkXgVo7VERltLTk+x&lt;br /&gt;
5OfQCi57V4BUgY+VFa3s7Hi2xIJWly7R6pdfyNy2jbaV9BBEsaKA0lKZCwf9GKh5iUc3GrF4ox4+&lt;br /&gt;
K6eaPrlihXhnayZGNXNidAeJsHPBlKx/GWppsXI29SwByV4cCsrHIbS50nFqLalFCMboNBqkNyTy&lt;br /&gt;
Ru0tVq6vWoRKNYUjXSRebuuidBzhD59/DseO4fLeGDw+3UjvZxJIcl3GD3mbsCsKY2BwD8YM9qGD&lt;br /&gt;
axHZu7NI+SyVs6OvIRkg3U/iSAeZ41PgfKiMv7OaVnZ2TLSzo5WFBWGnT+O2di38+iskJpqO2ujd&lt;br /&gt;
m6yXX4a5cyslvihWFGBvq2FBvzfwefYymQO0DLPdCjt3wo4d4OmpdDzhdzZqNUnBjqiMebgctkNv&lt;br /&gt;
1GOhqn2/MlEXowgvCsfC8rLYJl+VQkKwX7cStexHwskE6KF0oKqh/S0LXYUd50Ns8LO1VjqO8Ac7&lt;br /&gt;
O9P6lQ4dCI3+lJ+enMDopbm0em8SQY5qCnalI429wYUcmWItnGkNZ6ZBUXctfk0daWVnxwg7O1ra&lt;br /&gt;
2WEbG2sqTLZtgwMHoKLCNN00dKhpF1J4uGm9zJkzolipyUqKdTi+fpl8bxVDXzIg9X0FZs2Cvn2V&lt;br /&gt;
jib8TXiYO9f9c2mbGM7xI+vo2m2U0pEqXfop0yFlbhVREPKowmlqscaN8Sm6hEHVh/zzpUqnqRIx&lt;br /&gt;
cadxS2xNjINMg9DKW1wpVJKwMPj4Y5g6lcGberH6vCuhs1MAKAiE6CFWSL3t8e3myhBne17Wak2d&lt;br /&gt;
ssvK4OBBU3Hy669w7RpYWkKPHvDhh9C/v6lYqUKiWFGA1laDwxveBIZZYzm8G7RpA++8o3Qs4R88&lt;br /&gt;
29qVd7pI+K/tSPLq+bWyWNFFaSiyBf/8G2JkryppNARW6LjmA3ZxnpTpy7C2qF0jD2fXLqSeZiBH&lt;br /&gt;
O0tMaisaF5qlyZNh925UT4xn0P5THDtpJKCnG+F+DqhuPiojIQFWrjQVJ3v2QEkJ+PiYRk4WLICe&lt;br /&gt;
PcG2+g77E8WKQvo/GQDDh0NuLuzdCxrR5Msc+WmtudDCGtVKcNteUuumghLzE6mX6sf1AOitsRHn&lt;br /&gt;
+lSxEA9XdiLTKKERZ1PP0smnk9KRKpW0KRLKn+BEGzVzvWrpbqeaTpLgu+8gNBSnyWPpv3evqReY&lt;br /&gt;
TgdHj5qKk19/hYsXTUf3d+0Kb74JAwaYurEr9BxRe551a5pvvzWdU7x+Pfj7K51G+A++we5kOyfQ&lt;br /&gt;
NLED+6/sondQf6UjVZrvI78nILUl59rqaertrXScWs8ptBl5Z/LpcMyLZWeW1api5VLGJZpcbE6W&lt;br /&gt;
RkYf7IpaFL7my8UFVq82TeOMH29q7LNzJ+Tng4eHqTB54w3o08dszvsS206UUFYGc+bAU0+ZjtQX&lt;br /&gt;
zNozbdw40lUiS9WdM5sWKR2n0ugMOr4/9j0N0h3R2adjESoW11a5kBAsLROwLbNg96Hd5JXlKZ2o&lt;br /&gt;
0uze9TUV+h6caisxMlRsgTd73bqZlh+sWmWa8nnhBYiIgNRU+P5702uTmRQqIIoVZVhbm4bbFt59&lt;br /&gt;
fwah+vTwdOBkGzXo3LH/6WqVdS2tblsvb6VBZAPUsoSNhdgJVC1CQnCrOI9BJRMaE8byc8uVTlRp&lt;br /&gt;
in/8lVJdEMc6wqgmYstyjfDKK1BYCMePm0ZS2rY126MzzDNVXeDra9qLLpg9tSRBc1fKrIyERbVj&lt;br /&gt;
7429SkeqFIsiFjEqZjSXA2UaFpw3zUcLVathQwIzb3C8o8TwSyNZHLG40jrgKulSxiVanQhAQkVC&lt;br /&gt;
sAOOFmKFQY1RjYtk74UoVgThNowMceNkexWUdWf74WVKx7lnUZlRnD9/nqALTdg2SCI4LdfUPFOo&lt;br /&gt;
WioVIXoV2waCZ5wrhosG9tzYo3Sqe7bx7Go8sroSHSRzX5DYsixUPlGsCMJtGNnYmSOdoFwfCBsP&lt;br /&gt;
1fipoC8jvuTh6IfRWUicD86nkzi8q9oEBvpQbnuDXCeJ0TGjWRyxWOlI90SWZeJ/WkuBsT2Hu0o8&lt;br /&gt;
HSq2LAuVTxQrgnAbnDQaUoIdMEoy3c+E1eh3w4XlhSw/u5wHzg1hf1eJh08ewDJMrFepLqoWITyx&lt;br /&gt;
Zyu/9pPpfLoLv138jcT8RKVj3bWLGRdpv98NyWjFuVArgmxtlI4k1EKiWBGE29Qr0I2LIVA/M5wf&lt;br /&gt;
z69VOs5dW3l+JQHXArBN0fLrYJlntq0Xi2urU0gII/fuYnsfsChS0/tKb74+/bXSqe7a+kvraRnX&lt;br /&gt;
lVRPIwGBbkhiy7JQBUSxIgi36emWrhzuKlGsb0XSjl+oMFQoHemOybLMoohFPHXtKdI8VaRZ6mmc&lt;br /&gt;
nAzt2ikdre5o3RrHsjLcMvK50FzF6JjRfHPmG8r15Uonu2OyLHPg8GoqKrpyuJuKJ1uKKSChaohi&lt;br /&gt;
RRBuU5BWy/lQSyRZw8Cjzdgdu1vpSHfsUMIh4hLiaBLRlK2DjUw5tR9CQ8XISnVyc4N+/Zh9eD0/&lt;br /&gt;
DzHicd4Di0QLNkVvUjrZHbuQcYH2ezTIBmeOt5fo62k+53IItYsoVgThNkmSRNMAdxIbGGgdF86P&lt;br /&gt;
UT8qHemOLYpYxKjYUaCT2HEfTN34uekES6F6jR/Pw7+t5VhziTIbiUmxk1gUUfMOHFx/aT29ortR&lt;br /&gt;
rDWgauKCpZme0SHUfOInSxDuwFMhrhzsrsZQ0pF9p7bUqKmg1MJUNkVvYsj5IZxspSIgIRfH0lIY&lt;br /&gt;
VfuaM5q9wYNROzvTL+oqO3tA55NdOBZ3jHNp55ROdttkWWbj+XU45HblSBcVI5uKU2uFqiOKFUG4&lt;br /&gt;
A709nDjRDmSjPQ8c8WbX9V1KR7ptS04vISg9CO1lLT8/ZOTlA2tg8GDTtIRQvSwtYdQoXvt5MduG&lt;br /&gt;
yKgzVPRP6V+jRlfOpZ/D/1gROn1DjnSRGNlIrFcRqo4oVgThDlipVFgGuFJor6dfTE/WR61XOtJt&lt;br /&gt;
0Rl0LDmzhKnxUylwVHEmAIbs3CimgJQ0fjyhF8+SKxmI91Uz7so4Vl1YVWP6Ba2/tJ7hZ7ujVxtJ&lt;br /&gt;
DrLF09JS6UhCLSaKFUG4Q483ceNgVzX2mR3YEr25Ruzi+OnyT2TlZNHkUFO29ZEZei4Gtbs79Oun&lt;br /&gt;
dLS6KywMQkN55vRBfhpswO2YG9p8LT9E/qB0sluSZZn1l9YTkNSVyFDo6ydOrRWqlihWBOEOPebn&lt;br /&gt;
wtEuEgZ9fdqed2Ln9Z1KR7qlRRGLeCLzCciX+fUBmdk/LYLRo0H0cFHW+PE89+Pn7O4BeknihZQX&lt;br /&gt;
WHxqMUbZqHSy/xSZFonuWjq60mYcClcxoZmYAhKqlihWBOEOeVlZkdZUi87CwPgL95v9rqBLGZfY&lt;br /&gt;
H7efB849QHRTC/RlOkKiL4opIHMwahSuRUU0js/jcDsVnY524krWFfbEmvcJyesvreepU92RUHOu&lt;br /&gt;
lYrW9nZKRxJqOVGsCMJd6Ofrzuk20DC2PT9d/okyfZnSkf7Vl6e+pEVZC6xOWLFliJ5nT+6D9u2h&lt;br /&gt;
eXOlowlubjB4MDMPrOfnoQaIhQeKHmDxKfPtFyTLMuuj1tPlSndu+Olo7u2JSpxaK1QxUawIwl0Y&lt;br /&gt;
F+TKwXA1+tIA7FJVZjsVVFheyPJzy5meOJ1yG4kDXWDKui9g3Dilowl/GDeOYdvWcdEPst3VjL88&lt;br /&gt;
nq2Xt5KQn6B0sn90JvUMiRkJkBvCvvs0jG/monQkoQ4QxYog3IU29vZcCJUAiecvDGT9JfPcFbTi&lt;br /&gt;
/ArKystovK8xezqraXk5G+eKCnjsMaWjCX/o3x8Ld3eGRF5hax8Z570uuBvd+fqUefYLWn9pPY9f&lt;br /&gt;
6gxGG453kOnv7qx0JKEOEMWKINwFlSQRUs+T6411tLvYia2Xt5rdVNAffYCmlE/BkGLgp0f0zNq3&lt;br /&gt;
Bh56CJzFC4zZsLCA0aN5+acv+W2IEWOZkZm5M82yX9AfU0DDLt1PnnM51t5O2IlF2kI1ULRYkSQp&lt;br /&gt;
TpIk401/DJIkzfzbNT6SJG2TJKlYkqQ0SZI+kCRJ9bdrWkqSdFCSpFJJkuIlSZrxD/fqIUnSaUmS&lt;br /&gt;
yiRJuiJJ0tiqfnxC7TahuSt7elpCViDlxeXsuLZD6Uh/cTD+IFGZUQw+O5gUHwvi3GDIjs1iYa05&lt;br /&gt;
Gj+e1hcioVjP+WANHY50ILMkk43RG5VO9henU08TlxuHbVwz9oVrGNlYbFkWqofSIysy8BrgCXgB&lt;br /&gt;
9YDP//jk70XJr4AF0BEYC4wD3r7pGntgB3ADaA3MAN6SJOmJm67xA34B9gChwKfAt5Ik9amqBybU&lt;br /&gt;
fv3cnDneQQbZkqdvPMAP58zrfIxFEYtoZ9kO1R4VG/sZefhsNBb160OvXkpHE/6ueXNo356nIw6w&lt;br /&gt;
6UEdutM6hmuGm92JtsvPLad7RltknTOHu6l41FdsWRaqh9LFCkCRLMuZsixn/P6n9KbP3Q8EAaNk&lt;br /&gt;
Wb4gy/IO4HVgsiRJf4w9Pg5ogImyLEfLsrwe+Ax44abv8wwQK8vyTFmWL8uyvAjYAEyv6gcn1F72&lt;br /&gt;
FhY4eNqT7VbGQ5G92RyzmY1R5vFOOKUwhc0xm5meOh0DsHugkVmbF8OYMaBWKx1P+CfjxjF17SKO&lt;br /&gt;
doJSBzXjLo/jaOJRItMilU4GwJGEIyyKWMSL0Y9RYaUjI0BNIxsbpWMJdYQ5FCsvS5KUJUnSGUmS&lt;br /&gt;
XpIk6eZn0o7ABVmWs2762A7AEQi+6ZqDsizr/3ZNU0mSHG+6Zvff7rsD6FRpj0Kok0YEerG3hyWq&lt;br /&gt;
K9483PRhnvz5SZIKkpSOxZLTS7BSWeG304/jrTVosysIjboodgGZs8cew6OkhBaXc/mtiwq7bXY0&lt;br /&gt;
tGnIopPKj67kl+Xz+ObH6eTdCZfT/pxsJ3N/g/pKxxLqEKWLlU+Bx4AewFfAK8D7N33eC0j/29ek&lt;br /&gt;
3/S5e73GQZIkq7sJLggAj/i4cqibCllvy0KX99FqtIzdMlbRE0h1Bh1LTi9hmuU0yi+Xs/HhCp45&lt;br /&gt;
uQ+6doXAQMVyCbfg7AwPPcRL+9bz03Ad+mw9s0pnmUW/oMm/TianNIdl7b5HV+jC3vssGR0opoCE&lt;br /&gt;
6lPpy7glSZoHzPqPS2SgmSzLV2RZ/uSmj1+UJKkC+FqSpNmyLOvuNco9fv2fpk+fjqOj418+NmLE&lt;br /&gt;
CEaMGFFZtxBqqAAbG3IaSpTZlFOyJJ4VH66g1/JefHz0Y2Z0+Z913tViS8wWUotSGRQziAx3A2dD&lt;br /&gt;
9eyY+yUsWKBIHuEOjB/PsIEDGTfhaeICLGl7qC367nqWRS7j+Y7PKxJp1flVrLqwilVDV2G9rgCj&lt;br /&gt;
ZORCqERnBwdF8gjmac2aNaxZs+YvH8vPz6+0718Ve84+Ar6/xTWx//Lxk5gy+QFXgTSg3d+u8fz9&lt;br /&gt;
v2k3/dfzH66Rb+OaAlmWb7k3cOHChbRu3fpWlwl1VP8GDTjc9Tran3V0WXwfMzrP4NW9r9KrUS9a&lt;br /&gt;
16v+n5tFEYvo5d4L3Yc6tvZT0zYqCzedDh55pNqzCHeoVy8svbwYcvYyG/o1x29xBWOHjWVxxGKe&lt;br /&gt;
6/AcKql6B8Pj8uJ49tdnGdViFMMDhnNs0W5ignWEOvmiUSk9MC+Yk396A3/mzBnatGlTKd+/0n/a&lt;br /&gt;
ZFnO/n3U5L/+6P/ly1sBRiDj9/8/BrSQJMntpmv6AvlA1E3XhP9trUtf4LIsy/k3XfP3LRB9f/+4&lt;br /&gt;
INyTUQGuLJ5khcGg5+rTUbzT8x1aeLZg5MaRFFcUV2uWixkXORB/gOcyn8NQYuTnR3XM2LMGhg0D&lt;br /&gt;
e/tqzSLcBbUaxoxh5uav2DPQgN5axegro7mac5XdsX9fdle19EY9j296HBcbFxYNWMSN2dfR56uY&lt;br /&gt;
N9OO0c08qjWLIChWGkuS1FGSpGm/n5HiL0nSKGABsOKmImMnpqJkxe/X3Q+8A3xx0zTRaqAC+E6S&lt;br /&gt;
pOaSJA0HngM+vul2XwGNJEl6X5KkppIkPQsM+/1+gnBPujg6Umav4mLn02RuySNvYx6rh64mIT+B&lt;br /&gt;
F3e+WK1Zvoz4Ek9bT+r/Vp+YYCvyreDB7T+Js1VqknHjaHs+EvssHYfbWKLZqKGlW0sWR1Rvv6B5&lt;br /&gt;
h+ZxLOkYKx9aiRwhk/R5MplND5PcAAa6iSP2heql5DheOabFtfuBi8BsTAXG039cIMuyERgEGICj&lt;br /&gt;
wHJgGfDmTdcUYBol8QNOAR8Cb8myvPSma+KAgUBvIBLTluWJsixX71sVoVbSqFQMqefGnMntcFAd&lt;br /&gt;
5cozMfgb/fmk3yd8ffprfor5qVpyFJQXsPz8cqa7TKfoRBHrBugZeiYKja8vhIdXSwahEgQGInXt&lt;br /&gt;
ylMnDvDjw2WUJ5TzkvwSP1/5udr6BR1POs6cA3N4rdtrdHTryOVx0Wi5zCvTQuho74ibpWW15BCE&lt;br /&gt;
PyhWrMiyfFaW5U6yLLvIsmwry3KILMsf/H1hrSzLibIsD5Jl2U6WZU9Zlmf9XsTcfM1FWZa7y7Ks&lt;br /&gt;
lWXZV5blj/7hfgdlWW4jy7KNLMuBsiyvqOrHKNQd7zTyo8hDy/LRhRgKSrjy7BWeaPUEQ5oOYeLW&lt;br /&gt;
iaQUplR5hhXnVlCqK+X+M/dT4aDmSG8DMzd8adquLNYX1CzjxzN5zZdEhUBOfUtaHmiJnaUdX536&lt;br /&gt;
qspvXVBewKhNo2jXoB2vd3+d2FdiKY0r4XifSK43defjJo2qPIMg/J14BhOEStBYq+XtAH8+G9MX&lt;br /&gt;
S/cVZG3MIuvHLL594Fss1ZaM2zKuSrcz/9EHaGjjoRSvK2ZXew1uqRW0irpoOghOqFkeeYR6ZWWE&lt;br /&gt;
ReewMVwib2seT/k/xbdnvq3yfkHP/fYcGcUZrHxoJUVHikj+LBl77TpmvvAIk70b0OlvOyMFoTqI&lt;br /&gt;
YkUQKskL3t600Nox/u3+aKwucWXyFRwKHfjhwR/YFbuLT49/WmX3PhB/gOisaCblTkKXpePH4WVM&lt;br /&gt;
OrYXevYEP78qu69QReztYdgwXtyzjm3DyzEa4bFrj5FZksmGqA1Vdtt1F9fxw7kfWDRgEX5WfsSM&lt;br /&gt;
j0FllcqMV4NxtbFhrr9/ld1bEP6LKFYEoZJYqFR8HxzEtUYNODbgNPqSCq48e4XejXrzQscXeHnP&lt;br /&gt;
y5xLO1cl914UsYhmbs1w/dmV1AAr4v3gmbVfi4W1Ndn48Tzy62ZK1HChhTXGtUZ6+fWqsn5BCfkJ&lt;br /&gt;
TNo2ieHBwxndcjSxr8RSllBGSqst7OsYypLgptiLDsuCQkSxIgiVqLW9PdN9fXl10khk7TqyNmWR&lt;br /&gt;
uT6Tub3m0sytGSM3jaRUV3rrb3QHkguS2Ry9mWk+08jdmcu6btAuKhMPgwGGDq3UewnVKDwcK29v&lt;br /&gt;
hpyNYXV/HcUXi3nO+jmOJR3jbOrZSr2VwWhg9ObR2Fva8+XAL8k/lE/yZ8nI1rt4ZtZoHnN1Z6Cr&lt;br /&gt;
OLFWUI4oVgShks3x96OexpK3XmtGhVsuVyZfQcqWWP3wamJzY5mxq3JPtv3mzDdYW1jT41QPjNYq&lt;br /&gt;
dj5SzvRda2D4cNBqK/VeQjVSqWDcOF7ctISInnrKXDU02dMEbwfvSt/G/MGRDzgUf4iVQ1fiYHQg&lt;br /&gt;
ZnwMevcKvpsM2NnyaVPRpkFQlihWBKGSadVqloa14GBYGFdDN2HQy1x59grN3Jrxcd+PWRSxiF+u&lt;br /&gt;
/FIp9/qjD9DokNHkLM/hZJgNBoPM0B2/iCmg2mDMGDqcO4tLuo5f22vIXJvJM82fYdWFVeSW5lbK&lt;br /&gt;
LSKSI3hj/xvM7jqb8IbhxL4SS3lKBWn1V7Ly/j58GtwMD7FVWVCYKFYEoQr0cnZmrIMTrz4/nESb&lt;br /&gt;
CLI2ZZGxLoNn2j7DwMCBTPhpAmlFabf+RrewOWYzqUWpPFn+JOXx5awaVM7QM1FYNWoEnURT8RrP&lt;br /&gt;
zw+pZ0+eOrafH4eXYig08PCNh9EbTf2C7lVRRRGjNo0izCuMt3q8Rd7BPJI/SybVOY5XXx5IT7Ul&lt;br /&gt;
oz3/3qlEEKqfKFYEoYosaBGMxsKKTZOKKA6y5uqUq+gydHw35DtUkorxP41HluV7useiiEWENwzH&lt;br /&gt;
aqMVRQ2suNhJz/QNX5vOVpEqrZenoKTx43l27RLSvGUSm2kpWVXCsObDWHxq8T1vh39++/OkFKaw&lt;br /&gt;
euhqVGUq0/RPYy0HHook09WVb9u24v/au+/wKKu0j+PfO4USIEF6EaU3pSsLiIusgEgURUQwC5iI&lt;br /&gt;
gASxoCgr6wvquthAUUFFioiSFUUQGwj2ikhXWqgKSQgJJRBII+f9Y0aMESEhZQb4fa6LK8zMmTP3&lt;br /&gt;
uZ48yZ1znufcpu8j8QNKVkSKSIXgYCY3a8r8Tn9nefkFZGNsHraZyiGVefX6V1m0ZREv/PDCaff/&lt;br /&gt;
U+JPfLnzS+5ocAdJ85OY3zaIqnHpXLr+ZxgwoBBHIj51ww3UTE+n5aZk3ujoOPj1QaJQ7bF9AAAT&lt;br /&gt;
+0lEQVQrRLNl35YC1Quat34e01dN57mrn6NBxQZs+9c20uMzWFZiKS/3vob/1DqfOqVLF+JARE6f&lt;br /&gt;
khWRItSnRg16pKYz9d5LWF4tnaT5SST+L5Hu9btzZ9s7GbVkFOv2rDutvqcsn0K1stVou7wtLhve&lt;br /&gt;
6ZfK0G8/wbp1g5o1C3kk4jMhIdC3L3cvmcunNx4lu1wg1T+qTvOqzU/7NuZdKbsY/N5gejfpTVTL&lt;br /&gt;
KA58cYDdz+9mU+PSxNxbnZaHj3Jnw4aFPBCR06dkRaQImRkvX9mJQ2XK8l2370lvV4nYO2LJ2JPB&lt;br /&gt;
E12foEHFBkS8E0FaVlq++k1JT2H22tkMaTWExBmJbG5WhgMV4fb/TdeFtWejqChu+nABZDm+aRVC&lt;br /&gt;
wqwEhrcazvub32fngZ356irbZTNw/kBCgkOYeu1Uso9ks/HWjViLML5quoiNF17AzI7tCVKJBvEj&lt;br /&gt;
+m4UKWLnlyrF42XLMq9nB14/9jMEeJaDSgaWZM4Nc4hNjmX00tH56vO1Na9xNPMoA20gqetSmX35&lt;br /&gt;
MS7ZuJfqzkHPnkU0EvGZ9u0pXacO167axKzwNDITM+nxSw/KlSiX73pBE76dwOc7Pmd2r9lUKF2B&lt;br /&gt;
baO3kRGfwWzby9yBf+O+9HRaVFBVZfEvSlZEisGwjpfRfnc83444xtetzj++HNSsajOe7Pokk5ZN&lt;br /&gt;
YtGWRXnqyznHlOVT6NWkF1lvZpFVKZhvex7lrsUxEBEBpUoV8Wik2JlBZCR3z3uFrW0zOVivNPtf&lt;br /&gt;
209ky0imrcp7vaCV8SsZ8+kYRnUYRec6ndn/+X52v7Cbrf+4kJVRv1LrQApju3Ur4sGI5J+SFZFi&lt;br /&gt;
EGDG9EvbsKtqJT6q9RmBV1Ym9o5Y0hPSGdF2BN3rdydyQSSJqYmn7OvzHZ+zIWkD0U2jSYxJZGnr&lt;br /&gt;
0gSlOW5cpL1VzmoDBtBxzWoq7cng7dZBJH+YzJCaQ0g6ksRb69865dtTM1KJmBdBs6rNePQfj5J1&lt;br /&gt;
OItNt26i5KVhzApaxqrm9Zh+wfmU1pb64oeUrIgUkyYNGzJmx06+vfl8xmWWwAKN2GGxAMy8bibZ&lt;br /&gt;
LptBCwed8nbmycsn07RyUxovb8yxlGPMvjaN61etp1SjRtC6dXEMRXyhZk2sWzcGffcF8286DCUC&lt;br /&gt;
KPNeGbrU7ZKnC23v/fhefjn4C2/c8AYlAkt4ln8SMpgUWpUVg8ty2/qNdGrXrhgGIpJ/SlZEitHo&lt;br /&gt;
PjfSMC6O7f1W83P3BiQtSCIxJpFqZasx47oZvL/5/ZNeg7ArZRcLNi4g+pJoEmYksLdpWeIuzuDu&lt;br /&gt;
t6Z6ZlW0J8bZLSqK6JhppFZwrG9RlvgZ8QxvM5zvd33PyviVf/m2dze+y8srXubZ7s/SuFJj9n++&lt;br /&gt;
n7jJcey7sQ5rOn9DubSjPNWjezEORCR/lKyIFKMS553H9GPH2NGoIuMzthJyTWViR3iWg65peA3R&lt;br /&gt;
l0Qz8uORrN+7/oTvf2XFK5QOLk2fkD4c/Oogc1oHUGVPOu3Wr4f+/Yt5NFLsevbkgsxMWsQmM7ND&lt;br /&gt;
Nmlb0+iY0JFaobX+sl5Q3KE4Bi0cxHWNrmNw68HHl3/KdAhjZHIKGy+rzORduyhfu3bxjkUkH5Ss&lt;br /&gt;
iBSzdgMGcMfnX5AQeYixgbWwIGPz7ZtxzvFUt6eoU74OEfMi/nTRZMaxDKaunMqA5gM49PohCA3i&lt;br /&gt;
gz6HGPz1J1h4OFSp4qMRSbEpVQoiIhjx8Vx+vPYwWeeXYu/MvQxtM5Q56+b8qV5QtssmckEkwYHB&lt;br /&gt;
TOs5DTPzLP/syeDVOvXYN2gnvZYto9ett/poQCJ5o2RFpLgFBfFY+3ZUObCPlR2Wkdi/AcnvJpMY&lt;br /&gt;
k0hIcAhzes9hQ9IGxnw65g9vm79hPgmHE4huGU3CqwmsaFmWzLKOoW++6tleX84NkZH0+3AhwWmO&lt;br /&gt;
j5qXYu/be4mqG0VWdhYzV8/8Q9NJ309iybYlvHb9a1QKqcT+zzzLP25wXeZWXwMlsnmhShUoV85H&lt;br /&gt;
gxHJGyUrIj5Qrnt3XvriCxLbBjNoRyblb6hyfDmoZbWWjL9yPBO+m8CSrUuOv2fy8sl0urAT1X6s&lt;br /&gt;
RuaeTKZ1zKJ17F5qAYSH+2wsUszatKFM/fqEr9nIrPCjZGdm4xY6+lzUhynLf68XtDphNaM/Gc3I&lt;br /&gt;
diPpWq/r8eWfch3DuGV7aZLCj/Hke+9RY+BAHw9I5NSUrIj4ghlXR0cTsXQpaQM3MKXihX9YDrq7&lt;br /&gt;
3d10qduFWxbcQtKRJNbtWcdXv3xF9KXRxE+PJ71BGTZ2PcydH8V4rlUJDvb1iKS4mEFUFHe9PZ3k&lt;br /&gt;
punsaRFK/PR4oi+JZuv+rSzZuoQjmUeImBdB40qN+e+V/wVg2wPbyEjM4OO2DUi6aTWdVq/mtj59&lt;br /&gt;
IDDQxwMSOTUlKyK+0qwZz6akEMIRZlWJxd3V0LMcNCeRAAtg1vWzyDiWwW0Lb2PK8ilUL1udHqE9&lt;br /&gt;
SP4wmfkXlyT4qKPPog+1t8q5qH9//r52LRWTMpjVPIDDKw/TLKkZLaq2YPLyydy/5H62H9hOTO8Y&lt;br /&gt;
SgaVZP+n+4mbEkfZkXUZdzSOrMrZTF2xgoAuXXw9EpE8UbIi4kOVx4xh4vRpZHQ5wD9XB1DpJu9y&lt;br /&gt;
UHw6NcrVYFrPaby76V2mrpzKkDZDSH49GQsO4PXwVK5f9RMhF18MzZr5ehhS3KpUIaBHDwZ98xmL&lt;br /&gt;
e6VglYJJmJHA8Es99YImL5/MhG4TaFq5qWf5Z9AmwjqFMWxrKFm9d/N/s1+j4YMP+noUInmmZEXE&lt;br /&gt;
l6pWZUC7dnT78Ufieq/n3UZ1sODfl4Oub3w9Q1oPITggmMGtB5MwI4GdrcJIrZfOHXOn68Lac1lk&lt;br /&gt;
JEPfnEV2aDbLWoaS+EYi/er3o0LpCoQ3CGfYJcMA2Ha/Z/nnp2sasuKK9Vz0yw5GhYVBkyY+HoBI&lt;br /&gt;
3ilZEfExu+ceXpozh+DyaYxN2UXouIYkL0xmzxt7AJgSPoXYEbGUWVWGo1uO8kpzo/LedC7fsMFT&lt;br /&gt;
C0jOTeHh1M3KotnWZF5sl0nWgSyOfHCEtcPW8k7fdzAzz/LPi3FUfagut69PxtU/yvQXXiB47Fhf&lt;br /&gt;
Ry+SL0pWRHytdGnq3Hcfj02byrGeuxm0rARVbq7Clju3kB6fTmBAILXCahE/PR6rVYqve+5n8FdL&lt;br /&gt;
seuuA1XHPXcFB0P//oz4aC47OqeQdnE54qfHU6NcDUoEliDrUBYbb91I+SvK8+Du8zjadxt3zXub&lt;br /&gt;
S/v1g8qVfR29SL4oWRHxB/36ceevv9J65y8s77SJFX+vh5UwNg/1LAdlHshk71t7+axZOQhxDJ47&lt;br /&gt;
WxfWCkRG0vej9wnKdLzVuCQHPj3A0a1HAc/dP5lJmewf3JB36sRS8/BBHv3kExgxwsdBi+SfkhUR&lt;br /&gt;
fxAQQOCECcx47BECLkjl9jXx1HiqIcnveZaDEmMSyc7M5qX26bSKTaR2QAB07errqMXXmjcntHFj&lt;br /&gt;
wtds5I2rDhNQLpD4mfHHl38ufKweNy85CK0PMP3x/1DmkUc8u+CKnGGUrIj4i8suo0WrVtz/3kKO&lt;br /&gt;
3LCTUatCqBLhWQ7a/fxuDrc+jz0dUhj+4ZswcCAEBfk6YvEHUVEMf3sm6fXT2Nb6PBJmJhxf/nn+&lt;br /&gt;
UEX29NrKP7/7gW7BwdCnj6+jFTktSlZE/MnjjzN22itccCiVeXU2kdi3PlbCOLLhCLMbBhOckU1f&lt;br /&gt;
7a0iOUVE8I9166iwL4MXmzoy4jLITMok6MFGPHNsK6FB6Ux6/DGYOFFVueWMpWRFxJ/Uq0epYcOY&lt;br /&gt;
9cTD0CyFfh/spf60JpTtUYl5XVK4dvXPlG3VCho18nWk4i8qVCDw2muJ+vozfrh6P4HXVaXR1Eb0&lt;br /&gt;
ezuV7E57eXH6FCqGh0O7dr6OVOS0KVkR8TdjxnDF1q3csm4ze3pu46mfQ5h5bS2O1U4j+q1XNasi&lt;br /&gt;
fxYVxeC334By2Yy/rCLzMiryc5fNXPFrMjd/8AGMH+/rCEUKRMmKiL8pXx4efphnH7yXUMtmYnYs&lt;br /&gt;
sxISqLgvnc4bN8JNN/k6QvE3XbvSKCuLi7cnszQwgZEbthEclsmsf4/ERo6ECy/0dYQiBaJkRcQf&lt;br /&gt;
DRlC+Zo1mfHem7j2yaR2TGDQl0sJ6NULwsJ8HZ34m6AgGDiQYR+9RWaLfaRfHcfjy77jgrQ0GD3a&lt;br /&gt;
19GJFJiSFRF/FBwMTz9N75depOu+TAhy3PZ2jJaA5K9FRRHx4fsEO8dFqQHcNW4MPPIIhIb6OjKR&lt;br /&gt;
AtO9jyL+KjwcrryStx6+j5VXX02DwEDo3NnXUYm/atSI8s2b80XM69SNjyewSRMYNMjXUYkUCiUr&lt;br /&gt;
Iv7KDCZMIKxVKzqvXQsPPQQBmgyVk4iMpP3QoZ7/L1qkvXjkrKGffCL+rEULuPVWz/9VYVlOpW9f&lt;br /&gt;
KF0auneHq67ydTQihUZpt4i/mzgR+vWDunV9HYn4u7AwWLoU6tXzdSQihUrJioi/Cw2FLl18HYWc&lt;br /&gt;
KTp08HUEIoVOy0AiIiLi15SsiIiIiF9TsiIiIiJ+TcmKiIiI+DUlKyIiIuLXlKyIiIiIX1OyIiIi&lt;br /&gt;
In5NyYqIiIj4NSUrIiIi4teUrIiIiIhfU7Ii55SYmBhfhyCFSMfz7KLjKX+lyJIVM3vQzL4xs1Qz&lt;br /&gt;
2/cXbWqZ2QfeNglm9qSZBeRq09zMvjSzo2a208xGnaCfK8xshZmlmdlmM7vlBG36mNkGbz9rzOzq&lt;br /&gt;
whutnCn0w/DsouN5dtHxlL9SlDMrwcBc4MUTvehNSj7EU0yxHXALEAk8kqNNOWAxsB1oDYwCxpnZ&lt;br /&gt;
bTna1AbeBz4BWgCTgGlm1jVHmw7AHOAVoCXwLrDAzJoWxkBFRESk6BRZ1WXn3MMAJ5rl8LoKaAx0&lt;br /&gt;
ds4lAevM7CHgcTMb55zLAvrjSXoGeR9vMLNWwEhgmrefYcA259z93sebzKwjcA+wxPvcncBHzrmJ&lt;br /&gt;
3sf/501m7gCiC2nIIiIiUgR8ec1KO2CdN1H5zWIgDLgoR5svvYlKzjaNzCwsR5ulufpeDLTP8bh9&lt;br /&gt;
HtqIiIiIHyqymZU8qAbsyfXcnhyvrfF+3XaSNgdP0k+omZV0zqWfpE21U8RYCmDDhg2naCZnioMH&lt;br /&gt;
D7Jy5UpfhyGFRMfz7KLjeXbJ8buzVEH7yleyYmbjgQdO0sQBTZxzmwsUVR5CKeL+f1MboH///sX0&lt;br /&gt;
cVIc2rRp4+sQpBDpeJ5ddDzPSrWBbwvSQX5nVp4GZp6iTe6ZkL+SAFya67mqOV777WvVE7RxeWiT&lt;br /&gt;
4p1VOVmbBE5uMfBPYAeQdoq2IiIi8rtSeBKVxQXtKF/JinMuGUgu6Id6fQc8aGaVcly30g3P0s76&lt;br /&gt;
HG3+Y2aBzrljOdpscs4dzNEm923I3bzP5/ysK4HncjzXNVebP/GOd07ehyQiIiI5FGhG5TdFuc9K&lt;br /&gt;
LTNrAVwIBJpZC++/Mt4mH+NJSmZ791K5CngUeME5l+ltMwfIAGaYWVMz64vnzp4JOT7qJaCumT1h&lt;br /&gt;
Zo3MLBq4EZiYo80koLuZjfS2GQe0AV4oksGLiIhIoTHnXNF0bDYTGHiClzo75770tqmFZx+WK4BU&lt;br /&gt;
4FXgX8657Bz9XAxMxrNklAQ855x7Otdn/R14BmgK7AIecc7NztWmN/AYnuQpFhjlnCvw1JSIiIgU&lt;br /&gt;
rSJLVkREREQKg2oDiYiIiF9TsiIiIiJ+TcnKCRRWEUbxX2a2w8yyc/w7Zmb3n/qd4g/MbLiZbfcW&lt;br /&gt;
Jv3ezHJvgyBnCDMbm+tczDaz9ad+p/gDM7vczBaa2W7vset5gjaPmFmcmR0xsyVmVj+/n6NfridW&lt;br /&gt;
4CKM4vcc8G88++1UA6oDz/s0IskT712BE4CxQCs8u10vNrNKPg1MCuInfj8XqwEdfRuO5EMZYDWe&lt;br /&gt;
Ont/ugjWzB7AU4dvCNAWz800i82sRH4+RBfYnoS3COMzzrkKuZ6/GlgIVP9tjxgzGwo8DlTOVctI&lt;br /&gt;
/JCZbcdzbJ87ZWPxK2b2PbDMOXeX97EBv+K5U/BJnwYn+WZmY4HrnHOtfR2LFIyZZQPXO+cW5ngu&lt;br /&gt;
DnjKOfeM93EonnI3tzjn5ua1b82snJ68FGEU/zfazJLMbKWZ3Wdmgb4OSE7OzILx7JH0yW/POc9f&lt;br /&gt;
XEtRYdIzWQPvMsJWM3vdu62FnOHMrA6embKc52sKsIx8nq++LGR4JstLEUbxb5OAlcA+oAOeWbFq&lt;br /&gt;
wH2+DEpOqRIQyInPv0bFH44Ugu/xLKNvwrMcOw740swuds6l+jAuKbhqeJaGTqeQ8B+cMzMrZjb+&lt;br /&gt;
BBdx5b7AsqGv45TTl59j7Jx71jn3pXPuJ+fcVGAkMML7l7uIFBPn3GLn3DzvubgE6AGcB9zk49DE&lt;br /&gt;
j5xLMyvFXYRRil9BjvEPeM6H2nh2OBb/lAQc4/QKk8oZwDl30Mw2A/m+Y0T8TgJgeM7PnLMrVYFV&lt;br /&gt;
+enonElWfFCEUYpZAY9xKyAbSCy8iKSwOecyzWwFnsKkC+H4Bba5C5XKGcrMyuJJVF7zdSxSMM65&lt;br /&gt;
7WaWgOf8XAvHL7D9G54yOnl2ziQr+eG9uKsCOYowel/a4l1DzVmE8QE866y5izCKnzKzdnhOls+A&lt;br /&gt;
Q3iuWZkIzM5RzVv810TgVW/S8gNwDxCCp7aYnGHM7CngPWAnUBN4GMgEYnwZl+SNtzhxfTwzKOAp&lt;br /&gt;
LNwC2Oec+xV4Fvi3mW0BduD5XbkLeDdfn6Nbl/+ssIowin8ys1bAFDwXZJYEtuP5K+4ZJZtnBm91&lt;br /&gt;
9fvxTCevBkY45370bVRyOswsBrgcqAjsBb4Gxjjntvs0MMkTM+uE5w+/3MnELOfcrd424/Dss1Ie&lt;br /&gt;
+AoY7pzbkq/PUbIiIiIi/uycuRtIREREzkxKVkRERMSvKVkRERERv6ZkRURERPyakhURERHxa0pW&lt;br /&gt;
RERExK8pWRERERG/pmRFRERE/JqSFREREfFrSlZERETErylZEREREb/2/7pg4o5Ip5FzAAAAAElF&lt;br /&gt;
TkSuQmCC&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1 id=&amp;quot;Model-AR&amp;quot;&amp;gt;Model AR&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Model-AR&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR.&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów $a$ i $\sigma^2$, które &amp;lt;em&amp;gt;pasują&amp;lt;/em&amp;gt; do badanych sygnałów?&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Estymacja-parametr&amp;amp;#243;w&amp;quot;&amp;gt;Estymacja parametr&amp;amp;#243;w&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Estymacja-parametr&amp;amp;#243;w&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;mnożymy stronami równania opisujące proces dla póbki $t$ i $t-m$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} $&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;bierzemy &amp;lt;strong&amp;gt;wartość oczekiwaną&amp;lt;/strong&amp;gt; lewej i prawej strony. Wartości oczekiwane $E\lbrace x_t x_{t-m}\rbrace$ to funkcja autokorelacji $R(m)$ więc:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;gdzie $m=0,\dots ,p.$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Dla $m&amp;gt;0$ możemy zapisać stąd układ równań:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] $&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;stąd wyliczamy współczynniki $a$,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;dla $m=0$ mamy&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;można stąd wyliczyć $\sigma _\epsilon ^2 $&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Uwaga:&amp;lt;/strong&amp;gt; w powyższym wyprowadzeniu występuje operacja brania wartości oczekiwanej iloczynu $x_t*x_{t-m}$. Funkcja &amp;lt;code&amp;gt;numpy.correlate&amp;lt;/code&amp;gt; oblicza dla każdego przesunięcia $m$ sumę iloczynów wszystkich &amp;lt;em&amp;gt;przekrywających się&amp;lt;/em&amp;gt; $x$-ów. Aby uzyskać wartość oczekiwaną należy jeszcze tą sumę podzielić przez liczbę sumowanych wartości. Można to zrobić w sposób pokazany w poniższym kodzie:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[13]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;([&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;])&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;hstack&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;),&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;stem&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;correlate&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;full&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak_z_korekta&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;stem&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;numpy.correlate: suma iloczynów&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;stem&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;liczba sumowanych iloczynów&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;stem&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak_z_korekta&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;skorygowana funkcja autokorelacji&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgsAAAFkCAYAAACuFXjcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAGWlJREFUeJzt3X+M3PV95/Hne4ODA7c40lFsc4dKoYRuLne4u2kSws+E&lt;br /&gt;
3wQcNdA2W7i4JJcLuBbcFi69HJGSqwALEXtxExwioTZw0FWrQ1EMCpiCSxHEgG43Tu4Sg08CKxBs&lt;br /&gt;
Q5OTsSBQh33fHzO+rqe7n93veHZ2Z/b5kEbyfObzme/no7d39zXfXxOZiSRJ0lR65noCkiRpfjMs&lt;br /&gt;
SJKkIsOCJEkqMixIkqQiw4IkSSoyLEiSpCLDgiRJKjIsSJKkIsOCJEkqMixIkqSiSmEhIq6OiB9G&lt;br /&gt;
xN764/sRceE0Y86OiNGIeCsidkTEqkObsiRJaqeqexZeAv4U6AcGgC3AdyOib7LOEXE88CDwGHAK&lt;br /&gt;
sAG4KyLOa3K+kiSpzeJQv0gqIn4O3JCZfznJa7cCF2Xmv5vQNgIsycyLD2nDkiSpLZo+ZyEieiLi&lt;br /&gt;
08ARwNYpun0EeLShbTNwarPblSRJ7XVY1QER8QFq4WAxsA/43cx8boruy4A9DW17gKMi4vDMfHuK&lt;br /&gt;
bfxL4AJgJ/BW1TlKkrSALQaOBzZn5s9b8YaVwwLwHLXzD5YAlwP3RMSZhcDQjAuA+1r4fpIkLTRX&lt;br /&gt;
AH/VijeqHBYy81fAC/WnP4iIDwHXAddM0n03sLShbSnw+lR7Fep2Atx777309U167mTXGBoaYnh4&lt;br /&gt;
eK6nMetcZ2e75JKr2bXrm0DUW4aAA+tMli+/hgcfvHNuJjeLurWejRbKOmFhrHX79u1ceeWVUP9b&lt;br /&gt;
2grN7Flo1AMcPsVrW4GLGtrOZ+pzHA54C6Cvr4/+/v5Dm908t2TJkq5fI7jOTnf55Rdxxx2vMT5+&lt;br /&gt;
4ErpJdQuioKenof4vd+7uCvX3a31bLRQ1gkLa6208DB+1fss3BIRZ0TEr0fEByJiLXAWcG/99bUR&lt;br /&gt;
cfeEIXcCJ0TErRFxckSspnboYn2rFiBp9t188w309a2np+ch4MAVVElPz0P09Q1z003Xz+X0JM2y&lt;br /&gt;
qldDHAPcTe28hUep3Wvh/MzcUn99GXDcgc6ZuRP4BHAusI3avsvPZWbjFRKS5rHe3l62br2fNWue&lt;br /&gt;
Yfny1QAsX76aNWueYevW++nt7Z3jGUqaTZUOQ2Tmf5jm9asmaXuCWqiQ1MF6e3vZsOGrrFoFAwMr&lt;br /&gt;
efDBb7Jw9uZKC5vfDTHHBgcH53oKbeE6u83CWOdCqedCWScsrLW20iHfwXE2REQ/MDo6OrqQTkSR&lt;br /&gt;
OsLYGAwMwOgo7lmQ5qGxsTEGBgYABjJzrBXv6Z4FSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRY&lt;br /&gt;
kCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRYkCRJRYYFSZJUZFiQJElFhgVJklRkWJAk&lt;br /&gt;
SUWGBUmSVGRYkCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRYkCRJRYYFSZJUZFiQJElF&lt;br /&gt;
hgVJklRkWJAkSUWGBUmSVGRYkCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRYkCRJRYYF&lt;br /&gt;
SZJUZFiQJElFhgVJklRUKSxExJci4tmIeD0i9kTEdyLifdOMOSsixhse70TEMYc2dUmS1A5V9yyc&lt;br /&gt;
AXwd+DBwLrAIeCQi3jPNuAROApbVH8sz89WK25YkSXPgsCqdM/Piic8j4o+AV4EB4Mlphr+Wma9X&lt;br /&gt;
mp0kSZpzh3rOwnup7TX4xTT9AtgWEa9ExCMR8dFD3K4kSWqTpsNCRARwO/BkZv6k0HUX8AXgMuBT&lt;br /&gt;
wEvA4xGxotltS5Kk9ql0GKLBRuD9wGmlTpm5A9gxoenpiDgRGAJWlcYODQ2xZMmSg9oGBwcZHBxs&lt;br /&gt;
asKSJHWTkZERRkZGDmrbu3dvy7fTVFiIiG8AFwNnZOauJt7iWaYJGQDDw8P09/c38faSJHW/yT5A&lt;br /&gt;
j42NMTAw0NLtVA4L9aDwSeCszPxpk9tdQe3whCRJmucqhYWI2AgMAiuBNyJiaf2lvZn5Vr3PLcC/&lt;br /&gt;
ysxV9efXAS8CPwYWA58HPgac15IVSJKkWVV1z8LV1K5+eLyh/Srgnvq/lwPHTXjt3cA64FjgTeBH&lt;br /&gt;
wDmZ+UTVyUqSpParep+Faa+eyMyrGp7fBtxWcV6SJGme8LshJElSkWFBkiQVGRYkSVKRYUGSJBUZ&lt;br /&gt;
FiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYk&lt;br /&gt;
SVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElS&lt;br /&gt;
kWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFh&lt;br /&gt;
QZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBVVCgsR8aWIeDYiXo+IPRHxnYh43wzGnR0RoxHxVkTs&lt;br /&gt;
iIhVzU9ZkiS1U9U9C2cAXwc+DJwLLAIeiYj3TDUgIo4HHgQeA04BNgB3RcR5TcxXHSoz53oKkqbg&lt;br /&gt;
z6emc1iVzpl58cTnEfFHwKvAAPDkFMOuAV7IzC/Wnz8fEacDQ8DfVpqtOsq+ffu48cav8cADT7F/&lt;br /&gt;
/5EsWvQGl156GjfffAO9vb1zPT1pQfPnU1VUCguTeC+QwC8KfT4CPNrQthkYPsRtax7bt28fp556&lt;br /&gt;
Gdu3/wnj418FAkjuuGMzW7Zcxtat9/sLSZoj/nyqqqZPcIyIAG4HnszMnxS6LgP2NLTtAY6KiMOb&lt;br /&gt;
3b7mtxtv/Fr9F9GF1H4RAQTj4xeyffsQX/7yurmcnrSg+fOpqg7laoiNwPuBT7doLuoiDzzwFOPj&lt;br /&gt;
F0z62vj4hWza9FSbZyTpAH8+VVVThyEi4hvAxcAZmblrmu67gaUNbUuB1zPz7dLAoaEhlixZclDb&lt;br /&gt;
4OAgg4ODFWesdspM9u8/kn/6xNIo2L//CDKT2g4qSe3iz2d3GRkZYWRk5KC2vXv3tnw7lcNCPSh8&lt;br /&gt;
EjgrM386gyFbgYsa2s6vtxcNDw/T399fdYqaYxHBokVvUDudZbJfNsmiRW/4i0iaA/58dpfJPkCP&lt;br /&gt;
jY0xMDDQ0u1Uvc/CRuAK4A+BNyJiaf2xeEKfWyLi7gnD7gROiIhbI+LkiFgNXA6sb8H8NU9deulp&lt;br /&gt;
9PRsnvS1np6HWbny9DbPSNIB/nyqqqrnLFwNHAU8Drwy4fH7E/osB4478CQzdwKfoHZfhm3ULpn8&lt;br /&gt;
XGY2XiGhLnLzzTfQ17eenp6HqH2CAUh6eh6ir2+Ym266fi6nJy1o/nyqqkphITN7MvNdkzzumdDn&lt;br /&gt;
qsz8eMO4JzJzIDPfk5knZeZ/b9UCND/19vaydev9rFnzDMuXrwZg+fLVrFnzjJdlSXPMn09VFfPx&lt;br /&gt;
zl0R0Q+Mjo6Oes5CFxgbg4EBGB0Fy9n5rGd3sZ7dZ8I5CwOZOdaK9/SLpCRJUpFhQZIkFRkWJElS&lt;br /&gt;
kWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFh&lt;br /&gt;
QZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGS&lt;br /&gt;
JBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQV&lt;br /&gt;
GRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVVQ4LEXFGRGyKiJ9FxHhErJym/1n1fhMf&lt;br /&gt;
70TEMc1PW5IktUszexaOBLYBq4Gc4ZgETgKW1R/LM/PVJrYtSZLa7LCqAzLzYeBhgIiICkNfy8zX&lt;br /&gt;
q25PkiTNrXadsxDAtoh4JSIeiYiPtmm7kiTpELUjLOwCvgBcBnwKeAl4PCJWtGHbkiTpEFU+DFFV&lt;br /&gt;
Zu4AdkxoejoiTgSGgFWlsUNDQyxZsuSgtsHBQQYHB1s+T0mSOs3IyAgjIyMHte3du7fl25n1sDCF&lt;br /&gt;
Z4HTpus0PDxMf39/G6YjSVLnmewD9NjYGAMDAy3dzlzdZ2EFtcMTkiRpnqu8ZyEijgR+k9pJiwAn&lt;br /&gt;
RMQpwC8y86WIWAscm5mr6v2vA14EfgwsBj4PfAw4rwXzlyRJs6yZwxAfBP6O2r0TElhXb78b+Cy1&lt;br /&gt;
+ygcN6H/u+t9jgXeBH4EnJOZTzQ5Z0mS1EbN3Gfh7ykcvsjMqxqe3wbcVn1qkiRpPvC7ISRJUpFh&lt;br /&gt;
QZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGS&lt;br /&gt;
JBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQV&lt;br /&gt;
GRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkW&lt;br /&gt;
JElSkWFBkiQVGRYkSVKRYUGSJBUZFiRJUpFhQZIkFRkWJElSkWFBkiQVGRYkSVJR5bAQEWdExKaI&lt;br /&gt;
+FlEjEfEyhmMOTsiRiPirYjYERGrmpuuJElqt2b2LBwJbANWAzld54g4HngQeAw4BdgA3BUR5003&lt;br /&gt;
9pJLrubaa7/Cvn37mpimJEkLx759+7j22q9wySVXt/y9D6s6IDMfBh4GiIiYwZBrgBcy84v1589H&lt;br /&gt;
xOnAEPC3pYG7dn2TO+54jS1bLmPr1vvp7e2tOl1Jkrrevn37OPXUy9i+/U8YH18JfLCl79+OcxY+&lt;br /&gt;
Ajza0LYZOHX6ocH4+IVs3z7El7+8bhamJklS57vxxq/Vg8KFwEw+x1fTjrCwDNjT0LYHOCoiDp/J&lt;br /&gt;
G4yPX8imTU+1fGKSJHWDBx54ivHxC2bt/SsfhmivIWAJALt3/y9WrlzJ4OAgg4ODczstSZLmgZGR&lt;br /&gt;
EUZGRti9+38Dn6y37m35dtoRFnYDSxvalgKvZ+bb5aHDQD+QLFt2Hps2bZqVCUqS1IkOfID+jd84&lt;br /&gt;
l507v0vtEMQYMNDS7bTjMMRW4JyGtvPr7TPS0/MwK1ee3tJJSZLULS699DR6ejbP2vs3c5+FIyPi&lt;br /&gt;
lIhYUW86of78uPrrayPi7glD7qz3uTUiTo6I1cDlwPrpt5b09DxEX98wN910fdWpSpK0INx88w30&lt;br /&gt;
9a2np+chZnBXg8qa2bPwQeAHwCi1Ga2jts/jv9VfXwYcd6BzZu4EPgGcS+3+DEPA5zKz8QqJf+bo&lt;br /&gt;
o9eyZs0zXjYpSVJBb28vW7fez5o1z3D00Wtb/v7N3Gfh7ymEjMy8apK2J2jiAMrtt/9Xrriiv+ow&lt;br /&gt;
SZIWnN7eXjZs+Cof+tAYV155f0vf2++GkCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRY&lt;br /&gt;
kCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRYkCRJRYYFSZJUZFiQJElFhgVJklRkWJAk&lt;br /&gt;
SUWGBUmSVGRYkCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRYkCRJRYYFSZJUZFiQJElF&lt;br /&gt;
hgVJklRkWJAkSUWGBUmSVGRYkCRJRYYFSZJUZFiQJElFhgVJklRkWJAkSUWGBUmSVGRYkCRJRYYF&lt;br /&gt;
SZJUZFiQJElFhgVJklTUVFiIiD+OiBcj4pcR8XRE/E6h71kRMd7weCcijml+2pIkqV0qh4WI+ANg&lt;br /&gt;
HfAV4LeBHwKbI+LowrAETgKW1R/LM/PV6tOVJEnt1syehSHgW5l5T2Y+B1wNvAl8dppxr2Xmqwce&lt;br /&gt;
TWxXkiTNgUphISIWAQPAYwfaMjOBR4FTS0OBbRHxSkQ8EhEfbWaykiSp/aruWTgaeBewp6F9D7XD&lt;br /&gt;
C5PZBXwBuAz4FPAS8HhErKi4bUmSNAcOm+0NZOYOYMeEpqcj4kRqhzNWzfb2JUnSoakaFv4BeAdY&lt;br /&gt;
2tC+FNhd4X2eBU6brtO6dUP89V8vOahtcHCQwcHBCpuSJKk7jYyMMDIyclDbyy/vbfl2KoWFzNwf&lt;br /&gt;
EaPAOcAmgIiI+vM/r/BWK6gdnii6/vphrriiv8oUJUlaMCb7AH3ffWNceeVAS7fTzGGI9cC366Hh&lt;br /&gt;
WWqHE44Avg0QEWuBYzNzVf35dcCLwI+BxcDngY8B5x3q5CVJ0uyrHBYy82/q91T4M2qHH7YBF2Tm&lt;br /&gt;
a/Uuy4DjJgx5N7X7MhxL7RLLHwHnZOYThzJxSZLUHk2d4JiZG4GNU7x2VcPz24DbmtmOJEmae343&lt;br /&gt;
hCRJKjIsSJKkIsOCJEkqMixIkqQiw4IkSSoyLEiSpCLDgiRJKjIsSJKkIsOCJEkqMixIkqQiw4Ik&lt;br /&gt;
SSoyLEiSpCLDgiRJKjIsSJKkIsOCJEkqMixIkqQiw4IkSSoyLEiSpCLDgiRJKjIsSJKkIsOCJEkq&lt;br /&gt;
MixIkqQiw4IkSSoyLEiSpCLDgiRJKjIsSJKkIsOCJEkqMixIkqQiw4IkSSoyLEiSpCLDgiRJKjIs&lt;br /&gt;
SJKkIsOCJEkqMixIkqQiw4IkSSoyLEiSpCLDgiRJKjIsSJKkIsOCJEkqMixIkqQiw8IcGxkZmesp&lt;br /&gt;
tMnCWKf17C7Ws/ssnJq2VlNhISL+OCJejIhfRsTTEfE70/Q/OyJGI+KtiNgREauam273WTj/cRfG&lt;br /&gt;
Oq1nd7Ge3Wfh1LS1KoeFiPgDYB3wFeC3gR8CmyPi6Cn6Hw88CDwGnAJsAO6KiPOam7IkSWqnZvYs&lt;br /&gt;
DAHfysx7MvM54GrgTeCzU/S/BnghM7+Ymc9n5h3A/6i/jyRJmucqhYWIWAQMUNtLAEBmJvAocOoU&lt;br /&gt;
wz5Sf32izYX+kiRpHjmsYv+jgXcBexra9wAnTzFm2RT9j4qIwzPz7UnGLAZ45anvMcb2ilPsLHtf&lt;br /&gt;
fpmx++6b62nMqhdfhCN5mRe/dx9dXk7r2WWsZ/dZCDV95akXD/xzcaveM2o7BmbYOWI58DPg1Mx8&lt;br /&gt;
ZkL7rcCZmfnP9hZExPPAX2TmrRPaLqJ2HsMRk4WFiPhDoLurKUnS7LoiM/+qFW9Udc/CPwDvAEsb&lt;br /&gt;
2pcCu6cYs3uK/q9PsVcBaocprgB2Am9VnKMkSQvZYuB4an9LW6JSWMjM/RExCpwDbAKIiKg///Mp&lt;br /&gt;
hm0FLmpoO7/ePtV2fg60JA1JkrQAfb+Vb9bM1RDrgc9HxGci4reAO4EjgG8DRMTaiLh7Qv87gRMi&lt;br /&gt;
4taIODkiVgOX199HkiTNc1UPQ5CZf1O/p8KfUTucsA24IDNfq3dZBhw3of/OiPgEMAxcC7wMfC4z&lt;br /&gt;
G6+QkCRJ81ClExwlSdLC43dDSJKkIsOCJEkqmpOwsJC+iKrKWiPirIgYb3i8ExHHtHPOVUTEGRGx&lt;br /&gt;
KSJ+Vp/vyhmM6ch6Vl1rh9bzSxHxbES8HhF7IuI7EfG+GYzrqJo2s84OrefVEfHDiNhbf3w/Ii6c&lt;br /&gt;
ZkxH1fKAqmvtxHo2ioj/Up938YKBVtS07WFhIX0RVdW11iVwErUTRZcByzPz1dme6yE4ktpJrqup&lt;br /&gt;
zb2ok+tJxbXWdVo9zwC+DnwYOBdYBDwSEe+ZakCH1rTyOus6rZ4vAX8K9FO7Vf8W4LsR0TdZ5w6t&lt;br /&gt;
5QGV1lrXafX8/+ofPP8jtb8rpX7H04qaZmZbH8DTwIYJz4PaFRJfnKL/rcCPGtpGgO+1e+5tWOtZ&lt;br /&gt;
1G56ddRcz73J9Y4DK6fp07H1bGKtHV3P+hqOrq/19G6u6QzX2fH1rK/j58BV3VrLCmvt2HoC/wJ4&lt;br /&gt;
Hvg48HfA+kLfltS0rXsWYgF9EVWTa4VaoNgWEa9ExCMR8dHZnWnbdWQ9D0Gn1/O91D59/aLQpxtq&lt;br /&gt;
OpN1QgfXMyJ6IuLT1O6LM9VN8bqhljNdK3RuPe8AHsjMLTPo25KatvswROmLqJZNMab4RVStnV5L&lt;br /&gt;
NbPWXcAXgMuAT1HbrfZ4RKyYrUnOgU6tZzM6up4REcDtwJOZ+ZNC146uaYV1dmQ9I+IDEbEPeBvY&lt;br /&gt;
CPxuZj43RfdOr2WVtXZqPT8NrAC+NMMhLalp5ZsyafZk5g5gx4SmpyPiRGAI6IiTjPRPuqCeG4H3&lt;br /&gt;
A6fN9URm2YzW2cH1fI7aseol1O6ee09EnFn4I9rJZrzWTqxnRPxrasH23Mzc385tt3vPQru+iGo+&lt;br /&gt;
aGatk3kW+M1WTWoe6NR6tkpH1DMivgFcDJydmbum6d6xNa24zsnM+3pm5q8y84XM/EFm3kjthLjr&lt;br /&gt;
pujesbWEymudzHyv5wDwa8BYROyPiP3Uzr24LiL+sb6XrFFLatrWsFBPQge+iAo46IuopvrSi60T&lt;br /&gt;
+9cVv4hqPmhyrZNZQW13WbfoyHq20LyvZ/0P6CeBj2XmT2cwpCNr2sQ6JzPv6zmJHmCq3c8dWcuC&lt;br /&gt;
0lonM9/r+Sjwb6nN85T6438C9wKn1M+La9Sams7BWZy/D7wJfAb4LeBb1M5Y/bX662uBuyf0Px7Y&lt;br /&gt;
R+2MzpOpXbb2j9R2w8z5WaktXut1wErgRODfUNvdtJ/ap545X88Uazyy/h92BbWzyf9T/flxXVjP&lt;br /&gt;
qmvtxHpuBP4vtUsLl054LJ7Q55ZOr2mT6+zEet5SX+OvAx+o/x/9FfDxKf7PdlwtD2GtHVfPKdZ9&lt;br /&gt;
0NUQs/XzOVeLWw3sBH5JLd18cMJrfwlsaeh/JrVP6b8E/g/w7+e6QLOxVuA/19f3BvAatSspzpzr&lt;br /&gt;
NUyzvrOo/eF8p+HxF91Wz6pr7dB6Tra+d4DPTOjT8TVtZp0dWs+7gBfqddkNPEL9j2e31LLZtXZi&lt;br /&gt;
PadY9xYODguzUlO/SEqSJBX53RCSJKnIsCBJkooMC5IkqciwIEmSigwLkiSpyLAgSZKKDAuSJKnI&lt;br /&gt;
sCBJkooMC5IkqciwIEmSigwLkiSp6P8BhHTElY8JGVEAAAAASUVORK5CYII=&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgsAAAFzCAYAAACwxkr/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXu81/P9wJ+vbyJyimmUzYSZtZ8N5bJG5B4qI0xqkm0o&lt;br /&gt;
rRbmMrbMirnmltymNOQWUy0KuSRhO7nMNNdCpAuqo0Q6r98fr/e38zmfvtdzvpdzeT0fj+/jnM/7&lt;br /&gt;
87683pfP+/1630VVcRzHcRzHSUei3AI4juM4jtOwcWXBcRzHcZyMuLLgOI7jOE5GXFlwHMdxHCcj&lt;br /&gt;
riw4juM4jpMRVxYcx3Ecx8mIKwuO4ziO42TElQXHcRzHcTLiyoLjOI7jOBlxZcFxHMdJiRhni8gx&lt;br /&gt;
5ZbFKS+uLDhOI0NEDheRahHZu9yyNCdE5BMRuSny3Bzy4SJgKPBCuQVxyosrC47TOKnTpS4i0ktE&lt;br /&gt;
Liy0MM2EajZM9yZ7uY6IHIgpCj1UdVG55XHKy0blFsBxnJLSG+gHjCq3II2Q7YF15RaihOwM9FTV&lt;br /&gt;
eeUWxCk/riw4TgkQkc1UdXW+74ohSonCaXKo6tpyy1BKVPXWcsvgNBx8GsJZj4hcHOZgdxKR8SLy&lt;br /&gt;
uYgsF5E7RKRVxN72wd7JKfyoFpE/pfBzZxG5K/i3REQuCe+3E5F/iMgKEVkkImfF/DsguD9BRC4N&lt;br /&gt;
dr4QkUdE5LuxcL4Wka1SyHSriHwmIhtnif//icgkEVkqIqtF5A0RGRGzs5eIPC4iK8Nvhoh0idk5&lt;br /&gt;
I8jcNYS9FHg7vPtrePd9EblfRD4HHo+43VVEHhaRT4MML4pIj0xyB3cHisiDIvKBiKwRkQUicnk0&lt;br /&gt;
ziIyETgV2CTIUC0iqyPvEyJyToj3mpDWN4pIRSystiKyi4hsnoNcXUXkCRFZJiKrRORdERkbeZ9y&lt;br /&gt;
3j/4Xy0iJ0TM7g15s4OIPBbKwQci8uvwfg8ReTqE856IHBfzs52IjBaR14Pb5SIyRUR+lC0ewX2t&lt;br /&gt;
NQsZ7J0kIi+LyJehrI8TkW1S2Etb3iLxT/VbHexcHsJok8LvCSHsFhHZ7xeR7iLyr+DubRH5RQq3&lt;br /&gt;
3xeRh8S+/1UiMltEDo28T4h9ryMjZhsFu1+JyKYR8xEhrIzfntPwcWXBiZKcf70faA2cD9wHDABG&lt;br /&gt;
pHOUo5/3hb/nYYulLhSR3wEzgIXAuViDeqWI7JfCnwuBI4C/AtcBhwKPi8gm4f3fsZGyWpWfiLQE&lt;br /&gt;
+gAPqurX6YQMDf4LwL7ATdhc7RTgqIidPYCngR9gw/ijwv/PishuKeJ8G9AR+BNwVezdPyLpMT74&lt;br /&gt;
vzvwPLADcClwDvA1MDUHheEXIf43Ar8FngTODjIkuSHIvxabiugPDIy8vxP4CzAz+HFneP9PEYmO&lt;br /&gt;
SJwIzAOOzCSQiGwLPAq0B0ZiaToR+GnMaq7z/gpsDEwD3sTS5yPgFhHpB0wFZmNlaQ1wl4h0iLjf&lt;br /&gt;
BegBPAz8Drga6Aw8LSLtcgw/IyJyBnAXsAr4PXAHll7PiMhmEXvZytvHWP5Ef78GvgAWBzsTQnrE&lt;br /&gt;
laJNgZ8D96pqctpEgR8B9wD/xMrGF1ga7Rhx+x1gDnAAcC323VUA05JlUFWrg539I8F2ATYFWlA7&lt;br /&gt;
f/cDXsr07TmNBFX1n/9QVTCFoBq4NWY+CVgSed4+2Ds5hR/VwJ9S+HlTxCwBfAB8A5wTMW+LVbJ3&lt;br /&gt;
RMwOCO4/ADaLmB8XzIdEzGYDz8fkOQabZ+6WJe4vAsuAbTLYeRSrYLeNmH03yPxoxOz0INuMFH5c&lt;br /&gt;
Ft7dnuLdc0GORMRMgH8Br0TMDg9x2jtitkma/FwLfDtidhuwOoXdQ4JcR8fMewXzn8fitw44IUua&lt;br /&gt;
/iLY65TBzgZxCea7hHBPiJhNDHaHRsy2whSDb7D59aT5j4P7cyNmG6cI//vAV8DZOXwfi2LluJbs&lt;br /&gt;
wCbAp8BLwEYRe8cGWc7Lp7ylCP9vIa4/jZhVAjNj9vqmKB+LQhp1iZhtiymjl0TMxgZ7nSNmbYAP&lt;br /&gt;
gTciZhcCXybTFFPc3gBeJnz/mOJQBYzMNY7+a7g/H1lw4ihwS8xsFrBVLsPOGfz82/oH65n8G2sI&lt;br /&gt;
74iYr8B6jDvGPQDu1Mi8vqo+iFWA0d7tBGAfEdkhYtYP+FBVZ6UTLvSm9gJuUdXFaexsDBwE3K+q&lt;br /&gt;
H0fkWIiNxBwUG2pNlY7RdzfH/G8P/AwbgdlSRLYSm1LZCht9+bGIbJkuDqr6VcSvzYLb5zHFbPd0&lt;br /&gt;
7iIcBywBnkuGHfx4EWtQDoyEdYuqtlDV+7P4uRzL46OTw+EFIlqWPgXeAz5T1akR8/9gDeuOEbP1&lt;br /&gt;
vVsRaSEi3woyzsdGGOpLV2BL4EZV/SYS7kMhjKNC2FnLWxwROQ0b5RmmqtFtjBOA/YOfSfoB76jq&lt;br /&gt;
SzFvXlbVyohcH2NpF/3ejgBmqerciL2VwO3ALpFRiFmYcrRPeO4WzGaF/8FGG1oHM6eR48qCk4oP&lt;br /&gt;
Ys+fh79pG6s6+LkCWKOqn6UwTxXOO2nMOkae78Matn4AYS73KGxYOBM7hb//zWCnA9ASeCvFu3nY&lt;br /&gt;
FMB3YuYLMvg3P/a8c/h7JbA08lsCXBDebZ3OMxHpKLYm5DNs9GMpMD28bptBjmj4W8fCXgp8gsU7&lt;br /&gt;
bdgZmAFMxqZrloX5+V+GqaG6slxVV8XMVmA93zi1ylKYaz9XRN7FRhOWYem7M7mlUTa2xxTBVGXk&lt;br /&gt;
zfAecitv6xGRvbCpt7+palwBvQcbtegb7G4FHIZNy8WJf4Ng3/aWwa0A2wVZ4yR3RCTjkFQik4rB&lt;br /&gt;
vtQoCz8NymE3bITj+cwxdBoDvhvCSUW67WHJeeuUc7cikkn5TOVntnDyQlWXi8hUTFkYCRyPzene&lt;br /&gt;
XRf/CsCXebxLpt2lwFNp3KSq7BGRjbB1Bq2weL8FrMYUqdvIrVOQwBrcU0id/jn1gKOoqgI/F5Gu&lt;br /&gt;
QE9s2P5OYJiI7BtGQ9KtA0g3EpGuzORSli4B/oCN6jyFNZTV2NB7g+w4hbUUk4BXgTPj71V1qYhM&lt;br /&gt;
x9Y0XIWtj2hB6jJfsO9NVb8SkUpsVOMR4FvAs5gCsRk2UrMf8JqqVuXrv9PwcGXBqQvJkYYtYubb&lt;br /&gt;
xy0WkJ1TmH0fq0SjTAD+ISJ7AidhQ6/Z9om/G/7umsHOImz+f5cU7zph87wfZQknFxm+UtWZebrt&lt;br /&gt;
gikGx6vqpKShiPRkw4YgXeP8LrA3NgT9TRo7dUJV52AL4i4UkYHYkHYfrFf8eZAxXpY6FlKGQB9g&lt;br /&gt;
mqoOjhqG6Yh3UzvJi/exuOzChice7hLeQ27lLal834eN7Byr6RcJTgDuFZFdsTI/R1XjI1dZUVUV&lt;br /&gt;
kQ9JX8ahJg5gowiDsCmqhar6QZD7HWyt0X5kH9VzGgkNUpt2Gjahp7CM2quhwXo+xTrR7uTomgkR&lt;br /&gt;
OR6bGpgWs/cotsjsPKzC2mA4VkQ6hK1pAqCqH2GL0k6LrZ5fT6ionwSOC6v8k359BxvBeDJDZZ6V&lt;br /&gt;
sPbhBeDMVCvzs6zWT/YY13/PIW7D2DA/VmFbJzeJmd+PrWa/IGae3BbXJvKc09bJNGssXsUa1GT4&lt;br /&gt;
84OM8bI0KIXs9WUdMeVJRH6JrQspBHMw5WdwGO1JhnEMtsNlKuRW3gKXYQ3uCdF1MimYDKzEdt10&lt;br /&gt;
JfUURK5MA7qFnTlJ+dtgOzH+p6rvRezOwnZKnEntdQnPBfvfwtcrNBl8ZMGpK7cD54vIbdhixf2x&lt;br /&gt;
3n+xDv35DFt8Nw7bijcMG26/PWpJVb8RkXuBIVhv/94Ufo0GTgj+LAlmQ7Ch6ZdDnN7H5pYPUtXk&lt;br /&gt;
Iq4/YBXh82JnBQhwRnh3fgHieAbwDPC6iNyONaQdsPngLam9JS2azv/BpihuCAvQVoX4pWrMkwvc&lt;br /&gt;
xojITOBrVX1QVWeIyJ3AxWFU5kmscd0FW/z4a2oUsxOxofsTMSUjHaeJyABsm+h72OjBaVheTgdQ&lt;br /&gt;
1WVhGPv3oYH9ADia+q2PScfUEM6t2A6T3bAdGwvq4ef6fAhD83/AtkI+Hcrhdtg21Lewba1J0pW3&lt;br /&gt;
A1X1p2Fr5e+xMzi+F7aGJlmnquvLdQj3ASyPviZznmRjFJbfT4rI9ZgScir2rfw6Znc2ptD9AFtT&lt;br /&gt;
keRZbDGm4spCk8GVBaeuXAK0wyqW47GG5Ais8c1n33wu5orN5f8Ea5QrsEr0TFVdk8L9BKwyfiLN&lt;br /&gt;
anPF5qprDFT/LSI/w+I1GOv5LsCGypN2XhGRA4IsyfsVngf+oKqvpYlLLvFL+v9aaKhHAL/CGszF&lt;br /&gt;
wFxsLUJKP0JjcRRWYV+IrVd4ABiHNYpRJmK9z+Ow9QlfAw8GfwaKyAvAb7Be7ddYGvwthT+55PGT&lt;br /&gt;
2E6Mk4BtsF73HODiWE/5DGwdwRBsLcfdQfa5bEiuZSZpFjW/GMvXE7AFgf/CFgOOyTE+cf82CFdV&lt;br /&gt;
bxGRlVhDfyW2dfBe4PzYbp5s5a1d8PuQ8IvyFRsqwRMICp2qfs6GpJJ9gzio6kdBrsuxsyg2xrZD&lt;br /&gt;
HqGqT8TiulxEXgf+D1Oik8wKfr6lqkvThOk0MsTWINXDA5Fu2IfRBesF/VxVJ6exezPWs/idql5f&lt;br /&gt;
r4CdZkFonJ8Cjgtb0HJx8xPgFaC/qt6Tzb7jNHbETsB8gTy+E8fJh0KsWWiNVcyDyaCdh3m7fajf&lt;br /&gt;
IjDHyYXTsB7dw+UWxHFKxGnYyM3UbBYdpy7UexpCVR8DHoP1i6o2ICwCuw7bOhVfkOY4BSGs/v8/&lt;br /&gt;
bBj9elXNtHXRcRo9ItIb21UxAPhrfRbZOk4mir5mISgQE4ArVHVeGn3CcTKR61zZDdjhQVOx+WnH&lt;br /&gt;
aercgq3hmYStpXGcolCKBY7nYyuub8xq03FiqOozpD+gJ253h+y2HKfpoKqZtl46TsEoqrIQtv8M&lt;br /&gt;
BfbI091W2JTFAux8d8dxHMdxcqMVdrDZ9HB/Sr0p9sjCfsC3gQ8j0w8tgGtE5HeqmurCIDBFoVxH&lt;br /&gt;
9DqO4zhOU6Afke3f9aHYysIEbD98lBnBfFwGdwsA7rrrLjp16pTBWuNn+PDhjB49utxiFB2PZ+Om&lt;br /&gt;
Z88zWLQoeQ4VwHDsbCsApUOHQUydenNqx42YppqfcZpLPKF5xHXevHn0798f6nfgWC3qrSyISGvs&lt;br /&gt;
jP5kLbKjiOyGXRn7ITX3CCTtrwU+UdW3M3i7BqBTp0507lyIm2MbLm3btm3ycQSPZ2PnuOOOYMyY&lt;br /&gt;
pVRX9wgmbUne6pxIPMrxxx/ZJOPdVPMzTnOJJzSvuFLAafxCnLOwJ3bCVyW2av1q7OS1P6exX6y7&lt;br /&gt;
AxzHKRKjRp1Dp07XkEg8Ss0nrCQSj9Kp02hGjjy7nOI5jlNk6q0sqOozqppQ1Rax36lp7O/opzc6&lt;br /&gt;
TuOioqKCOXMmMWTIi3ToYJc2dugwmCFDXmTOnElUVFSUWULHcYqJ3w3hOE5OVFRUcN11FzNgAHTp&lt;br /&gt;
0pupU8fSfEZzHad541dUl5m+ffuWW4SS4PFsajSPeDaX/Gwu8YTmFddCUtSLpMKVs6Ow2wh3BFYA&lt;br /&gt;
T2A3sC3K4GdnoLKysrI5LURxnEbB3LnQpQtUVuIjC47TAJk7dy5dunQB6KKqqW5vzZtiXyS1GXZF&lt;br /&gt;
7Z+xg5mOAXYBHilAuI7jOI7jlICiXiSlqiuxA5bWIyJDgBdF5LuqurC+4TuO4ziOU1zKsWZhC2wE&lt;br /&gt;
YnkZwnYcx3EcJ09KqiyIyCbAX4F7VPWLUobtOI7jOE7dKJmyEBY7PoCNKgwuVbiO4ziO49SPkpyz&lt;br /&gt;
EFEUtgMOynVUYfjw4bRt27aWWd++fX3ri+M4juMAEydOZOLEibXMVqxYUfBwiq4sRBSFHYEDVfXz&lt;br /&gt;
LE7WM3r0aN866TiO4zhpSNWBjmydLBhFvUgKWARMwrZP9gRaisg2wd5nqrq2vuE7juM4jlNcCjGy&lt;br /&gt;
sCfwFLYWIXmRFMCd2PkKvYL5K8FcwvOBwLMFCN9xHMdxnCJSiHMWniHzQkk/UtpxHMdxGjHekDuO&lt;br /&gt;
4ziOkxFXFhzHcRzHyUi9lQUR6SYik0XkIxGpFpHeKexcIiIfi8hqEXlcRL5f33Adx3EcxykNxb5I&lt;br /&gt;
ChE5DxgCnAbsDawCpovIxgUI23Ecx3GcIlPUi6QCw4C/qOrUYOdkYDHwc+D++obvOI7jOE5xKeqa&lt;br /&gt;
BRHZAWgPPJk0CzdRvgh0LWbYjuM4juMUhmIvcGyPTU0sjpkvDu8cx3Ecx2ng+G4Ix3Ecx3EyUuy7&lt;br /&gt;
IT7BTmzchtqjC9sAL2dz7BdJOY7jOE56msRFUqo6X0Q+AQ4GXgMQkTbAPsCYbO79IinHcRzHSU+T&lt;br /&gt;
uEhKVT8ErgUuEpF3gAXAX4CFwCP1DdtxHMdxnOJT7IukTlXVK0RkM+AWYAtgFnCEqn5dgLAdx3Ec&lt;br /&gt;
xykypbhIClW9GLi4vmE5juM4jlN6fDeE4ziO4zgZcWXBcRzHcZyMuLLgOI7jOE5Giq4siEhCRP4i&lt;br /&gt;
Iu+FWyffEZGLih2u4ziO4ziFodiHMgGcD5wOnAy8ge2eGC8iy1X1xhKE7zQAVJXU94w5jlNu/Pt0&lt;br /&gt;
slGKaYiuwCOq+piqfqCqDwEzsOuqnSZMVVUVQ4eOYIcdDmG77X7ODjscwtChI6iqqiq3aI7T7PHv&lt;br /&gt;
08mHUowsPA/8RkR2VtW3w4FN+wLDSxC2Uyaqqqro2rUP8+adRXX1xdiZXcqYMdOZObMPc+ZMoqKi&lt;br /&gt;
osxSOk7zxL9PJ19KMbLwV+A+4H8i8jVQCVyrqveWIGynTFx44VWhIupBzeGeQnV1D+bNG85FF12d&lt;br /&gt;
ybnjOEXEv08nX0qhLPwCOAk4EdgDGAD8XkR+WYKwnTIxZcpsqqsPT/muuroHkyfPLrFEjuMk8e/T&lt;br /&gt;
yZdSTENcAVymqg+E5/+KSEfgAuDvmRz6rZONE1Vl7drW1PRY4ghr127mi6ocpwz499m0aBK3TgY2&lt;br /&gt;
A9bFzKrJYVTDb51snIgILVuuwq4KSVXZKC1brvKKyHHKgH+fTYtS3TpZimmIKditk0eKyPYicgy2&lt;br /&gt;
uPGhEoTtlIlevfYlkZie8l0i8Ri9e+9XYokcx0ni36eTL6VQFoYADwJjsHMWrgDGAn8qQdhOmRg1&lt;br /&gt;
6hw6dbqGROJRrAcDoCQSj9Kp02hGjjy7nOI5TrPGv08nX4quLKjqKlU9S1V3UNXWqrqzqo5Q1W+K&lt;br /&gt;
HbZTPioqKpgzZxJDhrxIhw6DAejQYTBDhrzo27Icp8z49+nki6hqdlslRkQ6A5WVlZW+ZqEJMHcu&lt;br /&gt;
dOkClZXg2dn48fxsWnh+Nj0iaxa6qOrcQvjpF0k5juM4jpORkigLIrKtiPxdRJaFy6ReDaMHjuM4&lt;br /&gt;
juM0cIq+dVJEtgBmA08ChwPLgJ2Bz4sdtuM4juM49adUt05+oKq/jpi9X4JwHcdxHMcpAKWYhugF&lt;br /&gt;
/FtE7heRxSIyV0R+ndWV4ziO4zgNglIoCzsCg4A3gcOwMxau97shHMdxHKdxUIppiATwkqr+MTy/&lt;br /&gt;
KiK7AmeQ5W4Ix3Ecx3HKTymUhUXAvJjZPODYbA79IinHcRzHSU9TukhqNrBLzGwXcljk6BdJOY7j&lt;br /&gt;
OE56mtJFUqOBn4rIBSKyk4icBPwauLEEYTuO4ziOU09KcTfEv4FjgL7Af4ALgWGqem+xw3Ycx3Ec&lt;br /&gt;
p/6UYhoCVZ0GTCtFWI7jOI7jFBa/G8JxHMdxnIy4suA4juM4TkZKriyIyPkiUi0i15Q6bMdxHMdx&lt;br /&gt;
8qekyoKI7AWcBrxaynAdx3Ecx6k7JVMWRGRz4C5s2+TyUoXrOI7jOE79KOXIwhhgiqrOLGGYjuM4&lt;br /&gt;
juPUk5JsnRSRE4HdgT1LEZ7jOI7jOIWj6MqCiHwXuBY4RFXXFjs8x3Ecx3EKSylGFroA3wbmiogE&lt;br /&gt;
sxbA/iIyBNhEVTWVQ79IynEcx3HS05QuknoC+HHMbDx28+Rf0ykK4BdJOY7jOE4mmsxFUqq6SlXf&lt;br /&gt;
iP6AVcCnqhq/uroWPXuewdChI6iqqiq2mI7jOI7TqKmqqmLo0BH07HlGwf0u1wmOaUcToixaNJYx&lt;br /&gt;
Y7rStWsfVxgcx3EcJw1VVVV07dqHMWO6smjR2IL7XxZlQVUPUtWzstsUqqt7MG/ecC666OriC+Y4&lt;br /&gt;
juM4jZALL7yKefPOorq6ByBZ7edLo7gborq6B5Mnzy63GI7jOI7TIJkyZTbV1YcXzf9GoSyAsHbt&lt;br /&gt;
ZmRYC+k4juM4zRJVZe3a1hRjRCFJ0ZUFEblARF4SkZUislhEHhaRH+Tni9Ky5Spqdl46juM4jgMg&lt;br /&gt;
IrRsuYoclwPWiVKMLHQDbgD2AQ4BWgIzRGTTXD1IJB6jd+/9iiSe4ziO4zRuevXal0RietH8L/o5&lt;br /&gt;
C6p6ZPRZRE4BlmCHNT2XxTWJxKN06jSakSMnFUtEx3Ecx2nUjBp1DjNn9mHePKW6euuC+1+ONQtb&lt;br /&gt;
YGMln2Wz2K7dZQwZ8iJz5kyioqKi+JI5juM4TiOkoqKCOXMmMWTIi7Rrd1nB/S/JRVJJwnHP1wLP&lt;br /&gt;
hcOZMnLttX+gXz8/wdFxHMdxslFRUcF1113M3nvPpX//wo7Gl1RZAG4CfgTsW+JwHcdxHMepIyVT&lt;br /&gt;
FkTkRuBIoJuqLsrFzdVXD+e++/wiKcdxHMdJRaqLpBYubJwXSSUVhaOBA1T1g1zdnX32aJ+GcBzH&lt;br /&gt;
cZw0pOpA3333XPr3L+xFUkVXFkTkJqAv0BtYJSLbhFcrVHVNscN3HMdxHKd+lGI3xBlAG+Bp4OPI&lt;br /&gt;
74QShO04juM4Tj0pxTkLjeRIacdxHMdxUuENueM4juM4GXFlwXEcx3GcjJRMWRCRM0Vkvoh8KSIv&lt;br /&gt;
iMhepQq7IRPf8tJ0aR7x9PxsWnh+Nj2aT54WlpIoCyLyC+BqYASwB/AqMF1E2pUi/IZM8ym4zSOe&lt;br /&gt;
np9NC8/PpkfzydPCUqqRheHALao6QVX/h+2QWA2cWqLwHcdxmiV33HEHt912W7nFcBo5RVcWRKQl&lt;br /&gt;
dsPkk0kzVVXgCaBrscN3Ssf48eNJJBJ88EHNuVvdu3fntNMOLHhYd955J4lEgrlz5xbcb6dhcsop&lt;br /&gt;
p9TrQrnu3btz4IE1ZfH9998nkUgwYcKEQojXIHnggQcYPnw4e+3ls75O/SjFyEI7oAWwOGa+GGhf&lt;br /&gt;
gvCdEiEi2F1htc0SieIUs3hYTtMmVfnK132xymJD5J133mHQoEE88MAD7L777uUWx2nklPoiqVxp&lt;br /&gt;
BfDx7GnMZV65ZSkqKxYuZO7dd5dbjIKw4PnnQZX/PPwwy9rZcpTLBw5kwXw49V/XMn/a3RQqO5Nh&lt;br /&gt;
zZs2DeY1nDLSlPIzHfPnQ2sWFjQ/c+HTd9+leu3aOqfv5QMHAqx3v2jZMsDK0twWLVK6acz5OfNf&lt;br /&gt;
/+KPp5xCu6VLM8ahXPlZLhpznubKx7PnJ/9tVSg/xWYEikeYhlgN9FHVyRHz8UBbVT0mhZuTgKad&lt;br /&gt;
m47jOI5TXPqp6j2F8KgUJziuFZFK4GBgMoDYWOLBwPVpnE0H+gELAL8/ovHQE9vx0gv4JJjdClRj&lt;br /&gt;
i1qTtMQWtx6OTUVVAa8Bo7GjwG/B1rmkYgTwz0hYp2G3mR6EleengSuBLyJu9geOBX4ItAWWYGXx&lt;br /&gt;
DiCbtrwpMBjojk2pfQG8BVwX/gJMBf4F/DnmNh73zsHsfGBH4BigNTAnuP0aGAb0wHoETwCjgG8i&lt;br /&gt;
fiawtOsFbA0sAx7D0ixpb3hIn4Mj7s7Fjli/Arg/mG0JPA5cCjyEpd+vgf2A7bDpw/8BY4HKiF/t&lt;br /&gt;
Q5xHYx2BU4IsbwOXUdM/7YXlUd/wLsqpIV2ODHEA2BXLzx9jZWQh8A/g3vB+RIjTscAFwN7AV8AU&lt;br /&gt;
LD+yEc+PZDySZSrJXsDpWHn5JsT9Bqw+itIOKxs/w8rVUuB5rPytA/6dQZaeIZxc0+dW7Nj887G4&lt;br /&gt;
7wqsxLYxxBddbAEMxfJxc+B94K5YHO/CvrVzI2b3ATsBvwDeDWaHYeWjT/DHaRy0AjpibWlhUNWi&lt;br /&gt;
/7BKajVwMvYB3gJ8Cny7FOH7rzQ/YABWSX4vYvYUMDPynMAawXVYhTUIq7AeB3oFOwcDJ8V+jwY3&lt;br /&gt;
PSJhVWPbcJ8GzsSUz2+Ap2JyPYRVqmdhjdG9we3lOcTpbuBLrJEdCJyDNWB9I3bmA3ekcBuP+wEh&lt;br /&gt;
3LnAc0Hm0UHme0J6TMUaifEhvhfF/Bwf/Lg32BsXnidF7Pw8uP1RxOxlYC1wX8TsuGCvU3jeCmug&lt;br /&gt;
rwzpdDbwBqaw/yTibvsQZiXwZkiTszEl7H2gRbC3ObAKuCJF2rwOzIg8HxrCeQ/4Uwh/NDA9Ymcc&lt;br /&gt;
Vo/8B7gt2Lk/xOH0HPIynh/JeJwcMTsEU9rmhThdFOK1jNrlugPwEaboXgX8Brg4xKtNsBMvwyeF&lt;br /&gt;
slIFfCvP9Hkq5M0C4BpMmXk8xP3wiL1WkTy7EitjT4d4/jZi71rgk8jzlsGvtcCgiPkNUXv+a76/&lt;br /&gt;
0gVkGvgCrOKdA+xZ7sj7r+B5nIuyMDBUXEPz8PdnWA/y1lhY1cCLycYpmJ8TZOgZMdskhZ9jQ6Xd&lt;br /&gt;
MkvYnwPXZ7GTr7Lwakzmu4PMU2PuZwPvRZ5/EtzfHLN3RXB/QHhuF+ydHp7bYArJvcDHEXfXAksj&lt;br /&gt;
zwJsFPO7DbAIuC1ilmxklxAaxmDeK8hxZCxuH8b83CO4/2V4TmBKwrtARYZ0Hhf8/0PMvBJ4KYdy&lt;br /&gt;
lIuy8HKIb9uI2Y9D+o2LmN2JNax75FGOfx/kPymf9InIHnfbEhsduD9iNizYOzFi1iKUpRVA62DW&lt;br /&gt;
J9jbJTz3xOrmh4F7Im5fAR7MNY7+a7q/ki0NVtWbVLWjqm6qql1VNdMQndN0ORYbrr0xF8si0h54&lt;br /&gt;
EOuNn5nCyq2qui7yPJbQYCUNVPWriH+bi8hWWM9+M2ykKxPLgX1EpEMu8ubInTGZXwx/74jZexHY&lt;br /&gt;
TkSS3+mR2LTJ6Ji9q7GG/igAVV2GTR/sH97vhzV2VwLtRWSnYN4NSweCO1XVb8CmCkVkS2BjbDi9&lt;br /&gt;
c4p43KuqKyPPs4IcO0bMJgDbikh0/2w/bITgofC8BzZkeq2qVqUIJ84tsedZsTDrRChru2FKwYqk&lt;br /&gt;
uar+B+vFHxnsCXA0MFlVX87R7wOx4fzrtfYcci7pk+SLqFtVXQu8RO24H4GNBNwbsbcOG3XbHFNY&lt;br /&gt;
oSavkmWkW/Dr8fA/ItIWm+6YlUscnaZN89lH5DQUdgLeVNXqbBZFpAU2zCzAsaFyjKLAO7UMVFdh&lt;br /&gt;
PcOOEX9+JCIPi8hybJ53KfD38LptFjHOxSrMD0XkRREZISI7ZJM9Cx/GnldkME9EZEz2hONxXowp&lt;br /&gt;
NdtHjGdsn3IDAAAgAElEQVQRKn1MWfi3qlYCnwHdRKQCaxhrNQQiMkBEXsWGsT/FRg+OInU61ZJX&lt;br /&gt;
VZeHf7eMGD+OrV/pF/wX4ETgHyGvwMqEAv9NEUacNar6aczs81iYdSWZfm+leDcPaCcimwLfxkZc&lt;br /&gt;
cpEXEfkuNqozC5vaiJJL+iRZmML7eNy3Z8P1D0n5JbxHVZcEe8ky0i3INwv4joh0xMqN4MqCQ5mU&lt;br /&gt;
hXzviRCR7iJSKSJrROQtERlQKlnrSz5xFZEDRKQ69lsnIluXUuZ8EJFuIjJZRD7CholzoW2O+XkV&lt;br /&gt;
sA9wvKouqqN8bYFnsaHki7Dh1kOA84KVjN+Aqj6A9dyGYA3oH4F3Q970TlpL4/xbwIHJvMSGkgVb&lt;br /&gt;
1JiKdWnM44cL5LKF6Tms0t+BmoYgad4Nm9qp1RCISH8sD7cLsqzAhq9fIHU6rYu47R4WMgswLJmn&lt;br /&gt;
QSm8B+gjIhtjC1G3xdZn1IV0aZQXInIB8Agm7w0i8jAW72yswhp3Af6Y7fsMu8EexIb4fxFXkvNM&lt;br /&gt;
n1zLRzT8M4LyNzvYO0dEeoTXz2GKYytsQfGz2FqJL7Cy+kiw9+N0/jckknEVkRXh93wkrqnsN7r6&lt;br /&gt;
No6InB/kviaLvXq3oSVXFvK9JyJouFOxEyB3w1Y93y4ih5ZC3vpQxzsxFNgZW6ndHugQegENldbY&lt;br /&gt;
vObgHO1/jFU+M8mQnyJyIjb/eraqPreBL8EallZRd62xxWcLglF3rOc1QFVvVNVpqjoT64nnhKou&lt;br /&gt;
VtWbsZX+o7Eed7SC/hxbgR5nm/A3mZ/HYPm7MoXdXHgf+2bjcd46hB9drZ5UAg7FVt0nn5/Fhp67&lt;br /&gt;
YQ1fdJdDH6xRG4Y1HvtjCkNnMjdIHan5RhVTLqJ5OgHriffCFvktAWZEvHg3+L9r2pgXnm7YYlEF&lt;br /&gt;
Lsfm/5PTO7uksP9DLC2S3+dKYBrZv88bsLUmfVR1aRo72dInH96ndvn4EFOMLwyyvwQ8IiKdsDLx&lt;br /&gt;
PWwkI4GtJdsem55bidVX/6OR1LfUxLUzVn5nUhPXdDS2+nY9oeN5GpZPmex1pBBtaKkXSWAVyXWR&lt;br /&gt;
Z8GG185NY/9y4LWY2URgWrkXfBQhrgdgvYc2pZCvCPGtJvsCx39iH+iwdPmJNRpVwPgMYSUXOL5E&lt;br /&gt;
ZFEeNYvIeobnnsFet4idjbGFbOuA/TOEkUiVF9haAgV6h+f7MSUoKkcyXKVmdXxygeOxKeKyDugc&lt;br /&gt;
Mx8RzL8VnpMLHMfG7F1OZIFjxPxDbPj5G8KCPUxxqMYagRkx+w8Cb8fMDgtx+ChilpwOOSsS/muR&lt;br /&gt;
MvCnFHn6CrbFczkwOhaGYArDe0QWFqZI93HAyhTmI4B1OZTPtAscqVkU+mbIy+jCzV1DGk4L6dwG&lt;br /&gt;
UzTWxvMsFl5yMe8pOciWNn0isr+WwnwctRfBDg0y/iJi1gIbRViBKfefBtl2CvLNAyojebko5MWX&lt;br /&gt;
wB/iedmYfsm4pnnXaOtbbP3Jm9hI1FPANRnsFqQNLekJjlJzT8SlSTNVVRHJdE/ET7GtdlGms+Ei&lt;br /&gt;
rwZFHeMKVnG+EoYGXwcuVtXniypsadkca8SuEZF9sN5NAjhURHqp6hSsAlTgORHpF3P/vKrOjzxv&lt;br /&gt;
DDwpIvdjvb9BwCxVnZq0j/X8J4hI8lyP/uQ2lF8BLBSRBzHt/Qusp75nzP3t2DbE6UGOnUIYHwHf&lt;br /&gt;
pSY/P8oQVtZzjFX1NRG5EzhNbPHhM9g0zcnAQ6r6TMzJLKzX+JrWLNibi40o7MyGB59NBY4VkX9g&lt;br /&gt;
St2OWHqCNSrpyOUbnYBNK2k83PBdDMLOvnhFRMZhDdYPse2fR2QIu1BsQc0ow1jgBRH5G9bLHoKV&lt;br /&gt;
ofHYGRivBPN1WBm9GWtwt8XKwb7YSMVN2LqGtSnK8UOq+mXkOW365Mmt2LbK8SKyJzbCdjxW5/wO&lt;br /&gt;
G73YDJijqu+KyCfAD7ARELC8fAorN4qVoY9p4PVtHLFFwScQ4prJKo2zvh0DTFHVmSLyxyx2C9KG&lt;br /&gt;
lvq450z3RKQa+gMbGkplv42IbKKRle4NjLrEdRH2of8b2ATbu/20iOytqq8US9ASEG1Y2wM3Y/vB&lt;br /&gt;
T8J2R3yBpdWbwU47rAcUX/UO1iNKKguKVeT9sEONWmIV7bD1Aat+JiJHYdNBf8Eq/b9jQ5TZDixZ&lt;br /&gt;
jX2Uh2FTCAlsceGgEIdkGDNE5CzsHIfR2AFNR2GNzhchnptg6x2EyOLLCLkoLwC/wnrhp2DnKXyC&lt;br /&gt;
Hdx0SQq7s7ADdtavS1DVdSIyB+uR1Fq4pqrjRWQbrAwehu3XfxPrgX+dQt6kzNFvNGke/0bvxhri&lt;br /&gt;
tzXFTqiQhgdiowRnYWn9Ltb4xcNNRa7pF7eXfL4WeE5V7xCR+Vh5+jM2evA0dhiSUvv7HIY1SCdj&lt;br /&gt;
jdJH2OjDauA7mCL7IzY8NAks7T+IPGdMnyxxXG+uqmtE5ADgr0GuNtjUxNfY+QxVwDFqt/8m5TiO&lt;br /&gt;
ml0x7bERjt5YHryIKfgNvb4FQER2xZSDVmwY1ziNsr4NU7S7Y52WXChMG1rioZMOWA9lnxTDJHPS&lt;br /&gt;
uHkTOC9mdgSm1W+wf76h/OoS1zT+PI1ttSt7nHKQtZowNJ/BTqPMz7rEtQnk51hsOLpDffMUO/Dp&lt;br /&gt;
a2JnJDSEX67xLGZ+FjN9sE7hjti6qVHYmogf1jUvG/Ivn7gWMz+LGL/vYh2EXSNm2aYhCpKneS1w&lt;br /&gt;
zHe1aXCzfhUmNmxaTc3CryTbUHM8cJxP0thfqQ1by12GZUY+cU3FS8D3CyVUA6Cx5mehaBT5KSI3&lt;br /&gt;
YucKdNfsO1FyydOBWE+1rrsgikKe8UxFofKzaOmjqt+o6nuq+rKqXohNqQ1LY71Rf595xjUVDf37&lt;br /&gt;
7IJt3Z0rImtFZC229mKYiHwtkvJa1oLkab67IfJabZpmFWYCG0JN2kneE5FunmgOtc+4BxsizTQP&lt;br /&gt;
VXbUzgRI3okB5BTXVOyODZc1FRplfhaQBp+foQE9GjhQVT/IZp8MeSoiB4rIEGyh3MM5+lcS6hDP&lt;br /&gt;
VNQrP8uUPgls2D0VTe37zBTXVDT07/MJbDfZ7libuhs2jXIXsJuGYYMYhcnTAgyLZFptmmoV5nNY&lt;br /&gt;
jzvlPRHY9rQ7I/Y7YnNPl2Nz/YOx4bpDyj0klEPaZLwTI0Vch2FzhTsB/4fNo67Fej1lj0+aOLYO&lt;br /&gt;
BXZ3bNTod+F5uyaYn/nGtTHm503Yuo5uWO8j+WsVsXNprnmKDZGuwSq5vIf5G1g8C56fxU6fEIdu&lt;br /&gt;
2LqTXUMZ/QY4KE2ZbczfZ75xbXTfZ4YydE3kOefvM69w6iFgAlsx+yXp57+eITaXgo0qrCbNPRHY&lt;br /&gt;
SviZMTf7Y730L7FTx35ZV7nLkJFp78SIxxXb9vc2tlp9KTYik3ZrX0P4UbMdcF3sd0dTy89849pI&lt;br /&gt;
8zNV/NZR+/6ERp+ndYlnI83P26nZBvkJdn7DQU0pL+sa18aYn2niPZPaykJR8lSCRzmTYrXpSar6&lt;br /&gt;
WBq7b2IV6eURsyOwqYnNtBHMgTmO4zhOc6cuWyf/hw29tsW23EwQkf01/faUvBG76OdwrEe+plD+&lt;br /&gt;
Oo7jOE4zoBU2/TBdN7xLpU7krSyo3Ur3Xnh8WUT2xuZ+BqWwXtdVmIdTv4NJHMdxHKe50w+7e6Te&lt;br /&gt;
FOJQpmwra+Onr+WyCnMBwF133UWnTpmO9W78DB8+nNGjG9XhaHXC49m46dnzDBYtGkvNQZPDqTkA&lt;br /&gt;
TunQYRBTp96c2nEjpqnmZ5zmEk9oHnGdN28e/fv3h5o7cupNXsqCiFwKPIqdPFaBaS0HYAoAInIZ&lt;br /&gt;
sK2qDghObgbOFJHLgTuw7RvHEe6Fz8AagE6dOtG5c+d8RGx0tG3btsnHETyejZ3jjjuCMWOWUl2d&lt;br /&gt;
PFalLbaDGhKJRzn++CObZLyban7GaS7xhOYVVwo4jZ/vOQtbA3di6xaewM5aOEztFj+wYyXXX/Oq&lt;br /&gt;
qguwY28Pwc5THw78SlXj51Q7jtOAGTXqHDp1uoZE4lFqThdWEolH6dRpNCNHnl1O8RzHKTJ5jSyo&lt;br /&gt;
6q+zvB+YwuxZTKlwHKeRUlFRwZw5k7jooqt54IHJLFoEHToM5vjjt2HkyElUVFSUW0THcYpIqS+S&lt;br /&gt;
chynkVJRUcF1113MgAHQpUtvpk4dS/MZzXWc5k2+0xBOgenbt2+5RSgJHs+mRvOIZ3PJz+YST2he&lt;br /&gt;
cS0keR/KVApEpDNQWVlZ2ZwWojhOo2DuXOjSBSor8ZEFx2mAzJ07ly5dugB0UdW5hfDTRxYcx3Ec&lt;br /&gt;
x8lIvldUXyAiL4nIShFZLCIPi8gPsrg5QESqY791IrJ1/UR3HMdxHKcU5Duy0A24AdgH2w7ZEpgh&lt;br /&gt;
IptmcafAztjWyvbY7WpL8gzbcRzHcZwykO/WyVqHKYnIKcASbGvkc1mcL1XVlXlJ5ziO4zhO2anv&lt;br /&gt;
moUtsFGDz7LYE+AVEflYRGaIyM/qGa7jOI7jOCWizsqCiAhwLfCcqr6Rweoi4HSgD3As8CHwtIjs&lt;br /&gt;
XtewHcdxHMcpHfU5lOkm4EfAvpksqepbwFsRoxdEZCfs6OcBqV05juM4jtNQqJOyICI3YpdBdVPV&lt;br /&gt;
RXXw4iWyKBlgt4O1bdu2llnfvn39UA3HcRzHASZOnMjEiRNrma1YsaLg4eR9KFNQFI4GDlDV9+oU&lt;br /&gt;
qMgMYKWqHpfmvR/K5DgNFD+UyXEaNsU4lCnfK6pvws557Q2sEpFtwqsVqrom2LkU+E7ymmoRGQbM&lt;br /&gt;
B/4LtAJ+AxwIHFqICDiO4ziOU1zynYY4A9v98HTMfCAwIfzfgcg11cDGwNXAtsBq4DXg4HAbpeM4&lt;br /&gt;
juM4DZx8z1nIunsifk21ql4JXJmnXI7jOI7jNBD8bgjHcRzHcTLiyoLjOI7jOBlxZcFxHMdxnIy4&lt;br /&gt;
suA4juM4TkaKfkV1cNddRCpFZI2IvCUifnKj4ziO4zQSin5FtYh0BKYCTwK7AdcBt4uIn7PQjMj3&lt;br /&gt;
8C/HcUqHf59ONkpxRfUg4D1VPTc8vyki+2F3Qzyel7ROo6KqqooLL7yKKVNms3Zta1q2XEWvXvsy&lt;br /&gt;
atQ5VFRUlFs8x2nW+Pfp5EN9LpKC3K6o/inwRMxsOjC6nmE7DZiqqiq6du3DvHlnUV19MXZLuTJm&lt;br /&gt;
zHRmzuzDnDmTvEJynDLh36eTL6W4oro9sDhmthhoIyKb1DV8p2Fz4YVXhYqoB1YRAQjV1T2YN284&lt;br /&gt;
F110dTnFc5xmjX+fTr7UZzdE8orqEwski9OEmDJlNtXVh6d8V13dg8mTZ5dYIsdxkvj36eRLKa6o&lt;br /&gt;
/gTYJma2DXbr5FeZHPoV1Y0TVWXt2tbU9FjiCGvXboaqYgNUjuOUCv8+mxaluqI6b2UhdkX1Bzk4&lt;br /&gt;
mQMcETM7LJhnZPTo0X5FdSNERGjZchW2nCVVZaO0bLnKKyLHKQP+fTYtUnWgI1dUF4x8z1m4CegH&lt;br /&gt;
nES4ojr8WkXsXCoid0ac3QzsKCKXi8guIjIYOA64pgDyOw2UXr32JZGYnvJdIvEYvXvvV2KJHMdJ&lt;br /&gt;
4t+nky/5rlk4A2iDXVH9ceR3QsROrSuqVXUBcBR2LsMr2JbJX6lqfIeE04QYNeocOnW6hkTiUawH&lt;br /&gt;
A6AkEo/SqdNoRo48u5ziOU6zxr9PJ1/yUhZUNaGqLVL8JkTsDFTVg2LunlXVLqq6qarurKp/L1QE&lt;br /&gt;
nIZJRUUFc+ZMYsiQF+nQYTAAHToMZsiQF31bluOUGf8+nXyRhnhyl4h0BiorKyt9zUITYO5c6NIF&lt;br /&gt;
KivBs7Px4/nZtPD8bHpE1ix0UdW5hfDTL5JyHMdxHCcjriw4juM4jpMRVxYcx3Ecx8lI3sqCiHQT&lt;br /&gt;
kcki8pGIVItI7yz2Dwj2or91IrJ13cV2HMdxHKdU1GVkoTW2BXIwNXtusqHAztg9Ee2BDqq6pA5h&lt;br /&gt;
O47jOI5TYvI+wVFVHwMeg/WXSeXKUlVdmW94juM4juOUl1KtWRDgFRH5WERmiMjPShSu4ziO4zj1&lt;br /&gt;
pBTKwiLgdKAPcCzwIfC0iOxegrAdx3Ecx6kndbp1Mh9U9S3grYjRCyKyE3bs84Bih+84juM4Tv0o&lt;br /&gt;
urKQhpeAfbNZ8iuqHcdxHCc9DfaK6gKxOzY9kRG/otpxHMdx0lOqK6rzVhZEpDXwfWouQt9RRHYD&lt;br /&gt;
PlPVD0XkMmBbVR0Q7A8D5gP/BVoBvwEOBA4tgPyO4ziO4xSZuows7Ak8hZ2doMDVwfxO4FTsHIXt&lt;br /&gt;
IvY3Dna2BVYDrwEHq+qzdZTZcRzHcZwSUpdzFp4hwy4KVR0Ye74SuDJ/0RzHcRzHaQj43RCO4ziO&lt;br /&gt;
42TElQXHcRzHcTLiyoLjOI7jOBlxZcFxHMdxnIy4suA4juM4TkbyVhZEpJuITBaRj0SkWkR65+Cm&lt;br /&gt;
u4hUisgaEXlLRPyYZ8dxHMdpJNRlZKE18AowGDtnISMi0hGYCjwJ7AZcB9wuIn4ok+M4juM0AvJW&lt;br /&gt;
FlT1MVX9k6o+Qs0pjpkYBLynqueq6puqOgZ4ELtIKiM9e57B0KEjqKqqyldMx3Ecx2lWVFVVMXTo&lt;br /&gt;
CHr2PKPgfpdizcJPgSdiZtOBrtkcLlo0ljFjutK1ax9XGBzHcRwnDVVVVXTt2ocxY7qyaNHYgvtf&lt;br /&gt;
CmWhPbA4ZrYYaCMim2R2KlRX92DevOFcdNHVma06juM4TjPlwguvYt68s6iu7kFug/750Sh2Q1RX&lt;br /&gt;
92Dy5NnlFsNxHMdxGiRTpsymuvrwovlfiiuqPwG2iZltA6xU1a8yOx0OtDVPPvkPvXv3Tnkdp+M4&lt;br /&gt;
juM0RyZOnMjEiRP55JPXgaOD6YqCh1MKZWEOcETM7LBgnoXRQGdAad/+UCZPnlxw4RzHcRynsZLs&lt;br /&gt;
QO+wwyEsWJDcdzAX6FLQcOpyzkJrEdlNRHYPRjuG5+3C+8tE5M6Ik5uDnctFZBcRGQwcB1yTs5CJ&lt;br /&gt;
x+jde798RXUcx3GcZkGvXvuSSEwvmv91WbOwJ/AyUImds3A1psb8ObxvD2yXtKyqC4CjgEOw8xmG&lt;br /&gt;
A79S1fgOiRQoicSjdOo0mpEjz66DqI7jOI7T9Bk16hw6dbqGROJRcjgCKW/ynoZQ1WfIoGSo6sAU&lt;br /&gt;
Zs9ShzGRdu0u46STdmXkyElUVFTk69xxHMdxmgUVFRXMmTOJiy66mnvueZ1lywrrfynWLNSZa6/9&lt;br /&gt;
A/36dS63GI7jOI7T4KmoqOC66y5m773n0r//pIL63Si2TjqO4ziOUz5cWXAcx3EcJyOuLDiO4ziO&lt;br /&gt;
k5E6KQsicqaIzBeRL0XkBRHZK4PdA8JV1tHfOhHZuu5iO47jOI5TKupyzsIvsO2SI4A9gFeB6SLS&lt;br /&gt;
LoMzBXbGtlW2Bzqo6pL8xXUcx3Ecp9TUZWRhOHCLqk5Q1f8BZwCrgVOzuFuqqkuSvzqE6ziO4zhO&lt;br /&gt;
GchLWRCRlth5CU8mzVRVsSuoM105LcArIvKxiMwQkZ/VRVjHcRzHcUpPviML7YAWpL5yun0aN4uA&lt;br /&gt;
04E+wLHAh8DTkeOiHcdxHMdpwBT9UCZVfQt4K2L0gojshE1nDCh2+I7jOI7j1I98lYVlwDpSXzn9&lt;br /&gt;
SR7+vATsm83S1VcP57772tYy8yuqHcdxHMdIXlEdZeHCMl9RraprRaQSOBiYDCAiEp6vz8Or3bHp&lt;br /&gt;
iYycffZoP+7ZcRzHcdKQqgN9991z6d+/sFdU12Ua4hpgfFAaXsKmEzYDxoNdUQ1sq6oDwvMwYD7w&lt;br /&gt;
X6AV8BvgQODQ+grvOI7jOE7xqcutk/eHMxUuwaYfXgEOV9WlwUqtK6qBjbFzGbbFtli+BhwcbqJ0&lt;br /&gt;
HMdxHKeBU6cFjqp6E3BTmncDY89XAlfWJRzHcRzHccqP3w3hOI7jOE5GXFlwHMdxHCcjriw4juM4&lt;br /&gt;
jpMRVxYcx3Ecx8lI0a+oDva7i0iliKwRkbdExE9uDMQP02i6NI94en42LTw/mx7NJ08LS9GvqBaR&lt;br /&gt;
jsBU7PKp3YDrgNtFxM9ZoDkV3OYRT8/PpoXnZ9Oj+eRpYSnFFdWDgPdU9VxVfVNVxwAPBn8cx3Ec&lt;br /&gt;
x2nglOKK6p+G91GmZ7DvNCC6d+/OT37yk3KL4eTIlVdeyU477cRGG21E587FPCp9CldcMbQgPiUS&lt;br /&gt;
CS655JKC+NVQ6dixI7179y63GLXo3r07Bx10UNH879ixI6eeWtOHfOaZZ0gkEjz7rJ/H1xgpxRXV&lt;br /&gt;
7dPYbyMim+QZvlNi7OoPpzEwY8YMzjvvPLp168b48eO59NJLyy1STohIgy5nc+bM4c9//jMrV66s&lt;br /&gt;
sx8NMX7FlimRSGwQRkNMByc3in5FdR1pBfDx7GnMZV65ZSkqKxYuZO7dd5dbjLRULV7Ml198US8Z&lt;br /&gt;
58+H1ixk/rS7aeLZWdb8nHjffSQSCc48+GBaiMCnnxZFlvnz7e/K998siP/P33EHLRKJBvkdrFi4&lt;br /&gt;
kPtvvJHrJ05kzy22oEO7lEuzsvL1qlUN7luvWrwYEWH+tLuL8n1OHDGCRCRfK7C8bvnhh2VNh4aW&lt;br /&gt;
D8Xg49nzk/+2KpSfYrMIOVq2aYjVQB9VnRwxHw+0VdVjUrh5BqhU1bMiZqcAo1V1yzThnAQ07dx0&lt;br /&gt;
HMdxnOLST1XvKYRHpbiieg5wRMzssGCejulAP2ABsCYfGZ282BQYDHTHppi+AN7Cdqy8FezcArQF&lt;br /&gt;
Toy4+ym2I+Yp4I+AYlNapwK9gK2BZcBjwf03EbdTgbeB+4AzgR2BG4CDsM5H7btWjYeAj4Dfhuc2&lt;br /&gt;
wO+B/UPYTwH3YEu6RwD/jLjdCzgd+GGQozKEtyC8/z5wL7bgdlYw+yFwF/A/oH/ErxuCjKeE5/2B&lt;br /&gt;
Y4P9tsAS7Lu4I8iV5NYg8/nABcCuwMog74SIvY2AXwP7YZextQgyjA1yZ+LfkTAl/H9xcDeVDdMl&lt;br /&gt;
6eYW4LbwfDp2K+zPgxzdg18zgcuAr2Nu76P2vS+/whY8XwncH8xaYuXicGxKsgq7TG408HEaOdpj&lt;br /&gt;
abxX+H8N8C/gWuCTLOkA8EvsZtvtsZ7VfCxPZkbstCe3dDkt/DSkBeH/XkGWXMv9FOAdai/s7ol9&lt;br /&gt;
P3dTU3+2whaFHwJ8C0ujh7HyGJfxPuA/IfzvAecCyQUBJ2H5+F3su346hPFFxI9bQlzOCM/5lr++&lt;br /&gt;
wNEh7NXYuMSY4AYsff8F/Dk8d8a+hd8AL6fwzykcrYCOWFtaGFQ1rx9wAlYwTsYqyVuAT4Fvh/eX&lt;br /&gt;
AXdG7HfEKojLgV2wxulr4JB8w/ZfYX9YJfUlcAUwEDgH+AfQN2LnKeC1yHPP4OYOwshUMB8PVGMN&lt;br /&gt;
7xnAuPA8KRbmfEwRWQaMwiqO/bGGZh3wo5j9vYI/J4VnAZ4PZeharGJ9DKt81gEnR9weEuzNA84G&lt;br /&gt;
LsIa9GXA9yL+fQZcEXE3DKvo1wKbR+wtB/4asfcQ1uCfhTUo9wZZL4/F4SlgIaagXIM1yo8HeQ+P&lt;br /&gt;
2Nsq2Lsy+Hc28AbWWP4kS16eBDwTvs2+4bkj1mBWR9Ml4qYa+FPkeUQwqwQeCHLeEuS8LIXb6yPP&lt;br /&gt;
I0OanRoxS2CLm9dhjd0grEF7HOiVQY4+wNwgz6+Av2B1zHtAqxzK9QeYYjco5OWcIMMRETs5pQvw&lt;br /&gt;
Y+w7WYcpqyeF36Z1KPeTI8+nBT//HLP3ZEjHm4P8/wj+XZ1Cxv9iCstFIeyfhHe3AV9hjfxvgEux&lt;br /&gt;
OvgFoEWsXM6sS/mLxHNKSJfh2PcwOBbnOyLPB4Q471/uus9/+f/q5sga/AVYozEH2DNWiGbG7O+P&lt;br /&gt;
VUBfYr3KX5Y74v5TgM+JVPhp7KxXFrBe9FfA2Jidn4SK4+aY+RWhcjggYjY/mB0Ss9sGa+gujZlf&lt;br /&gt;
h/XCN43IUA0MidlLNkpRZeFlYBE2RZY0+3GojMdFzKYAcyLPD2KN5dfAYcFsjxBuz4i9TVKk19hQ&lt;br /&gt;
MbeMpeE6gsITzFpivcb7I2YCbJQiXRYBt+WQn+OAlTGzuigLt8bsTQKWpHB7ffj/Kkyx6h+zMzDY&lt;br /&gt;
G5pF7rgcqdJ172CvXw7psEnsuQU2mvF4HdPl7JB/36tnuZ8c/h8a3l8Qc3d08O/8mPn9oczuEJNx&lt;br /&gt;
LbBLzO5+4d0vYuaHBvMTY+UyqizkVP6wUZtq4Jos+eDKQhP61ekER1W9SVU7quqmqtpVVf8deTdQ&lt;br /&gt;
VQ+K2X9WVbsE+zur6t/rEq5TcJYD+4hIh2wWReRErPc0VlUHxV4fiQ1njo6ZX41VQEfFzOeraq3t&lt;br /&gt;
tKq6EniEyDSEiCSwkayHVfXLYHw41ojfHvNzDDXDxIhIe+wQsHGquiISzn+wnu2REbezgM4isml4&lt;br /&gt;
3g+Yhh041i2YdcMqyOcifn0VCW9zEdkqvN8MG3WL8oVG5g5VdS3wEjYNkzRTVf0m+CcisiWwMTbk&lt;br /&gt;
XMx9kFEUG02IMgvYSkQ2j5mLiNyI9Sz7qWp8qPxYYClwY14C1E7XjUTkW9iownJySIeY+y2ALUMc&lt;br /&gt;
Cp2G+ZZ7ROT32IjY71X1stjrIzCl4IYU/iXYcDr3aVV9M2Z2HJZOT4rIVskfpjh/gTX0Kcmj/PXB&lt;br /&gt;
voWmvd/VqYXfDdG8ORebP/9QRF4UkREiskMKeztiw8gPqurvUrxP9tLeiRqq6mKs4to+Zn9+Gnkm&lt;br /&gt;
AN8Tkf3C86HYPHBUudweWKSq8bUs78Sek2G+xYbMA9pFlINZWE+/q4j8APh2MHuWGmVhP+ANVV2e&lt;br /&gt;
9EREfiQiD4vIcmz0Y2lE1raxMBemkONzrCFbj4gMEJFXsaHfT7Fpk6NS+FdMPog9fx7+xhckD8CG&lt;br /&gt;
yn+rqvezITsBb6pqdT6Bi0grEblERD7ARrKWYenQlhzSQUR6isgcEfkSm2JaEuQsdBrmW+67Y9Ox&lt;br /&gt;
f1XVa9L497GqroqZz4u8j7IghR87A1tgcV4a+S0BWmPfU1pyLH87BjmXp/DCaaK4stCMUdUHsA9/&lt;br /&gt;
CLaA8BzgvyJyeMzqx8Bs4EgR6ZLJyxyD/jKN+XSsckouKuyPzck+mcZ+ofg3VjnujykHS1T1HUxh&lt;br /&gt;
2FtENg7myQWQiEhbTJn4MTZn3BNbI3FesBL/ttalCTs6GtIfm0p4m5pFgYdgC/Pq+q2mzJMwapOO&lt;br /&gt;
rLIGnsPOTBkSeqGF4kZsIei9wPGY0ngI1vBnTAcR6YaNUK3GFIQjgtt7YvLXJV3SkWu5fx1b/PfL&lt;br /&gt;
cAx+fUn1HSWwPDkYi3f0dyjwp3SeFan8OU2EshSA5nQRVT5xFZEDRKQ69lsnIhl7A/VBVRer6s2q&lt;br /&gt;
eleXvigAABhkSURBVCywA9abuDBmbQ3WGL4DPCYinSIyd8PmIjcCvhGR3pF3W2O9nPdj/m2VKj9D&lt;br /&gt;
D/Qe4LgwfHw0cI+qRivj94EOIhLfP7xz7DkZ5i4pov1DYFlyaiMyJZBUFpJKwSxgE2xnzjbAEhGZ&lt;br /&gt;
LCIfUTMqMEBVb1TVaao6E+tRJuN/gIhUYz3KH+eQn32Ad1X1OFW9W1UfD37WZ690clRgi5h5vJe6&lt;br /&gt;
XmzgcRFZKSKLReRhLO6peAfb2fQdYLaIvBzL03eBXUSkRZ4y9wHGqx0R/5CqPokpq/E4pOJYrBE9&lt;br /&gt;
XFXHq+r0kIZxRWdgMLs1Gc8wqpQqXZLlb5/ot4ktAN0I2CdqOUO5X4Y1vt9g0wTxg+zeB7YVkdYx&lt;br /&gt;
806R99l4F1uo+HyI9w+waZKHw+8WEemRxm2f4P5GbNHuFGyh5fdShLFt+EYbDCJyhoi8KiIrwu/5&lt;br /&gt;
DHEtS31baETk/CB3qpGqqL16t6ElVxakGV1ElW9cA4o1fO3Dr4OqLimCbAkRaVMrYNVl2CjCBidr&lt;br /&gt;
qmoV1tNYAjwRma5ojfWwU/Wuzg7m0a1pyco1XX7+HdsydkvwO37exnRsHvU3kbgItg1zvQyq+gnw&lt;br /&gt;
CjAgGk8R2RVr4OLb5WYFubqH/1HVT7Ge4HnB77eDn4Op2Uq3/hsKIxCDY/4qtgr9DbLn5wY9ehHZ&lt;br /&gt;
h3ocjR7ybRmmCEWplV7RILHV9PtgDVtLbJtqOv9fx3YsdMLybU9CnmJp921s5Cof1rFh3TQUW6iY&lt;br /&gt;
i1slsi081CFHx+ztg00dPUNNPGdguyfi6ZKcFtic2t/nQeH55Jj9VOUeAFX9OIS3KaaURUdkpgW5&lt;br /&gt;
4+k1HJvueHSD2G7I/cGP5AjCh1j57YztLJoNPBJV+COsC26j9e0jWHw3jdibhOXPiBzkKSXRuHbB&lt;br /&gt;
RkTSxTVJSerbYhA6nqdh7Uomex0pRBta6hWVWMV5XeRZsPncc9PYv5zI1r1gNhGYVmrZSxDX5Grh&lt;br /&gt;
NiWQrS22an8c8Dtsf/V9IfxhEXtPUXvr5LbYYrP3gG0j5uOwD+9ZbPh3PFbBPRgLdzmwIlN+YivX&lt;br /&gt;
q4HXU8idCOn6NbZvfDC2dbIyyP7LiN2DsTnvN7AK/I/YEO1SYPuYv4eFMNcBu0fMxwbzd2P2q7HG&lt;br /&gt;
Zj5WmQ8PMswNfuwfyc9n42U4kmbvRZ5PCf7+A1OGLsOG3l+L2suQpxvshgjmlwZ/b8N6w3djIymp&lt;br /&gt;
dkOsA74VMWsXSZfvxeKf3A1xOdbb/BKrlDZK5ilWYa/DRowGYYrHY2TeOjk+5O/okA53YL3qJURW&lt;br /&gt;
16dJg+RK/WdCXP+ETWW9DKzLkC5nYeX3jRTy7BnMng9/T6Fmd864EL97yVzu1++GCM+7Ykrcv4CK&lt;br /&gt;
SP2QauvkOuCqFOUv5U4mrMyuw5SVYdg3ci1W9xyLjR4OZMPdEKeENFhB7fK3HFgdC+POSBi/DeE8&lt;br /&gt;
SPatk9WUcDdEMq5p3pWsvi1CvDYH3sQU1qfIsDOFArWhpY5gS2y7T++Y+XhsxXsqN8/EEyIU6s/L&lt;br /&gt;
nWFFiGvyY3oP6+HPAH5WRPn+ijVuyQV6c4HTYvaeAl6Nme0YKp7XCQ0L1ohXB7nXYIuv/kJkC2Gw&lt;br /&gt;
9yXwTqb8xNZOVJNeqfoWNgKxPFRm44B9g5vjY3YPxBrrL7Ah+YeJbTcL9jYP+fU5tc+POClUKONi&lt;br /&gt;
9quDnLOD3x9ijc8h1FYWqkOc18bzM8gdV0LOC/m/GltLcUQqe2nSZRwxRSyYt8IOw0lW/PdgQ9Xr&lt;br /&gt;
gD9G7KVSFr5PamVhHUERJnyj2MFEXwX/TwlpuQm2av6dUC4+whrWjrG0jDbObbCRicVYw/VPrPf3&lt;br /&gt;
HvC3HNLhFGxUYzV2FsHJybhlSJeVQY6u8XQJdv8Q5NHwWxzyc19szUoyfgtIXe7fAx6Jme0V8uMp&lt;br /&gt;
wnZPbCfNVaE8rQnxGJ4ijuvTP00a/ApTCL8IYbyClc/TQ3n8YQj3yRRyLo+Vv1kp0k4wBeu/wb9P&lt;br /&gt;
MEUxqminUhZKsnUSq49OTMY1jZ2S1bdFiN+dBAWS7MpCQdrQUkewQ8icfWLmlxPZ5x579yZwXszs&lt;br /&gt;
iFDoNtiP3VB+dYzrDzCNfg/slMS/YT2s3Ystb4HiXE1MOapLflJzKNJ38wj758GPrg0oro09PyU0&lt;br /&gt;
AM/UN08zuE0qmX9oBPFslPmJjWJUYQrrZ0CPYuRlCr8+IHZmRwOLa2PNzxOxqYeW4TmbslCQPC36&lt;br /&gt;
RVIiMoLac1uC9SxSbdFr1qjqW9Te6veCiOyEDXEPKI9UZeFUbA95qu2GiEgrjWydDCvYf0vN6EiD&lt;br /&gt;
oAnk503Aj7Dec7HYNvxdVsQwspFTPBtxfv4Pm6tui53DMEFE9lfV/2V2VndEZCNs9KrU+ZpzXBtj&lt;br /&gt;
forId7EppUPUFmaXjFLdOvk6Nn/cEpt7jK+234b0Z75/woarsbfB5ma/SmG/obAM09xSyZ7L+fZJ&lt;br /&gt;
XqK4lXWpSZufwLEiciDWO+gddxjhBrEzEuZgw9x9sJ7BBQ28TEAjyU+xw5aOBLqp/n97dxwjV3Xd&lt;br /&gt;
cfx7NrUwuIsj1YAtQbETmrIJEa43MWzBQKkBi+Kl1BFlYje0UZS61DIs0ARiKtMKQ6JibCdZo0go&lt;br /&gt;
AWR3RCUUYVPAQDdphTGg7gJpxbqQYhMMNqEhNVMHE8Oe/nFn493NzNud2ffuzJv9faSRvLPvzb1H&lt;br /&gt;
Z8dz5r777vX94xxe13vUzD5HuEQwRPh2FF2NcVbS9Pn0sNDSq+UfnzezhYTRu7GLq0EK/9+a2cWE&lt;br /&gt;
xdWmk/1tz6PUGGslzZ7PTsKk4YHyxG4IE3/PM7NVhJECH3NOKp+hsYqFD9z9bQALG1GdRbiumdVG&lt;br /&gt;
VA3n9W26Vcl8wnKrraJaPp8nTLz7ObDO3X9tJvkIfYTrpX9E+A/px4Tln+9Ov7upa/p8lj9ALycs&lt;br /&gt;
Vzx2gaZK6n2PfoNQKHzR3V+puaOTVEeclTR9Pitoo8IdT2Vp/H97E2FBrq95uO21kZJiraTZ8/kk&lt;br /&gt;
YW2Xke4lLNz19QqFAqT1GRrh+spawjWkNwgzpv+NMOmk5TeiovZNt64lfKP+OPApwnDTEeCCRseS&lt;br /&gt;
EOMMwrDffMJ//NeVfz6lBfNZa6x5zOdmQsG2iPDtY/gxfcQxt+c9p3XGmcd83l6O8VTCiN0dhPlA&lt;br /&gt;
F1b5m81dLicRa+7yWSXuUXMWsnp/xgjkEsIw8RmEFcR2EoboX2MKbERFDZtuEW4re4VwX/fbhCG8&lt;br /&gt;
pt50haMzij8c8/huq+Wz1lhzms9K8Y3doCv3Oa0nzpzm8x7CsPzwHQuPU/7wbJVc1htrHvNZJe4+&lt;br /&gt;
RhcLmeTUyi8UjYVlcl8j3A70vSrH/BahyNhLuH1IREREJmY6YURhh4fF5SYt1pyFX3H3g2b2MuH+&lt;br /&gt;
7Wou4ddX7hMREZGJW055fuBkRS8WLGxzexphh8Fq9gJs2bKFjo6klTrzr6enhw0bxu5w23oUZ2u5&lt;br /&gt;
7rrr2LhxY6O7kbmpks+pEidMjVgHBwdZsWIFVN6ZtC4x1ln4B8KGJK8RNpz5O8IkkmLCaYcBOjo6&lt;br /&gt;
WLAg7S3om8vMmTNbPkZQnK2gVCqxZs2dbN++kwMHXmbZsq+wdOk5rFt3I+3t7Y3uXiZaOZ8jTZU4&lt;br /&gt;
YWrFSoqX8WNsJHUyYRhkN2ExpreBs9O6jiIi2SuVSnR1LaO3t4u9e5/g8OGF7N37BL29XXR1LaNU&lt;br /&gt;
KjW6iyKSocyLBXcvuPvJ7n6su/+2u3/e3fdk3a6IpGfNmjsZHLyeoaElHN3t2RgaWsLgYA+33LK+&lt;br /&gt;
kd0TkYxF36JaRPJn+/adDA1dUvF3Q0NL2LZtZ+QeiUhMKhYarFAoNLoLUSjO/HJ3jhyZwdERBQir&lt;br /&gt;
+Q4zjhw5jti3YcfQivmsZKrECVMr1jRFX2dhIsxsAdDf398/lSaiiDStefMWs3fvE4wuGIY5c+de&lt;br /&gt;
xJ49T8bulohUMDAwQGdnJ0Cnu6eyuZ5GFkRkXEuXnkNb246Kv2tre4zu7nMj90hEYlKxICLjWrfu&lt;br /&gt;
Rjo67qKt7VFgeDTSaWt7lI6ODdx22w2N7J6IZEzFgoiMq729nV27HmTVqmeZM+caAObMuYZVq55l&lt;br /&gt;
164HW3adBREJoq/gKCL51N7ezqZNt3L11dDZCQ8/fDeaUiQyNWhkQURERBJFLxbM7CYzGzKzu2K3&lt;br /&gt;
LSIiIrWLWiyY2WeBLwMvxmxXGq8Zb9EVkUDvTxlPtGKhvNvkFuBLwP/Galcap1QqsXr1WubNW8wp&lt;br /&gt;
p/wx8+YtZvXqtdpHQKQJ6P0ptYg5wbEX2O7ufWb2txHblQYY3ngo7CdwK2ExH6e3dwd9fcs0g16k&lt;br /&gt;
gfT+lFpFGVkws6uA+cDNMdqTxtPGQyLNS+9PqVXmxYKZnQxsBJa7+5Gs25PmoI2HRJqX3p9SqxiX&lt;br /&gt;
ITqBE4ABMxsuYT8CnGdmq4BjvMrsmp6eHmbOnDnquUKhoI1AmlzljYdGOrrx0NE/CRGJQe/P1lIs&lt;br /&gt;
FikWi6OeO3jwYOrtxCgWngQ+Pea5e4FB4OvVCgWADRs2aCOpHDIzpk07RFgWuPLGQ9OmHdJ/RCIN&lt;br /&gt;
oPdna6n0BXrERlKpyfwyhLsfcveXRj6AQ8DP3H0w6/alMbTxkEjz0vtTatWoFRx1U2+L08ZDIs1L&lt;br /&gt;
70+pVUOKBXe/0N2vb0TbEoc2HhJpXnp/Sq2sGVfuMrMFQH9/f7/mLLSAgYGw8VB/P9p4qAUon61F&lt;br /&gt;
+Ww9I+YsdLr7QBqvqY2kREREJJGKBREREUmkYkFEREQSqVgQERGRRCoWREREJJGKBREREUkUYyOp&lt;br /&gt;
lWb2opkdLD+eNrMlWbcrIiIi6YgxsvA68FVgAWFTqT7gITPriNC2iIiITFKMvSH+2d0fc/f/dvcf&lt;br /&gt;
u/stwP8BZ4937mWXrWT16rWUSqWsuykiIpJrpVKJ1avXctllK1N/7ahzFsyszcyuAo4Ddo13/P79&lt;br /&gt;
d9Pb20VX1zIVDCIiIlWUSiW6upbR29vF/v13p/76UYoFMzvDzErA+8Bm4Ap33z2BMxkaWsLgYA+3&lt;br /&gt;
3LI+416KiIjk05o1dzI4eD1DQ0uovPX45MQaWdgNnAksBO4G7jez0yd68tDQErZt25lV30RERHJt&lt;br /&gt;
+/adDA1dktnr/0ZmrzyCu38AvFr+8XkzWwhcC/xV8pk9wEwADhz4D7q7uykUChQKhew6KyIikhPF&lt;br /&gt;
YpFisciBA/8JXF5+9mDq7UQpFipoA44Z/7ANhJsonNmzL2Lbtm0Zd0tERCQ/hr9Az5u3mL17HyJc&lt;br /&gt;
ghgg3HyYnhjrLNxuZovM7NTy3IU7gPOBLRN9jba2x+juPje7ToqIiOTY0qXn0Na2I7PXjzGycCJw&lt;br /&gt;
HzCHMDbyI+Bid+8b/1Snre1ROjo2cNttD2baSRERkbxat+5G+vqWMTjoDA2dmPrrx1hn4Uvu/jF3&lt;br /&gt;
P9bdZ7v7BAsFmDXrDlatepZdux6kvb09666KiIjkUnt7O7t2PciqVc8ya9Ydqb9+o+YsTMjGjV9j&lt;br /&gt;
+fIFje6GiIhI02tvb2fTpltZuHCAFSvSHY3XRlIiIiKSSMWCiIiIJFKxICIiIolULIiIiEgiFQsi&lt;br /&gt;
IiKSSMWCiIiIJIqxguPNZvacmb1rZm+Z2ffN7BNZtysiIiLpiDGysAj4FnAWsBiYBjxuZsdGaFtE&lt;br /&gt;
REQmKfNFmdz90pE/m9mfAz8l7HLxVNbti4iIyOQ0Ys7CRwEH3mlA2yIiIlKjqMWCmRmwEXjK3V+K&lt;br /&gt;
2baIiIjUJ/beEJuBTwLnRG5XRERE6hStWDCzbwOXAovcff9Ezlm/vocHHpg56rlCoUChUMighyIi&lt;br /&gt;
IvlSLBYpFoujntu372Dq7UQpFsqFwuXA+e7+k4med8MNG7TrpIiISBWVvkBv3TrAihWdqbaTebFg&lt;br /&gt;
ZpuBAtANHDKzk8q/Oujuh7NuX0RERCYnxgTHlcDxwA+BN0c8rozQtoiIiExSjHUWtKS0iIhIjumD&lt;br /&gt;
XERERBKpWBAREZFEKhZEREQkkYoFERERSaRiQURERBKpWBAREZFEKhZEREQkUZRiwcwWmdk2M3vD&lt;br /&gt;
zIbMrDtGuyIiIjJ5sUYWZgAvANcAHqlNERERSUGUjaTc/THgMQAzsxhtioiISDo0Z0FEREQSqVgQ&lt;br /&gt;
ERGRRCoWREREJFGUOQv1Wr++hwcemDnquUKhQKFQaFCPREREmkexWKRYLI56bt++g6m309TFwg03&lt;br /&gt;
bGD58gWN7oaIiEhTqvQFeuvWAVas6Ey1nSjFgpnNAE4Dhu+E+JiZnQm84+6vx+iDiIiI1CfWyMJn&lt;br /&gt;
gB8Q1lhwYH35+fuAL0bqg4iIiNQh1joL/4omU4qIiOSSPsBFREQkkYoFERERSaRiQURERBKpWBAR&lt;br /&gt;
EZFEKhZEREQkkYoFERERSaRiQURERBJFKxbM7K/NbI+ZvWdmz5jZZ2O13czGrunduqZGnMpna1E+&lt;br /&gt;
W8/UyWm6ohQLZvanhFUb1wK/B7wI7DCzWTHab2ZT5w93asSpfLYW5bP1TJ2cpivWyEIP8B13v9/d&lt;br /&gt;
dwMrgV+gpZ5FRESaXubFgplNAzqBfxl+zt0deBLoyrp9ERERmZwYIwuzgI8Ab415/i1gdoT2RURE&lt;br /&gt;
ZBJi7TpZq+kAb+58hAEGG92XTB3ct4+BrVsb3Y1M7dkDM9jHnke20uLpVD5bjPLZeqZCTt/cuWf4&lt;br /&gt;
n9PTek0LVwSyU74M8QtgmbtvG/H8vcBMd7+iwjmfB1o7myIiItla7u7/mMYLZT6y4O5HzKwf+ENg&lt;br /&gt;
G4CZWfnnb1Y5bQewHNgLHM66jyIiIi1kOjCX8FmaisxHFgDM7ErgXsJdEM8R7o74HHC6u7+deQdE&lt;br /&gt;
RESkblHmLLj7P5XXVPh74CTgBeASFQoiIiLNL8rIgoiIiOSX9oYQERGRRCoWREREJFFDioVaN5Uy&lt;br /&gt;
swvMrN/MDpvZy2Z2day+TlYtsZrZ+WY2NObxoZmdGLPPtTCzRWa2zczeKPe3ewLn5DKftcaa03ze&lt;br /&gt;
bGbPmdm7ZvaWmX3fzD4xgfNyldN64sxpPlea2YtmdrD8eNrMloxzTq5yOazWWPOYz7HM7KZyv+8a&lt;br /&gt;
57hJ5zR6sVDrplJmNhd4mLBc9JnAJuAeM7soRn8no84NtBz4HcLqlrOBOe7+06z7OgkzCBNWryH0&lt;br /&gt;
PVGe80mNsZblLZ+LgG8BZwGLgWnA42Z2bLUTcprTmuMsy1s+Xwe+CiwgLLvfBzxkZh2VDs5pLofV&lt;br /&gt;
FGtZ3vL5K+Uvnl8mfK4kHTeXNHLq7lEfwDPAphE/G7AP+EqV478B/GjMc0Xgkdh9jxDr+cCHwPGN&lt;br /&gt;
7nud8Q4B3eMck9t81hFrrvNZjmFWOdZzWzmnE4wz9/ksx/Ez4C9aNZc1xJrbfAK/CfwXcCHwA+Cu&lt;br /&gt;
hGNTyWnUkYU6N5U6u/z7kXYkHN8U6owVQkHxgpm9aWaPm9nvZ9vT6HKZz0nIez4/Svj29U7CMa2Q&lt;br /&gt;
04nECTnOp5m1mdlVwHHAriqHtUIuJxor5DefvcB2d++bwLGp5DT2ZYh6NpWaXeX4483smHS7l6p6&lt;br /&gt;
Yt0P/CWwDPgTwrDaD81sfladbIC85rMeuc6nmRmwEXjK3V9KODTXOa0hzlzm08zOMLMS8D6wGbjC&lt;br /&gt;
3XdXOTzvuawl1rzm8ypgPnDzBE9JJafNupHUlOTuLwMvj3jqGTP7OGHFy1xMMpKjWiCfm4FPAuc0&lt;br /&gt;
uiMZm1CcOc7nbsK16pmElXPvN7PzEj5E82zCseYxn2Z2MqGwXezuR2K2HXtk4X8I14hOGvP8ScCB&lt;br /&gt;
KuccqHL8u+7+frrdS1U9sVbyHHBaWp1qAnnNZ1pykU8z+zZwKXCBu+8f5/Dc5rTGOCtp+ny6+wfu&lt;br /&gt;
/qq7P+/uawgT4q6tcnhucwk1x1pJs+ezEzgBGDCzI2Z2hDD34loz+2V5lGysVHIatVgoV0LDm0oB&lt;br /&gt;
ozaVerrKabtGHl92McnXoRquzlgrmU8YLmsVucxnipo+n+UP0MuBP3D3n0zglFzmtI44K2n6fFbQ&lt;br /&gt;
BlQbfs5lLhMkxVpJs+fzSeDThH6eWX78O7AFOLM8L26sdHLagFmcVxK2rP4CcDrwHcKM1RPKv78D&lt;br /&gt;
uG/E8XOBEmFG5+8Sblv7JWEYpuGzUlOO9VqgG/g48CnCcNMRwreehsdTJcYZ5T/Y+YTZ5NeVfz6l&lt;br /&gt;
BfNZa6x5zOdm4OeEWwtPGvGYPuKY2/Oe0zrjzGM+by/HeCpwRvlv9APgwip/s7nL5SRizV0+q8Q9&lt;br /&gt;
6m6IrN6fjQruGsL20+8RqpvPjPjd94C+McefR/iW/h7wCvBnjU5QFrECf1OO7xDwNuFOivMaHcM4&lt;br /&gt;
8Z1P+OD8cMzju62Wz1pjzWk+K8X3IfCFEcfkPqf1xJnTfN4DvFrOywHgccofnq2Sy3pjzWM+q8Td&lt;br /&gt;
x+hiIZOcaiMpERERSaS9IURERCSRigURERFJpGJBREREEqlYEBERkUQqFkRERCSRigURERFJpGJB&lt;br /&gt;
REREEqlYEBERkUQqFkRERCSRigURERFJpGJBREREEqlYEBERkUT/D4nTcxsTHOPjAAAAAElFTkSu&lt;br /&gt;
QmCC&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Zadanie:-estymacja-parametr&amp;amp;#243;w-procesu-AR&amp;quot;&amp;gt;Zadanie: estymacja parametr&amp;amp;#243;w procesu AR&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Zadanie:-estymacja-parametr&amp;amp;#243;w-procesu-AR&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wygeneruj 2000 próbek sygnału z modelu AR o parametrach $a = [0.9, -0.6]$, $\sigma^2=4$&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Oblicz funkcję autokorelacji tego sygnału wraz zkorektą na liczbę sumowanych wyrazów&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznie a następnie zaimplementuje je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wypisz parametry prawdziwe i estymowane.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[9]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#wspolczynniki modelu AR &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;([&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.6&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;])&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#generujemy realizacje procesu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;random&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;randn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;xlabel&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;numer próbki&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;wygenerowany sygnal&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;correlate&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;mode&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;full&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# ak nieobciążona:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;hstack&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;),&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;hstack&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;),&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;m&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;xlabel&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;przesunięcie m&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;funkcja autokorelacij sygnalu x&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s_2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;r2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;prawdziwe wspolczynniki&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;],&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;estymowane wspolczynniki&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s_2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.5&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_subarea output_stream output_stdout output_text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;prawdziwe wspolczynniki&lt;br /&gt;
0.9 -0.6 2&lt;br /&gt;
estymowane wspolczynniki&lt;br /&gt;
1.02962731347 -0.663102076999 1.81310097806&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhUAAAGHCAYAAAAHoqCrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXmYHFW5/7/vTPZtJttM9pVMEpKQkLALhIDsGhcUCJvi&lt;br /&gt;
5SKoF40XAUFF9KqIaFzh51UWARlZFAhruJKgbAHCBMi+b5OEZGYy2ffM+f3x9kvV1JyqOlXd1dUz&lt;br /&gt;
cz7PM09Pd1dXn67lnO95t0NKKVgsFovFYrFkS1HaDbBYLBaLxdIysKLCYrFYLBZLTrCiwmKxWCwW&lt;br /&gt;
S06wosJisVgsFktOsKLCYrFYLBZLTrCiwmKxWCwWS06wosJisVgsFktOsKLCYrFYLBZLTrCiwmKx&lt;br /&gt;
WCwWS06wosJisViaIUQ0mYgaiOj0tNtisQhWVFgsFkvzxa6zYCkorKiwWCwWi8WSE6yosFhaMUTU&lt;br /&gt;
Ke02WCyWloMVFZYWDxGNy/ieP+V6bWLmtXmebV8korcy//+FiGqIqFizz5eJaInreQci+m1m+51E&lt;br /&gt;
9DQR9ct8xw88n+1HRPcT0UdEtJ+IFhLR1Z5txF/+RSK6jYg2ENE+IvonEQ3XtOdEInqJiLYT0R4i&lt;br /&gt;
epWITvFs88PMPkcT0aNEtA3Aa673zySi14hoNxHVZ37DqGyPY+b5VCJ6jog2Zn7zSiL6HhEVeT73&lt;br /&gt;
KhF9mGnjnMxvqSai77i26Zxp4wzNcehPRIeJ6Gbve57tLiWieZlztSPznTdk3hua+U3f1HzulMx7&lt;br /&gt;
l7heOyOzr31EtIKIrpVj7flsQ+Ya+QwRLXCd+3M92w0ionuIaCkR7SWiWiJ6nIgGB/0mi6UQsKLC&lt;br /&gt;
0hpYCGA7AHdA22kAGgCMJ6IuAEBEBOBkAP/KbPMQgB4AvJ1+OYApAB52vfwXAF8H8ByAmwDsA/A8&lt;br /&gt;
PD5vIioD8DaAMwH8FsANAFYAuE8GNQ+3APgMgF8A+CmAkwA84tnnmZk2dwHwQwDfBVACYDYRHefa&lt;br /&gt;
VNryBIAOme3+lNnHJwG8BKAXgNsB/BLAKQBeJ6JBmc/FPY4A8GUAuzL7vQHAPAA/AvAzz+9V4GP+&lt;br /&gt;
IoD5AL4NYAmAO2XwVUrtAfAUgEsy3+XmsszjI/CBiM4G8CiAOvC5uhnAnMzvhVJqDYA3AFyu+fjl&lt;br /&gt;
AHYCeCazr2Mzbe0O4PsA7ss8fgb6eIfTAPwBQCWA7wBoD+BJIuru2uZ48HmuBPBfAO4FcBaAOUTU&lt;br /&gt;
we93WSwFgVLK/tm/Fv8H4FkAb7mePwkeXA8COCfz2rHgAfJTmecEYD2ARz37mg7gMIDBns/d7dnu&lt;br /&gt;
fgBHAPzA9dqfAVQDKPVs+yiAbQDaZ55PzuxzIYBi13b/ldnn0a7XlgF43rO/9gBWAXjJ9drtmX0+&lt;br /&gt;
rDk+8wFsBlDiem1c5nc+kM1xlPZovvNesNBo63ptTub3XeZ6rS2ATQAed712dma7czz7fB/A7JBr&lt;br /&gt;
YQaA+pBt/jOz/wrXa20AbAVwn+u1mZnfUO56bVjmeBzx7LMBLDaHeI5xA4CvhRyrEzLbXe56bXKm&lt;br /&gt;
jaenfX/ZP/snf9ZSYWktvAZgIhF1zDw/FcALAD4Azx4BZ9b9OgAopRSAvwKYSkSdXfu6DMCbSql1&lt;br /&gt;
mefngWel93q+83dgYeLm8+CBuZiIesofgJfB1oWJnu3vV0od8fwOAg9cIKIJAEYAqPTsryuAV9DY&lt;br /&gt;
qoBMO//ofoGI+gAYDxYPOz7eUKkFAP4PwAWe7490HDP7OuD6vi6ZNr4OoBOAj10sGXYrpR51ffYQ&lt;br /&gt;
gHfkN2f4J1gEfWxNIKKxAI5BYwuSju0AOnvdDh4eB3AAja0V5wHoiYwVJOO6OQvA00qpLa72rgZb&lt;br /&gt;
L3T8n1JqrWvbBWDLxzDXa+5j1YaIegBYnWm39/qwWAoKKyosrYXXwDPek4moAkDvzGv/hjMYngpg&lt;br /&gt;
sVJqu+tzD4EHvs8BABGNBDAp87owGDyIrvF850r3EyLqDaAUwLUAajx/92c2K/PsY4PneX3mUczl&lt;br /&gt;
I1ztdO9vK4BrALQjohLPPrztFF/9cjRlCYBeLhER6zgS0dFE9BQRbQcPojVwBn9v+6o17ah3/Wa3&lt;br /&gt;
4PusyyVwOdgS8KTm827uyfzWF4hjVe7zCoyMuHoWjjtF9r9RKTUn87wMQEd4znMG3WtA0/MJeH4b&lt;br /&gt;
cXzOj4hoPVjY1ILPZwmaHiuLpaBok3YDLJY8MQ/AfvDMfQOArUqplUT0GoDriagdeFD8h/tDSqkl&lt;br /&gt;
RPQegCvAM9QrwB39EzHaICL+EXAMho4PPc+PaLdyLCCyz/8GWwt07PY83+fXQAMiH8eMqPk3eKb9&lt;br /&gt;
PfCsez9YnN2JppObsN8sPASOS/gsgL8BmAbgWaXUrqAfoJSqyVh4zgVwfubvaiL6i1LKHTD7EIAv&lt;br /&gt;
ENFJYDfUpwH8PmjfBpj8tt8D+BLYTTMXwA6whekx2ImgpcCxosLSKlBKHSKid8CD4Xo4WQ+vgeMP&lt;br /&gt;
LgdQDh78vDwE4JcZN8E0cPzCDtf768Cd/VBwHIMwAo2pAfvfi5VSs7P7RR8j37cri32KG2ek5r1R&lt;br /&gt;
AGqVUvuA2MfxDPBM/DNKqTfkRdJksURBKbWIiOYDuJyINgIYBA6WNfnsYXAg7fOZttwL4Foi+nHG&lt;br /&gt;
fQFw4Gpt5je9A7ZKuANAt4LF0VGar/Ce+yhcBOBBpdRN8gIRtQdbuSyWgsaqXktr4jUAJ4IHudcA&lt;br /&gt;
QClVB2ApOANAwZVi6aIy8/gbsHDw+uxngWeaX/O8/l9wZQAopRoA/B3ARUQ0xvslRNQr0q9h3gML&lt;br /&gt;
ixs9cR/G+1RKfQQOcPwSEXVzfXYsgHOQGXhdRD2OR8DH5+P+JmPR8B6vODwMtjh8CywAXgr7QCZG&lt;br /&gt;
wcuCzGN7eSETy1IJ4BJw9soCpdRC1/sN4NiOz2YEp+z/KHD8RVyOoGnffAOAJqnNFkuhYS0VltbE&lt;br /&gt;
awBuAzAQjQe9fwP4KoA1SqlN3g8ppWqJ6CUAXwT7v1/wvF9FRH8H8K3MID4XHJkvs1V3auEt4MH4&lt;br /&gt;
bSL6E4DF4BTKSeA000jCQimliOiaTJsWEdEDADYC6A9Oe90BTm8M4zuZfcwlovvAcSTfyPzeOzzb&lt;br /&gt;
Rj2Ob2b28xAR/Tbz2hXITYnpRwHcBXaB3OMJavXjzxlhMRscvzEE/FvnK6WWeLZ9CDygnwFOP/Xy&lt;br /&gt;
Q7DwejNj7WgDtpYsBAe/xuE5AFcS0U7w9XEyOCC0VrOt1yVksaSKtVRYWhNvgmeBO9E4/uA18ACn&lt;br /&gt;
c30IEpj5WCYbwcuV4PoDFwD4OXjGeym4098vGymltoLTA+8HB3/+DjxolaLpoOU36DZ6XSn1L/DA&lt;br /&gt;
8y54QPst2Ce/GeyXD0Up9Qp4dl0LFhHfBh+vU11ZLkKk46iU2gbgQnBa6I8z+54F/SDd5PcFvZ45&lt;br /&gt;
ni9nnvrWpvDwMDiu5HrwObsSbJG4wLuhUqoKwCJwIO6jPu+fB04H/hGAr4CFxitwnXdX+3W/zfv6&lt;br /&gt;
DeDr7TIAd4PdSZ8Ex8Z4P2/X/rAUFMRB1BaLJQgimgouuHSaUupNw89MAFAFri1QGba9JR5E9A8A&lt;br /&gt;
Y5VSFQntvwpAnVLq7AifeQpcS0QXp2KxtFhStVQQURER/ZiIVmfK0a4kou+l2SaLxYdrAaz2ExQ+&lt;br /&gt;
lQ6/BZ7RB1lALFlARH3BVpCHwraNuf/jAEyAf7ZOk3NPRCPAVo85+k9YLC2XtGMqbgH7YK8C+w6P&lt;br /&gt;
A/AgEW1XSmWbumWxZA0RXQouqHQ+2Cztx01ENAk8kBwGDyrnAvijUmpj4g1tZRDREHA9jGvA1Sv/&lt;br /&gt;
N8f7HwPuj74NjlF5PGDz1UT0IDhVdgiA68Cuj1/ksk0WS3MgbVFxMoBnlFISsb2eiC4D+5wtlkLg&lt;br /&gt;
UXAa6J/RtGKmmzfBfu/vgdfgWA8ui/3TpBvYSpkM4AEAawFclYmtyCVfAK/hsRTANKXUwYBtXwTH&lt;br /&gt;
z/QB1zB5E8CtSqlVAZ+xWFokqcZUENF3wTX2z1VKrSCi8eCUsOlKqb+l1jCLxWKxWCyRSdtScSeA&lt;br /&gt;
bgCWEpHkZt9mBYXFYrFYLM2PtEXFJeC0qUvBMRUTAPyGiDYppbSLAmUWIjoXbPb0pmxZLBaLxWLx&lt;br /&gt;
pwM49mdWpmhdTknb/bEewM+UUve6XrsNnIJ3tM9nLgMvJGSxWCwWiyUel7tXA84VaVsqOqHpAjsN&lt;br /&gt;
CE51XQsAjzzyCEaPHp1Qs5Kjrg445xzg2muBr3417dYUBtOnT8eMGUY1mizNAHs+Wx72nLYclixZ&lt;br /&gt;
giuuuALIjKW5Jm1R8SyA7xFRNbhq3UQA08GR9n7sB4DRo0dj4sSJybcwx7z9Nj927Qo0w+YnQklJ&lt;br /&gt;
SbM8lxY99ny2POw5bZEkEj6Qtqj4Brhs7x8AlIHL+N6bea1FsmYNP+72LkZtsVgsFkszJ1VRoZTa&lt;br /&gt;
Ay4u8+0025FP1q7lRysqLBaLxdLSsAuK5RlrqbBYLBZLS8WKijxjLRVNmTZtWtpNsOQQez5bHvac&lt;br /&gt;
WkyxoiLPiKVi165021FI2A6rZWHPZ8vDnlOLKVZU5JGGBmDdOqB9e2upsFgsFkvLw4qKPLJ5M3Dw&lt;br /&gt;
IDB6tBUVFovFYml5pC4qiKgfET1MRLVEtJeIPiCiFpkQLa6PsWOtqLBYLJYkeeMN4Oc/T7sVrY9U&lt;br /&gt;
RQURlQJ4A7xc8LkARgP4bwD1abYrKSRI04qKYDZsALZtS7sVFoulOfPkk8BPfgKkuBJFqyRtS8Ut&lt;br /&gt;
ANYrpa5RSr2nlFqnlPqnUmpNyu1KhDVrgF69gD592A1y8GDaLSpMzj0XGDoUuOsuYH/KS8a99x6w&lt;br /&gt;
d2+6bYjCunXAjh1pt8JiSZ9t2zgg3t4P+SVtUfFpAPOI6HEi2kJEVUR0TcptSoy1a3mw7NKFn+/Z&lt;br /&gt;
k2pzCpZNm4ABA4DbbgM+//n02rF7N3DSScCjOV9yJxneeQc4+mjgllvSbglz9tnA00+n3YrmyZYt&lt;br /&gt;
6Qvq5k5dZv3NdevSbUdrI21RMQzA9QCWATgHXKL7t0R0ZaqtSog1axqLCusCaUpDA7BzJzB9OnDz&lt;br /&gt;
zcCCBem15f33gcOHgZqa9NpgysqVwIUXslVl3ry0WwMcOQK88grw+ONpt6R5cvLJwG9/m3YrmjdW&lt;br /&gt;
VKRD2mt/FAF4Ryn1/czzD4hoLIDrADwc9MHp06ejpKSk0WvTpk0r6HzqtWuB44+3oiKInTvZB1pa&lt;br /&gt;
CpSUpHuM3nuPH7dvT68NJuzbB5x3HtCzJ3D99ew2OnwYaJPi3b19O5/HN95Irw3Nle3beQKyYUPa&lt;br /&gt;
LWneSFxWaxYVlZWVqKysbPTajoT9QWmLis0AlnheWwIg1Og9Y8aMZrVq3uHDwPr11lIRhgzgpaV8&lt;br /&gt;
nHbv5sGJKP9tEVFRX+Bhw8uXA6tWAa++ys9//GNg2TJgzJj02iSzxPXr+W/QoPTa0txYupQfbbBy&lt;br /&gt;
drivwdaKbqJdVVWFSZMmJfadabs/3gAw0vPaSAAtTltu3Mgm4SFDrKgIwi0qunZlMZZWQGtVVeM2&lt;br /&gt;
FSrSeQ4YABxzDP//wQfptQdw2gRYa0VUrKjInoYGZzLQmi0VaZC2qJgB4CQi+i4RDSeiywBcA+D3&lt;br /&gt;
Kbcr56xezY/WUhGMdARiqQDSOU579gBLlrCFpNBFRW0tP/bqBXTvDgwezPEgaSKiorQUeP31dNvS&lt;br /&gt;
3LCiInt27GBh0a2bFRX5JlVRoZSaB+BzAKYBWADgNgDfVEr9Lc12JcGSJezjtqIiGK/7A0hnnZQP&lt;br /&gt;
P+ROaeLEwhcVdXV8bXXrxs8nTEjfUiED4oUXWlERFSsqskdE7YQJVlTkm7QtFVBKvaCUOkYp1Ukp&lt;br /&gt;
NUYpdX/abUqCxYuBigqgXTugY0eeAVtR0RSdqEjjOL33Hp+rU08t/JiK2loO0pS4k/Hjgfnz0y36&lt;br /&gt;
U1cHdO4MnHUWZ/Bs3w688IIt/GbC0qVAUZEVFdkgx27iRJuem29SFxWthUWLnMC5oiLucG3n2pTt&lt;br /&gt;
21lMtGmTvqgYNw4oL28eloqePZ3nEyZwGuxHH6XfplNPZXHz8MPAZZfxfSCVZS1NOXSIg27Hj2cx&lt;br /&gt;
29CQdouaJ2KpOPZYfrSZNPnDioo8sWgRFyYSJLPB0pjt29lKAaQrKqqqeJZTWuqkRxYqtbUcTyFM&lt;br /&gt;
mMCPabpARFQcdRRQVgbccAPQoQO/t2VLeu0qdFau5ODkT3yCrzlbDTIeXlFhXSD5w4qKPFBTw3/u&lt;br /&gt;
FD8rKvS4RUXXrvyY7+O0bx+LwEmTuC2HD0cv1b1wIX8uH4j7QxgyhOMr0gzWFFFBBJx+Ol/vzz3H&lt;br /&gt;
76VpQSl0JJ7ilFP40bpA4rFtG4vYigp+3lzTSu+8k9cvaU5YUZEHFi/mR2upCEdnqch3oOaCBZz+&lt;br /&gt;
K6ICiBZXsW0bz5DyVU2yrq6xpYKIzedxREV1NfDWW7lpU48e/P+vfsX7PO44PqfWUuHP0qV8zY0a&lt;br /&gt;
xc+tqIiHiNr27YG+fZuvpeKll4CZM9NuRTQKSlQQ0S1E1EBEv0qzHUeOAA88wI+5YNEijhEYMcJ5&lt;br /&gt;
zYoKPW5R0a4dH7d8HyeZLY4Zwyma0i5TFi1iK8WiRblvmw6v+wOInwFy991ALorSbtvmWE8GDuQA&lt;br /&gt;
TYBjVKylwp+lS1lQyLGLKyruuINjWFor27Y5onbw4OYrKmpqmp+VpWBEBREdD+BaACknw3GQ3le+&lt;br /&gt;
Arz2Wm725878EKyo0FNf74gKonSO0/r1HAfQsaPTlqiiAgBWrMh923R4AzUBHsg3b46+r+pqLtSW&lt;br /&gt;
bYCgrk0Ar9BrRYU/IipkQIwrKt59l/9aK+7rb9Cg5isqamv5fjlwIO2WmFMQooKIugB4BFz4KvVY&lt;br /&gt;
e1lAavny3OzPG6QJNC9R8fzzuTGJm+C2VADpiQopK52NqFi5Mrft0nHwILuHvJaKkhJeRyWqONi4&lt;br /&gt;
ka0sW7dm1y4/UVFebt0ffijliIrOnYG2beOLis2bW7d4c19/gwc3v9k+wPeuBJxu3JhuW6JQEKIC&lt;br /&gt;
wB8APKuUmp12QwCnQmEuRYV3HYbmJCpuvDF/wUKFKiqixFRIDM2KFclnjUin4x3AS0v5u6Meu02b&lt;br /&gt;
+DGbTmz/fg5stZaKaGzezEJw1Ci20vXoEV9UbNrE57659DG5xuv+2LCh+aXnbt/uuOCbU0ps6qKC&lt;br /&gt;
iC4FMAHAd9NuiyAddS5EhS7zA2g+ouLAAR4c87UE+fbtThwDwBkg+T5O69Y5oqJDB/6Laqk45hhu&lt;br /&gt;
d9KzcneJbjeygG+UlMSGBsdlko2o8BM6QPOxVKQxAEn9jmHD+LFHj3iF19yWpuZwrJPA6/44dCie&lt;br /&gt;
OzBNxGIONC9LS6qigogGAPg1gMuVUofSbIsb6RRz4RPXZX4ALCrSKD8dlRUrWC2vX598zvzhw3xM&lt;br /&gt;
vJaKfB4npZquqim1Kkyoq+OO/LOf5edJx1X4DeAiKqKIodpa7nwBx2KRyzYBbKmoqYkXBK0U8N3v&lt;br /&gt;
cnGoJKms5HL6+a7CuHMnP4qojmup2LrVEUWmouKjj3IXmF4IuEXFwIH82JxcCIAzYQCal6hIe+nz&lt;br /&gt;
SQB6A6gi+nhx62IApxPRNwC0V0pvQJ4+fTpKpOfMoFvmNQ5yMlet4oGuTRZHSZf5AaQzA4+DO4Nh&lt;br /&gt;
4UIuypMU0qnGdX9cdhlwySXAZz4Tvw3btrHpPq6okOP16U/zEuQrVgCnnRa/PWHk0lLhFhLZdMAy&lt;br /&gt;
EIr52U15OQ94tbX8f9T93nknxxt873vx2xfGokXciT/1VG4yYUyR61/qs8QVFe7zaOJqWr+eXS6/&lt;br /&gt;
+x3wH/8R/fsKjUOH+FjK9RcnLirXbN7MInXoUPPPiKViwID47o/KykpUVlY2em1HwrPDtEXFPwGM&lt;br /&gt;
87z2IIAlAO70ExQAMGPGDEycODGRRtXVcX7zgQNsCh8+PP6+Fi5kQeHO/ACaj/tj0SJW/Dt2sAsk&lt;br /&gt;
SVHhXvdD6NLFrGOsruYZ5ooV2YkKmRF4RYWpGXrxYqC4mN0fAwfmx1JRVOSICCEbUTFgQHLujz59&lt;br /&gt;
+PGjj6KLCulY58+P3zYTpDP/05/SERVSn6VHj3jBvm4zv8m9c/vtXPDtjTdahqiQe1WuP+lP0qxO&lt;br /&gt;
evXVfF299575Z2prnZozcS0Vuol2VVUVJk2aFG+HBqS9SukepdRi9x+APQDqlFJL0mpXbS0X6gGy&lt;br /&gt;
j6t45x3g+OObvt6lC9/IYSZHpdINbFu8mC/qiork4yrcy54LpuLr1Vf5cd48LrEdF52o6N49mqVC&lt;br /&gt;
RORRRyUvKqSaZpHnTo4rKoi4PHm2oqKoqPF5FERUxPH1V1fzYzbn14TaWs68mDMnPxk8wq5dfL0X&lt;br /&gt;
F/PzbCwVRUVc9Cms71i0CHjoIbZ0RRnwChmvqBXLT1qWim3bgFdeYTEcJUampob7nqFDbaBmtqS+&lt;br /&gt;
ykJdHRcPat8+O1Gxdy8XIDrppKbvyWxkz57gfcyaxWWX07ohJHNl3LjkRYWfpcJUVIwaBfTvD/zv&lt;br /&gt;
/8Zvw/r1fN5793Zei+r+kKDcESPyY6nQWQQ6deLBKYqo2LiRrQeDB2cvKrp3byp0AMc6EUcoi6hY&lt;br /&gt;
uzbZlWNrath9VVoK3Hdfct/jZedOZwAE4ouKzZv5OPfrF36cb7uNz/cPfsDX7r590b8vlzQ0ADNm&lt;br /&gt;
AI89Fn8y5XW/FRdz2fq0LBXPPstudKWA1183/1xtLfdDgwY1r5iKghMVSqkzlVLfTrMNtbVc/Cjb&lt;br /&gt;
QeG99/hiOvnkpu+ZLpb1wQfshkkjyOjgQf79Rx/tiIokUyR1oqJrV7NAzVdfBT75STbf/vWv8V1L&lt;br /&gt;
EqTpHhCzERUrVyZ7zHTVNAG2OJSURLdU9OvHwixbUaETOgBn0pSUxLNUbNjgxDfFXdfk4ouB6dOD&lt;br /&gt;
t6mt5Wvgiiu4su6hPIWQ79zJg58goiLq9SPnsU+f4ONcVQU88wzH/px8MltN01yEDuA6Hd/+NnDp&lt;br /&gt;
pWxp+fnPo+9D534rKTG/h5ctA/75z+jf68ff/85u4wEDHIuqCTU1fG8PGsTXRnNZXK7gREU2fPrT&lt;br /&gt;
rLizQSmnU6yoyM5SMXcuzxilRLEbU1Eh5tc0UsOWL+eORiwV27cnK27kpnfHB5hYKjZs4KDaM85g&lt;br /&gt;
UbF3L/C3v8VrgzfzAzCPqait5ch7yfQZMYLbkk0mRRhBA3gcUdG/P/9t3x59ETWTNgHxS3VXV/N6&lt;br /&gt;
LJ06xXOBfPQRd/BPPhk8UNfU8AzxK1/h+y5XlXXD2LWrqag4dCjcmull82YekMNqgrz2Gou8Sy/l&lt;br /&gt;
+7tt2/RdIFL5cu5cFjpxiu7pAoVLS83vhV/+Evja16J/r45du4CXXwYuuoj7p3/9y/yzYqmQ7JXm&lt;br /&gt;
4gJpMaKivh544QXuMLJh926+kXMlKo4/Xp89ElVUpBFXIZkMRx/tCKMkXSDbt3OnKj5lwBEVQYOA&lt;br /&gt;
qP/TT2dBcO65wCOPxGuDTlSYxlRI+rDbUgEk6wLxs1QA2VkqgPgC0l14SEfYDNqPDRvYVH/MMfGC&lt;br /&gt;
Nf/2NzavV1f7p6UeOeIs0DZuHF+L+Yqr0Lk/gOguELelIqjfWLyYXYbFxezyGzcufVGxfj23Z9Ik&lt;br /&gt;
7nPE5RWFujo+jm3bOq9FsVSsX5+7/vb559nS/PnPA5Mn83Vrek+6LRXSruZAixEVr7zCHcaSJdld&lt;br /&gt;
EO4UvREj+ETG8TMqxSpb5/oAmoelYvFinlX27MlxHZ07Jy8qvMF9XbqwC+ngQf/Pvfoqd0ASB5FN&lt;br /&gt;
tLSfpWLHjvCCSKtX86OIiWHD2A2R5KDkXaHUTZTZGcAiIheiIklLxcCBvAJsHFHx6KPAmWfyoDXb&lt;br /&gt;
p3ZvfT3fu71782Sgf3+nKFXSeN0fUq8iqqgQS4UcZz9B7l0+YNKk9EXFunV8zNu0YXdBXFGhqzBr&lt;br /&gt;
ei9UV7OFIaqFSMff/87HdfBgtlQ0NHCWjQliqejbl69ZKyryzKxZfPABjtqOi9sfV1HBN2ScYjsb&lt;br /&gt;
NvDNrQvSBMxExb59zk2VlqVCOp2iIh640xAVQPBxevVVYMoU53nv3o0Lx5hy8CCfM52oUCo8tmPn&lt;br /&gt;
Tl6ErH17ft6+Pe8raUtFLtwfhw6x66Z/fxYWQHKiIo6lQim+pwYM4OyUpUujuWdWrOAFtq67jjt5&lt;br /&gt;
vz5C0klFqA0Zkj9RoXN/ANFExZEjfGzFUnHwoP4aUIonDW5Rcdxx6Qdrrl/PAzDA53rLluAJhQ73&lt;br /&gt;
CrlClLgocTPkYiI3a5aT4j58OJ8X07gKsVQUF/N9ad0feUQp9lt98Yt8k2QjKtyWiooK/j/OoDB3&lt;br /&gt;
Lj+eeKL+fZPBcs0afmzbNj1Lhbu8eNIZIHFExYYNbCE44wzntV69uIOOurJfdTVfSzpRAYTHVXjN&lt;br /&gt;
1wCnlSZVAfLQIR4wgtwfph3pli382/v142PerVuyoiKqSN62jYsHiaWioQH48EPzz//1r3xuPvUp&lt;br /&gt;
tlbMmaOfwcv9L1avIUPyt8JlLtwfUk1TYioA/bHesoWvZ/f9PWlS+sGa7hL5AwbwY9SYpLq6pu43&lt;br /&gt;
U4G9c6dTLyTbPnffPu6HpOAVkXlcxb59bCmR67A5ZYCkXab7u0T0DhHtJKItRPQUEVVE3c+yZXzA&lt;br /&gt;
zz2XZ6x+pk0T3JaK3r35Yly2LPp+5s7lDklubC+dO/NjkKgQs/mkSfm3VLgzP4RRo5I15buXPRek&lt;br /&gt;
k/WzEojgO+YY5zW5EaNaK3Q1KgDHDB02QHvN1wDPMJIK1JTBJheWCmmjWCniZoAopZ8puikv5/ss&lt;br /&gt;
SlaFWOwGDGCLWZs25i4Qpdj1cdFFbEmaMoUHjCWaSjhiqXCLirTcHyUlPBBFERXu8xgkKtzxUsLY&lt;br /&gt;
sfGDNevrc5Od4LVUANFdIH7uDxOB7f6ubPtcmYS41zKaPJmPb5jVwStuBw60lgpTTgPwOwAnAvgk&lt;br /&gt;
gLYAXiaijlF2MmsWFxuaPJlnIatWxVd1tbXc8XTqxDf08OGOrzwKEr3sR3Exf0+YqOjUiWME8m2p&lt;br /&gt;
kBLlo0c7r5WWsnpOao2AOJYKMYHLdoAzc3cvyGOCXDMSbS2YlvnViYq+fZNbyMivRLcQRVSIgMhW&lt;br /&gt;
VOzYwddHmKVCqWjnRzrUgQPZrXT00eYZIOvWsfj83Of4+Sc+4RS38lJTw64+GQgGD+aBOqrVKw5e&lt;br /&gt;
94e0I4qokGtNYioA/eC4eDH3mbJ4GeAEa86bF73tV1yRfcbE4cN8zWUrKnSBwqb3gnvgzrbP1WWh&lt;br /&gt;
XHIJn5urrw6O0fLe29ZSYYhS6gKl1MNKqSVKqQUAvgxgEHhNEGNefhk49VSe/U+ezGIgrgvEq3KH&lt;br /&gt;
DYsuKo58wmdKAAAgAElEQVQc4VmUrpKmm7B0yVWrWNT07Zt/USEWAPeaJWFWg2yJIyokmKpTJ+c1&lt;br /&gt;
uRHjWCp692ax58ZUVOza1dT9IaIiiVoVQeWwgeiWirZtnWMXV1SEtQlwBrso13R1NQtx+ey4cU62&lt;br /&gt;
TRiy3fjx/Ni5M7sldRZNb4XSIUP4MelZolJ691nUAlhSTbOsjPfVsaO/qBg1qmlm2tix0S2zSgFv&lt;br /&gt;
vqm3/ERh40buO8VS2K0b/4Y4lgqv0C4t5eMbFmxdXc3jR69e+uN2771c68TkfhZLhVtUlJQA99/P&lt;br /&gt;
iQV/+ANbLU46qakg81rMBg7ktsVdPXf/fmDqVK7wnDRpWyq8lIIrahrfRgcOcODLuefy8549ufPI&lt;br /&gt;
lagYOtSJbTBl5Uo+iW6TvI4wUbFyJfvky8sbrzyYD1as4IFaZq5AYYoKsVS4RUU27g+vlQJw6maY&lt;br /&gt;
xFToLBUHDiRTEdXEUrFrl9l1I2mIsqxfXLdN0GJiQpBZ3o8NG7h9km4cpTDdokV8HbndWlOmsG/b&lt;br /&gt;
OzhIcJwgoiKqCyTqPXLgALuDvNdPVFGxeTMLijZt+Fz6BcV6Mz+EOGJy9Wq+vrN1E8lMXCwVQPQM&lt;br /&gt;
EKX0adYlJY5wC2LDBj5mAwfqj9vrrwNPPAH84x/hbZHz5nZ/AMDZZwPf+AZw443ACSewZcibEeK9&lt;br /&gt;
t8vLnRiqOCxfzpU981HIrWBERWaV0l8DeD2zBogREgV+6qnOa1OmRKtc5sZ7QQ4dyubTw4fN9yHB&lt;br /&gt;
jOO8S6V5MBUVffo4+fP5YsUK/u6P145FfkSF9wY0ERXt2jWecXXuzKbcqO4PSVn00rYttyOu+wNI&lt;br /&gt;
Jiamro7Pj26NDcDpSE3Ol6STCiIqogrZMKED8KAHRDsm3nMzYgSfX5NOVgZQ97V87LHOMvVuJI1P&lt;br /&gt;
GDCAZ/5RBsyVK3liEiXgUc5RtqJCxKGgC4pVKlhUbN4cfN5l8TFBYjDq68MH7SAkINYt/qKKir17&lt;br /&gt;
eUKns1QA4deLXGd+wcQysbjppnCXmJ+oALhS6Pnn86q73/9+UyFXU8NWJom9i1uzRJAYGndgblIU&lt;br /&gt;
jKgAcA+AowFcarLx9OnTMXXqVFxzzVQAU3HHHVM/XuJ1/Hi+QONUBNS5P44ciXZhL1jAHad0nn4E&lt;br /&gt;
iYqDB7kjE0sFkN9gzRUrnOwXQTq8JESFVA70DpDt27NgCHJ/uK0UAA8ecdJKN250ajR4MQn08vrE&lt;br /&gt;
AWdWnkRcRU0NdzbuYmFuoiwqJtU0hf79WUhHFWZyjQZd++3acduinB9JJxXELWcSOOxNnQSAkSP5&lt;br /&gt;
0VvcTqpputvar180UfH663w9RzE1y2CcC0uFCFlAPzjW1PA+dQNM//7c9qBz89hjPIkTl5A7sDOb&lt;br /&gt;
TJn167nvlYEUiC4q/ESt3Ath97BcZ361VLZtA045hX/n734XvK/6eu7j3UW4hE6dgKefBr7zHbbM&lt;br /&gt;
1NWxGHL/DvdvEGESdc2byspKTJ06FbffPhXt20/FVVdNxfSwOvVZUhCigoh+D+ACAGcopYy63xkz&lt;br /&gt;
ZmDmzJm4+OKZ6NJlJl56aebHS7xK8FFUtwWgt1RE3dfCheFWCiBYVKxbx7MFt6jIZ1zFihWN4ymA&lt;br /&gt;
ZC0VMvB5RQURHye/79y7t6moAPgcRh0QsxUVOp+4dPBJiArvAOIlqqhw70tmi1EHiS1beCBs1y54&lt;br /&gt;
u+7do3WQOksFEO4CaWhomhoNcKwSkV5UeAekqGmlEugos0MTRFTkIqbCbanQDY66zA/BpEaJuCme&lt;br /&gt;
f54f33uPzfhAdi6Qdesauz6A+KJCl/0BhN8LGzY4lgpdfyui4rrrgO99j9vbpw/w3HP6bYPcgIL0&lt;br /&gt;
OW53o1fcxrVUTJs2DTNnzsSYMTNx2mkzMXPmTMyYMSPaTiKSuqjICIrPAJiilIoc37pqlVO5UBg+&lt;br /&gt;
3HkvKl5LxeDBvO8owZoLFujX+/ASJCqk7cOH519U7NvHN1c+RYVuMTEh6Djt3dt4ZiP06hVtJrx/&lt;br /&gt;
P5/7IFERJ6aiSxf+S0NUmHakgNOZCnLuly6N1qaPPvJPo3YTRVQoxQOL21JRWsrnOExUrF/P1izv&lt;br /&gt;
ANq+PYsFr6jwuj+A6GmlcUSFn/sjaql1E0vF4sU8e5Z+0o1JNVV577nn+NxUVQEXXshCMhtRoatm&lt;br /&gt;
O2AA/yZT93O2lgq5zvyqkdbX8wD/k58At94KXHUV95e6jBnZNgzdMc+VpUJwL3SYNGnXqbgHwOUA&lt;br /&gt;
LgOwh4jKM38dTPexenXTm6NvX/ZHxRUV7pPZvj2fdFNLxd69bJI1tVT4DdArV/JNOmAAD5pduuTP&lt;br /&gt;
/SEm5XyKCrlZ4ogKnaUiqvtDZgl+osJk/Q+d+wPg6zGJc2dqqQhr944dLIjcHXqXLiwyCkFUbNvG&lt;br /&gt;
Hbc33sUvWLO62hFx3vVY3FRUNM50kDRX74A0eLD5YHnwIK+g2rNnPEuFTlSYBvk2NPDEw338+/Th&lt;br /&gt;
3+ROA1+0iN0/OrN8eTnHkAQF6crg98ornPFRX8/VOAcPzs794WepaGgwv38k7ixOTMWOHXwPi6Vi&lt;br /&gt;
377G/U5DA1+L3bvzefnBD3iF1wED9OdItg1DJyq8loquXdnNGSemYv9+HgtbhagAcB2AbgBeBbDJ&lt;br /&gt;
9Xex6Q4k7dINEVsvooqKvXv5QvKazoYONbdULF7MnZOJqAgyba5cyb9B/OVxF2GKgy6dFGCB1bZt&lt;br /&gt;
dsFYfugKxQhBokIXUwFEd3/IDR3X/XHwIN+8XvM1kFytily5P9w1INyMGlUYosJd+MrNUUfpRcWX&lt;br /&gt;
vsSFrgB95ocwcmRjS4UE+eksFZs2mZWLXrSIA/guu4zPj+lv9HN/RMngqa9n8SCWTcAJ8t661XlN&lt;br /&gt;
F2MitGnDnwmyVGzaxJUh9+8H7rqLX5P1LeJaKpTyt1QA5i4Qd50hNx068CQt6B52X2e6ODY5D17r&lt;br /&gt;
g9+1bGqp6NaNJ45Blgqi6C5DYdkybnerEBVKqSKlVLHm7yGTzx86xOpWZ8aLU1/CL8d+2DBzS8WC&lt;br /&gt;
BXwBmJzA3r39Bz7J/BDiLsLkZvZss8VsVqzgzk0XbNe1a7KWiqiiws/9EdVSka2o8DNfA9xJ51pU&lt;br /&gt;
KBUuKjp25EEiTFT4VRIdPTq6qNiypfGg5keUDtJP9IwY0TRQs6GB1/h46y0u471oEf8Ot3tUqKhw&lt;br /&gt;
irwBTWsDCEOGOKubhjFvHs/0L7+cn5taK3bt4s95B8MoGTwiHNz3rQSkumtI6GJM3PTrF+7+mDKF&lt;br /&gt;
+91HHuF7prw8u+qj27bxBEFnqQCiiYq4C+y5rzMRxu6JnK7uhOw3G0sFUdNUXq+lQr43jqUiKIYm&lt;br /&gt;
CdK2VGTF+vWswnWiYvjw6JYKP39clFoVCxawCNENdF569WIho5uFeEVFtpaKw4eBK6/k4KIwJEhT&lt;br /&gt;
1xEnKSqKi/Uz/aDvDArUrK01Lzq1caOz5oWOsJgKP/M1kIylYscOnikGiQoiM5/8hg187L37krLs&lt;br /&gt;
UXLbk7BU+GWUjBjB59jdoa9axdcKEfDHPwYPoBUVzsQEaLqYmBClVsW77/L3TZjAx9RUVEg8jvee&lt;br /&gt;
ixIXoxMVRx3FFkZJc6+p4b+gASaoVsXBg87Cc5/6FPe/kzKlCrNZJ0U+5xUV3buzOM6FqAhzJW3Y&lt;br /&gt;
wMLOb90UvxRRv2vZNFATaHzMpXyA93fEtVQsWsRC0S/1PNc0a1HhDmb0Mnw4C4EoJaX9LBVDh/KA&lt;br /&gt;
brIUrmnmB8BKVPx0bo4c4ba7f1e2loqXXmKzpUknp8v8ELp1S05UlJbqhUxc98fhw9HKVPtZKYDw&lt;br /&gt;
mIogS0USMRXucsxBmIiK9ev5t3tTU0eN4kHXVFDv38/HKNeiQlJnvdUfdRkgkt741a/yLDooQE1m&lt;br /&gt;
8RJX4V1vQRALiYmomDePK+m2b8/tiyIqdII6SgaPTlS0acMCYuFCfi4xJmGiwi+mQq5jERWAIyoG&lt;br /&gt;
D+ZjGFR7xw8/axlRtAyQoFV7wywV1dV87bZty9u2a6cXFaaWivp6M0sF0FhUrFrlZP656dEjvqjI&lt;br /&gt;
l+sDaAGiok0bvb90+HDuEHOR4ywpqiadyoIF0UQF0NQFUl3NM4JcWir+/Gc+VjU1jf2rOoJERZKW&lt;br /&gt;
Cr8bMG6gJmDuAgkTFaWl3Aa/KHQ/nzjAA//27bldUtq7AJgfpqJCdw+NGsWPpi4QuT5NRcX27WaW&lt;br /&gt;
JJ0pGNCLiqoq/i0338zX6d69/gPogAHsa5e4Cj9LRfv2fJzDZuH79/P9f9xx/HzMmGjuD50gjSoq&lt;br /&gt;
2rZ1PiOMHetYKhYv5n7A7/4Ggi0Vbjfh6acDF1zgLO0tFp041or16/lc6M5zVFER5P4Is1SIgCTi&lt;br /&gt;
iZyJ+0MnkBsazGMqgMbHXFbf9VZkjroOjBDm7so1zV5UDB7cdAYDOLP8KHEVdXVO9UQ3prUqamtZ&lt;br /&gt;
2ZqkkwL+okL8xN6YCm8UtykffcTpX9ddx8+DOrrdu3kW3JxEhV9KKWAerOmtKOklzAwd5v4Acmut&lt;br /&gt;
yKWlYsMGvajo04d/j+maDtIBm8ZUHDlidi35iYpu3XhW7hUVkybxACel+/061KIivs5FVNTW8rXW&lt;br /&gt;
QZN7NnRouDv1gw9YdMYRFbp0ZCC6qCgra2rtGzeOLRUNDdyeigp95ofQr1/TYkyCe+G5du24VoWs&lt;br /&gt;
qSKuiziiYutWvm50lspciYqwe8Gbtuy1Dm/bxteMd+KgEys7d7JgjiIqNm3iz3z4Id97upgKnaVi&lt;br /&gt;
927/lbnznfkBtABRoXN9AE59iShxFVKjwnth9+3Ls5UwgSIKM1tLxcqVbIp2+xfLy7lTiFolEgD+&lt;br /&gt;
8hfuRH7wA+4Igjo6ETTeappCoYkKP/dHEpYKaaeOMPcHkNu4is2b+bt0v92NqaVCV56cKFoGiHTA&lt;br /&gt;
ppYKwMycq6sdIRx1lHPNSs2EiRP5+a23sole99uEiorGlgq/76moCK+JMW8e32cywxwzhoWWSXn9&lt;br /&gt;
XLk/dMHV48bxfbJuXXDmh6ArxiRs2sR9oW6w7NePJ3hxgjW3bvU/9gMGmC/opotFEKJYKoCm1mEJ&lt;br /&gt;
vCzyjJrdu3P/5I49CirRraN/f7ZO19XxOKJbN8rPUvHLX/J6IrrspKVL85v5ARSIqCCirxPRGiLa&lt;br /&gt;
R0RziShkfU9GCl/paN+eL5AoosLvpiwq4plPmKVi3jweAP0GZC/du7N40ImKwYMbzyZ00cgmKAXc&lt;br /&gt;
dx/whS/wTTtyZLCokA62OVkqdAOrdHomlgqlmpap9iJt8+uUxFKhs5rEWUArjLDMDyFMVEhWg85S&lt;br /&gt;
ATQWFVIgzI+PPuJ7JWjdDyGKqAga7N21Ktau5f2JqDjtNF5EyTsIuHGnlepqVAgiPoLcNSLO2rfn&lt;br /&gt;
59KRm1gr/NwfnTpxH5GtqADYBWJiCg8SFSK+dRaF4mK+juKIipoa/9Luo0bxsQ2r1+G3mJgQdi+I&lt;br /&gt;
tUTwFg7zc2forJgmC+u5cdeq8BMVfpaKv/+d72NdXycxNKNHm7UjF6QuKojoEgC/BHA7gGMBfABg&lt;br /&gt;
FhEFdk1K6QtfuYmaARKUDmdSq+Ldd9n06rcWg5eiIraMeC+GVauaBunEXf9j/XrudL/4RX4+dqwT&lt;br /&gt;
tOVFKeD3v+cL0C/YqWvX5OpU+IkKETK6Dt3P/SHBViaWitpaVvkmloogUdG1q34A69mT25NrS4WJ&lt;br /&gt;
qAgLTtuyhWdYYaJCKeCSS7g+QdC+evc2u/6jigq/gUJEhVgpACdw0ISKCp6h7tkTbBGpqOBzH3Q9&lt;br /&gt;
eavxjhjBM3cTUeHn/jDN4AH8+y+J/H/1Vd7G1FKhi6sIcxPGLYAVZKk4+WR+nDs3eB+7d/N9HMdS&lt;br /&gt;
oVTTBQ29MRV+KaK6azkoRV6HHPOlS3ny6mep2LOnsUVixQonXkY34Vy3jsVIvjI/gAIQFQCmA/ij&lt;br /&gt;
UuohpdRScEGsvQC+EvQhyWs2FRVbtoRHJYeJChNLhfhTTdHVqvCmkwLxRYVccMcey4/i59UN0H/5&lt;br /&gt;
C/Daayws/EjLUnH4sN6852epAMxrVYRV0wTMRIVfOqosQZ2GqAhLo5Ooez8XwahR/Pl77gFmzmRB&lt;br /&gt;
6hfEZ5pOCuTOUnHKKdwX3HsvZ37062cW0yGIVfGsszjuyO8akO28Zb3dbNvWWFS0a8d9UNBnBD/3&lt;br /&gt;
B2AuKvwsFURsrXjiCX4eJirEraY7z2EWvbi1KoLO8VFHsVB4883gffit+yEEHUcpbOUefMVSIX2l&lt;br /&gt;
X4qorm+Iaqno04cnJC+9xM/9LBVA43vmqaccq5EuAN+0bkwuSbtMd1sAkwC8Iq8ppRSAfwI4Oeiz&lt;br /&gt;
ErgTJCqkANa77/KFecstwe3ZssXfBNe/f/CAXlPDN9PxRo4bB6+oUEovKjp25Js96iJZH37IN5ME&lt;br /&gt;
II0dyxeld4CrqwNuvJGL9px5pv/+4qSU/vWvTtCcH2GiAmgqCg8eZLHhJypMq2qGFb4CnBoCQTEV&lt;br /&gt;
foMCEL1WxY4dwavs5sr94ZfKJ4jZ9Fvfcq6LOXP020YRFWExKsKePZw14zfgTJkC3HADt+/xxx3X&lt;br /&gt;
hyljxvB579iRV538xS/02/ktQOamrq7pINK3r5nL0s/9AZiX6vYTFQCLiupqtiKFuWd1xZiEsNij&lt;br /&gt;
uFU1g9wfRCweTUVFkKXiwAF9AKrOslBezn2MHHs/94efpcKv7o6ONm34+156if+XzCvd97jjKv7x&lt;br /&gt;
D15CHbCiQugFoBiA97bbAiCwe7rvPn70i6kAuCPYvp2DWPbs4Vl4EEEnoKyML1q/7AvJj8/WUrF5&lt;br /&gt;
M3eiXlEh24alg3qRFFdRs35+3u9/nwfoX/4yeH9Brgg/nn0W+Oc//cscHznCA19UUSGDrl+hMdNF&lt;br /&gt;
xTZu5FlC0IBYVBTcuQdZKoDoouJTn+KB0o8oomLXLv/rdsMGPr5+5tHhw7mT69QJeOghvpb8Is2j&lt;br /&gt;
iIriYj5eYaLCr8qlm1/8glfJXLUqmusD4DZUV7NQuv76pumYQseOLLzca4V48VoqAO43TERF0PVj&lt;br /&gt;
Yqk4cIC3CRIVALtkwlaQBfS1KpQKd38MH859lOl6JYAzcAed41NOAd5+Ozj7LUxUBK2FI6+5+yC5&lt;br /&gt;
v0Rc+bk//CwV3bvrY0/8kInrqFFOXI4br3ipruZjctll/Nt011kaokKTjNk8mD9/Ovr1K8Fllzmv&lt;br /&gt;
TZs27ePlzwHHijFsGDBtGlsq9uzRD0JyUwaJCqV4NqK7cd99l096kMjR0bt3444qqKBXWVk8UTF5&lt;br /&gt;
svN86FDuIBcuZLEFsE/90Ud5xhd2AXbtyjf2/v28HxPmz2fT4vr1erEkHWaYqPBaSERUBLk/TPzZ&lt;br /&gt;
Gzfy79alJrsJ8smGiYo+fYB33glvC8DH4803/QXR7t18LMJqVABOR7prl144SHChX+fXti1XYv3k&lt;br /&gt;
J7nTO/NM4Omn9dtu2QKcemp4mwSTAlgmoqJdO7ZSfO5zzqwtCbxrhXjRWSrKy51gOT+kDHc27g85&lt;br /&gt;
Tn6iQtLcTUs19+/vWLGEXbu4/wyyVEh66Ycfch0LE/yKjrk55RS+7hcudL7Di1/xQsEdUOkVv7oF&lt;br /&gt;
DaWvWrmSj5+f+0NiqdzXcpRqmoLczzrXB9B0+fOnnuL788ILgTvu0I8Ny5dXYu3aSkyd6ry2I8qy&lt;br /&gt;
tzFIW1TUAjgCwDuUlQMIjB547bUZmBhi6xw/Hvj5z4Grr2bVfdNNHMx12mlNt5UT4jeoygXvZ2KU&lt;br /&gt;
eIooylT267ZUrFzpLIjmJaqoOHCAA3++8Q3nteJiNmm7B9t//YtvtM99Lnyf7pVKTUTFrl1OdP7q&lt;br /&gt;
1XpRERbU5JdWJxVOg9wfppaKoI5SCBIVQeZrIJql4t//ZhG2bJl+sDGtUQE0PnZ+osLP9SHcf7/z&lt;br /&gt;
/5lnAr/5DccXSf0WIYqlAsidqAC4Q377bfPvjkNFhb/rR6n4loq9e/l8B1kqwoLEddU03YioME0t&lt;br /&gt;
7N+f109xY+ImlFn2+++bi4qwtgPct7Zpw2L7mGOAr3yFJ0tf/rKzTW0tTxj9+qWolorycp7QSP/l&lt;br /&gt;
5/7QWTGjVNMU5Lj6iQqvpeLFF9n9V1rqPzbs3z8NX/vaNNx6q/NaVVUVJkU16UUg7QXFDgF4D8BZ&lt;br /&gt;
8hoRUeZ5iActnDZtWEj07s03U8eO/rNFufH9Lmx53W9Qf/fd6PEUgBNMKO6ElSudSn+6NkQRFUuX&lt;br /&gt;
slXBe5GOHdtYVDzzDA8sEyaE7zPq8ucffOD8Nr+OMUxU+BWeMrFU5FpU+A2CQYF2AA96W7earaMx&lt;br /&gt;
ezZ3zEqxlcdLXFGhw6/wlR+nn86dqNcFsns3i7y0REU+qKjg+1Nngt+7l0W8zlIR5DYFggunAWaW&lt;br /&gt;
irCBubQUuPNOZ6GzMGRRMbeb0134yo+2bbl/ef99s+8BzM5xx44cbP7mm7ymy4MPsnXVTVA6KRBc&lt;br /&gt;
wE6uQ7f7i8jJLjpwgK9vvz7Key3HsVSEiYoOHfg4iKVi4ULH3efNVAG4r6mra30xFQDwKwD/SURX&lt;br /&gt;
EdEoAP8PQCcAD+byS9q04RMQJiqC3B+APvBv40bu6KPGUwB8Ix065FzouiBNdxuiBGpK5oe3wueY&lt;br /&gt;
MXxB7tnDncYzz3CpXRMriwycpmml8+ezeXrgwPiiwm+GYRJTsWNH+JLVpqIiaP2PMPfHsGE8GzUJ&lt;br /&gt;
Yps9m1OAO3ZkC5iXKKJCOlk/MepX+MqP0lIOhvSKiijVNAVTUdG1q97HnG8qKnhw0RViko5eZ6kQ&lt;br /&gt;
t6kfQSXegfC0YMA5v0ED8803O+udhNGvH/9W9/VuWhp+woTciwqAXSD/938cUN69O98bbtETJirC&lt;br /&gt;
LBVdujStNCqiwq9Et+C1YkYp0S2IuPcTFYBzz+zaxdehBFLrJpxyXFudqFBKPQ7gRgA/AjAfwDEA&lt;br /&gt;
zlVKRcxzCOeEE/xNpGGWCunYdJ2zdPxxLRWAcwEEiQoJ1DQNkvzwQ47G9g52X/gCB2V+//s86G/Y&lt;br /&gt;
4NTvD0P2ZWqpmD+fg8RGjowvKjp10i/hHWapkA4mKGtn8WI25Sft/tCtU6GjtpbP2znn8MxMAoDd&lt;br /&gt;
bN7sZAOFMXAgWxZ0x37/fr6eolgqAHaBzJnT+DqMUk1TMBEVQbUj8k1QWqmIBp2lAgh2gQRVYwXM&lt;br /&gt;
LRXduuktnHHQVaTduJF/X5jbc8IEtoSGiXlh61a+h8NWdj7lFD6OvXqxtaK+vvF1HbSYGOBkcPlZ&lt;br /&gt;
KnTuQVNRobNURHV/XHQRB7UH9UWy/LkUpJMYGZ2oiCP0c0HqogIAlFL3KKWGKKU6KqVOVkpp5mfZ&lt;br /&gt;
c+KJXAxEd4Nv3conzK8mPpG/++Hdd/nEmQxMXtyiQtJJ/dJky8o4M8RktVSALRU61TtsGPDjHwO/&lt;br /&gt;
/jWX7i4tNfd/RnV/VFXx4CjpvTrq6/U19QUi/YAeFlNxwgksRp59tul7Bw7wSpbjxvE5+MIXwn9L&lt;br /&gt;
WKBmkPtDXFphouLVV/lxyhS2rPlZKvr2NbMstWvHokFXBE7SsuOIis2bG68JkpSoCKpfkG8GDeLj&lt;br /&gt;
qcsACbJUAMFuSxP3h9RR8CMonTQOuiUEwjI/hAkTWFCYlnc3PceTJ7NIfuABvj8A7nuFMEuF9DF+&lt;br /&gt;
lgqdCBgxgn+3WKeCXLTe7I+olopOnZyVX/2Qe0buPUk9LS9vOuFs1aIiX5xwAj+6L0QhqEaF4Ccq&lt;br /&gt;
ZLnjqEGaQOObd/ly7mCkUJXu+wHzuIqgFVO/9S0etJ5/nlcaDFpgyE0UUXHgAM9YRFSsWqW3ssgs&lt;br /&gt;
Iaicsi6dM8z9UVbG2QAPPdT0vb/9DfjTn4C77+Yb1KS0up+oUCrc/VFUxGIxTFTMmcMd2YAB7E6T&lt;br /&gt;
a8KNaTqp4FdZ1iTwTsfpp7NAkkI9AIuKtm2jzc5MRYVJ2e98UFzMVkSdpcKv2JHcs0GWijD3R0mJ&lt;br /&gt;
kyHih7fEdLboFuQLK3wlyETG1AViKojKy9ldN2UKt2/IkMaiO2jdD8HPlRRkqQCcMcPUUhEnUNME&lt;br /&gt;
sVQsXswiV/q+sjJ2o7v7pzDre1K0KlExeDAP4rq4CpN8Xp2oUIovuDjxFIAzs6mp4WhrIrao+H0/&lt;br /&gt;
YCYqtm3jQcNPVLRpw1H9HToAl15q3l65iE1ExaJF7GaZOJFFxc6d+kHE5AbUdQYiKoLMsVddxefb&lt;br /&gt;
O2uaPZtnVNOnm+XtA/6D4L59HIgX5o5wr4jpx+zZTpEpCcKS8tNCrkRFlNgMNx07crnuF190XpP7&lt;br /&gt;
J4qwluMZ5M4rJEsF4J9WWlfnZAG46dKFZ6BB96yJ+wMIL7eey8FD+iW3+8M0u6dbN77mTEVF3HN8&lt;br /&gt;
3HHRLBWA/8TArw+SyYa4zU0sFQcOcN8U1VJhgttS4U4P1o0NW7bwtZMrl5gprUpUELG1IpeiYu1a&lt;br /&gt;
HsDjxFMAPLj36ME3xFtv8YXiV4DHb1VTHRKkGRT0M24cf++nP23e3qIi7ihNRMX8+bz9Mcc4KbI6&lt;br /&gt;
F4iJqNBZKvbs4TiXoLUmPv1p3rfbWqEUWwTEhGpKaSnHIXgr8oUNCoJ78SsdNTUsfmR9jVGjeEDy&lt;br /&gt;
ukBWrGiazhmEiArv4L15M4tE06p/bs4/n1NfpSBZVRXPHKMgy58Hlc8vNFFRUeHv/tCtYAmEp5Xu&lt;br /&gt;
3MnC1i8Y1URU5Nr9If2Su6/ZssXcvTVhAt//hw9z0PH//I//tnHP8fHHc8zRkSPhi4kJfvEpfu6P&lt;br /&gt;
nj35vn/7bb4X/c6Re8IRdd2PKMiiYosXN14kTGcRS6PwFdDKRAXAs+YPPmj6elxRIUo5rqUCcGpV&lt;br /&gt;
vPWWs3iOjrBIfjcyM/VbbVQIC47SYbr+R1UVz+w6dXJEhW7GbGqp0Lk/wtrfvj1bYh5+2EnrW72a&lt;br /&gt;
faRxRAXQtFMKM18LI0aw+fbAAf374icVIVhc3DRYc9s2jgvyc5HpGD6cz5c3AyGqxcPN+eez33zO&lt;br /&gt;
HBY5L7zA9WCioCs77KXQRMXQoRyLcvhw49e9i4m5EX+3H2HxOEFZC0KuRQXQtMz9Rx+ZD1LHHsuW&lt;br /&gt;
iltvBZ58srFVy0vcth93HE8sli3jY3j4cHaWCp37Q9JKJeYubL9SrwRIzlKxeTP3YW5RIefFa6lo&lt;br /&gt;
VaKCiAYT0Z+JaDUR7SWiFUT0w8x6IIkh9QK8QU9xRcW8eezbyuaG7t2bL5KFC4NFRZs23HGZiIr6&lt;br /&gt;
ep45m8ZKRMF0pdL333cGv+7d+caLa6nwc3/4BWm6ueoqHggkDXLOHJ5R6oqghbUBaNophQXaCSNG&lt;br /&gt;
8PM52SEAACAASURBVHXnF7C6bJkTeyF4TbxiUo4qKoCmgi4bUTFiBO/3xRe5GFavXmhU3daEsEXF&lt;br /&gt;
DhzgY1tIomLQIBan3kJmQYF5YfVlwtaNCbNUKJWMqHDXedm9m+8300FqwgS+T37xC2elWz/iCkdx&lt;br /&gt;
D777riPIg7I/gOiWCsCZmAWJhO7dWdTs2ZOsqOjRg9vf0NDY/VFayuNDqxYVAEYBIAD/CeBo8Gql&lt;br /&gt;
1wH4SZJfWlbGJ8Q9Ozp82L/8tvezO3c2Nn9nE08h9O7Na2MoFSwqpA2moiKp5W5NFxVbu7Zxeqxf&lt;br /&gt;
BohJW/3cHyai4sQTefb/k5/wMZ49mzskPzeTH36DYBT3B+DvAlm2jGfCbhPrSSexGJDsivnz+TeH&lt;br /&gt;
WaDcJCEqALZWPPMMFyK6/vrovtswUWFSvjnfSE0Pb62KMEtFWEppNqJi5062GiUhKsRSIe03dX+I&lt;br /&gt;
6L38cuBHP+L+VleITpZHiHOOS0rYHVVZCUydyvV4JBjfj6iWCsC514ImPu4JhwRAJxEg6W6D21Ih&lt;br /&gt;
2Ymt2v2hlJqllPoPpdQrSqm1SqnnANwN4PNJfq8uLkEqWppYKtyfbWhg03TceAp3m3bv5gszrDiN&lt;br /&gt;
aQGs7duTExUm7o8jR3ggdKegBYmKJC0VRMBPf8rlyF94IV48hbQB8LdUhLk/+vXj9gaJCm8Wiqzb&lt;br /&gt;
8q9/8eP8+Vx+PiiOxEvXrnyNJSEqNm3iqPPrr4/++TBRUUjVNAU/UZGNpcJvPSKhUyc+336iwqTM&lt;br /&gt;
dRzc7g8RtaaDVL9+wBtv8MKPkvaos1aI0Ijb9uOOA2bN4mypOXOcdYL80FkqDhzgYOtsLRUAX8tz&lt;br /&gt;
53J8UZjVJA7ShrIyfU2U1m6p0FEKIMDDmj1+UbJAdFGxfDkPrrkQFQDPqIPSKmVbU0tFEoFCgJmo&lt;br /&gt;
EBeTOwVt+PDcBmqaxFQIF1zAA/S113IHmYSoCLNUELHlJkhUeEVl3778mqw5MX9+NNeHoMsA2bw5&lt;br /&gt;
Wl0JL2ecwZkgl14abz9hy58XoqgoKeHz7F1sK8hSITNIvyyXMFFBFFwAKylR4XZ/xKl5cMopbHU7&lt;br /&gt;
6ij+DboA12zP8VVXcY2ZV14xSz3WWSrkeZilIiymQvb11lv825NA+km3lUJwi9cjR/jctWpRQURH&lt;br /&gt;
AfgGuEx3YugsFVFFhZw4icrPdm0WaVOY60PaYCIq0rZU6Er6DhvGnbF7/YuGhuBlz4XSUp5NuKv0&lt;br /&gt;
mVoqAO7U7rqL29WmTbTVNIXOnXnG6O2Udu3ifZqY//0yQA4eZMGls1RNmcJFsfbu5dleLkTF/v08&lt;br /&gt;
mGdjqejUiTvzX/0q3ufbtOFrqTmJCoCtFVEsFeXlfLz9slz27Ik3wxYkviPXA4jX/SEZIVHp2JFn&lt;br /&gt;
7jpRYVJePIhzzwWeeMJ8AqUrJBaWrWHi/pD3PvqIA9RN+vI4yPHXrTbrdn/U1vJvbBGigoh+RkQN&lt;br /&gt;
AX9HiKjC85n+AF4E8JhS6n79nnODX0ALEK703SuVAhxPMWJE9oN3UqIiTUuFn6iQJdCFHTt4Bmci&lt;br /&gt;
KmR7wTSmQjjhBA4mPOOM8E5cB5G+VoUUvjKp0eAnKlav5tmFTlSccQZ3yLNm8fGLIyqk+Jgg5uxs&lt;br /&gt;
RAXA12w2Zl5JkdNRW8tCLU6GUpJ4RYWs7RFkqQD84yrCLBVA8PofmzezRSDXgYG9enHb9u3j66Ws&lt;br /&gt;
LNyS6sfIkXr3R76FY2mpU6xO0K1Q6qZ7d75/dCtHu/cLsMg+dCg5UWFqqUirmiaQzNLndwN4IGSb&lt;br /&gt;
j43gRNQPwGwAryulvmr6JdOnT0eJJ9Ju2rRpmDZtWuDnioqaLje+datTpCaI9u158HCLimyDNAHe&lt;br /&gt;
xymnmIsKKekdNIglGahpIio2buRZvbuzkKDN5cud4EHTnG53Wp3sc+9es7LBbh56KLjccRg682lY&lt;br /&gt;
SqCbESN4QNq3r3HRLpnF+YkKAJgxgwWxd4E4E4YP58FHrDtxC1/lmqCqmlJNM06l2iQZNKhx7ZDd&lt;br /&gt;
uznYO8hSAXC/oVvXZ/fucFERZKnYtMm8bHsU3Ot/RKlRoWPkSH1aaU2N2bofucLdj3jdb0H95Qcf&lt;br /&gt;
BBfZa9+e33/xRX4Mqg+UDT16AD//OXDxxU3fc8dUiKh4++1K/PSnlY222xG2kEyW5FxUKKXqAASs&lt;br /&gt;
yeeQsVDMBvAugK9E+Z4ZM2Zg4sSJ0RuIpnEJUQJaRA3u3MkdS9Q0Oh0VFRzUZPr9hw+HWyKStlSE&lt;br /&gt;
pZRu2sSdkDugcNAg7kAWL+YgP8BcVOgsFVHcH0JxcbQgR107dKLCZHEvwDGlLljA4qBjR8ff3KWL&lt;br /&gt;
fpAvL+eZyWuvcWcVZ8VOEXGrV/P3NhdRUWiuD4AtFU895Tz3W0xMCKuEa2KpCBMVUcW1CW5XcZQa&lt;br /&gt;
FTpGjQL+8AeexbvT3JNIhQ1C14+EWSoAM8tmaSlbYU8/PZlUfoD7iptu0r9XVsa/a/9+R1T8539O&lt;br /&gt;
wze/2XiiXVVVhUnZ+uwDSLNORT8ArwJYB+AmAGVEVE5EiRtsvBkUcUTFyy/zDXLhhcm00Q+vC8aP&lt;br /&gt;
tFNKdesEFBXx4Lh4sfNaHEuFENX9kQt0oiJshVI3Yok48UQeSK69lp9LkKbfbFMCS+O4PoCmaaWb&lt;br /&gt;
N3PHl0SEehSCRIUI00Jj4EDuP/bt4+d+i4kJPXvytZ+N+yMNUeFe/yPbTIKRI3ky5A0Wzrdw1PUj&lt;br /&gt;
9fVsAcy2L5E+LKkgzTDciQRbtphZ35MgzUDNswEMA3AWgA0ANgHYnHlMFJ2lwlQti6h47jlgzJho&lt;br /&gt;
5ZJzgcn6H1JKOklLxb59TasKuvHr6MaM4TVBhKiWCndnECX7I1f4xVSYuj/Kytji8NhjwNe+xjUe&lt;br /&gt;
qqvZJRSUTiwukLiiok8f7mDcoqJPn/RdC336OPE3XhYt0vuO00ZWdZVVXsMsFeJyDbJUZBuomaSl&lt;br /&gt;
IlfuD6BpsObWrfkVFX6Wiu7ds78XZN9JxVOE4R4b0konBdKtU/EXpVSx569IKZWFcdqMbC0Vmzfz&lt;br /&gt;
6p5R1szIFSaiIixFKltkAA1as8FvmeSjj2ZLhaTX1dc7KXNBiCUgW/dHtugsFSZrDrg59VT2id55&lt;br /&gt;
J4ui3/5Wn07q5qyzWJCdfXa8dhOxm03WhMm2RkWuGDoUWLOmabrl7t3sqvFbEC9NvLUqwiwVQPD6&lt;br /&gt;
H6aWCr8y3RJTkWs6deK/XLg/+vblfsMbrLl2bX6vQz9LRS76SpkYnXRS9vuKg5yfBx/kPrbViYo0&lt;br /&gt;
8c4a1q1zZh9hlJVx0E7UhbhyhS57xUu+REWQCyTIUrFrlzPLq6/nGz0sqry4mL/Xa6koBFER1y/c&lt;br /&gt;
tSu7P+69lzvuIFHRoweXcdelkply6qlsJQEKS1Ts3t10XRJxkcUJSk2aAQP4UbKY6uqc9Fg//Nb/&lt;br /&gt;
OHKErYpx3R/79vE9lISlAmCxvGYNf082gxQRX99uS8WWLcCHHzpWuHzQoQPHJLmPZa5q+vTowW7G&lt;br /&gt;
fC81LvTrx+vv3HcfT3rTch22SlFRVsYdwZEj/Fhfb172uKyMZ1W9evkvUZ4kuuwVL0mukgeEi4oD&lt;br /&gt;
B1h0eWMqAGdQlEFj5UrzDtGdVqdU4cRUZBNsdsMNTtn3sGqq2TJ5Mrs/Nm4sLFEB8MDlZsECHoiy&lt;br /&gt;
EVFJ0aEDn2+3paJHj2DzuZ+lYs8efjQRFbt2OYviCRJwm5So6N2bxSyQ/SDlFRUvv8yP55yT3X6j&lt;br /&gt;
4r2HcxXUfsstbCVIi6Ii4P77+Tp79FHgjjtSakc6X5suvXs7ueVSM0CX6qVDBo8LLsguiyAbwqpq&lt;br /&gt;
pm2pkBoIuo5uyBAWAosW8Tl44QUuYGOCuzM4eJBTQ9OKqRBz/aFD/DyuX3jAAOCSS/j/KOt5xOH0&lt;br /&gt;
0/nxX//ic1TIomLhQp71pRFoZoK7VkVdXXiNCL/1P6KICqDpPZd0Fo9bVGRrTh81iicTEov10ktc&lt;br /&gt;
ODDfM3uv1SdX7o+jj45XVC/XdO0KTJuWnpWvVYoKd5RsXFGRhuvD3QYTUZGUpULiG/zSSnWFrwR3&lt;br /&gt;
Bsj77/O2phk0br/y3r38mIal4vBhJ54k27ULAM47f+CB5AVSWRl37LNn8/VTCKKie3c+r97y7QsW&lt;br /&gt;
FGY8hTBokOP+2LYtPItm6FCOH/AGN4uoMAnUBJq6QILutVzgnsBka6k4/3y+f598kicEL78MnHde&lt;br /&gt;
9m2MSlKWCgvTKkWFOy1zxQq+WUyj9086CfjhD4FPfSqx5oVy1FHAO+/4F3HKVYqUHxKUqFt1EHBW&lt;br /&gt;
6fPr6I4+mi0Vzz3Hx910CXK3+0M643yLCulYxRqTi3UX+vcHvvzlrJplzOTJwNNP87VTCKICcII1&lt;br /&gt;
3SxcWJjxFEJUS8WYMewW9KZUmloq5FzJvSVs2sTumKSsknKvt22b/cA7aRK7On76U16IsbbW3EqZ&lt;br /&gt;
S5KyVFiYghAVRNSOiN7PlPFOqBaZg9dSEcXs3LEjcPvt0Zd5ziVXXsnBpbNn69/PVYqUH50783Hw&lt;br /&gt;
s5Zs2sTBUH6d0JgxbKl47jnuZNq1M/tenaUi3+4PiRORzj2pxZySYvJkJyiyUEWF5NkXsqVi4EC2&lt;br /&gt;
VCjFAjPMUiECSVwJgli8wq5jdzVaN5JOmtS9LhOwsrLcfMdtt7EVavp0tnimkSlhLRXJUhCiAsBd&lt;br /&gt;
AKoB+Kzjl1u6deOBTCwVSfuyc83JJ7ML4c9/1r+ftPImCnbBSOErv07o6KPZdfLOO9GKh7ktFWm5&lt;br /&gt;
P8T6ImbnbBdEyjeylDpQOKJi2LDGokIG3kK2VAwaxILg6qt51h2WwVBW1jg+QTC1VHTqxELGKyqS&lt;br /&gt;
SicV5LrOVSbBaacBn/gEVxD+5CeTqzwZhNtS0dCQ7OKLrZHURQURnQ8uhHUjgLyU4iFyfIXNUVQQ&lt;br /&gt;
Addcw6WCdS6IfNwkYaIiyMc7Zozz/wUXmH+ne4aRlqjo0oVFqVgq8r12Qbb06+csRV0o1pWhQ9ny&lt;br /&gt;
JpkNCxaw6C/k+1JqVTzyCIv7L30p/DNjx8YXFQDXGdGJiqTiKQDH/ZGrmgdEbK0A0omnABr3Izt3&lt;br /&gt;
mi1oaDEnVVGRKcn9vwCuALAvn99dVsYm+J07C7vz8uPKK/lmeOSRpu/lKu86CL9odiC8oxsyhN0n&lt;br /&gt;
xx8frbNyuz+idMa5pl+/xpaKQhmcTTn9dD7ubZJYTjAGQ4dyFo0c04UL2RJXKO3TMXYsxwPMnAn8&lt;br /&gt;
x3+Yf8ZPVJisLZGGqBBLRS4LKZ13HgdrXnll7vYZBbelIulMudZI2paKBwDco5San+8v7t0bePNN&lt;br /&gt;
/r85iorevYHPfAb44x+bDu5pWyr8qmkKRUXA5ZcD118f7TtLS1kENjSkZ6kA2LXjjqlobqLi+99P&lt;br /&gt;
N5/eizettNAzPwAOMH7ppWiWtrFj2TIqdUkAFhVFRWaLxFVU8OfdAdpJ1xvJtfsDYGvFRRelF5fm&lt;br /&gt;
tlQkXdOnNZLzuQAR/QzAzQGbKACjAZwHoAuAn8tHo3xP3KXPBSm3DTiLLTU3vv1t9ksOGsS1Dn73&lt;br /&gt;
O1bh9fXmKbJxKSsD5szRv6dbTMzLn/4U/TtLStg6s2tXuqKiXz8nBbI5ioohQ/ivUJC2rFnDgXsL&lt;br /&gt;
FwKf/WyqTUqEsWPZxbNsGTB+PL8my56bBEFWVLAgqa7me37vXh4cm5P7oxAoKeE6N/v3c5ov4FRJ&lt;br /&gt;
bWlUVlaisrKZL30O4G6wBSKINQCmADgZwAFqfEfNI6K/KqWuDtpBNkufA44C79ev+fjDvZx8Mncw&lt;br /&gt;
993HfspJk4BvfjNdS8Xu3WxNSKKjcy8GJGbjjh1z/z1h9O/vlLveurVxjIglOh078kx4zRqgspKv&lt;br /&gt;
oTTrwCSFXCcLFzqiwmTdD6Gigh+XL2dRkXQ1TYBn8JdfDpx5ZnLfkW/cixMuWsTpwC1JNLnRTbST&lt;br /&gt;
Xvo856JCKVUHoC5sOyL6LwC3uV7qB2AWgIsBvJPrdnmR2WVzdH246d4duPFG7ow//JBfy0dMRVkZ&lt;br /&gt;
d4jeTlHqNyRhknV3Bnv38mAUtmZIEkhMhVL5X7q5pTJ0KNdw+Mc/2KVQiOW5s6WkhAM83av0RhEV&lt;br /&gt;
Q4ZwnMny5WyhTLrwFcAWFF3cVnPGvajY4sUs9tJerbclkVoolFKq2v2ciPaAXSCrlVJ5Wf4caP6i&lt;br /&gt;
Qhg3jn3RDQ08k8+HpQLgQdXdKUo2ShIDrbszSGMxMaF/fzaf1tU1T/dHITJ0KPDMM+za+vWv025N&lt;br /&gt;
cniDNaOIijZt2FUrwZpJl+huqbgtnosWpbdUeUsl7UBNL3mpUwG0HEuFMG4c3yASyJgvUeF1gYio&lt;br /&gt;
CCsGFAev+yMtUSEzw5Ur2VRvRUX2DB3KgmLCBGDKlLRbkxxjxjQVFSaZH8LIkY6o2LSJrXWe0DJL&lt;br /&gt;
CHK86uo4vsW6L3NLwYgKpdQ6pVSxUurDfHxfS7RU7N0LVFXx83y4P4CmokKqNSYhKqQzqK/nKPg0&lt;br /&gt;
LRUAr10CWFGRCyQD5MYbW7YpeuxYjh2RSpoSqGmKO620ujrZapotFZmczJ/PpdNboqstTQpGVOSb&lt;br /&gt;
sWOBSy91Vm5s7kgK3r//zY9JWyokKlxnqeja1bz0dhQ6dODUu5tvBh57DPjqV3P/HSb06cMduRUV&lt;br /&gt;
ueOCC4CbbgIuvjjtliSLDGCyBHgU9wfAomLNGk5pfvDBwlgVs7nRtSvfv1JSwIqK3FLA5WWSpUsX&lt;br /&gt;
Dm5sKfTpw9YByUpI2lLRti1/n85SkYSVQujZk2d3Tz/NdTrSoG1bFhIiKmygZvb07curtbZ0xHUm&lt;br /&gt;
tWX27AlfjMxNRQW7N7/wBQ4Uvuuu3LexpVNUxFVx33qL+8lc1uCwtGJR0dIgYmvFW2/x83xUiNOl&lt;br /&gt;
lSYtKp54gjuBYcOS+w4T+vVzsm2sqLCYIteKW1REtVQAwNy5wF/+Yq1kcSkt5dLwn/iEdR/lmlbr&lt;br /&gt;
/miJjBsH7MsUO8+XqPBW86ytdVwjSXDKKekLCoDjKvbt4+OchKvH0jJp145nxyLGowZq9unDsUXn&lt;br /&gt;
nJNemeuWgMRn2SDN3GMtFS0Iiavo3Dk/q//5WSrCqmm2BMSMbWeKlqi4xXjUQE0i4OWXOcDczrDj&lt;br /&gt;
I5MuG0+Re1K3VBDRhUQ0l4j2EtE2IvpH2m1qroioyNfiODpRkbSlolAQ4WRFhSUq5eWNLRVRK/qe&lt;br /&gt;
cIJdqyJbxFJhRUXuSdVSQUQXgVcpvQXAbABtAYxNs03NGTHl5avDSSOmolCwlgpLXNyWijiiwpI9&lt;br /&gt;
MvGy7o/ck5qoIKJiAL8G8N9KqQddby1Np0XNn65dOd8/n5aKmhqORi8q4mj01iIqxFJhgzQtUSkv&lt;br /&gt;
51oThw9zZVYrKvJPSQn/2WqkuSdNS8VE8HofIKIqAH0AvA/gO0qpRUEftPhz2mn5Ww+jrIxXXayv&lt;br /&gt;
ZyGxaxdw6FDrcH9YS4UlLmLhk0XxogRqWnLDFVdwrSIbl5J70hQVw8BrfdwOYDqAdQBuBPAqEY1Q&lt;br /&gt;
Sm1PsW3Nlvvuy9+N4q6q2bNnstU0Cw0bU2GJS3k5W/h27uTn1lKRf048kf8suSfnooKIfgbg5oBN&lt;br /&gt;
FIDRcIJE/0cp9XTms1cDqAbwRQB/Cvqe6dOno8RT9F63zGtro00eZaIsF7x1KzB6tLPuR2uwVPTs&lt;br /&gt;
CXz968DZZ6fdEktzQyx8GzbwcysqLElRWVmJSk+Vxx07diT6nUkMQXcDeCBkm9XIuD4ALJEXlVIH&lt;br /&gt;
iWg1gEFhXzJjxgxMnDgxdiMt2eNd/6M1WSqIgN//Pu1WWJojIsbXrOFHKyosSaGbaFdVVWHSpEmJ&lt;br /&gt;
fWfORYVSqg5AXdh2RPQegAMARgJ4M/NaWwBDwK4QS4HTrRsX82mNosJiiYuI8dWr+dGKCktLIrWY&lt;br /&gt;
CqXULiL6fwDuIKJqsJC4CeweeSKtdlnMIWqcVlpby0sxp7V6qMXSHPBaKmygpqUlkXZFzRsBHALw&lt;br /&gt;
EICOAN4GcKZSKlmnjyVnlJcDmzbx/60lndRiyYYuXXjFXWupsLREUhUVSqkjYOvETWm2wxKf0aOB&lt;br /&gt;
hQv5fysqLJZwxMJnRYWlJZJ6mW5L82b8eGDBAi6A1VpKdFss2VJeDlRXA8XFdkE6S8vCigpLVowf&lt;br /&gt;
z0V8Vq2ylgqLxZSyMq5A27mzLcBkaVlYUWHJivHj+fH9962lwmIxRYI1bZCmpaVhRYUlK8rKuH7+&lt;br /&gt;
Bx9YS4XFYoqkldp4CktLI1VRQUQjiOhpIqohoh1E9BoRnZFmmyzRGT/eigqLJQpiqbCiwtLSSNtS&lt;br /&gt;
8TyAYgBngBcY+wDAc0RkV1RoRowfD8ydC+zbZ90fFosJ1lJhaamkJiqIqCeAowDcqZRapJRaBeAW&lt;br /&gt;
AJ0AjE2rXZbojB/vrPthLRUWSzjWUmFpqaQmKjLlvJcCuIqIOhFRGwDXA9gC4L202mWJzoQJzv/W&lt;br /&gt;
UmGxhCOWChuoaWlppF1R82wATwPYBaABLCjOsxU1mxcjRnCFwP37raXCYjHBWiosLZWcWyqI6GdE&lt;br /&gt;
1BDwd4SIKjKb3wMWEp8AcDxYYDxHROW5bpclOdq0AcZmHFZWVFgs4fTsCRQVWVFhaXmktvQ5EZ0F&lt;br /&gt;
4AIApUqpPZnXv0FE5wD4EoC7gnYwffp0lJSUNHpNt8yrJT9IBkjXrmm3xGIpfIqL2VVoRYUlSSor&lt;br /&gt;
K1FZWdnotR07knUEpLn0eUfwiqQNnrcaYGBBmTFjBiZOnBirjZbc8/nPc2VNWx3QYjHjttuA449P&lt;br /&gt;
uxWWloxuol1VVYVJkyYl9p1pxlS8BWA7gIeI6McA9gG4FsAQcKqppRlxwQX8Z7FYzLjhhrRbYLHk&lt;br /&gt;
nrSzP84D0AXAKwDeBXAKgKlKqQVptctisVgsFks80l76vArA+Wm2wWKxWCwWS25Iu6KmxWKxWCyW&lt;br /&gt;
FoIVFRaLxWKxWHKCFRUWi8VisVhyghUVFovFYrFYcoIVFZbU8RZnsTRv7PlsedhzajElMVFBRLcS&lt;br /&gt;
0RtEtIeItvlsM5CIns9s8xER3UVEVui0MmyH1bKw57PlYc+pxZQkB/C2AB4HcK/uzYx4eAGc1noS&lt;br /&gt;
uDT3lwH8KME2WSwWi8ViSYjERIVS6g6l1G8A+BWyOhfAKACXK6UWKKVmAfg+gK9nlkG3WCwWi8XS&lt;br /&gt;
jEjT1XASgAVKqVrXa7MAlAAYk06TLBaLxWKxxCVNi0Af8LLnbra43vvA53MdAGDJkiUJNcuSb3bs&lt;br /&gt;
2IGqqqq0m2HJEfZ8tjzsOW05uMbODknsP5KoIKKfAbg5YBMFYLRSanlWrQpmCABcccUVCX6FJd8k&lt;br /&gt;
uWqeJf/Y89nysOe0xTEEwJu53mlUS8XdAB4I2Wa14b4+AuBd+Lfc9Z4fswBcDmAtgP2G32WxWCwW&lt;br /&gt;
i4UtFEPAY2nOiSQqMiuL1uXou98CcCsR9XLFVZwDYAeAxSFteDRHbbBYLBaLpbWRcwuFkFhMBREN&lt;br /&gt;
BNADwGAAxUQ0PvPWSqXUHgAvg8XDw0R0M4C+AH4M4PdKqUNJtctisVgsFksykFIqmR0TPQDgKs1b&lt;br /&gt;
U5RS/85sMxBcx+IMAHsAPAjgu0qphkQaZbFYLBaLJTESExUWi8VisVhaF7YktsVisVgslpzQrEQF&lt;br /&gt;
EX2diNYQ0T4imktE3uwRSwFCRLcTUYPnb7Fnmx8R0SYi2ktE/0dER6XVXktTiOg0IppJRBsz52+q&lt;br /&gt;
ZpvAc0hE7YnoD0RUS0S7iOhJIirL36+wCGHnk4ge0NyzL3i2seezQCCi7xLRO0S0k4i2ENFTRFSh&lt;br /&gt;
2S7xe7TZiAoiugTALwHcDuBYcHGsWUTUK9WGWbQQ0XGZBeV2g8/ZSnDKcJ/M36mubW8G8A0A1wI4&lt;br /&gt;
ARxfM4uI2hl8z4NEtCtHbX6QiNbkYl+FChH9MDNA9Ij40c4A3gfwNXA9Gu9+Tc7hrwFcCOAiAKcD&lt;br /&gt;
6Afg70T05UybBkX+QQbIb/a8tpaI7k/i+woNIpqcOb6nu14OPJ8ZXkTje3aa533t+cxh0y3mnAbg&lt;br /&gt;
dwBOBPBJ8NpbLxNRR9kgm3s0UkuUUs3iD8BcAL9xPScA1QBuSrtt9q/JuWoDriOyGMA1AJ4E8H7A&lt;br /&gt;
9psATHc97wZgH4CLDb7rAQA7c9TuBwCsSvv4BbSvI1ignZ7FPm4HcARAjyz20QBgapRzmHl+AMDn&lt;br /&gt;
XNuMzOzrh5k2DUrouN0O4LDntdUA7kv7nObpupmcOb7a68bnfD4A4B8B+ww6nyek/Ztb+x+AXplz&lt;br /&gt;
carrtWzuUeNz2iwsFUTUFsAkAK/Ia4p/8T8BnJxWuyy+DAcwCMAvlFJ/Bi8qNzxjal1FRI9kMn9A&lt;br /&gt;
REPBsyD3ud0J4G3k/9xeA17krlDpBB4gz0i5HY0wPIfHgcWme5tlANYDSNrV9WPwsXMzEjxjs/hz&lt;br /&gt;
RsaUvpSI7vFYtybB/3zaPjl9SsEWqG1ATu5R43PaLEQFWHUVQ79WSJ/8N8cSglRG3ZF5nAte1v5c&lt;br /&gt;
ANcBGArg30TUGXz+FArg3CqljqjCrpFCaTfAh0bnkIhkAHefw3IABzMdmZst4EUEE0Mp1aCUOuh5&lt;br /&gt;
7ZBS6kiS39vMeRFcEuBMADeBrR0vEJFcg33gfz5tn5wimXP0awCvK6Ukds2knw26R43PaXMRFZZm&lt;br /&gt;
QqY+yavgC/jJjC/7ZqXU3wH8HsB3/z97Vx5fVXWtvxXCEAwEQkgYwiAgoNYJVBzqgLNtxVarNWrr&lt;br /&gt;
UNvX1mpLn6211Q62vvpsLfra2kltHbFqa0utVXEW1KpEEBlE5kEgQEJISEgI2e+PdZZn3333Offc&lt;br /&gt;
m3vvybC/3y+/m3vuGfbZZ5+1v/2ttdcG8AkAgwFcKIcBeFM7xxjvt0lE9CUiWklEe7xApCMjlOFw&lt;br /&gt;
Iqohohe0Dg5EdDYRvewFM9V756vSfk+KqSCi67zYkO1ecNPbRHR+xLr4OBE9SkTrvPKvJ6JfElE/&lt;br /&gt;
Y7+XiOgFy/EflcerkxpwvUpcRDsR/UDb/xQiepWIGomojoj+TkQplRciGuPV8btENFTbfoF3v01E&lt;br /&gt;
tI2IHiCiEWYZwYohADxERLsAPKjtMoSIngZwN4B+3r0eF6FMM4joSU/d2uOV70YiSrJZRDSNiJ4i&lt;br /&gt;
olrv3hcR0bXa7xnHVBDRRV4dSJt5V85NRPt7z+AbluOO8377nLbtZO9czUT0ARF9OaBs7UT0f0R0&lt;br /&gt;
LhEt9u7/PSI609hvtKcgLPee0XavvY2JcF/W+5e2qJR6VCn1pFJqiVJqDoBPgf3wJxPR5QAecevW&lt;br /&gt;
rQAAIABJREFUAg/09GO/5+0zLtX1HXKKuwAcBOCiOC7eVUjFdrBPsMLYXoHwdUIc8o/fAbgFTBTu&lt;br /&gt;
BHCp9x3wAsKUUvUAVoBl7y3evr2SzgSMBHCdd87vg/PV/5WIbPsCAIhnBD0PYAGAs5VSTd72ywE8&lt;br /&gt;
CZYF/we8MN47YPVEoJActHYtgGoAN4EJ0V4AjxLR2WGV4OECcBzEXeAAqacBXAPgPmO/oEA5vTzb&lt;br /&gt;
wCoPAfgbuF4v9f4HEZ3mnb8M7CK5HcBxAOZRSAAkEY0H8AqAnQBOUkpt87ZfDuAv3v1+F8AfAJwH&lt;br /&gt;
4FVLGXuBbUkDgP+GH9g1CTzSLQb76BWYTL6gkcMK+IqWjsu9890OfgZvA7gZwM+M8p8O4GWw2+oO&lt;br /&gt;
AN8C8AI42Ewvo1nHKRP0eOd+GLw0wXfAbeZFcL1CKbUGwHzwWkQmLgGwC8A/vHMdAR79Dwa3pXu8&lt;br /&gt;
z3MDynICgN8AmA3g2wD6gkn6YG2fowAc4+1zDTiR4KkAXjSJqwVhbS55I9/rdgATlFJ/Bi+z0JuI&lt;br /&gt;
Jnn3dwiAHwBoRA5TQDuEg4h+DR60nayU2qz9JHY2rA/dAqAPEQ0M2Sc14g4oSSPwxBaouQHAt+Mu&lt;br /&gt;
m/tLelYngYN7zjO2vwg2+MVgX9/V3vYmADu0/Q4GG7d6AAO17eeAyeUntG0fBWoCOB7cOf4DQG9t&lt;br /&gt;
n4HeueYD6BNS7j8BWG1s62t87wXgXQBzI9RDX8u26wG0Aag06yVVeQAM8er1B5Z93wGwGUCJtu0Q&lt;br /&gt;
71p/0rZ9FKgJ7og3gjsI/bhCz4gs1OsLbKzaoQX2eWXcByYAZhBYO4AF2vcWMNFaBSZAgYGaAXX3&lt;br /&gt;
W+86vb3vBeCAy1UABoQ8hx8C2GdsWwPg3hTPbxaAuhT7fMkr+0Sj/mqgBYICmOOVvULbNg5Aq6Vs&lt;br /&gt;
7eAAurHGs2wH8LUUdXS0t98lxvuYEKip37/xPIPaYqV3jk9538eD39Fq8EyDarA9doGaMf2BleAN&lt;br /&gt;
AMYF/B4UqHmB9r1nBGp6+CWALxHRFzxJ93fg4Ks/x1oqh5Qgop8TT2frC264T4BHwI94uywBMIiI&lt;br /&gt;
zvFGPL/0tj+gEv17r4LJZJK8SkQngzuquQDOV4mxEaeDicytyvCtp4JSqkW7xiDwSPNVAFPSPLY/&lt;br /&gt;
EQ0Bd+AF4GnRWQERDQNwGJg8fDTqV0otBtfHJyyHHQJ2U60GcLp+HDhgqxzAXVJfxPEvm8CdEQEY&lt;br /&gt;
R7yej7iX/g/Ajdoz/Ie33/95990b7Bb5BXhW0EkA7gUTvQSXk1d2ve6KvXPM864nLp0jwOrVHUqp&lt;br /&gt;
rEwrNrATwH6m28HAo2BDrKsVZ4EJ4IMA4LlsTgXwd6XURz5tpdRqsHphw1yl1Fpt38Vg5WOctk2v&lt;br /&gt;
o0LiQMrVXrlTtU8CMJiIDve+y/PsC6CAiG7z3EpjiOhUAH8Hq4vPeNdeBW5bMr3/UO+685VSb8Ih&lt;br /&gt;
ryCiu8Bt8GIAu4mowvvTFas7kPiO3g8eVPwD+Chw8x4Av/RcdVPhvaPpPNOcLSiWbSilHiXOSXEz&lt;br /&gt;
WI5ZCOBM5cm1Dp0alWAZeTiYTPwNwDGKV5wFgPfArpDfg90Tb4FHQev0kyildhLHiekSMMAuhn+B&lt;br /&gt;
JfLPqeS1Y8Z7n0vSLTgRfQrsejkcbHAFKdenIZ7h8hOwwqKXWSG7wYniQ19h+W0ZgDOIqEgp1SxF&lt;br /&gt;
A/BPsBpxlvJcRMb5lHG+I8GjWAnUu937XAWervl9ItoL/xmu8M7xJ+PcBJ4ZBPBo/r8AJLmSiOgg&lt;br /&gt;
sNtsOpiICvS6k9Fy2s81Iu4CKytPEdGH4EUQH1VKfbRktFKqnoj+CTbmP/Q2XwJgk1LqRe97ObiN&lt;br /&gt;
rrRcw7YN4BGniTpo7cjrML4HdhWNhP9sorSvvgA+DWCGt788zxoA74NJwhfAz/JDMJn4gUHWzwGw&lt;br /&gt;
HMCB4Pd6OYCrU1zXITf4Cvg5vmRsvwJMHqCUuo04xkze0VfBLmJ9oDUTrEg9Dm4jTyPNZ9plSAUA&lt;br /&gt;
KKXuAr/oDl0ISqkqACAvGFEpdbGxSy+wzDzO228MePQaFJ1vzoLYA+ApsH/6bDDB6DCI6AQwi38J&lt;br /&gt;
wFfB7oW9AK5EciIg89gCcADjIHAcwPvgZDMjwTEVukoY5N8OjB3pIBTYaFwGjsv4Q8oDlHoZPIL9&lt;br /&gt;
G4DjlVIVwEeBucO8fX4EdmVIsrrZ4BiLRQGnfVkptY8o8XESUQn8OI8bwaPvPeBpjLciT7FgSqlt&lt;br /&gt;
3kj+THC7OhvAFUR0n1LqCm3X+wF8loiOARPkc8BSdEcQpe3/GvwMZ4Hdw/XgZ/sXpK6jZrCydWXC&lt;br /&gt;
yYleAdCulDorQhn3A9APTLBfV0pdEOEYhxxAKRXpndDf0YDfW8DxOddkWpYuRSocujzqwNNJTaSM&lt;br /&gt;
Vk8BBR4dzgHwGBGdpbyVcD2sAhvjj4E7qKg4D2x8z1RKtclGIvpihGMPAXAAgM8rpR7Sjj3Nsm/U&lt;br /&gt;
egkiH6LoTLL8NhnAdk2lEHwb3HHdRUS7lFKPaL+tA9fXJCSPfCbBUJACsMr7bFBKJc1sSYGTwSPy&lt;br /&gt;
c5VS82WjF1RqXkOea7rXiATvuf/L+wMR/RbAl4noJ577AuDR3HZwG3wTrEroM2BqwKTIlo/jgA4U&lt;br /&gt;
73wAf1ZKfUc2EFFfMJFNhbqA/cbAf3apcBfYrXgDgFuJ6JtKqTsiHuvQTdGVYiocuj5WAZjs+ccB&lt;br /&gt;
AJ4f9/iOntgz/ueBXSdPUuLU02fBQXI3eEY3KvaBO/KPyDcRjQUrIlGOBZLfsW8imRxErRdxUyR0&lt;br /&gt;
BkopCaq8TI/cJqKPATgDduVGgZM/PQ7gfs/NI3gb3BF+hTjxnJzvbLDU/aTlfCYWePd1nRePkQAK&lt;br /&gt;
T6+/D0wWPqo74lTCXzP2qwYrWt/01I2sguypzBd7nx+1I8X5LmYD+BzYFbFYKfWe9ns7WLX6tBf/&lt;br /&gt;
IuefAI6/yBT7kNy+rkU0hWsVgGOISG/bnwIwKsqFieiz4Gnf1yulbgPHR/2U3Jo9PR5OqXDIJ+4F&lt;br /&gt;
T/l7lojuAcfG/BdYMjanMaUNpdQezzC+AOBpIjpJ8Tz7BiKaCeCPAN4ioofBI7XDABQZUraOf3nl&lt;br /&gt;
fcY7pgLcsX0A9jmHYTnYcN9ORJXgILvzYR8dRqoX7/6WAvgcEX0AnkHznlJqCVh5eArAG945+oOn&lt;br /&gt;
sdYB+HFAfSkiuhQchPcYEX1CKfWiUqqNeJ2Ae8FJymaDXRzXgpWelKNR79xXeWVa4rlJNoHdP9PB&lt;br /&gt;
Un0QOXvNK/f9RPR/3rZLYZAx7xpfBStUC71rbAarMwcppaJM+w3D3R6xeAEc0DYWXKfvKKWWGfve&lt;br /&gt;
D66fk8HTT038CEzwXvPUjkKwr/o9cDvMBE8C+DxxbpCl4KyHp4JVExOmy/BuAJ8Ft+1HwfEplyI4&lt;br /&gt;
xsM/ES8w9VsAz3suaYDrZTrYtdfhQYJDF0a2p7W4P/cHfwrbeZbfqsCdcjN4NHsajDU3wBLsPmjT&lt;br /&gt;
n7Tf9gG4Sfv+JwD1xj6l4BHlJmjTq8C5C14Fz6WvA8/EuNA4lzml9HIwQWgCBwR+AZYpigH1MAkc&lt;br /&gt;
4FYPzkr3W7BUvw/AF9KtF2+/aWCJvdk7zw+036aDYxHk/p4AMMk4/qMppdq2fuCOsx7AUdr2z4JV&lt;br /&gt;
iyZwnoz7AAw3zpdU/8bvhwJ4DKx8NIFJyWzwPHrZ5zIkTyk9BjwzpBEctPg/Xp0krWEB7kyfBsdg&lt;br /&gt;
7AJPr/2qcc/m2h9RppR+Bjw7Y7NX32vAuSPKA/ZfDI65GR7w+8lefTZ7z/oqAD8HsNvSxu+0HJ+w&lt;br /&gt;
XgmYcN7tta16MAk+wLJf0pRSb/s3wSmYm8C5Po4AB+M+n6JeHvfaV6WxXaZ8X5cLu+L+usYfeY3B&lt;br /&gt;
waHHg4juB89KSVoy2KF7gYjWA3haKZW19T+IqBqcb+X0NI55Aqyq2OJhHBy6HHIaU0FEJxDRHOJU&lt;br /&gt;
u+1ENMOyT+j67g4OecRw2KVjh24EL45gCLL4rL0YnsORnC1V38dMz34AOIfIi/YjHBy6HnIdqLkf&lt;br /&gt;
OIDsa7BErlO09d0dHHIKIjqEeA2NE+GvY+HQDUFEZ4Bja/pBW42xA+c7mIguAycN2gROhhWE1UT0&lt;br /&gt;
P0R0FRH9FOx+2wN2gTg4dAvkNFBTKfU02NcpK6eZ+AaAnyilnvT2+QLYP/hphL+cDg7ZxHlgcvsw&lt;br /&gt;
OA+CQ/fFd8FBid9TSnWYVIDjTm4Cx91UqfCMrf8GL/I0DJyF8zWvHFGncDo4dHrkLaaCeCW+Tyte&lt;br /&gt;
8U7Wd18F4HCl1Lvafi+Bo6tn5qVgDg4ODg4ODllBnHkqoqzv7uDg4PARiOiLRHRK3OVwcHCwo8vl&lt;br /&gt;
qfASBJ0JYC3YH+ng4NAzcCZ4+ukXiUhfMOttcJ6PV6xH8SDlSfjTdm1IdQ4Hh+6CfuCcK88of/2l&lt;br /&gt;
rCFOUqGv766rFRXgeeZBOBPAQyG/Ozg4dG/Ms2ybFeG4R1L8HuUcDg7dBZeA48iyithIhVJqDRFt&lt;br /&gt;
AWeAexcAvBTD08AJZoKwFgAefPBBHHjggbkuZqyYOXMmZs3q/nbO3Wf3Qk+5T6Dn3Ku7z+6DZcuW&lt;br /&gt;
4dJLLwW8vjTbyCmp8HL+T4CfInact6ZBrVJqA/z13VeCb/An0NZ3D8AeADjwwAMxZcqUkN26PkpK&lt;br /&gt;
Srr9PQLuPrsbesp9Aj3nXt19dkvkJHwg10rFkeDELsr7u93bfh+AK1W09d0dHBy6EFpa4i6Bg4ND&lt;br /&gt;
XMh1noqXkWKGiUqxvruDg0PXwdtvA3PnAjU1QHl53KVxcHDIN9zS5w4ODlnDli2AUkBtbdwlcXBw&lt;br /&gt;
iAOOVHRiVFVVxV2EvMDdZ/fBnj0AUOV9dn/0hGcKuPt0iI4ut0qpNz99wYIFC3pSQI2DQ5fAgw8C&lt;br /&gt;
n/888PrrwDHHxF0aBwcHE9XV1Zg6dSoATFVKVWf7/E6pcHBwyBqamxM/HRwcehYcqXBwcMgaxO3R&lt;br /&gt;
U9wfDg4OiXCkwsHBIWtwpMLBoWfDkQoHB4eswZEKB4eeDUcqHBwcsgZHKhwcejYcqXBwcMgaHKlw&lt;br /&gt;
cOjZiJVUEFEBEf2EiFYTURMRrSSiG+Msk4ODQ+Zwsz8cHHo24lz6HAC+C+C/AHwBwFLwWiF/JqKd&lt;br /&gt;
Sqlfx1oyBweHtOGUCgeHno24ScWxAP6hlHra+76eiC4GcHSMZXJwcMgQjlQ4OPRsxB1T8RqAU4no&lt;br /&gt;
AADwlkU/HsBTsZbKwcEhIzhS4eDQsxG3UnErgIEAlhPRPjDJ+b5S6pF4i+Xg4JAJHKlwcOjZiJtU&lt;br /&gt;
fA7AxQAuAsdUHA7gTiL6UCn1QKwlc3BwSBuOVDg49GzETSpuA/AzpdRj3vclRDQWwA0AQknFzJkz&lt;br /&gt;
UVJSkrCtqqrKrTLn4BAj3OwPB4fOg9mzZ2P27NkJ2+rr63N6zbhJRX8A+4xt7YgQ6zFr1iy3SqmD&lt;br /&gt;
QyeDUyocHDoPbANtbZXSnCBuUvFPADcS0UYASwBMATATwN2xlsrBwSEjOFLh4NCzETep+DqAnwD4&lt;br /&gt;
DYByAB8C+K23zcHBoYvBkQoHh56NWEmFUmo3gG95fw4ODl0cjlQ4OPRsxJ2nwsHBoRvBkQoHh54N&lt;br /&gt;
RyocHByyhuZmoKDAzf5wcOipcKTCwcEhK1AKaGkBBg92SoWDQ0+FIxUODg5ZQUsLfzpS4eDQc+FI&lt;br /&gt;
hYODQ1YgRGLQIEcqHBx6KhypcHBwyAocqXBwcHCkwsHBIStwpMLBwcGRCgcHh6xAZnwMGgTs2wfs&lt;br /&gt;
3RtveRwcHPIPRyocHByyAlEnBg9O/O7g4NBzEDupIKIRRPQAEW0noiYiWkREbqUwB4cuBkcqHBwc&lt;br /&gt;
Yk3TTUSDAMwH8DyAMwFsB3AAgLo4y+Xg4JA+9JgK/buDg0PPQdwLin0XwHql1FXatnVxFcbBwSFz&lt;br /&gt;
OFLh4OAQt/vjHABvE9GjRLSViKqJ6KqURzk4OHQ6OFLh4OAQN6kYB+CrAN4HcAZ42fP/I6LPx1oq&lt;br /&gt;
BweHtKHP/tC/Ozg49BzE7f4oAPCmUuom7/siIvoYgK8AeCC+Yjk4OKQLp1Q4ODjETSo2A1hmbFsG&lt;br /&gt;
4LxUB86cORMlJSUJ26qqqlBVVZW90jk4OETGnj1A797Afvvxd6dUODjEi9mzZ2P27NkJ2+rr63N6&lt;br /&gt;
zbhJxXwAk4xtkxAhWHPWrFmYMsXNPHVw6CxoaQH69gX69OHvra3xlsfBoafDNtCurq7G1KlTc3bN&lt;br /&gt;
uGMqZgE4hohuIKLxRHQxgKsA/Drmcjk4OKSJtjagsJD/5LuDg0PPQqykQin1NoDPAKgCsBjA9wF8&lt;br /&gt;
Qyn1SJzlcnBwSB9797L7o3dv/7uDg0PPQtzuDyilngLwVNzlcHBw6BgcqXBwcIjb/eHg4NBN4EiF&lt;br /&gt;
g4ODIxUODg5ZgZAKialwpMLBoefBkQoHB4esYO9eJhRE/OkCNR0ceh4cqXBwcMgK2tp810dhoVMq&lt;br /&gt;
HBx6IhypcHBwyArE/QHwpyMVDg49D45UODg4ZAWOVDg4ODhS4eDgkBU4UuHg4OBIhYODQ1bgSIWD&lt;br /&gt;
g4MjFQ4ODlmBzP4AmFS42R8ODj0PnYpUENF3iaidiH6Z7XMvWwZs3Zrtszo4OAjc7A8Hh/xhzRpg&lt;br /&gt;
XcqlN/OPTkMqiOgoAF8GsCgX57/4YuDWW3NxZgcHB8C5Pxwc8olrrgGuuy7uUiSjU5AKIioG8CB4&lt;br /&gt;
hdKdubjG1q1AXV0uzuzg4AA4UuHgkE/U1QE1NXGXIhmdglQA+A2AfyqlXsjVBWprgd27c3V2BwcH&lt;br /&gt;
RyocHPKH3bu5X+tsiH2VUiK6CMDhAI7M1TWam4GWFkcqHBxyCReo6eCQP+zezX1bZ0OspIKIKgHc&lt;br /&gt;
AeA0pVTOxjXC5hypcHDIHVygpoND/rB7N7AzJ8ECHUPcSsVUAEMBVBMRedt6ATiRiL4OoK9SStkO&lt;br /&gt;
nDlzJkpKShK2VVVVoaqqKmlfiaVwpMLBIXdw7g8Hh/xBlIo9e4B+/ez7zJ49G7Nnz07YVl9fn9Ny&lt;br /&gt;
xU0qngNwiLHtzwCWAbg1iFAAwKxZszBlypRIF8mnUrFhA1BZySs1Ojj0JDhS4eDAit3WrcDIkbm9&lt;br /&gt;
TlMTf9bVAcOH2/exDbSrq6sxderUnJUr1kBNpdRupdRS/Q/AbgA7lFLLsnWdfJGK6mpg9GjggAOA&lt;br /&gt;
Dz7I7bUcHDobHKlw6Ol49VUeVI4dC2zfnrvrtLb6MUudLVizs8z+0BGoTmSKfLk/Vq3yPxcsyO21&lt;br /&gt;
HBw6G1ygpkNPx8svs0rR1saqda6g92WdLVVC3O6PJCilTsn2OYXJiVyUK2zd6o/QGhpyey0Hh84G&lt;br /&gt;
U6lw74BDT0NDg98H5DKHhE4qnFIRA4TJ7dkD7NuXu+vU1AAVFUBxsTOocaGxkZ+zQ/7hZn90DjQ2&lt;br /&gt;
ds6phj0BDQ3A+PH8fy6XhejMSkWPIBU6k8ulWrF1K5OKAQMcqYgL558PFBUBb70Vd0l6HlxMRfz4&lt;br /&gt;
17/Y/nzve3GXpGeioQEYOhQYONApFd0aOpPLZVxFTQ1QXh5MKtragG9+E9i2Lfw899wDzJ2bmzJ2&lt;br /&gt;
d0gsyzXXxFuOnghHKuLHZZfx53vvxVuOroqHHgL++c/wfZYuBW6+2f5bQwPb//Jyp1R0a9TWAoMH&lt;br /&gt;
8/+5JBWplIq1a4E77+QI4TBcdRVwxhlA8IRahyAUF/NnKuLmkH24QM14sW8fsGNH3KXoumhqAi69&lt;br /&gt;
FJgxI3y/f/4T+NGPgPb25N+EVFRU5EepGDzYKRWxoLYWGDWK/49TqZDsZ1EbweuvZ69sPQX19fyi&lt;br /&gt;
5Ti/i4MFTqmIF2JzXPvPDI8/zp+jR4fvV1vLAz6bjddJRT6UilGjHKmIBXV1+SEVqZSKqKSiqIg/&lt;br /&gt;
7747u+Xr7mhvZ2M6ejSwa5dTevINRyrixa5d/Dl6dOdM39zZcc89/FlaGr6f2G9bHevuj1wqFRIb&lt;br /&gt;
WFnp3B+xoLaWKx/IHaloauKo644qFW1tfuT2sqyl/+oZaGxkIjFqFHdobhZI/tDezn9u9kd8EHVi&lt;br /&gt;
9GinVGSCpUv5M1XdRSEV+VAqCgo4k6ZTKvIMpbiRjBjB33NFKoSVdlSpkNFGZaWbQZIudKMK+HWp&lt;br /&gt;
Y/FiTlDjkF1I/IRTKnKPf/zDnlhJVyocqUgfDQ1sd6OSCptCYCoVuVJLd+8G9tsPKCnpfM+625OK&lt;br /&gt;
tjYeQZWV8fdckQphpWFKhTTCMFIhDWTkSEcq0oWQNiEVtpft1luBq6/OX5l6CoRAOFKRW7S3Axdd&lt;br /&gt;
BPzxj8m/6aS6pcUpdelg716us5EjuR7DyECQUqEUq6WiVLS15c41IaSiqKjzPeduTyqkwnM9+0OU&lt;br /&gt;
io66P8QwVFZyA3WIjihKxebNwMqV9shth8whBMLN/sgtNmxgm7ZlS/JvulIBdL4RbGeG2NrKSp5F&lt;br /&gt;
E5bPKIhUNDWxXRGlAshdXIWQin79HKlIABHdQERvEtEuItpKRE8Q0cRsXkPiE4TV5YpUbNnCK5MO&lt;br /&gt;
HZo9UuGUCjvuuAP405+St0chFVu28IgkKC//Bx8Af/5zVorZo+CUiuxAKWDWrODFqGShQhupqK/3&lt;br /&gt;
/ezy3cRPfwo8+mh2ytqdILZWYu/CCFkQqZBziFIB2J9TNqArFZ0te2rcSsUJAH4FYBqA0wD0BvAs&lt;br /&gt;
ERVl6wLC4vr144eQq4yaa9eydFZYyI1q9+7k0XA6pGLkSF+S64kQt5UNd94JPPZY8napX5npYzMM&lt;br /&gt;
8pKvWGE/9333cZ6QIKOyYwfw61/nNt17Z0Z1NXDFFcnycFRSsXs3cN55wIcf5racnRW7dzNpaG21&lt;br /&gt;
/754MfCtbwFPPmn/XdptkFIxcCAwaBB/twUS3nef3XUChL9z3R1CCGS58qD3v6Ulcclx2zkGDPBt&lt;br /&gt;
0Nq1WS3mR3BKRQCUUp9QSj2glFqmlFoM4HIAowGktdj7okXBL4NJKnKlVKxa5ed8HzCAP81ryUse&lt;br /&gt;
5mfTlQqg57pALroI+PKXk7fX1PCLakvyU1/PpG7YMP5uKhUtLX7dB5GKmhomDEHBnHPmcLbO//mf&lt;br /&gt;
SLfR7fD886zkmKTADNQMmv3x1lvAE08A//lPTovZKaEU8NWvMml48037Ps89x59BsnkYqaivTyQV&lt;br /&gt;
to5xxw5+BjZ7edppPTe9t+7+AIJJhW67w5SKoiImKLJydbahk4rW1vD+b/ny3JQhCHErFSYGgZc+&lt;br /&gt;
jzxJ5v33gcMPD+4EhFQUFeWWVKxenUwqTPdFXR0b28bG4JFKfT3Qp48fWNoTXSCbN3PH8/77yb/J&lt;br /&gt;
mh42ebi+ng1qnz78spmGQZ/iFUYqAN+428oGcEa9XBmMVFi+3C9HviH1s3hx4vYgpcJUNOS4XM7h&lt;br /&gt;
D8PKlbldkjoMzz8PPPAA/x/0/NIhFWbd7trFswFKSvi72f4lcLC+nuvBxPLlnBsnyDZ1Z0R1f4jK&lt;br /&gt;
XFgYTioA7g9Wr85uOQVNTb77AwhWKx54ADjiiNzmZzLRaUgFERGAOwDMU0otjXrcK6/wZ1BaZvE3&lt;br /&gt;
5UOpGDeO/w8iFTt3AmPH8v9BakV9PRuFoHPkGi0twEsvAe+8k9/r6nj4YWbetmcaRip27vQN6sCB&lt;br /&gt;
yUqFjO7GjOkYqRgwgMuXK4MRBqWAT3wCuOGG/F8bSE0q9EBNIHkEFTepuPxy4ItfjOfaK1Zw/fTt&lt;br /&gt;
aycVra3+4CiMVIwdy/Vt2hBRKsR2mJ2evr+plLS38zu1Ywfw739HvqWsor2dswjPm5d/N0xU94eQ&lt;br /&gt;
ijFjwt0fAPcHuVQq+vfnfg0IJhU1NfxbkDKWCxTm71IpcReAgwAcH2XnmTNnoqSk5KPO75ZbgH37&lt;br /&gt;
qlBVVZWwX7bcH83N/JJKEJSOnTu5saVSKnbuBA45hEcJtbV+MI+OuEnF/ff7bod161KnrM0FZs/m&lt;br /&gt;
oFcbcZCXY9euxAyOgF93gH3+tpCKE09kw2XD1q3sD122jI2GzBoSbN4MHHQQy/dxJJ157z1gzZrU&lt;br /&gt;
Wf9yhXSUCtneq5e/X5ykQim+fnOzH3+QT9TW8nPr399OKt59l0ego0bZEye1tvKzv/RSdgFu2ZLY&lt;br /&gt;
DkSp6NWL781s//r79OabfB5BfT27/Yj4/Tv33A7dakZ4+WXglFP4/+ef9//PB8TODh/OdZCKVIwb&lt;br /&gt;
F02pCIqNAdi+ShxeutDdH0AwqXjjjdkAZuOrXwUmelMg6nM8LahTKBVE9GsAnwBwslIqkrA7a9Ys&lt;br /&gt;
zJkzB336zAEwB1/4wpwkQgEkkor+/TMnFTfdxAm0bOtxyIg1CqkQNSOoQ5LRtiyMle+YCl0a3rQp&lt;br /&gt;
v9cG2PAvWQIcfDDXkRkQuXgxEzMgOa5C3B9AsFJRUMDusqCo7Joa/h2wk5otW4ADDmDDHQepkBUU&lt;br /&gt;
ly+PJ6guE1IhaG/3V8+MY8G3zZt9MvrMM/m/vpCKYcPs7U/q5PDD7aRr+3auw6lexJl5DlEqADup&lt;br /&gt;
lvZ8yCHJz0+u/bGPxbfC6caN9v/zgcZGbrNFRVyHQWnOU5EKIu7sAe4Ptm+3z0J7/HFWnO6/P7Py&lt;br /&gt;
6rM/gGBSMXJkFYA5GDNmDubM4b9Zs2ZldtGIiJ1UeITiXADTlVLr0zn2ww/9Dt324IDEmIri4sxJ&lt;br /&gt;
hbzA55yT3NGJxBXm/mhp4RFSKlIRt1JRU+NnHw2a1pbr6+/ZAxx5JBMMkzjs3AlMmmQvn+7+KCmx&lt;br /&gt;
k4qKCv6tuTn5OUqq9cmT+bvtGW3ezPVTWhoPqXjySVZPdu/Ov+EF+PkMHsxKjp6HIgqpWL+e63fw&lt;br /&gt;
4HiUCkl7P3hw6uWtc4G6Om43w4fblQppT5Mn2+tHBhgHHMCfJqkQpQLgT7PTk3dp4sTk34RUHH00&lt;br /&gt;
qyFxrJuzfTt3lAMG5L99SCZMIDxLZW0t9yPl5XZSUVzMxALwbb3pJt2yBZDxb6bk2lQqgqaVig18&lt;br /&gt;
7bX85Y2JO0/FXQAuAXAxgN1EVOH99Yty/KJF/GmT+gR6TEVQ/ggAuPde4K67gq8lo8IdO5LVg1Wr&lt;br /&gt;
uCGKFCkqg34taYBRSYXtHPnAtm3AgQfy/3GQCpmCddRRfnkE7e1c9/vvz99tSoUeU2FzfwwbFjw7&lt;br /&gt;
R64VRCqU4s5g+PB4SMW+fRxTcsUV/L0ja8N88AHPYklH7VCK6+ikk5gk69PlbLM/gERSIVHoJ5yQ&lt;br /&gt;
fqfR2MhuuY4s7b1sGZfv4ovjmX0iSkUYqejXj0ewthTPYneGDWP7kIlSQcTxAKZdkbYnFXQKAAAg&lt;br /&gt;
AElEQVQ/bRqT6zhI3/btHKBeXp5/JUsIAZCaVJSWsiJqi6kQ2wL4yrUZV7Fxo/++hKU4uPHG4PiW&lt;br /&gt;
hgZ+1qncH+Lma2zMXwxY3ErFVwAMBPASgA+1vwujHCwGZty41EpFv352SVxw773Ar34VfK2GBt9Q&lt;br /&gt;
mi/k8uU8ehCGWlTEMruNVJSXM8NMRSr69OG/fLs/RKkoKekcpEIvg9SFkAqzfLr7I0ipEIOsn08g&lt;br /&gt;
hjSIVOzaxSR12DA2LPleHbCmho3RiSdye+4IqfjFLzjfxvo0tMGGBiYT4pvV6zcoUFMfHYmhDhqJ&lt;br /&gt;
h+GNNzi/gi3pWVQsW8bv6bhx7NrL92g8CqkYPJhtRFtbsM++uNjuQtGVikGDkjvGHTt4++DByTZM&lt;br /&gt;
CMeRR/L3OIKQhVQMHZp/UiPptYFwUlFXx3U4aBAfo7dvk1QMGcJ1bU7plLovLAweNO7dy+/oX/6S&lt;br /&gt;
/JtSPllIRSrq61MPZLONuPNUFCileln+InmahNlXVISTil69+AGGkYpVq3gKY1An3tDgRwabDaG6&lt;br /&gt;
Gpgyxf9OlKyKiIEYNIhjO4LkKn20Haas5Ao1NWzUhg6Nj1QMGgRMmMDf9RGL1MXo0UzawtwfNqVi&lt;br /&gt;
61a+tyAVSILjxo5lQmeSBukI4lIqxN0xahS7gDIlFc3NvrGyTdsNghh6IXW60hPF/SH7778/P7t0&lt;br /&gt;
EohJOe+7L3MysGwZq3CVlVyWfKexFtIwfDi3azOPh7hHJMWzGawptqm4mG1eKqXCJCXSadvs4LZt&lt;br /&gt;
fG157+IgFdu2sd2JS6mIQipkKqcEcOv7maSCiKdzVlcnXwsIX99p2TIm8LbZI3v2MJkZONCPqQhz&lt;br /&gt;
f6SacZhtxK1UdAjyEqZyf0jFB5GKxkZ/3re4VEw0NPixBnpDaG7mJXMleEpQXJwobUn5hF2GMcs4&lt;br /&gt;
SYW82GVl8ZGKsWP9KHYbqRBXkymFm4bBfNa7djFhkX2ClIqhQ+2kQYx4XKRCAmcrK3m0H0QIFi8O&lt;br /&gt;
l/fnzOF21qtX8jnuvhu44AL7cVI/MvLJhFT068f1p5S9/trbWYKfOzdx+/vv88DgvfeSjbSOuXOD&lt;br /&gt;
1ZcVK7jeZHCQ70BkXakAkkfj8nvQuhE6qSgpSY7ZamkJtx07dvB7PWAA2x/92Wzb5v82dCjHVeQb&lt;br /&gt;
cSoVUUnFnj2+6g0k7tfU5A9YBFOnAgsWJF8L4P4kyL5LG7flExG7FtX9IaSiRygVHYUwf1sHIpBG&lt;br /&gt;
APi+JXOEpLNyswEIgkjFokV8Pl2pAJjI6KRCmKTMLe6MpKK1lYlaeXl8pGLNGn4JCgq4DDqpkGc8&lt;br /&gt;
YEBy+ZTyg5cAO9EUv2mY+6O0lDtEG2mIW6nYtInLVlbGHWPQDJb//m/OxxCEN99kf6+NmDz1FPD3&lt;br /&gt;
v9vTw5tKhV5/UUhFYyM/n6FDE8+nY9UqLp+NVJx9NhOhoDn3LS3Apz/NK9GaaG/n+ho50icV+Qx0&lt;br /&gt;
FRIlsz+AZBeI/C5TzYNIxX77cRvWbYPe0cg+ZsyQdNq2IHAZTAD8fON0f8iy4flE1JgK6U9sCkFT&lt;br /&gt;
k79dMGUKTx3VB0ANDWzfystTk4otW5KfYzqkor6e21vfvo5URIK8hGFKhUkqAHugJcABTEGjoCBS&lt;br /&gt;
UV3NIyiZ5ijo399OKoqKgklFWxs3ICEVxcX5jamQTjpOUrF2rd9pmS4YqfeBA7l8+ova0sIdh5CK&lt;br /&gt;
AQO47nSpXEYjQe4Pcf0ATFZtpKJ/fz4+LvfHiBG+QbIZXqWAt99mP27QSHz7du64Jk1KJhVLlnA7&lt;br /&gt;
XGpJP1dTw9eW3CW6sYsSqCmkL2wFx4UL/XLoeP99zg8yZEhwsOYbb/A79/bbyb/V1TH5Ly/33+N8&lt;br /&gt;
KhVNTUzadaXCRioGD2Y1rbAwuX4aGrj+CgqSBxxiJ4QwBJGKIUN8O6gfv327TyrGjYufVOTb/RE1&lt;br /&gt;
piIVqejfP3F/UbD1fkXsUNigsbqa+yMg+VnopCLM/SGxFyUl3K6c+yMCdPdHmFKhuz+A5H1XreKO&lt;br /&gt;
4swzg0lFY6NvDPSGsGABz+3u2zdx/0xIhZQrLqVCXmRxf5gvdkMDJ6jJVYCbUszqRa4LUyqGDEkk&lt;br /&gt;
HGJAhVQUF3Mnoo+4TVJhEjZ9tGYLxBTSQeSTjkzqYvnyzI7btMlPI1xRweUzUyqvXu2XOygrqMjg&lt;br /&gt;
JqnYs8eXW6Vz11FTw/Xet29yEHFUpUKm48n5TNhIRXMzuzQmTUomkzrkfhctSq4XiU+oqOCyl5dn&lt;br /&gt;
plS0tGTW4cozKS0NVmrEnslqxzalQtqukGb9N8D/3UYqdPcHkKxUyNIA48bl1v3R1gY8+2xikGN7&lt;br /&gt;
u1++oUPZduYztXS67o+opGL8eD6vroCnIhXt7fwenH8+fzfjKnRS0aePXy4TMm1+4MD8DoK6NKmI&lt;br /&gt;
4v5obvaVCumszX1XruQApYMOYr+rOc1OpjKWlbGx1I9//30mFSbMYMzmZj62V69gUiENWWYw5IJU&lt;br /&gt;
zJ8P3HabvVMTIxakVNxzD3DyyUy+OrqstVLJZdi8metFSMXQofaYCpv7w0YqAN/YtrZymYuL/X1M&lt;br /&gt;
UqEbFttLKEZffpfcI1HR0gJceSUHC2aS9GbTJl+6l47ZJH4ySt9//2BSISPCSZO4Y5W6k4RaBQX2&lt;br /&gt;
2CKddJmdVpTZH6JUDBjAxtA2Gl24kK+/bp3/vD/4gNuKkIogBW3uXL7v1tbk5E562waYnGWiVPz0&lt;br /&gt;
p2wrfvCD9IihtKXSUj9o3CStorwCyaQBSBxNm+6PKKRCD9QEEu2Y6f7YsCGZmGVjMFFXx6P3M88E&lt;br /&gt;
nn7a375zJ7c9USqkTCZaWzlFvSwBny3Y3B+2+w0jFXr8nqCggPsHfQbIrl3hpGLTJn52p5zCz9GM&lt;br /&gt;
q9AHn0Sp+xMhFU6piADd/bF7tz25h839YVMqxo/nv5aWZFlSXk5bQ9BHjzpsMRXS4FI1glTuj+uu&lt;br /&gt;
s6/gGQWzZgHXX2/3O+uBikOHciPU61R8+HPndmzlu7o6jor+2c8Stwsjlwh0k1Ts2sWdUd++TLz0&lt;br /&gt;
6PZUpEInJAUFvJ/5QusxGVFIBZAe+//hD4EHH2RZ0zZVLBU2bkxUKoDkGQJvvcXn/+xngxfZ00kF&lt;br /&gt;
4BtoUQdOO82uVOzc6RPeIFKRKlBTkgOZz0+waBFw+un8v7hgpHwTJwaTiqYmvvdrr2XibrpAdKUC&lt;br /&gt;
YHKWrlKhFPDIIzwt9Sc/4WnoUSHtRGYNmEZej7kA7KRA7/iC3B86qWht9d9fpcIT65nuD1ENdXzx&lt;br /&gt;
ixzX0pEFx158kdORA4ltV56p2B4gWamRVV5vvZUHOOlCKeCMM3gqtQnT/bFvnz2HRLpKBcBtTV/V&lt;br /&gt;
N5VSoWdoHj8+WKmQ8hYVpVa+be7cXKFLkwpZm8HmIxREIRVr1vCLJFHt5kPUOyS9ISjFjUV8tDps&lt;br /&gt;
7o90SYWt0a1fD9x5J0fppzMdUPDmmxy4c+ONyas1btvG5d5vP18K1Rtiba1/r6bBSQeXXMKdxx13&lt;br /&gt;
JBqolSu5w5HnMHhwYscjCV+A5Oyo6ZAK+d0kbNLpybVNZq+vBZIuqViwAPj5z4Ef/5gDKZ97zt6p&lt;br /&gt;
BmUzVMquVJiG9+23OdfA5MncadoCLoVUSGyEdK7vvcek5aST+PmY5dCDiM3627uXn52s8xEWqAkE&lt;br /&gt;
J2fatImzDRL5JGfDBm6XQ4YEk4p163ikO2UKjwxNUlFTw4RU2k+YUrF3r30l08WLuY3eeScrTjNn&lt;br /&gt;
Rl8tVlcqgGQjL4MiaV+27L+m+6OhwX9GehCnHC/nBbgd7NvHx5l2sLWVbZVcW94/3QWyZQura08/&lt;br /&gt;
ze03U6xbx89y0KBEN5YMHsKUinnzmMhVVGS2QNbTT/OA6Mc/TiYMpvsDsLtAMiEVI0akRypWreL2&lt;br /&gt;
v//+9viWXbt4YCUu93797Iqp7iZx7o8I0Jl9kFsDSB1ToRQb1VGj/ADBqKSitpZfSDH0OnJFKn75&lt;br /&gt;
S94+bBh3Uulg82Y2lj/7GZfFHGnpgYpCKnQDvmMHr8nRp09iNsV0UFPDWeKuu46Nhp4ueeVKrkud&lt;br /&gt;
BJoR7kGkICqpCPJJy76mUqF3rOJuk99lWxT87W9cp9/+NnDeedxxmamiZV0Rm4pRX8/3aJIKU6lY&lt;br /&gt;
u5ZH9GPGcNnNznHvXj5XWRkb5169fFKxbBk/3/HjmfCY75NOKmxKhb64W5BSEUYqhKgecgi/i6JU&lt;br /&gt;
iEJDFE4qAL7viROT2+fWrXy/kqAuTKn43/8FDj00eZbYX//KneEpp/C719gYfQ0RaSei9Jik1SQd&lt;br /&gt;
++1nb596+9VjhuRZ6EqFvl1XMsxAZZNwV1ayi0bvzO67j5/p1VczucjUFbJ2LT+jIUMS3x15pmVl&lt;br /&gt;
vu0xCfPvf88q5rXXMmlMd+2b//1fVufq6hJtX1sb22fd/QEEk4qioo6TCllNtrk5WWFftYqfQd++&lt;br /&gt;
3C+Z5NdcDM+5P7KEpiZ+GOL+AOyNQI+pkEajG8vaWn4xR47khjJyZHRSIQ87SKkI8rel4/4wScW/&lt;br /&gt;
/sUj/a9/nZcIT2d2iCwbfsopnKr47rsTDeeWLalJhYxwM1UqpKO48krOR/DQQ/5v4oYSDBjAz0oM&lt;br /&gt;
mD6aEKMrv5mkIsioRlUqSku5Q9Q7zo64P958EzjmGDbWI0eyX9nskGR68n33JR+v58gA2OCUlCQa&lt;br /&gt;
XqV8YiiR4+ZzktFhWRkTiuHD/XYsip3Iz+ZIUc9YatZfW1siqbDN/tA7RRup0AOFx43zicHGjT6Z&lt;br /&gt;
MgN0BWvX8v2MHGmfGaMTZoDve8eO5Nggpbj+d+5MJibPPAOcdRaT6tJSjo2Jmu67tpbrTpScKKTC&lt;br /&gt;
5v7Q269sA7hue/XyR69m3JCuZBQWsi2SY83pqIWF/I7rpOLBB5kMn3EG7693kulAArHNPDPyTEtL&lt;br /&gt;
/frVVaAdO3gRri9/me1GQ0N6Su2KFewO/PGP+R6eesr/zbQNUZSKwkL+SxVTAXCbrKvz99WVCv36&lt;br /&gt;
At0OjhyZOano0e4PIrqaiNYQUTMRvUFER6U6RipMAjX1bTp090evXvwy6vvJaEV81TYfVhCpkBfL&lt;br /&gt;
Rioyjano08cvr200vXUrdxgXXcTn1F+OVHjrLR6tjRoFfOlLfO96MJ8oNoC906ytZaM+ZkzmSsXS&lt;br /&gt;
pdz5TJjAQZ+6TC0BswIZjUldme6Pfft894k5Uovi/jAJm6lUyD0LdPeHdK5R2H97O5OKadP8bdOn&lt;br /&gt;
s39ZH/GJ3D93bnKnqHe4gvLyRKWisZHbhDxjIJlUiPEeMoQ/9RG7GHy5hi0NephSoS/hHBaoCYSv&lt;br /&gt;
ollWxuWQNqa7fcrK+D5Nt46+jLRZL4CfTVUQdI9vvukHxukzUHbt4rY6fbq/bdq06DK83naAZDna&lt;br /&gt;
JBVR3B9AIqnQF7MySbX5fugz5sx3A0iU3Zua+L2dPp2VLMA+5TgKgpSK2lpuE9KGTPfUI4/w+37Z&lt;br /&gt;
ZX4q8XRcII8/znUyYwYTJvO9AdIjFQDbcyEKSoUrFYDfX5ikwrRDOqmorGSCq7cFk1To5dChx16I&lt;br /&gt;
UpGP1PSxkwoi+hyA2wH8EMARABYBeIaIysKOkwrTlYpUpAJInn4qBlWMVipSoUvy0khk9KgjU/eH&lt;br /&gt;
NGi5XkuLP5pqbuZrl5fzSz9lCr8sUfH667wKoeT4nzgRmD3b/33DBr8zsjX4HTu4vseMyVypWLKE&lt;br /&gt;
r9u7N3DYYXxNcTOsXJmoVJjP1XR/AL5ByIb7Q+/0pAMQ0rBvHz8f2S4ENUqq5xUruOxHH+1vmz6d&lt;br /&gt;
28+KFYl1M348P58nnkg8h5AKvWOsqEgkH/oMh759uV2GKRWAb7x37uR7GTPG/82mVOikwoypiOL+&lt;br /&gt;
SKVUyHLOehvTA1SlbOa00nXrfHWmooLPpcvjNTV+kCYQrMY8/ji7FgcOTCQVr77KbUAnFUcfzUGH&lt;br /&gt;
UWYAme+2qVTI/9K+org/ZJv5mxwP2N0fcnyQUgEkTit97z2uy8MOY7LXr19yHpGokOdkKhVmiutR&lt;br /&gt;
oxJddw8/zDNGysu5HidPZnsWFY89Bnzyk9y2TCXLtA2ZkIq9e7l9ZItUSFyLLftrOu6PoiJ+FwcP&lt;br /&gt;
9mNnco3YSQWAmQB+r5S6Xym1HLzIWBOAK8MOkgeuB2oGuT90ScokFZs2cQchWe7SUSo2beIGqhtT&lt;br /&gt;
QbZIhX59MYBiHC+4gN0htmA8E83NHOgkRpGIXSB/+xv/Jv53Md59+/J96Q1elIqxYxM7K/FJRsHS&lt;br /&gt;
pTx1F2AjBbBhrq3l+zeVCv3+TaUCSCQVffr4I51+/XiWR9RAzfb2xDS7plIhU8xkOxA+n12HSORH&lt;br /&gt;
afrbCSdwu3vxRX/bkiXA8cezQTGnzG3bxvvro13TOMr/0j7M5wQkqgGAL6/qMQk215c+ewBIHklH&lt;br /&gt;
IRWpAjX1aY1jxvD1GxvZGOtKhVk2IDG/SXk5P099JGy6P4JIxYoV7Jo6+ODEjvPFF7kMevucNo3b&lt;br /&gt;
fljacEEqUlFby+9kUP0CiR2vTamQugWCSYWecTaqUrFokT81slcvdvtEVSp0F2V9PZPXsWOTk5iZ&lt;br /&gt;
pKKy0h/wrVnDS3dffLH/+/TpwPPPRyvD2rU8m0nSz8t7o7tVgcS6JUpun0oFkwqx9Tb3h5lsLYxU&lt;br /&gt;
1NXxn65UAInxP+m4P6Q9ZTJbLVPEvfR5bwBTAXzUPJRSCsBzAI4NO1YeRGmpn2UuU6Vi2DDf1zl+&lt;br /&gt;
PFe8XvmSVrWoKNn9YXN9AMmSlJ7CNSqpMDtOkezEOB59NJ83ykqT8+cz+ZDpegBH2Tc0cFS0BALq&lt;br /&gt;
02P1e21q4jKL+6Omxn+RLr6Y4wXMgKNHHklOe75kiS+hTpzI5GXRIj8vgkxzBJJn9ehKhc1o6kaV&lt;br /&gt;
KJE4NDb6RAlIdn8IsQpyf5gjSSlfFFLx2mtsiE3COHUqj4ABvvbSpVw3ukEVSOKpAu2NrahIlHHN&lt;br /&gt;
9mFTlLZv53OI+0aupZOK3r35d73DlYCyXAZq6gmYRHVYsIBHWKZSYSMVulKh14f8rysVQTMMRBUx&lt;br /&gt;
ScWrr7K7TtwLAHey/fvz800FfbEvwCcVoqZIELA831RKhRlToatAcrxsl2P14/R3W89UK5g4kQnA&lt;br /&gt;
+vX8bk6a5Nuvgw5KVirmzk1OrV5XxyTs+9/n73obM90fNlIhSsXjj/O1Z8zwfz/9dFY2o7hhZfq7&lt;br /&gt;
kPqKCm5T0v5M90dBgf3dFlerjVToyzCYGDiQ6z2KUiGuNyGvUZSKMPeH7Cf2LB/BmnErFWUAegEw&lt;br /&gt;
PKDYCmBY2IHSgCUBiAT1mYhCKvSO9MAD+VPPwyCNwLyOPoIyIUqFsOFsKBVmAp+gYDwb5s5l8iQd&lt;br /&gt;
OsCG44AD+Dd9BUz9+nKvMqooLfVHhOvX8zS7xx5jtUGfO/7cc0w2brnF37ZtG/+JUlFYyIZ50SJe&lt;br /&gt;
5GrkyMR053L/+ogqzP2hkwog0TCbRst0f5g+Z3kOYaQiLOmajhdf5A7JxGGH+SuNbtjAZQwiFfoo&lt;br /&gt;
XmBTKgoK/HgJW+yLpGqWzmvkSL6HJUtY6ZGO18xmmiqHikkqzEDNffuSI+xtMRW6UgEwGZZySrlk&lt;br /&gt;
X0FrK7+Lcow53Xb3bv7TlYriYiaZYaRi+XIutxA+UdYEvXuzsqSrTUHQR40Av0eSRhlInFkE2AM1&lt;br /&gt;
O+L+MNu3zf2hHz99Oj/Df/6T30/93g86iOtD98//93/zuiv6yrm33MJk7s472X6IndIDNeUc+oAB&lt;br /&gt;
YDu0fTvbyWef5fKY5SsoCE7wpmPDBt5XBoBm+zDdH4C9fYrNDlMqbKQC8GeAtLby4C6IVEj9TZ7s&lt;br /&gt;
X6O0NHOlQq4hbev3v2d3Vi4RN6nIGC+8MBOlpTPwmc/MwIwZM9DSMgNvvDE7aT99Silgd3/oxGDi&lt;br /&gt;
RG6Aurxnyo66+yNIqejfn18YcU1kk1SI4R01iolOVFJx2mmJIy2Atz33XHLAqnmv0rkOGeL7+5Yu&lt;br /&gt;
5UQ0Y8aw6vHTn/I9S0BV797cKYjhkBdGSAXAxur113kRqxkzEstnUyrC3B8mqdAlZD1xkPxmS3Ms&lt;br /&gt;
5+jVi0frQiaCSIVNqWho8EclmzaxK+OUU5L3O/BAP4ulZIBMh1RITIWMdrdu9Wd1APxcNm5MnOEj&lt;br /&gt;
OSoE8rxfe81fUh5IXnfFJBVmp9fWlhioKTkrRL0So6srFbt321fKBPid7NXLVwGknAMG8HX0sm3c&lt;br /&gt;
yG0sSKkw3UJSPjO5WksL71tZyWR3zx52hW7axO1DDL2O6dNZxdi713ch2kaNNvcHkNi+dNeatF15&lt;br /&gt;
d9rauDxBSoVJKvr25WepKxWSfRFIdn+I2isYNIjv7eGHk0nFwQeziiEzknbu5I6qrc1PyrdrF/Cr&lt;br /&gt;
XwHXXMPff/Urfv+Livg5DBnC9S3tQndtAv7zXrmS6/e00xLrc9AgVh6efRYpsX4922khvUGkQic1&lt;br /&gt;
mZIKm/sD4Otv2pTsStevD7BNHTMm0ZaZM0CikorGRqCpaTZmzJiBb35zBvbbbwb+8IcZ+PGPZ9oL&lt;br /&gt;
mSXETSq2A9gHoMLYXgEgYA1GxptvzsKOHXMwZw7/jR07B2PHViXtp08pBVIrFUVFPEdeZ9w2UqEU&lt;br /&gt;
T3myBWkCPmOVxmaSCpvh2bkztftj8GA/33ufPvZgPBMbNgDvvMPZ8Eycdhp3evPns1HR70cnFbpS&lt;br /&gt;
UVnJCsfjj3NMxte+Blx4Idfl5s3cQX74IScHqqlJjKYvLORjBZdfzoZ73Trg3HMTyxamVNhGYjZS&lt;br /&gt;
oY/kdKORKs+F3KuQKTM6H7AbnuXLeZ+RIzmDpoxibUrF5MncDuT5DB7MBkWCJ/VAwyCloq3NT6Jl&lt;br /&gt;
BiOOHs2/66uZmqRCCPX8+b4CBSR3uDZSEaZUAPxdSIM5Uhb3S1Cq6MJCrof585lcSEdgy1VhqmzF&lt;br /&gt;
xfyOSadhKnz6PepKjxDBykrg8MP5/3fe8VVLUTF1TJ/O9fD228DnP891PmxYcrtIRSr0bJoA1297&lt;br /&gt;
u99ZmBK9OS3UJBXi/tNJhT47xFQq9E5KcO65TOp69fLXoQD8QYG4QF5/ne3ht77Fz6u+nmMYWluZ&lt;br /&gt;
ZFxyiZ846+ST2c6Y7kVboCbAOVtaWpJJBQB84hN8zlQxZevXJyqwJumU6bh6P1FSkpycLhtKhe5q&lt;br /&gt;
ssWtLVuW3M7MQUZU90djIzB+fBXmzJmDf/1rDhob52Dv3jl47LFZ9kJmCbGSCqXUXgALAJwq24iI&lt;br /&gt;
vO8RPJU+glJaB7k/Ghs5f/+aNckuDDMQSW/wAwf6o4Zt25INlcBMjmKSira25BiEKEqFeb0oMzH+&lt;br /&gt;
/nduvJ/8ZPJv06ezobnvPjaGescQpFQAfK7Zs7keLrjAH8ksWsQjiz59gG98g7eJhL10KRMKIUUA&lt;br /&gt;
Byw+9hgbMLPj7d+fDVBDg7/+SrpKRZD7w4ypMDs9IJFU1NWx4Uk1mnn+ea7P664Dbr6Z/cmHHprY&lt;br /&gt;
kQvEeCxbxp3XEUfwsZWV3Db0Ds/W1kzjaE6bFBVNn+9vIxWyDoWM9IFo7g/dvZeKVJhKkC3CXnd/&lt;br /&gt;
AFyenTuZfIn6ImXTSYWQAXmPiRLjTcwU3QKTOOlqXVkZd0TV1fx8+vRJJF2CI4/kNlFVxTlXbriB&lt;br /&gt;
7csbbyTuF0QqdNJqkgogOCZC/tdJs839p5Nu/VhTqdDbteCCC/w1OvSBwLhx3CGKjZw/n+vyiiu4&lt;br /&gt;
Pbz2GtuBPn04FuOCC9jOvviib4PEjshgxRZTAbBdKi+3r6/06U/zcS+8kPybjg0b/OyxQPIqsKJi&lt;br /&gt;
6ippukpFWEwF4Lc1W1CoqVSYpGLkSJ4+e9ttrDqmo1TozzxfiFupAIBfAvgSEX2BiCYD+B2A/gD+&lt;br /&gt;
nM5JbKTCjNYFuLFs2MBrI/z85xwQc9JJiccddFC4UgHwSHLv3uTRoyBMqZBPk2FHIRWmYQwjFfJS&lt;br /&gt;
PPEEy+/6uQWDB3NSG306qX59XakoKPDPIcbhyCNZ2Rk7lhv6woVMKo46ilWPj30skVTorg/Buecy&lt;br /&gt;
8TFXetVjWEQK1vPdE6VHKvQXzJyua3Z6Ujc6qRg0KNk9Y8ZUvPYaT/W97TYmFUcdBdx0U/I9A2zo&lt;br /&gt;
iop4JFxdzaQCsEd8BykVQOKIXG8f5lQ2gJ+jGHSA341584BzzuE/QRT3h1K+MW1pSXzP5Nxmxscg&lt;br /&gt;
UtHWxnWtE54LL+S4HDMXi7lS6aZN/Gz1TkmPN6mp8RUOHUGkQsjJEUf4SsXEiYnuHUFhIccOHHkk&lt;br /&gt;
8Ic/8P9DhiQGb0rshN4RmIFzZkyFmWbbRir099MkDUCimmSSDr3tBikV5eVMKPT8KgATvMmTE0nF&lt;br /&gt;
xz/OxKO8nN//hQvZTdK7Nw8W9MEI4H8PUir69+c62rCByYrptgU4/mrcOH/6dVDQ9Pr1iaSioCBR&lt;br /&gt;
pbKRqmzHVMj7FEYq9uzhGTemjTz7bG4bN9wAXHop7+dIRQiUUo8CuA7AzQDeAXAogDOVUttCDzRg&lt;br /&gt;
IxV79/IIV/dzXXYZN7Bnn2Vp7d13k1+aAw/kjto2ypVPmcNtG4ECqd0fQHJDMEmFKY+ZI1EgmFQ8&lt;br /&gt;
/DDv+9vfAq+8wsQhCL/5jT+rQ4eek2PHjsTo9BNP5Hu/5BL+TsRqhSgVJ57I248/3icV+syPqJAy&lt;br /&gt;
6O4XwF8ULKr7w6ZUyHH6p6lUBPm8AbvhmT8fOO44ro+bbmIX0Wc/a7+3ggIeyb3+OgdUTpnC24VU&lt;br /&gt;
SPS7UsExFUCwUjF0KHcAOqkwlQqAjfOcOYnupyD3h+l+kvo1yTuQaOyCAmHlvPJ89Xu8+moe/esd&lt;br /&gt;
AmBXKszYJlOpGDIkmRSY97hhQ+KCW1Om+EqFLZ5CcM01/Jy/9CV+7scdl0gqdu9mO6S/2wMH8r5B&lt;br /&gt;
7cusX5vfX++QbB2I/n6YvwthVipYqQiDzI7Zu5enTB9/PN/PiSfy+79oke9C6t0b+NznmKSJ2iP3&lt;br /&gt;
GqRUALzvgQcCP/qRvQxE7JZ57DFeR6isLDl3RXu7fcCkt49skoqgmIqhQ/lezfdID4aXFbJNpeK8&lt;br /&gt;
87iub7+dZ9SddFLiACCIVJgDqXwhdlIBAEqpu5RSY5VSRUqpY5VSb6c+KhE2UmE2AoCnjFZXsx9f&lt;br /&gt;
n6KkQx6qJCbSV2eUT0kRm4lSYSMVbW1sAEw1Qb+vIPeHGYwHsJFrbeV4h6lTOXYhCBUVPFq97bbE&lt;br /&gt;
7ab7Qx/h9unD9XPttf62ww7jvBlbtvjqz/HHs1H+4AN+iW1KRRjkpRPjo5dBH6eiGdwAACAASURB&lt;br /&gt;
VImlmv1hi6kAEo2yHCMwYyr0kSSQbHgk38Pxx0e/v8mT/TVARKkoK+P6lZHzzp3cPsy2NnAg7xek&lt;br /&gt;
VEiMTCpSYUNZGdeNKA319Vx/4oYwSVkqUpHK/aGvUhmlbKlIhalU2NyUNqVCj6864ghud2+8EU4q&lt;br /&gt;
TBx3HB8j76Sp8gD+tN6OuD/0GUzpkoohQ7hNNTQkz7yIAplW+s47bNukzZ98MpOMxYsTgztnzUpc&lt;br /&gt;
NbekhNtSGKm4/34e/JntSsf11/N7MHMm348taVxrazIx1duHaRukfNlUKsrKmDBIDiS9P5HrSJ8S&lt;br /&gt;
1Na++U22oy++mGiLwmIq0n2u2UCnIBXZgOmbAuykAuARiyweZoO5euPOnf5DFKPzzjv8GWQEU8VU&lt;br /&gt;
6OUDEvO069DvK8j90daW2HG0tvJsj6uu4hHCX/6SGMdgw+TJyUqF6f4wR+q6cgGwEWlsZNla8mF8&lt;br /&gt;
/OP8+cc/8me6SoWUwUYqdMKVifsDSDyeKHGkYZIKm1KxZ48/f12SXB0bmmElEd/6Fku4w4ezxA74&lt;br /&gt;
cRXS/mwpumU/mQGye3fiKrICfTGjlhauhyikwkxjbapo2VYq9FUqU8Fc/8M2tXvkSF/psb03AN9j&lt;br /&gt;
ba3f+ZukYto0bg9TpvBaNVFx3HFcLxLIaCMVch+y/khjY/LsDyB1TEVUpcJ8P/SYBnPmRRQcdBCr&lt;br /&gt;
K3/9Kz9nUdmuvJJdQa2tiaSiT5/EDo7IV0v27vWnWeqQmVBhGDKEy3DxxTyi//e/E3+XHD5hpMI2&lt;br /&gt;
os8kpqKgINjOyvv0zjt+ZmaASYUEhG7YwM/ItDM6JkxIdgU590eOoHcgDz7IjTyIVKRCeTkTD5nG&lt;br /&gt;
oysVMopcuJC/652cDl2pkKDMMFIhDUuuI5BOtb3dHqxny1Uxbx7Xxde+xnKZLcAsCsKUChsuvBD4&lt;br /&gt;
xS84uErIxtix3GHeeScHgkrHGRWm+8MkFancH/qUUptSYZIS/YXVsx7aZvqYa86sXs3XCJpmbMNR&lt;br /&gt;
R/Gobt26xGDEKKQC8Ne5kBk2ekAdkEgqzBTdYZBrieHVFxMDOq5UyNLNJqnIllIxYQJv373b7jaU&lt;br /&gt;
aynl14tJKioq+L2cNy98EGJCErhJRsqgAcOwYazq2aYrB7k/bDEVkgMkLFDTplQAPqlId0R7zDH8&lt;br /&gt;
/O64g5PwSWdaVMSutFmzUit2Qqpsrp10cOSR7Ca76CKe2qqn9xZSka77QxQEfQZWKqVC4rxskHa9&lt;br /&gt;
cGFiGxs82Lf9+mq86UDeM1nFWFxAjlR0EDqpeOstZoRiTG0BimGQ1RvFqEuQHsCd5ciR3HgHDbKn&lt;br /&gt;
6AYSSYU0vDBSYcsTod+XjKhsSgWQmOTomWfYYIlPM1OYSkUqUjFwICfB0TsXIjYura0cxJZKMbGV&lt;br /&gt;
QdwfvXsnJ/jpyOwPIDx6vrSUj9u7104qzPTwZqcUFUTJ7UgnFTJ7Q1LJ65ARVxRSYaboDoNcSwxv&lt;br /&gt;
kFIRlVTs3s3vjh6Mq48Gt2zhtmGSahvKyvi9ktknNlIh9bBqVbD7Q+5R6tf2/NJtrwB3IL17+89P&lt;br /&gt;
X4Jax/DhfG3bdGWbUkGUKK/L+ynSe7ruD4Dfq6BAzTAMH84uh9bWZPJQVsZSfZBt1MuQDVIhOP10&lt;br /&gt;
tt1PP+1vW7uW68G0XancHyNHsr3Vs7KapEJfiTpoMTGBkIr33ktsY3ouHDNnUlSUlLCNkqn8koV2&lt;br /&gt;
715HKjoEvQMRpvrKK/yZyUhdcgXs2cN/urGrrOSHFjaqEgIRlVQEMWoxHGYKZkFxMRsjXal4+WV/&lt;br /&gt;
qmhHMGCAL03a3B9RcemlHKx42WXpH6srFUOGJN6T6f4wXyD53Vy3AkieWWM7Xp9Lv3lzcqduSviZ&lt;br /&gt;
kgobdFKxYYOfWc+EjLg++IDLYxpPSboDpEcqpJ1JjotM3B99+yaSirBpe1u2cP1GabP6omK7dvE7&lt;br /&gt;
ZlMqAD+Wx+b+kHdtwwZu51u2ZOf5ycBD6j3I/TFsWDCpkA4qKM8E4EvnNtcIkEwqwtwfmXToN9wA&lt;br /&gt;
nHpqYg6LdCDuxWyRikGDWKEWuw8wqRg7NrldlZdz3YlL0Kw7vW0IUikVYaRCXMV6ynkps6lUpAvp&lt;br /&gt;
3+S+JTsv4GIqOgQbqXjpJX9VunQhS0LrC5cJpMGFkYrevdmF0twcnVTIOiY6hFQEJfABEmeANDYy&lt;br /&gt;
U5XZFx2B3vFGcX8E4dxzOUJbl/fTKYMoFeb1ddIQpFQ0NfFIoK0tsTONolTIM1+9mo1BkPtD2sim&lt;br /&gt;
TdknFZKlcfRoe4crI64PPuDRubnPiBFMJoQYAtFIRd++3B6FVMjsH0Em7g+bEiRlElIRBTqpEBXG&lt;br /&gt;
JBVlZfx8li/n/YKUisJCrt/Nm7muc0EK6+v96dE6TKVCr19ZaygoJgjwR/pBpMJ0D5oqX58+PjHL&lt;br /&gt;
pPMZOJCz8U6dmv6xevmz2QGeeCIPqiR/ypo1dteVkEzJHWFeW2Iw9HWV9uzh5yKziMyYijBSoafP&lt;br /&gt;
1weOOqnIVKkQUvHSS/y5YUNwm8gHuhWp2LuXjb+8zPPm2VlqFOhLQgPJSgWQ2jjL+h9RSIWZoEVg&lt;br /&gt;
kgrbiEsnFW+8wR1oNknFrl32QMV8wFQqdIjRbG3le7b5lAHfMOjHFxUlrmJqIyVyvxJwl4pUZFup&lt;br /&gt;
aG1lQmBmBNQhSsXKlcmuD8DvbLds4XMVFkaXunW/s+n+MfOERHF/mAZORupAsJpgg77+h6gBJqkg&lt;br /&gt;
4vqQbI+2c/fqxUZ8/fpg92OmMEnFgAGJQc0A12ddnV8H5uwiMyOm2fFJpywxG+nEVBDx8Vu2MOFM&lt;br /&gt;
1/2RDQiptC1olilOPJFtqdhDUSpM6DlebKRi8GC236ZS0a+f358UFflLnusLRgZBBqGmUtHYyO96&lt;br /&gt;
poOS4cOZIM6bx98dqcgSpFHU1iYG4GQapCjyZRipSBVUlg6pMBO0CGQ0vnUrjx5tbF4nFa+8wkbX&lt;br /&gt;
llI4XeiJvtraMlcqOlqGIKVCYipsKbYB/4WykQpJYxzF/RFEKsQI7trF9bN5c2YjDRv0BFi2efaC&lt;br /&gt;
8nKug8WLE5flFkh5Nm70FxOLSrIlkFBS0usdN1Fip5WJUjFihN+hpqNUyHPUSYUtXf6ECX6+iCC1&lt;br /&gt;
ctQort9skwpROoHkxcQEUuZly9hWmPUXRgoArof2dl+tSSf5lRwvsVhxyOSyUqmQomyUQWabvfIK&lt;br /&gt;
t9sgpULaw9at9rolYntsKhX6M9Jn+KVyfwB2UiFEcuVKtiGZ2I+CAu4DxJZt3OhIRVYglff++9yY&lt;br /&gt;
ZFSQTtS2jspKfkjSqOIiFbpSUV5u7xDGjOHjJUXuxz/e8XgKuTbgE5Y4SIWuVJjKkB7ECtinvALs&lt;br /&gt;
GgCCjwfC3R9BpEKfwbB1K49YsjnSBXxSYWsbAEfh77cfj3htSoWQ6tWro+eoEAipaGjgzs28/3RI&lt;br /&gt;
hU0J0nNopEMqiot5ZLZ9OwdiDh9uHyUecADXy/DhwflRRo/2ScV++6Uf1B0EUTolnsc2Cpf6XLLE&lt;br /&gt;
rgKaq+zaSAXgt28zyLW01M9xYiPNZWU+qYhDqcgFqSgt5amor73Gro2mpnClYssWrhvbtYVwCjpK&lt;br /&gt;
KuTdM5UKwF85NFP7IfdYUMDtzrbybL7Q7UiFpNeWJbQ7olQA/sPWpcmo7g/xuZmkQiLg0yUVQfLw&lt;br /&gt;
mDF8jW3beMqSJFHqKORFE8MTh/tD1sFYujTY/REUgCgj63ff5c+gmAzAbnSLivgc8+dzZ2PruCTY&lt;br /&gt;
MNsjXZnWvHo1G74gpWLCBI52P/xwf5Smo7iY282qVZmTClETTBeD3ull4v4YMYLbbEsLk7KopEJf&lt;br /&gt;
VGzVKk5oZ8OZZ/J0w5deCu40R43y3R+ZTOcLQmUlv5N1dclBrgIhFfPm+Sv/6rAtCKZDnuW77yYu&lt;br /&gt;
uqb/LrNjlLKTEpkan612mw5KS5mIb9rEbcWWBj0THHEEZ/QUu2UbWPbty89Epv0GkQpTqdBtgE4q&lt;br /&gt;
9DxEQQhyfwB+P5Op0in3eMgh7JKRJFs9KlCTiMYQ0d1EtJqImojoAyL6ERGlmIhkh0kqZJpTpkqF&lt;br /&gt;
Tip69UocZUUJ1ASClQpJkiIGt76emaWt49DdH0ESrkwrfe01HtF3dCqpwCQVcSgVxxzDn01Nwe6P&lt;br /&gt;
oMRJYrTffZfr3nzpzeRB5kga4GlqTU3Bq9GKXzjbpKJXL+50//Mf7hCCSAXAZOKdd4Lb+oQJLK9m&lt;br /&gt;
Qiq2bg0OhtSX587U/QHwO9vWFp1UAImkwub2AdgGvPVWeG6UUaO4U1u/Prsdq640mUGuAkkd3tQE&lt;br /&gt;
nHFG8u9m+7TFVADcvocPT47ZkGctSwrY3B9NTdyxSW6NfELKv25ddju/ww/nOpGONWhgWV7u72Mb&lt;br /&gt;
0YuKJeioUlFezs9AV5Tkf1nBOZNJBYB/jzKwkH6wpykVkwEQgC8BOAjATABfAXBLJieTylu+nBmo&lt;br /&gt;
ZG7sCKkoKGAmby4kNWwYcO+9yUt1m5BOzyQVQKLBlYYbpFQ0N7NhD2pw0qAkRa2eya4jkDoV90cc&lt;br /&gt;
SsXQoX6nYZIKcY1IDI3ZYfbrx8csW2bvTPU0x2ZyJ4EY+yBSsf/+bJg2buTrZbOOKiv9RDZB7o8o&lt;br /&gt;
GD8+M6WiooJH2kIqbe6PxkYeGSmVvlIh55PstFEDNQF/FdWVK4OViigYPZrLv2BB7kjFqlV2JaKg&lt;br /&gt;
wCdSkoFWR0lJ4kqiQe6PpUvtI1wZ9ASNWuX4Y49NJiT5gLwra9dmn1Q0NXG+npISO6EDfAUPCFYq&lt;br /&gt;
JJAVCCcVjY2pScUXvwg88EDytGDAT4qV6XOQfk4G08uW8cDEXKQxH4iNVCilnlFKfVEp9bxSaq1S&lt;br /&gt;
6kkAvwAQsvRVMHSlYtQozlRYXm73M0dB37587OrV9s7miitS+18lI2MqUhGUowLwG/vKlcFGt7SU&lt;br /&gt;
fcYPPcRl7UgHpKNXL35R1qxJTjyVTxx3HH+apGL4cO7MlizhZ2FLtjNiBBsFm8qiuz/0rKk6TjvN&lt;br /&gt;
v5YNBxzAPu21a/n5ZUs+B9jISIceplSkwoQJTLZl6fmokA7vnXeYwAXNLhCjm25MhSgV1dWJ14uC&lt;br /&gt;
iRPZbbBjR7BSEQVSr2vXZpdUyHTVlSu54wqq9+HD2U7YpmXq0w1t7o++fblOW1rsWVx19wiQvI9O&lt;br /&gt;
KuKAXD/bpEIGVQ8+mLwCtY7ycj8exXZ9saMSDBxGKmwLDtrO95nPJG4rKWGbsXq1fXn3qJgyha9/&lt;br /&gt;
0kncLpYtS85rki90tpiKQQBqMzlQGsWGDWxwjjqKR7AdCUCSxhnEdFNBApFseeFNpULkbhPHHMMN&lt;br /&gt;
Y+fOYKWCiDPY7dvHZc5mQ5owgY1iOrMGso0gUiGjs4ULg11RUqdhpEKpYFJRXs5qRdBcfCGeCxYA&lt;br /&gt;
hx6a+l7SwRVXsLGYNs3umomK8eP5/vbsAT71qejH6aTCRqqk/oLS4adyf5SVccebiVLxyU/6bpmO&lt;br /&gt;
KBUTJvAo7/jjM0/iZENhIRP9J5/k6YJBpOLoo3l9HlsOF5NU2Do+adc2pUISLi1aZN9HjpX3K9+Q&lt;br /&gt;
64fFxWSCsjI/I+bMmcH7lZf72ZJts+WEcMqgL4xUZJrHp6DA76M6ojBPnMgEe8QI/n/jxvgGgZ2G&lt;br /&gt;
VBDRBABfB/C7TI7v29d/MY8+OjtlkoccJXWwDXrGOHNdCVOpGDHCblhGjfKl0TB/26WX8u9HHZVZ&lt;br /&gt;
WYMg147D9SE46yxm8aZvXEaWCxcGy/piSG0vvATB7t7NBijoOT/zDC/8ZcOECdxpvPZa9gJkBWed&lt;br /&gt;
xWTljTc6dh4x2BMmpLf2ipCKhQvthFeUiiikwub+EPl/4UI+VzpG8NRTfaPekQ6puJhJ4bx52X9+&lt;br /&gt;
RxwBvPAC/x9EKn79a+C3v7X/ppOKoGWspd3bnk+vXvzeLlzIHZdJSqZM4TJOm5b6XnKB/v39gZbN&lt;br /&gt;
/dMRHH0031+YUiEk9uKL7etDmVk1TVIhz6O+np9TpjZS7E623NbS/8URpAkAWYq39UFEPwNwfcgu&lt;br /&gt;
CsCBSqkV2jEjAfwbwF+UUvdGuc7MmTNRYvgf+vSpQnNzVdY61myQih077AuBmUpFmMviiit4CeCw&lt;br /&gt;
kVxREXdAmZY1CKefDtx+ezxBmoIxYzgPgwlZ3G3nztRKhY10yEg7aDG3KJDOYt++7HdK2YK4B845&lt;br /&gt;
Jz21qbycDXN1dbBSoZMK03/brx8Trvb24EBYWWPnwgujlwvg9n7qqTwzJ07CG4YjjuDF9QoLk1cA&lt;br /&gt;
joJU7g8gXKkA+L1Ytsw+Ej/0UN/1FAckAdfmzdknFX/8I7e7sPYuNvmKK+y/9+/P5dNJhd6GS0v5&lt;br /&gt;
/CtWsNrZEVKxbl12ScU993B7mT17NmbPnp3we725/GqWkXVSAY6L+FOKfVbLP0Q0AsALAOYppf4r&lt;br /&gt;
6kVmzZqFKbLerofKSpZEM00bayIbpGLnTn5pbKRCFgIKS24E8JK+v/wlcMIJ4dfLxbSwE07gjrsz&lt;br /&gt;
Gm4iJg1r1wYrFVHcHx0hFWPGcKfR1pa9WTfZRmkpcPPNwCWXpHccEa82edJJdlIhgZphSgXgr6Bo&lt;br /&gt;
6xRHjOD2deut6ZUNAG680XeddEZIe9h//8ymSw4axHW3a1fw4lDSroNWxpX3IltJ2bKN0lJuJ9l0&lt;br /&gt;
fwDRBkHnn89qWVh/oU8rbW5OPG9hIX9fvpy/d4RU9O+fvToQpaK4GKiqqkJVVVXC79XV1ZiarU7S&lt;br /&gt;
gqyTCqXUDgA7ouzrKRQvAHgLwJUdvXZxMTB5cvYS2IwcyS9lpqP0IUOYwa5YkWyU9VHI+vXhbos+&lt;br /&gt;
fcJ9g7lE//68pHAcU86iQIIZO+L+6AipKCzkTqO+PjiYM24QATfdlNmxJ57IEr2N0EZxfwDcKe7b&lt;br /&gt;
Z1cqrr0WqKrKbJbWtGnxSfdRIKQi02BxaY8SKBgWU5GKVMSRhyIKjj02uOy5RkUF8JWvhO+jTyut&lt;br /&gt;
q0sOpqyo8KdvZtpPlJWxapTJ2kg2HHwwK3lxxVTkQqmIBE+heAnAGgDfAVBOnlallNoafGQwhg1L&lt;br /&gt;
z2ecCkTAP/6ReQItYa7LlydLW7JYU3s7y78die7PNe67L+4SBENIQ0cCNTtCKgA2CHv3xhfImmtc&lt;br /&gt;
fbV9e5RATcBPTmYzcqeckp0ydkaUlHCwpiTiSxfSHqVTy9T9EfZ73PjjH+MuQThGjeIFygD7+kfl&lt;br /&gt;
5b4LKVOl4pZb2E2YLfTuzWQtncDnbCI2UgHgdADjvD9JMULgmIuMONtjj9kDbjqCjkRGSyOrr092&lt;br /&gt;
fwwZwlP8tm3jBpWtaaA9DWIsg5SKceNYbbGRTVmEThZry5RU3H23vypiT0JUpUJWIu3IDJauihde&lt;br /&gt;
yDxgTtqjJFazkYpJk7jjC5rl1tndH50dulJhm+FRXu4vKJgpqciFCvzoo9nLUJouYiMVSqn7AGR1&lt;br /&gt;
DJwqw2W+oTdAk1TIzBBpsJ1ZqejMSLUOi9SzLQmMGOmNG/n3TAlptoNjuwqElEmCplRKRU8kFR0Z&lt;br /&gt;
LZpKhY2cVFUBn/1ssEpmSw3tEB2jRjFpqKnhGDibUgFwW0+V/CqfiDOwvtNMKe2O0BtgEKkIS3zl&lt;br /&gt;
kBqplAogOKucntukpxKDjkBIgigRqZSKuHy8XRVR3B9EiflvTDilomMQuyy5PoJIRWcMZI8LjlTk&lt;br /&gt;
EEVFvmE1RyySd/+DD3ifdNInO/g4/HCu20wip3WlwpGK9JEuqeiJSkVHUFzMsxPC3B+pcMghHECc&lt;br /&gt;
7dkVPQXilpaF10wFQOy6IxU+4oyp6BEoLbWv2yGNcNGi7Kd37kmYOJEDXjOBIxUdg9SfuDfMEXOU&lt;br /&gt;
QE2HYBBxu+wIqTjsMD/zqEP6GDEiMSupUypSwykVOYYw2yBSsXChc33EBXkGQeu7OIRDVyr69Usm&lt;br /&gt;
xk6p6DgGDeK1d/r1y34QukNqFBYysRClIohUxBnD0NngSEWOUVrKTNdsjNII33/fkYq4MGIE+5pl&lt;br /&gt;
+WeH9GCSChOmUtGZAtm6CgYN4vY5bZpTM+PCqFF+gitzHSinVCTDkYoco7SUI7DNJW2lEba3u+mk&lt;br /&gt;
cYGIkzsBjlRkAt39EUYqduzg+KJsJffpSZB2Ke3UIf8YPdpfG8hsw45UJMORihyjosKeaVHvxJxS&lt;br /&gt;
ER8cqcgcqZQKmXWzY4dzfWQKaZdhC2M55BZin23EobiY/8IWe+xpcIGaOcb3v8/pXU0UFvqpuh2p&lt;br /&gt;
iA9irB2pSB9CFLZvt+djKCzkkd327dlLnd/TMGgQ1+Mxx8Rdkp4Lsc+2uAkiXuzRtmBbT4UjFTlG&lt;br /&gt;
ZWVw4hlZcMyRivgweTJwxhn+IjwO0dG7N8/4qKsLXoWzXz/+Pa71Hbo6TjyROy6n9MQHcU8HuTiO&lt;br /&gt;
PTZ/ZekK6BTuDyLqQ0QLiaidiA6Nuzz5gjTSIFJhLlnbXRHnfRIBzzyTnzUouuPzlLgK3f2h36ds&lt;br /&gt;
767TSXP9TC+7jNPAx43u2HZtsN1nmPvDIRmdglQAuA3ARvC6Hz0GQ4awLByUt78nv8jdEd3xPqdM&lt;br /&gt;
4c9UpOKII/JYqDyiOz5TG3ryfYpS4aaNRkPspIKIzgYvLnYdeEGxHoPSUuf6cOjaOP10/gya7iiJ&lt;br /&gt;
yWQ/B4euhrIyJsdOqYiGWGMqiKgCwB8AzADQHGdZ4sA3vsGrlDo4dFWcfjpw/fX+8s8m9u3jz+68&lt;br /&gt;
xLlD9wYR8LvfdWzF6p6EuAM1/wTgLqXUO0QUEOrVfTFtWtwlcHDoGA47jD9l+ecguNk1Dl0Zl10W&lt;br /&gt;
dwm6DrJOKojoZwCuD9lFATgQwFkAigH8rxwa8RL9AGDZsmWZFrHLoL6+HtVBQ8BuBHefXRs33cTS&lt;br /&gt;
sNyafp833si+6G542wC67zM14e6z+0DrO3OS+J2Uym5sJBENAZAqpGUNgEcBfMrY3gtAG4CHlFJX&lt;br /&gt;
BJz/YgAPdbScDg4ODg4OPRiXKKUezvZJs04qIl+YqBKAPu9hBIBnAJwP4E2llHVtPY+0nAlgLYA9&lt;br /&gt;
OS6mg4ODg4NDd0I/AGMBPKOU2pHtk8dGKkx4MRVrAByulHo37vI4ODg4ODg4pIfYp5Qa6BwMx8HB&lt;br /&gt;
wcHBwSFtdBqlwsHBwcHBwaFro7MpFQ4ODg4ODg5dFI5UODg4ODg4OGQFnZJUENEYIrqbiFYTURMR&lt;br /&gt;
fUBEPyKi3sZ+o4joX0S0m4i2ENFtRFRg7HMoEb1CRM1EtI6Ivp3fuwkHEX2PiOZ791AbsE+78beP&lt;br /&gt;
iC409unU9wlEvtcu/0xNENFay/P7jrFPyvvuCiCiq4lojfds3iCio+IuU0dARD+0vH9LjX1uJqIP&lt;br /&gt;
PVs1l4gmxFXeqCCiE4hoDhFt8u5phmWf0Psior5E9Bsi2k5EDUT0OBGV5+8uUiPVfRLRnyzP9ylj&lt;br /&gt;
n65wnzcQ0ZtEtIuIthLRE0Q00bJfzp9pZzVak8HJsL4E4CAAMwF8BcAtsoNncJ8CJ/A6BsBlAC4H&lt;br /&gt;
cLO2zwDwNNU1AKYA+DaAHxHRVfm4iYjoDc7Z8dsU+10GoALAMADDAfxdfugi9wmkuNdu9ExNKAA3&lt;br /&gt;
IvH5/Up+jHLfXQFE9DkAtwP4IYAjACwC8AwRlcVasI7jPfjPbhiAj8sPRHQ9gK8D+DKAowHsBt9z&lt;br /&gt;
nxjKmQ72A7AQwNdgCZCPeF93APgkOA3AieC0AH/NbbHTRuh9evg3Ep9vlfF7V7jPE8A2ZRqA08C2&lt;br /&gt;
9lkiKpId8vZMlVJd4g+84NhK7fvZAPYCKNO2/ReAOgCF3vevAtgu371tPwOwNO77sdzfZQBqA35r&lt;br /&gt;
BzAj5Nguc59h99rdnqlWvjUArg35PeV9d4U/AG8AuFP7TuDVh78Td9k6cE8/BFAd8vuHAGZq3weC&lt;br /&gt;
1zG6MO6yp3GPSfYl1X1531sAfEbbZ5J3rqPjvqc07vNPAP4WckyXu0+vjGVeGT+e72faWZUKGwYB&lt;br /&gt;
0CXzYwAsVkpt17Y9A6AEwMHaPq8opdqMfSYRUUkuC5sD/IaIthHRf4jIzDbaXe6zOz/T73qSYjUR&lt;br /&gt;
XUdEvbTfotx3pwaxa3IqgOdlm2Kr9ByAY+MqV5ZwgCefryKiB4loFAAQ0f7gka1+z7sA/Add+J4j&lt;br /&gt;
3teRYGVN3+d9AOvR9e79ZM9lsJyI7iIifT3Sqeia9zkIrMzUAvl9pl2CVHh+n68D+J22eRiArcau&lt;br /&gt;
W7Xfou7TFXATgAvBstbjAO4ioq9rv3eX++yuz/ROABcBOBnchr8Hf80boGvek4kycJp92310lXuw&lt;br /&gt;
4Q2wK+pMsAt2fwCvENF+4PtS6H73HOW+KgC0eh1T0D5dAf8G8AUApwD4DoCTADxFRLIW1TB0sfv0&lt;br /&gt;
yn4HgHlKKYn/ydszzesqpRRxsTGl1ArtmJHgB/8XpdS9OS5iVpDJfYZBKXWL9nWRZ9C+DeDX/9/e&lt;br /&gt;
/cdaXddxHH++JIiE0M3ipg3QcLM/TCRrYgxoMWGhrT/a+mWKRtO1VZYxloYmabkRg36AZjMNmLrh&lt;br /&gt;
zNI2/I0NCMWQRMSQUsKmiKReRSgR3v3x+Rz9+uVe7rn3fu8958DrsZ2dc77fz/d7Pu/zPfd+3+fz&lt;br /&gt;
+XzPp+e1rEbVsbaK7sQdET8vLN8o6U3gekmXRsTePq2o9UpE3FN4ulHSWuBfpCT/742plVUlIpYV&lt;br /&gt;
nj4p6Qngn6QvACsaUqneu5Y0FnF8I168v6c+n0fqwzqYZ2oPJB0HPEjKuC4qldsOlEeWtxXW1e7b&lt;br /&gt;
uijTF7oVZw+sBS6XNDCflBoVJ1QbazMf07LexL2W9Ld3PLCF+uJudjuBfXR8bFolhi5FRLukp4ET&lt;br /&gt;
gYdI40baePc3wDZgff/XrjLb6Tqu7cAgScNK32xb+nhHxLOSdpKO7wpaLE5JC4FpwISIeKGwqt+O&lt;br /&gt;
ab8mFZEmL6lrApPcQvEg8Cjw9Q6KrAEuk/SBQl/0FKAd2FQoc7WkARGxr1Bmc0S09zCMLnUnzh4a&lt;br /&gt;
C7xS+JbbkDih8lib9piW9TLusaTBTzvy83ribmoRsVfSOmAycCe83Qw7GfhlI+tWJUlDSSecxfkE&lt;br /&gt;
tJ0U44a8fhhpBP6ixtWyd+qMax1pRunJwB25zEnASNLnuSUpTXR5DFA7IbdMnDmh+DwwKSK2Fdf1&lt;br /&gt;
6zFt9CjVTkauHkf6BndvftxWuxXKHEG6ZG05cAqpz/NF4KrS6NbngcWk5qAvAbuAGY2OsVDHEcAY&lt;br /&gt;
4ArSSWRMvg3J688GZpAG7I0mXf2wC7iileKsM9ZD4piWYh4HXJzjOQE4YpsZqQAABkxJREFUJ8d0&lt;br /&gt;
Y3c+y61wI3UJ7Cb1UX8UuJ6UeH2w0XXrRUw/I11aNwr4FHBfPjbH5PWzcoyfAz5GutR7CzCo0XXv&lt;br /&gt;
Iq4h+W/vVFKC+938fES9cZGa2Z8ldRWcBqwGVjY6tnrjzOvmkk6so0gn078CTwEDWyzOa0lXi02g&lt;br /&gt;
cL4EBhfK9Msxbfib0ckbNJ3UlFq87Qf2lcqNAP6UTyovkga/HVEqczLw5/zPbhsws9Hxlep3Uwex&lt;br /&gt;
7gMm5vVTgcdIJ+HX8uNvdLCfpo6znlgPlWNaqutYUpb/Mum68I35j3tgqVyXcbfCjfR7AFtJl6qt&lt;br /&gt;
AT7R6Dr1Mp5bSZfF7smftVuAE0plriQlurtJV+2c2Oh61xHXpNr/1NKtmOweNC7gvaTfRtgJvA7c&lt;br /&gt;
BgxvdGz1xkmaAvxuUtP+f0ndlddRSoJbJM6OYtwHnNedz2oVsXpCMTMzM6tES1xSamZmZs3PSYWZ&lt;br /&gt;
mZlVwkmFmZmZVcJJhZmZmVXCSYWZmZlVwkmFmZmZVcJJhZmZmVXCSYWZmZlVwkmFmfUpSTdJ+n2F&lt;br /&gt;
+1shaX5V+zOz6vgXNc2sT0l6P+l/zWuSJpLmBNlTLEL6gvNQRFxcx/6OBvZGxBt9UmEz67H+nvrc&lt;br /&gt;
zCoiaWC8M1Nt04qI1wtP3wfcGhE/LpaRNAq4ps79vVph9cysQu7+MGsCuUn/V/n2qqSXJJVPvM9K&lt;br /&gt;
mi1psaR24HpJP5K0X9K+fF+7nZe3kaRLJT0jabek9ZK+UNjn0ZJulrQjr98saXpeNynva1ih/Ji8&lt;br /&gt;
bGR+Pl3SK5KmSNok6XVJyyW1FbbpdveHpPH5PXlD0st5n0cV3qv5hbKDJM2T9G9JuyStkTSpi/3v&lt;br /&gt;
l3ShpLvya2ySNE7S6Lz/XZJWSzqhO/U2O9w5qTBrHucBe4FPAt8BLpE0o1Tm+8DfSFM5X0WamvtD&lt;br /&gt;
wLH5fiZpNtRHc/nLgK8BF5Kmil8ALJU0Ia+/mjRN+dR8/03SDIU1HfWPlpcdmet1Dmnq5ZHAvDpj&lt;br /&gt;
PoCkU4H7STO6jgPOAP4IDOhkk0Wk6au/SJrS+TZguaTRXbzUbOB3pKmwnyLNQPpr4CekaZ8FLOxp&lt;br /&gt;
HGaHI3d/mDWP5yLikvx4i6RTgO8Bvy2UeSAiFpS22w0gaRwpSTg3Ip6SNAi4FJgcEY/ksltzQnER&lt;br /&gt;
sJI05fr6iFif12/rQb3fA1wUEVtzPRYCl/dgPzWzgEcj4tuFZZs7KphbTM4HRkTE9rx4vqTPAheQ&lt;br /&gt;
EofO3BgRt+f9zCVN1T4nIu7Py35BmiLbzOrkpMKseTxcer6G1FqheGdE9bqONswn1zuAubUTJXAi&lt;br /&gt;
qRXhPkkqFB8IPJYfXwfcLuk04F7gDxGxppv13l1LKLIXgOHd3EfRGGBZnWVPJrVgPF2KcRDvbnHp&lt;br /&gt;
yBOFxy/m+42lZYMlDY2IXXXWx+yw5qTCrLUccMWDpCOBO4HVEXFlYdXQfD8NeL602f8AIuLunJBM&lt;br /&gt;
A84EHpC0MCJmAftrL1HYbmAHdSoPFo3SNt21p+sibxsKvAV8nHfqW9NVIlCsdxxkmbuJzerkpMKs&lt;br /&gt;
eZxeen4GsCW6vu77ZtIJ8NzS8k2k5GFURKzqbOOI+A+wlDTWYhUwl9QF8RIpOTgWaM/Fx9YRR29t&lt;br /&gt;
ACYDc+oou57UUtEWEat7+bq+vt6sl5xUmDWPkZLmAb8hDRT8FmlMRackzSGdgM8EhhWu1GiPiF15&lt;br /&gt;
fwskDQBWAUcB4/P6pXn7dcCTwGDgbFIyAvAP4DngSkmzgZOA2piPvnQNsEHSItLAyb3Ap4FlEfFy&lt;br /&gt;
sWBEbJF0C7BE0kxSkjEc+AzweEQs78brdtS60psWF7PDjpMKs+axhPQ7DmtJTfoLIuKGwvqOvklP&lt;br /&gt;
BIYAfyktvwBYEhGXS9oB/AD4CPAqaTzFT3O5N/Pj40ndDiuBrwBExFuSvkwad/E46YqSH5Kurugz&lt;br /&gt;
OVGYkuv1SK7XI6SrM+DA9+F80oDMecCHSWMpHgbuOtjL9GKZmXXCv6hp1gQkrSBdhdEfLQENI2kq&lt;br /&gt;
cHpnP34VEV9tTM3MrAoegGRm/c3dDGaHKHd/mDWHw6XJsB04S9JZhWUixX9PY6pkZlVx94eZmZlV&lt;br /&gt;
wt0fZmZmVgknFWZmZlYJJxVmZmZWCScVZmZmVgknFWZmZlYJJxVmZmZWCScVZmZmVgknFWZmZlYJ&lt;br /&gt;
JxVmZmZWif8DmUFKh7PC9xMAAAAASUVORK5CYII=&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Zwróćmy uwagę na to, że czym większe przesunięcie $m$ tym mniej jest punktów, z których estymowana jest wartość oczekiwana i większa jest niepewność tej estymaty.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;Estymacja-parametr&amp;amp;#243;w-dla-modelu-rz&amp;amp;#281;du-$p$&amp;quot;&amp;gt;Estymacja parametr&amp;amp;#243;w dla modelu rz&amp;amp;#281;du $p$&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Estymacja-parametr&amp;amp;#243;w-dla-modelu-rz&amp;amp;#281;du-$p$&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;Wyżej zaprezentowany algorytm można uogólnić na modelu rzędu $p$. Estymację parametrów metodą Y-W można zaimplementować np. tak:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[10]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nf&amp;quot;&amp;gt;parametryAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;&amp;amp;#39;&amp;amp;#39;&amp;amp;#39;funkcja estymująca parametry modelu AR &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    argumenty:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    x- sygnał&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    p - rząd modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    f. zwraca:&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    a - wektor współczynników modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    epsilon - estymowana wariancja szumu&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    funkcja wymaga zaimportowania modułu numpy as np&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    &amp;amp;#39;&amp;amp;#39;&amp;amp;#39;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;correlate&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;mode&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;full&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;hstack&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;),&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)))&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm_ak&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:]&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;RL&amp;lt;/span&amp;gt;  &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;R&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;RP&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;aa&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;RP&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,:]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;aa&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;linalg&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;solve&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;RP&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;RL&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ak&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]))&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.5&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Jak-znale&amp;amp;#378;&amp;amp;#263;-rz&amp;amp;#261;d-modelu?&amp;quot;&amp;gt;Jak znale&amp;amp;#378;&amp;amp;#263; rz&amp;amp;#261;d modelu?&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Jak-znale&amp;amp;#378;&amp;amp;#263;-rz&amp;amp;#261;d-modelu?&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;quot;Kryterium-Akaike-(AIC):&amp;quot;&amp;gt;Kryterium Akaike (AIC):&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Kryterium-Akaike-(AIC):&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;$\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) $&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$p$ - ilość parametrów modelu,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$N$ - ilość próbek sygnału,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$V$ - wariancja szumu.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Poniższy kod jest przykładową implementacją kryterium AIC:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[11]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nf&amp;quot;&amp;gt;kryterium_AIC&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;maksymalnyRzad&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zakres_rzedow&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;maksymalnyRzad&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;AIC&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zakres_rzedow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zakres_rzedow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;parametryAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;AIC&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;2.0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;log&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sqrt&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;p:&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39; a:&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39; sigma: &amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;AIC&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Zobaczmy jak działa to na przykładowym syganle AR:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[12]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;from&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nn&amp;quot;&amp;gt;numpy.fft&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;fft&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;fftshift&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#wspolczynniki modelu AR &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;([&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.7&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;])&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# liczba próbek&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# miejsce na realizację procesu AR&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#generujemy realizacje procesu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;random&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;randn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;wygenerowany sygnal&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;subplot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;AIC&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;kryterium_AIC&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;6&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;AIC&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;),&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;AIC&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;Kryterium AIC&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;xlabel&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;rząd modelu&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ylabel&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;AIC&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_subarea output_stream output_stdout output_text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;p: 1  a: [ 0.50668557]  sigma:  2.97847718464&lt;br /&gt;
p: 2  a: [ 0.86625887 -0.70965766]  sigma:  2.09847615939&lt;br /&gt;
p: 3  a: [ 0.85333373 -0.69388032 -0.0182132 ]  sigma:  2.09812807673&lt;br /&gt;
p: 4  a: [ 0.85288373 -0.71102433  0.0028705  -0.02470744]  sigma:  2.09748756975&lt;br /&gt;
p: 5  a: [ 0.85113675 -0.71082137 -0.04740376  0.03559724 -0.0707068 ]  sigma:  2.0922378558&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAisAAAGHCAYAAABxmBIgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzsfXmYXUWZ/lvpfUk6K9lICBDWqCwRERRRXFCGARRcIu6j&lt;br /&gt;
qDjqxBkXGAWBn+KGGRF1VBARh6iICCKbLAqIiBKULYgEgpCEpLN0d3rL1vX747uv9Z26de49d+nu&lt;br /&gt;
2516n6ef2/fcc+rUqVPLW+/31VfGWouIiIiIiIiIiFrFhNHOQEREREREREREIUSyEhEREREREVHT&lt;br /&gt;
iGQlIiIiIiIioqYRyUpERERERERETSOSlYiIiIiIiIiaRiQrERERERERETWNSFYiIiIiIiIiahqR&lt;br /&gt;
rERERERERETUNCJZiYiIiIiIiKhpRLISEREREfFPGGOONcYMGWNeMdp5iYggIlmJiIiIiPAR92GJ&lt;br /&gt;
qClEshIRERERERFR04hkJSIiouowxrSOdh4iIiLGDyJZiYgoE8aYF+Zs+yeqY4fnjv3ZO/cmY8wf&lt;br /&gt;
cv9fYYzpNMbUBdK81RizUn1vNsZcnDu/xxjzS2PMnNw9zvGunWOM+YEx5nljzKAx5hFjzHu9c+iP&lt;br /&gt;
8GZjzH8bY541xgwYY24zxuwbyM+RxpibjTFdxpg+Y8xvjTFHe+d8PpfmQcaYq4wxmwHcrX4/zhhz&lt;br /&gt;
tzGm1xizJfcMB1ZajrnvJxljbjDGrMk985PGmM8aYyZ41/3WGPNQLo935p7lOWPMJ9U5bbk8LguU&lt;br /&gt;
w1xjzE5jzKf937zz3maM+XPuXXXn7vmx3G97557p44Hrjs799lZ17JW5tAaMMX83xpzBsvauHcrV&lt;br /&gt;
kZONMQ+rd3+8d958Y8y3jTGPG2P6jTEbjTE/M8bsVeiZIiJqAZGsRESUj0cAdAHQjojHABgCcIgx&lt;br /&gt;
ph0AjDEGwFEAfpc750cApgLwB5OZAF4F4Ep1+AoAHwFwA4BPARgA8Gt4PgXGmD0A/BHAcQAuBvAx&lt;br /&gt;
AH8HcBkHSw+fAXAygK8C+CKAlwL4sZfmcbk8twP4PICzAHQAuMMY82J1KvNyNYDm3Hnfz6XxGgA3&lt;br /&gt;
A5gO4FwAFwE4GsA9xpj5uevKLUcAeA+Arbl0PwbgzwDOB3Ch97wWUuY3AXgQwCcArATwJQ7q1to+&lt;br /&gt;
ANcCeGvuXhpvz33+GCkwxrwWwFUANkHe1acB3Jl7XlhrnwbwewCnBy4/HUAPgOtyaR2Wy+sUAJ8D&lt;br /&gt;
cFnu82SE/UmOAfAtAMsBfBJAE4CfG2OmqHOOgLzn5QA+CuA7AF4N4E5jTHPac0VE1ASstfEv/sW/&lt;br /&gt;
Mv8A/ArAH9T3n0MG7e0AXpc7dhhk4D0x990A+AeAq7y0lgLYCWAv77qveef9AMAuAOeoY5cCeA7A&lt;br /&gt;
ZO/cqwBsBtCU+35sLs1HANSp8z6aS/NgdexvAH7tpdcEYBWAm9Wxc3NpXhkonwcBrAPQoY69MPec&lt;br /&gt;
l1dSjsxP4J7fgRCYBnXsztzzvV0dawCwFsDP1LHX5s57nZfmXwDcUaQuLAOwpcg5H8ilv786Vg9g&lt;br /&gt;
A4DL1LHrc88wUx3bJ1ceu7w0hyAkdoFXxkMAzixSVi/JnXe6OnZsLo+vGO32Ff/iH/+ishIRURnu&lt;br /&gt;
BnC4MaYl9/3lAG4E8FfIbBdwKsE9AGCttQD+D8BJxpg2ldbbAdxrrX0m9/31kFn0d7x7fhNCeDTe&lt;br /&gt;
BBnw64wx0/gH4FaIGnK4d/4PrLW7vOcwkAERxphDAewHYLmX3kQAtyOpgiCXz+/qA8aYWQAOgZCS&lt;br /&gt;
7n+eaO3DAH4D4ATv/iWVYy6tbep+7bk83gOgFcA/TU059Fprr1LX7gBwP585h9sg5Oqf6ocx5gUA&lt;br /&gt;
XoSk4hVCF4A23/zi4WcAtiGprrwewDTkVJucCevVAH5prV2v8vsURG0J4TfW2tXq3IchSs0+6pgu&lt;br /&gt;
q3pjzFQAT+Xy7dePiIiaQiQrERGV4W7IDP0oY8z+AGbkjt0FN8i+HMBj1toudd2PIAPqGwHAGHMA&lt;br /&gt;
gMW548RekMH5ae+eT+ovxpgZACYDOANAp/f3g9xpe3hpPOt935L7pNlgP5VPnd4GAO8H0GiM6fDS&lt;br /&gt;
8PNJX4gnkI+VAKYrclJWORpjDjbGXGuM6YIMzp1wpMLP33OBfGxRz6yJ5CnKNHI6RLn4eeB6jW/n&lt;br /&gt;
nvVGI75Al/nEJUfafgVnVmL6a6y1d+a+7wGgBd57ziF0DMh/n4D3bEb8n843xvwDQpg2Qt5nB/LL&lt;br /&gt;
KiKiplA/2hmIiBjj+DOAQYjS8CyADdbaJ40xdwP4sDGmETLY/kJfZK1daYx5AMA7IDPqd0AGkKvL&lt;br /&gt;
yAMnHT+G+LiE8JD3fVfwLKfYMM3/hKgbIfR63wfSMpgBJZdjjizdBVEGPgtRCQYhpO9LyJ+MFXtm&lt;br /&gt;
4kcQv49TAPwEwBIAv7LWbi30ANbazpwidTyAN+T+3muMucJaqx2dfwTgNGPMSyHmuH8FcEmhtDMg&lt;br /&gt;
y7NdAuDdEHPVfQC6IYrYTxEnrhE1jkhWIiIqgLV2hzHmfsgg+w+4VTB3Q/w7TgcwEzKo+vgRgIty&lt;br /&gt;
5pIlEP+QbvX7M5BBZG+InwixH5LohPg31Flr76jsif4J3m9rBWnSnHVA4LcDAWy01g4AZZfjKyHK&lt;br /&gt;
wcnW2t/zoAmsaioF1tpHjTEPAjjdGLMGwHyIk3OWa3dCHKB/ncvLdwCcYYy5IGfGAcTheGPume6H&lt;br /&gt;
qCjacXcDhHQtDNzCf/el4FQAP7TWfooHjDFNEFUuIqKmEdl0RETluBvAkZDB824AsNZuAvA4ZEWI&lt;br /&gt;
hVrKq7A89/kNCCHxfSJugcyMz/SOfxRqRYi1dgjANQBONcYs8m9ijJle0tMIHoAQlv/y/Goyp2mt&lt;br /&gt;
fR7imPpuY8wkde0LALwOuQFdodRy3AUpn3/2YzkFxi+vcnAlRCH5DwixuLnYBTkfEB8P5z6beCDn&lt;br /&gt;
K7QcwFshq5kettY+on4fgvjOnJIjskx/IcS/pVzsQn6f/zEAeUvoIyJqDVFZiYioHHcD+G8A85Ac&lt;br /&gt;
TO8C8EEAT1tr1/oXWWs3GmNuBvBmiH/Bjd7vK4wx1wD4jxw5uA+yUoOza72E9TOQQf6PxpjvA3gM&lt;br /&gt;
slR3MWQ5c0mExVprjTHvz+XpUWPM5QDWAJgLWV7dDVlGWwyfzKVxnzHmMoifzr/nnvc879xSy/He&lt;br /&gt;
XDo/MsZcnDv2DlQnVPxVAL4CMQV923NGTsOlOcJyB8Q/ZgHkWR+01q70zv0RhCi8ErLM2cfnIYTu&lt;br /&gt;
3pw6Uw9Rdx6BOC2XgxsAvNMY0wOpH0dBHHk3Bs71TWMREaOKqKxERFSOeyGz1h4k/TvuhgycIRMQ&lt;br /&gt;
QYfan+ZWp/h4JyR+xgkAvgyZob8NMpgM8iRr7QbIMtQfQJx2vwkZDCcjfzBMG8wTx621v4MMaH+C&lt;br /&gt;
DJQXQ3we1kH8HorCWns7RA3YCCEnn4CU18vVqieipHK01m4G8C+Q5ccX5NK+BeHBP+/5Ch3Pleet&lt;br /&gt;
ua+psVU8XAnx2/kw5J29E6KgnOCfaK1dAeBRiAP1VSm/vx6y7Px8AO+DEJjbod67yn/o2fzjH4PU&lt;br /&gt;
t7cD+BrErPYaiO+Rf33cGyiipmDE+T0iImI0YIw5CRKI7Bhr7b0ZrzkUwApIbIzlxc6PKA/GmF8A&lt;br /&gt;
eIG1dv9hSn8FgE3W2teWcM21kFg4IT+giIhxizGrrBhjjjHGXG8kzPZQrtPXv1+eO67/bkxLLyJi&lt;br /&gt;
lHAGgKfSiEpKZNH/gCgQhRSbiApgjJkNUW1+VOzcMtN/MYBDkb56K+/dG2P2g6g0d4aviIgYvxjL&lt;br /&gt;
PittEOe9y+AtC1W4CeLARvvrtpTzIiJGFMaYt0ECjb0BIs+n4VPGmMWQAWonZLA6HsB3rbVrhj2j&lt;br /&gt;
uxmMMQsg8VzeD4kW+70qp78IwIshJqs1kCBxaXjKGPNDyJLsBQA+BDEBfbWaeYqIGAsYs2TFWnsz&lt;br /&gt;
ch76gX08iG3W2s6Ry1VERGZcBVlufCnyI9Rq3AvxK/gsZI+ef0DC239xuDO4m+JYAJcDWA3gXTnf&lt;br /&gt;
lWriNMgeP48DWGKt3V7g3Jsg/kmzIBOtewGcba1dVeCaiIhxiXHhs2JkF9JTrLXXq2OXQ1Yr7ICs&lt;br /&gt;
GLgDwGdzTnkRERERERERYwRjVlnJgJsgsSeeBrAvZBfWG40xR9nxwNAiIiIiIiJ2E4xbsmKt1bbg&lt;br /&gt;
R40xD0OCXL0SKQ5quU3QjodIwP7ywIiIiIiIiIh0NEP8q27JBXSsGsYtWfFhrX3aGLMREsI6zZv+&lt;br /&gt;
eMgmZhERERERERHl4XQE4gdVgt2GrBhj9oRsw76uwGmrAeDHP/4xDjrooJHI1rjA0qVLsWxZphhh&lt;br /&gt;
EQqx3EpHLLPyEMutdMQyKx0rV67EO97xDiA3llYTY5as5PYrWQi3LHkfY8whkIiPmyErJq4B8Hzu&lt;br /&gt;
vC9Dtm+/pUCygwBw0EEH4fDDDx+mnI8/dHR0xPIqA7HcSkcss/IQy610xDKrCFV3oxizZAUSq+BO&lt;br /&gt;
uJDSF+WOXwHZyOxFAN4FCTe+FkJSzkkJaR4RERERERFRoxizZCW3b0mhCLyV7E4aERERERERUSMY&lt;br /&gt;
s+H2IyIiIiIiInYPRLISUTGWLFky2lkYk4jlVjpimZWHWG6lI5ZZbWFcRLCtFowxhwN44IEHHoiO&lt;br /&gt;
VRERERERESVgxYoVWLx4MQAsttauqGbaUVmJiIiIiIiIqGlEshIRERERERFR04hkJSIiIiIiIqKm&lt;br /&gt;
EclKRERERERERE0jkpWIiIiIiIiImkYkKxERERERERE1jUhWIiIiIiIiImoakaxERERERERE1DQi&lt;br /&gt;
WYmIiIiIiIioaYxZsmKMOcYYc70xZo0xZsgYc1LgnPONMWuNMf3GmN8YYxaORl4jIiIiIiIiyseY&lt;br /&gt;
JSsA2gD8BcCZAPL2DDDGfBrAvwM4A8BLAPQBuMUY0ziSmYyIiIiIiIioDPWjnYFyYa29GcDNAGCM&lt;br /&gt;
MYFTPg7gAmvtDblz3gVgPYBTAPxspPIZERERERERURnGsrKSCmPM3gBmAbidx6y1PQD+COCo0cpX&lt;br /&gt;
REREREREROkYl2QFQlQsREnRWJ/7LSIiIiIiImKMYLySlYiIiIhxj899DvjSl0Y7FxERw48x67NS&lt;br /&gt;
BM8DMABmIqmuzATwYLGLly5dio6OjsSxJUuWYMmSJdXMY0RERERFuOsuYOLE0c6F4GUvA970JuA/&lt;br /&gt;
/3O0cxIxEli+fDmWL1+eONbd3T1s9zPW5i2kGXMwxgwBOMVae706thbAV621y3LfJ0GIy7ustVen&lt;br /&gt;
pHM4gAceeOABHH744SOQ84iIiIjy8eIXC1m5887RzgnAZQ7VGFK++U3g7LOBrVsrTyti5LBixQos&lt;br /&gt;
XrwYABZba1dUM+0xq6wYY9oALIQoKACwjzHmEACbrbXPAvgfAJ81xjwJYDWACwA8B+C6UchuRERE&lt;br /&gt;
RNXR1+dIwnjCBRcAvb1CfMbj80WUjrHss/JiiEnnAYgz7UUAVgA4DwCstV8B8E0A34WsAmoB8AZr&lt;br /&gt;
7fZRyW1ExCjAWuBrXwO2bBntnEQMB/r7ZVAfbVBNqRaxaGuTz66u6qQXMfYxZpUVa+3vUIRsWWs/&lt;br /&gt;
D+DzI5GfiIhaxNNPA5/8JPD448Cll452biKqjb6+6phdqpEPAGhpqU56JCsbNwJTplQnzYixjbGs&lt;br /&gt;
rERERBQBB7JamH1HVB99fbXxbulbUm2y0tlZnfQixj4iWYmIGMfYuVM+h4ZGNx8R1cfQEDA4WBtk&lt;br /&gt;
padHPguRle3bszsCt7fL58aNleUrYvwgkpWIiHGMgQH53LVrdPMRUX3098vnjh1CBEYTVFaam9PP&lt;br /&gt;
Oe884LjjgOeeK54eSc/urKwMDQHPPjvauagdRLISsduhFmz8I4XBQfmMysr4A/1E/P9HA1mUFZKU&lt;br /&gt;
LErQjh3yuTuTlfe8B5g/35XF7o5IVmoQUfocXuyxB3DMMaOdi5EByUpUVsYfNEEZbVNQFp+V+txy&lt;br /&gt;
jix1kYrg7toX9vcDV17p/o+IZKXmsHYtMGMGcMUVo52T8YuNG4F77hntXIwM2OlHZWX8QQ9io01W&lt;br /&gt;
sigrdXXymUUpYL3dXZWVf/zD/c+y2N0RyUqNgfEw7rprdPNRa9i5E3jssdG7/4MPAtdcM3r3LxdR&lt;br /&gt;
WRm/qCUzEJWVCQVGFCorrJOFQCK2u8YH0j5IkawIIlmpUWzbNto5qC3ccANw6KGVS6LlDtpHHQWc&lt;br /&gt;
dtrY83eJysr4RS2ZgaiscPUZIAHiLr7YfaeykmXw5Tmj7Tg8WtDqUyQrgkhWagysmGOJrAwNAT/6&lt;br /&gt;
keuwhgMbN0oDrvQexWzgzz4bPqe1VT7Xravs/iONqKyMX9SSGYjKCgdZkuOvf92dQ2Uly+DLZ4tk&lt;br /&gt;
JZIVIpKVGgMHl7FEVlatAt79bmDmzOFTHth5VSp3b9hQ+Pf58+XPx6JF8vlg0T27awusT7HDG/v4&lt;br /&gt;
wQ+AJUscEaglMxAnERxkWd80iSqFrPCc3XUlTCQr+YhkpcYwFpUV5nVwcPg6zWqTFUrSIYQ6h9mz&lt;br /&gt;
5XOskRU+y2gPZlnx0EPAAw+Mdi5qD2vXAv/2b8BPfhJuC6OtrPD+HGSZR52v8WIG+u53RUkeTkSy&lt;br /&gt;
ko9IVmoMY5Gs6IY1XJ1mtcjK+vXyOXFiadex09Re+mMBVFbGClk55BDgxS+uPJ2bbpL9kMYLNm1y&lt;br /&gt;
/+u20NQkK3BGm6ywntFnhXnU/Ridb4sNvjt3Sp/S3Fx9smIt8KlPAX/7W/JYMcVV46qrgJ//vLr5&lt;br /&gt;
8jHcZOUPfyjtmWsBkazUGMY6WRkrykqhVQshsNOsxZleIVRbWbnjDvkbDlTTr+aEE4CDDko6fI5l&lt;br /&gt;
6P6AbaG/X3ypmptHv79gu/CVFQ2+i2KDL3/v6Ej2Ldu3A3PnAnffXX4+V60CvvpV4Jxz3LGbbgL2&lt;br /&gt;
2SfbKiVA/HOGmxwOJ1nZuRM4+mjg9NOrm+5wY9ySFWPMucaYIe9vFBe/ZsNYJyu1rqzQebbUDoDv&lt;br /&gt;
Y6yRlWorK69+tfwNB/Rst1r4zW+qn+ZoQNc7toWBAVFVGhtHv7/g/QuRFT5DsbbHazs6ks/d2Snm&lt;br /&gt;
sC99qfx8kugsXOiOPfOMtI/u7mxplENWVq8uLRzFcJKVv/wl/x5jAeOWrOTwCICZAGbl/l4+utkp&lt;br /&gt;
jnJnwv39wFveMjpBlMaSssJOdWCgNGdgXqcHhS1bgBe8QDq7WoUmK7W+7PrPf5bPffapPK0ZM+Rz&lt;br /&gt;
vAQV0/WObWDHDqChQcjKaJNo5s83AwHOIdh3vk1DmrKyeXMynXJAskJnX8A5B2clIOWQlW98A3j/&lt;br /&gt;
+7OfP5xkhWXwghdUN93hxngnKzuttZ3W2g25v82jnaFiYMXMyvKJJ58Err7asebhwqOPAtdfnzym&lt;br /&gt;
pfZaJyu6Eyg0G/UH9pAZ6Le/lfJYvryyPA0n9EaGoz2gFcPzz8tnoc3wsoJmvtHw5bjlFuDvf69u&lt;br /&gt;
miEz0M6dQlaamkb/3RZSVhjYLauyosmKfi6qopU866OPyqfuR9jXDidZ2bIF6OrKfj7LsaGh+uH2&lt;br /&gt;
//Sn5Pddu4S8+f16rWG8k5X9jDFrjDGrjDE/NsbMG+0MFQNnwqVUbMDFORhuR8ozzwROPlkctIha&lt;br /&gt;
NQP19opdVsdG0Xkt1An4v4XMQHxXhUKMjza0Hb4WnGyfegr4n/8J/xZSr8oFCfRokJXXvx448MDq&lt;br /&gt;
phkiKzt2yCBTS8pKiKzQTyyrsqLNQLq90sm4kmdlv6rrBclKlvaxa5fkr9R61dWVjBF1332FzUJ8&lt;br /&gt;
xkmTqq+s8Hn5znp75bm++MXq3qfaGM9k5T4A7wFwPIAPAdgbwF3GmLbRzFQxaJ+VrA5fwMiRlbZc&lt;br /&gt;
6X3lK+7YSJqBSukkHnlEPPff/nZ3LKu86itbIWWF76caSsBwQT9jLSyB/Nd/BZYuDf/Gsh3rZAWo&lt;br /&gt;
fsTgkM/Kzp2OrNSaz4qua37AuHKVFZKVSupxiJiUoqzwulL7ue5uKSOW01FHAccem34+y6q9vfrt&lt;br /&gt;
1l8WzmcpVc0fadQXP2Vswlp7i/r6iDHmfgDPAHgLgMsLXbt06VJ0dHQkji1ZsgRLliypej59+I08&lt;br /&gt;
60A4UmSFHcYddzibea0qKzz3t78Vs44xhcmKNmd1dQFz5rjvoVk/n7WWfUEGB6XTZ2c52qCUz7qj&lt;br /&gt;
UU1lhe95tJf0VgshnxWagRoaakNZqa8P+6yQ1Gc1A/FZJ04MkxWGHygHlZIV9rPbt8tfY2O2+1LR&lt;br /&gt;
2bpVzHbFwPbR0jJ8ZEUrK0Dp0cGXL1+O5Z4NvHsYGc+4JSs+rLXdxpgnACwsdu6yZctw+OGHj0Cu&lt;br /&gt;
8qErZimd9kiRleefB177Wlll8cc/Ai9/uRsYjKktnxXd+NixM37D4GB+J6DLO4uyws6zFswrxM03&lt;br /&gt;
S2f4qlfJ92qSlWqQMnaM/f1Sfp/+tKhfesAdD8pKtcEyMSZfWakFn5Xt20V1ZVsIkZWsygrPa20N&lt;br /&gt;
m4HWrxezRaHAjml5DK2OK4esMI3GRvFHaW11JKS7WwL4ffe7wLRpyXv09ADTpxe/T7lk5ZlnJIBl&lt;br /&gt;
IRKVpqyUSlZCE/gVK1Zg8eLFpSWUEePZDJSAMaYdQlRqencXXTHLMQMNZ+dsrXQUb3iDfH/iCflk&lt;br /&gt;
hzJlSm0pK5pw6A5z0iT5vxSyEvJZqUWy8oY3AMcd574PDACTJ8v/xQa0rq7C5otqDIh62e2550pw&lt;br /&gt;
raeekmPjwWdluOK6bNsmg1d7e+36rLS3y/NbmyQrftsp5jCqyQrTA1x7GxoqvsdXCByMJ02qDlnh&lt;br /&gt;
+VOnJpfz/+Y3skP797/vjmllRSNtAlAuWVmwQPwKC8EP2MfnSHv+DRsKT1R+9zvgvPOy57FcjFuy&lt;br /&gt;
Yoz5qjHmFcaYvYwxRwO4FsAOADW8dsPFTgCG12dl9WrgtttKyhp6eqSCz5kjnaRvp548efgG7nJs&lt;br /&gt;
xXqmoCNslktWjKl9suKDygpQmATs3Clks5CTXTWfc2DAmYF8M8H27ZWpOENDjnSNNFmppmT/zDOO&lt;br /&gt;
/GzbJqREqxdUC2vFZ6W93eWrv9+1s1KVFT4zNw/ldZs2ucjT5bxXtum5c6tLVgDg9793/zOPDGlg&lt;br /&gt;
bVJZ0UhTM8ohK6zzt9xS+Lw0ZYV59c/de28JnJeGd70L+Pzn3aqv4cK4JSsA9gRwFYDHAfwEQCeA&lt;br /&gt;
l1prNxW8apQxOOhmwqWQFTacrAPKsceKOacU0FY8c6ZInpoAGCOdU6mdyM6dwHPPFT9vtJWV7dul&lt;br /&gt;
E9LncHZXy6aGrGSFy4YLBVHTz1mpgqDJCjs55s/aytLX1w7Hu9myJb3OlkNWVq1KzsJ5jwUL3Mqp&lt;br /&gt;
7dulzbW2lm4G2jQCPV6IrEydKt9L9VkhOaEzP6/btMn5kZVDztim58xJ9iOlxFlJIytAPkFevdp9&lt;br /&gt;
528+OUlTiMohKyynYs+R5rMC5Cs/mzbJuyy0zcihh8rn7bdny2e5GLdkxVq7xFq7p7W2xVo731r7&lt;br /&gt;
dmvt06OdLx96FghIRZoyRf4fTmWFsmQpIc45oM2alQzxzYalZ33EW99aWMH58IeBeRkWlFfqs5KF&lt;br /&gt;
rOgOX3eG1rrOeLiVla4u4D3vqTxNzpC2b3eDSKEO/tln5bOtwFo5nadKFYQQWUkr/1KhV1IMB1k5&lt;br /&gt;
6qj0OhsKhlYMRx8NnHFG8hhDA3DZ77Zt+WQlixloxQpgjz2Av/41W17KxbZtru7s2CF59Cddpfqs&lt;br /&gt;
+GSlq0v6Hp1mKQiRFWsrIyv6Ha9alUyHZEVPfEohK42NSbLyi18Aixen99ksk6xkJaSs+M7LzLsO&lt;br /&gt;
peEHWmQAxkhWxjlmzABe8hL3faTICp28StnMimTFV1bYafqDw65dwM9+llw67OMnP5HPQrL/jh1O&lt;br /&gt;
8h4pZUX/z5n6pEnDT1auuEL+fvnLytLRpgJ2+tUkK+UMFn6sEAZuY2TStPIvFXxfkyeXRlayRkbl&lt;br /&gt;
tgCh8zVZyXpvtkFdt2hWmDtXPklW2tryg8IVIivXXisD6q23ZstLObDWOdgCjqy0teX3E0DxuqN9&lt;br /&gt;
VvT3rVtdv1VO/SBRmDMnqURz8M/Sjn2yoq955JHkOTQD6YG+EmXl0kuFfF59dfgaP4pwCPQn0mZ8&lt;br /&gt;
XU/9d8O88/P++4X8/u53+ddsHuaQq5GsVAlbtsjspdTN2DZvBh54wH3PSlYGBoBXvEIqDxAmK9/5&lt;br /&gt;
TvoOtmz060pwN378cblu8mTphIopK1kGczYUprVmTX6ERXbO06eXrqyQ9esOkzbltMBv+nx93F9K&lt;br /&gt;
SUVA56m3182wygHVhqwD569+BXz2s/kKHWc/O3ZkU1Zo1ihUf3WnVo6yomdkAwOu/NnJbd/u/LWq&lt;br /&gt;
QVZKcfj+5jdl0M/yXFxpEYpSq6/PEthR1ydNru+7Tz610zGVFU1Ei8VZufFG+dSDS7WhlSx+D22y&lt;br /&gt;
6G92WCw9khVt3qiErLB8Z89220/oMs+qrLCN9vYmyQvrMdNhHxJSVljPi5GV1lZXpxge/xe/CF+T&lt;br /&gt;
pUx4zuTJYWXFH3N8ZYVj1dPKRuErNcOFSFaqhHe+U2x3adE5syIrWfnxj2WPh8tzEWNCZOXMM5NE&lt;br /&gt;
SION/uKLgcceA3796+J5e+QRaTDGhM1A7e3J+3NwyhIummm96EVJpUlfP3VqaTP67m6ZBQBJstLY&lt;br /&gt;
KPnPqqywEba3J/0qQl70F19c2UZ/HGizhiu4+GLgC1+QeqfLnrN1rawU6kyorBRykqvUDKR9JwYG&lt;br /&gt;
XJ3VygqJZFrHOzQEXHJJ4XqgHb6zkhWS/p/9zB372MeAZcvyz91zT/nkTFpD1/Us73DlSve/nnWz&lt;br /&gt;
rLS/R2Nj2AyU5rNirWy/seeewD33FFYvly4t3eGe4LtiPaPPSkuLCxPA/PJZCkGTMF5nbTZl5bbb&lt;br /&gt;
ZDl8CN3dUlZTprjtJ5i3rCbDvj43AfLJih8d11q5D483NLh3zHeRRVnh+y7m85Olb9QB90LKil+u&lt;br /&gt;
vrLCTx2GbKQ2341kpQrYudPNXLRXeDnQS00LVb4rrpBPVpBCZqBQJ0XntyuuABYtAk48sbhTI8kK&lt;br /&gt;
kC/vUlnRFb+UTeQKSYl8pmnTSiMrPT1istLpF3JcY1nW1YWJC5UVSqlDQ/nLIJ97Tgb+ciOYcpBa&lt;br /&gt;
uzbb+TRpPfFEsuPUykopZqCsZKUcM5AfTZcdt1ZWipGVRx8FPvrRwiseyjEDcRDUEvs3vwl84hP5&lt;br /&gt;
53ITPJKVBx5wy/g1WcmirOhzNLnxl3GHfFaKmYH6+qQeLl4safvOkxqXX154xUchMI++suKTlTRl&lt;br /&gt;
haHedaSLaTloAAAgAElEQVRbTVa2b5d77Nrl4pak1b+TTpLo2qHfu7tlkGV76OtzecqqwvX3y3O2&lt;br /&gt;
thYnK8w739fMmVLnrXX5S2tv27fn91OhOEQ9PaXFJ2Jakye78/v6XPDRYsoKP41x5/jvd7gQyUoV&lt;br /&gt;
8NBDUkGPPtrtHEuUyja3bctf8hcCZ86UoguRlRATDxEY+qSk5euJJ4AXvlC+l6KsAOGKHPIpCYGN&lt;br /&gt;
f8aM0mb03d2OrPC6QmRF78eRRlY4W2J5U1ImNm2SAaKY/XblSuCCC/KPc6aVlaxwwNdKBZBUVrKY&lt;br /&gt;
VmgOLJTvUsxA118vQbE09P2LKStpHR+fi+QgBB33Z8eObJ0oO2GWvyab/iDGczdskCB8L34x8N73&lt;br /&gt;
yrFSzUBpK9CYZ7aLNJ+VQg62TO+gg+QzrU7t2iXnluK/FnoGTVa4eslXVlpa8vN6++3Af/838O1v&lt;br /&gt;
u/MYmZffWVeKKSt0fH7oIflct845um7eLIM086nJytSp2cgKQ0vwPTBfbW2OeOh2uGOHq4/TpiXJ&lt;br /&gt;
BZB+z1A/FSIlHR3AKafI/7oPTWufrDvaDNTb60hgVmUldK9IVsYA/vAH6TA+9CGZodKj+qabpLGy&lt;br /&gt;
sfjQhEGv3mhuTioXIXR3iwKQhayEZlQhFaXQEuK1a6VT22cf+e4vXS6mrHDmrqGXw/nPGhospk8v&lt;br /&gt;
XVkJmYGKKSuTJiXvw0aoB1KW6axZyWfmYFcsJPj3vw+cc07+AMHr16wpfD3BfAwOJt8zO04+r/Yx&lt;br /&gt;
CsFXOUIoxQx08snSHjT8/W18srJ9uyPqaXnNQla0sgIUVhQIfwap5fl7702ey3P6+91SbxJCrayk&lt;br /&gt;
mT+tdRMDXc+0GSiNrLS0uPegzUCh8mJ63FQxjazwvErJijYD0WzlKyttbfmDGvPFMmSd1cqK7gP0&lt;br /&gt;
PX3QIZmTxjlzJE4IIObuAw8MKytZY0SlkZV589KVFZKVjg65Rr/zUshKWtBEKmL6eNpy9TRlJU2x&lt;br /&gt;
8tsFv+vzorJSQ/jrX4urHHpVD+3Qf/yjfD7+ePg6/XLZUEIzkhB6emRGt369NJiuLqlwOpy5PtcH&lt;br /&gt;
G9BCtflAIbLC9NjQszjYarIScuQNyd7+/YB8ZYXErre38GxIKyulkpU0ZYXfNVnRz8xBrljHT3Mh&lt;br /&gt;
fSX867MqK8yHr6ywbpFIFiMrvb3i29DXl35epT4rur6X67PCOpWFrDCtLATX75R1W9D3GhxMRmJl&lt;br /&gt;
fphfXW91Ga1aBXzpS1J3L75YFLmurnRlhcc1WeFSVn+SUExZOeAA+UxzptdKUTGcemq+X55PVqgm&lt;br /&gt;
sN7pttfWljQDfeITTpXi6rAQWWFdoflaO+1qvx/2BytW5Nehhx4SnziaPLZtS05EsqjgNG/R0VmT&lt;br /&gt;
FU4QenuTqlAhspJGpLMoK74zfCgGlA9NVspRVphuVFZqENu3Cwn56U/Tz+EyPTrGkhyws0yrkHqg&lt;br /&gt;
1bNLf0YSytPgoNiiAXGi6+0V4sEBRXe2ofvv2CF+Kj/8oTtWiKywQtJD35d3aQbq7XVkYsMG1whC&lt;br /&gt;
hMnfP0SrPaHgS9OnS9ps/Ace6JzdfGzbJvecPVvsq/4y61LIinaw5fc0suJvtvb888CTT+Y/94oV&lt;br /&gt;
8j8JLcHO4Lnn8k11994rz8Lw9EBYWZkwwfnW7NqVdMLs7w+bALduBfbaS/5Ps6P39DjHuqwKlx6Y&lt;br /&gt;
WKb19UmywvdbirLC5cOF7ukvfQ1h9WpJkwM7P6ls1dcnzaPstOvr5b0zP6wDAwNS1hMmJMvo+98H&lt;br /&gt;
zjpLPq+7zl2T1QzESYyutyEz0N/+5uog29zs2fLe0ggw37evBj79NODtU4f77gMefDB5LGQG0o7s&lt;br /&gt;
elLT1ib5HhqS5wiFpA+ZgVhHJk6UdFkuZ54JHHxwfkj+TZvciipASOW6dUJWSII0WdHO8wDwf/8n&lt;br /&gt;
fz4GBqRe0Xdo61Z513PmJEPqk1RRWamrc2Zy5t1XojU0Wdm506lVurz53vxI0EA68Qw52JairIQU&lt;br /&gt;
wUhWagTr18tLKOZ42NqaT07YeNPISki2z0JWWIFIVu6+Wz4XLpRrdu3KRlYaGsTP5tZbgf32y0ZW&lt;br /&gt;
KNWmKStDQ+54Zyew777pefAdNvVsQDdiXwJmuaxZI/+HBl+mNXNmmFgVIiv+LMtXVnyyws7Z2nxl&lt;br /&gt;
5Y1vlLLVz//449L5zJmT75C9caM4PPf15ZtkeC6JDhAmK9Omudg0QFJZaWsT/wAfvb2OrKTNyrRZ&lt;br /&gt;
LauyojtNLbmTrHR0ODJRirKyfn36apu0cO0+urvFRPDGN8r/s2ZJOW7bJm2hrg445JCkIqFDtmtl&lt;br /&gt;
RW/g19qaX784oHz72y69gQFXL2fMyOazotMNBYU78EDg+OPlf5KVjg4hLGlkhQNRZ2fS/Pr61ydj&lt;br /&gt;
JA0Nyfv066VP5umz0tAQNgPxnFtvTbZz5kMrRryOdXvixCQB4ipGftfhEthOFi4EHn5Y/n/hC5Pp&lt;br /&gt;
hpSVxx4Tted978ufaITMQBMnykRVm4FIVrTKRILD8pg+vTBZoZLG+/qbqfJZWc91m0kzQ2uflaEh&lt;br /&gt;
GSt6e+UZdOwVgs+0bZvkO0RWohloFPHZz0r8CsB1LL4KoO3YVFaam+WFs5Ogx3Rap6or6pYtUnl2&lt;br /&gt;
7ixOVpj+3ntLo9BkhfnRNsuQqsEOwRgJu7/nnvlkZcMGUV6Ghtzzs/H4MyYGhdPPtWWLc3jTeWBn&lt;br /&gt;
55MV3cB8stLU5AYyf6D0OxTmHZDBtRSy4newPA6EzUA6joueKfP+lGq1symf+81vBu66y5EDkh3G&lt;br /&gt;
xtGxDADX0eulkb4ZaMIEGZy0rZwDGgnxV76STHfHDsk3fRvSSGvIYZkYGAj72fzlL0l/LEA6Su4z&lt;br /&gt;
NXVqcklrMbJCkysQjnPC5wGSPhAhfOtb8vnMM/JsJGvd3fIss2cLKQkpK7NnS5vwlRUdX0TXIV73&lt;br /&gt;
6KPOh21gwJl3WCZEyAxE87CvrJCIsq+i8sF+Z+JEIcYkK52dkg8/bzt3Jp2CtWma5+3cmU9WQj4r&lt;br /&gt;
bGd+29Nk5bHH5P0zKq1WVurrw8pKe3tyosR3MzAg99X7/Gi1mn3LvHnpZIX/X3utU098dSVkBpo4&lt;br /&gt;
Ud6fNgNpZYXviddospLFDMTn85WVNLJSV5dOVrQZiNf09IiiGRpzurtde9uyJd3BNuQ4XW1EshLA&lt;br /&gt;
TTc5O2qIrFxyCfCylzlfFCorxkjF1bNdIH0Jr28GYqeaVVnp6BCC4pMVf1aepqxwCSaQT1Z27pSB&lt;br /&gt;
6b3vlc4vpKyEli7z/oBc094uf8zDPfdIx7l5cz5Z0bNw3wzU3p6/wSO3iGdo8m9/2zk8ppEVkjS9&lt;br /&gt;
BJTQ/kIhM5CvrBiTlE+1IsHOgp2WdjBmWZ5+ugzkjFbLzpN7bfiO2XxfHNSoonFJNztOzrR9ZYV1&lt;br /&gt;
2bd1sx7uv7+QnbR9QHp6XEBAv26+850u/ogmByeemL/MftIk936mTk12wjQDFVoN9LKXyf/aFHTp&lt;br /&gt;
pW5g4XMXIyus74ODSbLS1SX1c9o0ISUhssKQ7Z2dMgDq3aSprPhkpblZ8sbjVHGamqQts13v2uUU&lt;br /&gt;
Dn/pcprPyo4dzql09mz57OmRdlNXJ22ZZf7mN0sIApaTJiiPPeZIIAdB9iWs02lkxVdWdD/GWbyO&lt;br /&gt;
+dPXJ/V13TpRg3wzUEhZ8ckKMTDgyAJ9r/hdByBsaZHrmW5IWdm6Vd79/vvnt8GQGchXVkJmIPaP&lt;br /&gt;
WlmZMSM5Btx1V3jVIu/rkxX2N36/OH9+drKyfbtb0h0qV+5RBUg7YN/hKyt+dO/hQCQrKeDslh38&lt;br /&gt;
+vXABz8ozmWcKV5/vXxSWQHkpenBBHBkZePGZNApX1nhy/ZtvT70Vuf77efWyXOTL5KVqVNl8Elz&lt;br /&gt;
sOXMBcgnK1qteO65bGYgvSQQkGuam5Nl8vTTbhaoycq2bUk1yFdW2tudY9zAgHR+fA+cSX7kI8Dr&lt;br /&gt;
Xif/s2OeMaM0ZaWpKb/RppmBNIHS+Z8xI1898pftAjI4Hnigi9fBZ54/X+719NNSt264QY6zw2ZH&lt;br /&gt;
pNWdgQG5V1ubG7y0sqLJCpA0azKdKVNESShEVjgD88vunnvcOf5gRjJJ00Brq3sGmqz4exYz0L77&lt;br /&gt;
ymycjq/WAuef73aMzmoG4rvZtEnurckKieusWUmyoveXWb9e8rlgQVJZYXwRXUbd3RJxmgQbcGag&lt;br /&gt;
piYpV6bNZ9e+GRz8W1rkeXbtyo9HwnImqe3uduRPk3PWM05ydF045hgZpHX58X2yTWUhK76yEtrv&lt;br /&gt;
h+0akMEzjaxQWWlqynfa1WXJ9rfXXnI+n2twUJ69uVn6w5DPiiYrbEd77ZXfFrQZyFdWqJSVYgbS&lt;br /&gt;
flvHHiuBCHUZZFFWdB9UVyd187bb8v3hmA6Q9A0jWQlNkDdulDEGSI4PPI/1kGrucGLckxVjzEeM&lt;br /&gt;
MU8bYwaMMfcZY47Ich0bETv4Sy8Fvvc94BvfcOySpiIqK0BYWSEDPuss2diPDcBXD3yykkVZYccy&lt;br /&gt;
ZUpS2diyRQYCnR+NEFlZs8bN6BinAJDjPlkJqRW+mYINW+eBHcimTZJPHa1Xk6pCZIUzYZ1X7bey&lt;br /&gt;
caN0rBxYKyUracoK7efMEzvx2bPd9X7obf1/S4soPxwEtF1+771lVvehDwH/+q/yG3/n4KnJClep&lt;br /&gt;
NDenKyt60A2toGhvF6LEPU18kKyEyo6+LH//e/5gxvS0kyjb1R57OGfgbdsKbw1w/vmS/sEHS70n&lt;br /&gt;
WXnqKVGuHntMTB1pZiB/aapeBQHIswNStzRZWb8+f9fcPfZwz7lggStvkpWQsjJzJvCOd7hjHNya&lt;br /&gt;
m6UtM21d30I+K7xWm4EAp/SuW+c26KNDtH5nixbJJydbXV2ubmuwT+OgqMmKbm+FVgNx0uWH5M9C&lt;br /&gt;
Vtg/+ecyTU2yNFmZPz9pBiKR5/OkmYFohu/rk3vttVd+W2CfRuLBiSqViq4uuV4rF5qs+GYgtj2a&lt;br /&gt;
UEkwSiErbOeDg1I2M2eK+fWlL0Ue+vudeszvvb35W6gAMs5t2uQUe60Oa3UQiMpKxTDGvBXARQDO&lt;br /&gt;
BXAYgL8CuMUYM73YtSQE/nK/ujrXqbAipykr7ByorHBpHp3CWFHb2pwkDITJyq9+BVxzjfyvlZW3&lt;br /&gt;
vc3lUysbmzcLEZg0KTkj9wkGseeecowd0l//Kgx9/nxpSKzkfIYsysrgoDQ2XSbskDZvzt+ZlbI1&lt;br /&gt;
UNwMxIZ67LFCVnTHdfXV8hwcQLOQldtvl3yTrIS83fVsJERWeM2UKcllgfzdT6+5OUlWNGlYsEDI&lt;br /&gt;
CiMj65gOrJP8vscejqw0Nsrz+T4rvrKybp2YUbq6khK7nk1u2iR+HRyYOFPPSlZOOEE6ugcfdGSE&lt;br /&gt;
6gCJ04wZSWfgEFlkuhdcAHzmM2Ka3G8/ee+zZwPnnefq5R135JuBtm+XKLPt7ckVIn194kBLaGWF&lt;br /&gt;
eZ01SzptTjh8Z3rAyeSM2+H7ljDNyZPFB4xbYJCs+GYgHZywGFnRCoR20t+0KV9ZYX74+Ze/uLwt&lt;br /&gt;
WJDsD3gNkG8G2rlTfF5uvtnlDUiSFdZFtiU+kz6HCgZQWFnRkwPA1Q8909dmoHnz3IRtwgTJb0+P&lt;br /&gt;
u1eIrGiSrJUVPxo1fZJo0tE+LCwra12/pokbr2H5z5gh91q/XuotIGrqPffkk5X+fjcZ2bYt6cxP&lt;br /&gt;
xUzXpTT09Eg5kuBybAopK1u2yH18sqL7R726KJKVyrAUwHettT+y1j4O4EMA+gG8r9iFHFz9qK6d&lt;br /&gt;
ne63zk55mcWUFVYIDkY//7n7Xl/vOiW+7FCclZNOAk47Tf7nHhdNTTLDfNObgE9+Mqms0Aw0caLk&lt;br /&gt;
95prpOM99VQ5J+SzArgOgDEJ5sxxygobDhCOYJumrGjC5CsrVExIVqZMcaGsCXqrazMQycorXymN&lt;br /&gt;
lh3vzJkSJn39+nyywqW8PllZuRJ4zWuAr3417LOydauUVUhZYaPXZFMvfdbEjRgYENLb0BAmKxMn&lt;br /&gt;
yiC8fr0jDpqshJQV7awZUlYaG12nNmGCkJUDD5Tgbfq+8+e7e551FvDv/+4cfbWy4qt+dCb//e9d&lt;br /&gt;
RM3LLgMuvFCej6YWhozXEUm1HwcHOJ+sXH21XHfOOXKvBQtESXn+eflt4UKp788+G166TBVGO8Yz&lt;br /&gt;
tgwJy/z5kjaVlcZG5yDOiUlvr9Rzpg0kyYoeZHxlhYMI1VAS3DQzUEdHYbLim4G2bHHteM2afGVF&lt;br /&gt;
+9UAUn7M25Qprr0AMkDzXr6yAgCHHQa84Q3yv688FjID6c0J05QVkjCazGgG4rmsH35EZR3Wvq9P&lt;br /&gt;
8k3T+ObN6coK6xzLme94r73kdz0GaGWlry/pw8L78Hl4D62s7Nrlxg+GYli8WJZgA3LvY45xJlP9&lt;br /&gt;
vvVquR07nKneJyu+Y75GZ6e8Zz4v32nIZ4VkaMECeRckKzo4p57IUSEdLoxbsmKMaQCwGMDtPGat&lt;br /&gt;
tQBuA3BUoWv1MkJfWenpceSDK0CK+azo2BkNDcKib7klqRhosuIrK34FoI2RuOYaWeGhyQLJSkuL&lt;br /&gt;
+DzQns0KFzIDMY+AyOl77SU+DCGyEnKwDfms0AzkKyskK1xFpb3StUMunydNWTnmGPnkzOS//1vI&lt;br /&gt;
x3335ZMVdpg+WdGdUajR+sQkzQwUWvrs7yqtywVIV1b22CPpJNffn0+gfWVFk5WQzwqfb+5ctxrk&lt;br /&gt;
ySeTysr8+VIHdu1y75fncvAL+awwb5dc4ur71KnJKLIcGLTphSsNWGfSlJXNm4Vss9yoggCSz7lz&lt;br /&gt;
3cw15LPCtqFX5pEs33efEJ4XvlDqH5UVTgYA58zLa5i2Mc58xNlvaKNMKitAknQXMgP5ygrT5bX+&lt;br /&gt;
hn9dXc6/YO1aN4sGkvWdnySRW7ZI3jRZ6etz5cgBeM0ady/+tnOn5M2Y5KoUHWelFJ8VxlGqr5c0&lt;br /&gt;
SbxJIADX9/hBCvXu7MwvycqmTS5/dXXyl0ZW2C/xvZK833CDlKk2A7Et+8SO/TNVQz2ZY3my7odW&lt;br /&gt;
0YXIivbp+u1vpd/ff3/3PmkG+o//SJa1Rmen3JfvkX3P5Mn5E2SOczNmyO8cO2h25j35vJwMDhfG&lt;br /&gt;
LVkBMB1AHQDfL3o9gFmFLly0yHUcoaiPq1YlZbRiykpXl8xU1qwBPv5xiSh53XVJX4wQWdmwQfLh&lt;br /&gt;
V2YO6j58n5UpU2RmuGoVcNFF8pu/CRoxfbrcl2SF95g7V5y1nnwyn6z4ygrLQCsrdLD1lRWuBmpt&lt;br /&gt;
dZ0P7zlxYnGfFTb4gw+WT/rYHHmkfP7979nJinbsnTQpnaz44b9JtJgnn6xQdePvBM1jgOSR8S18&lt;br /&gt;
sqJlbq2s+J8zZsj1NGOl+awAQiBmzxazFyDbJ/jKys6dUu95/UMPyfNwtU7IDNTdLTby444Tv65v&lt;br /&gt;
fSs/TgQHXP1e/OXuaTti68EecAMJMWeOc3oMkRWWv+8XxXd42mmiOJEocxDjsl+SFV9ZmTrVtUWt&lt;br /&gt;
rOiOn3tJMf/19S4wXkhZCZEVTog0YdfRiQFpW1wJtHVrkgzod9bf72I0rVzpylaTlZ4ed2+2jz//&lt;br /&gt;
WZyENTZudMSO7YN9jC4HvpM0M9CkSVJO/f3JiRSJt54QcnLjk5WBASlX+sENDISVFaZLB9sQWWlv&lt;br /&gt;
Twb53LxZfMeAwmYgEnWSFV9ZYV4mTEjWZ4IKZVdXYbJy333y+3/+pwv0yPdw8smiauq2YC1wxhnS&lt;br /&gt;
l8+YUZqyMn265JX9kSYr2gwEFA7AWCnGM1kpGwcd5Bw416939nB2kKtWuWBnnZ3FlZWhIUc65s6V&lt;br /&gt;
a9esSc7OtWc6/Q4eekgqwSWXJPPnKytES4tUdm0GuvRSN9MA3KDgKysTJsjMleSMxIF7AV15ZbKx&lt;br /&gt;
a9MKZ0ITJri9S7gFu6+s+GYgDhYkKx0d+du1h1YDbdokac+alSwrvqOhITdzKUZWNBlko9XkwldW&lt;br /&gt;
+K60oxoH87o6SZtBlIaGwj4wmqxw40OfrGjoPafYOfX0yPvm++3pKeyzAjiywuWp8+bJ89XVyTlU&lt;br /&gt;
LP7xD2f6eOihpJ9UyAzU0yNBxG6/XVY0UNbWgyvLjO9l0iQ3wPHZGU8ntHkgBw8gqawASbIScrBl&lt;br /&gt;
eiFlRYORftnxAzK50GEK2ttde99jj+QkIWQGYtnpwYn1T/sZbN2aDKrIKKOMc6TJSsgM1NPjVqEM&lt;br /&gt;
DibrWWurq48DA8709cQTYTNQT0+SzPf2yqq1E05Illdnp3sGKhYs65CDbZoZSCs2um9qaJDraW7h&lt;br /&gt;
OwqRFe1PQmhlRR8noS+krGh/ET2hITmhusOl6rwP3x3gFE7GWeE5zc2OeOh+mP6MGzdKvngNyQrL&lt;br /&gt;
q6sr+ax6Gby+v16F+f3vOzOQr6yEfFY6O6V/mTIlqaxMn55UcwBH2EN7zlUL45msbASwC8BM7/hM&lt;br /&gt;
AM/nn+5w++1L0d9/El7/+pOwc+dJaGo6CcDyfxKUri5HVjZscI0EyFdWOJitWuXkappWCikrevfm&lt;br /&gt;
L39ZPo3J9/LXoBSrycq0acC//Iv8PmFCkqxonxXmnb9zgD7jDLfnka+sWJvfuZBosMP1fVa0GUgH&lt;br /&gt;
0+MKHyor2gzEZcJaxVi1yvkYTJ8uA+vs2UkTQyFlhQ6H1iYje7LRFlNW9AyaedKriRhHAnBxUAgq&lt;br /&gt;
TjqPGzZIuZE0+GTl1FOdk+jQkNy/q0vKS5s4tBnI91kBHFkhhobc82mTxv33O5v4o48myUpI+ShE&lt;br /&gt;
oPnMHBj4bNa6eqOVFZ+sAvnKyty5bhIByKBEaT4UZ4Xp+YEHfamcAyHzCohvT5qyMmNGPlnx1SHW&lt;br /&gt;
+TSyQjOQtclVgVRWmI5PVnwzECDpMNS/VvA0aRwYcM73mze7sp2pekpfWfnzn6WuvOY1yeXXGzYk&lt;br /&gt;
B8mmpuS7bGpyeQXyyQrLjn2R35+wLVLB0O8opKy0tCQJaMgMxDSK+axoouCTFeabkybmjWpEyGdF&lt;br /&gt;
m4E0WWG/NHeua0NUzRoa5H2y/ZAUbNmSVHS4JJr9il6dBCTHE62ssD2kKSvTpsn7njxZ8kmCNDgI&lt;br /&gt;
LF++HEuXngTgJFxzjXx+5jNLMVwYt2TFWrsDwAMAXs1jxhiT+35v2nUA8P73LwNwPc4663oA1+Oo&lt;br /&gt;
o64HsOSfBAVwZOXZZ6WTSVsNxMZCu//s2S6mSSGy8sUvisS3NPfum5tdZ6a9/H20tbmVNpyJciOz&lt;br /&gt;
gw6S4xzsfO9/LaMPDLhZNB3pfAdbQCq3NikxDb3UOaSs0AzU1uYaifZZYYfX2ys+Gh0dzil1YEBW&lt;br /&gt;
K3F2SGVh3jz5nc9dzAxE6VQrK9oMRF8hDuZ6KWUxsqIdAElWHnxQ5FlfWQGk02B9MCafrBAcUPr7&lt;br /&gt;
k/ERgCRZKaSsaJI6MJCc4fKdL10qA9F++7kIr/p3TVa4ZDdEVnz/jMZGp6zQLg/kKyv+cnv6VRAN&lt;br /&gt;
Da5tAWEzUIiskJjSRBdSVrRyBoi6SKdF32dljz2SA4b2NdBmYCCfrPgOtoBz7gXkmI7KqslKX58j&lt;br /&gt;
eyxjnsP6ruuZJjk8Tj+RkM+KJiv9/Y64HnywU2+AfLLS2OhIBE1U2n9Km+Z0+ZMA+WSFdU1PCLXP&lt;br /&gt;
Smurcx7nOVnISjWUFUAGdO1g6ysrITMQlRVdH047TSYjug0xwjjLQJuBqKxoQqXfA9Ped19ZXfSn&lt;br /&gt;
P7l0Z8xw161bJ3kJLerYuNH1rUxPj1dLlizBOefIGLl0qXx+7nPLMFwYt2Qlh68D+IAx5l3GmAMB&lt;br /&gt;
/C+AVgA/LHQRKztnUyQmM2e6lzx9ulQsSuW+smKtvFDOYlevls/Jk4VBb9ggnUQaWXnDG4CvfU2W&lt;br /&gt;
5gLABz4gn93d6T4rgDQy5okVjYPD1KmSL73s0b9W7yTKhqHNKYReBaM7l44OeS69PNdfumxMuhnI&lt;br /&gt;
JyvLlkkjZHwKNlxNVpg/bgXP78XICiBp+cqKVo0AN5iHHPM4qy1EVqZPl+/HHQe8//3JWSLf0caN&lt;br /&gt;
SdKQRlaoHIXICs1AIZ8V1q2XvUwimL7mNSLpDw7K+9KdpCYiXC1En6Bp0/LNQFp18eErK1o10upF&lt;br /&gt;
IWVl3Toht76N/5xzgHe/W/73zUATJrg6qsnKmjVupj40lK+s0JeBxAqQdt/b64hdMWWFBMJXVnQZ&lt;br /&gt;
h8xAgLxTvaoMcAOg9pFiG62vT6arQ/37ZiC+B9a/yZOdGXvKlKTi1t3t8s+l+m1tUv9DZIVlpZUV&lt;br /&gt;
rejRjyXNDKSVFd03hciK9lkhqdDPpd8p+whtRgLSfVaoiLa3Sx1qbs4nK5okWBt2sJ04Ua73g8IB&lt;br /&gt;
TlmZNs35qLz4xVLP9LvkpCuNrGRRVgBZYq43n9QEe906d09fWdm0yb1rpke3BbZ/vmsdBG+4MK7J&lt;br /&gt;
irX2ZwD+C8D5AB4E8CIAx1trUwLgC1jZaaem38bEic5WPmmSdFQkIbyGMj1nTWT2JBATJwpZsVb8&lt;br /&gt;
BtLICnHSSSLhLVki37u60iV35oN54qDw8pfL56tzGlNvb2FlxR98OPjriqhnIjqt/feXctPKSnu7&lt;br /&gt;
nDMwIJ3e3LkueJLuXLWDLTvj+++XgZXLQ5ubhUR2d7uw9MXICgdXrTQUIyuAa5ChGA98ZkbE1D4Z&lt;br /&gt;
7Ah9MxDJw8qV7v6U7ekXwPvoAUHL7hz4+vudfM+0uKS9oSF/NRDjtZx4ojhJ/uY3Ll/PPJP0AeG7&lt;br /&gt;
3LbNLXX/f/9POv4FC/KVFR2k0EfIDFRMWdGrwbZtkza0enU+WfnAByTmCpcyazMQfag4YDD9zk6p&lt;br /&gt;
QyS/aT4rWllhPaIzve+zotUOmoGKKSskM9oMBEgb0MoKkCQrvBfbqHYo5TlZlRU92Zo8Wd71TTe5&lt;br /&gt;
9PVKJF03tal1w4ZkWTU2Jokn+zK2BQ6SjElTzAyUpqywfelNI0lI9DvVpD+Lz0p/v6TNc1mn0sxA&lt;br /&gt;
/E5yrPfr0b5jITNQfb2brPBd6zbEsaOlxU2A+Q62bEn6yjDfvrICCAnSgRo1uVq71t2T9WbXLuBL&lt;br /&gt;
X5LfWLfSyArbPp8j+qxUAGvtt621C6y1Ldbao6y1fy52jVZW9PLLiRNdVMBJk5KOimxIulMYHJSO&lt;br /&gt;
ua7OLX9rb5fBGhC/C/3yyWpZ4QDpiBcvdnkopqy0tzvJmg31wAOlotOTn2TF91lJIytMR892tflD&lt;br /&gt;
dy6LFonJS5MVlg1J1Pz5cp8sygpjrxAtLW6WwEicvHe5yoreu0krFXwfmqxoE4u2qxdTVgYHXYO+&lt;br /&gt;
/26sfqgAACAASURBVH53jwkTpI5t2uR8c3gcEDVGkxXG/RgYKG4G0srKf/2XDOgsI+Z7YCCfrDz2&lt;br /&gt;
mBCqxsakU/n73if10fdZyaKs6PLh+9y1yw1m7PQYcE2TCyK0euIVrxByvOeeSWWFdZsDhu8Dw/2Y&lt;br /&gt;
0nxWtFqg/YpYZ7UZaMIE5ytGAqY79ELKSiEzEM/nAKj9trR6oc2zacqKHtQ4qE+enFR8W1rESbq1&lt;br /&gt;
NelgOziYrJvFzEA6b5oEMH+6TELKin5/hciKdjrWyoomK1oNzmIG4qDOesG0NVnRKolOt6UlGQJf&lt;br /&gt;
+46FzED6+fmuQyaslpbkppQsP923+mYg3RZppj3iCPm+zz5uMYT2f2S5/va3EmPptttcW+WYNTSU&lt;br /&gt;
T1Z0WImorIwwNFmZOTMZtfWww+T/wUHp+OmLkkZWWlvlhZOsUFnR9yqkrBCsUFmUFb3ELPRcvb3l&lt;br /&gt;
mYG0Q1vI2RQQAtHZ6Z5Xz0IYSvrIIyUP7GyamlzY5xBZ0dFCm5tlBcOECa4cmS+qLzNmJDcZ9JdP&lt;br /&gt;
6g6ey7x1I9eqEZBOVlgGIbKiB0gqGPSBoXRMTJvmVgPpzurJJ2WJOzuAc8+VGQ+QNAMxraGhdJ+V&lt;br /&gt;
M8/MDxbF2b9PVhYudDswa6fLN73JXZdVWfEdBBsbXXuaMsXVG6bBwYZlpwORpS31ZCwU7bPiL331&lt;br /&gt;
o9USWRxsfSfo9nZ51gMOcP2BT2I1oevulvvo9laKGYhOm21tjixqM5AxrkxJVkjafLLCVY40A7FO&lt;br /&gt;
6AkBzbaDg241Tprqp5cus/yyKCskBWlkJavPiiYrJGG857HH5hM5Is3B1icrIWVFE25dti0tUh4N&lt;br /&gt;
DW7XaF0ntCpGssJPvn+ahQBHVuiHqMvL91nRy6iBZF3r6ZHfXv96KTOGe+C1ehsD3U8B7jnf8hb5&lt;br /&gt;
fOihfLLS0ZHcx2m4EMlKAOwUV6+WgY+Bburr3Vr7Qw8VssKORcczAJI2xKlTZUBg45082c2Ws5IV&lt;br /&gt;
7d1dzGeFn7px6jz29EiHVaoZSDs9FiIrgPM+12Tl3nslDy96UTIqZXOzm0H7ZiD/WdlRz52brwxR&lt;br /&gt;
NZg1SwYYlnFIWWF5PvWUNE5eq81AhciKNmHQhq7JirVuACZZ0TF7fLJCM5AmK/vuK9/Zebzyla7z&lt;br /&gt;
IFlhMCdCL13W5CyE5mZxXtY7DvvQqg4DB/o+K3SaTiMTHLg1Abj2WokVoQOaAU5Z4fsvRlY0qG7Q&lt;br /&gt;
DAQ4k1hvr5BZn1D5ZiDty8B6wPpPMxCJx+OPA0cdJb/V17uBNmQG8vPO32kGomO1VlZ4X5op9Wxf&lt;br /&gt;
m4GYb57T3OzeCeuGTxJIVngvnb9Jk+T6HTvc8mndBkhWJkxw5CrNwTaNrDB/vhmIG+MVIiskEGk+&lt;br /&gt;
K8bIEvrrriusrIR8VnxSoMnKq18tjqr77580hWm/IO3Iq4MzkrTzXOaL30P9OScKHR2uf+Q76O5O&lt;br /&gt;
mnP6+11sLR8kK5rc6PLwIwNrU45WVo48UvYqi2SlhkCnNWtdOHBAOu4FC+T4kUcmJXX+79uGSVa2&lt;br /&gt;
bUtK/DQJhMhKaHBpaZF8rV0rRKOQsgLkqyq8F+AGhmLKChsQG6aW0nXl1LIty4HhzZubXaP4/e9l&lt;br /&gt;
dquVko4O+XvqKfk+eXJyZr11a7Ih0wzCTwC4+GLgC19wz/yRjwC/+IX7PURWOGt5+GH5pF+SNqtw&lt;br /&gt;
ZlzIZ0Wn7wfHYsc3ZYrUGR0nIQtZ8cGVOMwbQ7j7S8pDEWxDaGlxnWAaWQGkbJcvT143MCDq2YoV&lt;br /&gt;
Lg3dgfv38WXqU06RTj9NWVm3TkitXqkV2mxPg4G6/DgdJCsTJ7p9TvQ1GiEzECcYWlnxof2EtBnI&lt;br /&gt;
2nSyos1Axsj75bYEgHN4pUqpyQrbqFaQAKeskAz4yoo2U+g86f+nTHEEafJkR1Z8M9Cee8pAmMUM&lt;br /&gt;
pCMU19W5/GVxsNWRYpkn+ryRrGzdmiQ0xx2XXEGoy4/5DDnKF1JWpk8XR1geJ7SqvmuX+66VFT6f&lt;br /&gt;
dhLWn6H+nNd0dDjSrtsATXmAi0Ssycptt8mkzS8bgs/INLU5ntD14r77gO98R87fvt2Fm4hkZZRB&lt;br /&gt;
MjF9elJZ0dA+ErpxAa4jotc3kKxoTJ/BxkhW6Bjow5ikQ1yassJ7hFaTsHKyoyjms+IvK9QEwY/m&lt;br /&gt;
qqXExkbXuLSy8thjMgDpzn7SJFFC2InOmiW/02zjKyuU3XVe9twTOPtsJ6HOnAkcfbT7PURWJk6U&lt;br /&gt;
fD3yiBzju5w0yc1onn9ertF7coTMQHx/HODYQdPhVc/u6PMUIitPPSXPn4aOjqTs65uBmD/fZyWN&lt;br /&gt;
rOh8FSIrZ5/tNszkdQMDwOmniz/VihX5S6I19GoGXzXUZKWxMbkH08MPJ1cxFCJyQNIMFFJW2tuB&lt;br /&gt;
ww/Pv0Yj5GALSBtfsybpFOo/x44d+WHSn35a/Nr8wShE4I45RojhypVJ50u2eT0r12YgoHSy0trq&lt;br /&gt;
8sTIvcS8ec4Xb/JkqdshM9C8eY6shFYDaRJAnxWaR7SSqp8jZAbis7DuM+ZHZ6cjK8uXixO5bguE&lt;br /&gt;
NpERaWRFOzPzmoEBITGajGtzjb/iKk1Z0elmIStESFnhfZua5H2sW5dPVl79atlCoqsrfzWUzqdW&lt;br /&gt;
kXT/D4SVGk4KN26MZKUmwBcyfbp0yscf7+KNENrsQITIComDrmj831dWQiYgfQ1nmmmVm3vlcHam&lt;br /&gt;
UYqywmWKxF13yX5GhJbvBwaSDXnixDBZARwZITQ54O8sm82bXYh3goNN2sAYAmPUaHnaGJE2qaxo&lt;br /&gt;
MxDNHf/4R3LfHD53yAzk+6wAcm0aWdFlO22aON2uXg286lXpz6HJSm+vdCo0A7HzDPmsFDIDEWlL&lt;br /&gt;
pUNoaUnGofnOd8JKnj4/jaxoB1u2HV0/VqwQ1ev++8M+JxptbXIPhl0H8snKxRcDP/iBu8bPN/2n&lt;br /&gt;
tPMvIOVD/440ZUUPtCzbffcFbrwxX1nRq4FYXy69VO79pz+5JdwNDVIP29rcoBsyAzGNYmTFNwMB&lt;br /&gt;
Sb88QJyqGbZBm4FCygrNVlnNQDzG/a2YViGyogkW4AbQNWukXLQTtj8gA86cW8hnhfsQ+cSIykoh&lt;br /&gt;
P0HfXzGkrPB5fGWF6pmuU34bKURWmMbq1S7Yn4bui9PICtOcOFHeE8cHIExWtA+XT1biaqBRgFZW&lt;br /&gt;
ZsyQtep+ZZ07V5YWX3aZO6YdNxluPkRWtDc4fR6KkZX2difPpikrJ54onytX5v9GfwY2yBBZYcP0&lt;br /&gt;
JfdjjkmSMuaTfhg6pP+kSa6BaDMQIGWoyYsmK/X1MnCz4fJZdV6orJQCPzYFn3vOHFdOb3ubLM+d&lt;br /&gt;
OVM6slmzZJBg5853n3U1EO/HaKYE9y7SDnvTpsngWF8vfilpmDRJ7llX5/YT6uiQjlaTKQ7QxZQV&lt;br /&gt;
1tWJE0sjf/7yWaA4WfHDgRMsQzoMAsmO+8EH5Z1wJUMh8PqenrAZiG2NcZMWLkySRkDKj/VE53X/&lt;br /&gt;
/d2y3pCyUl/vZtEkGhqFzECsHyT869c709C0aY6s6Gu1qYX5Zt6am92Aw3fF9EJmIO4TRMyf75QQ&lt;br /&gt;
moG0srLPPnLf/ffPNwOlxVkhWWHE3Q0bnFrM40B4NZBPVphvkhXuuK6fV4MDLh1LWV5+n9vUlF9u&lt;br /&gt;
NENpU7BOwz9Xf4aUFZ+sfPObwPe+l5zsrV/v+mhAymhoSP7X9YBpzZ7t+jGfXEya5KLUFlNW+Hx6&lt;br /&gt;
Y9dCykpnZ1RWagKarKRhwgRx4tIdqb80r6nJDca6A9OzyKzKSlubG8DTWP7kycCFF7qlmT7a2wuT&lt;br /&gt;
FWulI0kjQ4RPVnRjYwPhwKobGH1S9LkkQZzhsdEwbZ2X+fMlWN5XvlI4fxqFyAog72zuXNmxmQrF&lt;br /&gt;
/PkySLAjfMEL5FP7rKStBuJxX1mZPt3tiusvlwYknkyhcucMsKXFlY2/5DFtNVChcin2rtOuo3kC&lt;br /&gt;
qFxZ6enJn+kBbvl/FuhtB9KUFcC1aa540mhqcvVE5/UTn3DlGTKZ+WYg7c+m80b4dQZwJrDnn3f3&lt;br /&gt;
njZN0vXJSqlmINYbTVZo3vaJoN4kkmRFr8o78kipf/vu65Y1h5QVP34J89vQIP0DYwzp5wgpK/6y&lt;br /&gt;
Z730va3NbSeiz9G45x5RHg46yB3zzUBAkqz4ykpoUUOaouIrK36Eb8C1oSlTXMBPYvLkJLnVfb3u&lt;br /&gt;
X7Sy8thjLj2NSZNcX+HXQd9nhe1D+4mFnNrZHkPKSiQro4AsZCUEViAORnpTOi21+spK2sxTo63N&lt;br /&gt;
sd5CA8xnPiPL1EJob3cNMuSzAojcXcwsUIis6G3p9SfgNioktLJC0uI3Gv2sxsg2BDrUejGwrPnc&lt;br /&gt;
/M40Qo6hJCt/+pPI3ZRr05QVvYKE75ARZfl9zhzna6OdlZn2+edne57WVud0ybxrj/7GRreRZF1d&lt;br /&gt;
0r6uEXo/WaCVFZrMChGKkMmD0D4rIWUFKOzHo5FGVhiVlL8vXChB4fwNQoEkWdF5fcELgKuvBu6+&lt;br /&gt;
OzlD18+hB9q9906qNlx+rO/T2yuTA30fOo9qsqKfDchGVnScI30dlcLWVlHxXvEK4IMfTOZNkxUO&lt;br /&gt;
lJs3J9/LtGnut87OJFnRZZJmBurrSw6shcgK4SsrgJTLddcBF1yQfz5x8MH5BLMYWdEEpKsrGT1W&lt;br /&gt;
31vnyyctob7CV1ayQD8vgybqtGbPdiQ0ZAbSMYw00pQVTVZCygqd4EdaWSlB/N29UC5ZYSWkGURH&lt;br /&gt;
u9SxKXyywp1ViykrlPaLrYwolEYhZQUQshLqkDV4bZoZCEjO6ghfWWFYaiCfrBQzeWUFy1rb6wHX&lt;br /&gt;
KevGScyfLyH9d+1KzjwbG+U96qXfzc3JJZxpPivcbO/CC11kWEBC2q9dmwx3XgitrW6vFh2LgfnT&lt;br /&gt;
To1p/irMN9MrBXpAOPJIieujYzOEzi/mYNvV5QYUn1y95jXZ8sXn6O5OmoG4C7guoyuvDKdBnxWe&lt;br /&gt;
p3Haaen3rq93fjx8BwsWSDA9IBklGZCypxlND1xTpsh+Y6xDaWSF1/I53/Y28b/yfaT8wZ4757a2&lt;br /&gt;
StqMbKyhyQp9Svr78/sctktNVjTxamx0/ZVvBtJpA8m9gbQSEVp6rAfviRPlWipZheqhhu+zwmOM&lt;br /&gt;
k8L8tLY6M0qpykoWB9ss0MpKY6NMEDZvTiorREhZ8fPrf9c+K0BxsgLIZFYrKySbUVkZBWgH21LA&lt;br /&gt;
uBIhZYWdIJCsrH4E0jRwEOc+NeWA0SmBdLLy1FNJp9cQmM+1a5MrOADXQEJlp51E6cTLKL4kK0yr&lt;br /&gt;
2mRlyxZ5P+xQ3/UueTcnn5x/zb77inR8//1u12kgX+YGkquBQsqKr+R85jPOHAQIWStEVH75S+C8&lt;br /&gt;
89z31lYZBI1x70nbyfle+/sL+6JUqqwAjsj5EWL984uRlW3bXL044ABndgPyHdvTEFJWGhvTZ5Yh&lt;br /&gt;
6PwVaos+SIr4P+De8ateJaZLjaYmN3nRAzwHh0LKSmg10FlnSXrsfwj9rl76UmnbhxySJAo+pk+X&lt;br /&gt;
OvqtbyUnLb7ixXY5MJCurOily1T5WD7lKiv6GMuY7UA7hxZCms9KT0/+PfV+PxokTXpRBeA2js3i&lt;br /&gt;
YJsFmqx0dLhgmExLK4/lkBU9rgDS7x5zDPDd76avwJsxQyYp27Y5vzlNTocDUVlJwWGHSYCzrLNd&lt;br /&gt;
jZaW5Lp4djhaWTn3XGkY++/vYoxwcEsDO6xCy9yKIQtZ2b69uBlIKyt6Qy7ANepQ2dFO3drqGpIx&lt;br /&gt;
Yk+mD0EhB9tyoMmKXjnT0SH5p/OaxjHHuFkRN5MEpEPju9WzP23m0MrK1Kn5ZKVUnHxyklDRwXLW&lt;br /&gt;
rKS5A0gqK319w6Os6I6WZOVFL0o/n8tP9RJXoq5O6sPQULLzfPhh4N57ZVVKsSXLhF6az4GkoaE0&lt;br /&gt;
sqKJQyGTrI+GBjcZYZkfcICoc3fckf0+HGxI9Fleuu7ogHN8/5qkpJGVj35UTFnvf3+6aZBpXXih&lt;br /&gt;
/H/zze643w79Gb/+BKQc2Lb6+vJNViGy4isRvhnLB/1QmFYpZCUUgqDQPf1J009/CvzkJ0lVCAA+&lt;br /&gt;
/nF3Dz8OVaVkZfr05J5ngHPaD6Xrx2XR8H1W+Dk4KJO1M85Iz9Mee7jNTVlX77lHyv/LXy78POUi&lt;br /&gt;
kpUUHHaYi8FRKnSwrfb25E65xF57AT//ufzPCpaVrFSiNLS0OL+XNJ8VoLiyMmGCXL9uXVIl0PkL&lt;br /&gt;
Dc56q3H9HPfck3Qca2gQB05jwqsvSoEmK36Hx83ufCxaJERjcNAFggLyg17xWfr6wg62s2a5TrAc&lt;br /&gt;
4huCtlXrfAHJ+w+XsqJl+AMPFJMUtzpIu8+mTVKWIf+gxkb5zc/H0Ucn4+UUA+tJZ6dTZnRMj1LJ&lt;br /&gt;
SqnKim8++uQn001H+j6+GQhwweuOP178prQyo8spREaZnlYRASHgt95aeMVZoXymKSv6PH1+fb0z&lt;br /&gt;
y2jiXIiscJmxXg1EhN4fTYfccuGtb01/Fo1QCALfB8X/3ydre+8tihZxySUSk4iqfEhZqcQM5CvW&lt;br /&gt;
zJt25vZJqFbQsvqs6HulYe5c4Fe/kv+pvh1xhIQaGC5EsjIM8JWV+nrZW+HDHw6fn5Ws+JtelYPW&lt;br /&gt;
VjfT9Ds6nW6WuBuNjdJB++YeVvTQ4MzffLKiGxJjoDz+uAyMhWaBWVCIrKRhwgTghBOEmOhyCpmB&lt;br /&gt;
uEswY3P4Piv07i8WJyQrWFaaDIaUleHyWVmwQAbRW26Rd19sUG9udr4bIQLb0OD20aoEvF6vnhkp&lt;br /&gt;
ZaW+Pr9dzZ2b3Acsy304gHN59UknyZ+GH7HYh1ZY/Lbz2temP0MIelD1V4b4q1QAVxcYyyhkkmSZ&lt;br /&gt;
6IGUv1F9LmQG0qCqMXFidn8V5pMbFJJc+L52/j2LKbzTpiXJOPvHapmBGGWb+dUmlzvvlAizPvQk&lt;br /&gt;
IktQOGOkHIuRlSOOAP73f+V/7eM0nBi3ZMUYsxqALkYL4CxrbQmLXstDS4tb1smK8NOfpp+vB9NC&lt;br /&gt;
poJqKCuFyIpe0VFMWQFcY/Q7MTbq0LOwU2prK0y65s0TnxHtu1AuyiErgMTP8TtAP+gV4PayqatL&lt;br /&gt;
moEGBuT81lZxiKuUdBGLFglR0DNTLcNn9VkJzV6z4qabRLHIoj7o5aehwdvvyMuFvp7trlSyUonP&lt;br /&gt;
im8GKoRipMjfFkBDv6/QAOrvO1MJdN58P5emJrdkO0RWAOfLoJWVU0+VvaF0nJ5iZEUvcwYkOmsp&lt;br /&gt;
7yf0XFSYWdb+KkYg2SeW2u/SL0Y7DJdDVljuZ58tnyH/nFe+MqyYabLi39N3sKWK3dtb2KcJcHti&lt;br /&gt;
8bqRwLglKxBy8lkA3wfA4tyafnr1wKWFbMzFwEF71arCQc+q5bNSaA+iRYtkJ+msZEXni2D8hkJp&lt;br /&gt;
+MqKDy7x5WyiEmiykuW5iFBn6Ae9AhxZYfjr0EBUzQZ95pnA17+e3EywHGXFdwQtBcZkj3qrFbYQ&lt;br /&gt;
gdXLbisBN4obGBh5ZSVkBsp6Hz2I0JmTykoIejANmUhDvivlIqT6EMaIsrZuXb4ZyCd9fX0u31SK&lt;br /&gt;
XvhCdw7JCuu0T1b8uDW33Vb6s2joukCyElJWNGks1RzNulipGaipKTlp4sovvQVGGnSe/T6Iv2nz&lt;br /&gt;
Hvu2Yn0CnYiLkZpqYjyTFQDotdZ2Fj+tukiLF5EGzja3by/s18D0KlVWiNCs+/OfB9785mzOoGkz&lt;br /&gt;
Ylb4QrLp6aenL4sDHFkp1GlnhSYrhXwrsoBqEpAkK7t2yXP7BLWS2V8a9t1XNmr0fWmA0nxW9t0X&lt;br /&gt;
+M1vSvNhKAd6UEoLVQ9URwngXi6arJA8D7fPiq8KFIIerPQ9WVb+4By6Vi/7D/2etrFkKdB5C02S&lt;br /&gt;
Zs1KkhVfWeExHQGXYd31+y6mrFRj0qKhwxHQ74X9qq4nuv8JlXUhUFGs1Azko7kZuOii8q8nTjxR&lt;br /&gt;
tngIBX4jGUnDhAnis1JIAaw2xvvS5c8YYzYaY1YYY/7LGFPmgt/SoMOYZ0F7u+sICpGVaigrxZzz&lt;br /&gt;
TjtNWHyWWUTajJgdiw7E5EcL/chHgLe/PT3taior3Bxyx47KB8SQmUC/56YmuRfLtpTZeSl44xvD&lt;br /&gt;
G0uWshoIkBgmpYTaLweFVgoB1VNWgPzZon7+4SQr9fX55sGs99H/L10q5s9CM9Zi/QsH1VL9U0LQ&lt;br /&gt;
g2posKa/WiFlhTFN/HehZ/oTJsh3X1lh3I5icZ9KhR87CQibgSohFa2t+SpsOcrKcGHyZODf/i38&lt;br /&gt;
W5ZJ3YknhqNADxfGM1n5BoC3AXglgP8FcDaAYVpUlURoQ7ZioLoyEj4rRLUGbj+dd75TTEmLFrlj&lt;br /&gt;
K1YkbdTFQKetaigrellnNcmKVlYIdta833AoKyEwL/X1yQizw01EsqCY6a1aPiuAayNaWSFK9VkZ&lt;br /&gt;
DTPQhAmFd8AG8oOQ+eAAf8opxfNRDMXKwF9izU/9TDxWrC7W1ztlhececYQshdWrbqqBhgapI6EV&lt;br /&gt;
MNVQ+JiOHyaiGspKqfjAB0ofM7IQ7pFGDXRl2WGMuRDApwucYgEcZK19wlr7P+r4I8aY7QC+a4w5&lt;br /&gt;
y1pbMM7e0qVL0eHJF0uWLMGSJUsy5bNUZQUQsvLYY8OvrLCx6E3EykXajNiY/JlQqR3AS14iM0Pu&lt;br /&gt;
slwpmptlMKm0I9Kdd4is6ABLes+U4QbzsmuXy8OWLemrUUYa++2XPgujPb4aZEUHHASS5rEsgRT1&lt;br /&gt;
+yrFR6GhwS27rYaDbSGwDqfd5/TTxYzEHdgrQbG80QHVV1S0eSBkGgpBkxWeW1cHfOpT2fNbCtas&lt;br /&gt;
ScZY4oDuP/Pxx0vMn1LR0uL8pSqJs1Ipvvc9+cuCvfYqHOBRY/ny5Vi+fHniWDcfeBgwpsgKgK8B&lt;br /&gt;
uLzIOU+lHL8f8rwLAPy9UALLli3D4RWMkqX6rABuUBkpn5WOjvKj4BLVlO99zJwpMSGqheFQVvTS&lt;br /&gt;
ZcLfMmCklBXeR+9hsmlT8Vn6SOGJJ9J/+9vf5LMavjNpZqCsdZQDVV1dae1DqwYjRVbSlIqGhmQg&lt;br /&gt;
w0pQbFD1/WL4LIx7oo+VoqyMxMzen6yx3fhBIm+8sTwH+dZWlxafx994tNbwxBPZl4CHJvArVqzA&lt;br /&gt;
Yn8b7yphTJEVa+0mAJvKvPwwAEMANlQvR2HQ/FFKZ5eFrFTTZ6XSEPbA8JKVamOkzEB8fzw2UsrK&lt;br /&gt;
xz8OPPAAcOih8ozGyEy/Gu95pFDMqS8L0sxApZIVPdhmQalO1ZWQFdblkRjQi92DZiDuu8WVhno1&lt;br /&gt;
SVZlpa4u32dlJMG24oeML9Wxlgj5Bx5xBHDDDSPr61EKRmpyVQ7GFFnJCmPMSwEcCeBOyHLlowF8&lt;br /&gt;
HcCV1trh06lyoGPbX/6S/ZojjhDTSSHT0cyZ0rEVWilQDKH9NcoFG3G1bLzDCX8fj3JRjKz4+xuN&lt;br /&gt;
VONfsAC46y73nWaokKd/reGppyqPUkz4ZKVUQs3ZfyVkpRRlpbGx9Fl7MWWlmiiWNyo4jIfErUNC&lt;br /&gt;
ZqBaU1Z8kKxUazO+0BLzCROAf/mX6qS/u2FckhUA2yDOtecCaALwNICLACwbiZvTX6OUmB7+/i8h&lt;br /&gt;
TJsm0n4lHTs77WrM+EtZEjramDNHnHyr6bMSMgPpZaX++SMJxn4ZC2SlEvLtwzfBcsVU1sGPA1aW&lt;br /&gt;
GBYa5ZKVcurHSJIVIs0ctGiRmDpIaj74QYkBok16tWoG8sE2W63N+HS/WKl/YMQ4JSvW2gcBHFX0&lt;br /&gt;
xGGCMbIaphpxDnxUOgOtJllhox4LZIXmmeFQVkLmvpFWVtLuPxbISjXhKys0LTFaaTHMnZvcCDEr&lt;br /&gt;
SvVZqSRwWzEH22rjfe8rvOeOVl/mzQOuuy75eyUOtiOJ4VRWxpI5tlYxLslKLaDacQGqBTaganij&lt;br /&gt;
jyWywiXhlT53iKyEUAvKCrD7zeh8skLfAPpUZEE5BK9cn5VKlJWRGtAvu6yy6ytZujySqLayEslK&lt;br /&gt;
dTGe46xEBDAcyspY8FmhslKp0pF175iorIwOfDNQtXa6LoZSzUB6SXWpGA0zUCUYa8rKqadWJ71o&lt;br /&gt;
Bqouxkh1j6gWqrnOfyz5rHDQyhpDIA2hOCuARB499FD3vZqksBzsrmTFV1ZGbJO1Es1AjHJcTjvk&lt;br /&gt;
vcYKWSnFZ2U0VwM1NJS2c3MxFNsdO6I0jJHqHlEtVHOTs7FkBqL/0JYtlaWjn1Uvafz615PnhcKO&lt;br /&gt;
jyQiWXHHHnxw+OsoB9eGhuxLXf1NL7Ni2jTZdfgLXyj92tEA62AWZSVtR/ixCE1WRoo0j2dEsrKb&lt;br /&gt;
gZ32kUdWntZYIitcmVWpg3KxfW6IWiEru5v8fMIJwBe/mJzFa8VruMDBtRTfhHLJSl1d5bsOjyQY&lt;br /&gt;
5bbWVwNVG2OhXxxLiGRlN8OMGcDf/16dPXdoBhoLPisLFwLXXiuhsytB1sGIJKVaznqlYndVVvbe&lt;br /&gt;
u/r7yGRBKOZOMTQ11caGdsMNBo7b3cjKWOgXxxKig+1uiIULqyNLjiVlBZCN3arRgWRRKzhj5n4x&lt;br /&gt;
I43dlayMFjgQlxJGvVxlZayBygqj26ZhtFcDVRuRrFQX46BKRIwWSFZ2h9mhxkMPAX/6U+Fz9F49&lt;br /&gt;
o4FIVkYWVAJKGaCam3cPskJlpaur8Hl1dW4vnfFAVsaDOlRLGAdVImK0QLJS7t4ZYxXz58tfIXAQ&lt;br /&gt;
oqlspHH44cDLXx5ndyMFDkylEPfdxQxEZaUYWdGrnMaDQ+p4eIZaQiQrEWVj0SLg7rtHOxe1iVNP&lt;br /&gt;
lfD+73736Nz/Fa+I72YkUQ5ZaW0dOybUSpBVWSFZiYpERAiRrESUjeuvdxuXRSTR1AR87WujnYuI&lt;br /&gt;
kQIH2lKUrGXLdo/VWrs7Wcm6gjCiMCJZiSgbkyeLuSEiYndHOT4rL3nJ8OSl1kC1qViMo/FIVh5/&lt;br /&gt;
vLQNbSPSMSa9DYwxZxtjfm+M6TPGBHf9MMbMM8b8OnfO88aYrxhjxuTzRkRE1DbKISu7G5YsKfz7&lt;br /&gt;
WIvMmwUHHBCd3KuFsVotGgD8DMAfALzP/zFHSm4EsBbASwHMAXAlgO0APjty2YyIiNgdUI4ZaHfC&lt;br /&gt;
4GC2CLbA+FJWIqqHMak0WGvPs9Z+A8DDKaccD+BAAKdbax+21t4C4HMAPmKMGasELSIiokYRyUph&lt;br /&gt;
NDUVXzUYyUpEIYxJspIBLwXwsLV2ozp2C4AOAItGJ0sRERHjFYynszssRR4uRLISUQjjlazM3SoT&lt;br /&gt;
cgAAIABJREFUArDeO7Ze/RYRERFRNTDyalRWykckKxGFUDNkxRhzoTFmqMDfLmPM/qOdz4iIiAgf&lt;br /&gt;
1spndKYsH5GsRBRCLflvfA3A5UXOyRrV43kAR3jHZqrfCmLp0qXo8AIgLFmyBEuKubNHRETsljjh&lt;br /&gt;
BOCii4AzzhjtnIxdjMfVQOMZy5cvx/LlyxPHuru7h+1+NVMtrLWbAGyqUnJ/AHC2MWa68lt5HYBu&lt;br /&gt;
AI8Vu3jZsmU4PAYQiYiIyIi6OuATnxjtXIxt1NXJZ1RWxgZCE/gVK1Zg8eLFw3K/miErpcAYMw/A&lt;br /&gt;
VAB7AagzxhyS++lJa20fgFshpORKY8ynAcwGcAGAS6y1O0YjzxERERER6eDmm5GsRIQwJskKgPMB&lt;br /&gt;
vEt9X5H7fBWAu6y1Q8aYEwF8B8C9APoA/BDAuSOZyYiIiIiIbGCk10hWIkIYk2TFWvteAO8tcs6z&lt;br /&gt;
AE4cmRxFRERERFSCPfaQzx1R+44IoGZWA0VERERE7L4gWSm2h1DE7olIViIiIiIiRh0kK5uDu71F&lt;br /&gt;
7O6IZCUiIiIiYtQRyUpEIUSyEhEREREx6pg+XT4ZDTgiQiOSlYiIiIiIUUdcBRRRCJGsRERERERE&lt;br /&gt;
RNQ0xuTS5YiIiIiI8Yef/ASYN2+0cxFRi4hkJSIiIiKiJvDWt452DiJqFdEMFBEREREREVHTiGQl&lt;br /&gt;
IiIiIiIioqYRyUpERERERERETSOSlYiIiIiIiIiaRiQrERVj+fLlo52FMYlYbqUjlll5iOVWOmKZ&lt;br /&gt;
1RbGJFkxxpxtjPm9MabPGBMMzmyMGfL+dhlj3jLSed0dEBt1eYjlVjpimZWHWG6lI5ZZbWGsLl1u&lt;br /&gt;
APAzAH8A8L4C570bwM0ATO571zDnKyIiIiIiIqLKGJNkxVp7HgAYY95d5NRua23nCGQpIiIiIiIi&lt;br /&gt;
YpgwJs1AJeBbxphOY8wfjTHvHe3MRERERERERJSOMamsZMTnANwBoB/A6wB82xjTZq29pMA1zQCw&lt;br /&gt;
cuXKEcje+EF3dzdWrFgx2tkYc4jlVjpimZWHWG6lI5ZZ6VBjZ3O10zbW2mqnWRaMMRcC+HSBUyyA&lt;br /&gt;
g6y1T6hr3g1gmbV2aob0Pw/gvdbavQqc83YA/5c50xERERERERE+TrfWXlXNBGuJrEwDMK3IaU9Z&lt;br /&gt;
a3eqa0ohKycA+BWAZmvtjgJ5OB7AagCDGbMeERERERERIYrKAgC3WGs3VTPhmjED5R6sqg/n4TAA&lt;br /&gt;
W9KIispDVdlgRERERETEboR7hyPRmiErpcAYMw/AVAB7AagzxhyS++lJa22fMeZEADMB3AdRSF4H&lt;br /&gt;
4CwAXxmN/EZERERERESUj5oxA5UCY8zlAN4V+OlV1tq7jDHHA7jw/7d352FyVGX7x793FsgGgRck&lt;br /&gt;
EWVfFETEBPjJErYEAsgOikPAyB4BCWETRER4RXBhVVBwIeASRVkMIATCKkLMSwZQJCJoEFQIATEg&lt;br /&gt;
CZDl+f1xaqTTdPdMT7qnunvuz3XVlXTVqernVM1MP33OqVPABqQ5Vp4BroyI7/dgmGZmZlYDTZms&lt;br /&gt;
mJmZWe/R6vOsmJmZWZNzspKRdLykOZIWSpohaau8Y8qLpFGSpkr6R/ZcpX1KlDlP0j8lLZB0l6QN&lt;br /&gt;
i7avKOkKSS9Lel3SLyWt0XO16FmSzpQ0U9JrkuZKuknSxiXK+bwVkDRB0uOS5mfLQ5J2Lyrjc1aB&lt;br /&gt;
pDOy39OLi9b7vBWQdE6JZ8Y9WVTG56yIpDUl/Sir84Ls93VEUZm6nzcnK4Ckg4GLgHNIdw09DkyT&lt;br /&gt;
tHqugeVnMPAYcBxpfptlSPo8cAJwDLA18AbpfK1QUOxS4OPAgcAOwJrADfUNO1ejgG8B/w8YQ3p+&lt;br /&gt;
1Z2SBnYU8Hkr6XnS/EojgJGkiRx/JWl09mHyc3zOysq+VB1D+ptVuN4/a6U9Qbr5Yni2bN+xwefs&lt;br /&gt;
3SStAvwWeIs0rccmwCnAqwVleua8RUSvX0h3DV1W8FrA34HT844t7wVYCuxTtO6fwKSC1ysDC4FP&lt;br /&gt;
Frx+C9i/oMwHsmNtnXedeui8rZ7Vd/ueOm+kB3cuBUYUrV8ZmEk2m3MN6/hZYHwdzt0rwKnAEtIf&lt;br /&gt;
xYb7WSPdWbgUmFJm+zrZ9pNLbFsD+CYwm/SH/T/AI8BZwNAqYhgCPAXsAtwLXNxTP2vNuJC+jLZX&lt;br /&gt;
2O5z9u5zciFwfydleuS89fqWFUn9Sd/o7u5YF+lsTge2ySuuRiVpPdI3ksLz9RrwO945X1uSbosv&lt;br /&gt;
LPMU8By955yuQmqV+hf06HlbpiVM0krAXcBmwH4RcWc36lLOcaQEqSYk9ZH0KWAQaQLHTYChNObP&lt;br /&gt;
2qeAOcDekgZ3daesJeSPpETvAWAScDLQTmph+nkVMVwB3BIR9xS9h39Hy9so697+i6QfK02D4XNW&lt;br /&gt;
3t7AI5Kuz7q32yUd1bGxJ89br09WSN+A+wJzi9bPJV0EW9Zw0gdipfM1DHg7+6EtV6ZlSRKp2fPB&lt;br /&gt;
iOjoE+/x8yZpCHAnsDlwQGeJiqRB1b5HLUjaTNLrpG9fVwIHZX/MVqMBf9Yk7Qy8DziC1N13QBf3&lt;br /&gt;
GwrcBCwCtoiIYyPi6mw5hjTVwgNdPNangC1I80cV8+9oaTOAz5C6MyYA6wEPZMmmz1lp65MS66dI&lt;br /&gt;
85V9B7hc0mHZ9h47b05WzGrvSmBT0rfvXGR/gKeRPtAOiIg7irZPzga6rS/p15JeA34s6cuS3lZ6&lt;br /&gt;
9ETxMa+W9C9JK0iaA3wI2KlgsOI9BWWHSrpU0nOS3pT0tKTTs0Suo8w6kpYCuwOXAC+QWlKuk7QL&lt;br /&gt;
qa+8sPx9he9RoH8Wz3+PS+o730rScdm36DckTZP0vqzM2ZKezwYE3pz1zXfVOODJiLif1AI7rov7&lt;br /&gt;
TQDeS2oyf7p4Y0TMi4ivdnYQSe8nJcPjosKM3LasiJgWETdExBMRcRewJ7Aq8MmcQ2tkfYBZEXF2&lt;br /&gt;
RDweEd8Dvkf6We7xQHq7l0l948OK1g8DXuz5cBrei6QPkErn60VgBUkrVyjTkiR9m/RHcKeIeKFg&lt;br /&gt;
U0+etyHAHaTuzYMi4vYSZYLUNDstO/YppAFvP8rWH1xUr/6kwXG/jIi3gYmkcV2zSR/WhwLnZ2UH&lt;br /&gt;
kloIDgEmA58DHiRN1HhRiVg+A7SRBihPInWTHF6wveOcRcHrwnNW7u/YB0jfCi8njRHZEfiFpK+Q&lt;br /&gt;
viVeCFxFaur+ZpljLCMbNHgA7zyWYwqwSxfvbNib1Je/vAMyRwLvAdolLZK0iFS3iZLeJn1j9e9o&lt;br /&gt;
JyJiPvBnYEP8d62cF0i/44VmA2tn/++585b3AJ5GWCg9wPZ54LS8Y8t7oboBtp8oeN2rBqJldfx2&lt;br /&gt;
9nOzfpntdT1vvDPAdg7pMRN7VSh7DSlJ/0qJbb8FHipat39WflTBuj8A95TY/4vAa8XnAfgq8Dbw&lt;br /&gt;
vux1xyDUV4H/KSh3N2nsRse2Sdn6e4H7S5yzJcCLBfvvTEpsXgGGFKw/PztmO9CnYP1PsmP278I5&lt;br /&gt;
PjB7v/Wz10NIA5dPLCr3rgG2WTxlB3hW8XM2mNRyV7jMBK4lPZnev6NdO49DSGPKjvc5K3uOfkLR&lt;br /&gt;
AFtSK+iDBa975LzlfjIaYSE1Ay4gTeH/QdK3rVeA9+QdW07nYzDwEVIXwlLgpOz1Wtn207Pzszfw&lt;br /&gt;
YeBm4GlghYJjXEn60NyJ9E3wt8Bv8q5bHc/ZlaQP1lGkbwwdy4CCMnU9b7yTrLwB/Js0LqJc2Y5k&lt;br /&gt;
5f0lth2bbVuvYN0vgWeLypVLVh4DbiONOSlcRmfxtWXl1iElFbdk/9+M1PqymNTSshT4WcE5mwnM&lt;br /&gt;
K3HOZpPGgXScs0ey415eFNc+2TEnFa0/Mavvul04xzcAvyta94sS60olK4vo5M6K5fj5K74byL+j&lt;br /&gt;
7z5H3yDdNrsOsC1p4PlcYDWfs7LnbEtSonEmaUzVIcDrwKd6+mct95PRKAvpzoZnSRnhw8CWeceU&lt;br /&gt;
47nYMftDu6Ro+WFBmS+TMuoFpK6EDYuOsSKpWf/l7If7F8Aaedetjues1PlaAny6qFzdzhspWVlC&lt;br /&gt;
6pKZl/0h3qhM2WuAt8psWyX7Pfhi9rrjm9JXisqVS1beyOJYWmJZAkzMynUkK//Kjv8iaUDwLrzz&lt;br /&gt;
Yf/pgnO2JPujWHzOrgXmF5yz27J9Tysq1/Fz/Yky5+2jnZzfoVmcXyf94e5YJmX7b1hQtm4tK2Vi&lt;br /&gt;
u4eCZKXeP2vNuJC67P6eXcPnSF156xWV8Tl793nbE/h9dk7+CBxRokzdz5ufDWTWIiSNB34IbEUa&lt;br /&gt;
x3EPKRHYLiL+UVT2GuDAiCjuR+7Y/gtgs4jYRNKRwNXZ69kFZf4AzIuIXYr2XUjqrvkaBQNkC/w5&lt;br /&gt;
Iv6eDYSdA5waEcWzr3Zs+0xEXJetuwegxPtdR5rPZv2ifZc5rqQdSS0QB0XEjaXOW0S0lzofWbmj&lt;br /&gt;
Sa2uUaJeAZwXEeeWi0HSb0ktlKtExOJy72Nm79Yv7wDMrPYi4hFJ+5FaGe6SNCoiXqniENcBN0va&lt;br /&gt;
ktT0+2hhotLxNmX2/QtprMi9VQde2auk202LrVPj9ynnEFJr0rkltk3Itpfa1uEW4GOkcS/VzKdi&lt;br /&gt;
1uv5biCzFhVpsrA2YCPgjmzela66ndRt8XlS98mPSpR5g9RlVOx6YBtJuxVvyG5p7ltFHIX+Anyw&lt;br /&gt;
8LZqSR8Btuvm8bosu114B+DnEXFj8ULqVttQlZ8p9l1SV9dFkjYq8R5rSDqrLhUwa3JOVsxayzLd&lt;br /&gt;
ExFxM3A0aVDbLZJW7MpBsm6Kn5FaAToGuhabBWwu6SxJB2eTpUEayPgocGs2N8uxkk6WNJl0t9TQ&lt;br /&gt;
btQLUlfNCqRnLh0n6VxS//gT3TxeoVLdVYU65lK5pcz2X5PGrZSdcyUi/k26q2pF4DFJV0k6Jlu+&lt;br /&gt;
SxqUuH25/c16MycrZq3lXV0zETGZ9KydHYDrJfUpV7bIddm/0yOieIZKgPNIH9KnkQYrnp2938Ls&lt;br /&gt;
vb5OapW5lNRCswHwJdJg2MJ4y8WxzPqI+BNwGGnA70XAXqTBxI+WOEa543bpvUo4BPhbRPyh5M5p&lt;br /&gt;
zo4HgYOLzm9xHWaS7nr6DukcXZLVZSvSGB9PUGZWggfYmllJkjYn3YZ8aET8tLPyZmb10jAtK5KO&lt;br /&gt;
lzRH0kJJMyr1/UrasWCK745lSeEskpLGF6zvKLOgZ2pj1hKOId1meFPegZhZ79YQdwNJOpjUFHoM&lt;br /&gt;
aeKnScA0SRtHxMtldgtgY9If07Qi4qWiMvOzMirYx8wqkLQX6bk/R5MmVluYc0hm1ss1RLJCSk6u&lt;br /&gt;
KphPYQLwcdJTTb9eYb958e4nORaKiJhXuzDNeoVvAWsAt5ImezIzy1Xu3UDZA9JGkp4HAqQMg/Q0&lt;br /&gt;
020q7UoaUf9PSXdK2rZEmSGSns2e/HqzpE1rGrxZC4qI9SJicEQcGBFv5B2PmVnuyQqwOtCXNDV4&lt;br /&gt;
obnA8DL7vEB6fsmBpCegPg/cJ2mLgjJPkVpm9iHdTtgHeEjSmrUL3czMzOqtUbqBqhIRfyY92rvD&lt;br /&gt;
DEkdz+gYn5WZQXqaMgCSHiY98OxY4JxSx80mmxpLekbQm/WI3czMrEUNANYFplU5Y3anGiFZeZk0&lt;br /&gt;
mdKwovXDSLM9dtVMKsxkGRGLJT0KbFjhGGNJj8Q2MzOz7hlHmnupZnJPViJikaRZpMfHTwWQpOz1&lt;br /&gt;
5VUcagtS91BJ2URNHyY9K6WcZwG23fbHXHrpJvTt7qTgTWDSpElccskleYdRd65na3E9W4vr2Vpm&lt;br /&gt;
z57NoYceCtlnaS3lnqxkLgYmZ0lLx63Lg4DJAJIuANaMiPHZ64mkJ5r+kdTsdDSwM7BrxwElnU3q&lt;br /&gt;
BnqG9PyS04G1ge9XiONNgIcf3oSrrx7B1VeDOpuEu0kNHTqUESNG5B1G3bmercX1bC2uZ8uq+TCK&lt;br /&gt;
hkhWIuJ6SauTpu8eRpo1c2zBbcfDgbUKdlmBNC/LmsAC4PfA6Ih4oKDMqqTH2g8nPa11FrBNNmV3&lt;br /&gt;
RV/+MpxzDgwaBJde2roJi5mZWTNoiGQFICKuBK4ss+3wotffID0srdLxTgZO7k4se+0Fw4bBhAkw&lt;br /&gt;
cCBccIETFjMzs7w0TLLSaI49FhYuhEmTYPBgOPvsvCMyMzPrnZysVHDSSbBgAZx1VmphOfXUvCOq&lt;br /&gt;
nba2trxD6BGuZ2txPVuL62ld5acuF5A0Apg1a9asZQZDffGLcP75cMUVcNxx+cVnZmbWqNrb2xk5&lt;br /&gt;
ciTAyIhor+Wx3bLSBf/7v6mF5fjjUwvL4Yd3vo+ZmZnVhpOVLpDgoovSGJYjj4QBA8CtemZmZj3D&lt;br /&gt;
yUoXSakbaMECOOyw1MKy3355R2VmZtb6GuFBhk2jTx/4wQ/gwAPh4IPhjjvyjsjMzKz1OVmpUr9+&lt;br /&gt;
8OMfw9ixsP/+cN99eUdkZmbW2pysdEP//nD99TBqVJpA7uGH847IzMysdTlZ6aYBA+Dmm2HkSNh9&lt;br /&gt;
d5g1K++IzMzMWpOTleUwaBDceitssgnsths88UTeEZmZmbUeJyvLaaWV4PbbYe21YcwYeOqpvCMy&lt;br /&gt;
MzNrLU5WamDVVeHOO2G11WD0aJgzJ++IzMzMWoeTlRp5z3tg+vQ0/8ouu8Df/553RGZmZq3ByUoN&lt;br /&gt;
vfe9cPfdEJFaWF58Me+IzMzMmp+TlRpbe+2UsPznP7DrrvDyy3lHZGZm1tycrNTBBhukhGXu3DR5&lt;br /&gt;
3L//nXdEZmZmzcvJSp188INpDMucObDnnqmlxczMzKrnZKWONt8cpk1L86/svXd6arOZmZlVx8lK&lt;br /&gt;
nW21Ffz61zBzJhxwALz1Vt4RmZmZNRcnKz1g++1h6lS491741Kdg0aK8IzIzM2seTlZ6yOjRcOON&lt;br /&gt;
cNtt8OlPw5IleUdkZmbWHJys9KA994QpU+AXv4CjjoKlS/OOyMzMrPE5WelhBx4I116bls99Lk0g&lt;br /&gt;
Z2ZmZuU1TLIi6XhJcyQtlDRD0lYVyu4oaWnRskTSGkXlPiFpdnbMxyXtUf+adG7cOPje9+DKK+G0&lt;br /&gt;
05ywmJmZVdIv7wAAJB0MXAQcA8wEJgHTJG0cEeXmgA1gY+D1/66IeKngmNsCPwU+D9wGjANulvTR&lt;br /&gt;
iHiyLhWpwpFHwoIFcOKJMHgwnHtu3hGZmZk1poZIVkjJyVURcR2ApAnAx4EjgK9X2G9eRLxWZtuJ&lt;br /&gt;
wO0RcXH2+kuSdgVOAI6rTdjL53OfS3OvfP7z6QGIZ5yRd0RmZmaNJ/dkRVJ/YCTw1Y51ERGSpgPb&lt;br /&gt;
VNoVeEzSAOAJ4MsR8VDB9m1IrTWFpgH71iTwGjn99NTCcuaZMGhQamkxMzOzd+SerACrA32BuUXr&lt;br /&gt;
5wIfKLPPC8CxwCPAisDRwH2Sto6Ix7Iyw8scc3gtgq6lc85JCcvEiSlhOeqovCMyMzNrHI2QrFQt&lt;br /&gt;
Iv4M/Llg1QxJG5C6k8bnE1X3SfC1r6WE5ZhjUpfQuHF5R2VmZtYYGiFZeRlYAgwrWj8MeLGK48wE&lt;br /&gt;
tit4/WJ3jzlp0iSGDh26zLq2tjba2tqqCKc6Elx+eUpYxo+HAQPSbc5mZmaNZsqUKUyZMmWZdfPn&lt;br /&gt;
z6/b+yka4L5ZSTOA30XExOy1gOeAyyPiG108xp3AaxFxUPb6Z8DAiNi3oMxvgccjouQAW0kjgFmz&lt;br /&gt;
Zs1ixIgRy1Wn7lqyBA49FG64AW66CT7+8VzCMDMzq0p7ezsjR44EGBkR7bU8diO0rABcDEyWNIt3&lt;br /&gt;
bl0eBEwGkHQBsGZEjM9eTwTmAH8EBpDGrOwM7FpwzMtI41hOJt263EYayHt0D9Sn2/r2heuugzff&lt;br /&gt;
TC0rt92Wpuo3MzPrrRpiUriIuB44FTgPeBTYHBgbEfOyIsOBtQp2WYF0p8/vgfuADwOjI+K+gmM+&lt;br /&gt;
DBxCmrvlMeAAYN9GmGOlM/37w89+BjvvDPvsAw8+mHdEZmZm+WmIbqBG0QjdQIUWLkzdQI88Anff&lt;br /&gt;
DVuVndPXzMwsX/XsBmqIlhUrbeBAmDoVNtsMxo6Fxx/POyIzM7Oe52SlwQ0ZArffDuuvD7vuCrNn&lt;br /&gt;
5x2RmZlZz3Ky0gSGDoVp02DYsDTY9pln8o7IzMys5zhZaRKrrQbTp8NKK6WE5bnn8o7IzMysZzhZ&lt;br /&gt;
aSLDhqWBtn37poTlhRfyjsjMzKz+nKw0mfe/PyUsb74JY8bAvHmd72NmZtbMnKw0ofXWSwnLK6/A&lt;br /&gt;
brvBq6/mHZGZmVn9OFlpUhtvnMawPP887L47vPZa3hGZmZnVh5OVJrbZZnDnnfDUU7DXXukhiGZm&lt;br /&gt;
Zq3GyUqTGzEizcPS3g777ZfGspiZmbUSJystYJtt4NZb4Te/gU98At5+O++IzMzMasfJSovYaSe4&lt;br /&gt;
+ebULXToobB4cd4RmZmZ1YaTlRYydixcfz3ceCMccQQsXZp3RGZmZsvPyUqL2Xdf+MlP0vLZz4If&lt;br /&gt;
qm1mZs2uX94BWO0dfDAsXAiHHw6DBsHFF4OUd1RmZmbd42SlRX3mMylhOe44GDwYvvKVvCMyMzPr&lt;br /&gt;
HicrLeyzn00JyymnwMCBcNZZeUdkZmZWPScrLe7kk9NkcV/8YuoSmjQp74jMzMyq42SlFzjrrJSw&lt;br /&gt;
nHxyamGZMCHviMzMzLrOyUovIMH558Mbb6SuoYEDYfz4vKMyMzPrGicrvYQEl16axrAccURKWD75&lt;br /&gt;
ybyjMjMz61yX51mRtKqkz0laucS2odm2VWsbntWSBN/5DhxyCIwbB1On5h2RmZlZ56qZFO4EYIeI&lt;br /&gt;
eK14Q0TMB0YBp9UqMKuPvn3hmmvS5HGf+ESant/MzKyRVZOsHAh8t8L2q4A9ly8c6wn9+sFPfwq7&lt;br /&gt;
7pqe1Hz//XlHZGZmVl41ycoGwNMVtj8NrN/dQCQdL2mOpIWSZkjaqov7bSdpkaT2ovXjJS2VtCT7&lt;br /&gt;
d6mkBd2Nr9WssAL88pew3Xaw114wY0beEZmZmZVWTbKyBFizwvY1gW49Ok/SwcBFwDnAR4HHgWmS&lt;br /&gt;
Vu9kv6HAtcD0MkXmA8MLlnW6E1+rGjAgPal5iy1gjz3g0UfzjsjMzOzdqklWHgX2q7B9/6xMd0wC&lt;br /&gt;
roqI6yLiT8AEYAFwRCf7fRf4CVCuXSAiYl5EvJQt87oZX8saPBhuuw022gh22w3++Me8IzIzM1tW&lt;br /&gt;
NcnKt4FTJJ0gqW/HSkl9JX2OlHBcUW0AkvoDI4G7O9ZFRJBaS7apsN/hwHrAuRUOP0TSs5Kek3Sz&lt;br /&gt;
pE2rja83WHlluOMOeN/7YMwYeLpSZ5+ZmVkP63KyEhE3AF8HLgf+JelRSY8C/wIuBS6OiF92I4bV&lt;br /&gt;
gb7A3KL1c0ldN+8iaSPgq8C4iCjX9fQUqWVmH2Acqa4PSarUldVr/c//pDuDVl0VRo+GZ5/NOyIz&lt;br /&gt;
M7OkmpYVIuIs4GPAZOCfwAvANcA2EXFGzaMrQVIfUtfPORHxl47VJWKdERE/jojfR8RvgAOAecCx&lt;br /&gt;
PRFnM1pjDZg+PQ2+HT0a/vGPvCMyMzPrxgy2ETETmFnDGF4mDd4dVrR+GPBiifIrAVsCW0jq6Hbq&lt;br /&gt;
A0jS28BuEXFf8U4RsThrCdqws4AmTZrE0KFDl1nX1tZGW1tbZ7s2vTXXhLvvhlGjUsJy//0wrPjK&lt;br /&gt;
mJlZrzZlyhSmTJmyzLr58+fX7f2Uhod0oaC0eVfKRcTvqw5CmgH8LiImZq8FPAdcHhHfKCorYJOi&lt;br /&gt;
QxwP7EyaC+bZiFhY4j36AH8EbouIU8vEMQKYNWvWLEaMGFFtNVrKM8/ADjvA6qvDffelbiIzM7Ny&lt;br /&gt;
2tvbGTlyJMDIiGjvrHw1qmlZeQwISnS5FAjS+JNqXQxMljSL1GozCRhE6m5C0gXAmhExPht8+2Th&lt;br /&gt;
zpJeAt6MiNkF684m3SX0DLAKcDqwNvD9bsTX62y4YeoS2nFHGDs2/b+oscnMzKxHVJOsrNeFMit1&lt;br /&gt;
J4iIuD6bU+U8UvfPY8DYgluNhwNrVXnYVYGrs31fBWaRxtb8qTsx9kabbgp33QU77wx77gnTpsGQ&lt;br /&gt;
IXlHZWZmvU2Xu4HKHkBaCWgDjgS2jIjutKw0BHcDlTZzZrqleaut4NZb0xObzczMCtWzG6iqu4EK&lt;br /&gt;
SdpB0rWkO4JOBe4l3SlkLWbrrdPEcQ8/DAcdBG+/nXdEZmbWm1SVrEgaLukMSU8DvwBeA1YE9ouI&lt;br /&gt;
MyLi/+oRpOVv1CiYOjXdKdTWBosX5x2RmZn1Fl1OViTdQppobXPgJNKA18/VKzBrPGPGpIcfTp0K&lt;br /&gt;
48fDkiV5R2RmZr1BNQNs9yDNXvudiPCE7L3UXnvBlClw8MEwaBBcdRX06XZnopmZWeeq+ZjZnnS3&lt;br /&gt;
zyxJv8ueEVTxqcjWmg46CK69Fn7wAzjpJFjOMdpmZmYVdbllJSJmADMknQQcTHruzsWkhGdXSc9H&lt;br /&gt;
xOv1CdMazaGHwoIFcOyx6e6gCy8EVZqBx8zMrJu6M93+G8APgR9K+gDpluUzgAsl3RUR+9Q4RmtQ&lt;br /&gt;
xxwDCxem1pXBg+FLX8o7IjMza0VVJyuFIuIp4HRJZwJ7k1pbrBeZODG1sHzhC6mF5bTT8o7IzMxa&lt;br /&gt;
zXIlKx0iYglwc7ZYL3PmmSlhOf30NOj2+OPzjsjMzFpJTZIVs/POSwnLCSekFpYj3MZmZmY14mTF&lt;br /&gt;
akKCb34zJSxHHZUSlra2vKMyM7NW4GTFakaCK65Ig24POwwGDID99887KjMza3aezstqqk+fNP/K&lt;br /&gt;
QQeliePuuCPviMzMrNk5WbGa69sXfvQj2HPP1LJy7715R2RmZs3MyYrVRf/+8POfww47wN57w0MP&lt;br /&gt;
5R2RmZk1KycrVjcrrgg33QRbbgl77AGzZuUdkZmZNSMnK1ZXgwbBLbfAppvCbrvBH/6Qd0RmZtZs&lt;br /&gt;
nKxY3a20Etx+O6yzDowZA089lXdEZmbWTJysWI9YZRW48054z3tg9Gj461/zjsjMzJqFkxXrMauv&lt;br /&gt;
DtOnp66h0aPh+efzjsjMzJqBkxXrUcOHw913Q0RKWF58Me+IzMys0TlZsR631lpwzz3wxhtpDMvL&lt;br /&gt;
L+cdkZmZNTInK5aL9ddPLSzz5qW7hP7977wjMjOzRuVkxXLzwQ/CXXfB3/6W5mF5/fW8IzIzs0bk&lt;br /&gt;
ZMVytfnmMG0aPPkk7LNPemqzmZlZoYZJViQdL2mOpIWSZkjaqov7bSdpkaT2Ets+IWl2dszHJe1R&lt;br /&gt;
+8hteW25ZZqH5f/+Dw44AN56K++IzMyskTREsiLpYOAi4Bzgo8DjwDRJq3ey31DgWmAs/qXiAAAQ&lt;br /&gt;
JUlEQVR6iW3bAj8FvgdsAfwKuFnSprWN3mph221h6lS4//70tOZFi/KOyMzMGkVDJCvAJOCqiLgu&lt;br /&gt;
Iv4ETAAWAEd0st93gZ8AM0psOxG4PSIujoinIuJLQDtwQg3jthraZRe48Ub49a/hsMNgyZK8IzIz&lt;br /&gt;
s0aQe7IiqT8wEri7Y11EBKm1ZJsK+x0OrAecW6bINry7xWVapWNa/vbYIz2t+Ze/hKOOgqVL847I&lt;br /&gt;
zMzy1i/vAIDVgb7A3KL1c4EPlNpB0kbAV4HtI2KppFLFhpc55vDlitbqbv/94Uc/gnHjYOBAuOIK&lt;br /&gt;
KH2JzcysN2iEZKUqkvqQun7OiYi/dKyu5XtMmjSJoUOHLrOura2Ntra2Wr6NVdDWBgsXwpFHpoTl&lt;br /&gt;
m990wmJm1iimTJnClClTllk3f/78ur1fIyQrLwNLgGFF64cBpSZjXwnYEthC0hXZuj6AJL0N7BYR&lt;br /&gt;
92X7dvWYy7jkkksYMWJElytg9XHEESlhOeEEGDwYzjsv74jMzAxKf4Fvb29n5MiRdXm/3JOViFgk&lt;br /&gt;
aRYwGpgKKevIXl9eYpfXgM2K1h0P7AwcCDybrXu4xDF2zdZbkzj++DT3yumnpxaWM8/MOyIzM+tp&lt;br /&gt;
uScrmYuByVnSMpN0d9AgYDKApAuANSNifDb49snCnSW9BLwZEbMLVl8G3CfpZOA2oI00kPfoOtfF&lt;br /&gt;
auy001LC8oUvpCc2T5yYd0RmZtaTGiJZiYjrszlVziN11TwGjI2IeVmR4cBaVR7zYUmHAOdny9PA&lt;br /&gt;
vhHxZOU9rRF96UspYTnppJSwHO2U08ys12iIZAUgIq4Eriyz7fBO9j2XErcwR8QNwA01CdByJcGF&lt;br /&gt;
F6aE5dhjU5fQoYfmHZWZmfWEhklWzDojwWWXpUG348fDgAFw0EF5R2VmZvXmZMWaSp8+cNVVKWFp&lt;br /&gt;
a0stLB//eN5RmZlZPeU+g61Ztfr2hWuvTU9pPvBAmP6uJ0OZmVkrccuKNaV+/WDKlDTb7b77wh13&lt;br /&gt;
wKhReUdlZpafiPRMtcWL078dS/HrepWZM6d+dXOyYk1rhRXSM4T22it1BU2fDltvnXdUZtZdEel5&lt;br /&gt;
YNV8gOb54VzLMrU4dkS+169PHftqnKxYUxs4EH71K9h9dxg7Fu69F7bYIu+ozOovAhYtqn5ZvLh7&lt;br /&gt;
+9Vr/+IP4zxJqZu5X7/0b8dS/LorZcrts+KK9Tlu3vv06QPt7VCnCWydrFjzGzIEbrsNxoyBXXeF&lt;br /&gt;
+++HTTfNOyprNB0f7o32Yd3d/evxwd63L/TvX37p16/y9sGDq9u/X793PvAa4UPYzx9rXE5WrCUM&lt;br /&gt;
HZrGrey8c0paHngANtww76iaX3e+vb/99vJ9GFc67vJ80Nfjw71Pn8ofzp19WA8cCCuv3P39q10q&lt;br /&gt;
7d+vX32b8c2Wh5MVaxmrrQZ33QU77gijR6eEZZ11ej6OiOX/9txTH/55fMAvz4ftiiumlrR6fFh3&lt;br /&gt;
Z39/uJv1DCcr1lKGDYO774YddkgJy8SJPf/hv3hx7eu1vB+ygwalf1dYYfmO09nS2fHd1G5m3eFk&lt;br /&gt;
xVrO+96XEpY99khPa+7uB++AAdV9ENfrw75fP3/Am1nv5mTFWtK668Ls2Z0WMzOzJuAeVzMzM2to&lt;br /&gt;
TlbMzMysoTlZMTMzs4bmZMXMzMwampMVMzMza2hOVszMzKyhOVkxMzOzhuZkxczMzBqakxUzMzNr&lt;br /&gt;
aE5WzMzMrKE5WTEzM7OG5mTFzMzMGlrDJCuSjpc0R9JCSTMkbVWh7HaSHpT0sqQFkmZLOqmozHhJ&lt;br /&gt;
SyUtyf5dKmlB/WvSHKZMmZJ3CD3C9WwtrmdrcT2tqxoiWZF0MHARcA7wUeBxYJqk1cvs8gbwLWAU&lt;br /&gt;
8EHgf4GvSDqqqNx8YHjBsk7to29OveWXx/VsLa5na3E9rasaIlkBJgFXRcR1EfEnYAKwADiiVOGI&lt;br /&gt;
eCwifh4RsyPiuYj4KTCNlLwUFY15EfFStsyray3MzMys5nJPViT1B0YCd3esi4gApgPbdPEYH83K&lt;br /&gt;
3le0aYikZyU9J+lmSZvWJmozMzPrKbknK8DqQF9gbtH6uaSum7IkPS/pTWAmcEVEXFOw+SlSy8w+&lt;br /&gt;
wDhSXR+StGatAjczM7P665d3AMtpe2AI8DHga5KeiYifA0TEDGBGR0FJDwOzgWNJY2NKGQAwe/bs&lt;br /&gt;
esbcEObPn097e3veYdSd69laXM/W4nq2loLPzgG1PrZSj0t+sm6gBcCBETG1YP1kYGhE7N/F45wF&lt;br /&gt;
HBoRm1Qocz2wKCLGldl+CPCTKsI3MzOzZY3LxpLWTO4tKxGxSNIsYDQwFUCSsteXV3GovsCK5TZK&lt;br /&gt;
6gN8GLitwjGmkbqMngXerOK9zczMersBwLqkz9Kayj1ZyVwMTM6Slpmku4MGAZMBJF0ArBkR47PX&lt;br /&gt;
xwHPAX/K9t8ROAW4tOOAks4mdQM9A6wCnA6sDXy/XBAR8QpQ02zQzMysF3moHgdtiGQlIq7P5lQ5&lt;br /&gt;
DxgGPAaMLbjVeDiwVsEufYALSBncYuAvwGkRcXVBmVWBq7N9XwVmAdtkt0abmZlZk8h9zIqZmZlZ&lt;br /&gt;
JY1w67KZmZlZWU5WzMzMrKH1mmRF0ihJUyX9I3uo4T5d2GcnSbMkvSnpz5LG90Ssy6PaekraseBB&lt;br /&gt;
jx3LEklr9FTM3SHpTEkzJb0maa6kmyRt3IX9muqadqeezXhNJU2Q9Lik+dnykKTdO9mnqa4lVF/P&lt;br /&gt;
ZryWpUg6I4v94k7KNd01LdSVejbjNZV0TomYn+xkn5pey16TrACDSQN3jwM6HagjaV3gVtJjAD4C&lt;br /&gt;
XAZ8X9Ku9QuxJqqqZyaAjXjngY/vjYiX6hNezYwiPczy/wFjgP7AnZIGltuhSa9p1fXMNNs1fR74&lt;br /&gt;
PDCC9PiNe4BfSSo5b1KTXkuosp6ZZruWy5C0FXAM6QG1lcqtS3NeU6Dr9cw04zV9gnQDTEfM25cr&lt;br /&gt;
WJdrGRG9bgGWAvt0UuZrwO+L1k0Bfp13/DWu547AEmDlvONdzrquntV3+xa/pl2pZ6tc01eAw1v1&lt;br /&gt;
Wnaxnk19LUkzjD8F7ALcC1xcoWzTXtMq69l015Q063t7FeVrfi17U8tKtT5GephioWl08eGKTUbA&lt;br /&gt;
Y5L+KelOSdvmHVA3rEL6tvKvCmVa4Zp2pZ7QxNdUUh9JnyLNtfRwmWJNfy27WE9o4msJXAHcEhH3&lt;br /&gt;
dKFsM1/TauoJzXlNN8qGF/xF0o8lrVWhbM2vZUPMs9KghlP64YorS1oxIt7KIaZ6eIH0vKRHSDMA&lt;br /&gt;
Hw3cJ2nriHgs18i6SJJIEwI+GBGV+lGb+ppWUc+mvKaSNiN9aA8AXgf2j/LzIjXttayynk15LQGy&lt;br /&gt;
RGwLYMsu7tKU17Qb9WzGazoD+Ayp9ei9wJeBByRtFhFvlChf82vpZKWXi4g/A38uWDVD0gakWYSb&lt;br /&gt;
ZXDblcCmwHZ5B1JnXapnE1/TP5H6t4cCBwHXSdqhwgd5s+pyPZv1Wkp6PymxHhMRi/KOp166U89m&lt;br /&gt;
vKYRUTh9/hOSZgJ/Az4JXNMTMbgbqLwXSYOJCg0DXmvUDL+GZgIb5h1EV0j6NrAnsFNEvNBJ8aa9&lt;br /&gt;
plXWs5SGv6YRsTgi/hoRj0bEWaSBihPLFG/aa1llPUtp+GtJGjz8HqBd0iJJi0hjNSZKejtrJSzW&lt;br /&gt;
jNe0O/UspRmu6X9FxHxSwlUu5ppfS7eslPcwsEfRut2o3LfcKrYgNVU2tOwDfF9gx4h4rgu7NOU1&lt;br /&gt;
7UY9S2mKa1qkD+UfTtqU17KMSvUspRmu5XTSg2MLTQZmAxdGNuKySDNe0+7Us5RmuKb/JWkIKVG5&lt;br /&gt;
rkyR2l/LvEcZ99RCuqX3I6QfiqXASdnrtbLtFwDXFpRfl9Sf/DXgA6Rbgd8mNfflXp8a1nMisA+w&lt;br /&gt;
AfAhUpPmItI3+NzrU6GeV5Ke+TSKlLF3LAMKyny12a9pN+vZdNc0q8MoYB1gs+zndDGwS5mf26a7&lt;br /&gt;
lt2sZ9Ndywp1X+YumVb4/exmPZvumgLfAHbIfm63Be4ijUFZraeuZW9qWdmS9EMU2XJRtv5a4AiK&lt;br /&gt;
HpYYEc9K+jhwCXAi8HfgyIgoHuHcaKqqJ7BCVmZNYAHwe2B0RDzQUwF30wRS/e4rWn8472T776X5&lt;br /&gt;
r2nV9aQ5r+kapJ/R9wLzSTHvFu/cXdEqv59V1ZPmvJblFLcytMLvZykV60lzXtP3Az8FVgPmAQ8C&lt;br /&gt;
H4uIV7Ltdb+WfpChmZmZNTQPsDUzM7OG5mTFzMzMGpqTFTMzM2toTlbMzMysoTlZMTMzs4bmZMXM&lt;br /&gt;
zMwampMVMzMza2hOVszMzKyhOVkxMzOzhuZkxcx6jKQdJS2VtHLesQBksexTRflrJN1Yz5jM7N16&lt;br /&gt;
07OBzKxGJK0P3A68UbwJ+GtEHFhhdz/jw8yq4mTFzN5FUv+IWFShSH/gtxFxRIl9H6pfZGbWG7kb&lt;br /&gt;
yMyQdK+kb0m6RNI84A5J47NukiXZvx3Ll6o47p6SnpK0QNLdpEfHd7bPUknHSLpF0huSnpT0MUkb&lt;br /&gt;
ZHH+R9JvJa1XtN9nJT0j6S1JsyUdWrR9Q0kPSFoo6QlJY0q89/sl/VzSq5JekXSzpHUqxDpH0olF&lt;br /&gt;
6x6t5hyZWeecrJhZh08DbwHbAhOAnwHDSY9/Hw60AYtIj4fvlKS1gBuAXwEfAb4PXNjFWL4ITM72&lt;br /&gt;
m016PP13gfOBkaTupm8XvNf+wKXAN4APAVcD10jaMdsu4CbgTWCrrH5fo6BLSlI/YBowH9guOw+v&lt;br /&gt;
kxI3t0Kb5ci/gGbW4emIOKNo3UsAkjYArgDOjIh7JH2gC8f7LPBMRJzecXxJmwOnV9inww8j4obs&lt;br /&gt;
vb8OPAycGxHTs3WXAT8sKH9Kts9V2etLJH0MOBW4H9gV2BgYExFzs2N8gTTupsOnAEXEMR0rJB0J&lt;br /&gt;
vArsBEzvQtxmVgduWTGzDrNKrczu3LkFuCUiLq7ieB8Efle07uEu7vuHgv/Pzf59omjdAElDsteb&lt;br /&gt;
AMVjZX6bre+I5fmORKVMLJsDG0l6vWMBXgFWBDboYtxmVgduWTGzDsV39iCpD3A98G/g2B6MpXBw&lt;br /&gt;
b1RYV8svXEOAR4BDSN1MheaV2WdpibL9axiTmeGWFTOr7FLSGJD9IuLtKvedDWxdtG6bbsbR2e3O&lt;br /&gt;
s0njTAptDzxZsH0tScMqxNIObATMi4i/Fi2vl3nfeaQxPcB/W6HWK1PWzLrJyYqZlSTpcNK4kwnp&lt;br /&gt;
pYZly+AuHuK7pG6Vr0vaWNIhwPjuhtPJum8An5E0Ibvr52Rgv2w9pPEmTwPXSdpc0ijgKyybBP0E&lt;br /&gt;
eBn4laTtJa0raSdJl0las0xc9wCHZeU/TBoUvLibdTSzMpysmBmUbrnYgfQ3Yirwz4LllC4dMOJ5&lt;br /&gt;
4EBgX+Ax4BjgzG7GUnFdRPwKmJjF9gRwNPCZiPhNtj1IycsA0jiaq4EvFMW7kFTn50h3MT0JfI80&lt;br /&gt;
ZuW1MrFeQBrAe0u23AT8pQt1NLMqKP0Om5l1XXY30OfLTQoXEdvmEJaZtSi3rJhZd5XqmjEzqznf&lt;br /&gt;
DWRm3bEQ+JCkmSW2/b6ngzGz1uZuIDMzM2to7gYyMzOzhuZkxczMzBqakxUzMzNraE5WzMzMrKE5&lt;br /&gt;
WTEzM7OG5mTFzMzMGpqTFTMzM2toTlbMzMysof1/+KnhUDz2Qh4AAAAASUVORK5CYII=&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Widmo-modelu-AR:-teoria&amp;quot;&amp;gt;Widmo modelu AR: teoria&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Widmo-modelu-AR:-teoria&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;h3 id=&amp;quot;Przypomnienie-teorii-z-wyk&amp;amp;#322;adu:-transformata-Z&amp;quot;&amp;gt;Przypomnienie teorii z wyk&amp;amp;#322;adu: transformata Z&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Przypomnienie-teorii-z-wyk&amp;amp;#322;adu:-transformata-Z&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;Transformata Z jest zdefiniowana tak:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;gdzie $z=Ae^{i \phi }$ jest liczbą zespoloną.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Zauważmy, że dyskretna transformata Fouriera jest szczególnym przypadkiem tej transformaty - wystarczy podstawić:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$A=1/N$ i &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;$\phi = - 2 \pi k/ N $ &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;W&amp;amp;#322;asno&amp;amp;#347;ci-transformaty-Z&amp;quot;&amp;gt;W&amp;amp;#322;asno&amp;amp;#347;ci transformaty Z&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#W&amp;amp;#322;asno&amp;amp;#347;ci-transformaty-Z&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;Transformata ta jest liniowa tzn.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;jak ją policzyć od sygnału przesuniętego w czasie to:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;dla impulsu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\mathrm{Z}\lbrace \delta [n]\rbrace =1$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;więc&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} $&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Stosując tą transfomatę do procesu AR dostajemy:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$=A(z)X(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;Wyznaczenie-widma-modelu-AR&amp;quot;&amp;gt;Wyznaczenie widma modelu AR&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Wyznaczenie-widma-modelu-AR&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$\sum _{i=0}^p a_i x_{t-i} =\epsilon _t$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;biorąc transformaty $Z$ obu stron mamy równanie algebraiczne:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$A(z)X(z) =E(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$X(z)=A^{-1}(z) E(z)=H(z) E(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Stąd widmo:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$S(z) = X(z)X^*(z)=H(z)VH^*(z)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Podstawiając $z= e^{- 2 i \pi \frac{f}{Fs}  }$ możemy uzyskać widmo modelu jako funkcję częstości $f$ ($Fs$-częstość próbkowania).&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;$S(f) = X(f)X^*(f)=H(f)VH^*(f)$&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Oblicznie-widma-modelu:-praktyka&amp;quot;&amp;gt;Oblicznie widma modelu: praktyka&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Oblicznie-widma-modelu:-praktyka&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Najpierw rozważmy konkretny przykład.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Niech model będzie rzędu $p=2$ i ma współczynniki $a_1 = 0.9, a_2 = -0.6$ i $\sigma_{\varepsilon} = 2$. Wyliczamy wartości funkcji $A(z) = a_1 z^{-1}+a_2 z^{-2}$ dla $z = e^{i 2 \pi* \frac{f}{Fs}}$:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[13]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.9&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.6&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma_eps&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;arange&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;z&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;exp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;pi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# dla zadanego modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;z&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;z&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;);&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Następnie obliczamy odwrotność $A$:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[14]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;H&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;1.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;i obliczamy widmo:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[15]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;H&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;H&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;conj&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma_eps&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Możemy je wykreślić w funkcji częstości $\omega$.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[16]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgUAAAFkCAYAAACw3EhvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzt3Xl4VOXd//H3l30PiMoiqCwuWASSIIuAIFIU61JtXVIt&lt;br /&gt;
tVatj3WjtdpWW7c+fVr6c2lVWrWLWjXWVhSxAioqCVJBE0CRxSKggorgEnYIcP/+uCclCWGZzJm5&lt;br /&gt;
Z/m8rutcQ86czPl65CKf3Ks55xARERFpELoAERERSQ8KBSIiIgIoFIiIiEiMQoGIiIgACgUiIiIS&lt;br /&gt;
o1AgIiIigEKBiIiIxCgUiIiICKBQICIiIjEKBSIiIgIkGArM7CdmttPM7qx1/jYz+8jMNpnZi2bW&lt;br /&gt;
M7EyRUREJNnqHQrM7DjgMmB+rfM3AFfG3hsAbASmmVmTBOoUERGRJKtXKDCzVsCjwCXAl7Xevga4&lt;br /&gt;
3Tn3nHNuATAW6Ax8PZFCRUREJLnq21JwHzDZOfdy9ZNm1g3oCEyvOuecWwfMBgbXt0gRERFJvkbx&lt;br /&gt;
foOZnQ/0A/rX8XZHwAGra51fHXuvrs9rD5wMrAC2xFuPiIhIDmsGHA5Mc859luiHxRUKzKwLcDcw&lt;br /&gt;
yjlXmejNY04GHovos0RERHLRBcDjiX5IvC0FhcBBQLmZWexcQ+AEM7sSOBowoAM1Wws6AHP38Jkr&lt;br /&gt;
AB599FF69eoVZzlSX+PGjeOuu+4KXUZO0TNPPT3z1NMzT61FixZx4YUXQuxnaaLiDQUvAcfWOvcQ&lt;br /&gt;
sAj4tXNumZl9ApwEvAVgZm2AgfhxCHXZAtCrVy8KCgriLEfqKy8vT887xfTMU0/PPPX0zIOJpPs9&lt;br /&gt;
rlDgnNsILKx+zsw2Ap855xbFTt0N3GRmS/HJ5XZgJTAp4WpFREQkaeIeaFgHV+ML58abWQvgfqAt&lt;br /&gt;
UAqMcc5ti+BeIiIikiQJhwLn3Mg6zt0C3JLoZ4uIiEjqaO+DHFVUVBS6hJyjZ556euapp2ee2cw5&lt;br /&gt;
t++rklmAWQFQVlZWpsEpIiIicSgvL6ewsBCg0DlXnujnqaVAREREAIUCERERiVEoEBEREUChQERE&lt;br /&gt;
RGIUCkRERARQKBAREZEYhQIREREBFApEREQkRqFAREREgGg2RBJJmk8+gfvvh3fegZ494dJLoVu3&lt;br /&gt;
0FWJiGQntRRI2nrlFejdG/7f/4PPPoMHHoBjj4VnngldmYhIdlIokLQ0Zw6cdhrk58Py5TB9un8d&lt;br /&gt;
MwbOPdcHBhERiZZCgaSddevgvPN8q8CkSXDggf5869bw+OMwbBhceCF8/nnYOkVEso1CgaSdn/0M&lt;br /&gt;
1q6F4mJo0aLme40bwyOPwMaN8POfh6lPRCRbKRRIWnnnHfjDH+CWW/Y8oPCQQ+Cmm/wAxMWLU1qe&lt;br /&gt;
iEhWUyiQtPKrX0HXrnDVVXu/7qqroGNH+PWvU1OXiEguUCiQtLF8Ofz97/CjH0GTJnu/tmlTf91j&lt;br /&gt;
j8GHH6amPhGRbKdQIGnjjjugbVu4+OL9u/7SS6F5c3jwweTWJSKSKxQKJC2sXQt/+YvvFmjZcv++&lt;br /&gt;
p1Ur+Pa34U9/gsrK5NYnIpILFAokLTz2GGzfDldcEd/3XXopfPwxvPRScuoSEcklCgWSFh56yC9W&lt;br /&gt;
dNBB8X1f375w1FF+LIKIiCRGoUCCmz8f5s2Diy6K/3vN/EJHzzwDW7dGXpqISE5RKJDgHn7YtxCM&lt;br /&gt;
GVO/7z/3XKiogGnToq1LRCTXKBRIUJWV8Oijftnixo3r9xlf+Yo/1IUgIpIYhQIJqqQE1qyBCy5I&lt;br /&gt;
7HPOOw+efRa2bImmLhGRXKRQIEFNnAiHHQYFBYl9zplnwoYNMHNmNHWJiOSiuEKBmV1uZvPNrCJ2&lt;br /&gt;
zDKzU6q9/1cz21nreD76siUb7NwJTz8NZ5/tBwwm4thjoVMnmDo1mtpERHJRvC0FHwI3AAVAIfAy&lt;br /&gt;
MMnMelW7ZgrQAegYO4oiqFOy0OzZfo2Bs89O/LPM4JRTFApERBIRVyhwzv3LOTfVOfeec26pc+4m&lt;br /&gt;
YAMwqNplW51za5xzn8aOikgrlqwxcSJ06ACDB0fzeWPG+F0WtReCiEj91HtMgZk1MLPzgRbArGpv&lt;br /&gt;
jTCz1Wa22MwmmNkBCVcpWcc533Vw5pnQsGE0nzlqFDRooNYCEZH6ijsUmFlvM1sPbAUmAGc555bE&lt;br /&gt;
3p4CjAVGAtcDw4HnzRLtMZZss3QpvPcenH56dJ/Zrh0MGqRQICJSX43q8T2Lgb5AHvBN4BEzO8E5&lt;br /&gt;
t9g592S1694xs7eB94ARwCt7+9Bx48aRl5dX41xRURFFRRqSkI2mTvXbI48YEe3nnnwy3Hkn7NgR&lt;br /&gt;
XQuEiEg6KC4upri4uMa5iopoe+jNOZfYB5i9CCx1zv3PHt7/FLjROVfnBrdmVgCUlZWVUZDovDTJ&lt;br /&gt;
GKedBps3w/Tp0X5uSQkMHw7l5ZCfH+1ni4ikm/LycgoLCwEKnXPliX5eFOsUNACa1vWGmXUB2gMf&lt;br /&gt;
R3AfyRJbtsArr/jZAlEbMACaNoVXX43+s0VEsl286xT8ysyGmdlhsbEF/4cfN/CombU0s/FmNjD2&lt;br /&gt;
/knAM8C7gFall/+aORM2bUpOKGjWzM9mmDEj+s8WEcl28bYUHAw8jB9X8BJ+rYLRzrmXgR1AH2AS&lt;br /&gt;
sAR4EHgDOME5VxlZxZLxpk6Fzp2hd+/kfP7w4VBa6hdHEhGR/RfXQEPn3CV7eW8LkITf/STbTJ3q&lt;br /&gt;
BwQma07K8OFw662wYAH06ZOce4iIZCPtfSAptXKlX2AoGV0HVQYN8jMb1IUgIhIfhQJJqWnT/AJD&lt;br /&gt;
o0Yl7x7Nm/sBhwoFIiLxUSiQlJo2zf/APiDJ61wOHQqzZvmVE0VEZP8oFEjKOOd/ex85Mvn3GjzY&lt;br /&gt;
b7b0wQfJv5eISLZQKJCU+c9/4NNP4YQTkn+vQbEtuv797+TfS0QkWygUSMqUlPjxBFHtirg3Bx8M&lt;br /&gt;
PXooFIiIxEOhQFKmpMQvPdymTWruN3iwH1cgIiL7R6FAUqa0FIYNS939Bg+GefP8HgsiIrJvCgWS&lt;br /&gt;
Eh9+CCtWpGY8QZXBg2H7dnjzzdTdU0QkkykUSEqUlvrXoUNTd89jj4WWLTWuQERkfykUSEqUlECv&lt;br /&gt;
XnDQQam7Z6NG0L8/zJ6dunuKiGQyhQJJiVSPJ6hy3HHqPhAR2V8KBZJ0a9fCwoWpHU9QpX9/v4DR&lt;br /&gt;
p5+m/t4iIplGoUCSbuZM/xqqpQCgrCz19xYRyTQKBZJ0JSVw2GFw6KGpv3e3btCuHbzxRurvLSKS&lt;br /&gt;
aRQKJOlKSsJ0HQCY+S4EjSsQEdk3hQJJqvXrYe7cMF0HVTTYUERk/ygUSFLNmgU7d4ZrKQDfUvDx&lt;br /&gt;
x7BqVbgaREQygUKBJFVpqd+c6Mgjw9XQv79/VWuBiMjeKRRIUpWU+K4Ds3A1dOkCHTooFIiI7ItC&lt;br /&gt;
gSTNli0wZ07Y8QSwa7ChZiCIiOydQoEkzRtvwNatYccTVKmageBc6EpERNKXQoEkTUkJtGkDffqE&lt;br /&gt;
rsTPQPjsM3j//dCViIikL4UCSZrSUhgyBBo2DF3JrsGG6kIQEdkzhQJJiu3b4bXXwo8nqNKhA3Tu&lt;br /&gt;
7NdMEBGRuikUSFLMnw8bNqTHeIIq+fkKBSIie6NQIElRUgLNmu1qtk8HCgUiInsXVygws8vNbL6Z&lt;br /&gt;
VcSOWWZ2Sq1rbjOzj8xsk5m9aGY9oy1ZMkFpKQwcCE2bhq5kl/x8WL3ar24oIiK7i7el4EPgBqAA&lt;br /&gt;
KAReBiaZWS8AM7sBuBK4DBgAbASmmVmTyCqWtOecDwXp1HUA0K+ff503L2wdIiLpKq5Q4Jz7l3Nu&lt;br /&gt;
qnPuPefcUufcTcAGYFDskmuA251zzznnFgBjgc7A1yOtWtLa4sWwdm36DDKs0q0b5OWpC0FEZE/q&lt;br /&gt;
PabAzBqY2flAC2CWmXUDOgLTq65xzq0DZgODEy1UMkdJiZ+GODjN/q+b+dYChQIRkbrFHQrMrLeZ&lt;br /&gt;
rQe2AhOAs5xzS/CBwAGra33L6th7kiNKSqCgAFq1Cl3J7jTYUERkz+rTUrAY6IsfM/AH4BEzOzrS&lt;br /&gt;
qiRjOedDQbqNJ6iSnw/vvQcVFaErERFJP43i/Qbn3HZgWezLuWY2AD+WYDxgQAdqthZ0APb5u9m4&lt;br /&gt;
cePIy8urca6oqIiioqJ4S5SA3n8fVq5Mv/EEVfLz/etbb6VvjSIidSkuLqa4uLjGuYqIf8OJOxTU&lt;br /&gt;
oQHQ1Dm33Mw+AU4C3gIwszbAQOC+fX3IXXfdRUFBQQTlSEilpf516NCwdezJ0Uf7aZJz5yoUiEhm&lt;br /&gt;
qesX5fLycgoLCyO7R1yhwMx+BUwBPgBaAxcAw4HRsUvuBm4ys6XACuB2YCUwKaJ6Jc2VlMBXvgLt&lt;br /&gt;
24eupG6NG0Pv3hpXICJSl3hbCg4GHgY6ARX4FoHRzrmXAZxz482sBXA/0BYoBcY457ZFV7Kks9JS&lt;br /&gt;
GDkydBV7l5+vjZFEROoS7zoFlzjnujvnmjvnOjrn/hsIql1zi3Ous3OuhXPuZOfc0mhLlnS1ejUs&lt;br /&gt;
WZL+zfL5+fDOO7B1a+hKRETSi/Y+kMjMnOlfMyEUbN8OCxeGrkREJL0oFEhkSkqge3fo0iV0JXvX&lt;br /&gt;
p49fyEjjCkREalIokMiUlKR/KwFAy5Zw5JEKBSIitSkUSCQqKmD+/PRdtKg2rWwoIrI7hQKJxGuv&lt;br /&gt;
+dUMM6GlAHwomD8fdu4MXYmISPpQKJBIlJZCx47Qs2foSvZPfj5s2ABLNTdGROS/FAokElXjCcxC&lt;br /&gt;
V7J/+vXzr/Pnh61DRCSdKBRIwjZv9osBZcp4AoCDDoJDDtG4AhGR6hQKJGGzZ0NlZeaMJ6jSrx/M&lt;br /&gt;
mxe6ChGR9KFQIAkrLYW2bf2eAplEoUBEpCaFAklYSQkMGQING4auJD75+fDxx355ZhERUSiQBFVW&lt;br /&gt;
wqxZmTWeoErVYEO1FoiIeAoFkpC5c2HTpswMBd26QevWCgUiIlUUCiQhJSXQvDkUFISuJH4NGmhc&lt;br /&gt;
gYhIdQoFkpDSUhg8GJo0CV1J/fTrp2mJIiJVFAqk3nbu9KEg06YiVtevH7z7LmzcGLoSEZHwFAqk&lt;br /&gt;
3t5+G774AoYPD11J/eXn+z0b3n47dCUiIuEpFEi9zZjhuw0GDQpdSf0dcww0aqQuBBERUCiQBMyY&lt;br /&gt;
AQMG+IGGmappUx8MNNhQREShQOrJOT/zIJO7Dqrk5ysUiIiAQoHU06JFsHZtdoSCfv3grbdg+/bQ&lt;br /&gt;
lYiIhKVQIPUyY4bviz/++NCVJK5fP9iyxc9CEBHJZQoFUi8zZkD//tCyZehKEte3r39VF4KI5DqF&lt;br /&gt;
Aombcz4UZEPXAUC7dnD44ZqBICKiUCBx+89/4JNPsicUgJY7FhEBhQKphxkz/L4BQ4aEriQ6VaHA&lt;br /&gt;
udCViIiEo1AgcZsxw0/ja9MmdCXRyc/3sylWrQpdiYhIOAoFEpdsG09QpV8//6ouBBHJZXGFAjP7&lt;br /&gt;
qZnNMbN1ZrbazJ42syNrXfNXM9tZ63g+2rIllOXLYeXK7AsFXbv6AYcKBSKSy+JtKRgG3AMMBEYB&lt;br /&gt;
jYEXzKz2QrdTgA5Ax9hRlGCdkiZKSsAss3dGrIuZ70LQDAQRyWWN4rnYOXdq9a/N7CLgU6AQmFnt&lt;br /&gt;
ra3OuTUJVydp55VX/Lz+du1CVxK9fv3gmWdCVyEiEk6iYwraAg74vNb5EbHuhcVmNsHMDkjwPpIG&lt;br /&gt;
nIPp0+Gkk0JXkhz9+sGyZVBREboSEZEw6h0KzMyAu4GZzrmF1d6aAowFRgLXA8OB52PXSwZ7910/&lt;br /&gt;
Oj9bQ0F+vn+dPz9sHSIiocTVfVDLBOAYoMZsdefck9W+fMfM3gbeA0YAryRwPwls+nS/30G2jSeo&lt;br /&gt;
ctRRfivlefPghBNCVyMiknr1CgVmdi9wKjDMOffx3q51zi03s7VAT/YSCsaNG0deXl6Nc0VFRRQV&lt;br /&gt;
aYxiupg+HQYNglatQleSHI0bQ+/emoEgIumpuLiY4uLiGucqIu7vjDsUxALBmcBw59wH+3F9F6A9&lt;br /&gt;
sNfwcNddd1FQUBBvOZIiO3b4QYZXXRW6kuTq1w/KykJXISKyu7p+US4vL6ewsDCye8S7TsEE4ALg&lt;br /&gt;
W8BGM+sQO5rF3m9pZuPNbKCZHWZmJwHPAO8C0yKrWlJu3jz44ovsHU9QJT8f3nkHtm0LXYmISOrF&lt;br /&gt;
O9DwcqAN8CrwUbXj3Nj7O4A+wCRgCfAg8AZwgnOuMoJ6JZDp06FFC999kM369YPKSli0KHQlIiKp&lt;br /&gt;
F+86BXsNEc65LcApCVUkaWn6dD/AsEmT0JUkV58+fiGjefP8egwiIrlEex/IPm3bBqWl2d91ANC6&lt;br /&gt;
NfTsqZUNRSQ3KRTIPr3+OmzenBuhAHZtoywikmsUCmSfpk+HAw7YtZNgtqsKBc6FrkREJLUUCmSf&lt;br /&gt;
pk+HE0+EBjnytyU/3y91vGJF6EpERFIrR/6Zl/rasAFmz86drgPY1SKiLgQRyTUKBbJXM2bA9u25&lt;br /&gt;
FQo6doSDD9ZgQxHJPQoFsldTp8Lhh8MRR4SuJHXMoLBQKxuKSO5RKJC9mjYNTjnF/6DMJVWhQIMN&lt;br /&gt;
RSSXKBTIHr33HvznPz4U5Jr+/WH1ar9VtIhIrlAokD2aNs1vlXziiaErSb3+/f3rm2+GrUNEJJUU&lt;br /&gt;
CmSPpk2DIUOgTZvQlaRe585+wKFCgYjkEoUCqdO2bX59gpNPDl1JGBpsKCK5SKFA6vTaa7BxY26O&lt;br /&gt;
J6jSv79vKdBgQxHJFQoFUqdp06BDh9zeKbB/f1i7Fj74IHQlIiKpoVAgdZo6FUaPzp2ljetSWOhf&lt;br /&gt;
1YUgIrkih//Jlz1ZtQrmz8/trgOATp38gEMNNhSRXKFQILv517+gYUOFAtg1rkBEJBcoFMhuJk/2&lt;br /&gt;
UxEPOCB0JeFpsKGI5BKFAqlh0yZ46SU47bTQlaSHwkL44gttoywiuUGhQGp4+WXYsgVOPz10Jemh&lt;br /&gt;
arChuhBEJBcoFEgNzz0HPXrAUUeFriQ9dOgAXbsqFIhIblAokP9yzoeC00/PvV0R90aDDUUkVygU&lt;br /&gt;
yH/Nm+enI2o8QU3aRllEcoVCgfzX5Ml+86Nhw0JXkl7694eKCr+VtIhINlMokP+aPNlvgNSkSehK&lt;br /&gt;
0kvVNspz5oStQ0Qk2RQKBPDr+7/5Jnz966ErST/t20PPnjB7duhKRESSS6FAAHj6ad9CoPEEdRs4&lt;br /&gt;
UKFARLKfQoEAMHEijBrlxxTI7gYNgrlzYevW0JWIiCRPXKHAzH5qZnPMbJ2ZrTazp83syDquu83M&lt;br /&gt;
PjKzTWb2opn1jK5kidrq1VBaCmefHbqS9DVwIGzb5mdoiIhkq3hbCoYB9wADgVFAY+AFM2tedYGZ&lt;br /&gt;
3QBcCVwGDAA2AtPMTMPX0tSzz/p1Cc48M3Ql6atvX2jaVF0IIpLd4goFzrlTnXN/c84tcs69DVwE&lt;br /&gt;
HAoUVrvsGuB259xzzrkFwFigM6AhbGlq4kQYPhwOPDB0JemrSRMoKIDXXw9diYhI8iQ6pqAt4IDP&lt;br /&gt;
AcysG9ARmF51gXNuHTAbGJzgvSQJvvwSpk9X18H+0GBDEcl29Q4FZmbA3cBM59zC2OmO+JCwutbl&lt;br /&gt;
q2PvSZp57jmorISzzgpdSfobNAiWLYM1a0JXIiKSHI0S+N4JwDHAkCgKGTduHHl5eTXOFRUVUVRU&lt;br /&gt;
FMXHyx7885/+h90hh4SuJP0NHOhfZ8/W1E0RSb3i4mKKi4trnKuoqIj0HvUKBWZ2L3AqMMw593G1&lt;br /&gt;
tz4BDOhAzdaCDsDcvX3mXXfdRUFBQX3KkXr68kuYMgXGjw9dSWY47DC/a6JCgYiEUNcvyuXl5RQW&lt;br /&gt;
Fu7hO+IXd/dBLBCcCZzonPug+nvOueX4YHBStevb4GcrzEqsVInaxIm+6+Ccc0JXkhnMfGuBBhuK&lt;br /&gt;
SLaKd52CCcAFwLeAjWbWIXY0q3bZ3cBNZna6mR0LPAKsBCZFVbRE44knYMQI6Nw5dCWZY+BAvwfC&lt;br /&gt;
zp2hKxERiV68LQWXA22AV4GPqh3nVl3gnBuPX8vgfvysg+bAGOfctgjqlYisXu1nHWjIRnwGD4Z1&lt;br /&gt;
62Dhwn1fKyKSaeIaU+Cc268Q4Zy7BbilHvVIivzjH9CggaYixmvAAGjUCF57DXr3Dl2NiEi0tPdB&lt;br /&gt;
jnriCb9Ncvv2oSvJLC1bQn4+zJwZuhIRkegpFOSgDz7wv+mq66B+hgzxz09EJNsoFOSgxx+H5s3h&lt;br /&gt;
jDNCV5KZhg6F5cvho49CVyIiEi2FghzjHDz8sB9L0Lp16Goy05DYcl1qLRCRbKNQkGPmzIHFi+Gi&lt;br /&gt;
i0JXkrk6doQePTSuQESyj0JBjnnoIejaFU48MXQlmW3IEIUCEck+CgU5ZMsWKC6Gb38bGjYMXU1m&lt;br /&gt;
GzIE5s2D9etDVyIiEh2FghwyaRJUVMB3vhO6ksw3dKhf1VBbKYtINlEoyCEPPQTHHw9HHhm6ksx3&lt;br /&gt;
9NHQrp0GG4pIdlEoyBGrVsELL2iAYVQaNNC4AhHJPgoFOeLPf4ZmzeDcc/d9reyfYcNg1iy/06SI&lt;br /&gt;
SDZQKMgB27fDgw/Ct74FeXmhq8keI0bApk3w5puhKxERiYZCQQ6YMgVWroTLLw9dSXYpKPALQL3y&lt;br /&gt;
SuhKRESioVCQA/74R+jfHwoLQ1eSXRo18l0Ir74auhIRkWgoFGS5FSt8S4FaCZJjxAg/A2HbttCV&lt;br /&gt;
iIgkTqEgyz34oG/iPv/80JVkpxNP9OMK3ngjdCUiIolTKMhiW7f6WQdjx0LLlqGryU79+kGbNupC&lt;br /&gt;
EJHsoFCQxf7+d1i9Gn7wg9CVZK9GjeCEExQKRCQ7KBRkKefgrrtgzBi/+p4kT9W4gq1bQ1ciIpIY&lt;br /&gt;
hYIsVVLiN+wZNy50JdnvxBNh82aNKxCRzKdQkKXuugu+8hUYNSp0Jdmvb19o21brFYhI5lMoyEJL&lt;br /&gt;
l8Kzz8K114JZ6GqyX8OGMHw4TJ8euhIRkcQoFGSh3/8e2reHCy4IXUnuGD3a74Owfn3oSkRE6k+h&lt;br /&gt;
IMusWeOnIV5xBTRvHrqa3DF6tN8YacaM0JWIiNSfQkGW+d3vfJfB1VeHriS39OgB3br57alFRDKV&lt;br /&gt;
QkEWqaiAe+/1Sxq3bx+6mtxi5lsLFApEJJMpFGSRCRP81Lgf/jB0Jblp9GhYsgTefz90JSIi9aNQ&lt;br /&gt;
kCU2bfLTEC++GDp3Dl1Nbho5Eho0gBdfDF2JiEj9xB0KzGyYmT1rZqvMbKeZnVHr/b/Gzlc/no+u&lt;br /&gt;
ZKnLgw/C55/D9deHriR3tW0LAweqC0FEMld9WgpaAvOAKwC3h2umAB2AjrGjqF7VyX7ZuBF+9Sv4&lt;br /&gt;
9rf9YDcJZ/RoeOkl2LEjdCUiIvGLOxQ456Y6537hnJsE7GlpnK3OuTXOuU9jR0ViZcre3HMPfPEF&lt;br /&gt;
3Hxz6Epk9Gj//+LNN0NXIiISv2SNKRhhZqvNbLGZTTCzA5J0n5z35ZcwfjxceikcfnjoamTAAMjL&lt;br /&gt;
gylTQlciIhK/ZISCKcBYYCRwPTAceN5MC+4mw513wpYtcNNNoSsR8Fspn3IKPPdc6EpEROLXKOoP&lt;br /&gt;
dM49We3Ld8zsbeA9YASwxy1jxo0bR15eXo1zRUVFFBVpOMKerFnjZxxceSV06hS6Gqly2ml+fMdH&lt;br /&gt;
H2kmiIhEp7i4mOLi4hrnKiqi7Z035/Y0VnA/vtlsJ/B159yz+7juU+BG59yDdbxXAJSVlZVRUFBQ&lt;br /&gt;
71py0VVXwSOPwLJlWqwonXz2GRx8MPzxj75bR0QkWcrLyyksLAQodM6VJ/p5SV+nwMy6AO2Bj5N9&lt;br /&gt;
r1yyaBH84Q++20CBIL20bw/HH68uBBHJPPVZp6ClmfU1s36xU91jX3eNvTfezAaa2WFmdhLwDPAu&lt;br /&gt;
MC3KwnPdddfBoYdqj4N0dfrpfhGjzZtDVyIisv/q01LQH5gLlOHXKbgDKAduBXYAfYBJwBLgQeAN&lt;br /&gt;
4ATnXGUUBYtfHOf55/2sg6ZNQ1cjdTntNB8IXtnjKBoRkfQT90BD59wM9h4mTql/ObIv27f7vQ2G&lt;br /&gt;
DYNvfCN0NbInvXpB9+4weTKcemroakRE9o/2Psgw994LCxf6WQea5Jm+zHxrwXPPQQJjeUVEUkqh&lt;br /&gt;
IIOsWgU//zlccQX4waaSzk4/HVauhHnzQlciIrJ/FAoyyLXXQsuW8Mtfhq5E9sfw4dCuHTz1VOhK&lt;br /&gt;
RET2j0JBhpgyBf75T99t0LZt6GpkfzRuDGee6f+/qQtBRDKBQkEG2LABfvADGDUKzj8/dDUSj29+&lt;br /&gt;
E5Ys8eNARETSnUJBBvjJT2D1ar9CngYXZpZRo6BNG99aICKS7hQK0tzLL8N998FvfgM9eoSuRuLV&lt;br /&gt;
tCmccYZCgYhkBoWCNLZ+PXzvezBihJ9xIJnpm9+EBQtg8eLQlYiI7J1CQRq77jq/E+Kf/wwN9H8q&lt;br /&gt;
Y40eDa1aaRaCiKQ//ahJU089BQ88AHfe6VfGk8zVvLlfyEhdCCKS7hQK0tD778Mll/hmZ229mx3O&lt;br /&gt;
OccvYqQuBBFJZwoFaWb7drjgAsjLgwcf1GyDbHHqqX59icceC12JiMieKRSkmZ//HF5/HYqLtUhR&lt;br /&gt;
NmnWzLcWPPoo7NwZuhoRkbopFKSRf/4Tfv1rfwweHLoaidqFF8KKFTBrVuhKRETqplCQJt55By66&lt;br /&gt;
CM47D370o9DVSDIMHQqHHupbC0RE0pFCQRr48ks46yzo1s1PP9Q4guzUoIEfL/Lkk7B1a+hqRER2&lt;br /&gt;
p1AQ2LZt8I1vwNq18PTTfhdEyV4XXghffAHPPx+6EhGR3SkUBOQcfP/7UFrqA0HPnqErkmQ75hgo&lt;br /&gt;
KIC//S10JSIiu1MoCOh//xceegj++lcYPjx0NZIq3/kOTJ7sN7kSEUknCgWBPPCAn354222+n1ly&lt;br /&gt;
x4UXQsOGPhCKiKQThYIAiovh8svhyivhpptCVyOpdsABfs2CP/3JdyGJiKQLhYIUe+45GDvWH7/7&lt;br /&gt;
nWYa5KpLL4WlS+HVV0NXIiKyi0JBCk2e7GcanHGG/y1ROx/mrmHD4KijfDeSiEi60I+lFJk4Ec4+&lt;br /&gt;
G04/3XcfNGoUuiIJycy3Fkyc6KejioikA4WCFHj8cTj3XL/r4RNPQJMmoSuSdPCd7/jXhx8OW4eI&lt;br /&gt;
SBWFgiRyDn77Wz+74MIL/dx0tRBIlQMP9EFxwgTYsSN0NSIiCgVJs2MHXH01XH89/Oxnfi0CBQKp&lt;br /&gt;
7ZprYNkyPwBVRCQ0hYIk2LRp12+A99/vFynSLAOpy4ABfkfMu+8OXYmISD1CgZkNM7NnzWyVme00&lt;br /&gt;
szPquOY2M/vIzDaZ2YtmljML+C5bBscfDy+8AJMmwWWXha5I0t211/qpifPnh65ERHJdfVoKWgLz&lt;br /&gt;
gCuA3ZYhLWl7AAASnElEQVReMbMbgCuBy4ABwEZgmpll/fC655+HwkLYsAH+/W847bTQFUkmOOss&lt;br /&gt;
6NLFr1shIhJS3KHAOTfVOfcL59wkoK5G8WuA251zzznnFgBjgc7A1xMrNX3t2AG33upDwNCh8Oab&lt;br /&gt;
0KdP6KokUzRu7Fe3fOwx+PTT0NWISC6LdEyBmXUDOgLTq84559YBs4HBUd4rXSxfDiNG+FBw662+&lt;br /&gt;
y6Bt29BVSaa59FI/EPXee0NXIiK5LOqBhh3xXQq1939bHXsvazjnZxT06QMrV8KMGX6DI61SKPVx&lt;br /&gt;
wAF+/Mk998C6daGrEZFclTaT5MaNG0deXl6Nc0VFRRQVFQWqaM8+/NA39z77LFx0ke8LbtMmdFWS&lt;br /&gt;
6a67zs9YmTABfvKT0NWISLopLi6muLi4xrmKiopI72EugW3azGwn8HXn3LOxr7sB7wH9nHNvVbvu&lt;br /&gt;
VWCuc25cHZ9RAJSVlZVRUFBQ71pSYft2+P3v4Re/8CHg3nv90sUiUfn+9+Hpp2HFCmjRInQ1IpLu&lt;br /&gt;
ysvLKSwsBCh0zpUn+nmRNnY755YDnwAnVZ0zszbAQGBWlPdKtZkzoX9/+PGP4eKLYdEiBQKJ3g03&lt;br /&gt;
wOef+w2zRERSrT7rFLQ0s75m1i92qnvs666xr+8GbjKz083sWOARYCUwKZqSU2vRIjjzTL+rXZMm&lt;br /&gt;
MGeOby2o1dMhEonu3aGoyC+PvXVr6GpEJNfUp6WgPzAXKMMPKrwDKAduBXDOjQfuAe7HzzpoDoxx&lt;br /&gt;
zm2LouBUef99P/Crd294+22/qdHrr/t1CESS6Wc/g1Wr1FogIqlXn3UKZjjnGjjnGtY6Lq52zS3O&lt;br /&gt;
uc7OuRbOuZOdc0ujLTt5liyB734Xevb029reeadvLSgq0swCSY1evWDsWLj9dti4MXQ1IpJL9GMO&lt;br /&gt;
P72wpATOOcf/g/zCC7759v33/YY1TZuGrlByzS23+LEFWuVQRFIpp0PBunV++texx8Lw4b6b4I9/&lt;br /&gt;
9PsXXHsttGwZukLJVYcfDv/zPzB+vA8HIiKpkHOhoLLSb1NbVAQdO/rtjY86CqZP990El12mlgFJ&lt;br /&gt;
Dzfe6KfB/uY3oSsRkVyRE6Fg82aYPNkvJdu5M5x+um8VuPlmPx/8qadg5Ehtbyzp5eCD4Yc/9LNd&lt;br /&gt;
VqwIXY2I5IK0WdEwSjt3woIFfjva6dPhxRd9MDjiCD+I8IIL/PLECgGS7n78Yz8L4cc/hn/8I3Q1&lt;br /&gt;
IpLtsiIUfPYZzJsHc+fCa6/5QYOff+7XFRg0yA/aOuMMOPro0JWKxKd1a999MHasD7kjRoSuSESy&lt;br /&gt;
WcaEgspK+OADPwhw2TJ47z0/fXDuXL8XAfhlYY87Dq66yv/jOXAgNG8etGyRhF1wgR8Qe801UFbm&lt;br /&gt;
d1MUEUmGtPnn5c47/ZbD27b5ldwqKmDtWn+sWQNffOGnDgI0bAiHHebXEigqgvx8f/Ts6d8TySYN&lt;br /&gt;
GvhxBQMGwIMP+lkJIiLJkDahYOZMv3Rw06b+aNMGevTwv+0feCAcdJCfptW9O3TtCo0bh65YJHWO&lt;br /&gt;
O87vufGzn8FZZ/mZMyIiUUubUDBxIqT5JokiQY0f72fRXH01PPlk6GpEJBvlxJREkWzQvr3vRvjH&lt;br /&gt;
P2BSRm4vJiLpTqFAJIOcdx587WtwxRV+3I2ISJQUCkQyiJmfibBuHfzoR6GrEZFso1AgkmEOPdTP&lt;br /&gt;
1vnzn9WNICLRUigQyUCXXOIX5LrkEvjkk9DViEi2UCgQyUBmfvnjhg3he9/btYaHiEgiFApEMtRB&lt;br /&gt;
B8Ff/gLPP+9nJYiIJEqhQCSDnXqq30nxuutg1qzQ1YhIplMoEMlwv/613/jrnHPg009DVyMimUyh&lt;br /&gt;
QCTDNW4Mf/87bN/u9wLZvj10RSKSqRQKRLJA587wxBMwY4bvThARqQ+FApEsceKJcO+9cM89cN99&lt;br /&gt;
oasRkUyUNhsiiUjiLr8cFi+Ga67xW4mffHLoikQkk6ilQCTL3HGHDwPnnANlZaGrEZFMolAgkmUa&lt;br /&gt;
NvQDD3v1glNOgSVLQlckIplCoUAkC7Vq5Rc1OuggGD0aVq4MXZGIZAKFApEs1b49vPCC//PIkbBq&lt;br /&gt;
Vdh6RCT9RR4KzOxmM9tZ61gY9X1EZN+6dIGXX4YtW2DECLUYiMjeJaulYAHQAegYO4Ym6T4isg89&lt;br /&gt;
esCrr8K2bT4YfPhh6IpEJF0lKxRsd86tcc59Gjs+T9J9RGQ/dO/uFzbasQOOPx7eeSd0RSKSjpIV&lt;br /&gt;
Co4ws1Vm9p6ZPWpmXZN0HxHZT4cfDq+95scaDB0KpaWhKxKRdJOMUPA6cBFwMnA50A0oMbOWSbiX&lt;br /&gt;
iMShc2ffYlBQAF/9KkycGLoiEUknkYcC59w059xTzrkFzrkXgVOBdsC5Ud9LROKXl+enK551Fnzz&lt;br /&gt;
m36XRedCVyUi6SDpyxw75yrM7F2g596uGzduHHl5eTXOFRUVUVRUlMzyRHJS06bw2GN+KeSf/hTK&lt;br /&gt;
y+Evf/HrG4hIeiouLqa4uLjGuYqKikjvYS7JvyKYWSvgA+AXzrl763i/ACgrKyujoKAgqbWIyO4m&lt;br /&gt;
ToTvfMePOXjmGT9bQUQyQ3l5OYWFhQCFzrnyRD8vGesU/NbMTjCzw8zseOBpoBIo3se3ikgAZ58N&lt;br /&gt;
s2fD1q1QWOi3YBaR3JSMgYZdgMeBxcATwBpgkHPusyTcS0QicMwxMGcOjBkDRUW+5WDdutBViUiq&lt;br /&gt;
JWOgYZFzrotzrrlz7lDn3Lecc8ujvo+IRKttW3j8cXj4Yd+lkJ8Ps2aFrkpEUkl7H4jIf5nB2LEw&lt;br /&gt;
b57fTGnoULj6ali/PnRlIpIKCgUispsePfxCR3fcAX/+M/TuDVOmhK5KRJJNoUBE6tSwIYwbBwsW&lt;br /&gt;
wNFHw6mnwje+AcvVGSiStRQKRGSvunWDqVP9eIPZs6FXL7jxRtiwIXRlIhI1hQIR2SczPythyRK4&lt;br /&gt;
4Qa480444gi47z4/lVFEsoNCgYjst5Yt4dZbYfFiv3fC1VfDkUfCn/4ElZWhqxORRCkUiEjcDjsM&lt;br /&gt;
HnnEb8E8eDBceqnvVnjoIdi2LXR1IlJfCgUiUm9HH+1XQJw/H449Fr77XT8G4Te/gS+/DF2diMRL&lt;br /&gt;
oUBEEtanDzz9NCxcCF/7Gtx8M3TtCtdeC0uXhq5ORPaXQoGIRKZXL3jgAXj/fT+d8W9/8wMSR42C&lt;br /&gt;
J59U14JIulMoEJHIdegAt90GK1f6sQdbt8J550GXLnD99fDWW6ErFJG6KBSISNI0bw7f/jaUlvpF&lt;br /&gt;
kL71Lb9CYt++fgzC//2fFkMSSScKBSKSEl/5Ctx9N3z8MUye7EPBL38J3bvDkCH+vWXLQlcpktsU&lt;br /&gt;
CkQkpZo0gdNO8yskrl4Njz0G7dr5RZF69PBh4cYb/VbOO3eGrlYktygUiEgwrVr5LoXnnoO1a+Gf&lt;br /&gt;
/4SCAvjjH2HgQDjkEL9r49/+5lsYRCS5GoUuQEQEoHVrv+HSN74B27fDrFk+LLz4og8F4LsgvvpV&lt;br /&gt;
GDnSdzkccEDYmkWyjUKBiKSdRo3ghBP8AfDppzB9Orz0Ejz1lB9/AHDMMTB0qA8IQ4f6hZPMwtUt&lt;br /&gt;
kukUCkQk7R18sN+QqagInIMVK2DmTHjtNf/6wAP+uo4d4bjjoLBw19GpU9DSRTKKQoGIZBQz3yLQ&lt;br /&gt;
rZuf7gjw+efw73/7Loc334R77oHPPvPvdeq0KyD06we9e/vvbdgw3H+DSLpSKBCRjHfAAX555a99&lt;br /&gt;
zX/tHHzwgQ8IZWX+uPfeXUGheXO/+mLv3n6cQtVr167QQMOvJYcpFIhI1jHzOzkedpgfuAg+KHz8&lt;br /&gt;
sd/ZccGCXa8TJ8KGDf6apk39tMgjjtj96NxZgUGyn0KBiOQEM/+DvXNnP4OhinPw4Yc+JPznP7uO&lt;br /&gt;
iRP92IWqtRKaN4fDD98VNmofnTqpS0Iyn0KBiOQ0Mzj0UH+MGVPzvW3b/DLMVUFhxQq/2dPs2X6D&lt;br /&gt;
py++2HVto0a+++HQQ31A6NTJB5Dqr506QZs2miEh6UuhQERkD5o0gaOO8kdd1q/3IaH6sXKl76aY&lt;br /&gt;
O9e/rltX83tatNgVEDp1goMOggMP3PVa+89Nmyb/v1OkikKBiEg9tW7tByn27r3nazZu9OHgo4/8&lt;br /&gt;
a+0/v/uuX81xzZq6t5Zu3bpmSGjXDtq29Uf1P9f+Oi9P3RkSP4UCEZEkatkSevb0x9445wc8rlmz&lt;br /&gt;
KyTU9frhh/D22/Dll/6o3RJRXZs2uwJC69b+aNWq5mtd52q/tmwJzZppoGUuUCgQEUkDZrt+SHfv&lt;br /&gt;
vv/ft327DwZVIeGLL3b9ufrXGzb4Y/1630Kxfv2urzdsgC1b9n2vZs38gMvmzX03yL7+XNd7TZv6&lt;br /&gt;
o0mTvb/WPte4scZipIJCQY4qLi6mqKgodBk5Rc889XLhmTdq5NdpSHQfiMpK39VRPSxU/XnDBti8&lt;br /&gt;
edexaVPN16o/b9wICxcW06pV0W7Xbt5cd/dIPPYWJBo1qvto3HjP78VzXYMGNQ+z3c/tz7Gv7zPb&lt;br /&gt;
FX5q/7mu1yVLEnumtSUtFJjZD4DrgI7AfOAq59wbybqfxCcX/rFMN3rmqadnvv8aN941HiERZ5xR&lt;br /&gt;
zLPP1v3Md+yArVt9OIj6dccO32pSdVRW1vx68+aaX+/t2rred85PT619ZJukhAIzOw+4A7gMmAOM&lt;br /&gt;
A6aZ2ZHOubXJuKeIiKS3hg19F0KLFqEriU5dYWFPAWJ/j6rP3Z/XhQvh/POj++9JVkvBOOB+59wj&lt;br /&gt;
AGZ2OfA14GJgfJLuKSIiklJmPuyEmulRWRnt50U+ltTMGgOFwPSqc845B7wEDI76fiIiIhKNZLQU&lt;br /&gt;
HAg0BFbXOr8aqGsJkGYAixYtSkIpsicVFRWUl5eHLiOn6Jmnnp556umZp1a1n53Novg8c1UdExEx&lt;br /&gt;
s07AKmCwc252tfO/AU5wzg2udf23gMciLUJERCS3XOCcezzRD0lGS8FaYAfQodb5DsAndVw/DbgA&lt;br /&gt;
WAHsx0xZERERiWkGHI7/WZqwyFsKAMzsdWC2c+6a2NcGfAD83jn328hvKCIiIglL1uyDO4GHzKyM&lt;br /&gt;
XVMSWwAPJel+IiIikqCkhALn3JNmdiBwG77bYB5wsnNuTTLuJyIiIolLSveBiIiIZB7teSUiIiKA&lt;br /&gt;
QoGIiIjEBA8FZvYDM1tuZpvN7HUzOy50TdnCzIaZ2bNmtsrMdprZGXVcc5uZfWRmm8zsRTPbx67v&lt;br /&gt;
sidm9lMzm2Nm68xstZk9bWZH1nGdnnlEzOxyM5tvZhWxY5aZnVLrGj3vJDKzn8T+fbmz1nk994iY&lt;br /&gt;
2c2xZ1z9WFjrmkied9BQUG3jpJuBfPxuitNigxQlcS3xgzyvAHYbPGJmNwBX4jeuGgBsxD//Jqks&lt;br /&gt;
MosMA+4BBgKjgMbAC2bWvOoCPfPIfQjcABTgl1d/GZhkZr1AzzvZYr/EXYb/t7v6eT336C3AD9zv&lt;br /&gt;
GDuGVr0R6fN2zgU7gNeB31X72oCVwPUh68rGA9gJnFHr3EfAuGpftwE2A+eGrjcbDvyS3zuBoXrm&lt;br /&gt;
KX3unwHf1fNO+nNuBSwBRgKvAHdWe0/PPdpnfTNQvpf3I3vewVoKtHFSWGbWDZ82qz//dcBs9Pyj&lt;br /&gt;
0hbfQvM56Jknm5k1MLPz8WuizNLzTrr7gMnOuZern9RzT5ojYl3B75nZo2bWFaJ/3slavGh/xLtx&lt;br /&gt;
kkSrI/4HVl3Pv2Pqy8kusVU87wZmOueq+v70zJPAzHoD/8Yv97oeOMs5t8TMBqPnnRSx8NUP6F/H&lt;br /&gt;
2/p7Hr3XgYvwLTOdgFuAktjf/Uifd8hQIJLNJgDHAENCF5IDFgN9gTzgm8AjZnZC2JKyl5l1wQfe&lt;br /&gt;
Uc65ytD15ALnXPV9DRaY2RzgfeBc/N//yIQcaBjvxkkSrU/wYzj0/CNmZvcCpwIjnHMfV3tLzzwJ&lt;br /&gt;
nHPbnXPLnHNznXM34ge9XYOed7IUAgcB5WZWaWaVwHDgGjPbhv8NVc89iZxzFcC7QE8i/nseLBTE&lt;br /&gt;
EmYZcFLVuViT60nArFB15Qrn3HL8X5jqz78NfuS8nn89xQLBmcCJzrkPqr+nZ54yDYCmet5J8xJw&lt;br /&gt;
LL77oG/seBN4FOjrnFuGnntSmVkrfCD4KOq/56G7D7RxUhKZWUv8XxyLnepuZn2Bz51zH+KbAG8y&lt;br /&gt;
s6X4ratvx8/+mBSg3IxnZhOAIuAMYKOZVSX3Cudc1bbgeuYRMrNfAVPwu7C2xm/DPhwYHbtEzzti&lt;br /&gt;
zrmNQO058huBz5xzi2Kn9NwjZGa/BSbjuwwOAW4FKoEnYpdE9ryDhgKnjZOSrT9+qpCLHXfEzj8M&lt;br /&gt;
XOycG29mLYD78SPlS4ExzrltIYrNApfjn/Ortc5/F3gEQM88cgfj/z53AiqAt4DRVSPi9bxTpsY6&lt;br /&gt;
KHrukesCPA60B9YAM4FBzrnPINrnrQ2RREREBEiDZY5FREQkPSgUiIiICKBQICIiIjEKBSIiIgIo&lt;br /&gt;
FIiIiEiMQoGIiIgACgUiIiISo1AgIiIigEKBiIiIxCgUiIiICKBQICIiIjH/H2n0b2thw4WtAAAA&lt;br /&gt;
AElFTkSuQmCC&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[17]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nf&amp;quot;&amp;gt;widmoAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;parametry_a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_punktow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;linspace&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_punktow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;z&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;exp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;pi&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;ones&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_punktow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1j&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_punktow&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;parametry_a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)):&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;parametry_a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;z&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;H&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;1.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;A&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;H&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;H&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;conj&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# widmo&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#gęstość widmowa&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;Zadanie&amp;quot;&amp;gt;Zadanie&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Zadanie&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Proszę:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wygenerować realizację modelu AR $a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2$&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[18]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nf&amp;quot;&amp;gt;generujAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma_eps&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;zeros&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;rzad&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;rzad&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)):&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)]&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;+=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma_eps&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;random&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;randn&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Obliczyć widmo dla tego modelu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Obliczyć widmo dla wyestymowanego modelu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Wykreślić widma prawdziwego modelu i modeli estymowanych&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[19]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#wspolczynniki modelu AR &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;([&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.6&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.7&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.25&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;])&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# [Hz]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# obliczanie widma z modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;widmoAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#generujemy realizacje procesu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;600&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;generujAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# estymujemy wspolczynniki modelu metodą Yula-Walkera&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# obliczamy widmo dla estymowanego modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;for&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;ow&amp;quot;&amp;gt;in&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;range&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;7&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma_eps_est&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;parametryAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp_est&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;widmoAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sigma_eps_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;200&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp_est&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Sp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;xlabel&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;Częstość [Hz]&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;legend&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;p = 3&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;p = 4&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;p = 5&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;p = 6&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;prawdziwy&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;title&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;widmo z modelu&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhIAAAGHCAYAAADlfrvSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt8zuX/wPHXde+A2cxhM8NszDHnQ0USshxySmqhZUkl&lt;br /&gt;
RPTTQSqkgySVbw455EwUOlEOmRCKTSI2m3MOY2PYyQ739fvjc5ttdnZv98b7+Xjcj7qvfT7X533f&lt;br /&gt;
2P2+r891vS+ltUYIIYQQoiBMtg5ACCGEECWXJBJCCCGEKDBJJIQQQghRYJJICCGEEKLAJJEQQggh&lt;br /&gt;
RIFJIiGEEEKIApNEQgghhBAFJomEEEIIIQpMEgkhhBBCFJgkEkIUA0qprUqpoDwc114pZVZKPVQU&lt;br /&gt;
cd3JLO/5lgKee0Ip9bW1YxKiJJJEQojiQQPmfBwrbt/tvI/yZyCEhb2tAxBCAPCIrQMQQoiCkERC&lt;br /&gt;
iGJAa51i6xiEEKIg5NaGEFailGpsmb/QI11bC0vb3kzH/qKU2pXu+S3365VS1ZRS3yulYpVSkUqp&lt;br /&gt;
aUApQGU6bqtS6h/L9bcqpeKUUuFKqb6Wn7dXSu1WSsUrpUKVUp2yiL25JaYrSqlrSqnNSqn78/Ca&lt;br /&gt;
gyyvL6vHwBzO87Yc86pSaphS6qgl7g1KqWqWY95RSp22xP29Uqp8Fv0MU0odVEolKqXOKKW+VEq5&lt;br /&gt;
ZnHci0qpCEtfu5VSD2YTl6NSaqLl/UtUSp1SSn2slHLM5X2YoJS65daUUupZy+uskdP5QpRkMiIh&lt;br /&gt;
hPUcBGKAh4CfLW3tMOY+NFVKOWutY5VSCmgDzE53boZ77kqp0sAWoDrwBXAOeAZ4OPOxlucVgZ+A&lt;br /&gt;
b4BVwFBghVIqAPgcmAksA14HvlVKeWmt4yzXugfYBlwBJgMpwBBgq1LqIa31nhxe8/vA3ExtzwCd&lt;br /&gt;
gQs5nHdDAOAATLe8hjcs8W0B2lviqQ2MBKYCz984USk1AXgX2Gh5ffWAYUArpVRbrXWq5bjBGO/1&lt;br /&gt;
DuAzoBbwI3AJOJWuP4XxHj4AfAWEAo2B0UAd4PEcXocm63kT2bULcefQWstDHvKw0gPjg2hXuuff&lt;br /&gt;
Ad8CSUBnS1tzjOSiR7rjgoAt6Z6/AqQCj6drKw0csbQ/lOncVMA/XVtdyzWSgVbp2h+xtA9M17YW&lt;br /&gt;
SAC807VVwUgsgvL5+h8ArgNzcjnO2xLHecA5XfsHlvYQwJSufZklRgfLczcgEVifqd9hlvci0PLc&lt;br /&gt;
3nKNvYB9uuMGW66T/j0PsLxfbTL1+aKlz9bp2o4DX6d7Ph5IzeJ1BlrOrWHrv5vykEdhPeTWhhDW&lt;br /&gt;
tR1ooZQqY3n+ILAe2I8xOgE3Ryl25NBPN+Cc1nrNjQatdSIwJ5vjY7XWq9IdewRjdOSw1jr9bZU/&lt;br /&gt;
Lf+tBaCUMmEkF2u11ifTnX8eWA48qJRyziHONEqpKhiJUwgwPC/nAKu01rFZxLdEa23O1O4IVLM8&lt;br /&gt;
98MYyfg8U39zgWtAd8vzVkBlYLbOOA9lEUailN4TwGHgiFKq0o0HRqKmgI55fE1C3FXk1oYQ1rUd&lt;br /&gt;
4wOujVLqP8Dd0taIm4nEg8AhrXVMDv14AxFZtIdlc/x/WbRdAU6nb9BaXzVG8KlgaXIHnDBGOjI7&lt;br /&gt;
jDGPysvy/9lSStlh3FJRGKMoyTkdn87pTM9vfLhnfj032isAJzDeH8gUt9Y6WSl1LN3PvTFuLURk&lt;br /&gt;
Oi7Fclx6dYD6wMUs4tQYCYkQIhNJJISwrr0YQ+4PYXxIXtBaRyiltgNDLZP22gFrcuijIFLz2a6y&lt;br /&gt;
aS+oqcD9QCet9bl8nGfruNMzAQcw5kRkdZ3MSU962c2DsLvdoIQo7iSREMKKLN+I/8JIJE5hjEZg&lt;br /&gt;
+W8p4GnAA2NyY05OAg2zaK9vpVBvuAjEY0xUzKwBxi2YnD5AUUr1w5jTMVJrndPtGmu6cRumHsYI&lt;br /&gt;
xY1YHICawKZ0xymM0Yat6Y6ztxz3d7o+jwJNtNa5VhjNwmVLv+W01lfTtfsUoC8hShSZIyGE9W3H&lt;br /&gt;
+HbewfL/aK2jMVYBvIHx7XV7didbrAeq3ljCCaCUcgJesGaglnkIG4He6ZcoKqU8gP7A9kxzGDJQ&lt;br /&gt;
SjXCmJewWGv9pTVjy8VmjImRIzO1Pw+U4+aqmb0YydJLluThhkFA5uWkq4DqSqlb3mOlVGnL+5+d&lt;br /&gt;
oxgJS1rpcqVUWSDbJbBC3ClkREII69sOjMOYW5A+YdiGsazyuNb6bC59zAVeBpYopVpxc/lnnPXD&lt;br /&gt;
5W2MyYt/KKVmYtxWeBFjcuPruZy7ACMx2qGUejrTz3ZqrY9bMc602w1a6yil1EfAu0qpXzGWc9bH&lt;br /&gt;
WPb6F8YqjxtzId7GWP4ZpJRaiTESMQjjwz+9JYA/MEsp1RH4A+PWRAPgSYwlrSHZxLYRYwTqa6XU&lt;br /&gt;
JxgjOYMwlsB63ebrFqJYk0RCCOvbifFhHIuxWuOG7Rgf0Nnd1ki7z661TlBKPQz8DyOhiAeWAr9a&lt;br /&gt;
Htmem6kt13at9SGlVDvgI+BNjJHK3cCATCs+suIGlMWou5DZIIxlktnJKb7sjr/5ROuJSqkLGO/P&lt;br /&gt;
NIy6ELOBcdpSQ8Jy3FzL6pTXgCkY8yB6ApPI+D5opVRvjDkSA4HHMN73Yxj1J9JP7Mz8HqYopR7D&lt;br /&gt;
qGfxHsaS088wJonK5l7ijqa0llopQgghhCiYAs2RUEoNV0odV0olWMrN3pvDsX2UUhuVUhcs5Xd3&lt;br /&gt;
KqU6Z3Hck0qpw5Y+9yuluhUkNiGEEEIUnXwnEkqpp4BPMSq5NccYut2glHLL5pSHMO4fdgNaYBR3&lt;br /&gt;
+Ukp1TRdnw9gFL+ZCzQDfgC+t5TuFUIIIUQxle9bG0qp3cCfWutXLM8VxvKw6VrrKXns4yDwjdb6&lt;br /&gt;
fcvzbwAnrXWvdMfsAvZprYflK0AhhBBCFJl8jUhY1mi3BH670aaNTGQzxiZEeelDAS4YE6NuaGPp&lt;br /&gt;
I70Nee1TCCGEELaR31UbbhjLoSIztUeSdUGbrLyGMct7Vbq2Ktn0WSW7Tiw18LtgFKNJzOO1hRBC&lt;br /&gt;
CGFsAugDbLDUuSmwIl3+qZQaALwD9NJaR91md12wrBUXQgghRIE8jTFHscDym0hEYayP98jU7oGx&lt;br /&gt;
bjpbljK6c4AnsihBe74AfZ4AWLp0KQ0aNMg5amE1o0eP5rPPPrN1GHcVec+LnrznRU/e86J1+PBh&lt;br /&gt;
AgICIF2J+YLKVyJh2UcgGOiEUUnuxpyHTsD07M5TSvUH5gFPaa2zKqazK4s+HrG0ZycRoEGDBrRo&lt;br /&gt;
0SI/L0PcBldXV3m/i5i850VP3vOiJ++5zdz21ICC3NqYBiy0JBR/YVSBcwIWAljK1lbVWgdang+w&lt;br /&gt;
/GwksMdSwx8gId3mNl8AW5VSrwLrMGr8t8TK+woIIYQQwrryXUdCa70KGINRBnYf0AToorW+aDmk&lt;br /&gt;
Chlry7+AMUFzBnA23ePzdH3uAgZglA/+G3gc6K21PpTf+IQQQghRdAo02VJrPROjpnxWPxuU6XnH&lt;br /&gt;
PPa5GlhdkHiEEEIIYRuyjbjIl/79+9s6hLuOvOdFT97zoifveclVYjftUkq1AIKDg4Nlgo4QQgiR&lt;br /&gt;
DyEhIbRs2RKgpdY65Hb6km3EhRCiGDh16hRRUbdbXkcIg5ubGzVq1CiSa0kiIYQQNnbq1CkaNGhA&lt;br /&gt;
fHy8rUMRdwgnJycOHz5cJMmEJBJCCGFjUVFRxMfHS4E9YRU3ik1FRUVJIiGEEHcTKbAnSiJZtSGE&lt;br /&gt;
EEKIApNEQgghhBAFJomEEEIIIQpMEgkhhBBCFJgkEkIIIYQoMEkkhBBC3BW2b99O7969qVGjBmXK&lt;br /&gt;
lMHT05Nu3bqxc+dOW4dWosnyTyGEEHeFI0eOYGdnx9ChQ6lSpQqXL19m6dKlPPTQQ6xfv57OnTvb&lt;br /&gt;
OsQSSRIJIYQQd4XBgwczePDgDG1Dhw6lVq1afP7555JIFJDc2hBCCFFoJkyYgMlkIiwsDH9/f1xd&lt;br /&gt;
XXFzc2PUqFFcv37d1uFRpkwZ3N3diYmJsXUoJZaMSAghhCg0SikA/P39qVmzJpMnT2b37t1Mnz6d&lt;br /&gt;
mJgYFi5cmOP5CQkJedqDxM7OjvLly+cppmvXrpGUlERUVBSLFi3i33//Zdy4cXk6V9xKEgkhhChB&lt;br /&gt;
4uMhNLTwr1O/Pjg5Wa8/X19f1qxZAxi3E1xcXJg1axZjxoyhUaNG2Z43ZcoUJk6cmGv/Pj4+HDt2&lt;br /&gt;
LE+x+Pv7s2HDBgAcHR0ZMmQIb7/9dp7OFbeSREIIIUqQ0FBo2bLwrxMcDNba9kMpxfDhwzO0jRgx&lt;br /&gt;
gpkzZ7J+/focE4nAwEDatWuX6zXKlCmT53g+/vhjxowZw+nTp1m0aBFJSUkkJyfj6OiY5z7ETZJI&lt;br /&gt;
CCFECVK/vvEhXxTXsabatWtneO7r64vJZOLEiRM5nufj44OPj49VY2nSpEna/z/99NO0aNGCQYMG&lt;br /&gt;
sWrVKqte524hiYQQQpQgTk7WGymwpRtzJ3ITFxdHbGxsrsfZ2dnh5uaW7zgcHBzo1asXH3/8Mdev&lt;br /&gt;
X6dUqVL57uNuJ4mEEEKIQhceHo63t3fa84iICMxmc66jDVOnTrX6HInM4uPj0Vpz7do1SSQKQBIJ&lt;br /&gt;
IYQQhUprzYwZM/Dz80trmz59OkopunXrluO51pwjcfHiRdzd3TO0xcTEsHr1amrUqFGgEQ0hiYQQ&lt;br /&gt;
dxyt4aefYMYMOHoUzpyBWrWgTx8YMADuucfWEYq70fHjx+nduzddu3Zl586dLFu2jICAABo3bpzj&lt;br /&gt;
edacI9GtWzeqV6/O/fffT+XKlTl58iQLFy7k3LlzMj/iNkhBKiHuIMHB0Lo19O4NCQnw+OPw4YfQ&lt;br /&gt;
qhXMnAlNm8JnnxnJhhBFRSnFypUrKVWqFGPHjuWXX35h5MiRzJs3r0jjGDx4MJcvX+bzzz9n2LBh&lt;br /&gt;
zJkzh5YtW/L777/Tp0+fIo3lTiIjEkLcIX75BZ54AurWhc2boVOnjD9PSoJx4+DVV2HbNli2zLp1&lt;br /&gt;
AoTIibu7u82/9Q8dOpShQ4faNIY7kYxICHEHWLIEevY0koc//rg1iQBwdIRPPoEffoBNmyAwEMzm&lt;br /&gt;
oo9VCHFnkURCiBLut99g0CAYOBDWrMl9lKFXL1i6FL77DiZMKJIQhRB3MEkkhCjBjh+Hp56Chx+G&lt;br /&gt;
OXPAPo83Kx97DD76CCZNMhIKIYQoKEkkhCih4uONlRiurvDNN3lPIm544w3o2xeGDYPLlwsnRiHG&lt;br /&gt;
jx9PamoqFStWtHUoopBIIiFECTV+vLHvwvffQ0F+RysF06dDYqIxCVMIIQpCEgkhSqA9e2DaNJg4&lt;br /&gt;
EXJZhp+jqlXh/fdh9mz46y/rxSeEuHtIIiFECZOUBIMHQ7Nm8H//d/v9DRtm9DV8uNSXEELknyQS&lt;br /&gt;
QpQw06bBoUMwf37+50Vkxd7eKFK1dy+sW3f7/Qkh7i6SSAhRgly4YFSqfPllYxTBWtq3h3btjFUc&lt;br /&gt;
MiohhMgPSSSEKEEmTgQ7O3jnHev3/c47xjyJjRut37cQ4s4liYQQJURoKHz1lbHColIl6/fv5wf3&lt;br /&gt;
3y+jEkKI/JFEQogS4s03wcvLuK1RGJQyRiX++AN27Cicawgh7jySSAhRAgQHG3tkTJoEpUsX3nUe&lt;br /&gt;
fdTY9GvmzMK7hhDFxQsvvIDJZKJXr162DqVEk0RCiBJg0iSoUwf69Svc6ygFL70Eq1dDZGThXksI&lt;br /&gt;
W9q7dy+LFi2iTJkytg6lxJNEQohi7u+/jdGIt9+2znLP3Dz7rHGd+fML/1pC2Morr7xCYGAglStX&lt;br /&gt;
tnUoJZ4kEkIUc5MmQa1aMGBA0VyvQgVj5OOrryA1tWiuKe5cEyZMwGQyERYWhr+/P66urri5uTFq&lt;br /&gt;
1CiuX79uk5gWL17Mv//+ywcffGCT699piuD7jRCioP7919ga3FrFp/Jq6FBYsAB++QV69Ci664o7&lt;br /&gt;
j1IKAH9/f2rWrMnkyZPZvXs306dPJyYmhoULF+Z4fkJCAvHx8blex87OjvLly+d6XGxsLG+++Sbj&lt;br /&gt;
xo2T0QgrkURCiGJs6lSoVg0CAor2uvfeCy1awLx5kkgI6/D19WXNmjUADB06FBcXF2bNmsWYMWNo&lt;br /&gt;
1KhRtudNmTKFiRMn5tq/j48Px44dy/W4iRMn4uTkxKhRo/IevMiRJBJCFFNnz8KyZUYlS0fHor/+&lt;br /&gt;
wIHw2mtw6VLBdhcVhSM+OZ7QqNBCv059t/o4OThZpS+lFMOHD8/QNmLECGbOnMn69etzTCQCAwNp&lt;br /&gt;
165drtfIy6TJI0eOMH36dFauXImDg0PugYs8kURCiGLqf/8zlnq+8IJtrt+vn7Ep2KpVxkoOUTyE&lt;br /&gt;
RoXSck7LQr9O8IvBtPBsYbX+ateuneG5r68vJpOJEydO5Hiej48PPj4+VonhlVde4cEHH+Sxxx6z&lt;br /&gt;
Sn/CIImEEMXQtWswaxYMGQKurraJwcMDOneGpUslkShO6rvVJ/jF4CK5TmG6MXciN3FxccTGxuZ6&lt;br /&gt;
nJ2dHW5ubtn+fMuWLWzYsIG1a9dy8uRJALTWpKSkkJCQwMmTJ6lYsSIuLi55ewEijSQSQhRDX38N&lt;br /&gt;
cXEwcqRt4wgIgKefhmPHjJUjwvacHJysOlJQVMLDw/H29k57HhERgdlsznW0YerUqVaZI3H69GmU&lt;br /&gt;
UvTp0ydDu1KKM2fOUKtWLT777DNG2vofXQkkiYQQxYzZDF9+CU88YZTEtqXevaFsWVi+3KhjIURB&lt;br /&gt;
aK2ZMWMGfn5+aW3Tp09HKUW3bt1yPNdacyQ6derE2rVrb2l/4YUX8PHx4e23385xrobIniQSQhQz&lt;br /&gt;
mzZBRATksiquSJQtC337Grc3xo0zKl8KURDHjx+nd+/edO3alZ07d7Js2TICAgJo3LhxjudZa45E&lt;br /&gt;
9erVqV69+i3tr7zyCh4eHvTs2fO2r3G3koJUQhQzM2ZA06bwwAO2jsTw1FMQFmbUtBCiIJRSrFy5&lt;br /&gt;
klKlSjF27Fh++eUXRo4cybx582wdGkqpPM/XEFmTEQkhipETJ+Dnn42qksXld1unTlCuHHz3HcjI&lt;br /&gt;
rygod3d3Vq1aZeswbpGX2hMiZzIiIUQxMmuW8aFdVOWw86JUKejVy9jISwghMpNEQohiIjHRKIU9&lt;br /&gt;
aJAxN6E46dsXDh6EI0dsHYkQoriRREKIYmLlSoiOhmHDbB3Jrbp0MZIbGZUQQmQmiYQQxcSMGUYB&lt;br /&gt;
qDp1bB3JrcqUge7djXkSQuTH+PHjSU1NpaLUWb9jSSIhRDGwZ4/xyLQdQbHSty+EhMDx47aORAhR&lt;br /&gt;
nEgiIUQxMGMGeHsb3/qLq0cfNTYP++knW0cihChOJJEQwsaio+Gbb4z9LOzsbB1N9pydoWNHSSSE&lt;br /&gt;
EBlJIiGEjS1aZJTFHjzY1pHkrmdP+P13uHrV1pEIIYoLSSSEsCGtYd486NMH3N1tHU3uevSA5GTY&lt;br /&gt;
sMHWkQghigtJJISwoZ074fBheOEFW0eSN97e0Lix3N4QQtwkiYQQNjR3LtSsCQ8/bOtI8q5nT1i/&lt;br /&gt;
HlJTbR2JEKI4kERCCBuJiYFVq+D558FUgv4l9uxpTBDdtcvWkQghioMS9OtLiDvL8uWQlATPPmvr&lt;br /&gt;
SPLnvvugcmVjczEhhJBEQggb0Nq4rdG9O1Stauto8sdkgq5d4ddfbR2JEPmzaNEiTCbTLQ87Ozsu&lt;br /&gt;
XLhg6/BKLNlGXAgbCA6Gv/+GSZNsHUnBdOkCixfD+fNQpYqtoxEi75RSTJo0CR8fnwzt5cuXt01A&lt;br /&gt;
d4ACJRJKqeHAGKAKsB8YobXek82xVYBPgVZAbeALrfWrmY4JBBYAGlCW5kSttVNB4hOiuJs7F6pV&lt;br /&gt;
M77Zl0SPPAJKwcaNMHCgraMRIn+6du1KixYtbB3GHSPftzaUUk9hJAbjgeYYicQGpZRbNqeUAi4A&lt;br /&gt;
k4C/c+j6CkZicuPhnd/YhCgJYmON+RHPPQf2JXRM0N0dWrSQehIidxMmTMBkMhEWFoa/vz+urq64&lt;br /&gt;
ubkxatQorl+/brO4YmNjMZvNNrv+naQgcyRGA19prRdrrUOBl4B44LmsDtZan9Raj9ZaLwVyqoen&lt;br /&gt;
tdYXtdYXLI+LBYhNiGJv5UqIiysZlSxz0qWLMSIhv4tFTpQyBpn9/f1JSkpi8uTJdO/enenTpzNk&lt;br /&gt;
yJBcz09ISCA6OjrXR0xMTJ7i0VrToUMHypUrh5OTE7179yYiIuK2XuPdLl/fh5RSDkBL4MMbbVpr&lt;br /&gt;
rZTaDLS5zViclVInMJKbEOAtrfWh2+xTiGJn7lxju3DvEj7m1rkzfPgh7NsHLVvaOpq7SHw8hIYW&lt;br /&gt;
/nXq1wcn691d9vX1Zc2aNQAMHToUFxcXZs2axZgxY2jUqFG2502ZMoWJEyfm2r+Pjw/Hjh3L8Rgn&lt;br /&gt;
JycGDRpEx44dKVeuHMHBwXz66ae0bduWkJAQqlWrlr8XJYD8z5FwA+yAyEztkUC924gjDGNE4x/A&lt;br /&gt;
FXgN2KmUukdrffY2+hV3AW3WXP3zKtE/R5NyOQUAR09HKnWvhHNz57RvRMXBgQPw55/w3Xe2juT2&lt;br /&gt;
tWljbOS1YYMkEkUqNLRo3vDgYOP+lRUopRg+fHiGthEjRjBz5kzWr1+fYyIRGBhIu3btcr1GmTJl&lt;br /&gt;
cj3mySef5Mknn0x73qtXLzp37sxDDz3EBx98wMyZM3PtQ9yqWNyh1VrvBnbfeK6U2gUcBoZgzMUQ&lt;br /&gt;
4hZaa87NP8eJ8SdIOpuEg5sDpbxKAZBwLIET756gVI1S+Ez0ocrAKiiT7ROKuXONGgw9e9o6ktvn&lt;br /&gt;
6GhU5NywAd56y9bR3EXq1zc+5IviOlZUu3btDM99fX0xmUycOHEix/N8fHxuWWFhTW3btuX+++9n&lt;br /&gt;
8+bNhXaNO11+E4koIBXwyNTuAZy3SkSA1jpFKbUPY5VHjkaPHo2rq2uGtv79+9O/f39rhSOKoYRj&lt;br /&gt;
CYQNDiNmawweAR54vuiJ6wOuKDsjWTAnm7my4wpnZ58lbFAYZ2ecpd78ejg3cbZdzAmwZAm8+KLx&lt;br /&gt;
IXwn6NIFXnnF2A20XDlbR3OXcHKy2kiBLeV1pDAuLo7Y2Nhcj7Ozs8PNLbs5/znz8vLiyJEjBTq3&lt;br /&gt;
JFixYgUrVqzI0HblyhWr9Z+vREJrnayUCgY6AT8CKONvQydgurWCUkqZgMbAutyO/eyzz2QZz10m&lt;br /&gt;
9kAs+/32Y+dkR5NNTajoV/GWY0wOJip0rECFjhWIeTmG8OHhhDwQQoOlDXB/zDbbbK5ZY5TFfv55&lt;br /&gt;
m1y+UHTpAikpEBQEvXvbOhpRnIWHh+OdbmJQREQEZrM519GGqVOnWm2ORHaOHTuGe0nYfreAsvpy&lt;br /&gt;
HRISQksr3SIryK2NacBCS0LxF8YqDidgIYBS6iOgqtY68MYJSqmmGPUhnAF3y/MkrfVhy8/fwbi1&lt;br /&gt;
EQGUB14HagDzCvayxJ3qWsg19j+yn9I1StNkYxMc3XP/al++XXla7GrB4cDD/NvnX2pNqUWN12oU&lt;br /&gt;
QbQZzZ0LHTpAnTpFfulC4+trPDZskERCZE9rzYwZM/Dz80trmz59OkopunXrluO51pwjERUVdcuo&lt;br /&gt;
xfr16wkODmbUqFG5ni+ylu9EQmu9ylIz4j2MWxp/A13SLdesAnhlOm0fRrEpgBbAAOAkUMvSVgGY&lt;br /&gt;
Yzn3MhAMtLEsLxUCMG5n7PfbT5k6ZWjyaxMcKjjk+Vy7snY0XNWQ4+8c59jrx1Amhdf/Zf5rWniO&lt;br /&gt;
HIHff4dly4rskkWmSxcply1yd/z4cXr37k3Xrl3ZuXMny5YtIyAggMaNG+d4njXnSDzwwAM0b96c&lt;br /&gt;
Vq1a4erqSnBwMAsWLMDb25uxY8da5Rp3owJNttRazwSynN6qtR6URVuO9SoslS5fzekYcXdLTUjl&lt;br /&gt;
377/Yl/RPt9JxA3KpKj1QS3QcHTMUeyc7ag6pGg2upg7FypWhMcfL5LLFakuXWDmTIiIgNq5zmoS&lt;br /&gt;
dyOlFCtXruSdd95h7Nix2NvbM3LkSKZMmVKkcfTr149169axadMm4uPj8fT0ZMiQIbz77rt39K2N&lt;br /&gt;
wlYsVm0IkROtNUeGHiE+LJ4Wu1oUKIlIr+YHNUmNTeXI0CM4VnXErWfBJmjl1fXrsHAhBAZC6dKF&lt;br /&gt;
eimb6NjRqNC5YYMkEiJ77u7urFq1yqYxvPfee7z33ns2jeFOJLt/imLvwvILRC6KpO6cujg3vf1V&lt;br /&gt;
F0opan9eG7febhx++jBxoXFWiDJ7338PUVHwwguFehmbcXGBtm2lXLYQdytJJESxlhydTMSoCNyf&lt;br /&gt;
cqdKgPW2mVQmRf3F9SnlVYqDvQ+SHJNstb4zmzMH2rWDBg0K7RI216WLsXIjKcnWkQghipokEqJY&lt;br /&gt;
OzomAn09mToVl0PfvnDffdCtG4waZWxacRub/ti72NPoh0YkX0gm7PkwtNa5n5RP4eGwZYtRO+JO&lt;br /&gt;
1qWLsRnZzp22jkQIUdQkkRDF1uVJP3N+YSS+1z7B8cdFxidV48ZGNaf166FfP6heHcaONQo0FIBT&lt;br /&gt;
bSfqzatH1Ooozn9ttZpqaebNgwoVjBzoTtasGbi5wW+/2ToSUdyMHz+e1NRUKla8td6LuDNIIiGK&lt;br /&gt;
n7g49OAXCX/3Iq7lT1Fl3ctw6pRxE37+fPjhB2M95aFDEBAAX34J99xjbGBRgFEF977ueD7vSfjI&lt;br /&gt;
cOLD4q32MpKSYMECGDgQ8rDEvUQzmaBTJ9i0ydaRCCGKmqzaEMXLuXNEPvYY10J9iKcmLTY0R93n&lt;br /&gt;
mvWxDRrAZ5/Bq6/CiBHw5JPG0oivvoJSxp4bMYkxbDq6iY1HN3Lk0hFOXTlFbFIsTg5OlCtVjkaV&lt;br /&gt;
G9HMoxkPv/EwpbaV4tDTh2ixqwUmh9vPsX/8ES5evHMnWWbm5wdDhhiDQ+XL2zoaIURRkURCFAtb&lt;br /&gt;
Ll9m5rFj7Dp9mqj3PmbJM3C4A4xSRxhwyoOnPTyoZkkObuHlZSyNWLrUqD995AiHvnqfjyIW8M3B&lt;br /&gt;
b0gxp9DQvSHNqjSjrVdbXBxdiE+OJzohmgMXDvDzkZ95M+lN2ndvz/gvxvPPe//QbFKz235Nc+YY&lt;br /&gt;
qxkaNrztrkoEPz8wm2HrVnjsMVtHI4QoKpJICJs6GBvLq0ePsunyZZqfPs3AkBAeVP1wupTA1fe8&lt;br /&gt;
qe8Uz/gTJxh3/DijqlfnXW9vXOyz+WsbEEB09Uqoxx+n9EOdODqiKlO6TaHvPX2p4Zp9SewUcwrb&lt;br /&gt;
T25n9eHVrA1ZS4+PejCkwhBGBoykYeWCZQHHjhnD/IsWFej0EsnHxyiXvXmzJBJC3E0kkRA283NU&lt;br /&gt;
FP0OHaJ6qVKsXb2a3itWkPrrNnZ3vkTlF6rSsV1NngeupqTw5ZkzvH/yJMsjI1lQvz6ds5i4tXj/&lt;br /&gt;
Ykb9OQomN7pcAAAgAElEQVTvl5zYtsSFPxY7oAY9BjkkEQD2Jns61uxIx5odufbgNXY23cn9X9xP&lt;br /&gt;
syvNCGgRwPsd36dauWr5em3z5hnD+08+ma/TSjw/PyOREELcPWSypbCJmWfO0PvgQR6pWJGQLVt4&lt;br /&gt;
bMYM1PLlnN3iTGpsKjXG3fzwL2dvz1ve3hy+7z4alS1Lt3/+YeqpU2nLNZNTkxm2bhiB3wfSo24P&lt;br /&gt;
Nr99BJedwSh7e2OXrNOn8xyXSzkXWq9oTa3TtVgcu5j14etpMKMB//vzf6SaU/PUR3IyfP01PPPM&lt;br /&gt;
nT/JMjM/PwgLy9dbLoQo4SSREEVuWWQkw8PDGVGtGt9dvIjT22/D22+T+lAnTk87TZXAKpSufmst&lt;br /&gt;
ae/SpVnfpAmveXnx2rFjDAoNJSrhMl2XdWVuyFzm9JjD4j6LqeRUyZg38fvvoBR07QqXL+c5PtfW&lt;br /&gt;
rlQdUpXqc6tz8PGDBDQJ4JVfX6Ht1205euloruf/9BNERt49kyzT69jReMtlGagQdw9JJESR2nXl&lt;br /&gt;
CoNDQxno4cFnnp7YDRoEDz0E48dzfsF5ki8m4/V69rty2inFZF9fljZowNLISOptXkTI+X/Y/Mxm&lt;br /&gt;
XmiZ6ZO7WjVjyej588Ye14mJeY6z5oc1MZUxceGtC8zsPpM/nvuDqPgomn3VjCX7l+RYvGrOHGjT&lt;br /&gt;
xih5cTcwa82Wy5cZduQI/f/bj+M3f/J/znsJOHSI6f/9x9WUFFuHKIQoRJJIiCLzX2Iijx08yL3l&lt;br /&gt;
yjGnXj3Ue+8ZX93nzcNsVpyecprK/pVxquOUa189XEtT89xiLpVtRMuH19K2RrusD6xXD37+Gfbu&lt;br /&gt;
NVZ05LHOhEMFB3yn+nJx5UUubbpEG6827Buyj74N+jLw+4EErA3gSuKVW847fhw2brzzK1kCpJjN&lt;br /&gt;
zDhzhpq7d9Np/342XLqEi50djeMrEf+PM8cTExlz9Cg1du3irWPHiJWEQhQTmzdvplOnTpQvX55y&lt;br /&gt;
5crRqlUrvv32W1uHVWJJIiGKhNaawWFhOCjFmoYNKXXgAEybBu++C76+XPz2IoknEqnxZs4TIwGS&lt;br /&gt;
UpPo/U1vok99zzQvF36PS2XIkSPZjxK0aWNMWli2DL74Is8xewR4UL5DecKHhZOamIpLKRcWPraQ&lt;br /&gt;
5Y8v5+cjP9Psq2b8deavDOfMnw/lyoG/f54vUyLtunKFVsHBjAgPp3358vzRvDkR99/P6kaNmOxV&lt;br /&gt;
m8RJ9Znt0ILjrVvzQtWqfPHff7QOCSE83noFv4QoiAULFtClSxccHR356KOPmDp1Ku3bt+e0TOwp&lt;br /&gt;
OK11iXwALQAdHBysRfE3/+xZTVCQXh8VpXVqqtatW2vdsKHW169rrbXee99e/bff37n2YzabdeDa&lt;br /&gt;
QO04yVHvOLlDa6314nPnNEFB+u1jx3I++bXXtLaz03rLljzHHXsoVm912KqPTzieof345eO69bzW&lt;br /&gt;
2nGSo/465GuttdZJSVp7emo9fHieuy9xzGaznnrqlLYLCtL37t2r/7xy5ZZjEhK0Ll1a62nTbrb9&lt;br /&gt;
Gxur6+7erctt26Y3RkcXYcQlQ3BwsJbfZ4XvxIkT2snJSY8ePdrWoRSqvPx9unEM0ELf5uexjEiI&lt;br /&gt;
Qnfm+nVejYgg0MODbpUqwbffwu7dMHMmODpyZfcVrv11jWojc19i+fEfH7No/yK+7vU1bWu0BeCZ&lt;br /&gt;
KlWYUqsW7588ydyzZ7M/+cMPjdmA/v5w8mSeYi/boCxeY7w4+dFJ4iNufpv2Ke/D1sCtPNv0WZ77&lt;br /&gt;
8TleXv8ya39M5ty5O3eSZXxqKv6HDjHm6FHGeHmxs3lz7itX7pbjSpeGBx/MuAz0nrJl+atlSx5w&lt;br /&gt;
deWxgwf56+rVIoxc2NKECRMwmUyEhYXh7++Pq6srbm5ujBo1iuu3seleQcyaNQuz2czEiRMBiIuL&lt;br /&gt;
K9Lr36kkkRCFbmR4OE52dnxWu7axAcW4cdCjhzHJEjgz/QylfUtTqXulHPvZfGwzb/32Fu889A5P&lt;br /&gt;
N3k6w8/GeHkxrGpVhoeH88eVW+cuAGBvD998Ay4u0KcPJCTkKX7vt70p5VmK8JfDM9w+KWVfiq96&lt;br /&gt;
fsXs7rOZEzyHF3f4cW+HCzRtmqduS5SY5GQ679/PL9HRrG7YkMm+vtibsv/14ednLJpJ21Y8MRHX&lt;br /&gt;
+HhW16hBU2dnuh84ILc57hJKKQD8/f1JSkpi8uTJdO/enenTpzNkyJBcz09ISCA6OjrXR0weNu77&lt;br /&gt;
7bffqF+/PuvWrcPLywsXFxcqVarEu+++Wyi7/94tpCCVKFQ7YmJYExXF0gYNqODgYIxCHDtmlLQG&lt;br /&gt;
rp+5zsVvL1Lrk1ook8q2n8jYSALWBOBXy48JHSbc8nOlFJ/Xrs3BuDj6HjxIcKtWWZfUrlQJ1q41&lt;br /&gt;
5k28+CIsXmysV8yBnZMdtafX5mCvg0T9EIX7Y+4Zfj6k1RDKxjfimZ/6csyvFcFn19Kyasvc35wS&lt;br /&gt;
IjIpiS7793Pq+nV+a9aM+7MYhcjMzw/mvHmUc0MW4314A+zZA2YzTsBPtWvTdupUHv3zT0Latcu+&lt;br /&gt;
UqnIUnxqKqFFkITVd3LCyc7Oav35+vqyZs0aAIYOHYqLiwuzZs1izJgxNGrUKNvzpkyZkjaCkBMf&lt;br /&gt;
Hx+OHTuW4zHh4eHY2dnx3HPP8cYbb9CkSRPWrFnD+++/T2pqKh988EH+XpQAJJEQhUhrzWvHjtHC&lt;br /&gt;
2Zn+lSsb24BPnGhsh2n5xXF29llMpU14DvLMth+zNhOwNgCAJX2WYFJZfxN2MJn4tmFDWgYH8/jB&lt;br /&gt;
g/zerBmls/pF2LSpMfmyf38joRg2LNfXUqlHJSo+WpGIURFU7FIRuzIZ+921si1uvwZT843HeXDB&lt;br /&gt;
g8zpMYdnmj6Ta7/FXVRSEp3+/ptLKSlsa9aMRs7OuZ908iTNZ04ijIUkf+MCPR+BQYOMUp9aU2nv&lt;br /&gt;
Xn7+5BOajRvHmNmz+erxx6Fq1cJ/MXeI0Ph4WgYHF/p1glu2pIWLi1X6UkoxfPjwDG0jRoxg5syZ&lt;br /&gt;
rF+/PsdEIjAwkHbtslmVlU6ZPFR/i42NRWvNxx9/zJgxYwDo06cP0dHRfPHFF7z11luULVs2135E&lt;br /&gt;
RpJIiELz3cWL7L56ld+aNsWkFMyYYWwNafl2YU42c27eOTwGemDvmv1fxc93f85vx35j4zMb8XD2&lt;br /&gt;
yPGalR0dWduwIQ/u28ew8HDm16uXNrSaQb9+sHMnjB4N990HrVrl2K9Sitqf12ZPoz2c+vgUNSfU&lt;br /&gt;
TPvZ1avGwMbo0dV467nfGbZuGAO/H0jIuRA+6fwJ9qaS+c8sJjmZLv/8w4XkZLY1a0b93H7Bam3U&lt;br /&gt;
Bh81CpOzM4uaTmVx6SEErcr0C75fP2przbSffmJIo0b0Dgjg0bFj4ZFHCu/F3EHqOzkR3LLwR7zq&lt;br /&gt;
O+W+DDs/ateuneG5r68vJpOJEydO5Hiej48PPj4+VomhTJkyxMfH069fvwzt/fv3Z8OGDezbt48H&lt;br /&gt;
H3zQKte6m5TM33Ci2Es2mxl77BiPVqzIwxUqGPMRpk2DZ58Fb28Aon+MJul8ElWHZP9t9Ej0EcZt&lt;br /&gt;
Gccr97+CXy2/PF27laVORWBoKC1dXBheLZtJnFOnwp9/GhtihIRAhQo59utUxwmv//Pi1ORTVAms&lt;br /&gt;
Qpmaxgfk4sXGyxsyBErbl2Z+r/m08GzB6A2j+efCP6x8YiVuTm55ir24SExNpceBAxxPTGRrXpKI&lt;br /&gt;
mBjjz/aHH4zZptOmkbzcme3DjETrlrshSvFCz558HxLC4Fdf5eCAAVRauhS6dCmsl3THcLKzs9pI&lt;br /&gt;
gS1lmeBnIS4ujtjY2FyPs7Ozw80t539nVatWJSIiAg+PjF9IKleujNaay/mogCtuksmWolB8c+EC&lt;br /&gt;
RxMT+bBWLaNh/nyIioLXX0875uxXZynXuhzOTbIeLk81p/LcD89RzaUaH3TK373LgVWqMKp6dUZF&lt;br /&gt;
RLAju0lYjo6wahVcuQKBgcYe2LnwHueNo7sjR181SmVrbQy09OljFNIE4xfky/e9zOZnNvNP5D/c&lt;br /&gt;
O/de9p/fn6/4bUlrzaCwMIJjY1nfuDFNcrudcfw4PPCAMbvy+++N0p7Ozvj5QWqq0ZwVpRTzGzUi&lt;br /&gt;
3tWV8ePGQa9eRjUvcUcKDw/P8DwiIgKz2ZzraMPUqVPx9PTM9XHfffflGkNLy0jOmTNnMrSfOXMG&lt;br /&gt;
pRTu7u5ZnSZyIYmEsDqz1nx06hQ9KlWiqbOzMXV/yhTjdoKvLwAJRxO4vOkynkOynxvxv7/+x87T&lt;br /&gt;
O1nQewFODvkfZv2kVi0eKFcO/0OHiExbPpCJtzcsWWJskPHpp7n2aVfWDt9PfYn6PoroX6PZsgVC&lt;br /&gt;
Q+Hll289tr1Pe4JfDKZC6Qq0md+GlQdX5vs12MKEEyf45sIFltSvT2tX15wP3rMH7r/f+DPevdso&lt;br /&gt;
RW5RqxbUrGlsp54dz1KleNvbm9nNmnHY3x+eeirPS3NFyaG1ZsaMGRnapk+fjlKKbt265XhuYGAg&lt;br /&gt;
mzdvzvWxbNmyXON46qmn0Fozf/78DLEtWLCAihUrpiUaIp9utxCFrR5IQapia/WFC5qgIL0zJsZo&lt;br /&gt;
+PprrUHrAwfSjjn65lG9zXWbTolLybKP01dOa+cPnfXwdbdX3elsYqL22LFDd9i3TyenpmZ/4Nix&lt;br /&gt;
RrGqbdty7dNsNut9Hffp3XV26yd6peqGDbU2m7M/Pi4pTg9YPUAzAf3Gpjd0SmrWr7k4WGIp7vXR&lt;br /&gt;
iRO5H7xjh9YuLkZxsYsXszzkhRe0btAg524SU1N1zV279KN792rt7a11mzZGda+7yJ1ckGrChAla&lt;br /&gt;
KaWbNm2qe/XqpWfOnKkDAgK0Uko/88wzRR6Pn5+ftrOz00OGDNEzZ87UjzzyiDaZTHrevHlFHkth&lt;br /&gt;
KeqCVDZPCAocuCQSxZLZbNYt9uzRHfftu9Gg9T33aN2zZ9oxqUmpekflHfrIiCPZ9vPkqie1xyce&lt;br /&gt;
OiYh5rZj+v3yZW0XFKTfPHo0+4OSk7Vu317rqlW1jozMtc/Yg7E6yC5ID1An9cyZucdgNpv11D+m&lt;br /&gt;
atNEk+6ypIu+FH8p7y+giGy7fFk7bt2qBx0+rM05ZUZaax0UpHXZslp36KD1tWvZHrZypfFb5r//&lt;br /&gt;
cu7u28hITVCQ3rBjh9b29lq//nr+X0AJdqcnEiaTSYeGhuonn3xSu7q66kqVKulXXnlFX7dUti1K&lt;br /&gt;
cXFxevTo0bpq1aq6dOnSumnTpnrFihVFHkdhkkRCEokSbWN0tCYoSG+6UQZ540bjr1lQUNoxF9Ze&lt;br /&gt;
0EEE6Wv7s/4A2hCxQTMBvXT/UqvFNeXkSU1QkP4hm2/OWmutz57V2sND606dtE7JfdRg4X3hej2/&lt;br /&gt;
6+jQhDzHsTFio64wuYL2/sxb7z69O8/nFbbwuDhdcft23WHfPn09p5EbrbXeuVNrJyet/fy0jovL&lt;br /&gt;
8dCLF40//kWLcu7SbDbrtsHB+t69e7V58mStldI6JCSfr6LkuhsSiWgpjV5kpES2KNG++O8/mjk7&lt;br /&gt;
0+nGCogvvjDqNrRvn3bM+QXncW7pnOUky6TUJEb8MoIOPh0Y0HiA1eIa4+XFY25uDDx8mKPZVbT0&lt;br /&gt;
9IQVKyAoCN57L8f+EhLg3QgflJMd5yfkXAQnvUd8H2HfkH14unjy4IIHmbpzKmad+yTPwnQpOZnu&lt;br /&gt;
Bw7g5uDA6oYNccyhYiX//AOPPgotWxorNHJZIujmBs2bZyyXnRWlFON9fNhz7RqbBg2Ce+6BESPy&lt;br /&gt;
vFurEMJ2JJEQVhMeH8+6S5cYWa2asbTryBFYtw5eeSWteuT189eJXheN53NZT7Kc8dcMIi5F8L9u&lt;br /&gt;
/8vz8rC8UEqxsH593B0deeLff0lITc36wI4djSRi0qQcVxAsXQqnL9vjOcGXC99c4PLWvC8b8y7v&lt;br /&gt;
zbZntzG69Whe2/QavVb0Iio+Kr8vySqSzGb6/vsv0cnJrGvcmIoODtkfHBEBnTsbMyh/+inXJOIG&lt;br /&gt;
Pz8jkcgtJ/CrUIH7XFx4/8wZmD4d/vgDli/Px6sRQtiCJBLCamacOYObg4NRxRKMDwN3d6OCpEXk&lt;br /&gt;
kkiUvaJy/8q3nB8dH817297jxRYv0qhy9pXuCsrV3p7VDRsSFh/Py5mWomUwdix07QpPPw3//XfL&lt;br /&gt;
j81moyRG797Q5P88KPdAOSJGRGBOyfvIgoOdA1MemcL6Aev588yfNJvdjA0RGwrysgpMa81LR46w&lt;br /&gt;
88oV1jZqRO2cEoMzZ4yMwNUVfv3V+G8ePfIInDsHhw/nfJxSinHe3my/coVtLVrAE0/Aa6/BtWt5&lt;br /&gt;
vpYQouhJIiGs4lpKCl+fP8+Lnp5GWeqrV2HhQnjpJWM7SIwPrvMLzuPexx2HCrd+8534+0TM2szE&lt;br /&gt;
jrnX1S+oJs7OzKpbl6/Pn2f+uXNZH2QyGUtCy5QxliMmJ2f48a+/Gks+/+//QJkUdb6sQ9y/cZyd&lt;br /&gt;
mcPOo9noVqcbfw/5mwbuDei6rCvP//g8VxKz2XTMyj4+dYoF588zv1492pUvn/2BUVFGNmA2G2s5&lt;br /&gt;
K9+aBObkwQehVKncb28A9KhUiSZly/LByZNGwbDoaPjyy3xdTxQv48ePJzU1lYoVK9o6FFFIJJEQ&lt;br /&gt;
VrHo/HniU1MZemPPhKVLITHRKPdocfXPq8QfjqfKc1VuOT8sKoyZe2Yyrt04KpfN3wdVfgVWqcKL&lt;br /&gt;
np4MP3KEfdl9261UyShWtWcPvPlmhh99+incey+0NXYxx6W5C1WHVOX4O8dJisymXkUOqpWrxsaA&lt;br /&gt;
jcztOZdV/66i4cyGrA9fn+9+8uPbCxcYe/w473p7E1Dl1j+PNLGxxpyIqCgjE6hRI9/XKlPGeK9y&lt;br /&gt;
qidxg0kp3qxRg42XL3OwUiUYPNgY/slDZUMhhG1IIiFum9aaWWfP0sfdneqlSxs3w2fPNioVpitP&lt;br /&gt;
HbkkEsdqjlR4+NZS1OO2jKNauWqMvH9kkcT8Re3aNCxblif+/ZfLmUYc0rRuDZ98YnyQrV0LwN9/&lt;br /&gt;
w5YtltGIdFM4ar5fE2WvODY27xMv01NK8XyL5zk47CCNKjei+/LuPLP2Gc5cPZP7yfn059WrDAwN&lt;br /&gt;
pX/lykzIqapgUhL07WsMv/z6K9StW+Br+vnB1q23DO5k6Ql3d6o6OvK/M2fgjTeM8tuzZxf42kKI&lt;br /&gt;
wiWJhLhtO69e5VB8PC96WiZQ7twJBw4YtzUszElmLqy8gMcAD5RdxkmUe87sYfXh1bzX4T1K25cu&lt;br /&gt;
kphL29nxXcOGXE5JITA0FHN2MwFHjjQ+TAcNgqNHmTbN+FLet2/GwxwqOVDrw1qcX3CeK38U/NZE&lt;br /&gt;
Ddca/PL0L3zd62t+jfiVul/WZeLWicQlxRW4z/ROJCTQ68ABmjs783V2G5qBcRvj2WeNT//vv4cW&lt;br /&gt;
LW7run5+xqDCX3/lfqyDycRLVauyJDKSy1WrGnFMnWoslRFCFDuSSIjbNvfsWWqWLn1zyefs2UYp&lt;br /&gt;
bL+bm2xd2nCJlOgUPJ65dffOsb+NpaF7QwKaBBRVyADULFOGJQ0a8FN0NO9nV5ZZKWOfEHd3knr1&lt;br /&gt;
5cflsbzyCthnsd2d5/OeuNzvQtiLYZiTCr6kUynFoOaDiBgRwcv3vsyHOz6k3pf1WLx/8W0tFb2S&lt;br /&gt;
kkKPAwcoa2fHD40aZb3FOhgjSqNHwzffwLJl8PDDBb7mDS1aGLuI52WeBMCLVauSqrUxj2XsWOPW&lt;br /&gt;
yty5tx2HEML6JJEQtyUmOZlVFy/yvKensVV4VBR8+60xNyJdPYLIpZGUbVIW58YZa0dsOrqJ347/&lt;br /&gt;
xoedPsTOlM0HWyHqXqkSk3x8GH/iBN9ERmZ9kKsrrF2LOeIYK+jP84OyXjqq7BT15tQj4UgCp6ac&lt;br /&gt;
uu3YXEu78vEjH3N4+GEe8HqAwO8DaTKrCSsOrCDVnM3y1WxcN5vpe/Ag/12/zrrGjXF3dMz+4I8+&lt;br /&gt;
MlbczJxprJywAjs7Ix/JayLh4ejIU5UrM+PsWVJr1jQmvX7xhbELmBCiWJFEQtyW5RcukGQ2M+jG&lt;br /&gt;
hL2lS28Oi1ukXEkh+sdoPAIyjkZorXk76G1aV29Nz7o9izDqjMZ5e/OMhwfPhoay60rWtyVifRrx&lt;br /&gt;
tMO3dDb/QrkJr2bbl3MTZ7xe8+LkpJPEh8VbJb5aFWqx6slV7HxuJzVcazBgzQDqflmXz3d/nqcV&lt;br /&gt;
HmatCTx8mB1XrvBD48Y0yGlL8LlzYdw4mDgxw60pa/DzM/b1yutqzhHVqnEiMZH10dHGLaZjx+CX&lt;br /&gt;
X6wakxDi9kkiIQpMa82cs2fpUakSnqVKGY2LF0PPnkb9CIuLqy9ivm6+pXbErxG/8teZv3ivw3tW&lt;br /&gt;
LT6VX0op5tarx73lytH74EGOZ3EvfuFC+CGxC1fe/9L4tp7DkkTvd7wp5VWKsCFhN8q5W0Ubrzas&lt;br /&gt;
f3o9e17YQ+vqrXlt02tUm1aNQT8M4vcTv2d520NrzeiICFZdvMiye+6hfU7LPNeuNZKH4cPhnXes&lt;br /&gt;
FvcNfn6QkgLbtuXt+HvLlaO5s7Nxe+O++6BVK1kKKkQxJImEKLC/Y2PZHxfH8zcmWR44APv2QWBg&lt;br /&gt;
huMil0ZSvmN5Sle/OZFSa83E3yfygNcD+NXyw9ZKmUysbdiQcnZ2dD9wgJh0ywuSk43FG/7+UPGt&lt;br /&gt;
l+DVV41qnevWZdmXXRk76s6uy5Xfr3B+wXmrx9qqaiuWPb6Mk6NO8nrb19l2chsdFnWgxmc1GLF+&lt;br /&gt;
BJuPbSYxJREwakVMP3OGGXXq0DddcneLoCCjcFjfvsYthEJI7GrXNnZtz+vtDYDnPT35OTqac0lJ&lt;br /&gt;
RsnsDRsgLMzqsQmRlYULF2IymTh1Kn+3Kk0mE+/lUmb/TiKJhCiwRefP4+HgQNcbhWYWLTI2V+jW&lt;br /&gt;
Le2YxNOJxGyNueW2xoajG/jzzJ9MaD/BpqMR6bk5OrKuSRPOJSXx5KFDJJmNb/hLl8KpU/DWW5YD&lt;br /&gt;
p0yBHj2gXz8jccpCRb+KeAz04OiYowWqLZEXVV2q8m77d4kYEcG2Z7fRt0Ffvg/7nkeWPEKFjyvQ&lt;br /&gt;
cPX/Mfb4cZ5wiqeL0/XsR0e2bjVez0MPGYW4spuEeZuUulkuO68GVK6Mg8nE4shII5NzczPmbghR&lt;br /&gt;
BJRSBfr9VNDzSqos5p4Lkbsks5llFy4w0MMDe5PJGLNeuhQGDIB0+zVcWHEBUykT7n1vfhvWWjNh&lt;br /&gt;
6wTaVG9TLEYj0qvn5MSahg3p+s8/DDx8mMX17uGjjxR9+kCjG1W77eyMPSA6dIAuXWD7dqhX75a+&lt;br /&gt;
fD/1JXpdNBGjIrhnxT2FFrNSinbe7Wjn3Y7Pu37OgQsHmBa+l8XJPjhd/I3vDr3Pd7+AaylXGlZu&lt;br /&gt;
iFc5L6q5VKN6ueo0C43hoeFTuNayMafnvI9T3H+UTS6Lo50jDiYH7E32ONg5YKfsrPKL0c/PWARz&lt;br /&gt;
7pyxR1puyjs48IS7O/PPneN1Ly/Uiy/C//4HH34IOc31EMKGEhISsM9qadcd6u55pcKqfrl0iajk&lt;br /&gt;
ZAJvTLLcuBEiI7O8rVGpdyXsy938q3ZjNGJDwIZimbV3rFCBFffcw5P//suFk0cID6/LihWZ4ixb&lt;br /&gt;
1pj417698em4fTtkKu7k6OZInS/qcDjgMG6Pu1H5ycKt2AlGUnHM5MmyVF/8K7uxtP1Eoru9zL7z&lt;br /&gt;
+wg5F8LhqMOcuXqGfef3UevvkwxZdJ3fakDv9ntIXHR/jn07mBxwsHPI8F97kz1ODk5ULlsZD2cP&lt;br /&gt;
apWvRe2KtWns0ZhmVZrdUhfkxkrS336DgDyu9h1cpQpLIyPZfuUKDw0ebCQRa9bAM88U5C0SJYjW&lt;br /&gt;
mqSkJErdmINVQjjmtCrqDiS3NkSBLDp/nubOzjRxtiznXLTI+MrevHnaMbH7Y4k7EJfhtsaNuRFt&lt;br /&gt;
qrfhkVqPFHXYefa4uzvz6tYnyOkcNaZG0KJFFrcF3NyMus+lShmfkCdO3HJI5QGVcX/CnSMvHeH6&lt;br /&gt;
ueuFHvcPUVH4HzpEHzc3ljZogL3JhIezB11rd+Wtdm+xpM8StgRuIazhbNYvN+HQ4WHqbj/EnpEH&lt;br /&gt;
2D14N5uf2cyP/X7kuye/Y0XfFSx+bDFf9/qar3p8xWddPuODhz9gXLtxjG49miEthzCw6UC61e5G&lt;br /&gt;
DdcaXEq4xLeHvuWldS/RZn4bXD5y4f559zNh6wT2nt2L1prKlY1d5fNze6N9+fLULlPGmHRZq5Yx&lt;br /&gt;
ErRgQaG9h8L6JkyYgMlkIiwsDH9/f1xdXXFzc2PUqFFcv37z34XJZGLkyJEsX76cRo0aUbp0aTZs&lt;br /&gt;
MDazmzp1Km3btsXNzQ0nJydatWrF6tWrM1ynb9++tGzZMkNbz549MZlM/Pzzz2ltf/31FyaTKa1v&lt;br /&gt;
gEOHDvHwww/j5OSEl5cXH3zwAWZzxgnMEydOxGQyZfl47rnnMryOG3MkDhw4cMv1Q0JCMJlMtGrV&lt;br /&gt;
KkP/3bp1o02bNgAEBgbi7u5OahZLnjt37kyDBg1yeMeLloxIiHyLTk7m5+hoPvH1NRouX4YffoD3&lt;br /&gt;
388wSS9yaST2leyp2OXmZj0bj25k93+7i+1oRHoV91SBeWZO/d8RXjpiZlbdukatjPSqVjVqZj/8&lt;br /&gt;
sDHHYMsWY1ahhVKKOrPqsKfRHsIGh9F4XeNCe92Lz5/nudBQHnd3Z5klicjSunXw5JOodu1w+P57&lt;br /&gt;
fMqUsWoc11Ouc/DCQf468xdbT27liz+/YOLvE6nvVp/nmz9PW79n+eGbSmidtzmdSime8fDgk9On&lt;br /&gt;
mZmaStlBg4yRr+PHjS3NRbF34++8v78/NWvWZPLkyezevZvp06cTExPDwoUL04797bffWLVqFS+/&lt;br /&gt;
/DJubm74WEb6pk+fTu/evQkICCApKYlvvvkGf39/fv75Z7pZ5mW1a9eOH3/8kdjYWJwtX3J27tyJ&lt;br /&gt;
nZ0d27dvp0ePHgBs27YNOzs72lo2zImMjKRDhw6YzWbeeustnJycmDNnDqVLZxxR69u3L3Xq1MnQ&lt;br /&gt;
tnfvXr744gs8PG4ttgfQqFEjypcvz7Zt29Kuv337dkwmE/v370+LVWvNrl27eMmy7HrgwIEsXbqU&lt;br /&gt;
DRs28Oijj6b1FxkZSVBQEBMnFt7mhvmmtS6RD6AFoIODg7UoWjP++0/bb92qL1y/bjTMnq21yaT1&lt;br /&gt;
2bNpx5hTzPqPqn/osOFhN9vMZt16Xmvdel5rbTabizrsfDGbtW7VSuv27bX++uxZrYKC9MBDh3RS&lt;br /&gt;
apv/7dIAACAASURBVGrWJ/z3n9b16mnt6an133/f8uOon6N0EEH6zOwzhRLv56dPa4KC9POhoTol&lt;br /&gt;
p/d2/nyt7ey07tVL6/j4Qokls+TUZL3p6Cbd77t+2nGSoy7znoum49t69/5Lee7jaHy8JihILzt/&lt;br /&gt;
XuvYWK1dXLQeP77wgi5iwcHB+k7+fTZhwgStlNJ9+vTJ0D58+HBtMpn0gQMHtNZaK6W0vb29Dg0N&lt;br /&gt;
vaWPxMTEDM9TUlJ048aNtZ+fX1rb3r17tVJK//rrr1prrQ8cOKCVUvqpp57Sbdq0STuud+/eumXL&lt;br /&gt;
lmnPR40apU0mk967d29aW1RUlC5fvrw2mUz65MmTWb6uqKgo7e3trZs1a6bj0/17UkrpiRMnpj3v&lt;br /&gt;
0aOHbt26ddrzvn376ieeeEI7ODjoDRs2aK21DgkJ0Uop/dNPP2mtjd+XXl5eun///hmuOW3aNG1n&lt;br /&gt;
Z6dPnDiRZUxa5+3v041jgBb6Nj+P5daGyLcVFy7wSIUKN6sjLlpkTDpMN3suZmsMSWeTMtzW2HRs&lt;br /&gt;
E7v/212sVmpkZ9Mm2LsX3n4bBnl6sqxBA1ZcuECPAwe4mpJy6wnVqsHvv0OVKtCunTFnJJ1K3Svh&lt;br /&gt;
+YInEa9GEB9hnUJVAClmMyPCwxkVEcHrXl7MqVsXu6zeW7MZ3n3X2E3z+edh9WpjW84iYG+yx6+W&lt;br /&gt;
Hyv6ruD06NMMafkSPPApD3/vy4J9C/JUa6NWmTK0LVeOJZGRxvwUf3+juIe54CXDS6rU+FSuhVwr&lt;br /&gt;
9EdqvHWriCqlGD58eIa2ESNGoLVm/fqbu9126NCBellMXk4/TyImJobLly/Trl07QkJC0tqbN2+O&lt;br /&gt;
s7Mz2yzFSrZv346XlxcDBw4kODiYxERjWfSOHTto165d2nm//PILrVu3znBbpFKlSjz99NPZvh6z&lt;br /&gt;
2Uy/fv2IjY1l7dq1lMnh39ONOBMsNWp27NjBo48+StOmTdm+fXtarCaTiQcffDDt/Xr66af58ccf&lt;br /&gt;
iYu7udfO8uXLeeCBB/D29s72ekVNbm2IfDmVmMiOK1dYXL++0RAeDrt2GfsypBO5NJIytctQ7v5y&lt;br /&gt;
aW2Td0ymVdVWdPbtXJQhF8j77xs1kDp1Mp739/DAw9GRPgcP8tC+ffzQuDHemYY98fAwqi35+0P3&lt;br /&gt;
7sbqgiFD0sbvfaf5cvm3y4QGhtJ8W/NbNi/Lr8vJyfw/e/cdX/P1P3D89bnZkb2FREJq1UwoSlBF&lt;br /&gt;
EaPUaGhV1ShaihYdarS1qv22tKXVX1szSqlN0UbNFLGJndiZInvee35/HNXETMjOeT4e96G595zP&lt;br /&gt;
fV+Ne9/3jPfpFxbG1ps3mffUU7yZ46TVXBIT5cLE9etl+evx4wulTkReuFRw4X+dZvHP12O4UnMc&lt;br /&gt;
A9cNZMnxJfzc7Wc8bR9+RPkrrq6MOHeOqMxMXF9/XW7/+PtveO65Ioq+ZEg9nUqoX2ihP49fqB/W&lt;br /&gt;
vtYFek2fHNN+ANWqVUOn0xGRY32R112Llv+1YcMGPvvsM44cOXLPuoqc/92sWbNcH87+/v40b94c&lt;br /&gt;
vV5PSEgILi4u3Lx5M1cicenSJZo2bXrPc94vofnXhx9+yI4dO9i0adMDY/6Xv78/WVlZ7Nu3j8qV&lt;br /&gt;
KxMTE4O/vz8nTpy4E+vu3bupXbs2djmKxvXv35+ZM2fy+++/88orr3DmzBlCQ0P54YcfHvp8RU0l&lt;br /&gt;
Ekq+/BodjblOx4tOTvKORYvkWRRdu95po0/VE7MqBo+xHndGHv65+g/BEcGs6r2qxI9G7NghN2Gs&lt;br /&gt;
W5f787aNvT17Gjaky4kT+B48yLLatXnBwSF3Zysr2fGdd2DYMJlkzZsHlpYYWxlTc2FNjrQ8wqXp&lt;br /&gt;
l/D6yOuxYzyQmEjvU6e4lZ3N5nr1aHd3HP86fFgWmrpxQyYSAQGP/ZwFKaClG7NmLWLTgVd4c9Ng&lt;br /&gt;
fL/3ZXnP5Q/dDtzbxYWR588TFBXFO88+KxdeLltW7hIJy5qW+IX6PbphATxPYbvfe8H9vtnv2rWL&lt;br /&gt;
bt260bp1a+bNm0fFihUxMTHhp59+IigoKFfbFi1aMG3aNDIyMti1axcTJ07E1taWOnXqsGvXLlxc&lt;br /&gt;
XOSW6RyJRH6tWbOGWbNm8dlnn9Gu3aMXjTdq1Ahzc3N27tyJh4cHLi4u+Pj44O/vz7x588jMzGTX&lt;br /&gt;
rl306NEjV79atWrh5+fHkiVLeOWVV1iyZAlmZmb06tXrsWMvDCqRUPIlKDqaLo6OWBsby2HlRYvk&lt;br /&gt;
N/Ac//hj18WiT9Lj0u+/7Y4z9syghmMNXqz5YnGEnWdCyMJTjRrJGk13q2NlRaifH6+GhdHx2DHG&lt;br /&gt;
eXgwxdsbs5wLG42NZSnnpk1hyBAIDZV/T76+2LWwo8pHVYiYFIGdvx12rR5Ssvo+sg0G/nf1Kh+G&lt;br /&gt;
h9PQyorg+vXvv1jSYICvvpInZ9auLc/vfsi3q6LWtq2cNrK/2Z5DQw7Rb3U/2i9uz+ftPmfss2Pv&lt;br /&gt;
28fBxIQAR0cWR0XxjoeHTJC++07+XZey7YFPwsjSqMBHCorKuXPncg3Jnz9/HoPBgPcjFs2uXr0a&lt;br /&gt;
CwsL/vjjj1z1Gf7v//7vnrb+/v5kZmYSFBTE9evX7yQMLVu2ZOfOnbi6ulK9enWcc1R6rVKlCufO&lt;br /&gt;
nbvnWqdPn77nvrNnzzJgwAB69OjBhAkTHv2iARMTE5555hl27tyJp6fnnZj8/f3JyMhg6dKlREVF&lt;br /&gt;
0bJly3v69u/fn7FjxxIZGUlQUBABAQHY2trm6XmLilojoeTZ6ZQUDicnE+hyO0H4+29Z8vE+tSNs&lt;br /&gt;
mtpg6SO/0YTFhLHm9BrGNR+HTivZv3IbN8pBhGnTHjz672Biwvq6dfnM25svr17F7+BBDiQm3tvw&lt;br /&gt;
lVfkB7iJCTRpApMmQXo6XpO8sGtpx6nAU/mqenk8OZlnDx9mwsWLjKpcmV0NG94/iTh2DJo3h7Fj&lt;br /&gt;
4a235ElZJSiJAPDzkwNZ27aBo6UjG/tuZHzz8by77V0mbJ/wwHUT/VxcOJSczLnUVJlIxMfLstlK&lt;br /&gt;
iSeE4Ntvv81135w5c9A07c6uiwcxMpIF0bJzrE+KiIhg7dq197Rt0qQJxsbGzJw5EwcHhzvbJP39&lt;br /&gt;
/QkJCWHnzp33jEZ06tSJkJAQDh48eOe+mJgYli1blqtdSkoK3bt3x8PDI9dOk7zw9/fnn3/+YceO&lt;br /&gt;
HXee39HRkZo1azJz5swHjpIEBgYCMGrUKMLDw3m1BNZPKdnv6kqJEhQdjY2RER1zlsT28YFnn73T&lt;br /&gt;
JjMmk5tbbuZaZDlr7ywqWVfilXp5rEBUTAwGefBl69byG/PD6DSN96tUIdTPDzOdjiaHDjEgLIxr&lt;br /&gt;
GXfViqhTB/75R1542jSoVQvt91XUWloToRec6ncKQ/bDFwxGZmQw9MwZGhw8SLJez56GDfm8WjVM&lt;br /&gt;
797eGRkpz6Pw9ZXrInbuhC++KJHf1o2N5YzEv/UkjHRGTG87nf+98D9m7pnJmxvevO8hZJ0cHamg&lt;br /&gt;
07EiJgaefhrq1oW7hraVkis8PJxu3boxb948Xn31VebNm0e/fv2oc6ds7P0FBASQkpLCCy+8wPff&lt;br /&gt;
f8/UqVNp2rTpPVsxQU6N+Pn5cebMmTvbO0GOSKSkpHDt2rV7PrDHjRuHg4MDL7zwAlOnTmX27Nm0&lt;br /&gt;
aNHinrUPkydPJiwsjB49erBmzRqWLl165xYSEvLQ1+Dv709aWhpXrlzJ9fwtW7bk7NmzeHl54e7u&lt;br /&gt;
fk8/JycnOnTowMqVK7Gzs8u1FbTEeNJtH8V1Q23/LFIGg0E8FRIiBoSFyTuSkoSoUEGIqVNztbsy&lt;br /&gt;
94rYYbxDZETLraGXb10WxlONxZd7vyzqkPNt6VIhQIi9e/PXL0uvF99dvSqcdu8WFn//LUacOSPO&lt;br /&gt;
329r5enTQnTuLJ+kYUNx88NVItgoWJx/7/x9r3s+NVWMPHtWWP79t7DftUt8efmySL/f9tOLF4UY&lt;br /&gt;
O1YICwsh7OyEmDFDiH+35pZg33wjhImJ/FXK6efDPwttsiZGbxl9323CL588Kert3y9/mD5dCEvL&lt;br /&gt;
ey9SypSH7Z86nU6cPn1a9OrVS9ja2gpHR0cxatQokZHjd1Wn04mRI0fe9xo///yzqFGjhrCwsBC1&lt;br /&gt;
a9cWCxcuvHPdu40bN07odDoxe/bsXPc/9dRTwsjISISHh9/T58SJE+K5554TlpaWwsPDQ0ybNk38&lt;br /&gt;
9NNPubZ/DhgwQOh0uvveXn/99VyvY+pd741JSUnC2NhY2NnZ5fq9Xrp0qdDpdGLAgAEP/PtbuXKl&lt;br /&gt;
0DRNDBs27IFtcirq7Z/FnhA8duAqkShSBxMTBcHB4o+4OHnHwoXy1+euf5AHmxwUxzofu/PzqM2j&lt;br /&gt;
hP0Me5GUUbLf6DMzhahWTYguXR7/GreyssTk8HDhtHu30IKDRbsjR8SP16+L2MzM3A3//FOIdu2E&lt;br /&gt;
AHHZdqAIJlhEfhYihF4vYjIyxI/Xr4v2R44ILThYOO7aJT66eFHcvPsasbFC/PKLEJ06CaFpMoH4&lt;br /&gt;
8EMh4uMf/wUUsdOn5a/Qpk33Pjb3n7mCyYhpO6fd89jq6GhBcLAIS06Wv38gs8BSrLwkEnH/vn8o&lt;br /&gt;
+bJ27Vqh0+nEnj178tS+qBMJtdhSyZOgqChcTExo8+/WpIUL5RxAjqG/1HOpJP2TRO3l8oCq2NRY&lt;br /&gt;
FhxawLvN3sXK1Krog86Hn36CixflEQ6Py9bYmEleXozz8GBpVBTLoqMZfOYMg86coZalJU1sbKhq&lt;br /&gt;
bo5HrVpUWLIEIiJI3vE3lj9GkD3Jg/7Zv7G1pQs6IWiVns4PRkb00+uxCA+HAwfk1MWJE7LAxdGj&lt;br /&gt;
ci6mWTNYsECuF7As/FX2Bal6dahcWU5v3D1F/tYzbxGXGscHf32Ah61Hrmmxjg4OWBkZsTImhole&lt;br /&gt;
XvLv4Ndf5YFxilIG/fDDD1StWpVnc0wjlyQqkVAeySAEv8bE0NvFRZZdvnwZgoPlp28OUUujMLI2&lt;br /&gt;
wrGLIwDf7P8GgLebvF3kMedHWhpMnSo/i+vVe/LrWRgZMcjdnUHu7tzIyODP+Hj2JiZyICmJTXFx&lt;br /&gt;
RGdl/df4mcZUbmTMp29nMfpLRwZEbOW5kDW4hYXde2EzM7lo0s8Phg+X20r+PTStFHrUseIft/qY&lt;br /&gt;
iIQIBq8fTG3n2vhW9AXA3MiIbo6OrPg3kejZU261SU6W228VpYxYvnw5x44dY/PmzcyZM6e4w3kg&lt;br /&gt;
lUgoj7Q7IYGrGRn/7dZYskRu93zppTtthBBELYnC+SVnjCyNSM5MZu7+uQz2HYyTpVMxRZ43334L&lt;br /&gt;
0dFQGKXrK5qZ8YqbG6/k+MDPMBjIuF2R0Uynw0ynIzM4k0PNDuEQ8iKOe6eAuR5iYuTx7AaDPCDM&lt;br /&gt;
xqbYCkkVlnbtZIHKqChZzysnTdOYFzCPk9En6f5rdw4OPohzBbllr7eLC0tPnOBUSgq1u3eXO1Q2&lt;br /&gt;
b4YStr9eUZ5E3759sba2ZtCgQQwbNqy4w3kgtWtDeaRlUVFUMTOjmY2NLLSwcCH06AHW/+1lT9qf&lt;br /&gt;
RPqF9Du7NRaELiAxI5ExzcYUV9h5cvOmLPb4xhu5ztoqVGY6HTbGxtgYG9+pP2HqYkq9TfXIjMzk&lt;br /&gt;
RJcT6A0m4OEhD6WqVk3ulSxjSQT8Vzn0r7/u/7i5sTmr+6wmPTudfqv73dnJ8YKDAzZGRqyIjpZ/&lt;br /&gt;
Rw0bPtm8lFKoJk2ahF6vx+FBhdOU+zIYDCQkJPD999/nquBZ0pTcyJQSIctg4LeYGF6+XQ2Of/6B&lt;br /&gt;
s2fvWzvC1N0Uu9Z2ZOoz+WLfF/Sr2++RZY+L25QpkJUFkycXdyRgWcOSupvqknQ4iRM9TmDILPvn&lt;br /&gt;
SLi6yh2c27Y9uE1lm8os7r6YbRe3MecfObxrdru66oqYGLn4ukcP2LABbp+loChK0VGJhPJQ2+Lj&lt;br /&gt;
icvOJvDfceeFC+UKuRxliQ1ZBqKXR+Pa1xXNSGPpsaVcS7rGuObjiinqvDl1Sk5rTJxYcpYa2Da1&lt;br /&gt;
pe7autwKvsWpwFMYssp+MvHvOgnxkLO72ldrzztN3mH89vEcizoGyOmNsNRUTqakyEQiOfnBCy4U&lt;br /&gt;
RSk0KpFQHiooOppalpbUq1BBfttbvlweAGVkdKdN/NZ4smKzcH3FFYMwMHPPTLrV6EZt59rFGPnD&lt;br /&gt;
CQGjR8tNJyNHFnc0udk/b8/Tvz1N3Po4TvY8iSGjbCcTbdvClSvy/LeHmd52OjUca9BvdT8ysjNo&lt;br /&gt;
Z2+PnbGxLE5Vq5ZciKqmNxSlyKlEQnmgVL2eNbGxBP47rbF+Pdy6dd9pjQp1KlChXgXWnl7Lmbgz&lt;br /&gt;
TGiRtxr0xWXjRnnS95dflsjCjzh1caLO2jrc/OMmJ7qfKPAjnUuSli1lpctHDSaYG5uzuPtiTsee&lt;br /&gt;
ZtaeWZjqdHR3cmJFdDQC5OLftWvlAlVFUYqM2rWhPNDGuDiS9fr/dmssXCjPjMhxbkN2Yjaxa2Lx&lt;br /&gt;
muwFwPTd02nt1Zqmle89krekyMyUoxHt2kGXLsUdzYM5dnSk7oa6nOh2giNtjlB3fV1MnU2LO6wC&lt;br /&gt;
Z2UlS0Fs3y53tT5Mfbf6vPfse3y661N6Pd2L3s7O/BwZybGUFOr36CHLkO/cCW3aFE3wBSzsftt+&lt;br /&gt;
FSWfivr3SCUSygMFRUfT2NoaH0tLuT9vyxaYOzdXm9jfYzGkG3AJdCE4IpgD1w+wpd+WYoo4b+bM&lt;br /&gt;
gfBwWLOm5G+EcGjrQIO/G3A84DiHmh2i3qZ6WFYvXYWn8qJtWzk6pNfnmjW7r4ktJ7Ly1EqGrB/C&lt;br /&gt;
tv5/YW9szIroaOr7+oKnp5zeKGWJhJOTE5aWlrzySsk+j0YpPSwtLXFyKpqt9yqRUO7rVlYWG+Pi&lt;br /&gt;
mFG1qrxj2TL5Dt+nT652UUuisG1li7mnOTMWz6ChW0PaV2tfDBHnTVSULD41bJg886k0sGlkg2+I&lt;br /&gt;
L8c7HSe0cSi1ltTCqUvJrs2RX+3aycNRQ0PhmWce3tbCxILvO3/P84ueZ9mxxXR3asZvMTF86u2N&lt;br /&gt;
1qOHrHI5Zw6U4O1yd/P09CQsLIzY2NjiDkUpI5ycnPD0LJpdcyqRUO7r99hYsoSgT85pjS5dIMc+&lt;br /&gt;
8IzrGcT/GU/1H6oTej2UbRe38WvPX+V6ihJqwgR5qndhFJ8qTBbeFviG+BL2Whgnup7A80NPvCZ5&lt;br /&gt;
oTMpPR+WD9O4sSxLsm3boxMJgDbebXi5zsu8/+f7fPPKAX6KjORkSgp1evSAr76S25SbNSv8wAuQ&lt;br /&gt;
p6dnkb3xK0pBKhvvQkqBC4qOppWdHe5mZvJch6NH71lkGb08Gs1Ew7mnMzP2zKCafTVeqvXSA65Y&lt;br /&gt;
/P76S1ZRnDEjVz5UahjbGlNndR28p3lzecZlDjc/TOqZ1OIOq0AYG8viVFvyMSs2q+0sEjMS2Xv8&lt;br /&gt;
W2yNjPgtJkYeae/ionZvKEoRUomEco+ozEz+jI/PvcjS2Rk6dMjdbkkUjl0cuZh9kVWnVjG++XiM&lt;br /&gt;
dI+Y4C4maWkwZIjcIfDGG8UdzePTdBpV3q+C715fshOyOdjwIJemXSq1W0SFEBgyDAghCAiAvXsh&lt;br /&gt;
Li5vfT1sPZjQYgLfhHxJK2tTVsXGyum37t1lIvGwwhSKohSYx0okNE0boWlauKZpaZqmhWia1vgh&lt;br /&gt;
bd00TVuqadoZTdP0mqZ9+YB2vTRNC7t9zaOapnW8Xzul8K2Mjkanabzk7CzLPi5dCv36yTmB21JO&lt;br /&gt;
ppB8OBnXV1yZuWcmFa0r0r9+/2KM+uGmToWrV+GHH0rV1PkD2TxjQ6PDjXAf7k74x+EcqH+AuI1x&lt;br /&gt;
sspjCaNP1XNr5y2uzr3KmSFnOPL8EUJ8QthptZO/jf5mp/lO/jb+m+rv7uYHwwH+6XqKK19cIeV0&lt;br /&gt;
yiNfz3vPvoe7tTuR4Ss4kZLCmdRUWZzq4kU5iqYoSqHL9xoJTdP6AF8AQ4D9wGjgD03Tqgsh7rdS&lt;br /&gt;
yAyIBj653fZ+13wWWAaMBzYC/YA1mqY1FEKcym+MypMJio7mBXt7HE1MZNnh6Oh7a0csjcLY3pjU&lt;br /&gt;
Z1NZ/P1iZjw/AzPjEliQAfl58vnnsgx2jp2rpZ6RpRE+s31we82Nc2+f43jn49g0s8Frihf2be2L&lt;br /&gt;
ba1KdkI2CXsTSNiZwK2dt0g6kITIEmimGpa1LLGsbom1rzWmFU0xsjJCZ65Dn6pHn6Bn9+w0LM+l&lt;br /&gt;
Ej4xlgvvXsDiKQvch7pTcXBFjG3ufbuyMLHg0zaf8uraN7Bo2YVVMTF80Lq1PJtk7Vpo0KDo/wIU&lt;br /&gt;
pZzR8vsNRtO0EOAfIcSo2z9rwBVgjhBi1iP6BgOHhRBj7rp/OWAphOia4759t9ved2e5pmm+QGho&lt;br /&gt;
aCi+vr75eg3Kg0WkpeH9zz8srVWLvq6u8jTFs2dzfbsTBkGIdwgOHR34rtt3LD62mMujL2NlWvKO&lt;br /&gt;
cNbr5Zq71FQ4dAhMy14ZBkBOEcRvjSf8o3CSDiZh+bQllUdWxqWPC8a2hbumOjMmk4RdMmlI2JlA&lt;br /&gt;
8tFkMICpmym2LW2xa2mHbQtbLGtbPnJx6KRJcsNF5GU9yTtvEb08muhfo9FZ6PAY64HHOA+MzHNP&lt;br /&gt;
nxmEgYbfN+R65UF4ujUjtFEj6NsXTp+W/9MVRbnHoUOH8PPzA/ATQjzRP5R8vcNommYC+AHT/r1P&lt;br /&gt;
CCE0TdsOPMkS6WbIUY6c/gC6PcE1lcewPDoaC52Oro6O8mjMdetkkZ8cEnYlkHE5A7OXzFiwfwHj&lt;br /&gt;
mo8rkUkEwDffwMGDsGdP2U0iQB657fCCA/bt7bkVfIurc65y9s2znBt5DscAR5xedML+eXvM3J9s&lt;br /&gt;
1MiQbSD1ZCoJ+xJI3JdIYkgiaWfTADD3Mse2pS2VRlTCtqUtFj4W+R4VCQiQ01D7jxjhH+CIY4Aj&lt;br /&gt;
VWdU5cr/rnDp00tELY2i+vzq2D9nf6ePTtMx/fnpBGz7nFiruoSnpeHdrRsEBcGlS1ClyhO9ZkVR&lt;br /&gt;
Hi6/X1WcACMg6q77o4AnGTR2e8A1S8hRSuVHUHQ0XR0dsTI2lvvx9Xq5PiKHyF8iMfc250ftR3Sa&lt;br /&gt;
jrefebuYon24iAj48ENZLbGU7QR8bJqmYd/GHvs29qRfTSfm1xiil0dzuv9pACyqW2Dta41VAyvM&lt;br /&gt;
q5pj7mmOiZPJnSkGkS0wZBrIjs8mKy6L9Ih00s6mkXo29c6fhlQDGIFVfSvs29nj9bEXtv6ylsiT&lt;br /&gt;
atRIbrrYsAH8/eV9ZpXM8JntQ8WBFTn75lmOPn8Ur6leVPmgCppOJiodfTrSfO//2GvI5LeYaN7r&lt;br /&gt;
2FGu6Vm3Dt4umb+filJWlPo6EqNHj8bW1jbXfYGBgQQGBhZTRKXXieRkjqWk8Im3t7xj0SJ44YVc&lt;br /&gt;
R2NmJ2cTvTIa1zGufHPwG4b6DcXR0rGYIn4wvR769wdHx3sGVMoN88rmcjpgrAeZMZnE/xlP4p5E&lt;br /&gt;
kg4nEbcxDn1S3s7vMHU3lesanrHG9RVXrBtbY93IGiPLgt+ho9NBp07yLJSZM3M/VqF2BRrsaMCl&lt;br /&gt;
Ty4RMTGC5NBkai6uibGVMZqmMavNFJr/8ycLLmu859lOnlC7dq1KJJRyLygoiKCgoFz3JSQkFNj1&lt;br /&gt;
85tIxAJ6wPWu+12ByCeII/Jxr/m///1PrZEoIEHR0dgbG9PBwUGuiwgJkaMSOcSsjMGQamBTvU2k&lt;br /&gt;
hqUyptmYB1yteH3+OezeDTt2gI1NcUdT/EydTXF92RXXl+U/MyEE2beySb+UTvbNbPTJegzpBjQT&lt;br /&gt;
Dc1Ew8TeBGNHY8wqm2FsVbTfNzp3lvU+IiLk6aw5aToNr0leWPlaEdYvjGMdjlFvcz2MrY151uNZ&lt;br /&gt;
6uxfyYlsEy6np+HZrRuMGiUPmrOzK9LXoCglyf2+XOdYI/HE8rURTgiRBYQCz/973+3Fls8De58g&lt;br /&gt;
jn05r3lbu9v3K0VACMGy6Gh6OTtjqtPBzz/LN9+uXXO1i/w5EpvnbJgZMZMBDQZQyaZSMUX8YIcO&lt;br /&gt;
wcSJMH68rBuh3EvTZLJg3cAa+zb2OHV1wqW3C87dnXHq7IRtc1sq1KxQ5EkEyHLZJiZyVOJBnLo4&lt;br /&gt;
UX9bfVKOp3Cs/TGyE+SJn5/7vgSGLKac+FP+7mZnw6ZNRRS5opRPj7Oj/ktgsKZp/TVNqwnMByyB&lt;br /&gt;
XwA0TZuuadrCnB00TauvaVoDwApwvv1zrRxNvgY6aJo2RtO0GpqmTUYu6vzmMeJTHsO+xEQi0tPl&lt;br /&gt;
To3sbDmt0bcvmP837516PpWEXQmEtQ4jJjWGcc3HFWPE95eaKsOuV6/0lcFWJBsbmQBu2PCIdk1s&lt;br /&gt;
qP9nfVJPp3K883EMGQY6eLfAKeMSy6NuYKjkDn5+cnpDUZRCk+9EQgixAngXmAocBuoBLwghYm43&lt;br /&gt;
cQM87up2GDmS4Qv0BQ4h60X8e819t+8fAhwBegDdVA2JorMsKopKpqb429rC1q1w/ToMHJirTeQv&lt;br /&gt;
kRjZGDHVfCq9n+6Nj4NPMUX7YO+9B5cvyxpaZXmXRlnXuTMEB0NKysPb2TSyoe6muiQeSOT0G6cR&lt;br /&gt;
QjDYswapltX45eRa6NYNNm+GjIyiCVxRyqHHqvEnhPhOCOElhLAQQjQTQhzM8djrQog2d7XXCSGM&lt;br /&gt;
7rpVvavNKiFEzdvXrCeE+OPxXpKSX1kGAytiYgh0dUWnafDTT/IrfY61J0IviFoYRUK7BM6mnmVC&lt;br /&gt;
8wnFGPH9bdoE330Hs2dDzZrFHY3yJAIC5Gf/n38+uq1tM1tqLaxF9NJoIqZEMLZ6UwA+ORWM6NoV&lt;br /&gt;
kpLkYhlFUQpFGSgWrDypP+PjicnKoq+LC8TGyi1zr78OOWoAxP8ZT8bVDOZ5z6PTU52o71a/GCO+&lt;br /&gt;
17VrMuSOHeUR4Urp9tRTUL36o6c3/uXSxwXvT725NOUSbE+kgbkgwsSTv21uyhWbanpDUQqNSiQU&lt;br /&gt;
lkVHU8vSkgZWVnJOAO6tHfFzJPqqejZV2MQHLT4ohigfLDNTFuA0MZGr/UvwKeZKPgQEyAWXeS2+&lt;br /&gt;
6/m+Jw6dHDjd/zTDTXzAriGfhsyV0xvr1qlDvBSlkKhEopxL1ev5PTaWvi4uaCCnNbp2lad93pYV&lt;br /&gt;
n0XM7zFsbrgZ/yr+NPdsXmzx3s/YsbJ65W+/yWJGStnQubNcqnP4cN7aazqNmgtroplq1BsTh5FB&lt;br /&gt;
x58JaVzwryOHrEJDCzdgRSmnVCJRzq2PiyNZryfQ1VW+Yx87ds8iy+jl0RiyDfzk9ROTWk0qOmiS&lt;br /&gt;
dQAAIABJREFUpkjvb8kSWQb766+hadPijkYpSP7+cgfymjV572PqZErtoNqk7Ulk3FpzzCu+wFQR&lt;br /&gt;
DPb2anpDUQqJSiTKuWVRUTSxtqaahYUcjahYEdq3z9Um8udIwp4Oo3bt2rTxbvOAKxW9Y8dgyBBZ&lt;br /&gt;
wfLNN4s7GqWgmZhAly6wenX++tm1tKPy6Mq0/SET14R6LDmzgeR2rVUioSiFRCUS5djNrCw237wp&lt;br /&gt;
a0ekp8v1Ea+9Bsb/FSFKPppM0oEkltdczuTWk4vtaOq73boFPXrIY8Hnz1frIsqql16CkyfhzJn8&lt;br /&gt;
9fOe6o1ZZTPGzNZh6fIcK3zS4fhxCA8vnEAVpRxTiUQ5tjImBr0Q9HFxkd/Wbt2SWx9yuDbvGom2&lt;br /&gt;
ifA8PO99d/HR4pGdDYGBEBcHq1aBhUVxR6QUlvbtwdIy/6MSRpZGPP1TTeodh37H3+B94x0IU1M1&lt;br /&gt;
KqEohUAlEuXYwshIOjg44GpqKqc1WrSQe+5uy07K5vqS6/ze4Hc+bvtxiRiNEAJGjIDt22HlSqha&lt;br /&gt;
9dF9lNLLwkIe4pXfRALkFEdMX2s6/2SNlu3K+YZVVCKhKIVAJRLl1JnUVPYlJvKam5s8HWnbtntG&lt;br /&gt;
I6KWRiFSBVGdo0rMaMTMmfDDD7BgAbRtW9zRKEWhRw+5K+fy5fz3bTjzKQw6eP/gTOZXuo7YtQtu&lt;br /&gt;
3iz4IBWlHFOJRDm1MDISO2Njujo6yk9mGxvo0+fO40IIznx9hn3V9zG6++gSMRqxbBm8/z58/DEM&lt;br /&gt;
GFDc0ShFJSBAljt/nFEJn8o2bB1mRv2tLuw380DT6x9+GpiiKPmmEolySC8Ei6OiCHRxwVyvh//7&lt;br /&gt;
P7n1oUKFO20SQxLRndZxvuN52lYt/q/+O3fKAZP+/WHy5OKORilKNjbyRNDHSSQA3IdW5KIPDNs/&lt;br /&gt;
iWNVLBFqekNRCpRKJMqhv+LjuZqRIac1fv8doqPv2T954PMD3LC7Qd/hfYt9NOLkSXjxRbmEY8EC&lt;br /&gt;
tUOjPOrRA3bvhqio/Pd9yc2FOSPA/YIbO6yaoN+8Ue5SUhSlQKhEohxaGBlJTUtLnrG2lnsnW7aE&lt;br /&gt;
2rXvPJ4Rl4Fhg4Hjzx+nrU/xjkacPQvPPw8eHnKHhjrRs3zq2hV0uvwVp/pXDUtLsp+15HIrUzyv&lt;br /&gt;
vYkuNRv++qvgg1SUckolEuVMQnY2q2Njec3VFe30aXkq4l2nXG2ZuQVNr9Hx/Y7FOhpx4QK0aQOO&lt;br /&gt;
jnKXhp1dsYWiFDMnJ2jV6vGnN15ydmb269nYJjpzzKILCSsWF2yAilKOqUSinFkZHU2GwcCrbm7w&lt;br /&gt;
/ffyTI3u3e88npmdSerCVC48cwF/P/9ii/PSJZlEWFrKJCLH0R9KOdWjhxxIiI/Pf9+ezs4cr2Ig&lt;br /&gt;
s7ctsVmvYVi7DQyGgg9SUcohlUiUMwujomhnb08lvR4WLoQ33gAzszuPL/9xORWjK9J4XONii/Ha&lt;br /&gt;
NZlEGBnJD46KFYstFKUEefFFWYxs/fr8961ToQJPWViwYagZOiqQcCuAlD07CjxGRSmPVCJRjpxP&lt;br /&gt;
TWV3QoJcZLl8OSQkyMMqbkvNSuX6vOvcqnQL3xd9iyXGy5dlEpF9exq7cuViCUMpgSpVgmbNHm96&lt;br /&gt;
Q9M0XnJ2Jsg4HtuB9lymF6fm/a/gg1SUckglEuXIoqgobIyMeNHJSS6y7NABvL3vPP79mu9pfLwx&lt;br /&gt;
3qO9i2VtRFgYNG8OmZkyifDyKvIQlBKuRw/YsgUSE/Pft6ezM3HZ2dwa7YFBZ4JunSsGoaY3FOVJ&lt;br /&gt;
qUSinDAIwaLISPq4uGBx5AgcOJBry2d8WjxX5lwh2yqbOm/WKfL49u//79joPXugWrUiD0EpBXr3&lt;br /&gt;
hoyMx6t07WtlhZe5Ob/pblHh+ThSU7qzY/VPBR+kopQzKpEoJ7bevMmljAwGurnBvHlyP2VAwJ3H&lt;br /&gt;
v9z6JW0PtMV9qDtGFYyKNLbt2+V0Ro0asvCUu3uRPr1Sinh6ylGroKD899U0jR5OTvweE8PT8zsg&lt;br /&gt;
0BE/KZ/HiiqKcg+VSJQT869fp36FCjTJyIAlS+RohJFMGK4mXuXi9xcx15tTfXT1R1ypYP36qzyU&lt;br /&gt;
qWVL2LoV7O2L9OmVUigwUB4NExub/749nZ2JysrioIMOm8ohOJ5qxckLJws+SEUpR1QiUQ5cTU9n&lt;br /&gt;
fVwcb7q7o82fLxOIHNMaH2z9gBf3vYhTHyfM3M0ecqWCYzDIMzNeflke8bF2ba4K3YryQL16yd+f&lt;br /&gt;
Vavy37eJjQ0eZmYsj47G563KaMKUXR9tKfggFaUcUYlEOfDjjRtYGhnRz84Ovv1Wnnjl4ABAyNUQ&lt;br /&gt;
rvx6Bedbzni/6/3wCxWQ5GTo2RM+/RSmT4dFi8DEpEieWikDXFxktdPly/PfV6dpBLq4sCI6GrPX&lt;br /&gt;
uuDKVqr87k384xSnUBQFUIlEmZdtMLDgxg36ubhgvXw5xMTAqFGAPOHznc3vMODgAGzb2GLdwLrQ&lt;br /&gt;
44mIkHPc27bJUYgJE9TZGUr+BQbC33/LmiP57uviQlx2NttNTKhY7zjmGbZsmL6h4INUlHJCJRJl&lt;br /&gt;
3Ia4OK5nZjK0YkX48kvo0gWqy3UQQSeCSA5JpkpEFTzHeBZ6LNu3Q+PGckQiJESGoiiPo3t3ee7K&lt;br /&gt;
44xK1LeyopalJcuio7Ht2wYn3U4s/s8cfZa+4ANVlHJAJRJl3Pzr12libU3Dffvg1CkYMwaQxafG&lt;br /&gt;
bx/POyfewaKGBQ4dHQothqws+OADaN8eGjaUWz2ffrrQnk4pB+zs5EFeixblv692e3rj95gYUrt2&lt;br /&gt;
xcuwFKebzmyfu73gA1WUckAlEmXYxbQ0/oiPZ1ilSnI0wtdXbo8AZu+dje6KDp+DPniM9kDTFc78&lt;br /&gt;
QkSEPGzp88/leogtW+QhXIrypF59FY4dk7f8CnRxIcVgYIOjI1bVjciyP0TCVwkIIQo+UEUp41Qi&lt;br /&gt;
UYZ9f/06dsbG9I6JkXsrx4wBTeNq4lVm7pnJ1HNTMXEwwbW/a6E8/2+/QYMGcOMG7NoF48fLo6AV&lt;br /&gt;
pSB06CBPBV38GAd5+lha8oy1NcuiotC6daNe9kpcrrhwLOgxshJFKefU23oZlWEw8FNkJAPc3LD4&lt;br /&gt;
6it5UEGvXgCM3z6eyumV8drmReXRlTGyKNgCVNHRcktnr15yOuPwYWjatECfQlEwMZGLLpcuBf1j&lt;br /&gt;
LG8IdHFh082bxPfogUtSCNddwzj/6Xk1KqEo+aQSiTJqdUwMsVlZDDU1lQWo3n4bTE3ZfnE7y44v&lt;br /&gt;
Y1bELHTmOiqNqFRgzymEfFOvXVuelbFsmSw4ZWdXYE+hKLm8+qoc8frzz/z37ePiQrYQrPb0RPP0&lt;br /&gt;
xKvKHhzDHLnx142CD1RRyjCVSJRR312/TitbW2rOny+/ug0ZQnp2OsM2DqOjQ0fsV9lT+e3KGNsa&lt;br /&gt;
F8jzXbkid2G88gq0ayfXdQYGqq2dSuFq1Ahq1oSFC/Pft6KZGW3s7FgWHQ29e/PMxT+IcA7n4JSD&lt;br /&gt;
BR+oopRhKpEogw4mJrI7IYFR9vayANWwYWBvz7Rd07h06xJTIqYAUGnUk49GpKXBJ5/IN/NDh2Rt&lt;br /&gt;
iKAgcHZ+4ksryiNpmqyvtno13LqV//6Brq4E37rFjZ49MY6NJaPZUWx22ZB8OrnAY1WUskolEmXQ&lt;br /&gt;
V1ev4m1uTtclS+RRiWPHEhYTxozdM/io3kekL0jHfZg7pk6mj/0cQsjFlLVqyURi+HB5DHjXrgX4&lt;br /&gt;
QhQlD/r3l1uMly3Lf98eTk6YaBq/uruDlxedLa8QZxVHyJSQgg9UUcoolUiUMdczMvg1JoaRzs4Y&lt;br /&gt;
ffUVDBqEcHVl2MZhVLGrwsshLyP0As9xj1+A6sABeVpnr15Qty6cOCG3d9raFuALUZQ8qlhRHvz2&lt;br /&gt;
02OcCG5vYkJHB4c70xvu23ey/7kQxCpBZnRmwQerKGWQSiTKmG+vXcNCp2Pg+vWQkADjxrHw6EL+&lt;br /&gt;
vvQ385rNI3JuJJXeroSpS/5HI44ehW7d4JlnICoKNm+G9evvFMpUlGLzxhsQGip/R/Orn6srB5KS&lt;br /&gt;
CHvpJbTYWJ5rZUw22RyffbzgA1WUMkglEmVIql7P99evM9DJCZsZM6B/f2KdLHl367v0q9sP75Xe&lt;br /&gt;
aJqGx7se+bruqVNy9KFBA/nfixfD8eNyH7+ilASdOoGrK/zf/+W/b1cnJxyMjfnF0RGqVqVtWDQ7&lt;br /&gt;
Gu8g9vtY9GmqbLaiPIpKJMqQn27c4FZ2NqO2bYO4OPjoI0ZsGoFBGJhZfybXvrlGpZGV8rQ2QghZ&lt;br /&gt;
RKpbN1nO+sAB+SYdFiZ3ZhgVbOkJRXkiJiZyrcSSJXIBcH6Y6XT0dXVlUVQU2X36YLxmLTaDLDFO&lt;br /&gt;
MubS/10qnIAVpQxRiUQZkW0w8MXVq/R2cMD7k09g4ECWp/zDipMr+C7gO1K+SEFnpnvkaER2Nqxc&lt;br /&gt;
KQtItWwJ58/LBOLsWRg4EIwLZreoohS4wYMhPl4uAs6vgW5uRGZmsuXFFyEujsF2PuyutZtzn59D&lt;br /&gt;
GFSBKkV5GJVIlBErYmKISE9nXHAwJCYSNWoQwzcOp/fTvelq1pUbC27g+b4nJvYm9+1/9SpMnQpV&lt;br /&gt;
q0Lv3mBlBZs2yYWUAwfKkxYVpSR76ilo2xbmzct/34bW1tSvUIGfLS3BxweXjcHE9I3B7LIZsetj&lt;br /&gt;
Cz5YRSlDVCJRBgghmHX5Mi9YW9NgyhTEoEG8fngSZsZmfNfpO8I/CsfUzZRKb+WuG5GdDRs2yC2b&lt;br /&gt;
VarArFnwwgty0dqff0LHjqqglFK6DBsG+/Y93qLLgRUrsj4ujph+/WD1avr06cFxj+Mc/0wtulSU&lt;br /&gt;
h1GJRBmw5eZNjqakMD44GNLTWdbFi83nN/Njlx8xOWVCzIoYvKZ4YWRhhBCwdy+89Ra4u8tqlNeu&lt;br /&gt;
yW9xN27AggXykFBFKY26dJHbQefPz3/fvi4uACzt2BHi42lxLoN/Ov2D7oCOxP2JBRypopQdKpEo&lt;br /&gt;
5YQQTL10iabm5rT++GNuDXudNw9PZVDDQXR6qhMXRl/A8mlLLtVw5f335dRF8+awZo1cnBYaKm9D&lt;br /&gt;
hoC1dXG/GkV5MiYmMGiQXHSZlJS/vk6mpnR1dORnnQ5RvTraihU898ZzXHW4Stj0sMIJWFHKAJVI&lt;br /&gt;
lHLb4+MJSUxk0pYtYGFB32pHcLJ04rOWX/LHBzEk7E7go+s+NGuhY8ECeRrnjh1w+TLMnq1GH5Sy&lt;br /&gt;
Z/BguXNj0aL89x1YsSLHUlI4PHgwrFpF3xrd2dRyE6nrUkkLz+d2EEUpJ1QiUYoJIZgSEUFjExPa&lt;br /&gt;
f/opKzs1YktMCI47F+LjZsmtGRc4YulIvYEO7NwJkZHw/ffQqhXo1P95pYzy8IDu3WHuXDAY8te3&lt;br /&gt;
vb09FU1N+alVK0hKwmLLdrze8CLJPInwL8MLJ2BFKeXUx0kplZoKX++8xZ7ERAI//ZXLRk70r7IV&lt;br /&gt;
411TcU1vyfznr+JmnMngQ9WYPRv8/dXWTaX8GDkSzpyBbdvy189Yp+M1NzeWZWSQ3qIFLF7M0BZD&lt;br /&gt;
Wdt4LZH/F0lWfFbhBKwopZhKJEoBvV6+KQYFyTfIxo3BxlYw+kgEtucMvLNlLh92S6W+awcSN77P&lt;br /&gt;
qnnpVN5xicojK1GhhmVxh68oRa5FC2jYEL7+Ov99X3dzIz47m3VDhsCWLVTJsiQ9MB19lp7r868X&lt;br /&gt;
fLCKUsqp76glTGwsHDsmS1AfOyZvJ05Aerp83McHmjWDJiNv8q1HAku+ncfRp2zY2dSaw28sxtxM&lt;br /&gt;
x4nR5zG2NcZrklexvhZFKS6aBqNGySPGz5yBGjXy3re6pSXNbWz4sWZNegOsWMHggMFsqLcB46+M&lt;br /&gt;
8Rjrgc5UfQdTlH+pfw1FTAiZLISEyJXlkyfLktNNm4KjIzg7w/PPw4QJci983bowbRps3w7R0XDu&lt;br /&gt;
HPyyULC3VjgtUlLouOo3hjyfwq+9VuBk6UTcljhiV8dS7ctqGNuoPFEpv15+GVxcYM6c/Pcd6u7O&lt;br /&gt;
tpQUzr38MixeTKsqrTje5ThatEZ0UHTBB6sopZj6pCkgQsjtZjExMlGIipL1Ga5evfeWmvpfPzc3&lt;br /&gt;
OcpQq5bcA1+9ukwefHwevKbht5gYDicn8+enU/m5AbzcfxbPejyLPk3PubfOYdfGDpc+LkXzwhWl&lt;br /&gt;
hDIzg+HDYeZMmDIFnJzy3reXszPvnD/P94GBzA4IQDt7lv49+rNv2T6MZhrh2t8VTVVrUxRAJRJ3&lt;br /&gt;
ZGfLLWPJyZCYKJOCu2//3h8f/1/CEBv7339n3bUOy9gYKlWSt8qV5emZlSvLVeU+PlCtWv5rN2QZ&lt;br /&gt;
DEwMD6ft5XAaHN3Pwq878UvT0QBcmnqJjCsZ1N1QV73JKQowYoRMJL77Dj7+OO/9zI2MeN3NjZ+B&lt;br /&gt;
T1xdsfj5Z3p/9gkB7QJo9l0z4rfF49DeodDiVpTSRBOidB5Io2maLxDapk0otra+6PVyq5deT67/&lt;br /&gt;
/vfP7GzIyJBrDf695fz5UdvEjIzAxkZ+8Nvby283zs7yz39vOX92cZG3gt5m+e21a7x99iyHBg9m&lt;br /&gt;
XdMMxvwUhpWpFUmHkwhtHIrXZC+8PvIq2CdVlFLsrbfg11/h0iWwzMfa43OpqVTfv5+F+/fT/6uv&lt;br /&gt;
4PJlvtw/B6teVtSvUZ8mfzUpvKAVpZAdOnQIPz8/AD8hxKEnuVapH5FITZVDmDqd/LA3NpZ/Ghn9&lt;br /&gt;
d59OJ+83N899MzO792dr6/9u/yYO1tby8eL+kn8rK4vJ4eG89Pc2srMv8/rcc1iZWmHINnBm0Bkq&lt;br /&gt;
1K6A5zjP4g1SUUqYMWNkCfiFC+VZHHn1lKUl7eztmdesGf3Hj4etWxn8/GD6+vel+q/VST6ajFV9&lt;br /&gt;
q8ILXFFKiVKfSHz7bfmpzvjZpUskpaXwxXc/kLTkZzzsqwBw5fMrJB9JxjfEV60mV5S7VK0KL70k&lt;br /&gt;
K7kOHpy/eirD3d3pHh/PwYAAGv30E9adOvH0a08T/Uc0Fz+/SL0l9QovcEUpJdSnTilxMS2N/125&lt;br /&gt;
xPily0jp3pKn2/cDIPloMhGTIvAc54lNY5tijlJRSqYJE+DiRTnFkR9dnJzwMjfn64EDYd06iI3l&lt;br /&gt;
7eZv83uT34lbHkfGtYzCCVhRShGVSJQSLx38C8ebcQzc8xe1vl4GgCHDQNirYVjWssRrslfxBqgo&lt;br /&gt;
JZivL3TqBJ99lr+y2UaaxluVKvGroyOR9vaweDGVbCph1d+KNJM0Ln99ufCCVpRSQiUSpcD4Q2s4&lt;br /&gt;
oq/A3Lnf4vnLcrlgAwj/OJzU06nUWlwLnZn6X6koDzNxIoSFwerV+ev3hpsbpprG/Pfek4fVCMGo&lt;br /&gt;
tqNY57uOK/OvkJ2UXTgBK0opoT59SrhVZzbw1fU02oYe5CU/P7TmzQG4ue0mV2ZdwftTb6zqqQVf&lt;br /&gt;
ivIoTZtC27bw6aey7kte2ZmY8JqbG/MaNSLj4kXYuZM6LnW42ecmIkVw48cbhRe0opQCKpEowf4K&lt;br /&gt;
/4u++9YgzJ2Yu3kzRtOmA5AZlUnYq2HYt7fH412PYo5SUUqPiRNlxdh16/LXb2TlykQDQf36wfz5&lt;br /&gt;
AAzvOpw/6/zJuS/OYcjO5zGjilKGqESihNp3ZR+d14xA7/Ey761YSc0v/wdmZgiDIKx/GAC1FtVC&lt;br /&gt;
06nCU4qSVy1bQps2sjhVftZK1LC0pLOjI7N790asWgUxMbSq0oqz3c+iu6Yj5reYwgtaUUo4lUiU&lt;br /&gt;
QHsu76HD0gDsqozD59p1JtasCfXkNrNLn1wifls8tRbXwtTVtJgjVZTS59NP5WF4K1bkr997Hh6c&lt;br /&gt;
tLBgc5Mm8MsvaJrGkFeHEOodyslpJymtxf0U5UmpRKKE2XJ+C+0Wt8O70uvccPDmxz17MH/nHQDi&lt;br /&gt;
NsURMSUCr6leOLRT5XkV5XE0awYBATBpkqx4m1f+trY0sbbm8+HDZYUrvZ52VdtxpOsRdMd13Npx&lt;br /&gt;
q/CCVpQSTCUSJcivJ36la1BXWnh357xLe4Zv306LadNApyPtQhph/cJw7OxIlQ+qFHeoilKqffIJ&lt;br /&gt;
nD0LixfnvY+mabzn6cmOihU5YGoKGzeiaRp9hvXhvOt5jkw8UngBK0oJphKJEuKH0B8IXBVIrzov&lt;br /&gt;
k2TWA5ebN5nRoQM4OpKdkM3xLscxcTKh5qKaal2Eojyhhg2hVy85KpGWlvd+Lzo54WNhwcwRI+6c&lt;br /&gt;
Tx5QPYDdXXej7dFI2JdQSBErSsmlEoliJoTgs52fMXTDUN565i1qa93Zb2fH4rQ0rFu0wJBt4GSf&lt;br /&gt;
k2TeyKTuhrqY2JkUd8iKUiZMmwaRkfD113nvY6RpjPfwYHWdOpw6fx5OnkTTNLqN6kaEcwRHPlCj&lt;br /&gt;
Ekr5oxKJYpSalUq/1f34KPgjprSewmsO/ZhsZc34kydp/vrrCCG4MOYC8dvjqb2yNpY18nF0oaIo&lt;br /&gt;
D+XjIw/xmj4dYvKx6aK/mxuVzcyYNmgQzJ0LQLfa3djReQdihyDxYGIhRawoJZNKJIrJlYQr+P/s&lt;br /&gt;
z9oza1nRcwXvVOlPn/Bw6kVGMnnQINA0rnx+hWtzr1H92+o4tFWLKxWloE2cKP/85JO89zHV6Rhf&lt;br /&gt;
pQpBzZtzbvt2iItDp+noOKojlx0vc/TDo4UTrKKUUI+VSGiaNkLTtHBN09I0TQvRNK3xI9q31jQt&lt;br /&gt;
VNO0dE3Tzmqa9tpdj7+maZpB0zT97T8NmqalPk5spcHeK3tpvKAxsamx7Bm4h56V2zN49WpibGxY&lt;br /&gt;
0aoVppaWRC6O5OL4i1SZWAX3oe7FHbKilElOTvDBB3ITRlhY3vu94eaGq4kJ03v3hu++A6Bn3Z4E&lt;br /&gt;
dwxGv1VP0pGkQopYUUqefCcSmqb1Ab4AJgENgaPAH5qmOT2gvRewAfgTqA98DfyoaVq7u5omAG45&lt;br /&gt;
bmVua4IQgm/2f0PrX1pT3bE6BwYfoIFDbeZPn84KX19+dHOjmocHsetiOTPwDG5vuOE1xau4w1aU&lt;br /&gt;
Mm3UKPD0hHfeyXvpbHMjI96rUoXFbdtyYcUKSEvDSGdEx7EduWZ/jdD3Qws3aEUpQR5nRGI08L0Q&lt;br /&gt;
YpEQ4jTwJpAKDHxA+2HARSHEOCHEGSHEt8Bvt6+TkxBCxAghom/fylSpuOiUaDoHdebtzW8z1G8o&lt;br /&gt;
2/tvx8Xckb3vvceo559nhBD08vXl5tabnOx1EsdujlSfXx1NUzs0FKUwmZvDV1/B1q35K539prs7&lt;br /&gt;
zsbGTOnSBRYuBKBn/Z7s6bwHtkDyieRCilhRSpZ8JRKappkAfsjRBUB++gPbgWYP6Nb09uM5/XGf&lt;br /&gt;
9laapkVomnZZ07Q1mqbVzk9sJdnmc5upO68uB64dYEPgBuZ2moupzoRr48bxUsuWNAW+bNWK+OB4&lt;br /&gt;
Trx4Avt29tReVhudsVrCoihFoXNn6NABRo+G9PS89bEwMuKjatVY0q4dp5YtA70enaajxwc9iLSN&lt;br /&gt;
ZO+EvYUbtKKUEPn9pHICjICou+6PQk5H3I/bA9rbaJpmdvvnM8gRja5Av9tx7dU0rVQvDkjJTGHk&lt;br /&gt;
5pF0WtYJv4p+HB92nIDqASAEae++Sw8fH4xtbVnZqhXJ225xvNNxbP1tefq3p9GZqiRCUYqKpslR&lt;br /&gt;
iatXYcaMvPd7o2JFPHU6JrVpc+d88rY123L4xcMYbzIm4ZiqK6GUfSXi00oIESKEWCKEOCaE2AX0&lt;br /&gt;
AGKAocUc2mNbd2Ydtb+rzYJDC/i6w9ds7LsRVytXEAL92LG8YmvLiRo1WNOkCUZ/JHK863Hs29pT&lt;br /&gt;
Z20djMyNijt8RSl3atSAcePkdtAzZ/LWx0yn4+Pq1fmtdWsO/fLLnZPAek3uxQ27G+weubvwAlaU&lt;br /&gt;
EsI4n+1jAT3getf9rkDkA/pEPqB9ohAi434dhBDZmqYdBnweFdDo0aOxtbXNdV9gYCCBgYGP6loo&lt;br /&gt;
LidcZuTmkaw9s5YOPh0Ifi2YqvZV5YMGA7zzDu/p9azx9+f3unVx/y2ZE4PP4PSik5zOUCMRilJs&lt;br /&gt;
PvwQli+HN9+Ev/6SIxWP0t/Vlc/PnGFcmzZsW78erVs3Gnk1Ys2ra2g7py3RO6NxaelS+MErygME&lt;br /&gt;
BQURFBSU676EhAIcLRNC5OsGhABf5/hZA64A7z2g/Qzg6F33LQM2PeQ5dEAYMPshbXwBERoaKkqC&lt;br /&gt;
lMwUMX3XdGH5maVw/8JdrDy5UhgMhv8aZGYK8eqr4otevQTBwWLu5csiYlqECCZYnB56WhiyDQ++&lt;br /&gt;
uKIoRWbrViFAiJ9/znuftTExguBgsalvXyFu/7s/E31G/Oj2o1hXf13u9wJFKQFCQ0MFIABfkc88&lt;br /&gt;
4O7b43z9/RIYrGlaf03TagLzAUvgFwBN06ZrmrYwR/v5QFVN02ZqmlZD07ThQM/b1+F2n4maprXT&lt;br /&gt;
NM1b07SGwFLAE/jxMeIrUln6LOYfnI/PHB8mBk9ksO9gwkaE0bN2z/92XCQnQ48eLLh1i7HDh/O+&lt;br /&gt;
mwdtJ6cQ/kE4XpO9qD6vOpqR2p2hKCVBu3bQrx+MGQM3buStTxdHR1oKwXtt25K9aRMA1Z2rc3Xo&lt;br /&gt;
VayPWnNl7ZVCjFhRile+EwkhxArgXWAqcBioB7wg/tuu6QZ45GgfAQQAbYEjyG2fbwghcu7ksAd+&lt;br /&gt;
AE4BGwEroJmQ20tLJIMwEHQ8iFrf1mL4xuG08W7D6RGn+arDV9iY2fzX8Pp1aNWKIIOBoaNH8465&lt;br /&gt;
K72GJhK1JIqai2riNclLbfFUlBLm66/BxEROceSltoSmacz29eWktze/bNx4p9PgMYM57nWcw2MO&lt;br /&gt;
Iwx5LFKhKKXMY03ICyG+E0J4CSEshBDNhBAHczz2uhCizV3tdwoh/G63f0oIsfiux8cIIbxvP+4u&lt;br /&gt;
hOgihDj2eC+pcKVkpvDdge+o+U1N+q7uS23n2hx58whLeiyhmkO13I1DQ6FpU5ZWq8Yr773H2GsO&lt;br /&gt;
9OoZT2pYKg3+aoDbqw/a6KIoSnFydIT582Vdibumlh+osa0tfYEP27Yl4fffAXC3cUeboGEbbsuh&lt;br /&gt;
+YcKL2BFKUZqZV8eXU+6zod/fojnV568vfltGrg1IOSNENYFrqOea717OyxaBM2b80tAAP3fHM6s&lt;br /&gt;
9VYEDIjHoqoFjQ43wra57b19FEUpMbp3h5dfhrfflgOLeTGrWTNSrKyYeugQZGcDMPiNwRyud5jL&lt;br /&gt;
ky6jz9AXYsSKUjxUIvEQ6dnp/HbqN7oGdaXKV1WYu38uA+oP4MLIC6zotYImlZvc2ylV98YWAAAg&lt;br /&gt;
AElEQVQtTY6HvvYaX376Ke+80IfFk83w+18ynhM8qf9Xfcwqmd3bT1GUEuebb8DMDAYMuLOz86Eq&lt;br /&gt;
mZnxoZUVc1q3JuzXXwEwMzaj1oxa2MTZsGnKpsINWFGKgUok7pJtyGbnpZ28ueFNKn5RkV4rexGd&lt;br /&gt;
Es3XHb7m6pirfPHCF3jZed2/88mT8MwzGBYt4t3Vq/ktsxHL3zSiymkD9bbUo+qnVVW1SkUpRRwd&lt;br /&gt;
ZfXrbdtgzpy89RnTtCleycmMjI9HpKUB0KFjB061PoX2tUbCDVWkSilb1KcaEJcax5JjSwhcFYjz&lt;br /&gt;
5860+qUVm89vZkTjEZwecZqQQSEMbzw89yLKnPR6+Pxz8PMjxcSEASu2UWGOPdM+BHdfWxodboRD&lt;br /&gt;
e3UMuKKURu3ayQO9JkyAY3lYuWWm0/F11apsr1OH5UuW3Lm/w7wOaHqN9UPXF2K0ilL08luQqtQT&lt;br /&gt;
QhB+K5x9V/ax98pe9l7dy7GoYxiEAb+Kfox8ZiSdq3fGz90PnZaHPOvECRgyBEJCuPz+B3xm1Ile&lt;br /&gt;
fTOpYGpErWXVcXnZRe3KUJRSbvp0CA6GXr3g4EGwtn54+0716tFz6VLecXbmhWvXcKhUiadqPMWO&lt;br /&gt;
QTuo9l01TgWfovZzZeY4IaWc00Rez80tYTRN8wVCQ0ND8fX1vefx9Ox0IpMjOX/zPGExYZyOPU1Y&lt;br /&gt;
bBgnY04SnRINQA3HGjzr8SwtPFvQ0acjFa0r5j2A5GT45BP48kuoVo2tY37g3DzB00cEpoGONJpT&lt;br /&gt;
A1Mn0wJ6tYqiFLezZ8HPD7p2hSVLHl318npUFLUOHqT3jRssGDQIgOTUZNZUW4NmrRF4OhCdTg0K&lt;br /&gt;
K8Xj0KFD+Pn5AfgJIZ5oS1GpH5GY+NdEKlyoQHp2OokZiUSlRHEj6QYJGf/NQ5oamfKUw1PUcq7F&lt;br /&gt;
UL+hPFPpGZpWboqTpVP+nzArCxYsgKlTISGBxLdnsOl0C9yGpuFSzYgqG2rgHaDK4SpKWVO9uvyn&lt;br /&gt;
HxgILVvC0EecBOTu6sqM+HiG+/jwysGDtGrUCCtLK+xm2GE1wIqNszbSZUKXogleUQpRqR+RaDip&lt;br /&gt;
IU7VnDA3NsfK1Ao3K7dcN287b7ztvTHWPWHOZDDAb7/JYvwXLpDx0hCOmr9BUlAKcQ6Q+J4Tr4+u&lt;br /&gt;
jZFaTKkoZdqIETKh+OsvaNHi4W0NmZm0WrSI6/b2HOvalQomJgD80OwHXE640Px8c5xdnYsgakXJ&lt;br /&gt;
rSBHJEp9IvGgqY0Ck50Nq1bJxZShoaS07M8l+6FEbsok1Qy29jem78d1aOpqV3gxKIpSYmRlQfv2&lt;br /&gt;
cpPW/v3g5fXw9ud37KBeejpvZGQwt1s3AC6FXSKsfhgXOl1gxJoRhR+0otylIBMJ9fX5QeLjYdYs&lt;br /&gt;
qFoV8XIg8dn1OdYkmAM7X+fMviy+HwTBf1dkxpxmKolQlHLExARWrgQrK+jWTS6Xehif1q2Zefgw&lt;br /&gt;
39jaEnzpEgBValUhZUgKNdbXYOvmrUUQtaIUnlK/RqJAGQywcycsWwZLl5KW5UTk02OJ0jck/aiB&lt;br /&gt;
uBrGzP8gm5tdLJlfuwaNbR6wHVRRlDLNyQnWr4emTeHVV+Wg5cPWTY54/XVWr1zJaykpHHV3x97E&lt;br /&gt;
hBdnv8iaVWuIHR7LzRM3caigtogrpZMakRBCnokxdix4epLxXC+ur8rksNNS/slayJULvpxrbsG4&lt;br /&gt;
ORpv/gg9R1Tnn2f8VBKhKOXc00/L7xxr18LHHz+8rc7NjYUVKpBkMDBk1y6EEBiZG/H/7d13eFRV&lt;br /&gt;
3sDx729KksmkkRAIQXoiTenNgiiiqKuuuq699/auiO9aHt+1LLZ1d1lxrWsXVCysIlYECyICaijS&lt;br /&gt;
ROk9Ib1Mpp73jzuRGBNIwiST8vs8z3nuzL1nzj1znkB+Oefccwa9MIi+m/vy1KSnmqfSSjWB9hlI&lt;br /&gt;
7Nhh7YVxySWYzEMoGXExm5728Z33cb7hLdYXX4Y/uwcrpqZy1izD9Td5OOF33fh5zBiuzczEoY9s&lt;br /&gt;
KaWA006z1ph44AFrBcz96X755fznk09422bjxc2bAcg+OZuyP5Yx9JWh/Hfef5u+wko1gbY/tJGb&lt;br /&gt;
C8uXw4oVsHw5/qVrKfnZSQkDKU44mlLvJQRx4IhzkDoxlfLjXMwYWMEr3r3E2mxcn9mV/+3WjfQY&lt;br /&gt;
XRNCKfVbt90GP/8MV14Jyclwxhl1ZBThj5Mnc8Vzz/E/48czplMnBrjdTHx2Ip/M/4QtN25h65Kt&lt;br /&gt;
dE/p3qz1V+pgtf5A4qOPYNkya7OsoiLM1h34Nubj21aOb2clnrIkKuhOha03FfZz8fmtIQlnmp2k&lt;br /&gt;
o1LocWQy/lEu3upezgt79/CTJ5fexHF/r15ck5lJsqP1N5FSqumIWFuOFxfDuefChx/C8cfXkbl3&lt;br /&gt;
bx7r0oUl27Zxtt3O0rFjSUh2ctjzh5FwZgLTbp7GIy8+gt1mb9bvoNTBaPWPf87gDg4li5DEEiAB&lt;br /&gt;
v0mi+oiN2A2u3k7iD08hvn887v5uEkYmsDnT8GFBAR8WFPBVURFOm42z09O5MiODY1JSsOmy1kqp&lt;br /&gt;
BvD5rFUvFy6E+fNhdC2bAwMQCrHuggsYeemlnJqRwWtDhiAifHHhF3je8vDDiz9w24W3NWvdVfuj&lt;br /&gt;
60iwL5CYddqbHN5jMDaXHXuCnZiMmF+nzBiMXfixooLvSktZXFLCRwUFbK6sxGWzcXyHDpyWlsa5&lt;br /&gt;
nTpp74NS6qCUl8PEibBmjfUA2GGH1ZFx507evPZazr31Vh7t04ebu3UjUBbg076fstG+kf7z+zM+&lt;br /&gt;
e3yz1l21L7pEdjU97+1D1tBsvKEQhYEAWyor2er1sqWyiC2Vlaz8oZyc0lLKQyEA+rpcnJqWximp&lt;br /&gt;
qRybkoLLrl2ISqnIcLvh/ffhuOOsXUPnz4cBte3NlZnJOVdcwbczZzL53HMZ4HZzQmoqY94YQ+wx&lt;br /&gt;
scy6YRZ9Z/Wla1LXZv8OSjVUq++RcD37LN6sLEI1rifa7fSIi6N/fDwjExMZkZjIsMRE7XVQSjW5&lt;br /&gt;
3FwrkNixA+bOhboW3w3eeCOn9uzJ4pEjWTJqFIfGx7P6L6vZ88Aenr/1eV58+EVi7DrRW0WeDm2w&lt;br /&gt;
L5CY/MEHHDpkCPE2G8kOBz3i4ugRG0uyw6HbdyuloqagAE4+GdatsyZgHnVULZm8XoonTGDM9dcT&lt;br /&gt;
7NmTRSNGkGZ38tXYr8hdlctXT33FtAunNXvdVdunS2RXc2FGBtdmZnJxRgand+zI4IQEUpxODSKU&lt;br /&gt;
UlGVmgrz5lm9ESeeCJ9+Wkum2FiSX3mF96dMoaiwkN+vWkUlIUa/NZoO9g4ccs8hPLn4yWavu1IN&lt;br /&gt;
0eoDCaWUaqkSE63eiGOPhVNPhf/WtuZUr170mTqV9//8Z5YVFnLR2rU4MmMY+tZQRmwaQc7tOXy2&lt;br /&gt;
6bPmrrpS9aaBhFJKNSGXC955B848E84+29oL8DcjyiefzKirruKNv/yF2Xl5XLluHSnHd6DnlJ5c&lt;br /&gt;
tOAiHrr3IVbuWRmV+it1IBpIKKVUE4uJsfbluPNOuP12axVMn69Gpltu4bS+fZnx0ENM37OH69av&lt;br /&gt;
p/sdPUg5PYVb37yVK/9xJZsKN0Wl/krtjwYSSinVDGw2a0+O6dPh1VdhwgTYu7dahvASmecFArzw&lt;br /&gt;
2GM8t2sXkzZsYOD0gSRnJXPbi7dx1lNnkVueG7XvoFRtNJBQSqlmdNFF8Pnn1tMco0fDDz9Uuxgb&lt;br /&gt;
C++8w6U//8zTL7zA4zt2cGfuFobMGUJnW2eufe5aTn/pdEq9pVGrv1I1aSChlFLN7MgjYelSSEiA&lt;br /&gt;
UaPg2WerzZtIToaPPuKaL7/k3zNn8s/t27k3uJNB7w6i365+nPrMqZw18yy8AW9Uv4NSVTSQUEqp&lt;br /&gt;
KOjZExYvhksugWuugQsvhNKqjoauXWH+fG567z0enTWLR7ZtY3Lqbvq/OoCjVx/NwKcH8oc3/kBl&lt;br /&gt;
oDKaX0EpQAMJpZSKGpcLnnkGXn8d5syB4cNhxYrwxawsmDePm2fOZPqrrzJ9926uzNpNz39nccbi&lt;br /&gt;
M0h/KZ3TXj+Ncl95VL+DUhpIKKVUlJ13HuTkWHt1jBoFDz8MgQDWRh3z53PR7Nm8/+STfFFYyPlj&lt;br /&gt;
cul0T3cunXcpnWZ24uRXT9Y5EyqqNJBQSqkWIDsbvvkGJk2Cu+6CI46A1auBQYPgyy+ZuHAhnz/4&lt;br /&gt;
IBvKyjjrpFySbu3C1R9eTZfZXThh+gkUVRZF+yuodkoDCaWUaiHi4uBvf4NFi6wtyYcNgwcfhEB2&lt;br /&gt;
f1iwgJE//cTXkyYR8PmY8PtcAtekcf3s68l6P4vjXj6OnaU7o/0VVDukgYRSSrUwo0dbQx233gp/&lt;br /&gt;
+QuMGAELd2fBokVkA9+edx5j/H5OPC+fnVclcdXsqxj5/khGPzeaZbuWRbv6qp3RQEIppVqguDir&lt;br /&gt;
N2LpUmt5ibFj4aL/zWDX61/QYdAg5kycyP/t2smFF5Tw7dUuLnj/Aq786ErGPj+W2etmR7v6qh3R&lt;br /&gt;
QEIppVqw4cOtuRPPPw9z58KhI5L4x3EfYCbdyl8vvJDZcz/h/ot9vHmLk2PnHcu/PvgX58w4h79/&lt;br /&gt;
/XfMbzb1UCryNJBQSqkWzmaDK66A9eut4x132cl++2EW3DCT0x57jG+nTGHx2cK9f4Xeyw5l5rtv&lt;br /&gt;
cP9793PZ7Mv08VDV5DSQUEqpViIlBaZNs5bVHjYMxj15Lmd3WUTXFT/xzZlnctRwDzdPNcTs6MAb&lt;br /&gt;
b8xi4VcLGfHsCN05VDUpDSSUUqqV6d8fZs2CJUuguOdguud+xzf+o3jglFN4etMH3P+Mg/ygg6ef&lt;br /&gt;
f57Bq4cy6tlRPP3d0zrUoZqEBhJKKdVKjRoF8+bBG5+mcVe/WVzKSwyZ+gzvTL6CRY/D0oFw3VPX&lt;br /&gt;
8MDKp7jxvRs55+1zKPQURrvaqo3RQEIppVq5CRPg60XCVQsu5cajV/Ljjgz+fcZ4uvZewH9vdDBk&lt;br /&gt;
Vi9emjOX71asZsCTA5i1Zla0q6zaEA0klFKqjRg7Fl7+sidJ333OjMH/4OwZj/DnZ85jzsWluLbb&lt;br /&gt;
efSJJxlf+GfOfuscznrjLHaV7op2lVUboIGEUkq1MUOH27hk+WRKlqyjMPsoHn35dMQ8wZZM4eoH&lt;br /&gt;
hjHl60/5dqeh3xP9eS7nOUImFO0qq1ZMAwmllGqjMkcdwqA1b+D74FOOj1nF9WuOZ2WXHxiy0Ma0&lt;br /&gt;
KTdzdNmLXP3FVEY9O4oFWxZEu7qqldJAQiml2riYUyaQsnkFzn8+wg2e+zjWewEeWwF/fqAD985+&lt;br /&gt;
kt1yA+Pe+RNnvfkHNhRsiHZ1VSujgYRSSrUHMTEweTKOLRtJuOc6zvddTnbMI4xe6ue5m3pz2bJH&lt;br /&gt;
+Th4Moe+ehlXzZqk8ydUvWkgoZRS7UlSEtx9N7ZNG+l6yyAmyPlkB9/g4hkhpt+YxfjdU3jBMZTM&lt;br /&gt;
V29i9P2TmbdkJ7r8hNofDSSUUqo9SkuDhx/GsX09faZ054jUSfQt/JK7HoTpt3TnyL03sXTU8Zzw&lt;br /&gt;
48MkXncHl/xpM3Pngtcb7YqrlkZa60pnIjIM+P77779n2LBh0a6OUkq1bl4vvPYaRfe9y6Yt4ylm&lt;br /&gt;
MMU9fEy7XPj8GCcU5UBOHs53JjIucxwTjhfGj7eW6rbbo1151VA5OTkMHz4cYLgxJudgytJAQiml&lt;br /&gt;
1D7GwIIFFE6Zw5bPulFkBuPtVMLMiw0zJiYTkHKcu1ZiPuhB4J3TSXYlMG4cjB8P48bBYYeBwxHt&lt;br /&gt;
L6EORAMJNJBQSqkml59P0X3vsOWFAIXl/bA5ilgzvpiHLktia5cO4N1Lp7w8UhYezsaXjiTgteF2&lt;br /&gt;
W0t3H3GElcaMgY4do/1FVE0aSKCBhFJKNRtjKHtnOTumrGLPik4YI5hOq3n3jzb+c0p3PPEdcPgK&lt;br /&gt;
6FtZyYBtg6icP4AlX9vIzbU+np0No0fD0KFWGjIEOnSI7ldq7zSQQAMJpZSKBn++j133LGXn9BIq&lt;br /&gt;
S+KJYweezB+YfkE8bx7Tn/LEdGzBSgbYyznVnc0hG/qy7utYvv0WVq4Ej8cqp2fPfYHF4MEwcKB1&lt;br /&gt;
TudbNA8NJNBAQimlosmEDEULitg9bT15H5QR8gvJrMTXcRVzfhfHq+MHsrl7fwA6mjLGJSdxbmZf&lt;br /&gt;
DtmbysYVTpYt45dUGN6QNC7O2iJ9wAArDRwI/fpZAUZsbPS+a1ukgQQaSCilVEsRKA2Q93YeuTN2&lt;br /&gt;
UvhFCYQg2fUTcSzghyHlzBqfxedDhpDXsSsYQw+7l5M6duJ3nbozOjEJ/94YVq+GNWv41bG42Crf&lt;br /&gt;
ZoNu3SAry0p9+ux73bs3uN3R/f6tkQYSaCChlFItkT/fz9739pL3dh6FnxZg/BDfoZhE2xKMWcri&lt;br /&gt;
kXF8NGownw0bSkGKNQszI1TJEWkdOb5jF8YkJTHI7cYhNnbtgh9/hA0b4OefrVT1uqxs3z27dLEC&lt;br /&gt;
jW7doHv3fa+rUkaGFYyofTSQQAMJpZRq6QLFAQrnFZL/YT4FHxbg2+3DFmdIzMwnJrAEf3AZ67KE&lt;br /&gt;
bw7vx8LDBrCyTxYBh5PYYIBDJcioTl0Y0SGNIQkJHJ6QgDs8gcIYyM3dF1Rs2ADbtllp61brWDUX&lt;br /&gt;
A6zHUbt2tVLnzlZgUT1Vnevc2RpeaQ80kEADCaWUak2MMZQtL6NwbiFFXxZRvLCYYGkQW6wQn1VJ&lt;br /&gt;
KP4HQpVfkevaw4bu3ViWnc3yPn1Y07MnQbsdMYaelRUMc7kY1LET/dLT6e92k+1yEVdjhqYxUFCw&lt;br /&gt;
L7ioCjB2796X9uyxgpFQjR3Uk5IgNdVa+LM+x5QU6zOxsSDSjA16kCIZSOiyIUoppZqciJA4NJHE&lt;br /&gt;
oYl0v707oUCI8hXlFC0osgKLr9wECkaQBByRH8MRuQV4vltNhfdDdsVsJz85lR1dsljZpw+P9+hB&lt;br /&gt;
3t69ANhCIXqUl9I/aBgQF0dWaiq9MjPpnZrKgEFxDBlS95hGMAh791pBRVWAkZtrBSH5+dZxzx5Y&lt;br /&gt;
u3bf+4qK2styOKyAIjHROtb2OjER4uOt5HJZaX+v4+LA6dyXWurwjPZIKKWUijoTMlSsq6D0u9Jf&lt;br /&gt;
UtnyMkKeEAjEZcfh7+WlLGETxeYH8oJr2BlbQJm7I6UdurO7Uw/Wd+vO1s6dCYZ7KGyhEF1LSujt&lt;br /&gt;
8dA7FKKXw0Evt5ueqalkZmSQ2bUrcQ18HMTjsQKKqmCjuBhKS6GkxEoHeu3xWMFIY/Yssdl+HVjs&lt;br /&gt;
L4lYyWar/VhensN33+nQhgYSSinVhoUCISrWWsFFWU4Z5avLKV9Tjn+PHwBxCM4+Try9vBR2LiAv&lt;br /&gt;
ZiP5/lXsDm1hr7McE9cJb0ImpckZ7E3LZEd6Bnk1VsJKKykhs6SEruXlZPr9dA2F6Gq3kxkbS7rb&lt;br /&gt;
TXpKCp2Sk0lISUFSUiA52eouOMhxjFAIKiv3BRYez69TRYV13e+vPfl8dV/z+63hnaoUCv32dX5+&lt;br /&gt;
Dh9/rEMbSiml2jCbw0bC4QkkHJ4Al+8778/3/xJUVKyuoHxNOXFfxJG6NQ3MSAAkVrB3t+M7xEdp&lt;br /&gt;
Wil5SXnsdP/ATtnELtnDXnshtphkJKYjQVcaee50NiemU5iUxt7kDr/0agDg8xG7fTvpq1aRXlRE&lt;br /&gt;
ekkJ6RUVpHu9pAYCpAApdjvJDgcpTicpTifJTicpMTEkulzY3G7rGdX4eOvodmNzu4l3u4l3uUhL&lt;br /&gt;
j4WYmGYdu8jJgY8/jkxZGkgopZRqVZxpTlKOSSHlmJRfnQ95Q1RursSzwYPnZw+eDR4qN1aS+FMi&lt;br /&gt;
advTyMrPAo75Jb8t1YbJMHjSPZQllVGcUMze+A3sit3D1rgCtjvzKbCX4It34HAmY3ekUOpMpiQp&lt;br /&gt;
hfWdUvG6UvDEJVAR58bnjKm1rhIKkVRRQUpZGcl5ebg9HtyVlcR7vbgrK3F7PL+8jvf5cAcCxAeD&lt;br /&gt;
uINBXMYQA8SKEGOzEVN1tNmIsduJDYWIAWKMIUYEB2Cz2bCJWMdwEpvNWjLUZts3tlG1fnkEaCCh&lt;br /&gt;
lFKqTbDF2ojvG0983/harwcrgnh3ePFu9+Ld9uujb7cPX64P/x4/ocoaj3IISKoQ6hAikBDA6/bi&lt;br /&gt;
cXkod5VTEreNopgi8p1F5DpL2B1bQl6ch0KXj4p4B5WuGCriYvHb3BTYE7C747AlxmGzubA50sHh&lt;br /&gt;
IuSII2CPJeCIxeeMxe+IwUhkeydsoRA2E8IWMtiMgfXr4fXXI1K2BhJKKaXaBXu8nfjseOKzaw80&lt;br /&gt;
wHpMNVgexJ/rtwKLakd/np9AUeCX5N+6732wOFj3jQVwgXEZQq4QQVeQQGwAf6wfX6wPX4wPb2wZ&lt;br /&gt;
PnsBPrsPr81LpS1ApcOHx+an0u7DY/dTIT68jiBeezB8DOFzhPALBGwQEkPIJhgb1rHqvfCbo3dX&lt;br /&gt;
PpURalcNJJRSSqkwEcGR4MCR4MDV21Xvz5mgIVASDjIKrRQsCxIsr5bKgoTKQ7WfKwgS8oUwXkPI&lt;br /&gt;
G9r32hci5LVeR9J61nMtcyJSlgYSSiml1EESu+Ds4MTZwQm9Il++MQYTMBhfONDwhn55bUIGQvz2&lt;br /&gt;
GKzjfMhg1hm4ITJ100BCNcjrr7/O+eefH+1qtCva5s1P27z5aZvvn4ggTgEn2N0Hv9d6cnJyBGpl&lt;br /&gt;
adRsDhG5UUQ2iYhHRBaLyMgD5D9WRL4XkUoRWS8il9aS548isjZc5goRObkxdVNN6/UITc5R9adt&lt;br /&gt;
3vy0zZuftnnr1eBAQkTOBf4J3AMMBVYAn4hIxzry9wTeB+YDg4FpwHMickK1PEcCrwHPAkOA2cC7&lt;br /&gt;
IjKgofVTSimlVPNpTI/ELcAzxphXjDHrgOuACuCKOvJfD2w0xtxmjPnRGPME8Ha4nCp/Aj4yxkwN&lt;br /&gt;
57kbyAFuakT9lFJKKdVMGhRIiIgTGI7VuwCAsdbYngccUcfHxoSvV/dJjfxH1COPUkoppVqYhk62&lt;br /&gt;
7AjYgT01zu8B+tbxmYw68ieJSKwxxrufPBn7qUscwNq1a+tRbRUpxcXF5OQc1LLsqoG0zZuftnnz&lt;br /&gt;
0zZvXtV+d8YdbFmt+amNngAXXXRRlKvR/oT3sFfNSNu8+WmbNz9t86joCSw6mAIaGkjsBYJA5xrn&lt;br /&gt;
OwO76/jM7jryl4R7I/aXp64ywRr6uBDYDBFboEsppZRqD+KwgohPDragBgUSxhi/iHwPHA+8ByAi&lt;br /&gt;
En7/WB0f+wao+SjnieHz1fPULOOEGnlq1iUf60kPpZRSSjXcQfVEVGnMUxtTgatF5BIR6Qc8DcQD&lt;br /&gt;
LwGIyEMi8nK1/E8DvUXkbyLSV0RuAM4Ol1NlGnCSiEwO57kXa1Ln442on1JKKaWaSYPnSBhj3gyv&lt;br /&gt;
GfFXrOGH5cBEY0xeOEsG0K1a/s0i8jvgX1iPeW4HrjTGzKuW5xsRuQB4IJx+An5vjFnTuK+llFJK&lt;br /&gt;
qeYg1tObSimllFINF9kNz5VSSinVrmggoZRSSqlGa5WBREM3DVP1JyJjReQ9EdkhIiEROb2WPH8V&lt;br /&gt;
kZ0iUiEin4pIVjTq2laIyJ0islRESkRkj4i8IyKH1pJP2z1CROS68OaAxeG0SEROqpFH27uJiMgd&lt;br /&gt;
4f9fptY4r20eQSJyT7idq6c1NfIcdJu3ukCioZuGqQZzY02gvQH4zQQaEbkdaw+Ua4BRQDlW+8c0&lt;br /&gt;
ZyXbmLHAv4HRwATACcwVEVdVBm33iNsG3A4Mw3pC7DNgtoj0B23vphT+w+8arP+7q5/XNm8aq7Ae&lt;br /&gt;
jMgIp6OrLkSszY0xrSoBi4Fp1d4L1pMgt0W7bm0tASHg9BrndgK3VHufBHiAc6Jd37aSsJaiDwFH&lt;br /&gt;
a7s3a7vnA5drezdpGycAPwLjgc+BqdWuaZtHvr3vAXL2cz0ibd6qeiQauWmYihAR6YUV0VZv/xJg&lt;br /&gt;
Cdr+kZSC1RtUANruTU1EbCJyHtZ6OIu0vZvUE8AcY8xn1U9qmzep7PBQ9QYRmSEi3SCybd7a9tpo&lt;br /&gt;
zKZhKnIysH7BNXSDNVVP4ZViHwUWmn3rqGi7NwEROQxr9dw4oBQ40xjzo4gcgbZ3xIWDtSHAiFou&lt;br /&gt;
689401gMXIbVC9QFuBdYEP7Zj1ibt7ZAQqm27klgAHBUtCvSDqwDBgPJWKvtviIix0S3Sm2TiByC&lt;br /&gt;
FSBPMMb4o12f9sIYU30fjVUishTYApyD9fMfEa1qaIPGbRqmImc31pwUbf8mICKPA6cAxxpjdlW7&lt;br /&gt;
pO3eBIwxAWPMRmPMMmPMXViT/25G27spDAfSgRwR8YuIHxgH3CwiPqy/grXNm5gxphhYD2QRwZ/z&lt;br /&gt;
VhVIhCPZqk3DgF9tGhaRzUdU3Ywxm7B+wKq3fxLW0wba/gchHET8HjjOGLO1+jVt92ZjA2K1vZvE&lt;br /&gt;
POBwrKGNweH0HTADGGyM2Yi2eZMTkQSsIGJnJH/OW+PQxlTgpfAupEuBW6i2aZg6OCLixvpBk/Cp&lt;br /&gt;
3iIyGCgwxmzD6p78PxH5GWsL9ylYT83MjkJ12wQReRI4HzgdKBeRqr8Qio0xleHX2u4RJCIPAh8B&lt;br /&gt;
W4FE4EKsv5BPDGfR9o4gY0w5UHP9gnIg3xizNnxK2zzCROTvwBys4YyuwH2AH5gZzhKRNm91gYQ5&lt;br /&gt;
8KZh6uCMwHosy4TTP8PnXwauMMY8IiLxwDNYTxd8BZxsjPFFo7JtxHVYbf1FjfOXA68AaLtHXCes&lt;br /&gt;
n+kuQDGwEjix6mkCbe9m8at1arTNm8QhwGtAGpAHLATGGGPyIXJtrpt2KaWUUqrRWtUcCaWUUkq1&lt;br /&gt;
LBpIKKWUUqrRNJBQSimlVKNpIKGUUkqpRtNAQimllFKNpoGEUkoppRpNAwmllFJKNZoGEkoppZRq&lt;br /&gt;
NA0klFItgojcJCKjo10PpVTDaCChlIo6EbkZayvvnP3k+UJEQiISFJFBEb7/peGyQyIyNZJlK9XW&lt;br /&gt;
aSChVAsnIp1F5N8iskFEKkVki4i8JyLj6/HZ3iLyo4jk1EjLRGRWPT7fI/zLtUG/uEXkMRFZUcs9&lt;br /&gt;
14jI2Bp5RwOXAaeHd/itiwH+A2QAqw5UPxH5vAFBwcxwud/UM79SKqzVbdqlVHsiIj2wtvQtAG7F&lt;br /&gt;
+gXqBE4CHgcGHKAIJ/C1MeaKWsquz1bBQo3NleopHTg1vGNs9XveDbiqnzPGLAGG1rPcilo26Dvo&lt;br /&gt;
DYOMMV4gV0R0gyilGkh7JJRq2Z4CgsBIY8y7xpifjTFrjTH/AsbAr7rlg9W652uKB10AAAP4SURB&lt;br /&gt;
VEPhX9oHJCIpIvKqiOSKSEW4B+PS8OWN4ePycJmfhT8jInK3iGwL95IsE5GJNYuu7XbV7isicpuI&lt;br /&gt;
/BQuY7OI3NmAttnffWp+x3F1tNELjbifUqoa7ZFQqoUSkQ7AROBOY0xlzevGmJLwy5nAR9UuHYe1&lt;br /&gt;
/fjCet7qfqBf+F75QBb7eg1GAUuB8cAaoOov9knALcA1wHLgSuA9ERlgjNlQz/s+HP7cJOBrrK29&lt;br /&gt;
D9TD0lhfYw1dVBkAfAB82UT3U6rd0EBCqZYrC+uv7R/3l6mqWx5ARPoAT2AFH5+JSN963KcbsMwY&lt;br /&gt;
syz8fmu1a1XDCAXGmNxq528FHjbGvBV+f4eIHIcVFPzPgW4oIgnAn4AbjDEzwqc3AUvqUd/aLBKR&lt;br /&gt;
mkMcccAyAGNMgH1tlAY8BzxvjHm5kfdTSoVpIKFUy3XALvtfZRZJAuYAc4wxDXny4ClglogMB+YC&lt;br /&gt;
7xpj6px0KCKJQCbW3I3qvgbqOymzPxADfNaAeu7POcC6Gudeq5lJRBzALKygZVKE7q1Uu6ZzJJRq&lt;br /&gt;
uX7CmkjY70AZRcQGvAkUAdc25CbGmI+B7sBUoAswX0QeaXBtG8ZDAwOlA9hujNlYPYXvUdPTQFfg&lt;br /&gt;
HGNMKIL3V6rd0kBCqRbKGFMIfALcKCKumtdFJLna20eBgcAZxpgGP3lgjMk3xkw3xlyC9Zf6NeFL&lt;br /&gt;
VWXZq+UtBXYCR9Uo5ihgdT1v+RPWL/rjG1rXWtTrqQ0RmYy1VsXp4bZVSkWADm0o1bLdiDVpcqmI&lt;br /&gt;
3AOsxPp3eyJWz8NAEbkcuB44A+thiM7hz5bV5wYich/wPVYQEAecijWxEqx5BR7gJBHZAVSGJ3n+&lt;br /&gt;
HbhXRDZiTba8AhgMnF+fexpjvCLyN+AREfFjDYukAwONMQ19kqI+T21MAP4G3AAUVGsjT7VJq0qp&lt;br /&gt;
RtBAQqkWzBizSUSGAXcB/8AaesjDCigmh7Mdg9W7+F6Nj98HvFGP2/iAB4GeWEHDV4QDAmNMUET+&lt;br /&gt;
B7gb+Gv42njgMSApXKdOWIHHaeEhhfqaAvjD9cwEdmENPTRUXT0S1c8fhdVGT9e4x8tYQZBSqpHE&lt;br /&gt;
mINey0Up1UKFn9q4va4FqYwxRzbRfV8P33drjfP3AN8YY+Y2oszPsZ4umXzAzI3UHPdQqq3RORJK&lt;br /&gt;
tX2RnNQY7fveICIlIjIwkoWKyAUiUgocHclylWoPdGhDqbbNgzWPYmkt11Y24X03AG/XWNuharnt&lt;br /&gt;
jxtZ5gXsWyhr6/4yNsJsYHH4dVGEy1aqTdOhDaWUUko1mg5tKKWUUqrRNJBQSimlVKNpIKGUUkqp&lt;br /&gt;
RtNAQimllFKNpoGEUkoppRpNAwmllFJKNZoGEkoppZRqNA0klFJKKdVo/w8H3L1vgiXCTQAAAABJ&lt;br /&gt;
RU5ErkJggg==&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h2 id=&amp;quot;&amp;amp;#262;wiczenie&amp;quot;&amp;gt;&amp;amp;#262;wiczenie&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#&amp;amp;#262;wiczenie&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;&amp;lt;p&amp;gt;Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;prawdziwe, obliczone z prawdziwych parametrów  modelu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;obliczone z estymowanego modelu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;obliczone przez periodogram&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;obliczone metodą Welcha &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[20]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;from&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nn&amp;quot;&amp;gt;scipy.signal&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;kn&amp;quot;&amp;gt;import&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;welch&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;def&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nf&amp;quot;&amp;gt;periodogram&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;F_samp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;):&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;&amp;amp;#39;&amp;amp;#39;&amp;amp;#39;peiodogram sygnału s&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    okno - synał będzie przez nie przemnożony w czasie&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;sd&amp;quot;&amp;gt;    F_samp- częstość próbkowania&amp;amp;#39;&amp;amp;#39;&amp;amp;#39;&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;linalg&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;norm&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_fft&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;S&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;fft&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;rfft&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_fft&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;S&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;S&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;conj&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;   &lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;real&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;fft&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;rfftfreq&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N_fft&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;F_samp&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;s&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;%&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;[&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;:]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;return&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;F&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#wspolczynniki modelu AR &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;array&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;([&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.2&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.5&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.25&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;-&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mf&amp;quot;&amp;gt;0.3&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;])&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;epsilon&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1000&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;100&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# obliczanie widma z modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_model&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;widmoAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;epsilon&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#generujemy realizacje procesu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;generujAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;epsilon&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# estymujemy wspolczynniki modelu metodą Yula-Walkera&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;# obliczamy widmo dla estymowanego modelu&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;epsilon_est&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;parametryAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;p&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;5&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_est&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;widmoAR&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;a_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;epsilon_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;blackman&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;                  &lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f_periodogram&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_periodogram&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;periodogram&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno_welch&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;blackman&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;N&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;20&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_welch&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;window&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;nperseg&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;),&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;noverlap&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
               &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f_periodogram&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_periodogram&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_model&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;plot&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;f_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_welch&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;legend&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;((&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;period&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;model-teoret&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;model-est&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;Welch&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;c1&amp;quot;&amp;gt;#py.legend((&amp;amp;#39;prawdziwy&amp;amp;#39;,&amp;amp;#39;estymowany z AR&amp;amp;#39;,&amp;amp;#39;periodogram&amp;amp;#39;,&amp;amp;#39;Welch&amp;amp;#39;,&amp;amp;#39;mtm&amp;amp;#39;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;enenrgia sygnału: &amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;x&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;**&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;2&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;mi&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;Fs&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;enenrgia spektrum AR&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_model&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;enenrgia est&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_est&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;enenrgia welch&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;*&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;)&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;/&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;nb&amp;quot;&amp;gt;len&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;okno_welch&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;k&amp;quot;&amp;gt;print&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;s1&amp;quot;&amp;gt;&amp;amp;#39;enenrgia period&amp;amp;#39;&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;,&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;np&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;sum&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;(&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;P_periodogram&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;))&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;py&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;o&amp;quot;&amp;gt;.&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;n&amp;quot;&amp;gt;show&amp;lt;/span&amp;gt;&amp;lt;span class=&amp;quot;p&amp;quot;&amp;gt;()&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_wrapper&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_subarea output_stream output_stdout output_text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;enenrgia sygnału:  75.9340655955&lt;br /&gt;
enenrgia spektrum AR 73.3554294318&lt;br /&gt;
enenrgia est 75.9325636219&lt;br /&gt;
enenrgia welch 75.0110603061&lt;br /&gt;
enenrgia period 77.0687286728&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_area&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;prompt&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;output_png output_subarea &amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgkAAAFkCAYAAACq4KjhAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz&lt;br /&gt;
AAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8VNX9//HXmewJEEB2BcIOFmQJWmVHrFpUpGotsVaC&lt;br /&gt;
uEArKHWpfl3RWldApS609vsTCuXrUtSqtK6ACFRLIIoWEAFZZEcJS0jIcn5/TO5kJpkksySTmfB+&lt;br /&gt;
Ph55DHPmzr0n0Zl5z+ecc6+x1iIiIiJSkau+OyAiIiLRSSFBRERE/FJIEBEREb8UEkRERMQvhQQR&lt;br /&gt;
ERHxSyFBRERE/FJIEBEREb8UEkRERMQvhQQRERHxSyFBRERE/AorJBhj7jTGlBpjZtaw3QhjTI4x&lt;br /&gt;
psAY87UxZnw4xxUREZG6F3JIMMacCdwAfF7DdhnA28CHQF/gaeBFY8xPQj22iIiI1L2QQoIxphEw&lt;br /&gt;
H7gOOFTD5pOBLdbaO6y1G621zwKvAdNCObaIiIhERqiVhGeBt6y1HwWw7dnABxXa3gXOCfHYIiIi&lt;br /&gt;
EgHxwT7BGDMO6AcMDPApbYC9Fdr2Ak2MMUnW2kI/xzgFuAD4FigIto8iIiInsWQgA3jXWnswnB0F&lt;br /&gt;
FRKMMacBTwHnWWuLwjlwDS4AFtTh/kVERBq6XwJ/C2cHwVYSMoGWwBpjjClriwOGGWNuApKstbbC&lt;br /&gt;
c/YArSu0tQYO+6silPkWYP78+fTq1SvILkqopk2bxqxZs+q7GycV/c0jT3/zyNPfPLLWr1/P1Vdf&lt;br /&gt;
DWWfpeEINiR8APSp0PYSsB541E9AAFgF/LRC2/ll7VUpAOjVqxcDBgwIsosSqvT0dP29I0x/88jT&lt;br /&gt;
3zzy9DevN2EP1wcVEqy1x4D/ercZY44BB62168vu/wE41VrrnAvhBeA3xpjHgP8FRgFXAKPD7LuI&lt;br /&gt;
iIjUodo442LF6kFboL3nQWu/BS4CzgNycS99nGitrbjiQURERKJI0KsbKrLWnlvh/gQ/23yMez6D&lt;br /&gt;
iIiIxAhdu0E8srKy6rsLJx39zSNPf/PI0988dhn/cw3rlzFmAJCTk5OjyS4iIiJBWLNmDZmZmQCZ&lt;br /&gt;
1to14ewr7OEGEZGGZvv27Rw4cKC+uyHiV4sWLejQoUNEjqWQICLiZfv27fTq1Yv8/Pz67oqIX6mp&lt;br /&gt;
qaxfvz4iQUEhQUTEy4EDB8jPz9fJ3CQqOSdKOnDggEKCiEh90cncRLS6QURERKqgkCAiIiJ+KSSI&lt;br /&gt;
iIiIXwoJIiIi4pdCgoiI1IkRI0YwcuTIWtvftm3bcLlczJs3r9b2KdVTSBARkTphjMHl0sdMLNMS&lt;br /&gt;
SBERqRPvv/9+fXdBwqSIJyIiter48eMAxMfHEx+v76KxTCFBROQk8sADD+Byudi4cSNXXnkl6enp&lt;br /&gt;
tGjRgltuuYXCwkKfbefPn8/AgQNJTU3llFNOISsri507d/psM2LECM444wzWrFnDsGHDSEtL4+67&lt;br /&gt;
7/Y8du655/psv3//fiZOnEibNm1ISUmhX79+fucY5OXlkZ2dTdOmTWnWrBkTJkzg0KFDtfzXkJoo&lt;br /&gt;
4omInESMMQBceeWVdOrUiUcffZR///vfPPPMMxw6dIiXXnoJgIcffpj77ruPcePGcf3117N//36e&lt;br /&gt;
eeYZhg8fztq1a2nSpIlnfwcOHGD06NGMGzeOa665htatW/scy1FQUMDw4cPZsmULU6ZMISMjg1df&lt;br /&gt;
fZXs7Gzy8vKYMmWKZ9sxY8awcuVKJk+eTM+ePXn99dcZP358pX1KHbPWRt0PMACwOTk5VkQkknJy&lt;br /&gt;
cmxDfv954IEHrDHG/uxnP/Np/81vfmNdLpddt26d3bZtm42Pj7ePPvqozzZfffWVTUhIsI888oin&lt;br /&gt;
bcSIEdblctk///nPlY41YsQIO3LkSM/9p556yrpcLrtw4UJPW3FxsR00aJBt0qSJPXr0qLXW2jfe&lt;br /&gt;
eMMaY+yMGTM825WWltphw4ZZl8tl586dG94fIYYF8v+nsw0wwIb5eaxKgohIGPLzYcOGuj1Gz56Q&lt;br /&gt;
mlp7+zPG8Jvf/ManbcqUKTz33HMsXryYxMRErLX8/Oc/5+DBg55tWrVqRbdu3ViyZAl33nmnpz0p&lt;br /&gt;
KYns7Owaj/vPf/6TNm3aMG7cOE9bXFwcU6dO5aqrrmLZsmWMHj2axYsXk5CQwKRJk3z6PGXKFJYv&lt;br /&gt;
Xx7Gby7BUkgQEQnDhg2QmVm3x8jJgdq+1lTXrl197nfp0gWXy8W3336LMYbS0tJK24D7wzoxMdGn&lt;br /&gt;
7dRTTw1oguK2bdvo1q1bpfZevXphrWXbtm2A+3Ldbdu2JbVCMurRo0eNx5DapZAgIhKGnj3dH+J1&lt;br /&gt;
fYy65j3WX1paisvl4l//+pff8xw0atTI535KSkqd90/qh0JCBFgLZ50FM2bAsGH13RsRqU2pqbX/&lt;br /&gt;
LT8SNm3aRMeOHT33v/nmG0pLS8nIyMDlcmGtJSMjw281IVQdO3Zk3bp1ldrXr18PQEZGhme7jz76&lt;br /&gt;
iPz8fJ9qwoa6HteRSrQEMgJKS2H1ati4sb57IiLinrD+7LPP+rQ988wzGGMYPXo0l112GS6Xi+nT&lt;br /&gt;
p/t9/vfffx/ScUePHs2ePXt4+eWXPW0lJSXMnj2bxo0bM6zsW9To0aMpKiri+eef92xXWlrK7Nmz&lt;br /&gt;
tbohwlRJiIDSUvdtSUn99kNExLF161YuvfRSLrzwQlauXMmCBQu4+uqr6d27NwC///3v+Z//+R+2&lt;br /&gt;
bt3K2LFjady4MVu2bOGNN97gxhtv5Le//W3Qx7zhhhuYM2cO2dnZrF692rMEctWqVTz99NOkpaUB&lt;br /&gt;
cMkllzB48GDuvPNOtm7dyumnn86iRYs4cuRIrf4NpGYKCRHgXtWpkCAi0cEYw8svv8y9997LXXfd&lt;br /&gt;
RXx8PFOnTuXxxx/3bPO73/2OHj16MGvWLB588EEA2rdvz4UXXsiYMWMq7a+6YzmSk5NZtmwZd955&lt;br /&gt;
J/PmzePw4cP06NGDl156iV/96lc+z3nrrbe45ZZbWLBgAcYYLr30UmbOnEn//v1r688gAVBIiABV&lt;br /&gt;
EkQk2rRs2ZJXXnml2m3Gjh3L2LFjq91myZIlQT3WokULXnzxxRr717RpU8+JnbyV6I00ojQnIQJU&lt;br /&gt;
SRARkVikkBABTiXBuRUREYkFCgkRoEqCiIjEoqBCgjFmkjHmc2NMXtnPSmPMhdVsP9wYU1rhp8QY&lt;br /&gt;
0yr8rscOzUkQkWhx//33U1JSQvPmzeu7KxIDgp24uAP4HbAJMEA28KYxpp+1dn0Vz7FAd8CzdsVa&lt;br /&gt;
uy/4rsYuhQQREYlFQYUEa+07FZruMcZMBs4GqgoJAPuttYeD7VxDoeEGERGJRSHPSTDGuIwx44BU&lt;br /&gt;
YFV1mwK5xphdxpj3jDGDQj1mrNLERRERiUVBnyfBGNMbdyhIxj2E8DNrbVUn1N4N3AisBpKA64Gl&lt;br /&gt;
xpizrLW5oXU59qiSICIisSiUkyltAPoC6cAVwDxjzDB/QcFa+zXwtVfTv40xXYBpwPiaDjRt2jTS&lt;br /&gt;
09N92rKyssjKygqh2/VHcxJERKQuLFy4kIULF/q05eXl1dr+gw4J1tpiYEvZ3bXGmLOAm4HJAe7i&lt;br /&gt;
M2BwIBvOmjWLAbF4ebUKFBJERKQu+PvivGbNGjIzM2tl/7VxngQX7qGEQPXDPQxx0tBwg4iIxKJg&lt;br /&gt;
z5PwB2PMUGNMR2NMb2PMI8BwYH7Z448YY+Z6bX+zMWaMMaaLMeZHxpingJHAH2vzl4h2qiSIiMC2&lt;br /&gt;
bdtwuVzMmzcv6OcuW7YMl8vFxx9/XAc9k6oEO9zQCpgLtAXygC+A8621H5U93gZo77V9IjADaAfk&lt;br /&gt;
l20/ylp7Uv1XdioJWt0gIhK66q426e35558nNTWV8eNrnPoWFaK5v8GeJ+G6Gh6fUOH+E8ATIfSr&lt;br /&gt;
QVElQUQkcp577jlatmwZlR+6/kRzf3XthghQSBAROTlYayksLKzvbtQahYQI0MRFEYkWDzzwAC6X&lt;br /&gt;
i02bNnH11VfTtGlTWrVqxX333QfAjh07GDt2LOnp6bRt25aZM2f6PH///v1MnDiRNm3akJKSQr9+&lt;br /&gt;
/fzOMcjLyyM7O5umTZvSrFkzJkyYwKFDh/z2aePGjVxxxRWccsoppKSkcOaZZ/LWW2+F9Pt16tSJ&lt;br /&gt;
r776iqVLl+JyuXC5XJx77rk+/brlllvo0KEDycnJdOvWjccffxzrvFGXyc/P59Zbb/Vs17NnT2bM&lt;br /&gt;
mFHpeC6Xi6lTp/K3v/2N3r17k5yczLvvvgu4A8NTTz1F7969SUlJoU2bNkyaNMnn71BTf+tbKOdJ&lt;br /&gt;
kCCpkiAi0cIZ1//FL37B6aefzmOPPcY777zDww8/TPPmzZkzZw6jRo3i8ccfZ8GCBdx+++2cddZZ&lt;br /&gt;
DBkyhIKCAoYPH86WLVuYMmUKGRkZvPrqq2RnZ5OXl8eUKVM8xxkzZgwrV65k8uTJ9OzZk9dff53x&lt;br /&gt;
48dXmlfw1VdfMWTIEE477TTuuusu0tLSeOWVVxg7diyLFi3i0ksvDer3e/rpp7npppto3Lgx99xz&lt;br /&gt;
D9ZaWrduDcDx48cZNmwYu3fvZtKkSbRv356VK1dy1113sWfPHp9AdMkll7Bs2TKuu+46+vbty7vv&lt;br /&gt;
vsvtt9/Orl27KoWFDz/8kFdeeYWbbrqJFi1akJGRAcANN9zAvHnzuPbaa7n55pvZunUrs2fPJjc3&lt;br /&gt;
lxUrVhAXF1dtf6OCtTbqfoABgM3JybENwaZN1oK111xT3z0RkZrk5OTYhvT+U9EDDzxgjTF28uTJ&lt;br /&gt;
nraSkhLbvn17GxcXZ5944glP+6FDh2xqaqqdMGGCtdbap556yrpcLrtw4ULPNsXFxXbQoEG2SZMm&lt;br /&gt;
9ujRo9Zaa9944w1rjLEzZszwbFdaWmqHDRtmXS6XnTt3rqd91KhRtl+/fraoqMinn4MHD7Y9evTw&lt;br /&gt;
3F+6dKl1uVx22bJlNf6OvXv3tiNHjqzU/tBDD9nGjRvbzZs3+7TfddddNiEhwe7cudOn/4888ojP&lt;br /&gt;
dj//+c9tXFyc3bJli6fNGGPj4+Pthg0bfLZdvny5NcbY//u///Npf++996wxxudvWFV//Qnk/09n&lt;br /&gt;
G2CADfPzWJWECNC1G0QarvyifDYcqOrM9LWjZ4uepCak1tr+jDFMnDjRc9/lcjFw4EDefPNNrr32&lt;br /&gt;
Wk97eno6PXr0YMsW9/nzFi9eTJs2bRg3bpxnm7i4OKZOncpVV13FsmXLGD16NIsXLyYhIYFJkyb5&lt;br /&gt;
HHPKlCksX77c0/bDDz+wZMkSHnrooUpnCTz//POZPn06u3fvpm3btrXye7/22msMHTqU9PR0Dh48&lt;br /&gt;
6GkfNWoUjz76KB9//DFZWVksXryY+Ph4n8oIwK233sprr73GP//5T37961972keMGEGPHj0qHatp&lt;br /&gt;
06aMGjXK51j9+/enUaNGLFmyxOfvGK0UEiJAcxJEGq4NBzaQ+afaObtdVXJuyGFA29o9+2yHDh18&lt;br /&gt;
7qenp5OcnEzz5s0rtX///fcAbN++nW7dulXaV69evbDWsm3bNs92bdu2JTXVN9hU/CD95ptvsNZy&lt;br /&gt;
7733cs8991TarzGGffv2+Q0Jx44d4+jRo577cXFxtGjRorpfmU2bNrFu3TpatmxZ5bGc/rdr1460&lt;br /&gt;
tLRKvyfg+T0dzvBCxWMdOnSIVq1aVXusaKeQEAGakyDScPVs0ZOcG3Lq/Bi1LS4uLqA2oNKkvtpS&lt;br /&gt;
WvbmeNttt3HBBRf43aZr165++/Hkk08yffp0z/2MjAxPxaO64/3kJz/hd7/7nd/fqXv37kH135GS&lt;br /&gt;
kuL3WK1bt+Zvf/ub32P5CyrRSCEhAhQSRBqu1ITUWv+WH606duzIunXrKrWvX78eKP9G3bFjRz76&lt;br /&gt;
6CPy8/N9qgkbNvgOy3Tu3BmAhISEgGb0e096HD9+PEOHDvXc9/6gruqkS126dOHo0aOMHDmy2uN0&lt;br /&gt;
7NiRDz/8kGPHjvlUE5zfs2PHjjX2tUuXLnz44YcMGjSIpKTqr1wQ6Emi6oOWQEaAhhtEpCEYPXo0&lt;br /&gt;
e/bs4eWXX/a0lZSUMHv2bBo3bsywYcM82xUVFfH88897tistLWX27Nk+H4gtW7ZkxIgRzJkzhz17&lt;br /&gt;
9lQ63oEDB6rsS0ZGBueee67n55xzzvE8lpaW5ne55ZVXXsmqVat47733Kj2Wl5fnqWyMHj2a4uJi&lt;br /&gt;
/vhH3ysIzJo1C5fLxU9/+tMq++V9rOLiYh588MFKj5WUlPjMwaiqv9FAlYQIUCVBRBqCG264gTlz&lt;br /&gt;
5pCdnc3q1as9SyBXrVrF008/7fnWfckllzB48GDuvPNOtm7dyumnn86iRYs4cuRIpX0+++yzDB06&lt;br /&gt;
lD59+nD99dfTuXNn9u7dy6pVq/juu+9Yu3atZ9tAhz0yMzN54YUXePjhh+natSutWrVi5MiR3H77&lt;br /&gt;
7fzjH//g4osvJjs7m8zMTI4dO8YXX3zBokWL+Pbbb2nevDmXXHIJI0eO5O6772br1q2eJZBvvfUW&lt;br /&gt;
06ZNo1OnTjX2YdiwYdx44408+uij5Obmcv7555OQkMDXX3/Na6+9xjPPPMNll11WbX+jQrjLI+ri&lt;br /&gt;
hwa2BDI3170E8qKL6rsnIlKTk2EJpMvlsgcPHvRpz87Otk2aNKm0/YgRI+wZZ5zhub9//347ceJE&lt;br /&gt;
26pVK5ucnGz79u1r582bV+l5P/zwgx0/frxt2rSpbdasmc3Ozraff/55pSWQ1lq7detWm52dbdu1&lt;br /&gt;
a2eTkpJs+/bt7ZgxY+zrr7/u2SaYJZB79+61l1xyiU1PT7cul8tneeGxY8fs3Xffbbt3726Tk5Nt&lt;br /&gt;
q1at7JAhQ+ysWbNscXGxz3a33nqrPe2002xSUpLt0aOHnTlzZqVjuVwuO3Xq1Cr78uKLL9ozzzzT&lt;br /&gt;
pqWl2fT0dNu3b19711132T179gTU34oivQTS2DqakBIOY8wAICcnJ4cBA2J/rG/tWhgwAC68EP75&lt;br /&gt;
z/rujYhUZ82aNWRmZtJQ3n+kYQnk/09nGyDTWrsmnONpTkIEaLhBRERikUJCBGjiooiIxCKFhAhQ&lt;br /&gt;
JUFERGKRQkIEqJIgIiKxSCEhAnTtBhERiUUKCRGg4QYREYlFCgkRoOEGERGJRQoJEaBKgoiIxCKF&lt;br /&gt;
hAhQJUFERGKRQkIEqJIgIiKxSCEhApxKglY3iIhILFFIiABVEkREJBYpJESAQoKICGzbtg2Xy8W8&lt;br /&gt;
efOCfu6yZctwuVx8/PHHddAzqYpCQgRo4qKISPiMMRE/5vPPP8/cuXMjftxooZAQAaokiIjEpuee&lt;br /&gt;
e04hIVDGmEnGmM+NMXllPyuNMRfW8JwRxpgcY0yBMeZrY8z48Loce1RJEBGRWBRsJWEH8DtgAJAJ&lt;br /&gt;
fAS8aYzp5W9jY0wG8DbwIdAXeBp40RjzkxD7G5N07QYRiRYPPPAALpeLTZs2cfXVV9O0aVNatWrF&lt;br /&gt;
fffdB8COHTsYO3Ys6enptG3blpkzZ/o8f//+/UycOJE2bdqQkpJCv379/M4xyMvLIzs7m6ZNm9Ks&lt;br /&gt;
WTMmTJjAoUOH/PZp48aNXHHFFZxyyimkpKRw5pln8tZbb4X1e/7zn/9k2LBhNGrUiCZNmnDxxRfz&lt;br /&gt;
3//+12ebvXv3MmHCBNq3b09ycjLt2rVj7NixbN++HYBOnTrx1VdfsXTpUlwuFy6Xi3PPPTesfsWa&lt;br /&gt;
+GA2tta+U6HpHmPMZOBsYL2fp0wGtlhr7yi7v9EYMwSYBrwfbGdjlYYbRCRaOOP6v/jFLzj99NN5&lt;br /&gt;
7LHHeOedd3j44Ydp3rw5c+bMYdSoUTz++OMsWLCA22+/nbPOOoshQ4ZQUFDA8OHD2bJlC1OmTCEj&lt;br /&gt;
I4NXX32V7Oxs8vLymDJliuc4Y8aMYeXKlUyePJmePXvy+uuvM378+ErzCr766iuGDBnCaaedxl13&lt;br /&gt;
3UVaWhqvvPIKY8eOZdGiRVx66aVB/45//etfyc7O5sILL+Txxx8nPz+f559/nqFDh7J27Vo6dOgA&lt;br /&gt;
wGWXXcb69euZOnUqHTt2ZN++fbz//vts376dDh068PTTT3PTTTfRuHFj7rnnHqy1tG7dOoy/fgyy&lt;br /&gt;
1ob0g7sKMQ44DvSsYptlwMwKbdnADzXsewBgc3JybEPwxhvWgrXNm9d3T0SkJjk5OTao959jx6zN&lt;br /&gt;
yanbn2PHau33e+CBB6wxxk6ePNnTVlJSYtu3b2/j4uLsE0884Wk/dOiQTU1NtRMmTLDWWvvUU09Z&lt;br /&gt;
l8tlFy5c6NmmuLjYDho0yDZp0sQePXrUWmvtG2+8YY0xdsaMGZ7tSktL7bBhw6zL5bJz5871tI8a&lt;br /&gt;
Ncr269fPFhUV+fRz8ODBtkePHp77S5cutS6Xyy5btqza3+/o0aO2WbNmdtKkST7t+/bts02bNrU3&lt;br /&gt;
3nij53er2Ed/evfubUeOHFntNpEUyP+fzjbAABviZ7zzE1QlAcAY0xtYBSQDR4CfWWs3VLF5G2Bv&lt;br /&gt;
hba9QBNjTJK1tjDY48ciVRJEGrANGyAzs26PkZMDAwbU2u6MMUycONFz3+VyMXDgQN58802uvfZa&lt;br /&gt;
T3t6ejo9evRgy5YtACxevJg2bdowbtw4zzZxcXFMnTqVq666imXLljF69GgWL15MQkICkyZN8jnm&lt;br /&gt;
lClTWL58uafthx9+YMmSJTz00EPk5eX59PH8889n+vTp7N69m7Zt2wb8u73//vvk5eUxbtw4Dh48&lt;br /&gt;
6HP8H//4xyxZsgSAlJQUEhMTWbp0Kddeey1NmzYN+Bgnk6BDArAB9/yCdOAKYJ4xZlg1QeGkp4mL&lt;br /&gt;
Ig1Yz57uD/G6PkYtc0rujvT0dJKTk2nevHml9u+//x6A7du3061bt0r76tWrF9Zatm3b5tmubdu2&lt;br /&gt;
pKam+mzXo0cPn/vffPMN1lruvfde7rnnnkr7Ncawb98+vyHh2LFjHD161HM/Li6OFi1asGnTJqy1&lt;br /&gt;
jBw50u/+mjRpAkBiYiKPPfYYt912G61bt+bss8/m4osv5pprrjn5hhSqEXRIsNYWA1vK7q41xpwF&lt;br /&gt;
3Ix7/kFFe4CKf+3WwOFAqgjTpk0jPT3dpy0rK4usrKxgu12vVEkQacBSU2v1W36kxMXFBdQGOMPA&lt;br /&gt;
ta607M3xtttu44ILLvC7TdeuXf3248knn2T69Ome+xkZGWzZsoXS0lKMMcyfP9/vh318fPnH3s03&lt;br /&gt;
38yYMWN44403ePfdd7nvvvt45JFHWLJkCX379g3794uEhQsXsnDhQp+2ilWZcIRSSajIBSRV8dgq&lt;br /&gt;
4KcV2s4va6/RrFmzGBCDL76KtLpBRBqCjh07sm7dukrt69e7561nZGR4tvvoo4/Iz8/3qSZs2OBb&lt;br /&gt;
cO7cuTMACQkJAa0a8J70OH78eIYOHeq5n5KSAkCXLl2w1tKyZcuA9tmpUyemTZvGtGnT2Lx5M337&lt;br /&gt;
9mXGjBmeFRv1cQKnYPj74rxmzRoya2kILNjzJPzBGDPUGNPRGNPbGPMIMByYX/b4I8YY77NOvAB0&lt;br /&gt;
NsY8ZozpYYz5Ne4hipmV995wabhBRBqC0aNHs2fPHl5++WVPW0lJCbNnz6Zx48YMGzbMs11RURHP&lt;br /&gt;
P/+8Z7vS0lJmz57t86HbsmVLRowYwZw5c9izZ0+l4x04cKDKvmRkZHDuued6fs455xwALrjgApo0&lt;br /&gt;
acIf/vAHiouLq9zn8ePHKSz0LWh36tSJxo0b+7SnpaVVuXTzZBBsJaEVMBdoC+QBXwDnW2s/Knu8&lt;br /&gt;
DdDe2dha+60x5iJgFjAV2AlMtNZ+EG7HY4mGG0SkIbjhhhuYM2cO2dnZrF692rMEctWqVTz99NOk&lt;br /&gt;
paUBcMkllzB48GDuvPNOtm7dyumnn86iRYs4cuRIpX0+++yzDB06lD59+nD99dfTuXNn9u7dy6pV&lt;br /&gt;
q/juu+9Yu3atZ9tAhj0aN27M888/zzXXXMOAAQMYN24cLVu2ZPv27bzzzjsMGTKEZ555hq+//ppR&lt;br /&gt;
o0Zx5ZVXcvrppxMfH8+iRYvYt2+fzzfzzMxMXnjhBR5++GG6du1Kq1at/M53aKiCPU/CdTU8PsFP&lt;br /&gt;
28e4T7x00nL+v3YvhIQor16JyEmqqtK6056cnMyyZcu48847mTdvHocPH6ZHjx689NJL/OpXv/LZ&lt;br /&gt;
/q233uKWW25hwYIFGGO49NJLmTlzJv379/fZd69evVi9ejXTp09n7ty5HDx4kFatWtG/f3/uv//+&lt;br /&gt;
gPpXUVZWFqeeeiqPPvooTz75JIWFhZx66qkMHTqUCRPcH1Pt27fnqquu4sMPP2T+/PnEx8fTs2dP&lt;br /&gt;
Xn31VcaOHevZ13333cf27dt54oknOHLkCMOHDz+pQoKpqwkp4TDGDABycnJyGsSchPnzwXn9FBVB&lt;br /&gt;
fG3MBBGROuGM5zaU9x9pWAL5/9NrTkKmtXZNOMfTBZ4iwDuHachBRERihUJCBHivatAKBxERiRUK&lt;br /&gt;
CRHgHQxUSRARkVihkBABGm4QEZFYpJAQAaokiIhILFJIiABVEkREJBYpJESAKgkiIhKLFBIiQKsb&lt;br /&gt;
REQkFikkRICGG0REJBYpJESAhhtERCQWKSREgCoJIiISixQSIkCVBBE52Vx99dV069YtqOeUlJTg&lt;br /&gt;
crn47W9/W0e9kmApJESAQoKIRINXX30Vl8vFm2++Wemxvn374nK5WLZsWaXHOnTowJAhQ4I6ljEm&lt;br /&gt;
4Ks2SvRSSIgA7+EGrW4QkfrifNB/8sknPu1Hjhzhq6++IiEhgRUrVvg8tnPnTnbu3MnQoUMj1k+J&lt;br /&gt;
HgoJEaBKgohEg7Zt29KpU6dKIWHVqlVYa/n5z39e6bFPPvkEYwyDBw+OZFclSigkRIAmLopItBgy&lt;br /&gt;
ZAhr166lsLDQ07ZixQp69+7NT3/6U/7973/7bO8vJMydO5eBAweSmprKKaecwi9/+Ut27dpV47Gt&lt;br /&gt;
tcyaNYszzjiDlJQUWrVqxejRo8nNza207aJFi+jduzfJycn06dOHDz74IIzfWkKlkBCm0lL4739r&lt;br /&gt;
3sahkCAi9WnIkCEUFRXx6aefetpWrFjBoEGDOOecczh06BBffvml57GVK1fSs2dPmjVrBsD06dO5&lt;br /&gt;
9tpr6dWrF7NmzeKWW27h3XffZfjw4Rw9erTaY19zzTXceuutdOrUiSeeeII777yTxMREn74ALF26&lt;br /&gt;
lJtvvplf/vKXPPHEE+Tn53P55ZeTl5dXi38JCUR8fXcg1n30EVx4IRw4AE2b+t9GlQQRiRZDhgzB&lt;br /&gt;
Wssnn3zCsGHDKCkp4dNPP2XChAl07tyZ1q1b88knn9C7d2+OHj3KunXrmDhxIgCbN2/moYce4vHH&lt;br /&gt;
H+fWW2/17HPs2LEMGDCAF154gdtuu83vcd9//30WLFjAbbfdxuOPP+5p97eSYcOGDWzYsIEOHTp4&lt;br /&gt;
+pyZmcmih19VAAAgAElEQVTLL7/MDTfcUJt/DqmBQkKYjhxxf/AXFFS9jSoJIg1XfkkJG/Lz6/QY&lt;br /&gt;
PVNTSY2Lq5V99erVi1NOOcUz9yA3N5f8/HwGDRoEwKBBg1ixYgWTJk1i5cqVlJSUeCYtLlq0CGMM&lt;br /&gt;
l19+OQcPHvTss23btnTu3JklS5ZUGRL+/ve/Ex8fz7333ltjHy+88EJPQADo378/aWlpbNmyJeTf&lt;br /&gt;
W0KjkBAmJwBUt2pB124Qabg25OeTmZNTp8fIycxkQOPGtba/QYMGsXz5csA91NCqVSs6derkeezZ&lt;br /&gt;
Z5/1POY9H+Gbb76hpKSEzp07V9qnMYYmTZpUecwtW7Zw2mmn0TiA36N9+/aV2po2bcoPP/xQ8y8n&lt;br /&gt;
tUohIUzOUEJ1H/4abhBpuHqmppKTmVnnx6hNQ4YM4e2332bdunWsXLnSU0UAd0i444472L17NytW&lt;br /&gt;
rKBdu3ZkZGQAUFpaSnx8PP/617/87jeQABCIuCqqJtb7zVQiQiEhTMFWEhQSRBqW1Li4Wv2WHwnO&lt;br /&gt;
+RKWL1/OihUrmDZtmuexzMxMkpKSWLJkCZ9++ikXXXSR57EuXbp4KglOcAhUly5dWLp0KYcPH662&lt;br /&gt;
4iDRRasbwuQEgOo+/FVJEJFoMnDgQJKSkliwYAG7du3yqSQkJibSv39/nn32WfLz833OtHj55Zdj&lt;br /&gt;
jGH69Ol+9/v9999XeczLL7+c4uJiHnroodr7RaTOqZIQJlUSRCTWJCQkcOaZZ7J8+XKSk5PJrDBc&lt;br /&gt;
MmjQIGbMmIExxickdOvWjenTp3PfffexefNmxowZQ6NGjdiyZQuvv/46U6ZMYerUqX6Ped5555GV&lt;br /&gt;
lcXMmTPZsGED559/PiUlJSxfvpwLLrhAqxailCoJYQo0JCQkuP+tkCAi0WDIkCEYYxg4cCAJzhtU&lt;br /&gt;
mcGDB3smIvbt29fnsbvvvptXX30VgAcffJA77riDd955h4suuoiLL77YZ9uK126YP38+jz32GJs3&lt;br /&gt;
b+aOO+7g0Ucf5cSJE5x99tk+z/F3zQddC6J+qJIQpkBCgrUQHw9FRVrdICLR4eGHH+bhhx/2+9jY&lt;br /&gt;
sWMpqeYbzWWXXcZll11W7f7/+te/VmozxnDbbbdVuUwyLi6uyuNu37692uNJ3VAlIUyBVhLiy+KY&lt;br /&gt;
KgkiIhIrggoJxpi7jDGfGWMOG2P2GmNeN8Z0r+E5w40xpRV+SowxrcLrenQIppJQ03YiIiLRJNhK&lt;br /&gt;
wlBgNvBj4DwgAXjPGJNSw/Ms0A1oU/bT1lq7L8hjR6VAKwnOsl+FBBERiRVBzUmw1o72vm+MyQb2&lt;br /&gt;
AZnAJ/6e42W/tfZwUL2LAYEsgfQOCToXiIiIxIpw5yQ0xV0lqHpxrJsBco0xu4wx7xljBtWwfcwI&lt;br /&gt;
9IyLqiSIiEisCTkkGPdalKeAT6y11V0seTdwI3A5cBmwA1hqjOkX6rGjSbATF1VJEBGRWBHOEsjn&lt;br /&gt;
gNOBwdVtZK39Gvjaq+nfxpguwDRgfBjHjwqBTlxUJUFERGJNSCHBGPNHYDQw1Fq7O4RdfEYN4QJg&lt;br /&gt;
2rRppKen+7RlZWWRlZUVwiHrhiYuiohIfVm4cCELFy70acvLy6u1/QcdEsoCwqXAcGttqGe36Id7&lt;br /&gt;
GKJas2bNYsCAASEeIjKCrSRouEEkNqxfv76+uyBSScX/L/19cV6zZk2lU22HKqiQYIx5DsgCxgDH&lt;br /&gt;
jDGtyx7Ks9YWlG3zB+BUa+34svs3A1uBr4Bk4HpgJPCTWvkN6pkqCSINS4sWLUhNTeXqq6+u766I&lt;br /&gt;
+JWamkqLFi0icqxgKwmTcK9mWFqhfQIwr+zfbYH2Xo8lAjOAdkA+8AUwylr7cbCdjUaBLoHUxEWR&lt;br /&gt;
2NChQwfWr1/PgQMH6rsrIn61aNGCDh06RORYwZ4nocbVENbaCRXuPwE8EWS/YoYmLoo0PB06dIjY&lt;br /&gt;
m7BINNO1G8Kk4QYREWmoFBLCFGglweUq/7eIiEgsUEgIU6CVBJcLjFElQUREYodCQpgCOS2zExJc&lt;br /&gt;
LlUSREQkdigkhCnQ4QZj3CFBlQQREYkVCglhCnQJpIYbREQk1igkhCnYSoKGG0REJFYoJIRJExdF&lt;br /&gt;
RKShUkgIUzAhQZUEERGJJQoJYdLERRERaagUEsKk4QYREWmoFBLCpImLIiLSUCkkhElLIEVEpKFS&lt;br /&gt;
SAhTIGdcdK7doEqCiIjEEoWEMAU6J0ETF0VEJNYoJIRJExdFRKShUkgIkyYuiohIQ6WQECZVEkRE&lt;br /&gt;
pKFSSAhToJUETVwUEZFYo5AQpkCXQGriooiIxBqFhDBpuEFERBoqhYQwaeKiiIg0VAoJYVIlQURE&lt;br /&gt;
GiqFhDDpjIsiItJQKSSESWdcFBGRhkohIUzBLIHUcIOIiMQShYQwBbsEUsMNIiISKxQSwqSJiyIi&lt;br /&gt;
0lAFFRKMMXcZYz4zxhw2xuw1xrxujOkewPNGGGNyjDEFxpivjTHjQ+9ydNEZF0VEpKEKtpIwFJgN&lt;br /&gt;
/Bg4D0gA3jPGpFT1BGNMBvA28CHQF3gaeNEY85MQ+ht1NHFRREQaqvhgNrbWjva+b4zJBvYBmcAn&lt;br /&gt;
VTxtMrDFWntH2f2NxpghwDTg/aB6G4U0cVFERBqqcOckNAUs8H0125wNfFCh7V3gnDCPHRWCrSRo&lt;br /&gt;
uEFERGJFyCHBGGOAp4BPrLX/rWbTNsDeCm17gSbGmKRQjx8tNHFRREQaqqCGGyp4DjgdGFxLfalk&lt;br /&gt;
2rRppKen+7RlZWWRlZVVV4cMms64KCIi9WXhwoUsXLjQpy0vL6/W9h9SSDDG/BEYDQy11u6uYfM9&lt;br /&gt;
QOsKba2Bw9bawuqeOGvWLAYMGBBKFyNGl4oWEZH64u+L85o1a8jMzKyV/Qc93FAWEC4FRlprtwfw&lt;br /&gt;
lFXAqApt55e1xzxNXBQRkYYq2PMkPAf8ErgKOGaMaV32k+y1zR+MMXO9nvYC0NkY85gxpocx5tfA&lt;br /&gt;
FcDMWuh/vdPERRERaaiCrSRMApoAS4FdXj9Xem3TFmjv3LHWfgtchPu8Crm4lz5OtNZWXPEQkzRx&lt;br /&gt;
UUREGqpgz5NQY6iw1k7w0/Yx7nMpNDg646KIiDRUunZDmHTGRRERaagUEsKkiYsiItJQKSSESZeK&lt;br /&gt;
FhGRhkohIUyhVBK++w4mTICiosj0UUREJBQKCWEKZnWDU0m4+2546SXYtCkiXRQREQmJQkKYAjkt&lt;br /&gt;
c8WJi3vLrmSRllb3/RMREQmVQkKYQhlu2LevvF1ERCRaKSSEKZQzLjqVBK10EBGRaKaQEKZwKgkK&lt;br /&gt;
CSIiEs0UEsIU6BJI74mLzqoGhQQREYlmCglhCueMiwoJIiISzRQSwhTscENhYeXnioiIRCOFhDAF&lt;br /&gt;
W0nYvbvyc0VERKKRQkKYgq0k7NlT+bkiIiLRSCEhTMGecbGgoPJzRUREopFCQpiCPeOi9/UaFBJE&lt;br /&gt;
RCSaKSSEKZAlkN7DDcXFlZ8rIiISjRQSwhTscINCgoiIxAqFhDAFEhJKSsorCf6eKyIiEo0UEsIU&lt;br /&gt;
bCXB33NFRESikUJCmAINCXFxCgkiIhJbFBLCFEwlQcMNIiISSxQSwqThBhERaagUEsJU0xJIa32X&lt;br /&gt;
QPp7roiISDRSSAhTTZUE52RLqiSIiEisUUgIU01nXHTaFRJERCTWKCSEqaZKgndI0HCDiIjEEoWE&lt;br /&gt;
MAUTElRJEBGRWBJ0SDDGDDXG/MMY850xptQYM6aG7YeXbef9U2KMaRV6t6OHKgkiItJQhVJJSANy&lt;br /&gt;
gV8DNsDnWKAb0Kbsp621dl8Ix446paUQH69KgohUtmcPdOwIu3bVd09EQhMf7BOstf8C/gVgTMXv&lt;br /&gt;
xtXab609HOzxop0TEqpaAqmQIHLy+u472L4ddu6Edu3quzciwYvUnAQD5Bpjdhlj3jPGDIrQcetc&lt;br /&gt;
MJUEDTeInFycq77qtS6xKhIhYTdwI3A5cBmwA1hqjOkXgWPXOQ03iEhVnJBQVaVRJNoFPdwQLGvt&lt;br /&gt;
18DXXk3/NsZ0AaYB46t77rRp00hPT/dpy8rKIisrq9b7GQrnbIrVhQTnzUEhQeTko0qC1LWFCxey&lt;br /&gt;
cOFCn7a8vLxa23+dh4QqfAYMrmmjWbNmMWDAgAh0JzTOiZSCHW4wxv1cvXGINGwKCVLX/H1xXrNm&lt;br /&gt;
DZmZmbWy//o6T0I/3MMQMS3YkOBUEuLjfR8TkYZJww0S64KuJBhj0oCuuCcjAnQ2xvQFvrfW7jDG&lt;br /&gt;
PAK0s9aOL9v+ZmAr8BWQDFwPjAR+Ugv9r1fOh3x8fPmbQVXbxMWVVxISEqCoSCFBpKFTJUFiXSjD&lt;br /&gt;
DQOBJbjPfWCBGWXtc4FrcZ8Hob3X9oll27QD8oEvgFHW2o9D7HPU8A4JhYXVb+NdSUhI8H1MRBom&lt;br /&gt;
VRIk1oVynoRlVDNMYa2dUOH+E8ATwXct+nmHhGCGG5yQoDcOkYZNlQSJdbp2QxiCDQnOcENiou9j&lt;br /&gt;
ItIwKSRIrFNICEOolQRNXBQ5OWi4QWKdQkIYQq0kOIEhmJCwZ0/o/RSR+qFKgsQ6hYQwhFpJiIsL&lt;br /&gt;
LiS8/z60bQurV4fXXxGJLFUSJNYpJIQhUiHhnXfct4cb3OWxRBo2VRIk1ikkhME7JARyFUhnuCHY&lt;br /&gt;
kLBhQ/lxRCR2KCRIrFNICEOkKgkbN7pvT5wIva8iEnkabpBYp5AQhlCv3RDMxEVr4dtv3f9WSBCJ&lt;br /&gt;
LaokSKxTSAhDJCoJ+/aV/1shQSS2qJIgsU4hIQyRCAneV/xUSBCJLaokSKxTSAhDICHB+QYR6sRF&lt;br /&gt;
72tCKCSIxBaFBIl1Cglh8A4JUD5Hwd82oVYSFBJEYpeGGyTWKSSEoWJI8PdGEO7ERe+QUFQUel9F&lt;br /&gt;
JPJUSZBYp5AQBueFX92ln1VJEDl5qZIgsU4hIQzBVBKcYOD9b4UEkYZNlQSJdQoJYahYSQh0uEEh&lt;br /&gt;
QeTkoJAgsU4hIQwVKwl1OdzQqFFgIeGFF2Dbtpq3E5G6p+EGiXUKCWHwPuMi1E0lwQkGjRvXHBKs&lt;br /&gt;
hcmT4ec/r3m/IlL3VEmQWKeQEIZQJy6GsrohkEpCfn7V/RCRyFMlQWKdQkIYgl0CGepwQ2IiJCXV&lt;br /&gt;
HBKcS0mnpNS8XxGpe6okSKxTSAhDsJWEUCcuJia6fxQSRGKLQoLEOoWEMESqkpCUFFhIOHLEfauQ&lt;br /&gt;
IBIdNNwgsU4hIQyRWgIZaEhQJUEkuqiSILFOISEMoS6BDHbiYrAhITW15v2KSN1TJUFinUJCGIKt&lt;br /&gt;
JNT1cIMqCSLRRZUEiXUKCWEIZOJiuJeKPnEi+JDg0n9VkaigSoLEOn2chCGSSyCDCQm6WqRIdFAl&lt;br /&gt;
QWKdQkIYnDeApCT3bV0tgQy2kuD0S0Tql0KCxLqgQ4IxZqgx5h/GmO+MMaXGmDEBPGeEMSbHGFNg&lt;br /&gt;
jPnaGDM+tO5GF+cNIDHRfRstcxJUSRCJDhpukFgXSiUhDcgFfg3YmjY2xmQAbwMfAn2Bp4EXjTE/&lt;br /&gt;
CeHYUaViJSHQkFDXqxtUSRCJDqokSKyLD/YJ1tp/Af8CMMYpoFdrMrDFWntH2f2NxpghwDTg/WCP&lt;br /&gt;
H00qVhKqG26Iiwt9uCElRZUEkVikSoLEukjMSTgb+KBC27vAORE4dp0KtZJQ12dcVEgQiQ6qJEis&lt;br /&gt;
i0RIaAPsrdC2F2hijEmKwPHrjPNhHMjERWM0cVHkZKOQILEu6OGGSJo2bRrp6ek+bVlZWWRlZYW0&lt;br /&gt;
v7Vr3R/U/frVRu8CryQ4ASGUSsKJE1oCKRKrNNwgdW3hwoUsXLjQpy0vL6/W9h+JkLAHaF2hrTVw&lt;br /&gt;
2FpbWN0TZ82axYABA2qtI86ubI3TLQMT6BJI7wmLzm1dVBKOHvXtl4jUL1USpK75++K8Zs0aMjMz&lt;br /&gt;
a2X/kRhuWAWMqtB2fll7xNT0ARuKQJdAOuGgrocbCssilyoJItFBlQSJdaGcJyHNGNPXGOMU7TuX&lt;br /&gt;
3W9f9vgjxpi5Xk95oWybx4wxPYwxvwauAGaG3fsgfPGF+zYtrfb2WVzs/uCv7rTM/ioJdR0SVEkQ&lt;br /&gt;
iQ6hVhI2bHCfyXXfvtrvk0gwQqkkDATWAjm4z5MwA1gDTC97vA3Q3tnYWvstcBFwHu7zK0wDJlpr&lt;br /&gt;
K654qFOffea+7dOn9vZZXOx+ITsf/vVdSXAeVyVBJDqEGhL+9jf3+0lubu33SSQYoZwnYRnVhAtr&lt;br /&gt;
7QQ/bR8DtTNAEiLnxRZfi7Mwiorc+4uLc9+vKSRUrCQEUoL0Dgmlpe7nOMereJziYvd2qiSIRIdQ&lt;br /&gt;
hxuc+UWNGtVuf0SCddJcu8F50dXm2KBTSXA+tOt64iJUXU1w2tPSVEkQiRahVhKc9yt/XwhEIumk&lt;br /&gt;
CQnOh2htfssuLnbPR6huuKGkJPThhk2bID+/fAkkVB0SnPkICgki0SPcSoJey1LfFBLCEGolIS7O&lt;br /&gt;
/VNTSOje3X0bbCVBww0i0SHUSoJz9tS6WJUlEoyTJiQ4ibwuQkJdTFz03tfx44FXEho10rcPkWhg&lt;br /&gt;
bfjDDXotS307aUJCtFUSagoJ3mGgTx9ITnb/+/jx6rdXJUEkOni/vkMdblAlQeqbQkIYgq0khBIS&lt;br /&gt;
Xn4Zhg+HZs3c93/4wf/2mpMgEl2832tUSZBYpZAQhmCXQDrDDYGsbnD665zyuaaQoEqCSHTxfh2q&lt;br /&gt;
kiCxSiEhDJEYbnDmIqiSIBJbnPcaY1RJkNh10oSEupq4WNMSyNLS8hARzMTFiiGhcWP3877/vvrt&lt;br /&gt;
VUkQiQ7eF4ALJiRYq9UNEj1OmpAQ65UEY9zVBFUSRGKD9wXgghluyM8v316vZalvJ1VISEiInYmL&lt;br /&gt;
zoe+ExKg+pDgXUkoKam9y2GLSGhCrSR4VwtVSZD6dlKFhNTUug0JNVUSQpm46B0SmjcPrJLg9E1E&lt;br /&gt;
6o9TBQi2knD4cOV9iNQXhYQwOKsboOoLNtXWcAO4KwmBzElw+iYi9cd5DSYnB1dJ8K4eqJIg9e2k&lt;br /&gt;
CQlFRXVXSQD3B39tnnGxqpCgSoJIbPAebgimkuD92lXYl/p20oSEEycgJaVuVjdA1ddiCLeS4Jwn&lt;br /&gt;
AQKfkwB6cxGpb85rMNg5Cd6vXVUSpL6dVCEhNdU9oS/YNctV8a4kRGK4oXnzqocbCgvdgcXZXpUE&lt;br /&gt;
kfpVGyFBYV/q20kREkpK3C/S1FT3/dr6AK043ODvjcDfpaJDnbhY03BDYmJ5f/TmIlK/Ql0C6bx2&lt;br /&gt;
U1JUSZD6d1KEBOeFVpchIVITF48e9R8ATpxwf2Nxhj9USRCpX6FOXHReu6mpCvtS/06KkOC80CqG&lt;br /&gt;
hGefhW3bQt9vIJWE2py42Lix+9Y5Zas3VRJEokuoExed125amioJUv9OipDgvNBSUty3zsmGpkyB&lt;br /&gt;
N97w3XbvXpg3r/I+brgB/vxn37ZILIF0KgNQPonRWclQcXvvSoJCgkj9CndOgioJEg1OqpDgXUko&lt;br /&gt;
LHQHhWPHfLddtAjGj6/84lyyBFav9m2ruLqhppDQpg386EfQuXNgISEhobz6ANWHhIqVBA03iNSv&lt;br /&gt;
2ggJqiRIfYuv7w5Egr+QkJ/v/nfFkODd3rRpefvhw3D8uO+2wQ43pKfDl1+6/x1ISPAeagBVEkRi&lt;br /&gt;
SbjnSVAlQaLBSVtJcMJBxfF9JyRUbD9yBAoKfNuCnbjoLZyQ4O/bhVNJ0MRFkegQbiVBcxIkGjTo&lt;br /&gt;
kFBSAnl5/icuVlVJcKoFzqVane2PH68+JARSSfAWbiXhhx/gm298t09K0sRFkWjhHRJCmbiYnKzX&lt;br /&gt;
sdS/Bh0SXnkFunevPHExkOEG70qC8+/qhhuqqyQ4l5L2Fm5ImDEDLr+8/LHCQi2BFIkmoV4Fsqio&lt;br /&gt;
/MRoqiRIfWvQIWHHDti3r/xDPtSQ4FyVrWIlwXt1Q1wcvP023HST7zZ1VUnIy/M9sZKzvSoJItEh&lt;br /&gt;
1OEG58tHYqJex1L/GnRIcD7wnVMZBzNx0Xu4wfl3TXMSvvzSfe4Fb7UZEpz7hYXuH+/KhioJItGl&lt;br /&gt;
qMi9OikhIfjhhoQE948qCVLfQlrdYIz5DXAb0Ab4HJhirf1PFdsOB5ZUaLZAW2vtvlCOHygnAFQX&lt;br /&gt;
EipOUHQ+eL3bnZDgb7jBewmko6QEcFl+KCriUJMiDqcU8+aBIg4WFXGgqIhiazme2JbS0gopoMyT&lt;br /&gt;
T8Lixe4xSW/elYQTJ3z7c+IENGqkSoJItHC+RFQ1X6kq3sMNeh1LfQs6JBhjfgHMAG4APgOmAe8a&lt;br /&gt;
Y7pbaw9U8TQLdAc838/rOiBAeUg4eNB9G8xwg3cl4fBhILGEw80KWH7I/UF/sKiIQ6OL+LBbMds3&lt;br /&gt;
FLFzchGYImhSRMuVRRwqKcYCZLn3MbZs6WPT+HhOlJbiGrATV/8eQItK/b79dvftmWf6tvsLCda6&lt;br /&gt;
v60UFsIpp2gJpEi0cD7sq5qvVNPzVEmQaBBKJWEaMMdaOw/AGDMJuAi4Fni8muftt9YeDuF4IQtn&lt;br /&gt;
uMG7krDp2HGYl8uO1oUMy3W3GYCL49kYn0BpfgKQADtSIS+BCT+Kp1fbBE5JSOCpBxMoPZTA3/+S&lt;br /&gt;
QPP4eOJdLnYXFjJy8UY2/u5LJmxow1Ndu5IeX/k/RXVLIAsL3d9OiorKJzjpZEoi0cOpNNY0tOjv&lt;br /&gt;
eZqTINEiqDkJxpgEIBP40Gmz1lrgA+Cc6p4K5Bpjdhlj3jPGDAqls8GqWEnwd56EY8fcwWDaNPdt&lt;br /&gt;
xeGGzcePc2/jXCh00fi+vmw46yz2DxpE0fDhpF8zhDu+/DErBwyg6//rA4/3hDlduLywI9e1a8fP&lt;br /&gt;
Wrak+c6mpP+QRqvEROLLJie0TUpiwqY+pP6xB3/fv58z/vMfPvRzecfq5iQ43zCc/jpzEpxt9A1E&lt;br /&gt;
pH45E5tDHW5QJUGiQbATF1sAccDeCu17cc9P8Gc3cCNwOXAZsANYaozpF+SxgxbInIRjx+Avf4Gn&lt;br /&gt;
noJ//MN3uGHL8eOMzM0locQFv+1HSU4zeqSm0iIxkThjKl27wXHAa9DF+1LR3uJchoQP2vLFwIF0&lt;br /&gt;
SUnhvM8/Z8qmTeR71SUrhgSXy/3G4UxcBN+Q4H0yJX0DEalf4Q43qJIg0aDOVzdYa7+21v7ZWrvW&lt;br /&gt;
Wvtva+1EYCXuYYs6FchwQ35++ZUgW7Qob99ljzMiN5dkl4vsL/rBwSTPHABHxZMpObxDQk2rGzJS&lt;br /&gt;
Uvigb1+e7tqVF3fvpt/q1XB6HlA+vOAtKcl/JeHQIfelpOPi3D/+Tt0sIpHjDDeokiCxLNg5CQeA&lt;br /&gt;
EqB1hfbWwJ4g9vMZMLimjaZNm0Z6erpPW1ZWFllZWQEdpOJwg/Oh6x0SoPzMhdaWfei2Pc6bI3I5&lt;br /&gt;
1eViSb9+zH49yfO4MwfA2Y/zzd07CDjHg8CWQLqMYeppp3FB8+aMX78enlkL/9eBuMMZVMxxTkhw&lt;br /&gt;
QkBBgbtfBw64Qw7oJCwi/uzb5w7S3ldWrUtOpTHYSoLmJEgwFi5cyMKFC33a8vLyam3/QYUEa22R&lt;br /&gt;
MSYHGAX8A8AYY8ruPxPErvrhHoao1qxZsxgwYEAwXfThPdxQ8boG3iHh66/dt4WFcLTRcXgoF1Ps&lt;br /&gt;
DginJiX5rHQoKHDvy1r3Cz/cSoK3HqmpLOnTn9QJOyD7Wz46fJDcIz3p17ixZ5vExMqVhPx8d7+c&lt;br /&gt;
kJCUVDkkfPIJzJ8PL7xQzR9MpAE74wz4/e/huusiczzv4QZVEqSu+PvivGbNGjIzM2tl/6EMN8wE&lt;br /&gt;
rjfGXGOM6Qm8AKQCLwEYYx4xxsx1NjbG3GyMGWOM6WKM+ZEx5ilgJPDHmg70u9/B3oqzH4LgBIGD&lt;br /&gt;
ByvP/PcXErYXHefo73Oh2EXfuX05taz0cNhrTYZT3ne+GdQ0JyHYkymVnHDB3zrC5EywcOaaNfz+&lt;br /&gt;
228pLtvY33CDc7xTTnHfOkHC28cfw0svVT6eyMngyBH3e8m+Ol94XS7c4QZVEiQaBB0SrLWv4D6R&lt;br /&gt;
0oPAWuAM4AJr7f6yTdoA7b2ekoj7vApfAEuBPsAoa+3Smo71wQfw/vvB9rCcU0nIz/cfEpyRjJIS&lt;br /&gt;
oPVx7m+cC8WGuNv7UrSr/ExGR46UDzE4Z110lhjWZiUBvL45bG7EWf8vkzvat+f+b79l0Nq1bDh2&lt;br /&gt;
zFMl8J646ByvukqC8xzNVZCT0e6yumXFs6bWJe/hhtJS3/lMgTxPlQSJBiFNXLTWPmetzbDWplhr&lt;br /&gt;
z7HWrvZ6bIK19lyv+09Ya7tZa9OstS2ttaOstR8Heqz166t+rKio+vMBeJ8DwV9IaNmy7MHWx+Gp&lt;br /&gt;
XCgxcEs/WruSK51x0fkArs2Q4G+c0vtDPD/PxcOdO7Oif3/yiovpn5PD4fN3UFBo/VYSqpuT4Oz3&lt;br /&gt;
cETPVCESHXbtct9GOiQ4lQQIPCQ4FYjERPf7RzDzGURqW1RfuyEhAdatq/rx9HQYOdL/Y6Wlvqct&lt;br /&gt;
Tkgo/0AvKXEHiJYtcQeEWZ9DieFXa/vBgWRatfI9mVJBQXkp39mnUwb0N9yw22u2RbCVBO+Q4ISc&lt;br /&gt;
s9PTWTtwIDe0bcvuyzazaEguxxof9/THX0ioWDFQSJCTWX1UEpwJiM7rP9APe+85Cc59kfoS1SHh&lt;br /&gt;
jDPcF02qyvHj7gl5VT3mzV8lIa1zgTsglELy//SjdI97iKFlSypNVmzatPzfzj6gciUhPh527nT3&lt;br /&gt;
/aKLqg8JUPnbhXcFwLsSkhoXx9PdutH7f/tyOK2AA4+vhtG7yD9uOXDAfcppZ4mnv+EGhQQ5mdXX&lt;br /&gt;
cIMzcRECn5fgPSfBuS9SX6I6JPTtC1u3+n5gB8r5gHXmHaSmlr9Yi4vhUFIBn47LBQszbD9SjiR7&lt;br /&gt;
Lr3cooVvyPAOCU67ExIqLoHs2tX9ol63zn2RpppCQsU3Dn+VBG+tdzXjgpfPJH55S7j9a55q/iXf&lt;br /&gt;
/VDsqSKAhhtEKgolJFx3HbzxRujH9J64CMFVEpw5CaB5CVK/ojok9OjhvnVOduTN+xv4AT+XlXJW&lt;br /&gt;
LzjzDkaNcl8IKT4e9lHAlim5uFyw7bJ+/PbqZBIT8QkJhYXlL+pgKglduvj2o7TU602itPxdwmmr&lt;br /&gt;
LiR07Fj590pMhNKj8Zgne8LdvdmQeoj/7beWJt0KfLaparihFpfPisSMYENCYaH7TKyXXx76Mb0n&lt;br /&gt;
LkLglQQnXDhXgY1k9UOkoqgOCc2bu28rDh2A7wtn48bKjzvfwjdvdt9ecYX7Nq5tATM75GItTPyy&lt;br /&gt;
Hx3KXolJSe6zFkLl+QeFhTWHBOeNwCckNN/Eti5381brs2n0h0bEPxRPk0eacPaLZ/OPvIeg0e5K&lt;br /&gt;
bzdWpxcAACAASURBVBzOt4b//V94663Kv1dSkrsPRUXAyhZMWjeA464SNv02h3/nlZ+pUZUEkXJO&lt;br /&gt;
SAh0dY8zzOl8UQlFxYmLwQ43OFet9ff+JxIpUR0SmjVz3/p7kXhfD2nDhsqPOyHhF79w355zDmwv&lt;br /&gt;
KODEY+6AkHp3P9q6ypc5JiX5VhK8j1vdcEPFSkKbNpDYfh1cdRFM7c6Rts/yi68SWPFZH/a/3JFd&lt;br /&gt;
M2DxHZ9z7yMP8JcupzF3+sUcPuysHi1/Exs2rDyseEtK8p1U2eT7NPr/aQBNDqcwIjeX/9u7VxMX&lt;br /&gt;
RSoItpKwumy9VqdOoR/T+yqQEPzERWeOkfc5XUQiLapDglNu8xcSnG/9UH4yJG/OC+vBB90vzu9O&lt;br /&gt;
FDAyNxfjgkkb+3FiR7InqYNvSHA+nJ19FBSUz21w3mQqrm6IiwOSf+ANO5ET1/alTfJ/eeaPP+G7&lt;br /&gt;
mZbZ//iEvhsP0eKcUTS66bc0v/lO0k6/mrM2teCGR97h+Glt2HrvFDhxwvNh7u+6DU679xyN48fh&lt;br /&gt;
xL5Exizrx5WtWpG1fj1bhm2l8ITvjEiFBDmZhRoSApk0+Le/wZNPVm73vgokuCsJW7fCggXV7895&lt;br /&gt;
nhMSwq0kvPgiPPRQePuQk1fMhARrfb8dOyEhPd3/WdScSkJamjsgjMjNpcRa0qf3Je1oMoWF5fsH&lt;br /&gt;
35DgzGPwDglpae5077zJOLfOPvY2fhd+3Yf1ha/xh7fGsvF/D5J1YA3z02/ivl9udp/w4S9/gQce&lt;br /&gt;
gPvvZ/Ptc+mTv5fP//E+n/VvSfs//JHve3Qgbc1yT3/88RcS8vOhcbKLuT178nCnTmw8extrRv+X&lt;br /&gt;
415fXRQS5GR1/Lj7/cIZqguEs/Q6kEnTr70Gf/5z5faKqxtKStwBYdKk6vfnVCCcLzHhVhL+/nf4&lt;br /&gt;
61/D24ecvKI6JDgflMePu9N69+7ljzkhoXv36kPCoQR3BaHEWpb260fSDymecn3FSkJ+vjv1O0ML&lt;br /&gt;
+fnuF2xJiTsMpKSUp3rnhWsTjjL57cl83OFCzv2iNVv+1JrfrX2T99uOpxubuNc8zA/NOlfqn/Mt&lt;br /&gt;
IaXHeVz40Q5m/fFq/luyl0H3DOceHiQxzn9tMimp8mmi8/Pd+zPG8D8dOzLswx+xv9tBRuTmsqcs&lt;br /&gt;
HXhPXLz/fpgWwDU4gzmVrEi02lN26bmMjMBDwv6yEcBAQsKBA/Dtt5VfL8XFEJdYysG4Auh1mLfy&lt;br /&gt;
9rO02U6OjtvC1V+t57zcXHp99hlNly/nvNxc/lP2wq7t4YYdO9z900mZJBTBXgUyopyQUFAA27e7&lt;br /&gt;
fwoK3B/Yzrf+7t39T1zMzwdaFDBmcy5F1rKsXz8yUlKIjy8f069YSQBo1MhdNXD24V3+T04uf5M5&lt;br /&gt;
fhzo8AlXfJBN4p7veO/vA/jJljXs7TYE179epV1+Xw4NAg76XwLp/QaQEJfA7ZP/yh/7DuSDu29h&lt;br /&gt;
+tL7Kb3iY3jtlfLZm1799FdJcPYH0HVXS76fk8zOW9dx1po1vNWnD4WFjQB3wNi2reZrYsybB+PH&lt;br /&gt;
u8OW975FYo0z1NCpE2zZEthznIvCVRcSvi8q4rvCQra2LOTEqBP87stCjiQVsuvECb4rLGTd7YUs&lt;br /&gt;
b1TEfAM8B9d9B66eBponselYIhlpSfRp1IiWCQks2LuXs9as4YqWLTnWrBMJCalBT1zcuBFGj4Yl&lt;br /&gt;
S6BDh/L2nTvdwWPHDndQCtfmzdCvn3typ78VWNKwRHUlIS7OnaidciGUL3c8dMj9Iu7QoTz1e9tZ&lt;br /&gt;
WABPuQPC0rKAAO6xPueFX7GSAO6A4D0W6D2skJbm/tAsKC7guW/uIPFXQ7l92Qk2PGsYuGsXV/NX&lt;br /&gt;
Prz/Y+jb1zPpEvyHBH+lxJsG3cyey17m/F/Gcew/H1N6zjnlyzPKeE9KbNzYf0hISoKErY35LDOT&lt;br /&gt;
lgkJDF6zhv3d3X+4w4fdv4O/v5m3Dz903/qbFCoSS7xDQiCVhJIS9/tLx46VQ0JREXxXWMhlX37J&lt;br /&gt;
KStWcMbq1eycsg7u2Mhfvv+Oz44cwQIDGzemxcpTGfaf7jxU1AcmDiQ3YxDj/t8wuOpsfvHJAIYv&lt;br /&gt;
+xGzunblfzp25Iszz+T/9ejBp4cPs+W+z/iw70by4t0v9IqVhNxc+O9/K/d7/nx3CFq0qLztyJHy&lt;br /&gt;
Zc/ffBPY36smf/qT+4vWp5/Wzv4kukV1SIDyEr+/kNC0KbRu7R5u8D5vwo6CAp7qmItJcAeETl5p&lt;br /&gt;
IJBKgve3fO+Q0KQJfJOfQ+afMileMYsvZ5zCrxfvxjX519x03kYWcDWJSQYoH7KA6isJFb8l9I2/&lt;br /&gt;
kiX/eYch17n4Lm8H9uwfw8qVlfoJ7vkYx4+7f7xDghMkTk1K4uP+/Tm/eXN2XP8lXLmdvMM2oJDQ&lt;br /&gt;
vuwSXdWdFlskFuze7X5NtGsXWEhw3msyMtyh2nlv+WazJfUX39Hr35+xMi+POd27s7xvfxh3Nvxk&lt;br /&gt;
GM/sHMyagQN5q08f5vToQat/ZtBnezvONqfAlkY0NYkcPeJ+f5g9G559tvyYccaQ3bYtX591Fs1e&lt;br /&gt;
7cLGtvv50dpPYeIWDhb4XqCmf3/40Y98+2wtvPqq+99vv13evmNH+b8rfN8I2WefuW/9nexNGp6o&lt;br /&gt;
DwnJye4PQScNOyHhhx/cH8QtW7ofd/6H3VHgnqRYjKXlH3wDAgRWSfD+lu+8qcQlnuCHvtNZU/pj&lt;br /&gt;
npuzk7cWFLO9oC+laz6HJ5/kqKsJUH4q1ZoqCVWNNxYWQsp3F/DcLe8z9Po4Pm92AnvuufDKKz79&lt;br /&gt;
BHdIOHzYPfZZMSQ450lIi4vjtR/9iMZvd4DJW/jygo0cLSglP7/6sU7njbG6kFBUBJde6n+4RyRa&lt;br /&gt;
7N7tXpqckhJYSDh40H3bsaO7qlBQAOuPHeNn23MpnrqJwcUtWX/WWdzQrh09itNhbzIUu9j6/9s7&lt;br /&gt;
7/CoivWPf2ZLdje9kRAIhBJKCKFXQUUEseK1XvWnV2zgRcV+7VdFr4ooKlexKwoIYgdsgIJKCSUQ&lt;br /&gt;
QugQShII6XWzmy3z+2Ny2E2jBs3V83mefTZ79pyz50zOzHznfd95Z2/d89TPk+By+dqe/fsbF+pW&lt;br /&gt;
oxHbwnbcvWYwk+Lj4cocnuiUyivZ2TiPEiS0f7+qh+edB7/84hsI5eTUntfaPCKhqso3ZtFiPXT+&lt;br /&gt;
3LR4kXAsS0JMjPpcUOATCB4puXpVH8LstgbnOx5Lgr9IcDqBDst4YFUKk3Y9zdY3JGcVh/L9zfO5&lt;br /&gt;
KGApxpQegC8oSBMJFovvPCcqEiwWODPhTD7/5zIuHGfmu142lfBhyhQsAT6TSWSkr6GpL3j8kykZ&lt;br /&gt;
hMA2pxM8352iAYfJmrgJQl1HtSZojdnRRMKhQ7BggWqUdHRaGsuWwbffquc0Lq5uTNHRKC5W7x06&lt;br /&gt;
ACYvT2Xto8/69RR5a+Ce3lyb252I2pzJWh0yGmkgErRZCtqAoaTEV6+kVGKksX7f5YJQg5nnO3Ui&lt;br /&gt;
8u7BJBW24sE9e+i6Zg0f5OaBoeFyktp1XHSR+l1t1cvsbJVpduDAhtd3Muzd62tbjhXXpPPn4H9O&lt;br /&gt;
JGiVobRUVT5tumJGnk8gLO/TB1Oh7UgAoj9G47EtCQaDalAOVR7koV+v4Y6kkfwyJYuJ66zMav80&lt;br /&gt;
YscONne7isAgceR4LbmSJhLA53I43pgE8IkEgAFtBrDk1l+59WoLM8ZEwsMPc96Xt2NE/VirVj41&lt;br /&gt;
35i7of55w9e2Jvzp3tS0scOMNNYfbtpeeDwiQRtxaaMVHZ2WxMiRcPHFdUVCTc2xZ+1oIsHZpQze&lt;br /&gt;
Xc+0gv080K4dT+cOgE0RdTpHbdDSvXvd1V/Bl+9Aa6MKC+smQvN6fb/V2HEAIU4LYzK7kTlwIANC&lt;br /&gt;
Qrhl13Z4dz0MKUL6+Vi19rFTp7r3kJ2tXLJxcXUT0J0s/vEduiXhr8H/nEho1JIQ42BCdTpeOBKk&lt;br /&gt;
aLfTqEhoypKgde7BwVBkL8Iy8j7ylyTw5sOfMf17AefdwNPX7mZG5OMQGIjdXldk1LckgK9CDRrU&lt;br /&gt;
+HVoQZn+1NTUPUdyTDK/3byCF88P4cFrouie+gGLuJgQyomO9t1LU+4GDadTlVX1unAC7ukHLgM3&lt;br /&gt;
Vm1gaWOtFL5plocPN1ypUkM7NDe38e91dFoCmZkqxkar78dKzZxb4oZJO3k2ZiNUG5kd3J//dOqE&lt;br /&gt;
o0z5Dfw7R23Q0rmzr85s26ZEtuZu0DK4FhQ0DIQsKFDH+V+TZoEA1cbY7dA9KIgvevbkDfpCuQme&lt;br /&gt;
38yI9PQjqdi19lHLEKnVzfx8JRJCQ5tn3RatTevTRxcJfxX+Z0WCFpNgD3HAK+l4PNSZxdDU1L2j&lt;br /&gt;
xiQEHaYg4n6mX96GLb++yqvfe6D/lSSzhZKXPkDGtTlS0eoHC9ZfFRLglVfgww/hsssav7fAwKNb&lt;br /&gt;
EjQSIxNZcfMKFg6L5qobQxgqVvIbZ5IYcKDOufzvxV8kaImoWrVS7869NrizH50coZyfkcFbjfTy&lt;br /&gt;
Whl5vU3HLuiWBJ2WjKg19OXkwOjRx7dg0oLCQh5stRbOz+OR0ES4sx9xdjV9WKv79UWC0ajiF8rK&lt;br /&gt;
VH0ZPlzVfa2zt1jUTKTCwsZFwoUXqhxrGpq4gIZtRND+MLi3DzyUQonbzdCNG7k8M5PtdmUV1KYk&lt;br /&gt;
alaDigolELT4pVPl0CF1rg4ddJHwV+F/QiTY7Q0DF0tLwRDnYHRmOgYj3LipDwl+poGqqsYtCWaz&lt;br /&gt;
r7JoIiH90EYKSi5kZqc2/PDBNB7/2cMq8zW8dNN2Mu7/lO0kYbHUrWj1px02Zkm45x4YN+7Y93bw&lt;br /&gt;
IGzapLY1JhIA4kPj+fWmX9nRpz3DxhkIM+Zz54f9OI8fgaO7G9xuJRQ0s6cqIBM3bEthYtu2/HPX&lt;br /&gt;
Lu7ZtQuXnx22osIX79FU46KLBJ2WTOvW6t1mU6vAHk0k5DmdXLVlC5dmZtKqIpjYhwdxR+t48Ioj&lt;br /&gt;
Hbu/dU2jsFBZCsLD1fdZWWoUv317XbdBdLQa1fu7G0CJhJ07605prC8S/K2NakVcAWujWNljAB93&lt;br /&gt;
786GigqebL8O8yM7KDM7sVp9loSKCiVQQkNPTCRs3gzLlzfcrrluWrfWYxL+KrToZEqgKnhhoVLo&lt;br /&gt;
JpNPJBSZHcwbnE44kPRuH8o6WuscZ7c3yEMEqI7e6QSCc/n8i2l4581m5Jp8ZpXCXksEPw6/m0s/&lt;br /&gt;
v4P/jIpmmBW61na22hTIExEJxyIwUImdtm3VZykbuhv8iQmKYdmNy4hNv4T+d69l+Q/d+H7rBUzm&lt;br /&gt;
3wRangCUOdRiUcLA61XxEJpgqCMSgOICA9O7dKF7YCCTdu3i04ICbmndmtvatKGiwkp8vGrYKipU&lt;br /&gt;
w1CfliQS3ntPCcn77/+jr0SnpaB17hddpOpaYyJBSsn7hw7xYFYWZiH4JCmJlc/G8KsUhIbWPY9W&lt;br /&gt;
9/1H0NnZENtaYggppNiSzcxfizB0kHj35PBP514u+Ww/LNjN0kOlBL5Rw9XeUA4TyzaSSKM/pdtG&lt;br /&gt;
UlgYd2Sqotfra+vAN5DQ8M9bUlkuuCGuNVfHxHDJu7n8NHQ/nVLz4MVwFgZGMKIykrLyIGJjBGFh&lt;br /&gt;
J+Zu6NVLK5+62/1FQmmpL7ldU7zzjhJodVbH1fmf4n/CkuAfLFNQAHvtDsqeTMdoUC6GpAhrg8jd&lt;br /&gt;
+u4GKSWZO1fQxXs973SNJVvEc9NN0/j7ihLEeWP4+Naf6OwsJOPcJyE6+oiCr58nwelUr+OJSTgW&lt;br /&gt;
gYHw6qu+z2VlTVsSNGJCI+CjnyjecQu9r8zk39368W8mE3/z6CPhy9o19Omj4gWaEgmaP3Vi27Zs&lt;br /&gt;
GjiQK6KjmZ6bS8fUVPbcmoFpeCEYZJMjEG20Ul5+fOlrTydvvgmvv/7HXoNOy8HtVqN2zeUHDUXC&lt;br /&gt;
Trudc9LTuW3nTv4WHc22QYO4NjaW4iJBZKSyRAqhYgw8nrruhiJ7Ee9teI/P+Du7L2nH0/YYuo7s&lt;br /&gt;
T4fXz6Mgbwzz1t7Cv2qepbJgLsvMOfzWKYYfI0aRyhA8xgAuYSFzuJ5bnmjDJpnCVTuehT17Grgt&lt;br /&gt;
/d0Nq1bBp5+qYEzwXY/FYKBbZju6PzOEqZ07E2AQLEvYR6/161l592o2jN7OtrjDVJtdx7VglT/1&lt;br /&gt;
Y6by8nwiAY5uTVi/HiZMgJdfPrHfPF6+/RZ++OH0nFvHx/+EJUETCUlJsGxbNSPSN4EXni7vQ3ur&lt;br /&gt;
lY4dIS2t7nE11SVEOL7lx8e/xZCaSrvMbHoc9vAKsD0kmC+DRnPzJ7cTfN7FBAcE8OU0kPhcFFrl&lt;br /&gt;
1BoUzd0AqlOsH5NwsiJBStUQSQkZGccWCerHLPDtmzx+yyCe8f6TlZvb8f26bZCSAlOnEhA+ATCw&lt;br /&gt;
ebPKijZ0qDrMXyRERflEQnU1JNmCeL1rV17o1Il5+fncvucgay/LhKEWZpTH8R9nHHH1LqyoSI14&lt;br /&gt;
3G4lRrp3P/57b04cDmUedbmUcGnMgqTz10LrQBMSVDAy+ERCRbWX5/ZnM3nfPtpaLCzp1YtRfg9N&lt;br /&gt;
QYFyD2j1cvJk6NYNyso90O1biga8RexLi5FILDUDeHJHL65ZZyNh324OWdrwlvFyFkX2Z22rYEbf&lt;br /&gt;
sonqVr/x277VeMUvcGAYsQXX4Vz3Mb3DHZzlXU63nQu4y/4CJD6BcfBQ/sEErPJqwIbNptobrxcm&lt;br /&gt;
ToQBA9T1LFpU1zJQWgpRVhOT4uP5/NN42nX2MO7lMv7+cjHFg0t4OzQPvoLBG0K4KCaSXjURzHks&lt;br /&gt;
lJdeMJCY2HQ5btsG/fr5Ph86pKZTxsaqz3l5Tadmfv559b5okUocJUTj+50MLpdPLDUVWK3TPLR4&lt;br /&gt;
S4LV6qsMKaOrqZicjrsGuK83XQxVHFy1mK5lUzjfNY5frxvO6iFtyYoNYMPWSKbMuoHRz82j8/YC&lt;br /&gt;
ygeksHXKA7w4cStJFRU8415M8MWXH+nV/fMkQF2RYDSqzlAzP5aVNXQ3NDYF8lholoizz1bHpacf&lt;br /&gt;
3d1Qn+uTb4K301ge24rW4/JZe05XmDiRUU8PZyAqLdqePT5LghZjACrwqKBAiZvERN8qdsEmE7fE&lt;br /&gt;
tYEJA7g9vR+kRTBHHKB9aipXbdnCTyUleGtrZVGRTxj8kS6HjAzfkr4bNvxx16HTfGjC82TRAp39&lt;br /&gt;
M59aLBKSy7iuIo1/793LpPh4Ng8cWEcggEpfrJnHP/sMCCzkw11T+DmlM1x7KQQW8nr7J9izfTzZ&lt;br /&gt;
M3fz0GffExjVmbF8QyfPfn4e+l9WF4/Ds+NKLg9/huXjljOxMh++/Bgc4eT3m0TF+DbsHPEo0+jI&lt;br /&gt;
9cwmlsMcmjYXb2AwHzGOv93RBu65h84127DbVS61TZuUZURbyl67R1BtknavkZFQVmBkdGQktpmJ&lt;br /&gt;
3JE2kLnuoTC1G22FlRm5uVx9KJ1vxq3kii2ZvJWby956JgNtRkb9KdD+7gZoOnixtFTlULn0UuWS&lt;br /&gt;
0WKumouFC5v3fDpN06ItCdsmXMGVFSYujHVTGh3Ko60fo53bw4Jx95FcmIf5CrXfrYDLAAd/MFAQ&lt;br /&gt;
E0b20GRe2ZpCuxFncc+Uv9EpIhptHcYfatd9r+9H88+TAEoAFBZSZ0lpf0uC3a7SvGqcrCUBVExC&lt;br /&gt;
cjIsXqwqu3+2xqMRGgoUJGOcuZr7F7/AcOszXJYQw6sLclnLYD7mBnZsfBrnWDUvyt+S0KGDqrgb&lt;br /&gt;
N6rAyR9+UKZBUJYFjwcGhYXy1r2hvNqrM55zDvPmwYOM2rSJLjYbE9q0Ia+6NSkpZjIzfSJByoZW&lt;br /&gt;
ltPNunVKxFksyqI0atTv99s6zYuU6rn87jt47DHfqP5YpKfD+PGwdKmqF1oHagxz8Xl+CT+WlPBt&lt;br /&gt;
STG87sQgg1nXvz99Q0IanMfhUMGBXbtCel4635mnI+7/hGUSwg9dzfjNvbho4xLGvPsUjqBI3hA3&lt;br /&gt;
M3HTBHZVJLJwGOCGM8/0rX2ixRa0jQ6DjBsg4wZ+2XiQX8o/4IUl71J13QdwqA/2tPGsS76WM264&lt;br /&gt;
hiGtdvPdee/S9ZMPebbgNf4WdBaZ74+nf9JlnHFG4JFBU31Lgjaij4z0xS5osxs6hVrghziefSGO&lt;br /&gt;
2A6SuLMrYGAxRZcVc+euXXiALjYbYyIjGRMRgUOEA6Y6IqGiQrlw4uLU/8RgaNrd8MMPSui9/DL8&lt;br /&gt;
9ptaqrpPn2P/H4+Xr75S75pFQ+f00aItCe7DhzC688iPN/HgU4+BkNz82uv8GNWRuztdxOcP3Urq&lt;br /&gt;
py+zbNFPWI2l/Pyyh0E7i5H3bOSD3I+xJN9KQETdFkZT2/WyNTewJGgBQ/6BOZolQXM3+J/jZCwJ&lt;br /&gt;
WkcaG6sSvyxapCrUsdwNd96p3jXREmQ188TZT7Bl4hacw4cSf9MBbhvekTHGhUye14VW/xpHF3YS&lt;br /&gt;
FubzdWqWhGXL1OcVK3xmOy2+ICpKXYunzMyd8fFkDhzIb336MCgkhEezstjw8CrSL9xG+PAysnPU&lt;br /&gt;
wY88ooTW72kCzMhQIqtvXyV6dP53+fpr9X/UFimaNev4jvvuOyUWP/1Msqa8nOml++C/GzinfCVX&lt;br /&gt;
bd3KirIyLgyJhodSeMXRr1GBALBjlxuZ9DnTK86i79t9WZq1lBG77uHDeZPImLOM6RsfJJRy0u/9&lt;br /&gt;
iNsvymFuv6nYUhKP1EWAnj19SY20wYO/QE+MbcPjZz3OlLgsmPMtorw9XHgXV6W2YcIPN7Kn/SH2&lt;br /&gt;
3PYCZGcz5+K5uL0Gxi29nl92xcGECYRkrkYgG4gErW2LiFBuNylVpx4S4msrysog54CA7aEEf9WB&lt;br /&gt;
sz7rR+GwYXyRnMw54eEsLCzkksxMKueshFc38kWrPXyWn88Bh4N9+1SlTkhQ1tWYmKYtCQsXKlHQ&lt;br /&gt;
uTPceit88MGprfUgZd001vv2qXfNGtqSaM62z+lUouyDD5rvnCdKixYJKV+vYuH4fMY/8DHF7vak&lt;br /&gt;
XnQp6yJX8njGKt7cvYiz73+XIVffx7DRI5HuMJYsUf+gVatoMpmSVpGOx5KgBS7WFwmNuRtOxpKg&lt;br /&gt;
iYzYWJg6Fb74Qn0+1upq06cr87rVqkYq2nm6RHXh62u+5uV+S3mvW2s6PlTKv86MxbRiATvpRtI9&lt;br /&gt;
Y7jW8iUmXHTooO5j8WLVgBQW1h19QMOpU0IIhoeHM7tHD3KGDsU2tyOHo8sofWYjr/Zczxu5uUx5&lt;br /&gt;
Xaml5sjudrxoS+B27+5b6c7lgmefrbvATVMcOOCbNaPzx6KZkTWxpwUdHo1cp5Mv7Ifg31uYGLeS&lt;br /&gt;
IRs28LnIhuIAXo7vyr4hQ9g2aBBT2nWBtVG4HA2bvaySLJ5a/hSjFnaCq68iNMDLqvAH2Lc4maXz&lt;br /&gt;
XuTyXW+yxHgB703cwDCxmvU9/sG3P9sYM0Ydr7UNoBp1TeRo/v6kJN/32kDkjKFG2HUhcu43RH50&lt;br /&gt;
gOHeJ1idsxJuPos7tnfn2TVTWd2/L1dELONvybtYljIJvv8ew/Az2G5IosdnTyuFLJVg0IRAZKSq&lt;br /&gt;
f1VVqj3U6jH4looHZfE4cADCzWYub9WKt7t1Y++QIfzWcRC81ZnAmgByuuRz9datJKSmcnbBanh2&lt;br /&gt;
MwtC9rO0uJjoBHeTImHtWjjnHPX3hAlKxCxefOz/ZVN8/bUSJ5qF6MABVaZNZa08Vex2JTpPpMOX&lt;br /&gt;
Em64QcVsNJdQ2L1bCbFbbqnrXvo9adEiIdfhYGbvdPAI+s/uQzurlf79faN2rVIEBEB8vG8NgZUr&lt;br /&gt;
1XtjJu/jtSQEB6sK5XD4vtN+77331NTAYyVTOhZauubYWBXUoyVdGjz46McJocSBEKry17/Poa3P&lt;br /&gt;
hfdXUj1nOdMSehLzzxLGXWgjr2ATH1VewX4SuGDJfQxhNb8s8zJ+vDpXaqo6XjMhhoaqBqaxmQvh&lt;br /&gt;
IgDHR+15Lnswgz/vRUC+jbt37YLPVsEj25i6J4flJSVk7HVx4EDdY0tL1blXrz7+sjoa2dkqo17n&lt;br /&gt;
zqpSSQl33QVPPAEvvnj0Y2tqVONz3nnNcy0tgZoaFXB2tAW8WgJSqql22ijJ64Xvv/f9HRmp8gfU&lt;br /&gt;
Hyk6PB6WFhfzwO7dpKxbR/zq1WwYuYOA9g7cn7flm/Z9mZY1DPFUTyZ1anMkf0r92Q1F9iI+2PgB&lt;br /&gt;
I2aOoPP0zvz3t5e5blsSs16+hF8f28LQe17CUFLCwkvepVf0IW7xvIM7pS9RUcqcXljoe278LQlx&lt;br /&gt;
cdC7t7ruESPUtjPO8JnbtYFISorvmBH921Dx3SPcxU5sny5jWMIgpqycwhuiO3mXp7C0wxy+u/RK&lt;br /&gt;
vHuzYMkSMq0D6f/rNPVDXbpwf96D9Cz6BZxOIiNVx5mVpc7dmEgIDFQWm/p1UwhBRGUgfBnP+anJ&lt;br /&gt;
WP4xlNwhQ/m6Z08GFbVG2Dy8VXaA0RkZZD6/gtmj1jJu2zbezM0lraICl9eL16vOq1lTOnZU5bNz&lt;br /&gt;
5/E/G/VZtUoN2tav98WrDBigvjsd+Rpef11lyr3qquM/Zs4ctVx3Wpp6jpcsaZj59kTxn/J6KiLr&lt;br /&gt;
VGjRImH8zp2YMcA9fegZq2q4FmkbGFh31N6pk29RkxUr1HtjlgStMh/LkpCYqExaZWW+fbV9Fi1S&lt;br /&gt;
lbAxS0Jj6zQ0hZZYRfOrCaHU/yefHP85wsIaigRVLgL2nw2zfuTR1jv5yHk3w24T9L4dvuxdReQv&lt;br /&gt;
b7OaM9jjSWB8+kRuifyS3MwSNm9WGePA17gUFzdMQLN3r2rIuyYK+noiaf1mT57dPRTmtocOVbxc&lt;br /&gt;
uYdzNm2i9/6VJKat5qKMDB7NymLe4cMs2FRFRZWXyZOP/z6PhiYSEhPV/+vwYXj/ffWd5k5pirlz&lt;br /&gt;
1fufyU3xj39Ajx5w991/9JUcnW3bVGDc0qXqc2amGjVpMQijR6t6lZcn2V5VxWs5OVyYkUHkypWM&lt;br /&gt;
zsjgk/x8BoSE8E67JLjsDF6y90fM7EjpijAqSg2EhtatjxaLxByzh/n7p3POR+cQ+1Isz3x0CyMW&lt;br /&gt;
5vHZKwPJfc7Ia7MXM9y1E3HnneriUlM5fPEtZOUH4/Go+tC6tbJ42Gy+mUPa4AJ8OUXqtwVr1sCW&lt;br /&gt;
Lb7tJpMy2w8aBFdeqUau3y4y0DdiBLMun0XBgwXcGvw13tw+VKVM4036EPdKW/6v/EMmjRzJxFvX&lt;br /&gt;
I7/7ju3x5/L3mo+55q0REBHBNR+O4QHvFMb3TsWCg5AQ1UYYjap+7N+vhHFCgupstQGOhpb/oTJN&lt;br /&gt;
RwAAGgxJREFUpG9f1R5Z7RYujY6m9/pOJPy3DyXDh7N14ECGrexG4K5wNldVMWn3bgakpRG6YgWD&lt;br /&gt;
126g5tbdHEg8XBsQKUlM9Fn56lNZqbJO3nVX08+KFvi4bp0KnvR41Igd1IDtZPF44I47Gq5kq82W&lt;br /&gt;
W7jw+N0Za9aoMg0IgEsuUQJy4sSTvzZQ1xUerly/pyKyToUWHbhoEoL7DvXmX4XWI6pUEwn1g/s6&lt;br /&gt;
dvRZEjTz+NHcDfUtCfHxapsWtZuSojrBjRvrCorFi1XEbv2YhJPxi2kjdP/gmxMN+AsNbeji0MRM&lt;br /&gt;
Sopq53IyusBPz7Nu5mQuvmsZDyZ+xbPXfEXXHXauzMzjsvSPeLfoTeZME8R82Z9pDGctg4ipGERo&lt;br /&gt;
SCfeeUewebNviVjwVaquXVXZ5eTAgQ0WEld3YPesDrw100v7YdWMHl+Jq3MVhddWMqvqMDnaVIvv&lt;br /&gt;
BT/lBnHTtmB6BweRHBhMB08QXWJOwF+DKsOyMnUNWkT60qWq4ZswAd5+2yciGuPjj31/+5tsfy/m&lt;br /&gt;
zp3Ltddee9z7FxSoZ9/URM2V0lcP6k8Lbmlo4kATaGvXggh1MfLuKuavrSL/mioYUkXyrirKcBMg&lt;br /&gt;
BGeGhfF0hw6MiYwkJSgIIYQaYZXD+edD//5qFNe5M4SFS/YUZ/Hr/l9Zvn85v+7+meTLciifJ3gk&lt;br /&gt;
pA1f74skLLsAj9hNqhzMi4Z7SY2/nHYX9OTtZ3zz9fwDlDWRkJmpOimt7hkMSlQbjU0nFwoIUOLN&lt;br /&gt;
n4oKdYzm1ly5Em6/XX1nNVkZGnEp7311KRidvPDJSsqilrIkawm5/efyoZAs2NSaorhBiOF38cbo&lt;br /&gt;
KP7PmEf4irU8Y56MyWnHhQnX7b0QZw9komUggVt6cXhvdxISQmjfXrVxBw9C+/a+a9JEgtbW7t+v&lt;br /&gt;
rDqauDAIQVJQEMMrgzj0WRxpD0G1x8PGykrWlJfz3d4KGFbIVGsOU9dAtNmMY+gvHOh2KeF7rLSz&lt;br /&gt;
WGhvsdDOaqW9xcITD5r5/nuByQSPPtp44jZNJKxdC2edpf72tyRICc89p8RWt26Nl39jLFwIM2ao&lt;br /&gt;
fuE///Ft37yZI8LmwAHfmhhHY+tW9UyUlKjA1TFjVC4HbZr7ybBjh7ofo7GhkPm9OCmRIIS4A3gA&lt;br /&gt;
aA1sAu6SUq47yv4jgJeBZOAA8B8p5UfH+p13u3Vj1zpV47RGvl07par8pzaBz7TVo4cvxemJuBt6&lt;br /&gt;
9lRmcK3SJyer9/Xr65r/R49WqzbPnFn3/DNmHNu0XZ/GRMKJUn+0BL4OJClJNQBaZxFsM9PBfR4V&lt;br /&gt;
G89j0wdvEN5jPb91WMaiqcvJ2vALNZ9WI4LTGBu2iXvLXoUB8I0llA2mZLau7kvl1GSCB/aApCR2&lt;br /&gt;
7oghKEjQpo3qoAsLlcofOFA1MvmHDJQuCMKyKoiEXOhSDWtmQ7HLxaTXKpmzugpX50rWd6liXkE+&lt;br /&gt;
jtqU0EHrAzgzPpheQUH0Dg4mwWolymQiymwmwmTCVO9mtVkVmrsBVBAbqBHCO+8os9/NN6tt778P&lt;br /&gt;
b72lrE0Wi2oMrrhCxYNs3OgzD58KUqrGpUuXY+87d+5cxoy5ln//WzVSRxMpxcWqMQ8JUa6axrLY&lt;br /&gt;
5eaq0fjIkarD8XhUA+OP3a6CX1NT1XmOJYxyc1Umy7ffbj4RVeXx8HlmFVxQxfYOVYzaUEVqmyrk&lt;br /&gt;
NzXMBxgKOdZA2BjE+fYI/jE4hITScKKCjEeEvEZaGoREVlEZtJv4C7bw1cY0kktW03NIBjOurSK5&lt;br /&gt;
AB4oDeSdgzVYnHAJktF9YxBjz4BRo7j69XNI2x2mfPU58OEZdc/v32klJvoGElpWQo2wMPW/ORG0&lt;br /&gt;
diggQE1v/Oc/63ZymqUCj4WLk0eSnDyS5859jtsmFfPjthVE9VpLZcgaDOdNZaK3nIluiBgRQZcx&lt;br /&gt;
ffB+EcPAHCN3JRTTYflSXrW/g+ENyY1ASVBbzGVJvEYSNS8lwrkJ6uFKSKCoMAIhBL17q58+cEBZ&lt;br /&gt;
FbRZHxqxsepZkxJsRiNnhIVxRlgYrVfA0v+D3YU1bKeCdeXlTFu1lLLuF/J1YSXZDgdOP6e9uMxA&lt;br /&gt;
yAUWqvZaGPSFhSvPttIjyqLEhNVKQKmF/HwTXbqo53XbNnVcjx6q/PLz4ddf4fHHVR3+/PPjL38t&lt;br /&gt;
AZt/CmqnU43a779ftem7dzcuEvLyVK6G6dOVO2nrVjXDZvhwJRC6d4exY1W5dehw/NeUl6eeJZvN&lt;br /&gt;
JxIMhrqpu39PTlgkCCH+jurwxwNrgXuBH4UQXaWUDcK/hBAdgEXADOA6YBTwnhDioJRyydF+KyYg&lt;br /&gt;
gGW1nYCWulgIpXDrZwLTRMLIkb7CPBF3A9QdkYeEqH/svn0NZxtouQH897/kEvU6ETQTfv1MiCdC&lt;br /&gt;
VFRDK4a2BENiolLZ2sjSYlGiIigIQkMMWAoH0UoMYvGNDzE528UzVecy5cLrKTlzA10TUwlM30Lf&lt;br /&gt;
7HJ65q/mnPxULA9LqD33RJOZsdYYSs6JZ2hgIg+JJHLWJ3BRSiyOyFjyN8fy5a/RXHqpkehoXyWM&lt;br /&gt;
NJupWRvBoJwINiyAOzrBreO9DLmymrSSKuxdKhETq5iXn8+LjUQdhptMRNaKhiizmZoCE9xp5stg&lt;br /&gt;
MxkVZkIuNbHgoBlrLzNBnU2kDDaz/BcjN98syMpSJs3qahVYdu65amR+1VVq9Ll+/amJhNJSeOYZ&lt;br /&gt;
Vb7PPKNMja+/fuxRxKxZKtlMUBBMmdL0fvPnq2fG4VCitLFMdmtVegxuugl+/lnlyfBv2EEFA86a&lt;br /&gt;
peJnXnjBl/TGH7sdHnhAldcbb6hMfxdcADfeePR70ZBSXUt8By9fp9mJ7F9FZpXvtdfhQF6HymB2&lt;br /&gt;
0EpNRRBhq1vT1xDEjAeDSLQGYjUaCBwFQ1+A4eeWM+SynYTE5XDfxF2UHdhFec5unPv24NyZw9SO&lt;br /&gt;
FeSfBc+XwpwyQaBbdUJumwW6J2EangK9erHRMoTvJj3Pt5O/ZdQoJSg37VPxQB9+qKxJRzrmWrS2&lt;br /&gt;
p29fVfc1Ue8fUwA+K8PJcvvtqs4OGeLb5h/wGB/v+7tn50hmvzuW0jVjeeheePJxL7uLd7Mlfwtb&lt;br /&gt;
C7aSkbeF+T23sP7sXbxproahEOSElIIguuyN4gyXmQHOnYwO2kj7N8vgvz6fww0BgQwztKfNuHZ8&lt;br /&gt;
Yoih/asxsC2Godti6JcQA2tjICqKhKAwauxhHD5srnPf+/Ypy0PnqAA6E8VFUVF84w0m/c4+bKoC&lt;br /&gt;
m01S4HKR7XSSftDBrY86GXGLg/yuTtL2V/P2/hKcRTVaU6NYYKIm0EJhRgC3FQr4j+DGAyAmC96K&lt;br /&gt;
FZRvE4jH4QuPoOt7goH9BCFBYBQCoxCYat+N+La5nYKfWgvi7xekZgte3C0ItQkO5gg8owQBFxow&lt;br /&gt;
pAnm5wmqC9U5zLXnMgnBV4sEaRWCvz9qYN6HRvKcRjr1MDJqlIHRo8WR2RirV9cVCZmZSuBo450v&lt;br /&gt;
vlAxLu+8o+rctGlKaPz0k4pJGDtWtSFff31qVomT5WQsCfcCb0spPwYQQtwOXATcDDQ2lv4nkCWl&lt;br /&gt;
/Fft5x1CiOG15zmqSAA1GszMVEpN44UXGgZlaUqvXTu176pVTQuBwMCGloTG6NhRPfD1VaDW6J5q&lt;br /&gt;
AqFPPlGN74kEO9Zn6tSGkbTdu6tzX3453HdfXZGQkqJEhRBKnGijli6dzbgrwzn83Xiuuw6m3Qce&lt;br /&gt;
r4d+5xxgsnMnhi476HvmNvpEZmDbs5+AfQW0L88lIS+XDqVreDgAwp3Ah3AtwB6YiqDyRxulthCu&lt;br /&gt;
qApj34gQRGQYF6wPx9Y6kgMdoqmZ1YpSWwwRC2J57uJQPnk3kAcHBdLvzFb8d34AnjZGnpou6TbQ&lt;br /&gt;
xX1PuSn1uihy1b7cbrJqnNCvknl2N0W7Xbju8RVG57XA85DhFvy40oS9XOCcKbAYBTd5BTFbBHwA&lt;br /&gt;
T7UVmN4XPO0WfLGhtkFBNSaF+YK9uwWDBgiCbb4GxigEeMFsEJgN6vO6NYJ0N1AiCHtEMKNY4FgD&lt;br /&gt;
rWN8x/g3UkYhyKquZnN2NqZr4OV9AmsGREeC1g4IIRCA9MKLWyD5EYiOEnyQDtGb4Zuv4frrIdAq&lt;br /&gt;
MACfZQvCr4bywQJGwls7BEPDlYnYgHqfuQO63wQpyYKpn0LcakFSN3VdBsAlJS9N97J4i5flb3nZ&lt;br /&gt;
leNFXOZl6n4v2fu8OLxenFLi8HqbfOXme9l72A0VDgiUsA3amM0YD5iILPMyLtzL4v+W8vz1ecx+&lt;br /&gt;
LY9Iy2E61hTRr0sxO24vZUd5OcaKSmYm2Il+zc6+5zz8XAXRdjDNr/u8F5ttFEcmENG3A0Gdk3hp&lt;br /&gt;
XjdSixJ55otk+v4toY6pLbkGwp8yMnasElJa0GS3bqphXr26oahq3VqJKm0Q0JQlITa26eyDx0tj&lt;br /&gt;
OT6uvVbFzvjPoOjSxScYx4wBgzDQNaorXaO6clmSioCe/3cASdbhAgpc+7jjsX1kHNxLqnUfB67M&lt;br /&gt;
4yNzHht3HsZtqSKq2k37MkgohfZldhLKtpN5aAdxbY3YMg2UrPMyrcoNn6JewOWAC7DHmym02jC2&lt;br /&gt;
CsIdEszoshB6mUPJvyYEERiICAoirDCTB6yPsuXeYHKLQxh5YQgbvgll3jehDCGI9ydYadU2gPd/&lt;br /&gt;
CeGFSVGs3GimJEjw0w74aKmXbI+bi293ssPiYtUaSVCIxC0l5hBJQbWkyC7pPEhSUCzJqob8HZLO&lt;br /&gt;
XSQeKfGAepfqGG2b3SHhSklJmMRbLXkoy4swSaQBeBielcDj8B7wXmYj/6xE4G3IAYbvB76EccBN&lt;br /&gt;
v0CQ0Uiw0Yh5npHxXiPT1xqJsBqxFxn55QcjQ3obad/KSNoKI/u3G3GXGwldaOTtjUaG3Gxi5c8m&lt;br /&gt;
Lr3JRFm1ibPPNnD4sKC0VPWF8+ervsntVpaL042QJzBXQwhhBuzAFVLKBX7bZwJhUsoGiyILIX4B&lt;br /&gt;
0qSU9/ltGwe8IqVsNG2QEKIfkJaWlkY//5ygRyE/X1Xe+fNVJ3nHHUqdNSYG2rZVcQUzZhz9nMuW&lt;br /&gt;
qWCUSZPquhaKilRw1bp1Pr9YS+WNN5RpeeBAdS/+KnTkSLV9yhQ16hs8eCywgLff9j182mpvN92k&lt;br /&gt;
Rt8jR6rphT//DJP+Vc4NE3PIKc9h5lc5fPPFQe4fl03msoO4D+bTJbiI9sYybIWVBFc6CXNKwh0Q&lt;br /&gt;
7oCw2vfg48glX2MQ2I1GHBYjLqsJaTPhFGYqnEZcBhNVbhNtOprwmE0c9AaxuSwMe1QY0X1DyJGh&lt;br /&gt;
bCkNJio5iL0HzQRHGLGFmdibbcQjjHgNRrqnGCmpNLDvoIHO3QyUVhoICDJS4zWQk2fAjcASbKRd&lt;br /&gt;
RwNeIfAKQbXLQPZBQYBN0CpOUF4pKCgRWAIFNR6IjBYUFIMlUBBgA2ECDwKPBGkAjxB4garHHocn&lt;br /&gt;
nsVsBrcHhEFgMCohJwFhUC+vt3YUUes68ErA8PsNKcwuF0aXG5vXhcnlxlxTg026CHDVEFBTg8Vd&lt;br /&gt;
g7XGidVZg8XpxFLlJMRhp2t2Nr32ZtF7z17iSquOGSldY4Qqm4nqoABqgqwcrA6k0BgF0TGs3xtP&lt;br /&gt;
vqsj+Y5EDK3asaO4FZff2YbJr4QwZw5cd506x3PPKfGdnt74qOuSS8aSkbGgTmT/kiVqULFnz7Gt&lt;br /&gt;
JfPnq9/yD7IEZZa3WutmNm0O3G5l8fJ3e+zapcSMxaKsH43lVtHu3etVf8+ZowRlRIRviev77oNP&lt;br /&gt;
50s+nF1J2o7DfL24gLStpVz5f6WcPaaUd2aVkLm7lLDYUlyeYs4fUICtuAxzeSXmCjuyoJqASidh&lt;br /&gt;
rhrCazyEOX11O8gFgbWvO8rgU7P623KSeQ1cBnCbDLhMArdR4DIZcGDA4RF4hMAabEAaBTVeA+V2&lt;br /&gt;
gS3EACYDJovAaxB4DQakQeA1qr9LKgSlVQbiEwSVTgPVNYLCEgMuIQgMNxITb2LnPiMOrxGv1YQL&lt;br /&gt;
I4GhJqqlkcBwI4cKjUS3M1LqMFPkCMAdZCGmqwWHxUJ1gJVqs4USTwCHHRbcgRYsrQIorLFgNwZQ&lt;br /&gt;
Y7VQYwnAZat9P8pI0eTxEFjjwFDuwOpwEGB3YrE7sFQ7iDY7iTY6CBcObE4HwR4nwTUOirMP8vJH&lt;br /&gt;
SwD6SylPKQ/tiYqEOCAXGCqlXOO3fQpwlpRyaCPH7AA+kFJO8dt2AcoFESildDZyzBnAytmzZ5Pk&lt;br /&gt;
b287Bps3K/NcU0FdGuPHK2vD0ZZx/rNQXKxGQTff3NBf6nCosjKZVHzEiBH3Aq8wc6bPlJqersTQ&lt;br /&gt;
Ndeo8tIyrrVrp3x2/rEhWu6IO+5Q/u7PP1eK1+mEM86QYHRCgB3MVTz9nJ3CsipmvFlBVGARHWJL&lt;br /&gt;
uOi8Sr6YY8fsqSYmzEGYuZqqIiexYU5CTE4q8l1YZQ1BwoXB68YsPZi8XoIDPAQgMbq9mDxepBMC&lt;br /&gt;
8GL2SkweickLZg8EeMAg1csoQdS+GyQYvbXvv9P/RUOV+KnjBaQQSKEaQC8gDT5RA6jt2j5C1Pne&lt;br /&gt;
I1Sj6zIIBB6Ex4XJ40J43BilGl05pdrPjQGPMOAxGvBgoEYakUYDLqMJuzThxITLFEB8ZxvWUAtO&lt;br /&gt;
r43UjVaqaoLoPTCQrTuDyCsKZtQFIQwaEUFQZCy2sGhESEiDKNw77/RNlQ0J8aUwT0tTFrjdu9Uz&lt;br /&gt;
OH++L12xlOrV1Eyje++9l8TEV+okqFm0qPGAucZwu9XsnuOJOTlduN3KLdK7t5qS3Rj9+6t3LSap&lt;br /&gt;
qkpZKs480xc/tXixSoCmoYmer75SddnhUObvlSvhttvgb3+r+xterxIcs2fD4qVuzhnlwOGpZuzl&lt;br /&gt;
DkIiHLi9btxeN9OemsZZl09g5scueiQ52ZFh58qx1bSNrsJdUU2g2Yl01eCtcbJrm4u9O9yEBbpJ&lt;br /&gt;
THBTmu+mc3s3ZjwItxuD24NwezG43XgdHnL2eQm0eGkd40V4vQiPl+JCidflxSAlVrMX4ZFIj8Qs&lt;br /&gt;
INAi8dRIPE6JxSgJsoKQEoNX4nWp7TaLmvrndoP0gNks8dSARCIk4AWDkJjNILzg9UiMhrrTBQ1S&lt;br /&gt;
nRdvrfWW2jbHoLYLlHgTEjzCgMMYgN1qpTrIRqXNRoU1kCqrjaqgQCqtVipt6nOlzUZloI1Kq43K&lt;br /&gt;
QN+2Gv+6c+CAFok5TErpF3J+4rRUkXAdMOdEbkRHR0dHR0enDv8npTyBSfUNOdGYhELAA9SPx48F&lt;br /&gt;
msi9RV4T+5c3JhBq+RH4P2Af4GhiHx0dHR0dHZ2GWIEOqL70lDghkSCldAkh0oBzgQUAQghR+3l6&lt;br /&gt;
E4etBi6ot+282u1N/U4RcErqR0dHR0dH5y/MKbkZNE4m4+I04DYhxD+EEN2Bt4BAYCaAEOJ5IYR/&lt;br /&gt;
DoS3gE5CiClCiG5CiInAlbXn0dHR0dHR0WmhnPAUSCnlfCFENDAZ5TZIB8ZIKbU1uloD7fz23yeE&lt;br /&gt;
uAgVnzUJNWPkFinl0lO9eB0dHR0dHZ3TxwkFLuro6Ojo6Oj8dWjRCzzp6Ojo6Ojo/HHoIkFHR0dH&lt;br /&gt;
R0enUVqcSBBC3CGE2CuEqBZCpAohBv7R1/RnQQhxphBigRAiVwjhFUKMbWSfyUKIg0IIuxBiiRAi&lt;br /&gt;
8Y+41j8LQohHhBBrhRDlQojDQoivhBBdG9lPL/dmQghxuxBikxCirPa1Sghxfr199PI+TQghHq5t&lt;br /&gt;
X6bV266XeTMihHiytpz9X1vr7XPKZd6iRILf4lFPAn1RK0z+WBsoqXPqBKECTSeisv7WQQjxEHAn&lt;br /&gt;
avGuQUAVqvxPbP1mHX/OBP4LDEYtbmYGFgshjiQM18u92ckGHgL6Af2Bn4FvhBBJoJf36aR2UDce&lt;br /&gt;
1Xb7b9fL/PSQiZpA0Lr2NVz7otnKXErZYl5AKvCa32eBmg3xrz/62v5sL1Qm37H1th0E7vX7HApU&lt;br /&gt;
A1f/0df7Z3kB0bVlP1wv99+13IuAm/TyPq1lHAzsAEYCy4Bpft/pZd785f0ksOEo3zdLmbcYS0Lt&lt;br /&gt;
4lH9gZ+0bVLd2VKgQbpnneZFCNERpUT9y78cWINe/s1JOMqKUwx6uZ9uhBAGIcQ1qFwuq/TyPq28&lt;br /&gt;
ASyUUv7sv1Ev89NKl1r38R4hxGwhRDto3jI/maWiTxfRqPV1Dtfbfhjo9vtfzl+O1qjOq7Hyb91w&lt;br /&gt;
d50TpTY76avACiml5jvUy/00IIToicrqagUqgMuklDuEEEPRy7vZqRVifYDG1sXVn/HTQypqdeod&lt;br /&gt;
QBzwFPBr7bPfbGXekkSCjs6fnRlAD2DYH30hfwG2A72BMFSG14+FEGf9sZf050QIEY8Sv6OklMex&lt;br /&gt;
+LtOcyCl9F+XIVMIsRbYD1yNev6bhRbjbuDkFo/SaT7yUDEgevmfBoQQrwMXAiOklIf8vtLL/TQg&lt;br /&gt;
pXRLKbOklBullI+hAunuRi/v00F/oBWwQQjhEkK4gLOBu4UQNajRq17mpxkpZRmwE0ikGZ/zFiMS&lt;br /&gt;
ahWotngUUGfxqGZZqEKnaaSUe1EPj3/5h6Ki8vXyPwVqBcKlwDlSygP+3+nl/rthACx6eZ8WlgIp&lt;br /&gt;
KHdD79rXemA20FtKmYVe5qcdIUQwSiAcbM7nvKW5G6YBM2tXmlwL3Ivf4lE6p4YQIgj1EInaTZ2E&lt;br /&gt;
EL2BYillNspk+LgQYjdqme5nULNLvvkDLvdPgRBiBnAtMBaoEkJoyr5MSqktg66XezMihHgO+B44&lt;br /&gt;
AISglp0/G7X6LOjl3axIKauA+vPzq4AiKeW22k16mTczQoipwEKUi6Et8DTgAubV7tIsZd6iRII8&lt;br /&gt;
9uJROqfGANTUJFn7erl2+0fAzVLKF4UQgcDbqCj834ALpJQ1f8TF/km4HVXWy+ttvwn4GEAv92Yn&lt;br /&gt;
BvVMxwFlQAZwnhZ1r5f370KdPCx6mZ8W4oFPgCigAFgBDJFSFkHzlbm+wJOOjo6Ojo5Oo7SYmAQd&lt;br /&gt;
HR0dHR2dloUuEnR0dHR0dHQaRRcJOjo6Ojo6Oo2iiwQdHR0dHR2dRtFFgo6Ojo6Ojk6j6CJBR0dH&lt;br /&gt;
R0dHp1F0kaCjo6Ojo6PTKLpI0NHR0dHR0WkUXSTo6Ojo6OjoNIouEnR0dHR0dHQaRRcJOjo6Ojo6&lt;br /&gt;
Oo3y/wSMxKqoXurUAAAAAElFTkSuQmCC&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;Og&amp;amp;#243;lny-schemat&amp;quot;&amp;gt;Og&amp;amp;#243;lny schemat&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#Og&amp;amp;#243;lny-schemat&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy postąpić według następującego algorytmu:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;oszacować rząd modelu np. przy pomocy kryterium Akaikego&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;wyestymować parametry modelu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;obliczyć widmo dla estymowanego modelu&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing text_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;text_cell_render border-box-sizing rendered_html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h3 id=&amp;quot;&amp;amp;#262;wiczenie&amp;quot;&amp;gt;&amp;amp;#262;wiczenie&amp;lt;a class=&amp;quot;anchor-link&amp;quot; href=&amp;quot;#&amp;amp;#262;wiczenie&amp;quot;&amp;gt;&amp;amp;#182;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;&amp;lt;p&amp;gt;Teraz, kiedy umiemu już estymować widma różnymi metodami proszę pobawić się prawdziwymi synałami. Przykładowe sygnały i sposoby ich wczytywania podane są&lt;br /&gt;
[&amp;lt;a href=&amp;quot;http://brain.fuw.edu.pl/edu/TI:Programowanie_z_Pythonem/Wejście_i_wyjście#Przyk.C5.82ady&amp;quot;&amp;gt;http://brain.fuw.edu.pl/edu/TI:Programowanie_z_Pythonem/Wejście_i_wyjście#Przyk.C5.82ady&amp;lt;/a&amp;gt; tu].&lt;br /&gt;
Proszę zapisać sygnał c4spin.txt w swoim bieżącym katalogu, wczytać go i oszacować widmo metodą AR i metodą Welcha.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;cell border-box-sizing code_cell rendered&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;prompt input_prompt&amp;quot;&amp;gt;In&amp;amp;nbsp;[&amp;amp;nbsp;]:&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;inner_cell&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;input_area&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot; highlight hl-ipython2&amp;quot;&amp;gt;&amp;lt;pre&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
sigma = 2&lt;br /&gt;
N = 200&lt;br /&gt;
x = np.zeros(N);&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i] = a[0]*x[i-1] + a[1]*x[i-...] + ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.xlabel('numer próbki')&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak nieobciążona:&lt;br /&gt;
norm_ak = ...&lt;br /&gt;
ak /= norm_ak&lt;br /&gt;
m = ... # przesunięcia&lt;br /&gt;
py.plot(m, ak)&lt;br /&gt;
py.xlabel('przesunięcie m')&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2 = ...&lt;br /&gt;
a1 = ...&lt;br /&gt;
s_2 = ...&lt;br /&gt;
&lt;br /&gt;
print('prawdziwe wspolczynniki')&lt;br /&gt;
print(  a[0], a[1], sigma)&lt;br /&gt;
print('estymowane wspolczynniki')&lt;br /&gt;
print( '%.3f, %.3f, %.3f'%(a1,  a2, s_2**0.5))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Estymacja parametrów dla modelu rzędu p ===&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    norm_ak = np.hstack((np.arange(1,N+1,1),np.arange(N-1,0,-1)))&lt;br /&gt;
    ak=ak/norm_ak&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    sigma = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a, sigma&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,sigma = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(sigma))&lt;br /&gt;
        print 'p:', p, ' a:',a,' sigma: ',sigma&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym sygnale AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6146</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6146"/>
		<updated>2016-11-28T18:46:21Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Jak znaleźć rząd modelu? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
sigma = 2&lt;br /&gt;
N = 200&lt;br /&gt;
x = np.zeros(N);&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i] = a[0]*x[i-1] + a[1]*x[i-...] + ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.xlabel('numer próbki')&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak nieobciążona:&lt;br /&gt;
norm_ak = ...&lt;br /&gt;
ak /= norm_ak&lt;br /&gt;
m = ... # przesunięcia&lt;br /&gt;
py.plot(m, ak)&lt;br /&gt;
py.xlabel('przesunięcie m')&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2 = ...&lt;br /&gt;
a1 = ...&lt;br /&gt;
s_2 = ...&lt;br /&gt;
&lt;br /&gt;
print('prawdziwe wspolczynniki')&lt;br /&gt;
print(  a[0], a[1], sigma)&lt;br /&gt;
print('estymowane wspolczynniki')&lt;br /&gt;
print( '%.3f, %.3f, %.3f'%(a1,  a2, s_2**0.5))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Estymacja parametrów dla modelu rzędu p ===&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    norm_ak = np.hstack((np.arange(1,N+1,1),np.arange(N-1,0,-1)))&lt;br /&gt;
    ak=ak/norm_ak&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    sigma = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a, sigma&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,sigma = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(sigma))&lt;br /&gt;
        print 'p:', p, ' a:',a,' sigma: ',sigma&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym sygnale AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6145</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6145"/>
		<updated>2016-11-28T18:45:09Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Estymacja parametrów dla modelu rzędu p */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
sigma = 2&lt;br /&gt;
N = 200&lt;br /&gt;
x = np.zeros(N);&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i] = a[0]*x[i-1] + a[1]*x[i-...] + ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.xlabel('numer próbki')&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak nieobciążona:&lt;br /&gt;
norm_ak = ...&lt;br /&gt;
ak /= norm_ak&lt;br /&gt;
m = ... # przesunięcia&lt;br /&gt;
py.plot(m, ak)&lt;br /&gt;
py.xlabel('przesunięcie m')&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2 = ...&lt;br /&gt;
a1 = ...&lt;br /&gt;
s_2 = ...&lt;br /&gt;
&lt;br /&gt;
print('prawdziwe wspolczynniki')&lt;br /&gt;
print(  a[0], a[1], sigma)&lt;br /&gt;
print('estymowane wspolczynniki')&lt;br /&gt;
print( '%.3f, %.3f, %.3f'%(a1,  a2, s_2**0.5))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Estymacja parametrów dla modelu rzędu p ===&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    norm_ak = np.hstack((np.arange(1,N+1,1),np.arange(N-1,0,-1)))&lt;br /&gt;
    ak=ak/norm_ak&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    sigma = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a, sigma&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6144</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6144"/>
		<updated>2016-11-28T18:30:09Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Model AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
sigma = 2&lt;br /&gt;
N = 200&lt;br /&gt;
x = np.zeros(N);&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i] = a[0]*x[i-1] + a[1]*x[i-...] + ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.xlabel('numer próbki')&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak nieobciążona:&lt;br /&gt;
norm_ak = ...&lt;br /&gt;
ak /= norm_ak&lt;br /&gt;
m = ... # przesunięcia&lt;br /&gt;
py.plot(m, ak)&lt;br /&gt;
py.xlabel('przesunięcie m')&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2 = ...&lt;br /&gt;
a1 = ...&lt;br /&gt;
s_2 = ...&lt;br /&gt;
&lt;br /&gt;
print('prawdziwe wspolczynniki')&lt;br /&gt;
print(  a[0], a[1], sigma)&lt;br /&gt;
print('estymowane wspolczynniki')&lt;br /&gt;
print( '%.3f, %.3f, %.3f'%(a1,  a2, s_2**0.5))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
===Estymacja parametrów dla modelu rzędu p ===&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6143</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6143"/>
		<updated>2016-11-28T18:27:14Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
sigma = 2&lt;br /&gt;
N = 200&lt;br /&gt;
x = np.zeros(N);&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i] = a[0]*x[i-1] + a[1]*x[i-...] + ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.xlabel('numer próbki')&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak nieobciążona:&lt;br /&gt;
norm_ak = ...&lt;br /&gt;
ak /= norm_ak&lt;br /&gt;
m = ... # przesunięcia&lt;br /&gt;
py.plot(m, ak)&lt;br /&gt;
py.xlabel('przesunięcie m')&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2 = ...&lt;br /&gt;
a1 = ...&lt;br /&gt;
s_2 = ...&lt;br /&gt;
&lt;br /&gt;
print('prawdziwe wspolczynniki')&lt;br /&gt;
print(  a[0], a[1], sigma)&lt;br /&gt;
print('estymowane wspolczynniki')&lt;br /&gt;
print( '%.3f, %.3f, %.3f'%(a1,  a2, s_2**0.5))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6142</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6142"/>
		<updated>2016-11-28T18:26:53Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
sigma = 2&lt;br /&gt;
N = 200&lt;br /&gt;
x = np.zeros(N);&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i] = a[0]*x[i-1] + a[1]*x[i-...] + ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.xlabel('numer próbki')&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak nieobciążona:&lt;br /&gt;
norm_ak = ...&lt;br /&gt;
ak /= norm_ak&lt;br /&gt;
m = ... # przesunięcia&lt;br /&gt;
py.plot(m, ak)&lt;br /&gt;
py.xlabel('przesunięcie m')&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2 = ...&lt;br /&gt;
a1 = ...&lt;br /&gt;
s_2 = ...&lt;br /&gt;
&lt;br /&gt;
print('prawdziwe wspolczynniki')&lt;br /&gt;
print(  a[0], a[1], sigma)&lt;br /&gt;
print('estymowane wspolczynniki')&lt;br /&gt;
print( '%.3f, %.3f, %.3f'%(a1,  a2, s_2**0.5))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6141</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6141"/>
		<updated>2016-11-28T18:22:08Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznych a następnie zaimplementuj je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6140</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6140"/>
		<updated>2016-11-28T18:19:33Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznie a następnie zaimplementuje je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
 *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6139</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6139"/>
		<updated>2016-11-28T18:18:21Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego przesunięcia &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; od &amp;lt;math&amp;gt;-N&amp;lt;/math&amp;gt; do&amp;lt;math&amp;gt; N&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznie a następnie zaimplementuje je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
 *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6138</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6138"/>
		<updated>2016-11-28T16:17:12Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznie a następnie zaimplementuje je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
 *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6137</id>
		<title>Ćwiczenia 5</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_5&amp;diff=6137"/>
		<updated>2016-11-28T16:16:16Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Ćwiczenie: estymacja parametrów procesu AR */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/AR_2&lt;br /&gt;
&lt;br /&gt;
= Notebook=&lt;br /&gt;
Proszę pobrać i zapisać lkoalnie notebook:&lt;br /&gt;
[https://drive.google.com/file/d/0BzwQ_Lscn8yDOG1icFRTeGMyRTQ/view?usp=sharing Ipython notebook z ćwiczeniami z modeli AR ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
następnie w terminalu, w katalogu zawierającym notebook piszemy: &lt;br /&gt;
&amp;gt; jupyter notebook&lt;br /&gt;
&lt;br /&gt;
gdzie notebook to nazwa pobranego właśnie pliku&lt;br /&gt;
&lt;br /&gt;
==Procesy AR==&lt;br /&gt;
Dla przypomnienia: &lt;br /&gt;
proces AR generowany jest tak, że kolejna próbka jest ważoną sumą &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; poprzednich próbek i niezależnej zmiennej losowej o średniej 0 i wariancji &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_n = \sum_{k=1}^p a_k * x_{n-k} +\varepsilon_n&amp;lt;/math&amp;gt;&lt;br /&gt;
::i &amp;lt;math&amp;gt;\varepsilon_n \sim N(0,\sigma^2)&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proces AR można zatem scharakteryzować podając:&lt;br /&gt;
* współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; oraz &lt;br /&gt;
* &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja realizacji procesu ===&lt;br /&gt;
Poniższy kod po uzupełnieniu będzie ilustrował jak mogą wyglądać pojedyncze realizacje procesu opisywanego przez współczynniki a=[0.9, -0.7] i wariancję 1.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
...# stosowne importy&lt;br /&gt;
&lt;br /&gt;
def realizacjaAR(a,sigma, N):&lt;br /&gt;
    x = np.zeros(N)&lt;br /&gt;
    for i in range(2,N): #kolejno tworzymy próbki w każdej realizacji&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+ ...&lt;br /&gt;
    return x&lt;br /&gt;
  &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
sigma = 1&lt;br /&gt;
N_realizacji = 5 # liczba realizacji&lt;br /&gt;
N=500 #liczba punktów w realizacji&lt;br /&gt;
&lt;br /&gt;
realizacja = np.zeros((N_realizacji, N)); # macierz na wszystkie realizacje&lt;br /&gt;
for r in range(0,N_realizacji):    #generujemy realizacje procesu&lt;br /&gt;
    realizacja[r,:] = ...&lt;br /&gt;
    &lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy realizacje procesu&lt;br /&gt;
    py.subplot(5,1,r+1)&lt;br /&gt;
    py.plot( ...)&lt;br /&gt;
    py.title('realizacja'+str(r))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie: ilustracja funkcji autokorelacji procesu ===&lt;br /&gt;
Dla współczynników  &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, dla których proces ten jest stacjonarny,  charakteryzuje się też pewną konkretną funkcją autokorelacji. &lt;br /&gt;
Poniższe ćwiczenie powinno nam uświadomić:&lt;br /&gt;
* jak może wyglądać estymowana funkcja autokorelacji dla realizacji procesu AR&lt;br /&gt;
* jak estymata funkcji autokorelacji zależy od długości realizacji (czyli od ilości dostępnych informacji). Co dzieje się z funkcją autokorelacji dla poszczególnych realizacji, gdy zwiększamy liczbę punktów w realizacji '''N''' od 50 do 5000?&lt;br /&gt;
Poniższy kod powinien stanowić kontynuację poprzedniego.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
for r in range(0,N_realizacji):   #rysujemy funkcję autokorelacji poszczególnych realizacji&lt;br /&gt;
    f_corr =...&lt;br /&gt;
    tau = np.arange(-N+1,N,1)&lt;br /&gt;
    ind = range(...-10,...+10) # tu szykujemy indeksy, dzięki którym będziemy mogli pobrać wycinek +/- 10 próbek wokół przesunięcia 0 &lt;br /&gt;
    py.plot(tau[ind],f_corr[ind])&lt;br /&gt;
    py.title(fragment funkcji autokorelacji)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Proces autoregresyjny rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; jest zdefiniowany jako:&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
Poniższy kod demonstruje generację pięciu realizacji procesu AR drugiego rzędu, każda o długości 500 punktów:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
&lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
&lt;br /&gt;
# chcemy badac N punktow procesu&lt;br /&gt;
&lt;br /&gt;
for j in range(1,6):&lt;br /&gt;
    N=500&lt;br /&gt;
    x=np.zeros(N);&lt;br /&gt;
    #generujemy realizacje procesu&lt;br /&gt;
    for i in range(2,N):&lt;br /&gt;
        x[i]=a[0]*x[i-1]+a[1]*x[i-2]+np.random.randn()&lt;br /&gt;
    py.subplot(5,1,j)&lt;br /&gt;
    py.plot(x)&lt;br /&gt;
    py.title('realizacja'+str(j))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Model AR==&lt;br /&gt;
Rozważania na temat procesów AR są o tyle interesujące, że wiele sygnałów, które chcielibyśmy badać całkiem nieźle daje się opisać jako procesy AR .&lt;br /&gt;
Wyobrażamy sobie wówczas, że rejestrowane sygnały są generowane przez pewien model AR (trochę tak jak funkcja realizacjaAR wytwarzała pojedyncze realizacje procesu). Pojawia się w tym momencie pytanie: jak możemy poznać wartości parametrów &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma^2&amp;lt;/math&amp;gt;, które ''pasują'' do badanych sygnałów?&lt;br /&gt;
&lt;br /&gt;
===Estymacja parametrów===&lt;br /&gt;
Algorytmów służących do estymacji parametrów modelu AR jest kilka. Tu przedstawimy algorytm Yule-Walker'a: &lt;br /&gt;
* mnożymy stronami równania opisujące proces dla póbki &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;t-m&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t x_{t-m} = \sum _{i=1}^p a_i x_{t-i} x_{t-m} +\epsilon _t x_{t-m} &amp;lt;/math&amp;gt;&lt;br /&gt;
* bierzemy wartość oczekiwaną lewej i prawej strony. Wartości oczekiwane &amp;lt;math&amp;gt;E\lbrace x_t x_{t-m}\rbrace &amp;lt;/math&amp;gt; to funkcja autokorelacji &amp;lt;math&amp;gt;R(m)&amp;lt;/math&amp;gt; więc:&lt;br /&gt;
::&amp;lt;math&amp;gt;R(m) = \sum _{i=1}^p a_i R(m-i)+ \sigma _\epsilon ^2 \delta (m)&amp;lt;/math&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;m=0,\dots ,p.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Dla &amp;lt;math&amp;gt;m&amp;gt;0&amp;lt;/math&amp;gt; możemy zapisać stąd układ równań:&lt;br /&gt;
::&amp;lt;math&amp;gt;\left[\begin{array}{c}&lt;br /&gt;
R(1)\\&lt;br /&gt;
R(2)\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
R(p)&lt;br /&gt;
\end{array}\right]=&lt;br /&gt;
\left[\begin{array}{cccc}&lt;br /&gt;
R(0)&amp;amp; R(-1) &amp;amp;\dots &amp;amp;\\&lt;br /&gt;
R(1)&amp;amp; R(0) &amp;amp;R(-1) \dots &amp;amp;\\&lt;br /&gt;
\vdots &amp;amp; &amp;amp; &amp;amp;\\&lt;br /&gt;
R(p-1) &amp;amp; &amp;amp;\dots &amp;amp;R(0)&lt;br /&gt;
\end{array}\right] \left[\begin{array}{c}&lt;br /&gt;
a_1\\&lt;br /&gt;
a_2\\&lt;br /&gt;
\vdots \\&lt;br /&gt;
a_p&lt;br /&gt;
\end{array} \right] &amp;lt;/math&amp;gt;&lt;br /&gt;
* stąd wyliczamy współczynniki &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;, &lt;br /&gt;
dla &amp;lt;math&amp;gt;m=0&amp;lt;/math&amp;gt; mamy&lt;br /&gt;
::&amp;lt;math&amp;gt;R(0) = \sum _{k=1}^p a_k R(-k) + \sigma _\epsilon ^2&amp;lt;/math&amp;gt;&lt;br /&gt;
* można stąd wyliczyć &amp;lt;math&amp;gt;\sigma _\epsilon ^2 &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ćwiczenie: estymacja parametrów procesu AR===&lt;br /&gt;
* Wygeneruj 2000 próbek sygnału z modelu AR o parametrach a = {0.9, -0.6}, epsilon=2&lt;br /&gt;
* Oblicz funkcję autokorelacji tego sygnału:  &amp;lt;tt&amp;gt;ak = np.correlate(x,x,mode='full')&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Znormalizuj tą funkcję dzieląc ją przez liczbę pokrywających się próbek dla każdego \tau&lt;br /&gt;
* Oblicz parametry zgodnie ze wzorami z poprzedniego paragrafu dla modelu rzędu 2. (wypisz konkretną postać wzorów analitycznie a następnie zaimplementuje je)&lt;br /&gt;
wskazówka: &amp;lt;tt&amp;gt;R[0]=ak[N-1]&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Wypisz parametry prawdziwe i estymowane.&lt;br /&gt;
* Sprawdź jak wpływa długość sygnału na dokładność estymaty (uruchom program kilka razy dla każdej z badanych długości sygnału)&lt;br /&gt;
 *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
#wspolczynniki modelu AR&lt;br /&gt;
 &lt;br /&gt;
a = np.array([0.9, -0.6])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=2000&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2]+epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
ak = np.correlate(x,x,mode='full')&lt;br /&gt;
# ak unbiased&lt;br /&gt;
ak=ak/N&lt;br /&gt;
#for i in range(1,int(np.floor(len(ak)/2.0))):&lt;br /&gt;
#    ak[N-1-i]=ak[N-1-i]/(N-i)&lt;br /&gt;
#    ak[N-1+i]=ak[N-1+i]/(N-i)&lt;br /&gt;
py.plot(ak)&lt;br /&gt;
py.title('funkcja autokorelacij sygnalu x')&lt;br /&gt;
&lt;br /&gt;
R=ak[N-1:]&lt;br /&gt;
r0=R[0]&lt;br /&gt;
r1=R[1]&lt;br /&gt;
r2=R[2]&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu na podstawie funkncji autokorelacji&lt;br /&gt;
&lt;br /&gt;
a2=(r1**2-r0*r2)/(r1**2-r0**2)&lt;br /&gt;
a1=r1/r0-r1/r0*a2&lt;br /&gt;
s_2=(r0-a1*r1-a2*r2)&lt;br /&gt;
&lt;br /&gt;
print 'prawdziwe wspolczynniki'&lt;br /&gt;
print  a[0], a[1], epsilon&lt;br /&gt;
print 'estymowane wspolczynniki'&lt;br /&gt;
print a1,  a2, s_2**0.5&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
W przypadku modelu rzędu &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; estymację parametrów metodą Y-W można zaimplementować np. tak:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Jak znaleźć rząd modelu?===&lt;br /&gt;
&lt;br /&gt;
Kryterium Akaike (AIC):&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{AIC}(p)= \frac{2p}{N} +\ln(V) &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - ilość parametrów modelu,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; - ilość próbek sygnału,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;V&amp;lt;/math&amp;gt; - wariancja szumu.&lt;br /&gt;
&lt;br /&gt;
Kryterium to karze za zwiększanie ilości parametrów i nagradza za zmniejszanie niewytłumaczonej wariancji.&lt;br /&gt;
&lt;br /&gt;
Poniższy kod jest przykładową implementacją kryterium AIC:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zobaczmy jak działa to na przykładowym syganle AR:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak=ak/N&lt;br /&gt;
    R=ak[N-1:]&lt;br /&gt;
    RL  = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a=np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def kryterium_AIC(x,maxymalnyRzad):&lt;br /&gt;
    zakres_rzedow = range(1,maxymalnyRzad)&lt;br /&gt;
    AIC = np.zeros(len(zakres_rzedow))&lt;br /&gt;
    for p in zakres_rzedow:&lt;br /&gt;
        a,epsilon = parametryAR(x,p)&lt;br /&gt;
        AIC[p-1] = (2.0*p)/N + np.log(np.sqrt(epsilon))&lt;br /&gt;
        print 'p:', p, ' a:',a,' epsilon: ',epsilon&lt;br /&gt;
    return AIC&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.9, -0.7])&lt;br /&gt;
epsilon=2&lt;br /&gt;
N=600&lt;br /&gt;
x=np.zeros(N);&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
for i in range(2,N):&lt;br /&gt;
    x[i]=a[0]*x[i-1]+a[1]*x[i-2] +epsilon*np.random.randn()&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(x)&lt;br /&gt;
py.title('wygenerowany sygnal')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
&lt;br /&gt;
AIC = kryterium_AIC(x,6)&lt;br /&gt;
py.plot(range(1,len(AIC)+1),AIC)&lt;br /&gt;
py.title('Kryterium AIC')&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Widmo modelu AR==&lt;br /&gt;
&lt;br /&gt;
Widmo modelu można wyliczyć analitycznie znając jego współczynniki:&lt;br /&gt;
Przepisujemy równanie modelu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;x_t = \sum _{i=1}^p a_i x_{t-i} +\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\sum _{i=0}^p a_i x_{t-i} =\epsilon _t&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
biorąc transformaty &amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; obu stron mamy równanie algebraiczne:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;A(f)X(f) =E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(f)=A^{-1}(f) E(f)=H(f) E(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stąd widmo:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;S(f) = X(f)X^*(f)=H(f)VH^*(f)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Jak znaleźć ''A'' &amp;amp;mdash; transformata Z===&lt;br /&gt;
&lt;br /&gt;
Transformata Z jest dyskretnym odpowiednikiem transformaty Laplace'a:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;X(z) = Z\lbrace x[n]\rbrace  = \sum _{n=0}^\infty {x[n]z^{-n}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;z=Ae^{i \phi }&amp;lt;/math&amp;gt; jest liczbą zespoloną. Szczególnym przypadkiem tej transformaty jest dyskretna transformata Fouriera - wystarczy podstawić &amp;lt;math&amp;gt;A=1/N&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\phi = - 2 \pi k/ N &amp;lt;/math&amp;gt; [[Ćwiczenia_2#Dyskretna_Transformata_Fouriera_.28DFT.29|porównaj]].&lt;br /&gt;
&lt;br /&gt;
=== Własności transformaty Z===&lt;br /&gt;
&lt;br /&gt;
Transformata ta jest liniowa tzn.&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace a_1x_1[n] +a_2x_2[n]\rbrace =a_1X_1(z)+a_2X_2(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
jak ją policzyć od sygnału przesuniętego w czasie to:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace x[n-k]\rbrace  = z^{-k}X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dla impulsu:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n]\rbrace =1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
więc&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace \delta [n-n0]\rbrace  = z^{-n0} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stosując tą transfomatę do procesu AR dostajemy:&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;\mathrm{Z}\lbrace  x[n] + a_1 x[n-1] + \dots + a_p x[n-p]\rbrace  = (1 + a_1 z^{-1} + \dots + a_p z^{-p})X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;=A(z)X(z)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo procesu===&lt;br /&gt;
Najpierw rozważmy konkretny przykład. Niech model będzie rzędu ''p=2'' i ma współczynniki &amp;lt;math&amp;gt;a_1 = 0.9, a_2 = -0.6&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;. Wyliczamy wartości funkcji &amp;lt;math&amp;gt;A(z) = a_1 z^{-1}+a_2 z^{-2}&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;z = e^{i \omega}&amp;lt;/math&amp;gt;:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
a=[0.9, -0.6]&lt;br /&gt;
sigma_eps = 2&lt;br /&gt;
w=np.arange(-np.pi,np.pi,0.1)&lt;br /&gt;
z=np.exp(1j*w)&lt;br /&gt;
# dla zadanego modelu&lt;br /&gt;
A=-1+a[0]*z**(-1)+a[1]*z**(-2);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Następnie obliczamy odwrotność ''A'' :&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
H=1./A&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
i obliczamy widmo:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
Sp=H*H.conj()* sigma_eps**2&lt;br /&gt;
Sp = Sp.real&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Możemy je wykreślić w funkcji częstości &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt;.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.plot(w,Sp )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Operacje te możemy uogólnić i zaimplementować  jako funkcję do obliczania widma modelu zadanego przez parametry:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
Proszę:&lt;br /&gt;
* Wygenerować realizację modelu AR &amp;lt;math&amp;gt;a = \{0.6, -0.7, 0.3, -0.25\}, \quad \sigma_{\varepsilon} = 2&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Obliczyć widmo dla tego modelu&lt;br /&gt;
* Wyestymować parametry modelu na podstawie sygału, zakładając, że rząd jest p = 3,4,5,6&lt;br /&gt;
* Obliczyć widmo dla wyestymowanego modelu&lt;br /&gt;
* Wykreślić widma prawdziwego modelu i modeli estymowanych&lt;br /&gt;
&lt;br /&gt;
  *&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, sigma_eps, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    rzad = len(a)&lt;br /&gt;
    for i in range(rzad,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += sigma_eps*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    '''funkcja estymująca parametry modelu AR &lt;br /&gt;
    argumenty:&lt;br /&gt;
    x- sygnał&lt;br /&gt;
    p - rząd modelu&lt;br /&gt;
    f. zwraca:&lt;br /&gt;
    a - wektor współczynników modelu&lt;br /&gt;
    epsilon - estymowana wariancja szumu&lt;br /&gt;
&lt;br /&gt;
    funkcja wymaga zaimportowania modułu numpy as np&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    N = len(x)&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, sigma_eps, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()* sigma_eps**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.6, -0.7, 0.3, -0.25])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a, sigma_eps,200)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
N=600&lt;br /&gt;
x = generujAR(a, sigma_eps, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Ypula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
for p in range(3,7):&lt;br /&gt;
    a_est, sigma_eps_est = parametryAR(x,p)&lt;br /&gt;
    Sp_est, w = widmoAR(a_est, sigma_eps_est,200)&lt;br /&gt;
    py.plot(w,Sp_est )&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.legend(('p = 3','p = 4','p = 5','p = 6','prawdziwy'))&lt;br /&gt;
py.title('widmo z modelu')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Ćwiczenie ====&lt;br /&gt;
&lt;br /&gt;
Dla modelu z poprzedniego ćwiczenia proszę wygenerować realizację sygnału długości 1000 punktów. Proszę porównać widma:&lt;br /&gt;
* prawdziwe, obliczone z prawdziwych parametrów  modelu&lt;br /&gt;
* obliczone z estymowanego modelu&lt;br /&gt;
* obliczone przez periodogram&lt;br /&gt;
* obliczone metodą Welcha &lt;br /&gt;
* obliczone metodą wielookienkową Thomsona&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from numpy.fft import fft, fftshift,fftfreq&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
&lt;br /&gt;
def generujAR(a, epsilon, N):&lt;br /&gt;
    x=np.zeros(N)&lt;br /&gt;
    r = len(a)&lt;br /&gt;
    for i in range(r,N):&lt;br /&gt;
        for p in range(len(a)):&lt;br /&gt;
            x[i] += a[p]*x[i-(p+1)]&lt;br /&gt;
        x[i] += epsilon*np.random.randn()&lt;br /&gt;
    return x&lt;br /&gt;
    &lt;br /&gt;
def parametryAR(x,p):&lt;br /&gt;
    N =  len(x)&lt;br /&gt;
    ak = np.correlate(x,x,mode='full')&lt;br /&gt;
    ak = ak/N&lt;br /&gt;
    R = ak[N-1:]&lt;br /&gt;
    RL = R[1:1+p]&lt;br /&gt;
    RP = np.zeros((p,p))&lt;br /&gt;
    for i in range(p):&lt;br /&gt;
        aa = ak[N-1-i:N-1-i+p]&lt;br /&gt;
        RP[i,:] = aa&lt;br /&gt;
    a = np.linalg.solve(RP,RL)&lt;br /&gt;
    epsilon = (ak[N-1] - np.sum(a*ak[N:N+p]))**0.5&lt;br /&gt;
    return a,epsilon&lt;br /&gt;
&lt;br /&gt;
def widmoAR(parametry_a, epsilon, N_punktow):&lt;br /&gt;
    w = np.linspace(-np.pi,np.pi,N_punktow)&lt;br /&gt;
    z = np.exp(1j*w)&lt;br /&gt;
    A = -1 * np.ones(N_punktow) + 1j*np.zeros(N_punktow)&lt;br /&gt;
    for i in range(len(parametry_a)):&lt;br /&gt;
        A += parametry_a[i]*z**(-(i+1))&lt;br /&gt;
    H = 1./A&lt;br /&gt;
    Sp = H*H.conj()*epsilon**2 # widmo&lt;br /&gt;
    Sp = Sp.real&lt;br /&gt;
    return Sp, w&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    print ile_przekrycia, ile_fragmentow&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)#(P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    K = int(2*NW-1)&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#wspolczynniki modelu AR &lt;br /&gt;
a = np.array([0.3, 0.2, 0.5, -0.25 ,-0.3])&lt;br /&gt;
epsilon = 2&lt;br /&gt;
N=256&lt;br /&gt;
# obliczanie widma z modelu&lt;br /&gt;
Sp, w = widmoAR(a,epsilon,N)&lt;br /&gt;
&lt;br /&gt;
#generujemy realizacje procesu&lt;br /&gt;
&lt;br /&gt;
x = generujAR(a, epsilon, N)&lt;br /&gt;
&lt;br /&gt;
# estymujemy wspolczynniki modelu metodą Yula-Walkera&lt;br /&gt;
# obliczamy widmo dla estymowanego modelu&lt;br /&gt;
a_est,epsilon_est = parametryAR(x,5)&lt;br /&gt;
Sp_est, w = widmoAR(a_est,epsilon_est,N)&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
Fs = 2*np.pi                    &lt;br /&gt;
P_periodogram,F_periodogram = periodogram(x, okno , Fs=Fs)&lt;br /&gt;
okno = np.blackman(N/4)&lt;br /&gt;
P_welch, F_welch = pwelch(x,okno, len(okno)/2, Fs=Fs)                &lt;br /&gt;
P_mtm, F_mtm = mtm(x, NW = 4.5, Fs =Fs)&lt;br /&gt;
&lt;br /&gt;
py.plot(w,Sp)&lt;br /&gt;
py.plot(w,Sp_est)&lt;br /&gt;
py.plot(F_periodogram,P_periodogram)&lt;br /&gt;
py.plot(F_welch, P_welch/(len(P_periodogram)/len(P_welch)))#uwaga Welch ma inne df&lt;br /&gt;
py.plot(F_mtm, P_mtm)&lt;br /&gt;
&lt;br /&gt;
#py.legend(('prawdziwy','estymowany z AR','periodogram','Welch','mtm'))&lt;br /&gt;
&lt;br /&gt;
print 'enenrgia sygnału: ', np.sum(x**2)&lt;br /&gt;
print 'enenrgia spektrum AR',np.sum(Sp)&lt;br /&gt;
print 'enenrgia est',np.sum(Sp_est)&lt;br /&gt;
print 'enenrgia mtm',np.sum(P_mtm)&lt;br /&gt;
print 'enenrgia welch',np.sum(P_welch)&lt;br /&gt;
print 'enenrgia period',np.sum(P_periodogram)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Co z tego musimy zapamiętać:==&lt;br /&gt;
* widmo sygnału stochastycznego estymujemy, a nie obliczamy&lt;br /&gt;
* są dwie klasy technik:&lt;br /&gt;
** nieparametryczne - '''widmo estymujemy''' bezpośrednio dla sygnału np. metodą periodogram, Welcha, wielookienkową &lt;br /&gt;
**  parametryczne: najpierw '''estymujemy model''' opisujący dane, a nstępnie '''dla modelu obliczamy widmo'''&lt;br /&gt;
===Ogólny schemat ===&lt;br /&gt;
W praktyce musimy najczęściej estymować widmo mając dany tylko sygnał. Wówczas powinniśmy pwstąpić według następującego algorytmu:&lt;br /&gt;
* oszacować rząd modelu np. przy pomocy kryterium Akaikego&lt;br /&gt;
* wyestymować parametry modelu&lt;br /&gt;
* obliczyć widmo dla estymowanego modelu&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=STATLAB/Zadanie_zaliczeniowe3&amp;diff=6079</id>
		<title>STATLAB/Zadanie zaliczeniowe3</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=STATLAB/Zadanie_zaliczeniowe3&amp;diff=6079"/>
		<updated>2016-11-20T17:05:48Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[ZasadyZaliczenia]]/Projekt_1&lt;br /&gt;
===1. Dane ===&lt;br /&gt;
Poniżej znajdują się linki do dwóch fragmentów utworów audio. Zapisane są w formacie wav. Pliki takie można wczytać do programu pythonowego za pomocą funkcji &amp;lt;tt&amp;gt;scipy.io.wavfile.read&amp;lt;/tt&amp;gt;( [https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.io.wavfile.read.html dokumentacja] tej funkcji.)&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/open?id=0B7k6Z_ViZid5WXc0WVQ4U0d2TVk Candy_Dulfer_-_Lily_Was_Here.wav]&lt;br /&gt;
&lt;br /&gt;
[https://drive.google.com/open?id=0B7k6Z_ViZid5U193d2Rqc2xJdG8 Rupert_Blaise_-_06_-_What_A_Wonderful_World.wav]&lt;br /&gt;
&lt;br /&gt;
===2. Analiza czasowa widma: spektrogram===&lt;br /&gt;
Programistyczna część projektu polega na samodzielnej  implementacji spektrogramu: reprezentacji rozkładu energii sygnału w dziedzinie czas-częstość. Idea tworzenia tej reprezentacji przedstawiona jest na poniższym rysunku. &lt;br /&gt;
[[Plik:spectrogram.png|600px|thumb|center|Idea tworzenia spektrogramu]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Spektrogram otrzymujemy w następujący sposób:&lt;br /&gt;
* Sygnał dzielimy na fragmenty o długości '''N_okna'''&lt;br /&gt;
* Fragmenty mogą ale nie muszą na siebie nachodzić. Liczba próbek nachodzących niech będzie oznaczona '''N_wsp'''&lt;br /&gt;
* Dla każdego fragmentu estymujemy widmo gęstości energii za pomocą ''periodogramu'' z okienkiem '''okno'''&lt;br /&gt;
* Widma kolejnych fragmentów zapisujemy w macierzy numpy, tak, że i-ta kolumna zawiera widmo i-tego fragmentu&lt;br /&gt;
* Macierz wykreśl przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.imshow&amp;lt;/tt&amp;gt;, podając zakresy poszczególnych osi przy użyciu parametru &amp;lt;tt&amp;gt;extent&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Kod należy przygotować tak, aby łatwo było modyfikować:&lt;br /&gt;
* '''okno''', '''N_okna''', '''N_wsp''',   czyli: typ okna, jego długość i stopień nachodzenia okien.&lt;br /&gt;
* zakres czasu i częstości wyświetlanej reprezentacji: &amp;lt;math&amp;gt; t_{min}, t_{max}, f_{min}, f_{max}&amp;lt;/math&amp;gt;&lt;br /&gt;
* ważne jest też wyświetlenie właściwych skal czasu i częstości&lt;br /&gt;
* wersja bardziej rozwinięta powinna także wyświetlać rozkłady brzegowe mocy tj.:&lt;br /&gt;
** wzdłuż osi poziomej moc sygnału w czasie&lt;br /&gt;
** wzdłuż osi pionowej widmo mocy z całego prezentowanego odcinka czasu&lt;br /&gt;
&lt;br /&gt;
===3. Interpretacja wyniku===&lt;br /&gt;
* Analizę spektrogramem wykonaj dla obu sygnałów i dla kilku różnych długości okien '''N_okna'''.  Zinterpretuj widoczne różnice.&lt;br /&gt;
* Czy na podstawie takich spektrogramów jesteśmy w stanie odróżnić kiedy grał który instrument, lub kiedy był to głos ludzki?&lt;br /&gt;
* Czy dałoby się w ten sposób określić tony podstawowe?&lt;br /&gt;
&lt;br /&gt;
[[ZasadyZaliczenia]]/Projekt_1&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=6078</id>
		<title>ZasadyZaliczenia</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=ZasadyZaliczenia&amp;diff=6078"/>
		<updated>2016-11-20T17:05:05Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zasady zaliczenia ćwiczeń z Analizy Sygnałów */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;br /&gt;
&lt;br /&gt;
== Zasady zaliczenia ćwiczeń z [[Analiza_sygnałów - exercises|Analizy Sygnałów]] ==&lt;br /&gt;
&lt;br /&gt;
=== Kolokwia ===&lt;br /&gt;
W trakcie semestru odbędą się dwa kolokwia. Z każdego z nich będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne będzie zdobycie łącznie 10 punktów z kolokwiów (czyli 50%). Kolokwia będą wspólne dla wszystkich grup, będą się odbywać w poniedziałki przed południem.&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium I:  14 listopada 2016, 10:00-13:00, sale: 1.27, 1.28 ''' &lt;br /&gt;
* '''Kolokwium II: 31 stycznia 2017, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Kolokwium poprawkowe: 24 lutego 2017, 10:00-13, sale: 1.27, 1.28''' &lt;br /&gt;
Wiedza wymagana dotyczy tego samego zakresu materiału, który obowiązywał na I i II kolokwium łącznie.&lt;br /&gt;
W trakcie kolokwium możliwe jest poprawienie łącznej sumy punktów na kolokwia, czyli 20 pkt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--[[STATLAB/kolokwium2_wymagania|Zakres wymagań do II kolokwium.]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Projekt ===&lt;br /&gt;
Wymagane będzie wykonanie dwóch projektów indywidualnych. Jeden z nich będzie wymagany w połowie semestru, a drugi do końca semestru. Nie będzie możliwości oddawania projektów po zakończeniu zajęć semestru zimowego. Z każdego projektu będzie można uzyskać 10 punktów, z czego do zaliczenia przedmiotu konieczne jest zdobycie łącznie 10 punktów z projektów (czyli 50%).&lt;br /&gt;
&lt;br /&gt;
# Pierwszy projekt [[STATLAB/Zadanie zaliczeniowe3|Analiza spektralna sygnału audio]] należy wykonać i oddać '''do 10 grudnia 2016'''. Dokładniejsze terminy zaliczenia przekażą poszczególni prowadzący grup.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# Drugi projekt: [[STATLAB/Zadanie_zaliczeniowe5|Filtrowanie i przepróbkowanie sygnału]] należy oddać do końca zajęć dydaktycznych.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kartkówki ===&lt;br /&gt;
Na większości (10) zajęć będą miały miejsce kartkówki na podstawie materiału z zajęć poprzednich. Pytania nie będą wymagające, będą raczej sprawdzać uwagę i systematyczną pracę. Łącznie za kartkówki można uzyskać 10 punktów (maksymalnie 1 punkt za każdą), natomiast przy zaliczeniu przedmiotu dozwolone jest niezaliczenie maksymalnie trzech kartkówek (nieusprawiedliwiona nieobecność również pociąga za sobą niezaliczenie kartkówki). Punktów z kartkówek nie można poprawiać.&lt;br /&gt;
&lt;br /&gt;
=== Skala ocen ===&lt;br /&gt;
Na podstawie łącznej liczby punktów (maksymalnie do zdobycia jest 50) zostanie obliczona ocena z ćwiczeń:&lt;br /&gt;
# [25–30) pkt: 3.0 (dst)&lt;br /&gt;
# [30–35) pkt: 3.5 (dst+)&lt;br /&gt;
# [35–40) pkt: 4.0 (db)&lt;br /&gt;
# [40–45) pkt: 4.5 (db+)&lt;br /&gt;
# [45–50] pkt: 5.0 (bdb)&lt;br /&gt;
&lt;br /&gt;
=== Nieobecności ===&lt;br /&gt;
Dozwolone są maksymalnie dwie nieusprawiedliwione nieobecności.&lt;br /&gt;
&lt;br /&gt;
=== Materiały dostępne w czasie kolokwium ===&lt;br /&gt;
Jedynym materiałem dostępnym w trakcie trwania kolokwium jest oficjalna dokumentacja Python oraz kilka dodatkowych funkcji, które zostały udostępnione na  [[STATLAB/ListaFunkcji|oddzielnej stronie]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Zasady zaliczenia&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5999</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5999"/>
		<updated>2016-11-16T14:14:59Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 4: Estymacja widma sygnału stochastycznego */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return F,P&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(F, moc_w_czestosci) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Mon Nov  7 12:21:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= okno/np.linalg.norm(okno)&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    P = S*S.conj()&lt;br /&gt;
    P = P/Fs&lt;br /&gt;
    P = P.real&lt;br /&gt;
    if len(s)%2 ==0:&lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = rfftfreq(len(s), 1./Fs)&lt;br /&gt;
    return F,P&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
  &lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = s**2&lt;br /&gt;
(F, moc_w_czestosci) = widmo_mocy(s, Fs=fs,okno=okno)&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
&lt;br /&gt;
energia_w_czasie = np.sum(moc_w_czasie*dt)&lt;br /&gt;
energia_w_czestosci = np.sum(moc_w_czestosci)&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Periodogram: widmo mocy okienkowanego sygnału ===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego, czyli periodogram:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić, że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać przez wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartości zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji.&lt;br /&gt;
&lt;br /&gt;
Poniżej mamy przykład wytwarzania  procesu złożonego z dwóch realizacji po 50 próbek oraz estymowania jego wartości średniej. Każda próbka jest niezależną zmienną losową z rozkładu normalnego o średniej 0 i wariancji 1:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,50,1)&lt;br /&gt;
&lt;br /&gt;
# realizacja 1&lt;br /&gt;
x1 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# realizacja 2&lt;br /&gt;
x2 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# średnia procesu&lt;br /&gt;
xm = 0.5*(x1+x2)&lt;br /&gt;
&lt;br /&gt;
# ilustracja&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.stem(t,x1)&lt;br /&gt;
py.title('realizacja 1')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.stem(t,x2)&lt;br /&gt;
py.title('realizacja 2')&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.stem(t,xm,'r')&lt;br /&gt;
py.title('średnia procesu')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatorach momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Estymacja widma sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum (stochastycznego).&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Tue Nov  8 11:45:15 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    '''szum gaussowski o zadanej:&lt;br /&gt;
        średniej mu&lt;br /&gt;
        wariancji sigma**2&lt;br /&gt;
        długości T,&lt;br /&gt;
        częstości próbkowania Fs&lt;br /&gt;
       '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = ...&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = ... #realizacja sinusa&lt;br /&gt;
        (sz,t) = ...#realizacja szumu&lt;br /&gt;
        syg = ...# sygnał będący sumą powyższych&lt;br /&gt;
        (F, moc_w_czestosci) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = ... #realizacja sinusa&lt;br /&gt;
        (sz,t) = ...#realizacja szumu&lt;br /&gt;
        syg = ...# sygnał będący sumą powyższych&lt;br /&gt;
        okno = ...&lt;br /&gt;
        (moc_w_czestosci, F) = periodogram(syg, Fs=FS,okno = okno)&lt;br /&gt;
        zbior_widm[i][:] = ...#zapamiętaj widmo i-tej realizacji&lt;br /&gt;
    srednie_w = ...# usrednij widma po realizacjach&lt;br /&gt;
    przedzial_d = np.zeros(len(F)) # tablice na dolną i górną granicę przedziału ufności &lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F: # dla każdej częstości znajdujemy granice przedziałów ufności&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(..., 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(..., 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r') # rysujemy średnią&lt;br /&gt;
    py.plot(F,przedzial_d,'b')# rysujemy granicę dolną&lt;br /&gt;
    py.plot(F,przedzial_g,'b')# rysujemy granicę górną&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (t, s)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (t, s)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (t, s) = sin(f=10,Fs=FS)&lt;br /&gt;
        (t, sz) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (t, s) = sin(f=10,Fs=FS)&lt;br /&gt;
        (t, sz) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
* Niech  &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt; - sygnał stochastyczny, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum),&lt;br /&gt;
* Jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną&lt;br /&gt;
* Wówczas, część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; są nieskorelowanymi zmiennymi losowymi o średniej zero i równych wariancjach. &lt;br /&gt;
* Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. &lt;br /&gt;
* Wielkość:&lt;br /&gt;
: &amp;lt;math&amp;gt; P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f) &amp;lt;/math&amp;gt;&lt;br /&gt;
: jest sumą kwadratów dwóch niezależnych zmiennych normalnych. &lt;br /&gt;
* Wielkość ta podlega rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
* Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
**Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. &lt;br /&gt;
** W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, &lt;br /&gt;
** Oznacza to, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
* Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki:&lt;br /&gt;
**;Pierwsza: to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:*;Druga: to podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.'''&lt;br /&gt;
&lt;br /&gt;
===Zadanie 5: Metoda Welcha===&lt;br /&gt;
&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # długość sygnału&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
okno = np.hamming(N)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(F,P) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
Nseg =20&lt;br /&gt;
N_s = N/Nseg&lt;br /&gt;
&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
(F, P) = welch(...)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(Nseg*np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha===&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    # jedna realizacja sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego o std 5-krotnie większym niż amplituda sinusoidy&lt;br /&gt;
    s =...&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N) # okno blakmana dla periodogramu&lt;br /&gt;
ile_okien = 10&lt;br /&gt;
Nw = N/ile_okien&lt;br /&gt;
okno_w = ...#okno blackmana dla welcha&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N/2+1)) # uwaga, to jest dobrze tylko dla Fs parzystych&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw/2+1)) # uwaga, to jest dobrze tylko dla Fs parzystych&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):#wygeneruj 100 realizacji sygnału&lt;br /&gt;
    s = ...#sygnał&lt;br /&gt;
    (F_p, P) = ...# jego periodogram&lt;br /&gt;
    S_perio[i,:] = ...# zachowaj periodogram tej realizacji na później&lt;br /&gt;
    (F_w, P_w) = ... # widmo Welcha&lt;br /&gt;
    S_welch[i,:] = ...# zachowaj widmo Welcha tej realizacji na później&lt;br /&gt;
&lt;br /&gt;
# poniżej robimy wykresy &lt;br /&gt;
py.figure(1)    &lt;br /&gt;
py.subplot(3,1,1) &lt;br /&gt;
py.plot(F_p,np.mean(S_perio,axis = 0),'r',&lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio, 2.5,axis =0),'b', &lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio,97.5,axis =0),'b' )&lt;br /&gt;
py.title(u'Periodogram: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(F_w,np.mean(S_welch,axis = 0),'r',&lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch, 2.5,axis =0),'b', &lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch,97.5,axis =0),'b' )&lt;br /&gt;
py.title('Welch: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F_p, ...) # błąd względny ( std/mean *100)w % dla periodogramu&lt;br /&gt;
py.plot(F_w, ...) # błąd względny w % dla Welcha&lt;br /&gt;
py.ylim([0,250])&lt;br /&gt;
py.xlabel('Częstość Hz', fontproperties = font)&lt;br /&gt;
py.ylabel('%')&lt;br /&gt;
py.legend(('periodogram','Welch'))&lt;br /&gt;
py.title('Błąd względny', fontproperties = font)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*20*t)&lt;br /&gt;
    s += 5*np.random.randn(len(s))&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
ile_okien = 10&lt;br /&gt;
Nw = N/ile_okien&lt;br /&gt;
okno_w = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N/2+1))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw/2+1))&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (F_p, P) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i,:] = P&lt;br /&gt;
    (F_w, P_w) = welch(s,Fs,window = okno_w, nperseg = Nw, noverlap = Nw/2,scaling = 'density', return_onesided = True)&lt;br /&gt;
    S_welch[i,:] = P_w * ile_okien&lt;br /&gt;
&lt;br /&gt;
py.figure(1)    &lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(F_p,np.mean(S_perio,axis = 0),'r',&lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio, 2.5,axis =0),'b', &lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio,97.5,axis =0),'b' )&lt;br /&gt;
py.title(u'Periodogram: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(F_w,np.mean(S_welch,axis = 0),'r',&lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch, 2.5,axis =0),'b', &lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch,97.5,axis =0),'b' )&lt;br /&gt;
py.title('Welch: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F_p, np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0)*100)&lt;br /&gt;
py.plot(F_w, np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0)*100)&lt;br /&gt;
py.ylim([0,250])&lt;br /&gt;
py.xlabel('Częstość Hz', fontproperties = font)&lt;br /&gt;
py.ylabel('%')&lt;br /&gt;
py.legend(('periodogram','Welch'))&lt;br /&gt;
py.title('Błąd względny', fontproperties = font)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 7: Estymacja widma mocy metodą wielookienkową Thomsona (multitaper) ===&lt;br /&gt;
Jeśli nie mamy do dyspozycji dostatecznie długiego sygnału stacjonarnego i ergodycznego aby astosować metodę Welcha pomocne może być wykorzystanie zestawów okien ortogonalnych (Discrete Prolate Spheroidal Sequences- DPSS).  Ponieważ są ortogonalne więc widma estymowane periodogramem z każdym z tych okienek stanowią niezależne estymaty gęstości mocy. Ich wartość średnia ma mniejszą wariancję niż estymata za pomocą pojedynczego periodogramu. Oczywiście nie ma nic za darmo: za mniejszą wariancję płacimy szerokością piku.&lt;br /&gt;
&lt;br /&gt;
Metoda ta została zaproponowana w pracy:    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982&lt;br /&gt;
&lt;br /&gt;
==== Zestawy okien ortogonalnych ====&lt;br /&gt;
Najpierw zobaczmy jak wyglądają sekwencje okien. &lt;br /&gt;
* Moduł zawierający funkcję do generowania takiej sekwencji można ściągnąć stąd: http://www.fuw.edu.pl/~jarekz/dpss.py&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
&lt;br /&gt;
NW = 2         # szerokość pasma w którym zlokalizowane są piki główne okien&lt;br /&gt;
K = 2*NW-1 # liczba okien&lt;br /&gt;
N = 100        # rozmiar okna&lt;br /&gt;
py.figure(1)&lt;br /&gt;
w, eigen = dpss_window(N, NW, K) # generujemy okna&lt;br /&gt;
for i, eig in enumerate(eigen): &lt;br /&gt;
    py.plot(w[i,:])  # kolejno wykreślamy wszystkie okna&lt;br /&gt;
py.legend(range(len(eigen)))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
print(eigen)&lt;br /&gt;
# sprawdzamy czy okna są ortogonalne &lt;br /&gt;
print('Iloczyny skalarne sekwencji okien:')&lt;br /&gt;
for i in range(len(eigen)):&lt;br /&gt;
    for j in range(i,len(eigen)):&lt;br /&gt;
        print('okno '+str(i)+' z oknem '+str(j)+': '+'{:.5f}'.format( np.dot(w[i,:],w[j,:]) ) )&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
K = 2*NW-1&lt;br /&gt;
N = 100&lt;br /&gt;
py.figure(1)&lt;br /&gt;
w, eigen = dpss_window(N, NW, 2*NW-1)&lt;br /&gt;
for i, eig in enumerate(eigen):&lt;br /&gt;
    py.plot(w[i,:])&lt;br /&gt;
py.legend(range(len(eigen)))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
print(eigen)&lt;br /&gt;
print('Iloczyny skalarne sekwencji okien:')&lt;br /&gt;
for i in range(len(eigen)):&lt;br /&gt;
    for j in range(i,len(eigen)):&lt;br /&gt;
        print('okno '+str(i)+' z oknem '+str(j)+': '+'{:.5f}'.format( np.dot(w[i,:],w[j,:]) ) )&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Estymacja widma mocy ====&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą wielookienkową. &lt;br /&gt;
&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(F,P)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Uzupełnij poniższy kod:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    ...&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    ...&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW , Fs):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w, eigen = ...# wygeneruj sekwencję okien DPSS&lt;br /&gt;
    P_tmp =0&lt;br /&gt;
    for i in range(K): #dla każdego okna&lt;br /&gt;
        (F,Pi)= ...# oblicz periodogram&lt;br /&gt;
        P_tmp+= ...# dodaj do zmiennej tymczasowej&lt;br /&gt;
    P = ...# moc jest średnią z periodogramów dla poszczególnych okien&lt;br /&gt;
    F = rfftfreq(N,1.0/Fs)&lt;br /&gt;
    return (F, P)&lt;br /&gt;
         &lt;br /&gt;
#prezentacja widma&lt;br /&gt;
Fs = 200.0 # częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
# tworzymy sygnał testowy&lt;br /&gt;
(s1,t) = sin(f=10.2,Fs=Fs) &lt;br /&gt;
(s2,t) = sin(f=17.2,Fs=Fs)&lt;br /&gt;
s = s1+s2+np.random.randn(len(t))&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
NW = 2 # ustalamy szerokość pasma&lt;br /&gt;
(F_m,P_m) = ... # estymujemy widmo metodą mtm&lt;br /&gt;
(F_p,P_p) = ... # estymujemy widmo metodą periodogram z oknem prostokątnym&lt;br /&gt;
# wykreślamy wyniki&lt;br /&gt;
py.plot(F_m,P_m)&lt;br /&gt;
py.plot(F_p,P_p ,'g')&lt;br /&gt;
&lt;br /&gt;
# opisy wykresu&lt;br /&gt;
py.xlabel('Częstość [Hz]', fontproperties = font)&lt;br /&gt;
py.ylabel('Gestość mocy V^2/Hz', fontproperties = font)&lt;br /&gt;
py.title('Porównanie estymat gęstości mocy: wielokoienkowej i periodogramu', fontproperties = font)&lt;br /&gt;
py.legend(('wielookienkowa','periodogram'))&lt;br /&gt;
&lt;br /&gt;
# test zacowania energii&lt;br /&gt;
print('Test zachowania energii:')&lt;br /&gt;
print( 'energia w czasie = \t\t'+ '{:.5f}'.format( ...  )) &lt;br /&gt;
print( 'energia w mtm = \t\t'+ '{:.5f}'.format( ... ))&lt;br /&gt;
print( 'energia w periodogramie = \t'+ '{:.5f}'.format( ... ))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/Fs)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW , Fs):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w, eigen = dpss_window(N, NW, K)&lt;br /&gt;
    P=0&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        (F,Pi)=periodogram(s, w[i,:] , Fs)&lt;br /&gt;
        P+=Pi&lt;br /&gt;
    P = P/K&lt;br /&gt;
    F = rfftfreq(N,1.0/Fs)&lt;br /&gt;
    return (F, P)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
#prezentacja widma&lt;br /&gt;
Fs = 200.0&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=17.2,Fs=Fs)&lt;br /&gt;
s = s1+s2+np.random.randn(len(t))&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
NW = 2&lt;br /&gt;
(F_m,P_m) = mtm(s, NW,  Fs)&lt;br /&gt;
(F_p,P_p) = periodogram(s, np.ones(len(t)),  Fs)&lt;br /&gt;
py.plot(F_m,P_m)&lt;br /&gt;
py.plot(F_p,P_p ,'g')&lt;br /&gt;
py.xlabel('Częstość [Hz]', fontproperties = font)&lt;br /&gt;
py.ylabel('Gestość mocy V^2/Hz', fontproperties = font)&lt;br /&gt;
py.title('Porównanie estymat gęstości mocy: wielokoienkowej i periodogramu', fontproperties = font)&lt;br /&gt;
py.legend(('wielookienkowa','periodogram'))&lt;br /&gt;
# test zacowania energii&lt;br /&gt;
print('Test zachowania energii:')&lt;br /&gt;
print( 'energia w czasie = \t\t'+ '{:.5f}'.format(np.sum(s**2*1/Fs))) &lt;br /&gt;
print( 'energia w mtm = \t\t'+ '{:.5f}'.format(np.sum(P_m)))&lt;br /&gt;
print( 'energia w periodogramie = \t'+ '{:.5f}'.format(np.sum(P_p)))&lt;br /&gt;
py.show()&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie 8 ===&lt;br /&gt;
Proszę wykonać ilustrację średniej wraz z przedziałami ufności 95% oraz błędu względnego w estymatorze wielookienkowym (dla porównania periodogram), analogicznie jak w zadaniu 6.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW , Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w, eigen = dpss_window(N, NW, K)&lt;br /&gt;
    P=0&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        (F,Pi)=periodogram(s, w[i,:] , Fs)&lt;br /&gt;
        P+=Pi&lt;br /&gt;
    P = P/K&lt;br /&gt;
    F = rfftfreq(N,1.0/Fs)&lt;br /&gt;
    return (F, P)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*20*t)&lt;br /&gt;
    s += 5*np.random.randn(len(s))&lt;br /&gt;
    return s&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
T=2.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
NW = 2&lt;br /&gt;
N_rep = 1000&lt;br /&gt;
S_perio = np.zeros((N_rep, N//2+1))&lt;br /&gt;
S_mtm   = np.zeros((N_rep, N//2+1))&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (F_p, P) = periodogram(s,np.hamming(len(s)),Fs) &lt;br /&gt;
    S_perio[i,:] = P&lt;br /&gt;
    (F_m, P_w) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
    S_mtm[i,:] = P_w &lt;br /&gt;
&lt;br /&gt;
py.figure(1)    &lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(F_p,np.mean(S_perio,axis = 0),'r',&lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio, 2.5,axis =0),'b', &lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio,97.5,axis =0),'b' )&lt;br /&gt;
py.title(u'Periodogram: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(F_m,np.mean(S_mtm,axis = 0),'r',&lt;br /&gt;
        F_m, st.scoreatpercentile(S_mtm, 2.5,axis =0),'b', &lt;br /&gt;
        F_m, st.scoreatpercentile(S_mtm,97.5,axis =0),'b' )&lt;br /&gt;
py.title('MTM: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F_p, np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0)*100)&lt;br /&gt;
py.plot(F_m, np.std(S_mtm,axis = 0)/np.mean(S_mtm,axis = 0)*100)&lt;br /&gt;
py.ylim([0,150])&lt;br /&gt;
py.xlabel('Częstość Hz', fontproperties = font)&lt;br /&gt;
py.ylabel('%')&lt;br /&gt;
py.legend(('periodogram','MTM'))&lt;br /&gt;
py.title('Błąd względny', fontproperties = font)&lt;br /&gt;
py.show()&lt;br /&gt;
--&amp;gt; &lt;br /&gt;
==Co musimy z tego zapamiętać ==&lt;br /&gt;
* Jak definiujemy moc sygnału i energię w dziedzinie czasu w analizie sygnałów?&lt;br /&gt;
* Jak definiujemy gęstość energii i energię sygnału w dziedzinie częstości?&lt;br /&gt;
* Jak estymować periodogram?&lt;br /&gt;
* Co to znaczy że sygnał jest stochastyczny?&lt;br /&gt;
* Co to znaczy że sygnał jest stacjonarny i ergodyczny?&lt;br /&gt;
* Jaki jest błąd względny widma białego szumu estymowanego za pomocą periodogramu?&lt;br /&gt;
* Metody zmniejszenia błędu względnego: metoda Welcha i metoda wielookienkowa Thomsona - na czym polegają, jakie są podobieństwa i różniece w stosowaniu tych metod?&lt;br /&gt;
* W jakich sytuacjach wybrać metodę Welcha a w jakich Thomsona?&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5979</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5979"/>
		<updated>2016-11-15T00:19:19Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 7: Estymacja widma mocy metodą multitaper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return F,P&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(F, moc_w_czestosci) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Mon Nov  7 12:21:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= okno/np.linalg.norm(okno)&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    P = S*S.conj()&lt;br /&gt;
    P = P/Fs&lt;br /&gt;
    P = P.real&lt;br /&gt;
    if len(s)%2 ==0:&lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = rfftfreq(len(s), 1./Fs)&lt;br /&gt;
    return F,P&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
  &lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = s**2&lt;br /&gt;
(F, moc_w_czestosci) = widmo_mocy(s, Fs=fs,okno=okno)&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
&lt;br /&gt;
energia_w_czasie = np.sum(moc_w_czasie*dt)&lt;br /&gt;
energia_w_czestosci = np.sum(moc_w_czestosci)&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Periodogram: widmo mocy okienkowanego sygnału ===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego, czyli periodogram:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić, że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać przez wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartości zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji.&lt;br /&gt;
&lt;br /&gt;
Poniżej mamy przykład wytwarzania  procesu złożonego z dwóch realizacji po 50 próbek oraz estymowania jego wartości średniej. Każda próbka jest niezależną zmienną losową z rozkładu normalnego o średniej 0 i wariancji 1:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,50,1)&lt;br /&gt;
&lt;br /&gt;
# realizacja 1&lt;br /&gt;
x1 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# realizacja 2&lt;br /&gt;
x2 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# średnia procesu&lt;br /&gt;
xm = 0.5*(x1+x2)&lt;br /&gt;
&lt;br /&gt;
# ilustracja&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.stem(t,x1)&lt;br /&gt;
py.title('realizacja 1')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.stem(t,x2)&lt;br /&gt;
py.title('realizacja 2')&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.stem(t,xm,'r')&lt;br /&gt;
py.title('średnia procesu')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatorach momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Estymacja widma sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum (stochastycznego).&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Tue Nov  8 11:45:15 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    ...&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    '''szum gaussowski o zadanej:&lt;br /&gt;
        średniej mu&lt;br /&gt;
        wariancji sigma**2&lt;br /&gt;
        długości T,&lt;br /&gt;
        częstości próbkowania Fs&lt;br /&gt;
       '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = ...&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = ... #realizacja sinusa&lt;br /&gt;
        (sz,t) = ...#realizacja szumu&lt;br /&gt;
        syg = ...# sygnał będący sumą powyższych&lt;br /&gt;
        (F, moc_w_czestosci) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = ... #realizacja sinusa&lt;br /&gt;
        (sz,t) = ...#realizacja szumu&lt;br /&gt;
        syg = ...# sygnał będący sumą powyższych&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = ...#zapamiętaj widmo i-tej realizacji&lt;br /&gt;
    srednie_w = ...# usrednij widma po realizacjach&lt;br /&gt;
    przedzial_d = np.zeros(len(F)) # tablice na dolną i górną granicę przedziału ufności &lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F: # dla każdej częstości znajdujemy granice przedziałów ufności&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(..., 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(..., 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r') # rysujemy średnią&lt;br /&gt;
    py.plot(F,przedzial_d,'b')# rysujemy granicę dolną&lt;br /&gt;
    py.plot(F,przedzial_g,'b')# rysujemy granicę górną&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (t, s)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (t, s)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (t, s) = sin(f=10,Fs=FS)&lt;br /&gt;
        (t, sz) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (t, s) = sin(f=10,Fs=FS)&lt;br /&gt;
        (t, sz) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
* Niech  &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt; - sygnał stochastyczny, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum),&lt;br /&gt;
* Jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną&lt;br /&gt;
* Wówczas, część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; są nieskorelowanymi zmiennymi losowymi o średniej zero i równych wariancjach. &lt;br /&gt;
* Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. &lt;br /&gt;
* Wielkość:&lt;br /&gt;
: &amp;lt;math&amp;gt; P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f) &amp;lt;/math&amp;gt;&lt;br /&gt;
: jest sumą kwadratów dwóch niezależnych zmiennych normalnych. &lt;br /&gt;
* Wielkość ta podlega rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
* Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
**Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. &lt;br /&gt;
** W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, &lt;br /&gt;
** Oznacza to, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
* Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki:&lt;br /&gt;
**;Pierwsza: to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:*;Druga: to podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.'''&lt;br /&gt;
&lt;br /&gt;
===Zadanie 5: Metoda Welcha===&lt;br /&gt;
&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # długość sygnału&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
okno = np.hamming(N)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(F,P) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
Nseg =20&lt;br /&gt;
N_s = N/Nseg&lt;br /&gt;
&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
(F, P) = welch(...)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(Nseg*np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha===&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    # jedna realizacja sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego o std 5-krotnie większym niż amplituda sinusoidy&lt;br /&gt;
    s =...&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N) # okno blakmana dla periodogramu&lt;br /&gt;
ile_okien = 10&lt;br /&gt;
Nw = N/ile_okien&lt;br /&gt;
okno_w = ...#okno blackmana dla welcha&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N/2+1)) # uwaga, to jest dobrze tylko dla Fs parzystych&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw/2+1)) # uwaga, to jest dobrze tylko dla Fs parzystych&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):#wygeneruj 100 realizacji sygnału&lt;br /&gt;
    s = ...#sygnał&lt;br /&gt;
    (F_p, P) = ...# jego periodogram&lt;br /&gt;
    S_perio[i,:] = ...# zachowaj periodogram tej realizacji na później&lt;br /&gt;
    (F_w, P_w) = ... # widmo Welcha&lt;br /&gt;
    S_welch[i,:] = ...# zachowaj widmo Welcha tej realizacji na później&lt;br /&gt;
&lt;br /&gt;
# poniżej robimy wykresy &lt;br /&gt;
py.figure(1)    &lt;br /&gt;
py.subplot(3,1,1) &lt;br /&gt;
py.plot(F_p,np.mean(S_perio,axis = 0),'r',&lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio, 2.5,axis =0),'b', &lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio,97.5,axis =0),'b' )&lt;br /&gt;
py.title(u'Periodogram: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(F_w,np.mean(S_welch,axis = 0),'r',&lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch, 2.5,axis =0),'b', &lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch,97.5,axis =0),'b' )&lt;br /&gt;
py.title('Welch: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F_p, ...) # błąd względny ( std/mean *100)w % dla periodogramu&lt;br /&gt;
py.plot(F_w, ...) # błąd względny w % dla Welcha&lt;br /&gt;
py.ylim([0,250])&lt;br /&gt;
py.xlabel('Częstość Hz', fontproperties = font)&lt;br /&gt;
py.ylabel('%')&lt;br /&gt;
py.legend(('periodogram','Welch'))&lt;br /&gt;
py.title('Błąd względny', fontproperties = font)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
from matplotlib.font_manager import FontProperties&lt;br /&gt;
&lt;br /&gt;
font = FontProperties('Arial') 	&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*20*t)&lt;br /&gt;
    s += 5*np.random.randn(len(s))&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
ile_okien = 10&lt;br /&gt;
Nw = N/ile_okien&lt;br /&gt;
okno_w = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N/2+1))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw/2+1))&lt;br /&gt;
&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (F_p, P) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i,:] = P&lt;br /&gt;
    (F_w, P_w) = welch(s,Fs,window = okno_w, nperseg = Nw, noverlap = Nw/2,scaling = 'density', return_onesided = True)&lt;br /&gt;
    S_welch[i,:] = P_w * ile_okien&lt;br /&gt;
&lt;br /&gt;
py.figure(1)    &lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(F_p,np.mean(S_perio,axis = 0),'r',&lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio, 2.5,axis =0),'b', &lt;br /&gt;
        F_p, st.scoreatpercentile(S_perio,97.5,axis =0),'b' )&lt;br /&gt;
py.title(u'Periodogram: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(F_w,np.mean(S_welch,axis = 0),'r',&lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch, 2.5,axis =0),'b', &lt;br /&gt;
        F_w, st.scoreatpercentile(S_welch,97.5,axis =0),'b' )&lt;br /&gt;
py.title('Welch: średnie widmo realizacji wraz z 95% CI', fontproperties = font)&lt;br /&gt;
py.ylabel('V^2/Hz')&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F_p, np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0)*100)&lt;br /&gt;
py.plot(F_w, np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0)*100)&lt;br /&gt;
py.ylim([0,250])&lt;br /&gt;
py.xlabel('Częstość Hz', fontproperties = font)&lt;br /&gt;
py.ylabel('%')&lt;br /&gt;
py.legend(('periodogram','Welch'))&lt;br /&gt;
py.title('Błąd względny', fontproperties = font)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 7: Estymacja widma mocy metodą multitaper ===&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą multitaper.&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(S,F)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    n =5&lt;br /&gt;
    w, eigen = dpss_window(N, NW, 2*NW-1)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w[i,:]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fs = 200.0&lt;br /&gt;
NW = 3&lt;br /&gt;
(s,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
s = s+np.random.randn(len(s))&lt;br /&gt;
(S,F) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.plot( F,fftshift(np.abs(fft(s))**2/len(s) ) ,'g')&lt;br /&gt;
&lt;br /&gt;
print np.sum(S)&lt;br /&gt;
print np.sum(s**2)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5977</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5977"/>
		<updated>2016-11-14T10:40:19Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return F,P&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(F, moc_w_czestosci) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Mon Nov  7 12:21:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= okno/np.linalg.norm(okno)&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    P = S*S.conj()&lt;br /&gt;
    P = P/Fs&lt;br /&gt;
    P = P.real&lt;br /&gt;
    if len(s)%2 ==0:&lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = rfftfreq(len(s), 1./Fs)&lt;br /&gt;
    return F,P&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
  &lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = s**2&lt;br /&gt;
(F, moc_w_czestosci) = widmo_mocy(s, Fs=fs,okno=okno)&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
&lt;br /&gt;
energia_w_czasie = np.sum(moc_w_czasie*dt)&lt;br /&gt;
energia_w_czestosci = np.sum(moc_w_czestosci)&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Periodogram: widmo mocy okienkowanego sygnału ===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego, czyli periodogram:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić, że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać przez wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartości zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji.&lt;br /&gt;
&lt;br /&gt;
Poniżej mamy przykład wytwarzania  procesu złożonego z dwóch realizacji po 50 próbek oraz estymowania jego wartości średniej. Każda próbka jest niezależną zmienną losową z rozkładu normalnego o średniej 0 i wariancji 1:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,50,1)&lt;br /&gt;
&lt;br /&gt;
# realizacja 1&lt;br /&gt;
x1 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# realizacja 2&lt;br /&gt;
x2 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# średnia procesu&lt;br /&gt;
xm = 0.5*(x1+x2)&lt;br /&gt;
&lt;br /&gt;
# ilustracja&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.stem(t,x1)&lt;br /&gt;
py.title('realizacja 1')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.stem(t,x2)&lt;br /&gt;
py.title('realizacja 2')&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.stem(t,xm,'r')&lt;br /&gt;
py.title('średnia procesu')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatorach momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Estymacja widma sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum (stochastycznego).&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Tue Nov  8 11:45:15 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    ...&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    '''szum gaussowski o zadanej:&lt;br /&gt;
        średniej mu&lt;br /&gt;
        wariancji sigma**2&lt;br /&gt;
        długości T,&lt;br /&gt;
        częstości próbkowania Fs&lt;br /&gt;
       '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = ...&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = ... #realizacja sinusa&lt;br /&gt;
        (sz,t) = ...#realizacja szumu&lt;br /&gt;
        syg = ...# sygnał będący sumą powyższych&lt;br /&gt;
        (F, moc_w_czestosci) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = ... #realizacja sinusa&lt;br /&gt;
        (sz,t) = ...#realizacja szumu&lt;br /&gt;
        syg = ...# sygnał będący sumą powyższych&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = ...#zapamiętaj widmo i-tej realizacji&lt;br /&gt;
    srednie_w = ...# usrednij widma po realizacjach&lt;br /&gt;
    przedzial_d = np.zeros(len(F)) # tablice na dolną i górną granicę przedziału ufności &lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F: # dla każdej częstości znajdujemy granice przedziałów ufności&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(..., 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(..., 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r') # rysujemy średnią&lt;br /&gt;
    py.plot(F,przedzial_d,'b')# rysujemy granicę dolną&lt;br /&gt;
    py.plot(F,przedzial_g,'b')# rysujemy granicę górną&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (t, s)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (t, s)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (t, s) = sin(f=10,Fs=FS)&lt;br /&gt;
        (t, sz) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (t, s) = sin(f=10,Fs=FS)&lt;br /&gt;
        (t, sz) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
* Niech  &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt; - sygnał stochastyczny, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum),&lt;br /&gt;
* Jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną&lt;br /&gt;
* Wówczas, część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; są nieskorelowanymi zmiennymi losowymi o średniej zero i równych wariancjach. &lt;br /&gt;
* Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. &lt;br /&gt;
* Wielkość:&lt;br /&gt;
: &amp;lt;math&amp;gt; P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f) &amp;lt;/math&amp;gt;&lt;br /&gt;
: jest sumą kwadratów dwóch niezależnych zmiennych normalnych. &lt;br /&gt;
* Wielkość ta podlega rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
* Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
**Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. &lt;br /&gt;
** W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, &lt;br /&gt;
** Oznacza to, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
* Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki:&lt;br /&gt;
**;Pierwsza: to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:*;Druga: to podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.'''&lt;br /&gt;
&lt;br /&gt;
===Zadanie 5: Metoda Welcha===&lt;br /&gt;
&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)   &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # długość sygnału&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
okno = np.hamming(N)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(F,P) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
Nseg =20&lt;br /&gt;
N_s = N/Nseg&lt;br /&gt;
&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
(F, P) = welch(...)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(Nseg*np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha===&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  fft, fftfreq, fftshift&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    Fs- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    (x,t) = sin(f = 20.0, T = T, Fs = Fs, phi = 0)&lt;br /&gt;
    x += 2*np.random.randn(len(x))&lt;br /&gt;
    return x&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
Nw = N/10.0&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
okno_welch = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw))&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (P, F) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i] = P&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(F,P) &lt;br /&gt;
    (P, F) = pwelch(s,okno_welch,Nw/10,Fs)&lt;br /&gt;
    S_welch[i] = P&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F,P)&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0))&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 7: Estymacja widma mocy metodą multitaper ===&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą multitaper.&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(S,F)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w.dpssarray[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from dpss import dpss_window&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    n =5&lt;br /&gt;
    w, eigen = dpss_window(N, NW, 2*NW-1)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w[i,:]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fs = 200.0&lt;br /&gt;
NW = 3&lt;br /&gt;
(s,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
s = s+np.random.randn(len(s))&lt;br /&gt;
(S,F) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.plot( F,fftshift(np.abs(fft(s))**2/len(s) ) ,'g')&lt;br /&gt;
&lt;br /&gt;
print np.sum(S)&lt;br /&gt;
print np.sum(s**2)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5976</id>
		<title>Ćwiczenia 2 2</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5976"/>
		<updated>2016-11-10T15:18:08Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Efekt nieciągłości funkcji */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Odwracalność transformaty=&lt;br /&gt;
Reprezentacja sygnałów w dziedzinie częstości jest dualna do reprezentacji  w dziedzinie czasu. To znaczy, że jedną reprezentację można przekształcić w drugą. Do przejścia z dziedziny czasu do częstości używaliśmy transformaty Fouriera (zaimplemantowanej w &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;). Przejścia z dziedziny częstości do czasu dokonujemy przy pomocy odwrotnej transformaty Fouriera (zaimplementowanej jako &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Mając (zespolone) współczynniki w dziedzinie częstości dla pewnego sygnału, możemy odzyskać jego przebieg czasowy.&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
* Proszę wygenerować sygnał &amp;lt;math&amp;gt;s(t) = \sin(2\pi t \cdot 1)+\sin\left(2 \pi  t \cdot 3+\frac{\pi}{5}\right) &amp;lt;/math&amp;gt; o długości 2,5 s próbkowany 100 Hz, obliczyć jego transformatę Fouriera za pomocą &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;, a następnie zrekonstruować przebieg czasowy za pomocą &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Sygnał oryginalny i zrekonstruowany wykreślić na jednym rysunku.  ''Uwaga: funkcja ifft zwraca wektor liczb zespolonych. Sprawdź jaka jest jegeo część urojona. Na wykresie rekonstrukcji przedstaw jego część rzeczywistą.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Dla porównania proszę zrekonstruować sygnał korzystając jawnie z postaci odwrotnej transformaty Fouriera danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;x(n)=\frac{1}{N} \sum_{k=0}^{N-1} S[k] \cdot \exp\left(2j \pi n\frac{ k}{N}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Zwróćmy uwagę, że ''n'' w powyższym wzorze to indeksy punktów czasu, zatem wiążą się one z czasem zwracanym przez nasze funkcje następująco:&lt;br /&gt;
:&amp;lt;tt&amp;gt;n = np.arange(0,len(t),1)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zatem kod rekonstruujący może być np. taki:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
def f1(dt):&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co dt	'''&lt;br /&gt;
	t = np.arange(0,2,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*t)+np.sin(2*np.pi*3*t+np.pi/5)#np.abs(t)#&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
dt = 0.1	&lt;br /&gt;
Fs = 1.0/dt&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=1,T=2.5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2,t) = sin(f=3,T=2.5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s = s1 + s2&lt;br /&gt;
S = FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
N = len(t)&lt;br /&gt;
&lt;br /&gt;
s_ifft = FFT.ifft(S)&lt;br /&gt;
&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
py.plot(t,s_ifft,'bo',markersize = 3 )&lt;br /&gt;
py.plot(t,(s_rekonstrukcja),'gx',markersize = 8)&lt;br /&gt;
py.plot(t,s,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rekonstrukcja na dłuższym odcinku czasu:=====&lt;br /&gt;
Korzystając z wyników poprzedniego polecenia proszę porównać wykres funkcji zadanych wzorami dla odcinak czasu o długości 5s i rekonstrukcję sygnału o długości 5s otrzymanego ze współczynników Fouriera obliczonych dla 2,5s  odcinak czasu.&lt;br /&gt;
* Na jakim odcinku czasu sygnały są zgodne?&lt;br /&gt;
* Co dzieje się na dalszym odcinku czasu?&lt;br /&gt;
 *&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
dalszy ciąg poprzedniego kodu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.figure(2)&lt;br /&gt;
(s1_d,t_d) = sin(f=1,T=5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2_d,t_d) = sin(f=3,T=5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s_d = s1_d + s2_d&lt;br /&gt;
&lt;br /&gt;
# rekonstrukcja bazująca na współczynnikach otzrzynmanych dla 2sek fragmentu sygnału&lt;br /&gt;
n=np.arange(0,len(t_d),1)&lt;br /&gt;
s_rekonstrukcja_dluga = np.zeros(len(t_d)) &lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja_dluga += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
py.plot(t_d,(s_rekonstrukcja_dluga),'gx-',markersize = 8)&lt;br /&gt;
py.plot(t_d,s_d,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przykład:=====&lt;br /&gt;
Oblicz współczynniki numerycznie korzystając z &amp;lt;tt&amp;gt;numpy.fft.fft&amp;lt;/tt&amp;gt;, porównaj z otrzymanymi analitycznie. Zrób wykresy funkcji i wartości bezwzględnej transformaty. Dla funkcji ''f'' z poprzedniego przykładu danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt; f(t)=|t| &amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-1, 1]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1,&lt;br /&gt;
&lt;br /&gt;
Obliczamy współczynniki i robimy wykres:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def f1():&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co 0.1	'''&lt;br /&gt;
	dt = 0.1	&lt;br /&gt;
	t = np.arange(-1,1,dt)&lt;br /&gt;
	s = np.abs(t)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
Fs = 10.0&lt;br /&gt;
(s,t) = f1() #generuję sygnał&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.stem(t,s)&lt;br /&gt;
&lt;br /&gt;
S=FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
F = FFT.fftfreq(len(S),Fs) # obliczam skalę częstości &lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(F,np.abs(S)/len(s)) # wykreślam widmo amplitudowe&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porównujemy wyniki z wynikami analitycznymi:&lt;br /&gt;
* &amp;lt;math&amp;gt; f(t) = |cos(t)|&amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-\pi, \pi]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Badanie rozdzielczości sygnałami testowymi=&lt;br /&gt;
* Poniżej będziemy zajmować się sygnałami rzeczywistymi, więc stosujemy funkcje z rodziny Real FFT:&lt;br /&gt;
https://docs.scipy.org/doc/numpy/reference/routines.fft.html&lt;br /&gt;
&lt;br /&gt;
* W poniższych przykładach jako widmo będziemy rozumieli widmo amplitudowe, tzn wartość bezwzględną ze współczynników szeregu Fouriera.&lt;br /&gt;
&lt;br /&gt;
==Widmo sinusoidy i delty==&lt;br /&gt;
Najprostsza sytuacja: Badamy współczynniki zwracane przez &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt; dla sinusoid o różnych częstościach. &lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
* Proszę kolejno wygenerować sinusoidy o długości 1s próbkowaną 32Hz i częstościach 1,10, 16  i  0 Hz. Dla tych sinusoid proszę policzyć transformaty Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wyglądają otrzymane wykresy?&lt;br /&gt;
** Czy coś szczególnego dzieje się dla częstości 0 i 16Hz? Czy w tych skrajnych przypadkach faza sygnału ma wpływ na wynik transformaty? &lt;br /&gt;
===Zadanie 3===&lt;br /&gt;
&lt;br /&gt;
* Proszę wygenerować sygnał delta położony w sekundzie 0,5 na odcinku czasu o długości 1s próbkowany 128Hz. Dla takiego sygnału proszę policzyć transformatę Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wygląda transformata funkcji delta? &lt;br /&gt;
** Jakie częstości w sobie zawiera?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# skrypt implemetujący polecenia w sekcji&lt;br /&gt;
# ==Badanie rozdzielczości sygnałami testowymi==&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
 &lt;br /&gt;
# do pytania 1&lt;br /&gt;
(s,t) = sin(f=2,T=1,Fs=10,phi=np.pi/2)&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
print( S)&lt;br /&gt;
# na wydruku należy zauważyć, że wsółczynniki są zespolone i parami sprzężone&lt;br /&gt;
&lt;br /&gt;
# do pytania 2&lt;br /&gt;
Fs = 30&lt;br /&gt;
for f in (0,1,10,16):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f=f,T=1,Fs=Fs,phi=np.pi/3) # f=0,10,30,64&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(t,s,'o-')&lt;br /&gt;
    py.title(str(f))&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F, np.abs(S),'o')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
# do pytania 3&lt;br /&gt;
py.figure()&lt;br /&gt;
&lt;br /&gt;
(s,t) = delta(t0=0.5, T=1  ,Fs = 128)&lt;br /&gt;
&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(t,s,'o')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(F, np.abs(S),'o')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Efekt nieciągłości funkcji ===&lt;br /&gt;
====Zadanie 4====&lt;br /&gt;
* Wygenerować sinusoidę o następujących własnościach: f=10 Hz, T=1, Fs=100 Hz, i fazie = 1;&lt;br /&gt;
* Przy pomocy subplotów proszę sporządzić rysunek zgodnie z ponższym opisem:&lt;br /&gt;
** subplot(2,2,1): przebieg sygnału w czasie &lt;br /&gt;
** subplot(2,2,2): moduł jego transformaty Fouriera (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości,&lt;br /&gt;
** subplot(2,2,3): Proszę wykreślić trzykrotnie periodycznie powielony oryginalny sygnał. Można go skonstruować wywołując funkcję: &amp;lt;tt&amp;gt;s_period = np.concatenate((s,s,s))&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** subplot(2,2,4): moduł transformaty Fouriera &amp;lt;tt&amp;gt;s_period&amp;lt;/tt&amp;gt; (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości&lt;br /&gt;
&lt;br /&gt;
* Powtórz te same kroki dla sinusa o częstości 10.3 Hz.&lt;br /&gt;
Pytania:&lt;br /&gt;
# Czym różnią się przedłużenia sinusoidy 10 Hz od sinusoidy 10.3 Hz? Proszę zwrócić uwagę na miejsca sklejania sygnałów.&lt;br /&gt;
 &amp;lt;!--Porównaj z wynikami otrzymanymi w zagadnieniu '''Rekonstrukcja na dłuższym odcinku czasu'''.--&amp;gt;&lt;br /&gt;
# Skąd bierze się widoczna różnica w widmie sinusoidy 10 Hz i 10.3 Hz? &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)    &lt;br /&gt;
    &lt;br /&gt;
for f in (10, 10.3):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f = f, T =1, Fs = 100, phi = 1)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,1)&lt;br /&gt;
    py.plot(t,s)&lt;br /&gt;
    py.title(f)&lt;br /&gt;
    py.subplot(2,2,2)&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(len(s),0.01)&lt;br /&gt;
    py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,3)&lt;br /&gt;
    s_period = np.concatenate((s,s,s))&lt;br /&gt;
    t_period = np.arange(0,3,0.01)&lt;br /&gt;
    py.plot(t_period,s_period)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,4)&lt;br /&gt;
    S_period = rfft(s_period)&lt;br /&gt;
    F_period = rfftfreq(len(s_period),0.01)&lt;br /&gt;
    py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Długość sygnału a rozdzielczość widma FFT ===&lt;br /&gt;
Z dotychczasowych rozważań o transformacie Fouriera ograniczonych w czasie sygnałów dyskretnych wynika, że w widmie reprezentowane są częstości od &amp;lt;math&amp;gt;-F_N&amp;lt;/math&amp;gt; do &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; to częstości Nyquista. Dostępnych binów częstości jest ''N'' - tyle samo ile obserwowanych punktów sygnału.&lt;br /&gt;
&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 100Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 1000Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 10 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 100 s sygnału próbkowanego 10Hz?&lt;br /&gt;
&lt;br /&gt;
Zatem zwiększenie długości sygnału w czasie poprawia &amp;quot;rozdzielczość&amp;quot;  reprezentacji częstotliwościowej sygnału. &lt;br /&gt;
&lt;br /&gt;
Załóżmy, że dysponujemy jedynie sekwencją ''N'' próbek pewnego sygnału. Rozważymy teraz jakie można przyjąć strategie przedłużania tego sygnału w celu zwiększenia gęstości binów częstotliwościowych i jakie te strategie mają konsekwencje.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przedłużenie przez periodyczną replikację =====&lt;br /&gt;
Rozważając poprzednie przykłady zauważyliśmy, że FFT &amp;quot;widzi&amp;quot; sygnał tak jakby to była nieskończona periodyczna replikacja fragmentu sygnału podanego na wejście. Zatem najbardziej naturalną formą przedłużenia sygnału może wydawać się postępowanie zgodnie z tym sposobem widzenia i dołożenie do sygnału kolejnych segmentów zawierających kopie analizowanego fragmentu sygnału. Zbadajmy empirycznie efekty takiego podejścia. &lt;br /&gt;
&lt;br /&gt;
* Proszę wytworzyć i wykreślić sinusoidy o częstościach 15 i 20 Hz, trwające 0.1s i próbkowane 100Hz. &lt;br /&gt;
** Ile próbek sygnału dostajemy?&lt;br /&gt;
** Proszę obliczyć transformatę Fouriera. Ile punktów w widmie amplitudowym otrzymujemy? Dla jakich cżęstości mamy biny?&lt;br /&gt;
** Proszę skonstruować sygnał będący złożeniem 10 kopii oryginalnego sygnału. &lt;br /&gt;
Jest to 10-krotnie dłuższy fragment sygnału, którego wersję nieskończoną opisują współczynniki obliczone przez transformatę Fouriera. Transformata policzona z takiego wydłużonego odcinak ma 10-krotnie więcej binów. W szczególności zawiera on bin 15Hz. Proszę porównać wykresy widma amplitudowego otrzymanego dla wersji krótkiej i przedłużonej sygnału. Czy wynik jest zaskakujący? Jak go można zrozumieć?&lt;br /&gt;
 * Sygnał przedłużony periodycznie nie zawiera żadnej dodatkowej informacji względem pojedynczego okresu!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
	&lt;br /&gt;
(s1,t) = sin(f = 15.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
(s2,t)= sin(f = 20.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
py.clf()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = FFT.fft(s)&lt;br /&gt;
F = FFT.fftfreq(len(s),0.01)&lt;br /&gt;
py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,s,s,s,s,s,s,s,s,s))&lt;br /&gt;
t_period = np.arange(0,len(s_period)/100.0,0.01)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = FFT.fft(s_period)&lt;br /&gt;
F_period = FFT.fftfreq(len(s_period),0.01)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przedłużanie sygnału ====&lt;br /&gt;
=====Przedłużanie przez cykliczne powielenie=====&lt;br /&gt;
Zobaczmy co się stanie jesli przedłużymy sygnał prze jego periodyczne przedłużenie. Efekty takiego przedłużania proszę zbadać przy użyciu poniższego kodu: &lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
&lt;br /&gt;
(s,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
n = 10&lt;br /&gt;
s_period = np.hstack(n*(s,))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/(len(s_period)))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Przedłużanie zerami=====&lt;br /&gt;
Metodą na zwiększanie ilości binów w transformacie Fouriera jest przedłużanie sygnału zerami (zero-padding). Jest to szczególny przypadek następującego podejścia: Nasz &amp;quot;prawdziwy&amp;quot; sygnał jest długi. Oglądamy go przez prostokątne okno, które ma wartość 1 na odcinku czasu, dla którego próbki mamy dostępne i 0 dla pozostałego czasu (więcej o różnych oknach będzie na kolejnych zajęciach). W efekcie możemy myśleć, że oglądany przez nas sygnał to efekt przemnożenia &amp;quot;prawdziwego&amp;quot; sygnału przez okno. Efekty takiego przedłużania proszę zbadać:&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 10Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 22Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału będącego suma dwóch powyższych&lt;br /&gt;
* Jak można zinterpretować wyniki tego eksperymentu w świetle [[Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#Twierdzenie_o_splocie|twierdzenia o splocie]]?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Fri Oct 21 15:51:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
n = 10&lt;br /&gt;
(s1,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
(s2,t)= sin(f = 22.0, T =0.1, Fs = Fs)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,z,z,z,z,z,z,z,z,z))&lt;br /&gt;
t_period = np.arange(0,n*T,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
&lt;br /&gt;
s_period = np.hstack((s,s,s,s,s,s,s,s,s,s))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s_period)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Co musimy z tego zapamiętać?=&lt;br /&gt;
* Sygnał może być reprezentowany w dziedzine czasu lub w dziedzinie częstości&lt;br /&gt;
* Jak wyglada widmo delty?&lt;br /&gt;
* Jak wygląda widmo sinusa, którego całkowita ilość okresów mieści się w badanym fragmencie, a jak jeśli niecałkowita?&lt;br /&gt;
* Jak długość sygnału wpływa na rozdzielczość widma?&lt;br /&gt;
* Jakie częstości występują w widmie sygnału periodyzowanego cyklicznie?&lt;br /&gt;
* Jaki efekt daje przedłużanie zerami?&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5975</id>
		<title>Ćwiczenia 2 2</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5975"/>
		<updated>2016-11-10T15:17:47Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Odwracalność transformaty=&lt;br /&gt;
Reprezentacja sygnałów w dziedzinie częstości jest dualna do reprezentacji  w dziedzinie czasu. To znaczy, że jedną reprezentację można przekształcić w drugą. Do przejścia z dziedziny czasu do częstości używaliśmy transformaty Fouriera (zaimplemantowanej w &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;). Przejścia z dziedziny częstości do czasu dokonujemy przy pomocy odwrotnej transformaty Fouriera (zaimplementowanej jako &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Mając (zespolone) współczynniki w dziedzinie częstości dla pewnego sygnału, możemy odzyskać jego przebieg czasowy.&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
* Proszę wygenerować sygnał &amp;lt;math&amp;gt;s(t) = \sin(2\pi t \cdot 1)+\sin\left(2 \pi  t \cdot 3+\frac{\pi}{5}\right) &amp;lt;/math&amp;gt; o długości 2,5 s próbkowany 100 Hz, obliczyć jego transformatę Fouriera za pomocą &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;, a następnie zrekonstruować przebieg czasowy za pomocą &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Sygnał oryginalny i zrekonstruowany wykreślić na jednym rysunku.  ''Uwaga: funkcja ifft zwraca wektor liczb zespolonych. Sprawdź jaka jest jegeo część urojona. Na wykresie rekonstrukcji przedstaw jego część rzeczywistą.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Dla porównania proszę zrekonstruować sygnał korzystając jawnie z postaci odwrotnej transformaty Fouriera danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;x(n)=\frac{1}{N} \sum_{k=0}^{N-1} S[k] \cdot \exp\left(2j \pi n\frac{ k}{N}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Zwróćmy uwagę, że ''n'' w powyższym wzorze to indeksy punktów czasu, zatem wiążą się one z czasem zwracanym przez nasze funkcje następująco:&lt;br /&gt;
:&amp;lt;tt&amp;gt;n = np.arange(0,len(t),1)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zatem kod rekonstruujący może być np. taki:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
def f1(dt):&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co dt	'''&lt;br /&gt;
	t = np.arange(0,2,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*t)+np.sin(2*np.pi*3*t+np.pi/5)#np.abs(t)#&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
dt = 0.1	&lt;br /&gt;
Fs = 1.0/dt&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=1,T=2.5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2,t) = sin(f=3,T=2.5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s = s1 + s2&lt;br /&gt;
S = FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
N = len(t)&lt;br /&gt;
&lt;br /&gt;
s_ifft = FFT.ifft(S)&lt;br /&gt;
&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
py.plot(t,s_ifft,'bo',markersize = 3 )&lt;br /&gt;
py.plot(t,(s_rekonstrukcja),'gx',markersize = 8)&lt;br /&gt;
py.plot(t,s,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rekonstrukcja na dłuższym odcinku czasu:=====&lt;br /&gt;
Korzystając z wyników poprzedniego polecenia proszę porównać wykres funkcji zadanych wzorami dla odcinak czasu o długości 5s i rekonstrukcję sygnału o długości 5s otrzymanego ze współczynników Fouriera obliczonych dla 2,5s  odcinak czasu.&lt;br /&gt;
* Na jakim odcinku czasu sygnały są zgodne?&lt;br /&gt;
* Co dzieje się na dalszym odcinku czasu?&lt;br /&gt;
 *&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
dalszy ciąg poprzedniego kodu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.figure(2)&lt;br /&gt;
(s1_d,t_d) = sin(f=1,T=5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2_d,t_d) = sin(f=3,T=5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s_d = s1_d + s2_d&lt;br /&gt;
&lt;br /&gt;
# rekonstrukcja bazująca na współczynnikach otzrzynmanych dla 2sek fragmentu sygnału&lt;br /&gt;
n=np.arange(0,len(t_d),1)&lt;br /&gt;
s_rekonstrukcja_dluga = np.zeros(len(t_d)) &lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja_dluga += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
py.plot(t_d,(s_rekonstrukcja_dluga),'gx-',markersize = 8)&lt;br /&gt;
py.plot(t_d,s_d,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przykład:=====&lt;br /&gt;
Oblicz współczynniki numerycznie korzystając z &amp;lt;tt&amp;gt;numpy.fft.fft&amp;lt;/tt&amp;gt;, porównaj z otrzymanymi analitycznie. Zrób wykresy funkcji i wartości bezwzględnej transformaty. Dla funkcji ''f'' z poprzedniego przykładu danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt; f(t)=|t| &amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-1, 1]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1,&lt;br /&gt;
&lt;br /&gt;
Obliczamy współczynniki i robimy wykres:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def f1():&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co 0.1	'''&lt;br /&gt;
	dt = 0.1	&lt;br /&gt;
	t = np.arange(-1,1,dt)&lt;br /&gt;
	s = np.abs(t)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
Fs = 10.0&lt;br /&gt;
(s,t) = f1() #generuję sygnał&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.stem(t,s)&lt;br /&gt;
&lt;br /&gt;
S=FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
F = FFT.fftfreq(len(S),Fs) # obliczam skalę częstości &lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(F,np.abs(S)/len(s)) # wykreślam widmo amplitudowe&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porównujemy wyniki z wynikami analitycznymi:&lt;br /&gt;
* &amp;lt;math&amp;gt; f(t) = |cos(t)|&amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-\pi, \pi]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Badanie rozdzielczości sygnałami testowymi=&lt;br /&gt;
* Poniżej będziemy zajmować się sygnałami rzeczywistymi, więc stosujemy funkcje z rodziny Real FFT:&lt;br /&gt;
https://docs.scipy.org/doc/numpy/reference/routines.fft.html&lt;br /&gt;
&lt;br /&gt;
* W poniższych przykładach jako widmo będziemy rozumieli widmo amplitudowe, tzn wartość bezwzględną ze współczynników szeregu Fouriera.&lt;br /&gt;
&lt;br /&gt;
==Widmo sinusoidy i delty==&lt;br /&gt;
Najprostsza sytuacja: Badamy współczynniki zwracane przez &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt; dla sinusoid o różnych częstościach. &lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
* Proszę kolejno wygenerować sinusoidy o długości 1s próbkowaną 32Hz i częstościach 1,10, 16  i  0 Hz. Dla tych sinusoid proszę policzyć transformaty Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wyglądają otrzymane wykresy?&lt;br /&gt;
** Czy coś szczególnego dzieje się dla częstości 0 i 16Hz? Czy w tych skrajnych przypadkach faza sygnału ma wpływ na wynik transformaty? &lt;br /&gt;
===Zadanie 3===&lt;br /&gt;
&lt;br /&gt;
* Proszę wygenerować sygnał delta położony w sekundzie 0,5 na odcinku czasu o długości 1s próbkowany 128Hz. Dla takiego sygnału proszę policzyć transformatę Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wygląda transformata funkcji delta? &lt;br /&gt;
** Jakie częstości w sobie zawiera?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# skrypt implemetujący polecenia w sekcji&lt;br /&gt;
# ==Badanie rozdzielczości sygnałami testowymi==&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
 &lt;br /&gt;
# do pytania 1&lt;br /&gt;
(s,t) = sin(f=2,T=1,Fs=10,phi=np.pi/2)&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
print( S)&lt;br /&gt;
# na wydruku należy zauważyć, że wsółczynniki są zespolone i parami sprzężone&lt;br /&gt;
&lt;br /&gt;
# do pytania 2&lt;br /&gt;
Fs = 30&lt;br /&gt;
for f in (0,1,10,16):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f=f,T=1,Fs=Fs,phi=np.pi/3) # f=0,10,30,64&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(t,s,'o-')&lt;br /&gt;
    py.title(str(f))&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F, np.abs(S),'o')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
# do pytania 3&lt;br /&gt;
py.figure()&lt;br /&gt;
&lt;br /&gt;
(s,t) = delta(t0=0.5, T=1  ,Fs = 128)&lt;br /&gt;
&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(t,s,'o')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(F, np.abs(S),'o')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Efekt nieciągłości funkcji ===&lt;br /&gt;
* Wygenerować sinusoidę o następujących własnościach: f=10 Hz, T=1, Fs=100 Hz, i fazie = 1;&lt;br /&gt;
* Przy pomocy subplotów proszę sporządzić rysunek zgodnie z ponższym opisem:&lt;br /&gt;
** subplot(2,2,1): przebieg sygnału w czasie &lt;br /&gt;
** subplot(2,2,2): moduł jego transformaty Fouriera (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości,&lt;br /&gt;
** subplot(2,2,3): Proszę wykreślić trzykrotnie periodycznie powielony oryginalny sygnał. Można go skonstruować wywołując funkcję: &amp;lt;tt&amp;gt;s_period = np.concatenate((s,s,s))&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** subplot(2,2,4): moduł transformaty Fouriera &amp;lt;tt&amp;gt;s_period&amp;lt;/tt&amp;gt; (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości&lt;br /&gt;
&lt;br /&gt;
* Powtórz te same kroki dla sinusa o częstości 10.3 Hz.&lt;br /&gt;
Pytania:&lt;br /&gt;
# Czym różnią się przedłużenia sinusoidy 10 Hz od sinusoidy 10.3 Hz? Proszę zwrócić uwagę na miejsca sklejania sygnałów.&lt;br /&gt;
 &amp;lt;!--Porównaj z wynikami otrzymanymi w zagadnieniu '''Rekonstrukcja na dłuższym odcinku czasu'''.--&amp;gt;&lt;br /&gt;
# Skąd bierze się widoczna różnica w widmie sinusoidy 10 Hz i 10.3 Hz? &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)    &lt;br /&gt;
    &lt;br /&gt;
for f in (10, 10.3):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f = f, T =1, Fs = 100, phi = 1)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,1)&lt;br /&gt;
    py.plot(t,s)&lt;br /&gt;
    py.title(f)&lt;br /&gt;
    py.subplot(2,2,2)&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(len(s),0.01)&lt;br /&gt;
    py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,3)&lt;br /&gt;
    s_period = np.concatenate((s,s,s))&lt;br /&gt;
    t_period = np.arange(0,3,0.01)&lt;br /&gt;
    py.plot(t_period,s_period)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,4)&lt;br /&gt;
    S_period = rfft(s_period)&lt;br /&gt;
    F_period = rfftfreq(len(s_period),0.01)&lt;br /&gt;
    py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Długość sygnału a rozdzielczość widma FFT ===&lt;br /&gt;
Z dotychczasowych rozważań o transformacie Fouriera ograniczonych w czasie sygnałów dyskretnych wynika, że w widmie reprezentowane są częstości od &amp;lt;math&amp;gt;-F_N&amp;lt;/math&amp;gt; do &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; to częstości Nyquista. Dostępnych binów częstości jest ''N'' - tyle samo ile obserwowanych punktów sygnału.&lt;br /&gt;
&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 100Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 1000Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 10 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 100 s sygnału próbkowanego 10Hz?&lt;br /&gt;
&lt;br /&gt;
Zatem zwiększenie długości sygnału w czasie poprawia &amp;quot;rozdzielczość&amp;quot;  reprezentacji częstotliwościowej sygnału. &lt;br /&gt;
&lt;br /&gt;
Załóżmy, że dysponujemy jedynie sekwencją ''N'' próbek pewnego sygnału. Rozważymy teraz jakie można przyjąć strategie przedłużania tego sygnału w celu zwiększenia gęstości binów częstotliwościowych i jakie te strategie mają konsekwencje.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przedłużenie przez periodyczną replikację =====&lt;br /&gt;
Rozważając poprzednie przykłady zauważyliśmy, że FFT &amp;quot;widzi&amp;quot; sygnał tak jakby to była nieskończona periodyczna replikacja fragmentu sygnału podanego na wejście. Zatem najbardziej naturalną formą przedłużenia sygnału może wydawać się postępowanie zgodnie z tym sposobem widzenia i dołożenie do sygnału kolejnych segmentów zawierających kopie analizowanego fragmentu sygnału. Zbadajmy empirycznie efekty takiego podejścia. &lt;br /&gt;
&lt;br /&gt;
* Proszę wytworzyć i wykreślić sinusoidy o częstościach 15 i 20 Hz, trwające 0.1s i próbkowane 100Hz. &lt;br /&gt;
** Ile próbek sygnału dostajemy?&lt;br /&gt;
** Proszę obliczyć transformatę Fouriera. Ile punktów w widmie amplitudowym otrzymujemy? Dla jakich cżęstości mamy biny?&lt;br /&gt;
** Proszę skonstruować sygnał będący złożeniem 10 kopii oryginalnego sygnału. &lt;br /&gt;
Jest to 10-krotnie dłuższy fragment sygnału, którego wersję nieskończoną opisują współczynniki obliczone przez transformatę Fouriera. Transformata policzona z takiego wydłużonego odcinak ma 10-krotnie więcej binów. W szczególności zawiera on bin 15Hz. Proszę porównać wykresy widma amplitudowego otrzymanego dla wersji krótkiej i przedłużonej sygnału. Czy wynik jest zaskakujący? Jak go można zrozumieć?&lt;br /&gt;
 * Sygnał przedłużony periodycznie nie zawiera żadnej dodatkowej informacji względem pojedynczego okresu!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
	&lt;br /&gt;
(s1,t) = sin(f = 15.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
(s2,t)= sin(f = 20.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
py.clf()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = FFT.fft(s)&lt;br /&gt;
F = FFT.fftfreq(len(s),0.01)&lt;br /&gt;
py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,s,s,s,s,s,s,s,s,s))&lt;br /&gt;
t_period = np.arange(0,len(s_period)/100.0,0.01)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = FFT.fft(s_period)&lt;br /&gt;
F_period = FFT.fftfreq(len(s_period),0.01)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przedłużanie sygnału ====&lt;br /&gt;
=====Przedłużanie przez cykliczne powielenie=====&lt;br /&gt;
Zobaczmy co się stanie jesli przedłużymy sygnał prze jego periodyczne przedłużenie. Efekty takiego przedłużania proszę zbadać przy użyciu poniższego kodu: &lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
&lt;br /&gt;
(s,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
n = 10&lt;br /&gt;
s_period = np.hstack(n*(s,))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/(len(s_period)))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Przedłużanie zerami=====&lt;br /&gt;
Metodą na zwiększanie ilości binów w transformacie Fouriera jest przedłużanie sygnału zerami (zero-padding). Jest to szczególny przypadek następującego podejścia: Nasz &amp;quot;prawdziwy&amp;quot; sygnał jest długi. Oglądamy go przez prostokątne okno, które ma wartość 1 na odcinku czasu, dla którego próbki mamy dostępne i 0 dla pozostałego czasu (więcej o różnych oknach będzie na kolejnych zajęciach). W efekcie możemy myśleć, że oglądany przez nas sygnał to efekt przemnożenia &amp;quot;prawdziwego&amp;quot; sygnału przez okno. Efekty takiego przedłużania proszę zbadać:&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 10Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 22Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału będącego suma dwóch powyższych&lt;br /&gt;
* Jak można zinterpretować wyniki tego eksperymentu w świetle [[Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#Twierdzenie_o_splocie|twierdzenia o splocie]]?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Fri Oct 21 15:51:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
n = 10&lt;br /&gt;
(s1,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
(s2,t)= sin(f = 22.0, T =0.1, Fs = Fs)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,z,z,z,z,z,z,z,z,z))&lt;br /&gt;
t_period = np.arange(0,n*T,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
&lt;br /&gt;
s_period = np.hstack((s,s,s,s,s,s,s,s,s,s))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s_period)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Co musimy z tego zapamiętać?=&lt;br /&gt;
* Sygnał może być reprezentowany w dziedzine czasu lub w dziedzinie częstości&lt;br /&gt;
* Jak wyglada widmo delty?&lt;br /&gt;
* Jak wygląda widmo sinusa, którego całkowita ilość okresów mieści się w badanym fragmencie, a jak jeśli niecałkowita?&lt;br /&gt;
* Jak długość sygnału wpływa na rozdzielczość widma?&lt;br /&gt;
* Jakie częstości występują w widmie sygnału periodyzowanego cyklicznie?&lt;br /&gt;
* Jaki efekt daje przedłużanie zerami?&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5974</id>
		<title>Ćwiczenia 2 2</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5974"/>
		<updated>2016-11-10T15:17:32Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Widmo sinusoidy i delty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Odwracalność transformaty=&lt;br /&gt;
Reprezentacja sygnałów w dziedzinie częstości jest dualna do reprezentacji  w dziedzinie czasu. To znaczy, że jedną reprezentację można przekształcić w drugą. Do przejścia z dziedziny czasu do częstości używaliśmy transformaty Fouriera (zaimplemantowanej w &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;). Przejścia z dziedziny częstości do czasu dokonujemy przy pomocy odwrotnej transformaty Fouriera (zaimplementowanej jako &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Mając (zespolone) współczynniki w dziedzinie częstości dla pewnego sygnału, możemy odzyskać jego przebieg czasowy.&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
* Proszę wygenerować sygnał &amp;lt;math&amp;gt;s(t) = \sin(2\pi t \cdot 1)+\sin\left(2 \pi  t \cdot 3+\frac{\pi}{5}\right) &amp;lt;/math&amp;gt; o długości 2,5 s próbkowany 100 Hz, obliczyć jego transformatę Fouriera za pomocą &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;, a następnie zrekonstruować przebieg czasowy za pomocą &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Sygnał oryginalny i zrekonstruowany wykreślić na jednym rysunku.  ''Uwaga: funkcja ifft zwraca wektor liczb zespolonych. Sprawdź jaka jest jegeo część urojona. Na wykresie rekonstrukcji przedstaw jego część rzeczywistą.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Dla porównania proszę zrekonstruować sygnał korzystając jawnie z postaci odwrotnej transformaty Fouriera danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;x(n)=\frac{1}{N} \sum_{k=0}^{N-1} S[k] \cdot \exp\left(2j \pi n\frac{ k}{N}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Zwróćmy uwagę, że ''n'' w powyższym wzorze to indeksy punktów czasu, zatem wiążą się one z czasem zwracanym przez nasze funkcje następująco:&lt;br /&gt;
:&amp;lt;tt&amp;gt;n = np.arange(0,len(t),1)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zatem kod rekonstruujący może być np. taki:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
def f1(dt):&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co dt	'''&lt;br /&gt;
	t = np.arange(0,2,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*t)+np.sin(2*np.pi*3*t+np.pi/5)#np.abs(t)#&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
dt = 0.1	&lt;br /&gt;
Fs = 1.0/dt&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=1,T=2.5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2,t) = sin(f=3,T=2.5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s = s1 + s2&lt;br /&gt;
S = FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
N = len(t)&lt;br /&gt;
&lt;br /&gt;
s_ifft = FFT.ifft(S)&lt;br /&gt;
&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
py.plot(t,s_ifft,'bo',markersize = 3 )&lt;br /&gt;
py.plot(t,(s_rekonstrukcja),'gx',markersize = 8)&lt;br /&gt;
py.plot(t,s,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rekonstrukcja na dłuższym odcinku czasu:=====&lt;br /&gt;
Korzystając z wyników poprzedniego polecenia proszę porównać wykres funkcji zadanych wzorami dla odcinak czasu o długości 5s i rekonstrukcję sygnału o długości 5s otrzymanego ze współczynników Fouriera obliczonych dla 2,5s  odcinak czasu.&lt;br /&gt;
* Na jakim odcinku czasu sygnały są zgodne?&lt;br /&gt;
* Co dzieje się na dalszym odcinku czasu?&lt;br /&gt;
 *&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
dalszy ciąg poprzedniego kodu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.figure(2)&lt;br /&gt;
(s1_d,t_d) = sin(f=1,T=5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2_d,t_d) = sin(f=3,T=5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s_d = s1_d + s2_d&lt;br /&gt;
&lt;br /&gt;
# rekonstrukcja bazująca na współczynnikach otzrzynmanych dla 2sek fragmentu sygnału&lt;br /&gt;
n=np.arange(0,len(t_d),1)&lt;br /&gt;
s_rekonstrukcja_dluga = np.zeros(len(t_d)) &lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja_dluga += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
py.plot(t_d,(s_rekonstrukcja_dluga),'gx-',markersize = 8)&lt;br /&gt;
py.plot(t_d,s_d,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przykład:=====&lt;br /&gt;
Oblicz współczynniki numerycznie korzystając z &amp;lt;tt&amp;gt;numpy.fft.fft&amp;lt;/tt&amp;gt;, porównaj z otrzymanymi analitycznie. Zrób wykresy funkcji i wartości bezwzględnej transformaty. Dla funkcji ''f'' z poprzedniego przykładu danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt; f(t)=|t| &amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-1, 1]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1,&lt;br /&gt;
&lt;br /&gt;
Obliczamy współczynniki i robimy wykres:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def f1():&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co 0.1	'''&lt;br /&gt;
	dt = 0.1	&lt;br /&gt;
	t = np.arange(-1,1,dt)&lt;br /&gt;
	s = np.abs(t)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
Fs = 10.0&lt;br /&gt;
(s,t) = f1() #generuję sygnał&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.stem(t,s)&lt;br /&gt;
&lt;br /&gt;
S=FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
F = FFT.fftfreq(len(S),Fs) # obliczam skalę częstości &lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(F,np.abs(S)/len(s)) # wykreślam widmo amplitudowe&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porównujemy wyniki z wynikami analitycznymi:&lt;br /&gt;
* &amp;lt;math&amp;gt; f(t) = |cos(t)|&amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-\pi, \pi]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Badanie rozdzielczości sygnałami testowymi=&lt;br /&gt;
* Poniżej będziemy zajmować się sygnałami rzeczywistymi, więc stosujemy funkcje z rodziny Real FFT:&lt;br /&gt;
https://docs.scipy.org/doc/numpy/reference/routines.fft.html&lt;br /&gt;
&lt;br /&gt;
* W poniższych przykładach jako widmo będziemy rozumieli widmo amplitudowe, tzn wartość bezwzględną ze współczynników szeregu Fouriera.&lt;br /&gt;
&lt;br /&gt;
==Widmo sinusoidy i delty==&lt;br /&gt;
Najprostsza sytuacja: Badamy współczynniki zwracane przez &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt; dla sinusoid o różnych częstościach. &lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
* Proszę kolejno wygenerować sinusoidy o długości 1s próbkowaną 32Hz i częstościach 1,10, 16  i  0 Hz. Dla tych sinusoid proszę policzyć transformaty Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wyglądają otrzymane wykresy?&lt;br /&gt;
** Czy coś szczególnego dzieje się dla częstości 0 i 16Hz? Czy w tych skrajnych przypadkach faza sygnału ma wpływ na wynik transformaty? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Proszę wygenerować sygnał delta położony w sekundzie 0,5 na odcinku czasu o długości 1s próbkowany 128Hz. Dla takiego sygnału proszę policzyć transformatę Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wygląda transformata funkcji delta? &lt;br /&gt;
** Jakie częstości w sobie zawiera?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# skrypt implemetujący polecenia w sekcji&lt;br /&gt;
# ==Badanie rozdzielczości sygnałami testowymi==&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
 &lt;br /&gt;
# do pytania 1&lt;br /&gt;
(s,t) = sin(f=2,T=1,Fs=10,phi=np.pi/2)&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
print( S)&lt;br /&gt;
# na wydruku należy zauważyć, że wsółczynniki są zespolone i parami sprzężone&lt;br /&gt;
&lt;br /&gt;
# do pytania 2&lt;br /&gt;
Fs = 30&lt;br /&gt;
for f in (0,1,10,16):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f=f,T=1,Fs=Fs,phi=np.pi/3) # f=0,10,30,64&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(t,s,'o-')&lt;br /&gt;
    py.title(str(f))&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F, np.abs(S),'o')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
# do pytania 3&lt;br /&gt;
py.figure()&lt;br /&gt;
&lt;br /&gt;
(s,t) = delta(t0=0.5, T=1  ,Fs = 128)&lt;br /&gt;
&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(t,s,'o')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(F, np.abs(S),'o')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Efekt nieciągłości funkcji ===&lt;br /&gt;
* Wygenerować sinusoidę o następujących własnościach: f=10 Hz, T=1, Fs=100 Hz, i fazie = 1;&lt;br /&gt;
* Przy pomocy subplotów proszę sporządzić rysunek zgodnie z ponższym opisem:&lt;br /&gt;
** subplot(2,2,1): przebieg sygnału w czasie &lt;br /&gt;
** subplot(2,2,2): moduł jego transformaty Fouriera (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości,&lt;br /&gt;
** subplot(2,2,3): Proszę wykreślić trzykrotnie periodycznie powielony oryginalny sygnał. Można go skonstruować wywołując funkcję: &amp;lt;tt&amp;gt;s_period = np.concatenate((s,s,s))&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** subplot(2,2,4): moduł transformaty Fouriera &amp;lt;tt&amp;gt;s_period&amp;lt;/tt&amp;gt; (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości&lt;br /&gt;
&lt;br /&gt;
* Powtórz te same kroki dla sinusa o częstości 10.3 Hz.&lt;br /&gt;
Pytania:&lt;br /&gt;
# Czym różnią się przedłużenia sinusoidy 10 Hz od sinusoidy 10.3 Hz? Proszę zwrócić uwagę na miejsca sklejania sygnałów.&lt;br /&gt;
 &amp;lt;!--Porównaj z wynikami otrzymanymi w zagadnieniu '''Rekonstrukcja na dłuższym odcinku czasu'''.--&amp;gt;&lt;br /&gt;
# Skąd bierze się widoczna różnica w widmie sinusoidy 10 Hz i 10.3 Hz? &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)    &lt;br /&gt;
    &lt;br /&gt;
for f in (10, 10.3):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f = f, T =1, Fs = 100, phi = 1)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,1)&lt;br /&gt;
    py.plot(t,s)&lt;br /&gt;
    py.title(f)&lt;br /&gt;
    py.subplot(2,2,2)&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(len(s),0.01)&lt;br /&gt;
    py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,3)&lt;br /&gt;
    s_period = np.concatenate((s,s,s))&lt;br /&gt;
    t_period = np.arange(0,3,0.01)&lt;br /&gt;
    py.plot(t_period,s_period)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,4)&lt;br /&gt;
    S_period = rfft(s_period)&lt;br /&gt;
    F_period = rfftfreq(len(s_period),0.01)&lt;br /&gt;
    py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Długość sygnału a rozdzielczość widma FFT ===&lt;br /&gt;
Z dotychczasowych rozważań o transformacie Fouriera ograniczonych w czasie sygnałów dyskretnych wynika, że w widmie reprezentowane są częstości od &amp;lt;math&amp;gt;-F_N&amp;lt;/math&amp;gt; do &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; to częstości Nyquista. Dostępnych binów częstości jest ''N'' - tyle samo ile obserwowanych punktów sygnału.&lt;br /&gt;
&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 100Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 1000Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 10 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 100 s sygnału próbkowanego 10Hz?&lt;br /&gt;
&lt;br /&gt;
Zatem zwiększenie długości sygnału w czasie poprawia &amp;quot;rozdzielczość&amp;quot;  reprezentacji częstotliwościowej sygnału. &lt;br /&gt;
&lt;br /&gt;
Załóżmy, że dysponujemy jedynie sekwencją ''N'' próbek pewnego sygnału. Rozważymy teraz jakie można przyjąć strategie przedłużania tego sygnału w celu zwiększenia gęstości binów częstotliwościowych i jakie te strategie mają konsekwencje.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przedłużenie przez periodyczną replikację =====&lt;br /&gt;
Rozważając poprzednie przykłady zauważyliśmy, że FFT &amp;quot;widzi&amp;quot; sygnał tak jakby to była nieskończona periodyczna replikacja fragmentu sygnału podanego na wejście. Zatem najbardziej naturalną formą przedłużenia sygnału może wydawać się postępowanie zgodnie z tym sposobem widzenia i dołożenie do sygnału kolejnych segmentów zawierających kopie analizowanego fragmentu sygnału. Zbadajmy empirycznie efekty takiego podejścia. &lt;br /&gt;
&lt;br /&gt;
* Proszę wytworzyć i wykreślić sinusoidy o częstościach 15 i 20 Hz, trwające 0.1s i próbkowane 100Hz. &lt;br /&gt;
** Ile próbek sygnału dostajemy?&lt;br /&gt;
** Proszę obliczyć transformatę Fouriera. Ile punktów w widmie amplitudowym otrzymujemy? Dla jakich cżęstości mamy biny?&lt;br /&gt;
** Proszę skonstruować sygnał będący złożeniem 10 kopii oryginalnego sygnału. &lt;br /&gt;
Jest to 10-krotnie dłuższy fragment sygnału, którego wersję nieskończoną opisują współczynniki obliczone przez transformatę Fouriera. Transformata policzona z takiego wydłużonego odcinak ma 10-krotnie więcej binów. W szczególności zawiera on bin 15Hz. Proszę porównać wykresy widma amplitudowego otrzymanego dla wersji krótkiej i przedłużonej sygnału. Czy wynik jest zaskakujący? Jak go można zrozumieć?&lt;br /&gt;
 * Sygnał przedłużony periodycznie nie zawiera żadnej dodatkowej informacji względem pojedynczego okresu!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
	&lt;br /&gt;
(s1,t) = sin(f = 15.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
(s2,t)= sin(f = 20.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
py.clf()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = FFT.fft(s)&lt;br /&gt;
F = FFT.fftfreq(len(s),0.01)&lt;br /&gt;
py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,s,s,s,s,s,s,s,s,s))&lt;br /&gt;
t_period = np.arange(0,len(s_period)/100.0,0.01)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = FFT.fft(s_period)&lt;br /&gt;
F_period = FFT.fftfreq(len(s_period),0.01)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przedłużanie sygnału ====&lt;br /&gt;
=====Przedłużanie przez cykliczne powielenie=====&lt;br /&gt;
Zobaczmy co się stanie jesli przedłużymy sygnał prze jego periodyczne przedłużenie. Efekty takiego przedłużania proszę zbadać przy użyciu poniższego kodu: &lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
&lt;br /&gt;
(s,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
n = 10&lt;br /&gt;
s_period = np.hstack(n*(s,))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/(len(s_period)))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Przedłużanie zerami=====&lt;br /&gt;
Metodą na zwiększanie ilości binów w transformacie Fouriera jest przedłużanie sygnału zerami (zero-padding). Jest to szczególny przypadek następującego podejścia: Nasz &amp;quot;prawdziwy&amp;quot; sygnał jest długi. Oglądamy go przez prostokątne okno, które ma wartość 1 na odcinku czasu, dla którego próbki mamy dostępne i 0 dla pozostałego czasu (więcej o różnych oknach będzie na kolejnych zajęciach). W efekcie możemy myśleć, że oglądany przez nas sygnał to efekt przemnożenia &amp;quot;prawdziwego&amp;quot; sygnału przez okno. Efekty takiego przedłużania proszę zbadać:&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 10Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 22Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału będącego suma dwóch powyższych&lt;br /&gt;
* Jak można zinterpretować wyniki tego eksperymentu w świetle [[Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#Twierdzenie_o_splocie|twierdzenia o splocie]]?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Fri Oct 21 15:51:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
n = 10&lt;br /&gt;
(s1,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
(s2,t)= sin(f = 22.0, T =0.1, Fs = Fs)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,z,z,z,z,z,z,z,z,z))&lt;br /&gt;
t_period = np.arange(0,n*T,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
&lt;br /&gt;
s_period = np.hstack((s,s,s,s,s,s,s,s,s,s))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s_period)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Co musimy z tego zapamiętać?=&lt;br /&gt;
* Sygnał może być reprezentowany w dziedzine czasu lub w dziedzinie częstości&lt;br /&gt;
* Jak wyglada widmo delty?&lt;br /&gt;
* Jak wygląda widmo sinusa, którego całkowita ilość okresów mieści się w badanym fragmencie, a jak jeśli niecałkowita?&lt;br /&gt;
* Jak długość sygnału wpływa na rozdzielczość widma?&lt;br /&gt;
* Jakie częstości występują w widmie sygnału periodyzowanego cyklicznie?&lt;br /&gt;
* Jaki efekt daje przedłużanie zerami?&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5973</id>
		<title>Ćwiczenia 2 2</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_2_2&amp;diff=5973"/>
		<updated>2016-11-10T15:17:17Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Odwracalność transformaty */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Odwracalność transformaty=&lt;br /&gt;
Reprezentacja sygnałów w dziedzinie częstości jest dualna do reprezentacji  w dziedzinie czasu. To znaczy, że jedną reprezentację można przekształcić w drugą. Do przejścia z dziedziny czasu do częstości używaliśmy transformaty Fouriera (zaimplemantowanej w &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;). Przejścia z dziedziny częstości do czasu dokonujemy przy pomocy odwrotnej transformaty Fouriera (zaimplementowanej jako &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Mając (zespolone) współczynniki w dziedzinie częstości dla pewnego sygnału, możemy odzyskać jego przebieg czasowy.&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
* Proszę wygenerować sygnał &amp;lt;math&amp;gt;s(t) = \sin(2\pi t \cdot 1)+\sin\left(2 \pi  t \cdot 3+\frac{\pi}{5}\right) &amp;lt;/math&amp;gt; o długości 2,5 s próbkowany 100 Hz, obliczyć jego transformatę Fouriera za pomocą &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt;, a następnie zrekonstruować przebieg czasowy za pomocą &amp;lt;tt&amp;gt;ifft&amp;lt;/tt&amp;gt;. Sygnał oryginalny i zrekonstruowany wykreślić na jednym rysunku.  ''Uwaga: funkcja ifft zwraca wektor liczb zespolonych. Sprawdź jaka jest jegeo część urojona. Na wykresie rekonstrukcji przedstaw jego część rzeczywistą.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* Dla porównania proszę zrekonstruować sygnał korzystając jawnie z postaci odwrotnej transformaty Fouriera danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;x(n)=\frac{1}{N} \sum_{k=0}^{N-1} S[k] \cdot \exp\left(2j \pi n\frac{ k}{N}\right)&amp;lt;/math&amp;gt;&lt;br /&gt;
:Zwróćmy uwagę, że ''n'' w powyższym wzorze to indeksy punktów czasu, zatem wiążą się one z czasem zwracanym przez nasze funkcje następująco:&lt;br /&gt;
:&amp;lt;tt&amp;gt;n = np.arange(0,len(t),1)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
zatem kod rekonstruujący może być np. taki:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
def f1(dt):&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co dt	'''&lt;br /&gt;
	t = np.arange(0,2,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*t)+np.sin(2*np.pi*3*t+np.pi/5)#np.abs(t)#&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
dt = 0.1	&lt;br /&gt;
Fs = 1.0/dt&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=1,T=2.5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2,t) = sin(f=3,T=2.5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s = s1 + s2&lt;br /&gt;
S = FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
N = len(t)&lt;br /&gt;
&lt;br /&gt;
s_ifft = FFT.ifft(S)&lt;br /&gt;
&lt;br /&gt;
n = np.arange(0,len(t),1)&lt;br /&gt;
s_rekonstrukcja = np.zeros(len(t))&lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
&lt;br /&gt;
py.figure(1)&lt;br /&gt;
py.plot(t,s_ifft,'bo',markersize = 3 )&lt;br /&gt;
py.plot(t,(s_rekonstrukcja),'gx',markersize = 8)&lt;br /&gt;
py.plot(t,s,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Rekonstrukcja na dłuższym odcinku czasu:=====&lt;br /&gt;
Korzystając z wyników poprzedniego polecenia proszę porównać wykres funkcji zadanych wzorami dla odcinak czasu o długości 5s i rekonstrukcję sygnału o długości 5s otrzymanego ze współczynników Fouriera obliczonych dla 2,5s  odcinak czasu.&lt;br /&gt;
* Na jakim odcinku czasu sygnały są zgodne?&lt;br /&gt;
* Co dzieje się na dalszym odcinku czasu?&lt;br /&gt;
 *&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
dalszy ciąg poprzedniego kodu:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
py.figure(2)&lt;br /&gt;
(s1_d,t_d) = sin(f=1,T=5, Fs= 10, phi =0) #generuję sygnał&lt;br /&gt;
(s2_d,t_d) = sin(f=3,T=5, Fs= 10, phi =np.pi/5)&lt;br /&gt;
s_d = s1_d + s2_d&lt;br /&gt;
&lt;br /&gt;
# rekonstrukcja bazująca na współczynnikach otzrzynmanych dla 2sek fragmentu sygnału&lt;br /&gt;
n=np.arange(0,len(t_d),1)&lt;br /&gt;
s_rekonstrukcja_dluga = np.zeros(len(t_d)) &lt;br /&gt;
for k in range(0,N):&lt;br /&gt;
	s_rekonstrukcja_dluga += 1.0/N * S[k]*np.exp((2j*np.pi*n*k)/N)&lt;br /&gt;
py.plot(t_d,(s_rekonstrukcja_dluga),'gx-',markersize = 8)&lt;br /&gt;
py.plot(t_d,s_d,'r+-',markersize = 8)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przykład:=====&lt;br /&gt;
Oblicz współczynniki numerycznie korzystając z &amp;lt;tt&amp;gt;numpy.fft.fft&amp;lt;/tt&amp;gt;, porównaj z otrzymanymi analitycznie. Zrób wykresy funkcji i wartości bezwzględnej transformaty. Dla funkcji ''f'' z poprzedniego przykładu danej wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt; f(t)=|t| &amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-1, 1]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1,&lt;br /&gt;
&lt;br /&gt;
Obliczamy współczynniki i robimy wykres:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def f1():&lt;br /&gt;
	'''funkcja zwracająca sygnał moduł t na odcinku -1 1 próbkowanym co 0.1	'''&lt;br /&gt;
	dt = 0.1	&lt;br /&gt;
	t = np.arange(-1,1,dt)&lt;br /&gt;
	s = np.abs(t)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
# część testująca&lt;br /&gt;
Fs = 10.0&lt;br /&gt;
(s,t) = f1() #generuję sygnał&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.stem(t,s)&lt;br /&gt;
&lt;br /&gt;
S=FFT.fft(s) # obliczam transformatę sygnału s&lt;br /&gt;
F = FFT.fftfreq(len(S),Fs) # obliczam skalę częstości &lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(F,np.abs(S)/len(s)) # wykreślam widmo amplitudowe&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Porównujemy wyniki z wynikami analitycznymi:&lt;br /&gt;
* &amp;lt;math&amp;gt; f(t) = |cos(t)|&amp;lt;/math&amp;gt; określonej na odcinku &amp;lt;math&amp;gt;t \in [-\pi, \pi]&amp;lt;/math&amp;gt; próbkowanej z interwałem 0.1&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Badanie rozdzielczości sygnałami testowymi=&lt;br /&gt;
* Poniżej będziemy zajmować się sygnałami rzeczywistymi, więc stosujemy funkcje z rodziny Real FFT:&lt;br /&gt;
https://docs.scipy.org/doc/numpy/reference/routines.fft.html&lt;br /&gt;
&lt;br /&gt;
* W poniższych przykładach jako widmo będziemy rozumieli widmo amplitudowe, tzn wartość bezwzględną ze współczynników szeregu Fouriera.&lt;br /&gt;
&lt;br /&gt;
==Widmo sinusoidy i delty==&lt;br /&gt;
Najprostsza sytuacja: Badamy współczynniki zwracane przez &amp;lt;tt&amp;gt;fft&amp;lt;/tt&amp;gt; dla sinusoid o różnych częstościach. &lt;br /&gt;
&lt;br /&gt;
* Proszę kolejno wygenerować sinusoidy o długości 1s próbkowaną 32Hz i częstościach 1,10, 16  i  0 Hz. Dla tych sinusoid proszę policzyć transformaty Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wyglądają otrzymane wykresy?&lt;br /&gt;
** Czy coś szczególnego dzieje się dla częstości 0 i 16Hz? Czy w tych skrajnych przypadkach faza sygnału ma wpływ na wynik transformaty? &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Proszę wygenerować sygnał delta położony w sekundzie 0,5 na odcinku czasu o długości 1s próbkowany 128Hz. Dla takiego sygnału proszę policzyć transformatę Fouriera i wykreślić zarówno sygnały jak i wartość bezwzględne otrzymanych współczynników.&lt;br /&gt;
** Jak wygląda transformata funkcji delta? &lt;br /&gt;
** Jakie częstości w sobie zawiera?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# skrypt implemetujący polecenia w sekcji&lt;br /&gt;
# ==Badanie rozdzielczości sygnałami testowymi==&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
 &lt;br /&gt;
# do pytania 1&lt;br /&gt;
(s,t) = sin(f=2,T=1,Fs=10,phi=np.pi/2)&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
print( S)&lt;br /&gt;
# na wydruku należy zauważyć, że wsółczynniki są zespolone i parami sprzężone&lt;br /&gt;
&lt;br /&gt;
# do pytania 2&lt;br /&gt;
Fs = 30&lt;br /&gt;
for f in (0,1,10,16):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f=f,T=1,Fs=Fs,phi=np.pi/3) # f=0,10,30,64&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(t,s,'o-')&lt;br /&gt;
    py.title(str(f))&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F, np.abs(S),'o')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
# do pytania 3&lt;br /&gt;
py.figure()&lt;br /&gt;
&lt;br /&gt;
(s,t) = delta(t0=0.5, T=1  ,Fs = 128)&lt;br /&gt;
&lt;br /&gt;
S = rfft(s)&lt;br /&gt;
F = rfftfreq(s.size, 1/Fs)&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(t,s,'o')&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(F, np.abs(S),'o')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Efekt nieciągłości funkcji ===&lt;br /&gt;
* Wygenerować sinusoidę o następujących własnościach: f=10 Hz, T=1, Fs=100 Hz, i fazie = 1;&lt;br /&gt;
* Przy pomocy subplotów proszę sporządzić rysunek zgodnie z ponższym opisem:&lt;br /&gt;
** subplot(2,2,1): przebieg sygnału w czasie &lt;br /&gt;
** subplot(2,2,2): moduł jego transformaty Fouriera (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości,&lt;br /&gt;
** subplot(2,2,3): Proszę wykreślić trzykrotnie periodycznie powielony oryginalny sygnał. Można go skonstruować wywołując funkcję: &amp;lt;tt&amp;gt;s_period = np.concatenate((s,s,s))&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** subplot(2,2,4): moduł transformaty Fouriera &amp;lt;tt&amp;gt;s_period&amp;lt;/tt&amp;gt; (narysować za pomocą funkcji &amp;lt;tt&amp;gt;py.stem&amp;lt;/tt&amp;gt; wraz zprawidłową osią częstości&lt;br /&gt;
&lt;br /&gt;
* Powtórz te same kroki dla sinusa o częstości 10.3 Hz.&lt;br /&gt;
Pytania:&lt;br /&gt;
# Czym różnią się przedłużenia sinusoidy 10 Hz od sinusoidy 10.3 Hz? Proszę zwrócić uwagę na miejsca sklejania sygnałów.&lt;br /&gt;
 &amp;lt;!--Porównaj z wynikami otrzymanymi w zagadnieniu '''Rekonstrukcja na dłuższym odcinku czasu'''.--&amp;gt;&lt;br /&gt;
# Skąd bierze się widoczna różnica w widmie sinusoidy 10 Hz i 10.3 Hz? &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)    &lt;br /&gt;
    &lt;br /&gt;
for f in (10, 10.3):&lt;br /&gt;
    py.figure()&lt;br /&gt;
    (s,t) = sin(f = f, T =1, Fs = 100, phi = 1)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,1)&lt;br /&gt;
    py.plot(t,s)&lt;br /&gt;
    py.title(f)&lt;br /&gt;
    py.subplot(2,2,2)&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    F = rfftfreq(len(s),0.01)&lt;br /&gt;
    py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,3)&lt;br /&gt;
    s_period = np.concatenate((s,s,s))&lt;br /&gt;
    t_period = np.arange(0,3,0.01)&lt;br /&gt;
    py.plot(t_period,s_period)&lt;br /&gt;
    &lt;br /&gt;
    py.subplot(2,2,4)&lt;br /&gt;
    S_period = rfft(s_period)&lt;br /&gt;
    F_period = rfftfreq(len(s_period),0.01)&lt;br /&gt;
    py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Długość sygnału a rozdzielczość widma FFT ===&lt;br /&gt;
Z dotychczasowych rozważań o transformacie Fouriera ograniczonych w czasie sygnałów dyskretnych wynika, że w widmie reprezentowane są częstości od &amp;lt;math&amp;gt;-F_N&amp;lt;/math&amp;gt; do &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; gdzie &amp;lt;math&amp;gt;F_N&amp;lt;/math&amp;gt; to częstości Nyquista. Dostępnych binów częstości jest ''N'' - tyle samo ile obserwowanych punktów sygnału.&lt;br /&gt;
&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 100Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 1 s sygnału próbkowanego 1000Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 10 s sygnału próbkowanego 10Hz?&lt;br /&gt;
* jaki dostęp między binami częstotliwości mamy dla 100 s sygnału próbkowanego 10Hz?&lt;br /&gt;
&lt;br /&gt;
Zatem zwiększenie długości sygnału w czasie poprawia &amp;quot;rozdzielczość&amp;quot;  reprezentacji częstotliwościowej sygnału. &lt;br /&gt;
&lt;br /&gt;
Załóżmy, że dysponujemy jedynie sekwencją ''N'' próbek pewnego sygnału. Rozważymy teraz jakie można przyjąć strategie przedłużania tego sygnału w celu zwiększenia gęstości binów częstotliwościowych i jakie te strategie mają konsekwencje.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=====Przedłużenie przez periodyczną replikację =====&lt;br /&gt;
Rozważając poprzednie przykłady zauważyliśmy, że FFT &amp;quot;widzi&amp;quot; sygnał tak jakby to była nieskończona periodyczna replikacja fragmentu sygnału podanego na wejście. Zatem najbardziej naturalną formą przedłużenia sygnału może wydawać się postępowanie zgodnie z tym sposobem widzenia i dołożenie do sygnału kolejnych segmentów zawierających kopie analizowanego fragmentu sygnału. Zbadajmy empirycznie efekty takiego podejścia. &lt;br /&gt;
&lt;br /&gt;
* Proszę wytworzyć i wykreślić sinusoidy o częstościach 15 i 20 Hz, trwające 0.1s i próbkowane 100Hz. &lt;br /&gt;
** Ile próbek sygnału dostajemy?&lt;br /&gt;
** Proszę obliczyć transformatę Fouriera. Ile punktów w widmie amplitudowym otrzymujemy? Dla jakich cżęstości mamy biny?&lt;br /&gt;
** Proszę skonstruować sygnał będący złożeniem 10 kopii oryginalnego sygnału. &lt;br /&gt;
Jest to 10-krotnie dłuższy fragment sygnału, którego wersję nieskończoną opisują współczynniki obliczone przez transformatę Fouriera. Transformata policzona z takiego wydłużonego odcinak ma 10-krotnie więcej binów. W szczególności zawiera on bin 15Hz. Proszę porównać wykresy widma amplitudowego otrzymanego dla wersji krótkiej i przedłużonej sygnału. Czy wynik jest zaskakujący? Jak go można zrozumieć?&lt;br /&gt;
 * Sygnał przedłużony periodycznie nie zawiera żadnej dodatkowej informacji względem pojedynczego okresu!&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import numpy.fft as FFT&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
	&lt;br /&gt;
(s1,t) = sin(f = 15.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
(s2,t)= sin(f = 20.0, T =0.1, Fs = 100, phi = 0)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
py.clf()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = FFT.fft(s)&lt;br /&gt;
F = FFT.fftfreq(len(s),0.01)&lt;br /&gt;
py.stem(F,np.abs(S)/len(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,s,s,s,s,s,s,s,s,s))&lt;br /&gt;
t_period = np.arange(0,len(s_period)/100.0,0.01)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = FFT.fft(s_period)&lt;br /&gt;
F_period = FFT.fftfreq(len(s_period),0.01)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/len(S_period))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Przedłużanie sygnału ====&lt;br /&gt;
=====Przedłużanie przez cykliczne powielenie=====&lt;br /&gt;
Zobaczmy co się stanie jesli przedłużymy sygnał prze jego periodyczne przedłużenie. Efekty takiego przedłużania proszę zbadać przy użyciu poniższego kodu: &lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
&lt;br /&gt;
(s,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
n = 10&lt;br /&gt;
s_period = np.hstack(n*(s,))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period)/(len(s_period)))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Przedłużanie zerami=====&lt;br /&gt;
Metodą na zwiększanie ilości binów w transformacie Fouriera jest przedłużanie sygnału zerami (zero-padding). Jest to szczególny przypadek następującego podejścia: Nasz &amp;quot;prawdziwy&amp;quot; sygnał jest długi. Oglądamy go przez prostokątne okno, które ma wartość 1 na odcinku czasu, dla którego próbki mamy dostępne i 0 dla pozostałego czasu (więcej o różnych oknach będzie na kolejnych zajęciach). W efekcie możemy myśleć, że oglądany przez nas sygnał to efekt przemnożenia &amp;quot;prawdziwego&amp;quot; sygnału przez okno. Efekty takiego przedłużania proszę zbadać:&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 10Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału sinusoidalnego o dł. 0.1s i częstości 22Hz próbkowanego 100 Hz&lt;br /&gt;
* dla sygnału będącego suma dwóch powyższych&lt;br /&gt;
* Jak można zinterpretować wyniki tego eksperymentu w świetle [[Twierdzenia_o_splocie_i_o_próbkowaniu_(aliasing)#Twierdzenie_o_splocie|twierdzenia o splocie]]?&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Fri Oct 21 15:51:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft, rfftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)	&lt;br /&gt;
&lt;br /&gt;
Fs =100	&lt;br /&gt;
T =0.1&lt;br /&gt;
n = 10&lt;br /&gt;
(s1,t) = sin(f = 10.0, T=T, Fs=Fs)&lt;br /&gt;
(s2,t)= sin(f = 22.0, T =0.1, Fs = Fs)&lt;br /&gt;
s=s1+s2&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
s_period = np.concatenate((s,z,z,z,z,z,z,z,z,z))&lt;br /&gt;
t_period = np.arange(0,n*T,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.figure()&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
S = rfft(s)/len(s)&lt;br /&gt;
F = rfftfreq(len(s),1/Fs)&lt;br /&gt;
py.stem(F,np.abs(S))&lt;br /&gt;
&lt;br /&gt;
z= np.zeros(len(s))&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
&lt;br /&gt;
s_period = np.hstack((s,s,s,s,s,s,s,s,s,s))# n razy powtarzamy s&lt;br /&gt;
t_period = np.arange(0,T*n,1/Fs)&lt;br /&gt;
py.plot(t_period,s_period)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
S_period = rfft(s_period)/len(s_period)&lt;br /&gt;
F_period = rfftfreq(len(s_period),1/Fs)&lt;br /&gt;
py.stem(F_period,np.abs(S_period))&lt;br /&gt;
py.stem(F,np.abs(S),linefmt='r-', markerfmt='ro')&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Co musimy z tego zapamiętać?=&lt;br /&gt;
* Sygnał może być reprezentowany w dziedzine czasu lub w dziedzinie częstości&lt;br /&gt;
* Jak wyglada widmo delty?&lt;br /&gt;
* Jak wygląda widmo sinusa, którego całkowita ilość okresów mieści się w badanym fragmencie, a jak jeśli niecałkowita?&lt;br /&gt;
* Jak długość sygnału wpływa na rozdzielczość widma?&lt;br /&gt;
* Jakie częstości występują w widmie sygnału periodyzowanego cyklicznie?&lt;br /&gt;
* Jaki efekt daje przedłużanie zerami?&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_2&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5972</id>
		<title>Ćwiczenia 1.1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5972"/>
		<updated>2016-11-10T15:16:25Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Iloczyn skalarny jako miara podobieństwa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
=Sygnał jako wekotr=&lt;br /&gt;
&lt;br /&gt;
==Jak to rozumieć?==&lt;br /&gt;
W najprostszej wersji znanej ze szkoły wektory rozumiane są tak jak na tym rysunku:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Wektor by Zureks.svg|center|thumb 300px| Ilustracja wektora ]]&lt;br /&gt;
&lt;br /&gt;
Koncepcje wektora można uogólnić i rozumieć go jako uporządkowany ciąg liczb, czyli współrzędnych wektora:&lt;br /&gt;
&lt;br /&gt;
[[File:Plane Cartesian vector.png|thumb 300 px |center|Wektor na płaszczyźnie kartezjańskiej przedstawiający położenie punktu A o współrzędnych (2, 3).]]&lt;br /&gt;
&lt;br /&gt;
Łatwo sobie wyobrazić, że tą koncepcję można uogólnić na dowolną liczbę współrzędnych (wymiarów). Wtedy trudniej jest przedstawić go w postaci strzałki, ale możemy przedstawić go np. tak, że kolejne współrzędne rysyjemy jako punkty na dwuwymiarowej płaszczyźnie (nr współrzędnej, wartość współrzędnej):&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A = np.array([2,3])&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(A,'o')&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(A)&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
py.xlabel('Nr. próbki')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widać, że taka reprezentacja świetnie nadaje się do przedstawiania sygnałów dyskretnych (Sygnały ciągłe można rozumieć jako wektory w nieskończenie wymiarowej przestrzeni). &lt;br /&gt;
&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
Przedstaw wektor &amp;lt;tt&amp;gt;[0,0,1,1,1,0,0,0,1,1,1,0,0)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dodawanie sygnałów==&lt;br /&gt;
Wektory dodajemy sumując wartości odpowiadających sobie współrzędnych np.:&lt;br /&gt;
&lt;br /&gt;
(0,1) + (1,0) = (1,1)&lt;br /&gt;
&lt;br /&gt;
Tak samododajemy sygnały: punkt po punkcie.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
Proszę:&lt;br /&gt;
* dodać sygnały:  &lt;br /&gt;
** x1 = (1,2,2,1,3,2,1)&lt;br /&gt;
** x2 = (2,1,2,1,2,1,2)&lt;br /&gt;
* wypisać wynik i zilustrować za pomocą subplotów i  funkcji stem&lt;br /&gt;
&lt;br /&gt;
* wygenerowa dwa sygnały sin próbkowane 1000Hz, o czasie trwania 1s, i częstościach odpowiednio 10 i 20 Hz&lt;br /&gt;
* zilustruj oba sygnały i wynik ich dodawania&lt;br /&gt;
&lt;br /&gt;
==Mnożenie przez liczbę==&lt;br /&gt;
Mnożenie wektora przez liczbę (skalar) robimy mnożąc kazdą ze współrzędnych przez tą liczbę, np.: &lt;br /&gt;
: 5*(1, 2)  = (5, 10).&lt;br /&gt;
Analogicznie mnożenie sygnału przez liczbę polega na pomnożeniu wartości każdej próbki przez tę liczbę. &lt;br /&gt;
===Zadanie3===&lt;br /&gt;
* przedstaw przemnożenie sygnału &amp;lt;math&amp;gt;\sin(2 \pi 10 t)&amp;lt;/math&amp;gt; przez 5.&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny==&lt;br /&gt;
Iloczyn skalarny liczymy mnożąc przez sibie odpowiadające sobie współrzędne i dodając powstałe iloczyny:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| x1&lt;br /&gt;
| -2&lt;br /&gt;
| -2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| -2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| x2 &lt;br /&gt;
| -1&lt;br /&gt;
| -1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| *&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| 0&lt;br /&gt;
| x*y = 5&lt;br /&gt;
|}&lt;br /&gt;
===Zadanie 4===&lt;br /&gt;
* Proszę zaimplementować to obliczenie za pomocą mnożenia i sumowania w pętli, a następnie za pomocą &amp;lt;tt&amp;gt;np.dot&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny jako miara podobieństwa==&lt;br /&gt;
Przypomnijmy, że iloczyn skalarny można obliczyć tak:&lt;br /&gt;
: &amp;lt;math&amp;gt;x \cdot y  = |x| |y| \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
czyli:&lt;br /&gt;
: &amp;lt;math&amp;gt;\frac{x}{|x|} \cdot \frac{y}{|y|}  =  \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
Widać, że po znormalizowaniu wektorów iloczyn skalarny jest równy &amp;lt;math&amp;gt;\cos&amp;lt;/math&amp;gt; kąta pomiędzy wektorami. Gdy wektory są ortogonalne to jest 0, jeśli są równoległe to jest 1, w pozostałych przypadkach ma wartości pomiędzy -1, a 1 . Jest to miara podobieństwa między wektorami.&lt;br /&gt;
===Zadanie 5===&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2 2 0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = (-2 0 1 2 0 -1 -2 0 1 2)&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2  2  0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = ( 1 2 0 -1 -2  0  1  2 0 -1)&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5971</id>
		<title>Ćwiczenia 1.1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5971"/>
		<updated>2016-11-10T15:16:13Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Iloczyn skalarny */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
=Sygnał jako wekotr=&lt;br /&gt;
&lt;br /&gt;
==Jak to rozumieć?==&lt;br /&gt;
W najprostszej wersji znanej ze szkoły wektory rozumiane są tak jak na tym rysunku:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Wektor by Zureks.svg|center|thumb 300px| Ilustracja wektora ]]&lt;br /&gt;
&lt;br /&gt;
Koncepcje wektora można uogólnić i rozumieć go jako uporządkowany ciąg liczb, czyli współrzędnych wektora:&lt;br /&gt;
&lt;br /&gt;
[[File:Plane Cartesian vector.png|thumb 300 px |center|Wektor na płaszczyźnie kartezjańskiej przedstawiający położenie punktu A o współrzędnych (2, 3).]]&lt;br /&gt;
&lt;br /&gt;
Łatwo sobie wyobrazić, że tą koncepcję można uogólnić na dowolną liczbę współrzędnych (wymiarów). Wtedy trudniej jest przedstawić go w postaci strzałki, ale możemy przedstawić go np. tak, że kolejne współrzędne rysyjemy jako punkty na dwuwymiarowej płaszczyźnie (nr współrzędnej, wartość współrzędnej):&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A = np.array([2,3])&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(A,'o')&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(A)&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
py.xlabel('Nr. próbki')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widać, że taka reprezentacja świetnie nadaje się do przedstawiania sygnałów dyskretnych (Sygnały ciągłe można rozumieć jako wektory w nieskończenie wymiarowej przestrzeni). &lt;br /&gt;
&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
Przedstaw wektor &amp;lt;tt&amp;gt;[0,0,1,1,1,0,0,0,1,1,1,0,0)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dodawanie sygnałów==&lt;br /&gt;
Wektory dodajemy sumując wartości odpowiadających sobie współrzędnych np.:&lt;br /&gt;
&lt;br /&gt;
(0,1) + (1,0) = (1,1)&lt;br /&gt;
&lt;br /&gt;
Tak samododajemy sygnały: punkt po punkcie.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
Proszę:&lt;br /&gt;
* dodać sygnały:  &lt;br /&gt;
** x1 = (1,2,2,1,3,2,1)&lt;br /&gt;
** x2 = (2,1,2,1,2,1,2)&lt;br /&gt;
* wypisać wynik i zilustrować za pomocą subplotów i  funkcji stem&lt;br /&gt;
&lt;br /&gt;
* wygenerowa dwa sygnały sin próbkowane 1000Hz, o czasie trwania 1s, i częstościach odpowiednio 10 i 20 Hz&lt;br /&gt;
* zilustruj oba sygnały i wynik ich dodawania&lt;br /&gt;
&lt;br /&gt;
==Mnożenie przez liczbę==&lt;br /&gt;
Mnożenie wektora przez liczbę (skalar) robimy mnożąc kazdą ze współrzędnych przez tą liczbę, np.: &lt;br /&gt;
: 5*(1, 2)  = (5, 10).&lt;br /&gt;
Analogicznie mnożenie sygnału przez liczbę polega na pomnożeniu wartości każdej próbki przez tę liczbę. &lt;br /&gt;
===Zadanie3===&lt;br /&gt;
* przedstaw przemnożenie sygnału &amp;lt;math&amp;gt;\sin(2 \pi 10 t)&amp;lt;/math&amp;gt; przez 5.&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny==&lt;br /&gt;
Iloczyn skalarny liczymy mnożąc przez sibie odpowiadające sobie współrzędne i dodając powstałe iloczyny:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| x1&lt;br /&gt;
| -2&lt;br /&gt;
| -2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| -2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| x2 &lt;br /&gt;
| -1&lt;br /&gt;
| -1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| *&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| 0&lt;br /&gt;
| x*y = 5&lt;br /&gt;
|}&lt;br /&gt;
===Zadanie 4===&lt;br /&gt;
* Proszę zaimplementować to obliczenie za pomocą mnożenia i sumowania w pętli, a następnie za pomocą &amp;lt;tt&amp;gt;np.dot&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny jako miara podobieństwa==&lt;br /&gt;
Przypomnijmy, że iloczyn skalarny można obliczyć tak:&lt;br /&gt;
: &amp;lt;math&amp;gt;x \cdot y  = |x| |y| \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
czyli:&lt;br /&gt;
: &amp;lt;math&amp;gt;\frac{x}{|x|} \cdot \frac{y}{|y|}  =  \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
Widać, że po znormalizowaniu wektorów iloczyn skalarny jest równy &amp;lt;math&amp;gt;\cos&amp;lt;/math&amp;gt; kąta pomiędzy wektorami. Gdy wektory są ortogonalne to jest 0, jeśli są równoległe to jest 1, w pozostałych przypadkach ma wartości pomiędzy -1, a 1 . Jest to miara podobieństwa między wektorami.&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2 2 0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = (-2 0 1 2 0 -1 -2 0 1 2)&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2  2  0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = ( 1 2 0 -1 -2  0  1  2 0 -1)&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5970</id>
		<title>Ćwiczenia 1.1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5970"/>
		<updated>2016-11-10T15:15:54Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Mnożenie przez liczbę */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
=Sygnał jako wekotr=&lt;br /&gt;
&lt;br /&gt;
==Jak to rozumieć?==&lt;br /&gt;
W najprostszej wersji znanej ze szkoły wektory rozumiane są tak jak na tym rysunku:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Wektor by Zureks.svg|center|thumb 300px| Ilustracja wektora ]]&lt;br /&gt;
&lt;br /&gt;
Koncepcje wektora można uogólnić i rozumieć go jako uporządkowany ciąg liczb, czyli współrzędnych wektora:&lt;br /&gt;
&lt;br /&gt;
[[File:Plane Cartesian vector.png|thumb 300 px |center|Wektor na płaszczyźnie kartezjańskiej przedstawiający położenie punktu A o współrzędnych (2, 3).]]&lt;br /&gt;
&lt;br /&gt;
Łatwo sobie wyobrazić, że tą koncepcję można uogólnić na dowolną liczbę współrzędnych (wymiarów). Wtedy trudniej jest przedstawić go w postaci strzałki, ale możemy przedstawić go np. tak, że kolejne współrzędne rysyjemy jako punkty na dwuwymiarowej płaszczyźnie (nr współrzędnej, wartość współrzędnej):&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A = np.array([2,3])&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(A,'o')&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(A)&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
py.xlabel('Nr. próbki')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widać, że taka reprezentacja świetnie nadaje się do przedstawiania sygnałów dyskretnych (Sygnały ciągłe można rozumieć jako wektory w nieskończenie wymiarowej przestrzeni). &lt;br /&gt;
&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
Przedstaw wektor &amp;lt;tt&amp;gt;[0,0,1,1,1,0,0,0,1,1,1,0,0)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dodawanie sygnałów==&lt;br /&gt;
Wektory dodajemy sumując wartości odpowiadających sobie współrzędnych np.:&lt;br /&gt;
&lt;br /&gt;
(0,1) + (1,0) = (1,1)&lt;br /&gt;
&lt;br /&gt;
Tak samododajemy sygnały: punkt po punkcie.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
Proszę:&lt;br /&gt;
* dodać sygnały:  &lt;br /&gt;
** x1 = (1,2,2,1,3,2,1)&lt;br /&gt;
** x2 = (2,1,2,1,2,1,2)&lt;br /&gt;
* wypisać wynik i zilustrować za pomocą subplotów i  funkcji stem&lt;br /&gt;
&lt;br /&gt;
* wygenerowa dwa sygnały sin próbkowane 1000Hz, o czasie trwania 1s, i częstościach odpowiednio 10 i 20 Hz&lt;br /&gt;
* zilustruj oba sygnały i wynik ich dodawania&lt;br /&gt;
&lt;br /&gt;
==Mnożenie przez liczbę==&lt;br /&gt;
Mnożenie wektora przez liczbę (skalar) robimy mnożąc kazdą ze współrzędnych przez tą liczbę, np.: &lt;br /&gt;
: 5*(1, 2)  = (5, 10).&lt;br /&gt;
Analogicznie mnożenie sygnału przez liczbę polega na pomnożeniu wartości każdej próbki przez tę liczbę. &lt;br /&gt;
===Zadanie3===&lt;br /&gt;
* przedstaw przemnożenie sygnału &amp;lt;math&amp;gt;\sin(2 \pi 10 t)&amp;lt;/math&amp;gt; przez 5.&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny==&lt;br /&gt;
Iloczyn skalarny liczymy mnożąc przez sibie odpowiadające sobie współrzędne i dodając powstałe iloczyny:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| x1&lt;br /&gt;
| -2&lt;br /&gt;
| -2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| -2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| x2 &lt;br /&gt;
| -1&lt;br /&gt;
| -1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| *&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| 0&lt;br /&gt;
| x*y = 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Proszę zaimplementować to obliczenie za pomocą mnożenia i sumowania w pętli, a następnie za pomocą &amp;lt;tt&amp;gt;np.dot&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny jako miara podobieństwa==&lt;br /&gt;
Przypomnijmy, że iloczyn skalarny można obliczyć tak:&lt;br /&gt;
: &amp;lt;math&amp;gt;x \cdot y  = |x| |y| \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
czyli:&lt;br /&gt;
: &amp;lt;math&amp;gt;\frac{x}{|x|} \cdot \frac{y}{|y|}  =  \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
Widać, że po znormalizowaniu wektorów iloczyn skalarny jest równy &amp;lt;math&amp;gt;\cos&amp;lt;/math&amp;gt; kąta pomiędzy wektorami. Gdy wektory są ortogonalne to jest 0, jeśli są równoległe to jest 1, w pozostałych przypadkach ma wartości pomiędzy -1, a 1 . Jest to miara podobieństwa między wektorami.&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2 2 0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = (-2 0 1 2 0 -1 -2 0 1 2)&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2  2  0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = ( 1 2 0 -1 -2  0  1  2 0 -1)&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5969</id>
		<title>Ćwiczenia 1.1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5969"/>
		<updated>2016-11-10T15:15:31Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Dodawanie sygnałów */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
=Sygnał jako wekotr=&lt;br /&gt;
&lt;br /&gt;
==Jak to rozumieć?==&lt;br /&gt;
W najprostszej wersji znanej ze szkoły wektory rozumiane są tak jak na tym rysunku:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Wektor by Zureks.svg|center|thumb 300px| Ilustracja wektora ]]&lt;br /&gt;
&lt;br /&gt;
Koncepcje wektora można uogólnić i rozumieć go jako uporządkowany ciąg liczb, czyli współrzędnych wektora:&lt;br /&gt;
&lt;br /&gt;
[[File:Plane Cartesian vector.png|thumb 300 px |center|Wektor na płaszczyźnie kartezjańskiej przedstawiający położenie punktu A o współrzędnych (2, 3).]]&lt;br /&gt;
&lt;br /&gt;
Łatwo sobie wyobrazić, że tą koncepcję można uogólnić na dowolną liczbę współrzędnych (wymiarów). Wtedy trudniej jest przedstawić go w postaci strzałki, ale możemy przedstawić go np. tak, że kolejne współrzędne rysyjemy jako punkty na dwuwymiarowej płaszczyźnie (nr współrzędnej, wartość współrzędnej):&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A = np.array([2,3])&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(A,'o')&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(A)&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
py.xlabel('Nr. próbki')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widać, że taka reprezentacja świetnie nadaje się do przedstawiania sygnałów dyskretnych (Sygnały ciągłe można rozumieć jako wektory w nieskończenie wymiarowej przestrzeni). &lt;br /&gt;
&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
Przedstaw wektor &amp;lt;tt&amp;gt;[0,0,1,1,1,0,0,0,1,1,1,0,0)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dodawanie sygnałów==&lt;br /&gt;
Wektory dodajemy sumując wartości odpowiadających sobie współrzędnych np.:&lt;br /&gt;
&lt;br /&gt;
(0,1) + (1,0) = (1,1)&lt;br /&gt;
&lt;br /&gt;
Tak samododajemy sygnały: punkt po punkcie.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 2===&lt;br /&gt;
Proszę:&lt;br /&gt;
* dodać sygnały:  &lt;br /&gt;
** x1 = (1,2,2,1,3,2,1)&lt;br /&gt;
** x2 = (2,1,2,1,2,1,2)&lt;br /&gt;
* wypisać wynik i zilustrować za pomocą subplotów i  funkcji stem&lt;br /&gt;
&lt;br /&gt;
* wygenerowa dwa sygnały sin próbkowane 1000Hz, o czasie trwania 1s, i częstościach odpowiednio 10 i 20 Hz&lt;br /&gt;
* zilustruj oba sygnały i wynik ich dodawania&lt;br /&gt;
&lt;br /&gt;
==Mnożenie przez liczbę==&lt;br /&gt;
Mnożenie wektora przez liczbę (skalar) robimy mnożąc kazdą ze współrzędnych przez tą liczbę, np.: &lt;br /&gt;
: 5*(1, 2)  = (5, 10).&lt;br /&gt;
Analogicznie mnożenie sygnału przez liczbę polega na pomnożeniu wartości każdej próbki przez tę liczbę. &lt;br /&gt;
&lt;br /&gt;
* przedstaw przemnożenie sygnału &amp;lt;math&amp;gt;\sin(2 \pi 10 t)&amp;lt;/math&amp;gt; przez 5.&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny==&lt;br /&gt;
Iloczyn skalarny liczymy mnożąc przez sibie odpowiadające sobie współrzędne i dodając powstałe iloczyny:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| x1&lt;br /&gt;
| -2&lt;br /&gt;
| -2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| -2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| x2 &lt;br /&gt;
| -1&lt;br /&gt;
| -1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| *&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| 0&lt;br /&gt;
| x*y = 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Proszę zaimplementować to obliczenie za pomocą mnożenia i sumowania w pętli, a następnie za pomocą &amp;lt;tt&amp;gt;np.dot&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny jako miara podobieństwa==&lt;br /&gt;
Przypomnijmy, że iloczyn skalarny można obliczyć tak:&lt;br /&gt;
: &amp;lt;math&amp;gt;x \cdot y  = |x| |y| \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
czyli:&lt;br /&gt;
: &amp;lt;math&amp;gt;\frac{x}{|x|} \cdot \frac{y}{|y|}  =  \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
Widać, że po znormalizowaniu wektorów iloczyn skalarny jest równy &amp;lt;math&amp;gt;\cos&amp;lt;/math&amp;gt; kąta pomiędzy wektorami. Gdy wektory są ortogonalne to jest 0, jeśli są równoległe to jest 1, w pozostałych przypadkach ma wartości pomiędzy -1, a 1 . Jest to miara podobieństwa między wektorami.&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2 2 0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = (-2 0 1 2 0 -1 -2 0 1 2)&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2  2  0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = ( 1 2 0 -1 -2  0  1  2 0 -1)&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5968</id>
		<title>Ćwiczenia 1.1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1.1&amp;diff=5968"/>
		<updated>2016-11-10T15:15:04Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Polecenie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
=Sygnał jako wekotr=&lt;br /&gt;
&lt;br /&gt;
==Jak to rozumieć?==&lt;br /&gt;
W najprostszej wersji znanej ze szkoły wektory rozumiane są tak jak na tym rysunku:&lt;br /&gt;
&lt;br /&gt;
[[Plik:Wektor by Zureks.svg|center|thumb 300px| Ilustracja wektora ]]&lt;br /&gt;
&lt;br /&gt;
Koncepcje wektora można uogólnić i rozumieć go jako uporządkowany ciąg liczb, czyli współrzędnych wektora:&lt;br /&gt;
&lt;br /&gt;
[[File:Plane Cartesian vector.png|thumb 300 px |center|Wektor na płaszczyźnie kartezjańskiej przedstawiający położenie punktu A o współrzędnych (2, 3).]]&lt;br /&gt;
&lt;br /&gt;
Łatwo sobie wyobrazić, że tą koncepcję można uogólnić na dowolną liczbę współrzędnych (wymiarów). Wtedy trudniej jest przedstawić go w postaci strzałki, ale możemy przedstawić go np. tak, że kolejne współrzędne rysyjemy jako punkty na dwuwymiarowej płaszczyźnie (nr współrzędnej, wartość współrzędnej):&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
A = np.array([2,3])&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(A,'o')&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.stem(A)&lt;br /&gt;
py.xlim([-0.1, 1.1])&lt;br /&gt;
py.ylim([0,3.1])&lt;br /&gt;
py.ylabel('Wartość')&lt;br /&gt;
py.xlabel('Nr. próbki')&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Widać, że taka reprezentacja świetnie nadaje się do przedstawiania sygnałów dyskretnych (Sygnały ciągłe można rozumieć jako wektory w nieskończenie wymiarowej przestrzeni). &lt;br /&gt;
&lt;br /&gt;
===Zadanie 1===&lt;br /&gt;
Przedstaw wektor &amp;lt;tt&amp;gt;[0,0,1,1,1,0,0,0,1,1,1,0,0)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dodawanie sygnałów==&lt;br /&gt;
Wektory dodajemy sumując wartości odpowiadających sobie współrzędnych np.:&lt;br /&gt;
&lt;br /&gt;
(0,1) + (1,0) = (1,1)&lt;br /&gt;
&lt;br /&gt;
Tak samododajemy sygnały: punkt po punkcie.&lt;br /&gt;
&lt;br /&gt;
Proszę:&lt;br /&gt;
* dodać sygnały:  &lt;br /&gt;
** x1 = (1,2,2,1,3,2,1)&lt;br /&gt;
** x2 = (2,1,2,1,2,1,2)&lt;br /&gt;
* wypisać wynik i zilustrować za pomocą subplotów i  funkcji stem&lt;br /&gt;
&lt;br /&gt;
* wygenerowa dwa sygnały sin próbkowane 1000Hz, o czasie trwania 1s, i częstościach odpowiednio 10 i 20 Hz&lt;br /&gt;
* zilustruj oba sygnały i wynik ich dodawania&lt;br /&gt;
&lt;br /&gt;
==Mnożenie przez liczbę==&lt;br /&gt;
Mnożenie wektora przez liczbę (skalar) robimy mnożąc kazdą ze współrzędnych przez tą liczbę, np.: &lt;br /&gt;
: 5*(1, 2)  = (5, 10).&lt;br /&gt;
Analogicznie mnożenie sygnału przez liczbę polega na pomnożeniu wartości każdej próbki przez tę liczbę. &lt;br /&gt;
&lt;br /&gt;
* przedstaw przemnożenie sygnału &amp;lt;math&amp;gt;\sin(2 \pi 10 t)&amp;lt;/math&amp;gt; przez 5.&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny==&lt;br /&gt;
Iloczyn skalarny liczymy mnożąc przez sibie odpowiadające sobie współrzędne i dodając powstałe iloczyny:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| x1&lt;br /&gt;
| -2&lt;br /&gt;
| -2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| -2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| x2 &lt;br /&gt;
| -1&lt;br /&gt;
| -1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| *&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
| -1&lt;br /&gt;
| 0&lt;br /&gt;
| x*y = 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Proszę zaimplementować to obliczenie za pomocą mnożenia i sumowania w pętli, a następnie za pomocą &amp;lt;tt&amp;gt;np.dot&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iloczyn skalarny jako miara podobieństwa==&lt;br /&gt;
Przypomnijmy, że iloczyn skalarny można obliczyć tak:&lt;br /&gt;
: &amp;lt;math&amp;gt;x \cdot y  = |x| |y| \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
czyli:&lt;br /&gt;
: &amp;lt;math&amp;gt;\frac{x}{|x|} \cdot \frac{y}{|y|}  =  \cos( \phi) &amp;lt;/math&amp;gt;&lt;br /&gt;
Widać, że po znormalizowaniu wektorów iloczyn skalarny jest równy &amp;lt;math&amp;gt;\cos&amp;lt;/math&amp;gt; kąta pomiędzy wektorami. Gdy wektory są ortogonalne to jest 0, jeśli są równoległe to jest 1, w pozostałych przypadkach ma wartości pomiędzy -1, a 1 . Jest to miara podobieństwa między wektorami.&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2 2 0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = (-2 0 1 2 0 -1 -2 0 1 2)&lt;br /&gt;
&lt;br /&gt;
* Znormalizuj, oblicz iloczyny skalarne i zilustruj wektory:&lt;br /&gt;
** x1 = (-2 0 2  2  0 -2 -2 0 2 2)&lt;br /&gt;
** x2 = ( 1 2 0 -1 -2  0  1  2 0 -1)&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5967</id>
		<title>Ćwiczenia 1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5967"/>
		<updated>2016-11-10T15:14:37Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 4: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
==Narzędzia wykorzystywane na ćwiczeniach==&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
Python jest językiem programowania wysokiego poziomu, który w połączeniu z bibliotekami NumPy i SciPy do obliczeń naukowych pozwala na szybkie i wygodne programowanie lub analizowanie danych w sposób interaktywny. Przykłady prezentowane w ramach zajęć powinny uruchamiać się zarówno w wersji 2 jak i 3 języka Python, jednak zachęcamy Państwa, aby od początku uczyć się i korzystać z wersji 3 języka.&lt;br /&gt;
&lt;br /&gt;
Szczególnie przydatne na analizie sygnałów będą moduły:&lt;br /&gt;
*numpy&lt;br /&gt;
*scipy&lt;br /&gt;
*matplotlib&lt;br /&gt;
&lt;br /&gt;
Do reprezentowania sygnałów w programach będziemy stosować tablice numpy: &lt;br /&gt;
* &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; &lt;br /&gt;
Jest to zarówno efektywne jeśli chodzi o pamięć jak i o szybkość wykonywania operacji matematycznych. &lt;br /&gt;
&lt;br /&gt;
==== Dokumentacja modułu scipy.signal ====&lt;br /&gt;
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:&lt;br /&gt;
&lt;br /&gt;
https://docs.scipy.org/doc/scipy/reference/&lt;br /&gt;
&lt;br /&gt;
===Svarog===&lt;br /&gt;
Przydatnym narzędziem do analizy sygnałów, z którego będziemy korzystać na zajęciach, jest program SVAROG (pierwotnie skrót od Signal Viewer, Analyzer and Recorder On GPL). Program działa w środowisku Java, jest więc niezależny od systemu operacyjnego (Linux, Windows, OS X…). Svarog pozwala na wczytywanie i analizowanie sygnałów (nie tylko bioelektrycznych), zarówno przy użyciu prostych (FFT, spektrogram) jak i bardziej zaawansowanych (matching pursuit, ICA, DTF itd.) narzędzi. Dzięki współpracy z platformą OpenBCI, możliwa jest rejestracja sygnału (łącznie z metadanymi) bezpośrednio z poziomu graficznego interfejsu użytkownika.&lt;br /&gt;
&lt;br /&gt;
====Svarog: uruchamianie i konfiguracja====&lt;br /&gt;
Aktualną wersję programu Svarog można pobrać [http://www.fuw.edu.pl/~durka/svarog/ stąd]. Program nie wymaga instalacji. Po rozpakowaniu paczki do dowolnego katalogu należy uruchomić skrypt „run-svarog.sh” lub uruchomić bezpośrednio plik *.jar.&lt;br /&gt;
&lt;br /&gt;
W przypadku pracy na własnych komputerach, do prawidłowego uruchomienia pluginu do analizy sygnałów, z którego będziemy korzystać w dalszej części ćwiczeń, konieczne jest zainstalowanie środowiska Oracle Java SE w wersji 8, które można pobrać [http://www.oracle.com/technetwork/java/javase/downloads/index.html ze strony wydawcy]. Alternatywnie, użytkownicy systemu Ubuntu lub pokrewnych dystrybucji mogą zainstalować środowisko Java według instrukcji [http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html dostępnych na tej stronie].&lt;br /&gt;
&lt;br /&gt;
==Sygnały ciągłe i dyskretne ==&lt;br /&gt;
===Próbkowanie w czasie ===&lt;br /&gt;
W tym ćwiczeniu zilustrujemy pojęcia:&lt;br /&gt;
* częstość próbkowania&lt;br /&gt;
* częstość Nyquista&lt;br /&gt;
* aliasing&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1: Próbkowanie====&lt;br /&gt;
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. &lt;br /&gt;
*W komputerach nie mamy dostępu do sygnału ciągłego. &lt;br /&gt;
*Wartości sygnału znane są tylko w dyskretnych momentach czasu. &lt;br /&gt;
*Najczęściej stosujemy równe odstępy czasu &amp;lt;math&amp;gt;dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*Odwrotność tych okresów to częstość próbkowania &amp;lt;math&amp;gt;Fs = \frac{1}{dt}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Bardzo wygodnie jest myśleć o sygnałach jako o wektorach lub macierzach (rys. na tablicy)&lt;br /&gt;
*Do przechowywania sygnałów w pamięci używamy ndarray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy próbkując sygnał z częstością &amp;lt;math&amp;gt;Fs = 100&amp;lt;/math&amp;gt;[Hz] mogę odwzorować sygnał o  dowolnej częstości?&lt;br /&gt;
* wytwórz wektor t reprezentujący czas 1s próbkowany z częstością Fs&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
Fs =100&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t = np.arange(0,1,dt) # czas 'prawie ciągły'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wytwórz sygnał  s, sinus o częstości f =10Hz. Dla przypomnienia wyrażenie: &amp;lt;math&amp;gt; s(t) = \sin(2 \pi f t)&amp;lt;/math&amp;gt; możemy w pythonie zapisać:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
s = np.sin(2*np.pi*f*t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wykreśl ten sygnał za pomocą punktów i linii&lt;br /&gt;
* wykreśl sygnały o częstościach 20, 40, 50, 90 Hz&lt;br /&gt;
&lt;br /&gt;
====Efekt aliasingu====&lt;br /&gt;
Rzućmy okiem na przykład tego efektu: https://youtu.be/SFbINinFsxk&lt;br /&gt;
* koła obracają się z pewną częstością zgodnie z kierunkiem ruchu wskazówek zegara;&lt;br /&gt;
* na filmie widać, że w pewnych kierunek ten się zmienia, mimo, że samochód wciąż jedzie w tą samą stronę;&lt;br /&gt;
* możemy przyjąć umownie, że obrotom zgodnie z kierunkiem wskazówek zegara przypiszemy wartości dodatnie, a obrotom w kierunku przeciwnym wartości ujemne.&lt;br /&gt;
* Dlaczego tak się dzieje?&lt;br /&gt;
Analogiczne zjawisko przeanalizujemy dla symulowanych sygnałów okresowych. &lt;br /&gt;
Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu). &lt;br /&gt;
*Proszę wytworzyć wektor reprezentujący czas &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.&lt;br /&gt;
*Teraz proszę wygenerować dwie sinusoidy: jedną o częstości &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; a drugą o częstości &amp;lt;tt&amp;gt;9&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*Proszę [[TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach|wykreślić]] obie sinusoidy.&lt;br /&gt;
*Teraz proszę spróbkować czas i nasze &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się [[Programowanie_z_Pythonem/Sekwencje#Wycinki|wycinkami]]) &amp;lt;!-- [[TI/Sekwencje|Struktury danych — sekwencje|wycinkami]]. --&amp;gt;&lt;br /&gt;
*Na tle &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze  widoczne proponuję użyć markerów &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Proszę zaobserwować wzajemne położenie punktów. &lt;br /&gt;
*Czy można odróżnić sinusoidę o częstości &amp;amp;minus;1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? &lt;br /&gt;
*Jak można uogólnić tą obserwację?&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = -1 # częstość sygnału 1&lt;br /&gt;
f2 = 9 # częstość sygnału 2&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
s2 = np.sin(2*np.pi*f2*t) # prawie ciągły sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
T = 0.1 # okres próbkowania&lt;br /&gt;
Fs = 1/T # częstość próbkowania&lt;br /&gt;
FN = Fs/2 # częstość Nyquista&lt;br /&gt;
T_samp = t[0::100] # czas pobierania próbek&lt;br /&gt;
s1_samp = s1[0::100] # próbkowany sygnał o częstości f1&lt;br /&gt;
s2_samp = s2[0::100] # próbkowany sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s1, 'g')&lt;br /&gt;
py.plot(t, s2, 'b')&lt;br /&gt;
py.plot(T_samp, s1_samp, 'gx', markersize=10)&lt;br /&gt;
py.plot(T_samp, s2_samp, 'r+', markersize=10)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Błąd kwantyzacji ===&lt;br /&gt;
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter).&lt;br /&gt;
Charakteryzują się one określoną ilością bitów ''N'', za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych ''R'' jest dzielony na &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt; poziomów. Błąd kwantyzacji szacujemy jako nie większy niż &amp;lt;math&amp;gt; \frac{R}{2^{N+1}} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to &amp;amp;plusmn;200 &amp;amp;mu;V.&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2.&lt;br /&gt;
W tym celu proszę wykonać następujące kroki:&lt;br /&gt;
# wygenerować &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)&lt;br /&gt;
# spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)&lt;br /&gt;
# proszę skwantować spróbkowane wartości &lt;br /&gt;
#Proszę wykreślić na jednym rysunku &lt;br /&gt;
#* oryginalny sygnał &lt;br /&gt;
#* sygnał spróbkowany w czasie&lt;br /&gt;
#* sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji &amp;lt;tt&amp;gt;py.step&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{ Wyjaśnienie|title= wskazówka: Kwantowanie | text = &lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = 1 # częstość sygnału 1&lt;br /&gt;
&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
T_samp = t[0::100]&lt;br /&gt;
s1_samp = s1[0::100]&lt;br /&gt;
&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
ax = py.subplot(111)&lt;br /&gt;
py.plot(t,s1)&lt;br /&gt;
py.plot(T_samp,s1_samp,'ko',markersize = 5)&lt;br /&gt;
py.step(T_samp,s1_kwantowany,where = 'post')&lt;br /&gt;
&lt;br /&gt;
ax.set_xticks(T_samp)&lt;br /&gt;
poziomy = np.arange(-1+0.5*dy,1,dy)&lt;br /&gt;
ax.set_yticks(poziomy)&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i in xrange(0,8):&lt;br /&gt;
	py.text(1.02,poziomy[i],bin(i))&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały testowe==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generowanie sygnałów testowych ===&lt;br /&gt;
&lt;br /&gt;
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czętość próbkowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czas trwania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	amplituda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
=== Przykład sinus===&lt;br /&gt;
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie.&lt;br /&gt;
Poniższy kod implementuje i testuje funkcję &lt;br /&gt;
:&amp;lt;math&amp;gt; \sin(f,T,Fs,\phi) = \sin(2*\pi f t)&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;t \in \{0,T\}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
(s,t) = sin(f=10,Fs=1000)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przykład: eksport sygnału do pliku binarnego ===&lt;br /&gt;
*Przypominamy:&lt;br /&gt;
** dtype http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#arrays-dtypes-constructing&lt;br /&gt;
** open/close&lt;br /&gt;
** tofile&lt;br /&gt;
** fromfile&lt;br /&gt;
&lt;br /&gt;
* Poniższy kod ilustruje sposób zapisu dwóch funkcji sinus o częstościach 10 Hz i 21 Hz do pliku binarnego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
T = 5&lt;br /&gt;
Fs = 128&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10, T=T, Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=21, T=T, Fs=Fs)	&lt;br /&gt;
	&lt;br /&gt;
signal = np.zeros((T*Fs, 2), dtype='&amp;lt;f')&lt;br /&gt;
signal[:, 0] = s1&lt;br /&gt;
signal[:, 1] = s2&lt;br /&gt;
&lt;br /&gt;
# zapis sygnału binarnego:&lt;br /&gt;
f_out = open('test_signal1.bin', 'wb') # otwieramy plik do pisania binarnego: 'wb'&lt;br /&gt;
signal.tofile(f_out) # zrzucamy zawartość tablicy ''signal'' do pliku identyfikowanego przez ''f_out''&lt;br /&gt;
f_out.close() # zamykamy plik&lt;br /&gt;
&lt;br /&gt;
# czynność odwrotna - wczytanie sygnału binarnego&lt;br /&gt;
ch = 2 # liczba kanałów&lt;br /&gt;
fin = open('test_signal1.bin', 'rb') # otwieramy plik do czytania binarnego: 'rb'&lt;br /&gt;
s = np.fromfile(fin, dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''&lt;br /&gt;
                                 # wkładając do niej bity z pliku ''fin'' interpretowane zgodnie z ''dtype''&lt;br /&gt;
fin.close() # zamykamy plik&lt;br /&gt;
s = np.reshape(s,(len(s)/ch,ch)) # zmieniamy tablicę z jednowymiarowej na dwuwymiarową&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład: wczytanie sygnału do Svaroga ===&lt;br /&gt;
W celu wczytania zapisanego binarnie sygnału do programu Svarog, po wybraniu File -&amp;gt; Open signal, należy wprowadzić częstość próbkowania sygnału oraz liczbę kanałów. &lt;br /&gt;
&lt;br /&gt;
[[Plik:svarog_open_signal.png|center|800px|thumb|&amp;lt;figure id=&amp;quot;uid3&amp;quot; /&amp;gt;Wczytywanie sygnału w programie Svarog.]]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 2: Nieznany typ danych===&lt;br /&gt;
Posiadamy 3 kanałowy plik binarny z sygnałem EEG. Niestety zapomnieliśmy jaki jest typ zapisanych danych. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć, która z pośród wymienionych zmiennych dtype jest prawdziwa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; 'float32'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; '&amp;gt;H'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; 'uint64'&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li&amp;gt; 'float64'&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYRnVVQVhtdnJkWHM?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 3: Nieznana liczba kanałów===&lt;br /&gt;
Posiadamy n kanałowy plik binarny z sygnałem EKG, EEG i EMG, typ zmiennej to '&amp;lt;f'. Niestety zapomnieliśmy jaka jest liczba kanałów. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć liczbę kanałów. Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYVFpOV3A4ZllYUGc?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 4:===&lt;br /&gt;
Proszę stworzyć nową macierz z n+3 kanałami, zawierającą sygnały z dwóch poprzednich zadań. Następnie proszę zapisać macierz sygnałów do pliku binarnego i otworzyć w programie Svarog.&lt;br /&gt;
&lt;br /&gt;
=== Delta ===&lt;br /&gt;
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 5:===&lt;br /&gt;
Analogicznie do powyższych przykładów proszę zaimplementować i przetestować funkcje generujące:&lt;br /&gt;
* funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie. &lt;br /&gt;
:&amp;lt;math&amp;gt; g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot  \cos(2 \pi f t + \phi); &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * pochodną funkcji Gaussa&lt;br /&gt;
&lt;br /&gt;
* połówkę funkcji Gaussa&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Co musimy z tego zapamiętać? ==&lt;br /&gt;
* sygnały dyskretne - dyskretne chwile czasu&lt;br /&gt;
* tworzenie sygnałów o konkretnej interpretacji fizycznej (częstość sygnału i częstość próbkowania)&lt;br /&gt;
* sygnały w pythonie przechowujemy w tablicach numpy&lt;br /&gt;
* zapis sygnałów do  pliku i wczytywanie sygnałów z plików binarnych&lt;br /&gt;
* wczytywanie sygnałów do SVAROGA&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5966</id>
		<title>Ćwiczenia 1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5966"/>
		<updated>2016-11-10T15:14:26Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
==Narzędzia wykorzystywane na ćwiczeniach==&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
Python jest językiem programowania wysokiego poziomu, który w połączeniu z bibliotekami NumPy i SciPy do obliczeń naukowych pozwala na szybkie i wygodne programowanie lub analizowanie danych w sposób interaktywny. Przykłady prezentowane w ramach zajęć powinny uruchamiać się zarówno w wersji 2 jak i 3 języka Python, jednak zachęcamy Państwa, aby od początku uczyć się i korzystać z wersji 3 języka.&lt;br /&gt;
&lt;br /&gt;
Szczególnie przydatne na analizie sygnałów będą moduły:&lt;br /&gt;
*numpy&lt;br /&gt;
*scipy&lt;br /&gt;
*matplotlib&lt;br /&gt;
&lt;br /&gt;
Do reprezentowania sygnałów w programach będziemy stosować tablice numpy: &lt;br /&gt;
* &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; &lt;br /&gt;
Jest to zarówno efektywne jeśli chodzi o pamięć jak i o szybkość wykonywania operacji matematycznych. &lt;br /&gt;
&lt;br /&gt;
==== Dokumentacja modułu scipy.signal ====&lt;br /&gt;
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:&lt;br /&gt;
&lt;br /&gt;
https://docs.scipy.org/doc/scipy/reference/&lt;br /&gt;
&lt;br /&gt;
===Svarog===&lt;br /&gt;
Przydatnym narzędziem do analizy sygnałów, z którego będziemy korzystać na zajęciach, jest program SVAROG (pierwotnie skrót od Signal Viewer, Analyzer and Recorder On GPL). Program działa w środowisku Java, jest więc niezależny od systemu operacyjnego (Linux, Windows, OS X…). Svarog pozwala na wczytywanie i analizowanie sygnałów (nie tylko bioelektrycznych), zarówno przy użyciu prostych (FFT, spektrogram) jak i bardziej zaawansowanych (matching pursuit, ICA, DTF itd.) narzędzi. Dzięki współpracy z platformą OpenBCI, możliwa jest rejestracja sygnału (łącznie z metadanymi) bezpośrednio z poziomu graficznego interfejsu użytkownika.&lt;br /&gt;
&lt;br /&gt;
====Svarog: uruchamianie i konfiguracja====&lt;br /&gt;
Aktualną wersję programu Svarog można pobrać [http://www.fuw.edu.pl/~durka/svarog/ stąd]. Program nie wymaga instalacji. Po rozpakowaniu paczki do dowolnego katalogu należy uruchomić skrypt „run-svarog.sh” lub uruchomić bezpośrednio plik *.jar.&lt;br /&gt;
&lt;br /&gt;
W przypadku pracy na własnych komputerach, do prawidłowego uruchomienia pluginu do analizy sygnałów, z którego będziemy korzystać w dalszej części ćwiczeń, konieczne jest zainstalowanie środowiska Oracle Java SE w wersji 8, które można pobrać [http://www.oracle.com/technetwork/java/javase/downloads/index.html ze strony wydawcy]. Alternatywnie, użytkownicy systemu Ubuntu lub pokrewnych dystrybucji mogą zainstalować środowisko Java według instrukcji [http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html dostępnych na tej stronie].&lt;br /&gt;
&lt;br /&gt;
==Sygnały ciągłe i dyskretne ==&lt;br /&gt;
===Próbkowanie w czasie ===&lt;br /&gt;
W tym ćwiczeniu zilustrujemy pojęcia:&lt;br /&gt;
* częstość próbkowania&lt;br /&gt;
* częstość Nyquista&lt;br /&gt;
* aliasing&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1: Próbkowanie====&lt;br /&gt;
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. &lt;br /&gt;
*W komputerach nie mamy dostępu do sygnału ciągłego. &lt;br /&gt;
*Wartości sygnału znane są tylko w dyskretnych momentach czasu. &lt;br /&gt;
*Najczęściej stosujemy równe odstępy czasu &amp;lt;math&amp;gt;dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*Odwrotność tych okresów to częstość próbkowania &amp;lt;math&amp;gt;Fs = \frac{1}{dt}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Bardzo wygodnie jest myśleć o sygnałach jako o wektorach lub macierzach (rys. na tablicy)&lt;br /&gt;
*Do przechowywania sygnałów w pamięci używamy ndarray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy próbkując sygnał z częstością &amp;lt;math&amp;gt;Fs = 100&amp;lt;/math&amp;gt;[Hz] mogę odwzorować sygnał o  dowolnej częstości?&lt;br /&gt;
* wytwórz wektor t reprezentujący czas 1s próbkowany z częstością Fs&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
Fs =100&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t = np.arange(0,1,dt) # czas 'prawie ciągły'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wytwórz sygnał  s, sinus o częstości f =10Hz. Dla przypomnienia wyrażenie: &amp;lt;math&amp;gt; s(t) = \sin(2 \pi f t)&amp;lt;/math&amp;gt; możemy w pythonie zapisać:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
s = np.sin(2*np.pi*f*t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wykreśl ten sygnał za pomocą punktów i linii&lt;br /&gt;
* wykreśl sygnały o częstościach 20, 40, 50, 90 Hz&lt;br /&gt;
&lt;br /&gt;
====Efekt aliasingu====&lt;br /&gt;
Rzućmy okiem na przykład tego efektu: https://youtu.be/SFbINinFsxk&lt;br /&gt;
* koła obracają się z pewną częstością zgodnie z kierunkiem ruchu wskazówek zegara;&lt;br /&gt;
* na filmie widać, że w pewnych kierunek ten się zmienia, mimo, że samochód wciąż jedzie w tą samą stronę;&lt;br /&gt;
* możemy przyjąć umownie, że obrotom zgodnie z kierunkiem wskazówek zegara przypiszemy wartości dodatnie, a obrotom w kierunku przeciwnym wartości ujemne.&lt;br /&gt;
* Dlaczego tak się dzieje?&lt;br /&gt;
Analogiczne zjawisko przeanalizujemy dla symulowanych sygnałów okresowych. &lt;br /&gt;
Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu). &lt;br /&gt;
*Proszę wytworzyć wektor reprezentujący czas &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.&lt;br /&gt;
*Teraz proszę wygenerować dwie sinusoidy: jedną o częstości &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; a drugą o częstości &amp;lt;tt&amp;gt;9&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*Proszę [[TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach|wykreślić]] obie sinusoidy.&lt;br /&gt;
*Teraz proszę spróbkować czas i nasze &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się [[Programowanie_z_Pythonem/Sekwencje#Wycinki|wycinkami]]) &amp;lt;!-- [[TI/Sekwencje|Struktury danych — sekwencje|wycinkami]]. --&amp;gt;&lt;br /&gt;
*Na tle &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze  widoczne proponuję użyć markerów &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Proszę zaobserwować wzajemne położenie punktów. &lt;br /&gt;
*Czy można odróżnić sinusoidę o częstości &amp;amp;minus;1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? &lt;br /&gt;
*Jak można uogólnić tą obserwację?&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = -1 # częstość sygnału 1&lt;br /&gt;
f2 = 9 # częstość sygnału 2&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
s2 = np.sin(2*np.pi*f2*t) # prawie ciągły sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
T = 0.1 # okres próbkowania&lt;br /&gt;
Fs = 1/T # częstość próbkowania&lt;br /&gt;
FN = Fs/2 # częstość Nyquista&lt;br /&gt;
T_samp = t[0::100] # czas pobierania próbek&lt;br /&gt;
s1_samp = s1[0::100] # próbkowany sygnał o częstości f1&lt;br /&gt;
s2_samp = s2[0::100] # próbkowany sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s1, 'g')&lt;br /&gt;
py.plot(t, s2, 'b')&lt;br /&gt;
py.plot(T_samp, s1_samp, 'gx', markersize=10)&lt;br /&gt;
py.plot(T_samp, s2_samp, 'r+', markersize=10)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Błąd kwantyzacji ===&lt;br /&gt;
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter).&lt;br /&gt;
Charakteryzują się one określoną ilością bitów ''N'', za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych ''R'' jest dzielony na &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt; poziomów. Błąd kwantyzacji szacujemy jako nie większy niż &amp;lt;math&amp;gt; \frac{R}{2^{N+1}} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to &amp;amp;plusmn;200 &amp;amp;mu;V.&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2.&lt;br /&gt;
W tym celu proszę wykonać następujące kroki:&lt;br /&gt;
# wygenerować &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)&lt;br /&gt;
# spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)&lt;br /&gt;
# proszę skwantować spróbkowane wartości &lt;br /&gt;
#Proszę wykreślić na jednym rysunku &lt;br /&gt;
#* oryginalny sygnał &lt;br /&gt;
#* sygnał spróbkowany w czasie&lt;br /&gt;
#* sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji &amp;lt;tt&amp;gt;py.step&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{ Wyjaśnienie|title= wskazówka: Kwantowanie | text = &lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = 1 # częstość sygnału 1&lt;br /&gt;
&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
T_samp = t[0::100]&lt;br /&gt;
s1_samp = s1[0::100]&lt;br /&gt;
&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
ax = py.subplot(111)&lt;br /&gt;
py.plot(t,s1)&lt;br /&gt;
py.plot(T_samp,s1_samp,'ko',markersize = 5)&lt;br /&gt;
py.step(T_samp,s1_kwantowany,where = 'post')&lt;br /&gt;
&lt;br /&gt;
ax.set_xticks(T_samp)&lt;br /&gt;
poziomy = np.arange(-1+0.5*dy,1,dy)&lt;br /&gt;
ax.set_yticks(poziomy)&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i in xrange(0,8):&lt;br /&gt;
	py.text(1.02,poziomy[i],bin(i))&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały testowe==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generowanie sygnałów testowych ===&lt;br /&gt;
&lt;br /&gt;
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czętość próbkowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czas trwania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	amplituda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
=== Przykład sinus===&lt;br /&gt;
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie.&lt;br /&gt;
Poniższy kod implementuje i testuje funkcję &lt;br /&gt;
:&amp;lt;math&amp;gt; \sin(f,T,Fs,\phi) = \sin(2*\pi f t)&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;t \in \{0,T\}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
(s,t) = sin(f=10,Fs=1000)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przykład: eksport sygnału do pliku binarnego ===&lt;br /&gt;
*Przypominamy:&lt;br /&gt;
** dtype http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#arrays-dtypes-constructing&lt;br /&gt;
** open/close&lt;br /&gt;
** tofile&lt;br /&gt;
** fromfile&lt;br /&gt;
&lt;br /&gt;
* Poniższy kod ilustruje sposób zapisu dwóch funkcji sinus o częstościach 10 Hz i 21 Hz do pliku binarnego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
T = 5&lt;br /&gt;
Fs = 128&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10, T=T, Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=21, T=T, Fs=Fs)	&lt;br /&gt;
	&lt;br /&gt;
signal = np.zeros((T*Fs, 2), dtype='&amp;lt;f')&lt;br /&gt;
signal[:, 0] = s1&lt;br /&gt;
signal[:, 1] = s2&lt;br /&gt;
&lt;br /&gt;
# zapis sygnału binarnego:&lt;br /&gt;
f_out = open('test_signal1.bin', 'wb') # otwieramy plik do pisania binarnego: 'wb'&lt;br /&gt;
signal.tofile(f_out) # zrzucamy zawartość tablicy ''signal'' do pliku identyfikowanego przez ''f_out''&lt;br /&gt;
f_out.close() # zamykamy plik&lt;br /&gt;
&lt;br /&gt;
# czynność odwrotna - wczytanie sygnału binarnego&lt;br /&gt;
ch = 2 # liczba kanałów&lt;br /&gt;
fin = open('test_signal1.bin', 'rb') # otwieramy plik do czytania binarnego: 'rb'&lt;br /&gt;
s = np.fromfile(fin, dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''&lt;br /&gt;
                                 # wkładając do niej bity z pliku ''fin'' interpretowane zgodnie z ''dtype''&lt;br /&gt;
fin.close() # zamykamy plik&lt;br /&gt;
s = np.reshape(s,(len(s)/ch,ch)) # zmieniamy tablicę z jednowymiarowej na dwuwymiarową&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład: wczytanie sygnału do Svaroga ===&lt;br /&gt;
W celu wczytania zapisanego binarnie sygnału do programu Svarog, po wybraniu File -&amp;gt; Open signal, należy wprowadzić częstość próbkowania sygnału oraz liczbę kanałów. &lt;br /&gt;
&lt;br /&gt;
[[Plik:svarog_open_signal.png|center|800px|thumb|&amp;lt;figure id=&amp;quot;uid3&amp;quot; /&amp;gt;Wczytywanie sygnału w programie Svarog.]]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 2: Nieznany typ danych===&lt;br /&gt;
Posiadamy 3 kanałowy plik binarny z sygnałem EEG. Niestety zapomnieliśmy jaki jest typ zapisanych danych. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć, która z pośród wymienionych zmiennych dtype jest prawdziwa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; 'float32'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; '&amp;gt;H'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; 'uint64'&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li&amp;gt; 'float64'&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYRnVVQVhtdnJkWHM?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 3: Nieznana liczba kanałów===&lt;br /&gt;
Posiadamy n kanałowy plik binarny z sygnałem EKG, EEG i EMG, typ zmiennej to '&amp;lt;f'. Niestety zapomnieliśmy jaka jest liczba kanałów. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć liczbę kanałów. Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYVFpOV3A4ZllYUGc?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 4:===&lt;br /&gt;
Proszę stworzyć nową macierz z n+3 kanałami, zawierającą sygnały z dwóch poprzednich zadań. Następnie proszę zapisać macierz sygnałów do pliku binarnego i otworzyć w programie Svarog.&lt;br /&gt;
&lt;br /&gt;
=== Delta ===&lt;br /&gt;
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 4:===&lt;br /&gt;
Analogicznie do powyższych przykładów proszę zaimplementować i przetestować funkcje generujące:&lt;br /&gt;
* funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie. &lt;br /&gt;
:&amp;lt;math&amp;gt; g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot  \cos(2 \pi f t + \phi); &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * pochodną funkcji Gaussa&lt;br /&gt;
&lt;br /&gt;
* połówkę funkcji Gaussa&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Co musimy z tego zapamiętać? ==&lt;br /&gt;
* sygnały dyskretne - dyskretne chwile czasu&lt;br /&gt;
* tworzenie sygnałów o konkretnej interpretacji fizycznej (częstość sygnału i częstość próbkowania)&lt;br /&gt;
* sygnały w pythonie przechowujemy w tablicach numpy&lt;br /&gt;
* zapis sygnałów do  pliku i wczytywanie sygnałów z plików binarnych&lt;br /&gt;
* wczytywanie sygnałów do SVAROGA&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5965</id>
		<title>Ćwiczenia 1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5965"/>
		<updated>2016-11-10T15:13:59Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
==Narzędzia wykorzystywane na ćwiczeniach==&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
Python jest językiem programowania wysokiego poziomu, który w połączeniu z bibliotekami NumPy i SciPy do obliczeń naukowych pozwala na szybkie i wygodne programowanie lub analizowanie danych w sposób interaktywny. Przykłady prezentowane w ramach zajęć powinny uruchamiać się zarówno w wersji 2 jak i 3 języka Python, jednak zachęcamy Państwa, aby od początku uczyć się i korzystać z wersji 3 języka.&lt;br /&gt;
&lt;br /&gt;
Szczególnie przydatne na analizie sygnałów będą moduły:&lt;br /&gt;
*numpy&lt;br /&gt;
*scipy&lt;br /&gt;
*matplotlib&lt;br /&gt;
&lt;br /&gt;
Do reprezentowania sygnałów w programach będziemy stosować tablice numpy: &lt;br /&gt;
* &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; &lt;br /&gt;
Jest to zarówno efektywne jeśli chodzi o pamięć jak i o szybkość wykonywania operacji matematycznych. &lt;br /&gt;
&lt;br /&gt;
==== Dokumentacja modułu scipy.signal ====&lt;br /&gt;
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:&lt;br /&gt;
&lt;br /&gt;
https://docs.scipy.org/doc/scipy/reference/&lt;br /&gt;
&lt;br /&gt;
===Svarog===&lt;br /&gt;
Przydatnym narzędziem do analizy sygnałów, z którego będziemy korzystać na zajęciach, jest program SVAROG (pierwotnie skrót od Signal Viewer, Analyzer and Recorder On GPL). Program działa w środowisku Java, jest więc niezależny od systemu operacyjnego (Linux, Windows, OS X…). Svarog pozwala na wczytywanie i analizowanie sygnałów (nie tylko bioelektrycznych), zarówno przy użyciu prostych (FFT, spektrogram) jak i bardziej zaawansowanych (matching pursuit, ICA, DTF itd.) narzędzi. Dzięki współpracy z platformą OpenBCI, możliwa jest rejestracja sygnału (łącznie z metadanymi) bezpośrednio z poziomu graficznego interfejsu użytkownika.&lt;br /&gt;
&lt;br /&gt;
====Svarog: uruchamianie i konfiguracja====&lt;br /&gt;
Aktualną wersję programu Svarog można pobrać [http://www.fuw.edu.pl/~durka/svarog/ stąd]. Program nie wymaga instalacji. Po rozpakowaniu paczki do dowolnego katalogu należy uruchomić skrypt „run-svarog.sh” lub uruchomić bezpośrednio plik *.jar.&lt;br /&gt;
&lt;br /&gt;
W przypadku pracy na własnych komputerach, do prawidłowego uruchomienia pluginu do analizy sygnałów, z którego będziemy korzystać w dalszej części ćwiczeń, konieczne jest zainstalowanie środowiska Oracle Java SE w wersji 8, które można pobrać [http://www.oracle.com/technetwork/java/javase/downloads/index.html ze strony wydawcy]. Alternatywnie, użytkownicy systemu Ubuntu lub pokrewnych dystrybucji mogą zainstalować środowisko Java według instrukcji [http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html dostępnych na tej stronie].&lt;br /&gt;
&lt;br /&gt;
==Sygnały ciągłe i dyskretne ==&lt;br /&gt;
===Próbkowanie w czasie ===&lt;br /&gt;
W tym ćwiczeniu zilustrujemy pojęcia:&lt;br /&gt;
* częstość próbkowania&lt;br /&gt;
* częstość Nyquista&lt;br /&gt;
* aliasing&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1: Próbkowanie====&lt;br /&gt;
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. &lt;br /&gt;
*W komputerach nie mamy dostępu do sygnału ciągłego. &lt;br /&gt;
*Wartości sygnału znane są tylko w dyskretnych momentach czasu. &lt;br /&gt;
*Najczęściej stosujemy równe odstępy czasu &amp;lt;math&amp;gt;dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*Odwrotność tych okresów to częstość próbkowania &amp;lt;math&amp;gt;Fs = \frac{1}{dt}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Bardzo wygodnie jest myśleć o sygnałach jako o wektorach lub macierzach (rys. na tablicy)&lt;br /&gt;
*Do przechowywania sygnałów w pamięci używamy ndarray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy próbkując sygnał z częstością &amp;lt;math&amp;gt;Fs = 100&amp;lt;/math&amp;gt;[Hz] mogę odwzorować sygnał o  dowolnej częstości?&lt;br /&gt;
* wytwórz wektor t reprezentujący czas 1s próbkowany z częstością Fs&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
Fs =100&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t = np.arange(0,1,dt) # czas 'prawie ciągły'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wytwórz sygnał  s, sinus o częstości f =10Hz. Dla przypomnienia wyrażenie: &amp;lt;math&amp;gt; s(t) = \sin(2 \pi f t)&amp;lt;/math&amp;gt; możemy w pythonie zapisać:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
s = np.sin(2*np.pi*f*t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wykreśl ten sygnał za pomocą punktów i linii&lt;br /&gt;
* wykreśl sygnały o częstościach 20, 40, 50, 90 Hz&lt;br /&gt;
&lt;br /&gt;
====Efekt aliasingu====&lt;br /&gt;
Rzućmy okiem na przykład tego efektu: https://youtu.be/SFbINinFsxk&lt;br /&gt;
* koła obracają się z pewną częstością zgodnie z kierunkiem ruchu wskazówek zegara;&lt;br /&gt;
* na filmie widać, że w pewnych kierunek ten się zmienia, mimo, że samochód wciąż jedzie w tą samą stronę;&lt;br /&gt;
* możemy przyjąć umownie, że obrotom zgodnie z kierunkiem wskazówek zegara przypiszemy wartości dodatnie, a obrotom w kierunku przeciwnym wartości ujemne.&lt;br /&gt;
* Dlaczego tak się dzieje?&lt;br /&gt;
Analogiczne zjawisko przeanalizujemy dla symulowanych sygnałów okresowych. &lt;br /&gt;
Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu). &lt;br /&gt;
*Proszę wytworzyć wektor reprezentujący czas &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.&lt;br /&gt;
*Teraz proszę wygenerować dwie sinusoidy: jedną o częstości &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; a drugą o częstości &amp;lt;tt&amp;gt;9&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*Proszę [[TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach|wykreślić]] obie sinusoidy.&lt;br /&gt;
*Teraz proszę spróbkować czas i nasze &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się [[Programowanie_z_Pythonem/Sekwencje#Wycinki|wycinkami]]) &amp;lt;!-- [[TI/Sekwencje|Struktury danych — sekwencje|wycinkami]]. --&amp;gt;&lt;br /&gt;
*Na tle &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze  widoczne proponuję użyć markerów &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Proszę zaobserwować wzajemne położenie punktów. &lt;br /&gt;
*Czy można odróżnić sinusoidę o częstości &amp;amp;minus;1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? &lt;br /&gt;
*Jak można uogólnić tą obserwację?&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = -1 # częstość sygnału 1&lt;br /&gt;
f2 = 9 # częstość sygnału 2&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
s2 = np.sin(2*np.pi*f2*t) # prawie ciągły sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
T = 0.1 # okres próbkowania&lt;br /&gt;
Fs = 1/T # częstość próbkowania&lt;br /&gt;
FN = Fs/2 # częstość Nyquista&lt;br /&gt;
T_samp = t[0::100] # czas pobierania próbek&lt;br /&gt;
s1_samp = s1[0::100] # próbkowany sygnał o częstości f1&lt;br /&gt;
s2_samp = s2[0::100] # próbkowany sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s1, 'g')&lt;br /&gt;
py.plot(t, s2, 'b')&lt;br /&gt;
py.plot(T_samp, s1_samp, 'gx', markersize=10)&lt;br /&gt;
py.plot(T_samp, s2_samp, 'r+', markersize=10)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Błąd kwantyzacji ===&lt;br /&gt;
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter).&lt;br /&gt;
Charakteryzują się one określoną ilością bitów ''N'', za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych ''R'' jest dzielony na &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt; poziomów. Błąd kwantyzacji szacujemy jako nie większy niż &amp;lt;math&amp;gt; \frac{R}{2^{N+1}} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to &amp;amp;plusmn;200 &amp;amp;mu;V.&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2.&lt;br /&gt;
W tym celu proszę wykonać następujące kroki:&lt;br /&gt;
# wygenerować &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)&lt;br /&gt;
# spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)&lt;br /&gt;
# proszę skwantować spróbkowane wartości &lt;br /&gt;
#Proszę wykreślić na jednym rysunku &lt;br /&gt;
#* oryginalny sygnał &lt;br /&gt;
#* sygnał spróbkowany w czasie&lt;br /&gt;
#* sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji &amp;lt;tt&amp;gt;py.step&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{ Wyjaśnienie|title= wskazówka: Kwantowanie | text = &lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = 1 # częstość sygnału 1&lt;br /&gt;
&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
T_samp = t[0::100]&lt;br /&gt;
s1_samp = s1[0::100]&lt;br /&gt;
&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
ax = py.subplot(111)&lt;br /&gt;
py.plot(t,s1)&lt;br /&gt;
py.plot(T_samp,s1_samp,'ko',markersize = 5)&lt;br /&gt;
py.step(T_samp,s1_kwantowany,where = 'post')&lt;br /&gt;
&lt;br /&gt;
ax.set_xticks(T_samp)&lt;br /&gt;
poziomy = np.arange(-1+0.5*dy,1,dy)&lt;br /&gt;
ax.set_yticks(poziomy)&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i in xrange(0,8):&lt;br /&gt;
	py.text(1.02,poziomy[i],bin(i))&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały testowe==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generowanie sygnałów testowych ===&lt;br /&gt;
&lt;br /&gt;
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czętość próbkowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czas trwania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	amplituda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
=== Przykład sinus===&lt;br /&gt;
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie.&lt;br /&gt;
Poniższy kod implementuje i testuje funkcję &lt;br /&gt;
:&amp;lt;math&amp;gt; \sin(f,T,Fs,\phi) = \sin(2*\pi f t)&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;t \in \{0,T\}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
(s,t) = sin(f=10,Fs=1000)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przykład: eksport sygnału do pliku binarnego ===&lt;br /&gt;
*Przypominamy:&lt;br /&gt;
** dtype http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#arrays-dtypes-constructing&lt;br /&gt;
** open/close&lt;br /&gt;
** tofile&lt;br /&gt;
** fromfile&lt;br /&gt;
&lt;br /&gt;
* Poniższy kod ilustruje sposób zapisu dwóch funkcji sinus o częstościach 10 Hz i 21 Hz do pliku binarnego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
T = 5&lt;br /&gt;
Fs = 128&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10, T=T, Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=21, T=T, Fs=Fs)	&lt;br /&gt;
	&lt;br /&gt;
signal = np.zeros((T*Fs, 2), dtype='&amp;lt;f')&lt;br /&gt;
signal[:, 0] = s1&lt;br /&gt;
signal[:, 1] = s2&lt;br /&gt;
&lt;br /&gt;
# zapis sygnału binarnego:&lt;br /&gt;
f_out = open('test_signal1.bin', 'wb') # otwieramy plik do pisania binarnego: 'wb'&lt;br /&gt;
signal.tofile(f_out) # zrzucamy zawartość tablicy ''signal'' do pliku identyfikowanego przez ''f_out''&lt;br /&gt;
f_out.close() # zamykamy plik&lt;br /&gt;
&lt;br /&gt;
# czynność odwrotna - wczytanie sygnału binarnego&lt;br /&gt;
ch = 2 # liczba kanałów&lt;br /&gt;
fin = open('test_signal1.bin', 'rb') # otwieramy plik do czytania binarnego: 'rb'&lt;br /&gt;
s = np.fromfile(fin, dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''&lt;br /&gt;
                                 # wkładając do niej bity z pliku ''fin'' interpretowane zgodnie z ''dtype''&lt;br /&gt;
fin.close() # zamykamy plik&lt;br /&gt;
s = np.reshape(s,(len(s)/ch,ch)) # zmieniamy tablicę z jednowymiarowej na dwuwymiarową&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład: wczytanie sygnału do Svaroga ===&lt;br /&gt;
W celu wczytania zapisanego binarnie sygnału do programu Svarog, po wybraniu File -&amp;gt; Open signal, należy wprowadzić częstość próbkowania sygnału oraz liczbę kanałów. &lt;br /&gt;
&lt;br /&gt;
[[Plik:svarog_open_signal.png|center|800px|thumb|&amp;lt;figure id=&amp;quot;uid3&amp;quot; /&amp;gt;Wczytywanie sygnału w programie Svarog.]]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 2: Nieznany typ danych===&lt;br /&gt;
Posiadamy 3 kanałowy plik binarny z sygnałem EEG. Niestety zapomnieliśmy jaki jest typ zapisanych danych. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć, która z pośród wymienionych zmiennych dtype jest prawdziwa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; 'float32'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; '&amp;gt;H'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; 'uint64'&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li&amp;gt; 'float64'&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYRnVVQVhtdnJkWHM?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 3: Nieznana liczba kanałów===&lt;br /&gt;
Posiadamy n kanałowy plik binarny z sygnałem EKG, EEG i EMG, typ zmiennej to '&amp;lt;f'. Niestety zapomnieliśmy jaka jest liczba kanałów. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć liczbę kanałów. Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYVFpOV3A4ZllYUGc?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Proszę stworzyć nową macierz z n+3 kanałami, zawierającą sygnały z dwóch poprzednich zadań. Następnie proszę zapisać macierz sygnałów do pliku binarnego i otworzyć w programie Svarog.&lt;br /&gt;
&lt;br /&gt;
=== Delta ===&lt;br /&gt;
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 4:===&lt;br /&gt;
Analogicznie do powyższych przykładów proszę zaimplementować i przetestować funkcje generujące:&lt;br /&gt;
* funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie. &lt;br /&gt;
:&amp;lt;math&amp;gt; g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot  \cos(2 \pi f t + \phi); &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * pochodną funkcji Gaussa&lt;br /&gt;
&lt;br /&gt;
* połówkę funkcji Gaussa&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Co musimy z tego zapamiętać? ==&lt;br /&gt;
* sygnały dyskretne - dyskretne chwile czasu&lt;br /&gt;
* tworzenie sygnałów o konkretnej interpretacji fizycznej (częstość sygnału i częstość próbkowania)&lt;br /&gt;
* sygnały w pythonie przechowujemy w tablicach numpy&lt;br /&gt;
* zapis sygnałów do  pliku i wczytywanie sygnałów z plików binarnych&lt;br /&gt;
* wczytywanie sygnałów do SVAROGA&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5964</id>
		<title>Ćwiczenia 1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5964"/>
		<updated>2016-11-10T15:13:49Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie: Nieznana liczba kanałów */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
==Narzędzia wykorzystywane na ćwiczeniach==&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
Python jest językiem programowania wysokiego poziomu, który w połączeniu z bibliotekami NumPy i SciPy do obliczeń naukowych pozwala na szybkie i wygodne programowanie lub analizowanie danych w sposób interaktywny. Przykłady prezentowane w ramach zajęć powinny uruchamiać się zarówno w wersji 2 jak i 3 języka Python, jednak zachęcamy Państwa, aby od początku uczyć się i korzystać z wersji 3 języka.&lt;br /&gt;
&lt;br /&gt;
Szczególnie przydatne na analizie sygnałów będą moduły:&lt;br /&gt;
*numpy&lt;br /&gt;
*scipy&lt;br /&gt;
*matplotlib&lt;br /&gt;
&lt;br /&gt;
Do reprezentowania sygnałów w programach będziemy stosować tablice numpy: &lt;br /&gt;
* &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; &lt;br /&gt;
Jest to zarówno efektywne jeśli chodzi o pamięć jak i o szybkość wykonywania operacji matematycznych. &lt;br /&gt;
&lt;br /&gt;
==== Dokumentacja modułu scipy.signal ====&lt;br /&gt;
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:&lt;br /&gt;
&lt;br /&gt;
https://docs.scipy.org/doc/scipy/reference/&lt;br /&gt;
&lt;br /&gt;
===Svarog===&lt;br /&gt;
Przydatnym narzędziem do analizy sygnałów, z którego będziemy korzystać na zajęciach, jest program SVAROG (pierwotnie skrót od Signal Viewer, Analyzer and Recorder On GPL). Program działa w środowisku Java, jest więc niezależny od systemu operacyjnego (Linux, Windows, OS X…). Svarog pozwala na wczytywanie i analizowanie sygnałów (nie tylko bioelektrycznych), zarówno przy użyciu prostych (FFT, spektrogram) jak i bardziej zaawansowanych (matching pursuit, ICA, DTF itd.) narzędzi. Dzięki współpracy z platformą OpenBCI, możliwa jest rejestracja sygnału (łącznie z metadanymi) bezpośrednio z poziomu graficznego interfejsu użytkownika.&lt;br /&gt;
&lt;br /&gt;
====Svarog: uruchamianie i konfiguracja====&lt;br /&gt;
Aktualną wersję programu Svarog można pobrać [http://www.fuw.edu.pl/~durka/svarog/ stąd]. Program nie wymaga instalacji. Po rozpakowaniu paczki do dowolnego katalogu należy uruchomić skrypt „run-svarog.sh” lub uruchomić bezpośrednio plik *.jar.&lt;br /&gt;
&lt;br /&gt;
W przypadku pracy na własnych komputerach, do prawidłowego uruchomienia pluginu do analizy sygnałów, z którego będziemy korzystać w dalszej części ćwiczeń, konieczne jest zainstalowanie środowiska Oracle Java SE w wersji 8, które można pobrać [http://www.oracle.com/technetwork/java/javase/downloads/index.html ze strony wydawcy]. Alternatywnie, użytkownicy systemu Ubuntu lub pokrewnych dystrybucji mogą zainstalować środowisko Java według instrukcji [http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html dostępnych na tej stronie].&lt;br /&gt;
&lt;br /&gt;
==Sygnały ciągłe i dyskretne ==&lt;br /&gt;
===Próbkowanie w czasie ===&lt;br /&gt;
W tym ćwiczeniu zilustrujemy pojęcia:&lt;br /&gt;
* częstość próbkowania&lt;br /&gt;
* częstość Nyquista&lt;br /&gt;
* aliasing&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1: Próbkowanie====&lt;br /&gt;
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. &lt;br /&gt;
*W komputerach nie mamy dostępu do sygnału ciągłego. &lt;br /&gt;
*Wartości sygnału znane są tylko w dyskretnych momentach czasu. &lt;br /&gt;
*Najczęściej stosujemy równe odstępy czasu &amp;lt;math&amp;gt;dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*Odwrotność tych okresów to częstość próbkowania &amp;lt;math&amp;gt;Fs = \frac{1}{dt}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Bardzo wygodnie jest myśleć o sygnałach jako o wektorach lub macierzach (rys. na tablicy)&lt;br /&gt;
*Do przechowywania sygnałów w pamięci używamy ndarray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy próbkując sygnał z częstością &amp;lt;math&amp;gt;Fs = 100&amp;lt;/math&amp;gt;[Hz] mogę odwzorować sygnał o  dowolnej częstości?&lt;br /&gt;
* wytwórz wektor t reprezentujący czas 1s próbkowany z częstością Fs&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
Fs =100&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t = np.arange(0,1,dt) # czas 'prawie ciągły'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wytwórz sygnał  s, sinus o częstości f =10Hz. Dla przypomnienia wyrażenie: &amp;lt;math&amp;gt; s(t) = \sin(2 \pi f t)&amp;lt;/math&amp;gt; możemy w pythonie zapisać:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
s = np.sin(2*np.pi*f*t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wykreśl ten sygnał za pomocą punktów i linii&lt;br /&gt;
* wykreśl sygnały o częstościach 20, 40, 50, 90 Hz&lt;br /&gt;
&lt;br /&gt;
====Efekt aliasingu====&lt;br /&gt;
Rzućmy okiem na przykład tego efektu: https://youtu.be/SFbINinFsxk&lt;br /&gt;
* koła obracają się z pewną częstością zgodnie z kierunkiem ruchu wskazówek zegara;&lt;br /&gt;
* na filmie widać, że w pewnych kierunek ten się zmienia, mimo, że samochód wciąż jedzie w tą samą stronę;&lt;br /&gt;
* możemy przyjąć umownie, że obrotom zgodnie z kierunkiem wskazówek zegara przypiszemy wartości dodatnie, a obrotom w kierunku przeciwnym wartości ujemne.&lt;br /&gt;
* Dlaczego tak się dzieje?&lt;br /&gt;
Analogiczne zjawisko przeanalizujemy dla symulowanych sygnałów okresowych. &lt;br /&gt;
Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu). &lt;br /&gt;
*Proszę wytworzyć wektor reprezentujący czas &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.&lt;br /&gt;
*Teraz proszę wygenerować dwie sinusoidy: jedną o częstości &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; a drugą o częstości &amp;lt;tt&amp;gt;9&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*Proszę [[TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach|wykreślić]] obie sinusoidy.&lt;br /&gt;
*Teraz proszę spróbkować czas i nasze &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się [[Programowanie_z_Pythonem/Sekwencje#Wycinki|wycinkami]]) &amp;lt;!-- [[TI/Sekwencje|Struktury danych — sekwencje|wycinkami]]. --&amp;gt;&lt;br /&gt;
*Na tle &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze  widoczne proponuję użyć markerów &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Proszę zaobserwować wzajemne położenie punktów. &lt;br /&gt;
*Czy można odróżnić sinusoidę o częstości &amp;amp;minus;1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? &lt;br /&gt;
*Jak można uogólnić tą obserwację?&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = -1 # częstość sygnału 1&lt;br /&gt;
f2 = 9 # częstość sygnału 2&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
s2 = np.sin(2*np.pi*f2*t) # prawie ciągły sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
T = 0.1 # okres próbkowania&lt;br /&gt;
Fs = 1/T # częstość próbkowania&lt;br /&gt;
FN = Fs/2 # częstość Nyquista&lt;br /&gt;
T_samp = t[0::100] # czas pobierania próbek&lt;br /&gt;
s1_samp = s1[0::100] # próbkowany sygnał o częstości f1&lt;br /&gt;
s2_samp = s2[0::100] # próbkowany sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s1, 'g')&lt;br /&gt;
py.plot(t, s2, 'b')&lt;br /&gt;
py.plot(T_samp, s1_samp, 'gx', markersize=10)&lt;br /&gt;
py.plot(T_samp, s2_samp, 'r+', markersize=10)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Błąd kwantyzacji ===&lt;br /&gt;
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter).&lt;br /&gt;
Charakteryzują się one określoną ilością bitów ''N'', za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych ''R'' jest dzielony na &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt; poziomów. Błąd kwantyzacji szacujemy jako nie większy niż &amp;lt;math&amp;gt; \frac{R}{2^{N+1}} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to &amp;amp;plusmn;200 &amp;amp;mu;V.&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2.&lt;br /&gt;
W tym celu proszę wykonać następujące kroki:&lt;br /&gt;
# wygenerować &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)&lt;br /&gt;
# spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)&lt;br /&gt;
# proszę skwantować spróbkowane wartości &lt;br /&gt;
#Proszę wykreślić na jednym rysunku &lt;br /&gt;
#* oryginalny sygnał &lt;br /&gt;
#* sygnał spróbkowany w czasie&lt;br /&gt;
#* sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji &amp;lt;tt&amp;gt;py.step&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{ Wyjaśnienie|title= wskazówka: Kwantowanie | text = &lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = 1 # częstość sygnału 1&lt;br /&gt;
&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
T_samp = t[0::100]&lt;br /&gt;
s1_samp = s1[0::100]&lt;br /&gt;
&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
ax = py.subplot(111)&lt;br /&gt;
py.plot(t,s1)&lt;br /&gt;
py.plot(T_samp,s1_samp,'ko',markersize = 5)&lt;br /&gt;
py.step(T_samp,s1_kwantowany,where = 'post')&lt;br /&gt;
&lt;br /&gt;
ax.set_xticks(T_samp)&lt;br /&gt;
poziomy = np.arange(-1+0.5*dy,1,dy)&lt;br /&gt;
ax.set_yticks(poziomy)&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i in xrange(0,8):&lt;br /&gt;
	py.text(1.02,poziomy[i],bin(i))&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały testowe==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generowanie sygnałów testowych ===&lt;br /&gt;
&lt;br /&gt;
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czętość próbkowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czas trwania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	amplituda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
=== Przykład sinus===&lt;br /&gt;
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie.&lt;br /&gt;
Poniższy kod implementuje i testuje funkcję &lt;br /&gt;
:&amp;lt;math&amp;gt; \sin(f,T,Fs,\phi) = \sin(2*\pi f t)&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;t \in \{0,T\}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
(s,t) = sin(f=10,Fs=1000)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przykład: eksport sygnału do pliku binarnego ===&lt;br /&gt;
*Przypominamy:&lt;br /&gt;
** dtype http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#arrays-dtypes-constructing&lt;br /&gt;
** open/close&lt;br /&gt;
** tofile&lt;br /&gt;
** fromfile&lt;br /&gt;
&lt;br /&gt;
* Poniższy kod ilustruje sposób zapisu dwóch funkcji sinus o częstościach 10 Hz i 21 Hz do pliku binarnego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
T = 5&lt;br /&gt;
Fs = 128&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10, T=T, Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=21, T=T, Fs=Fs)	&lt;br /&gt;
	&lt;br /&gt;
signal = np.zeros((T*Fs, 2), dtype='&amp;lt;f')&lt;br /&gt;
signal[:, 0] = s1&lt;br /&gt;
signal[:, 1] = s2&lt;br /&gt;
&lt;br /&gt;
# zapis sygnału binarnego:&lt;br /&gt;
f_out = open('test_signal1.bin', 'wb') # otwieramy plik do pisania binarnego: 'wb'&lt;br /&gt;
signal.tofile(f_out) # zrzucamy zawartość tablicy ''signal'' do pliku identyfikowanego przez ''f_out''&lt;br /&gt;
f_out.close() # zamykamy plik&lt;br /&gt;
&lt;br /&gt;
# czynność odwrotna - wczytanie sygnału binarnego&lt;br /&gt;
ch = 2 # liczba kanałów&lt;br /&gt;
fin = open('test_signal1.bin', 'rb') # otwieramy plik do czytania binarnego: 'rb'&lt;br /&gt;
s = np.fromfile(fin, dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''&lt;br /&gt;
                                 # wkładając do niej bity z pliku ''fin'' interpretowane zgodnie z ''dtype''&lt;br /&gt;
fin.close() # zamykamy plik&lt;br /&gt;
s = np.reshape(s,(len(s)/ch,ch)) # zmieniamy tablicę z jednowymiarowej na dwuwymiarową&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład: wczytanie sygnału do Svaroga ===&lt;br /&gt;
W celu wczytania zapisanego binarnie sygnału do programu Svarog, po wybraniu File -&amp;gt; Open signal, należy wprowadzić częstość próbkowania sygnału oraz liczbę kanałów. &lt;br /&gt;
&lt;br /&gt;
[[Plik:svarog_open_signal.png|center|800px|thumb|&amp;lt;figure id=&amp;quot;uid3&amp;quot; /&amp;gt;Wczytywanie sygnału w programie Svarog.]]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 2: Nieznany typ danych===&lt;br /&gt;
Posiadamy 3 kanałowy plik binarny z sygnałem EEG. Niestety zapomnieliśmy jaki jest typ zapisanych danych. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć, która z pośród wymienionych zmiennych dtype jest prawdziwa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; 'float32'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; '&amp;gt;H'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; 'uint64'&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li&amp;gt; 'float64'&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYRnVVQVhtdnJkWHM?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 3: Nieznana liczba kanałów===&lt;br /&gt;
Posiadamy n kanałowy plik binarny z sygnałem EKG, EEG i EMG, typ zmiennej to '&amp;lt;f'. Niestety zapomnieliśmy jaka jest liczba kanałów. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć liczbę kanałów. Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYVFpOV3A4ZllYUGc?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Proszę stworzyć nową macierz z n+3 kanałami, zawierającą sygnały z dwóch poprzednich zadań. Następnie proszę zapisać macierz sygnałów do pliku binarnego i otworzyć w programie Svarog.&lt;br /&gt;
&lt;br /&gt;
=== Delta ===&lt;br /&gt;
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Analogicznie do powyższych przykładów proszę zaimplementować i przetestować funkcje generujące:&lt;br /&gt;
* funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie. &lt;br /&gt;
:&amp;lt;math&amp;gt; g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot  \cos(2 \pi f t + \phi); &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * pochodną funkcji Gaussa&lt;br /&gt;
&lt;br /&gt;
* połówkę funkcji Gaussa&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Co musimy z tego zapamiętać? ==&lt;br /&gt;
* sygnały dyskretne - dyskretne chwile czasu&lt;br /&gt;
* tworzenie sygnałów o konkretnej interpretacji fizycznej (częstość sygnału i częstość próbkowania)&lt;br /&gt;
* sygnały w pythonie przechowujemy w tablicach numpy&lt;br /&gt;
* zapis sygnałów do  pliku i wczytywanie sygnałów z plików binarnych&lt;br /&gt;
* wczytywanie sygnałów do SVAROGA&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5963</id>
		<title>Ćwiczenia 1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5963"/>
		<updated>2016-11-10T15:13:36Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie: Nieznany typ danych */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
==Narzędzia wykorzystywane na ćwiczeniach==&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
Python jest językiem programowania wysokiego poziomu, który w połączeniu z bibliotekami NumPy i SciPy do obliczeń naukowych pozwala na szybkie i wygodne programowanie lub analizowanie danych w sposób interaktywny. Przykłady prezentowane w ramach zajęć powinny uruchamiać się zarówno w wersji 2 jak i 3 języka Python, jednak zachęcamy Państwa, aby od początku uczyć się i korzystać z wersji 3 języka.&lt;br /&gt;
&lt;br /&gt;
Szczególnie przydatne na analizie sygnałów będą moduły:&lt;br /&gt;
*numpy&lt;br /&gt;
*scipy&lt;br /&gt;
*matplotlib&lt;br /&gt;
&lt;br /&gt;
Do reprezentowania sygnałów w programach będziemy stosować tablice numpy: &lt;br /&gt;
* &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; &lt;br /&gt;
Jest to zarówno efektywne jeśli chodzi o pamięć jak i o szybkość wykonywania operacji matematycznych. &lt;br /&gt;
&lt;br /&gt;
==== Dokumentacja modułu scipy.signal ====&lt;br /&gt;
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:&lt;br /&gt;
&lt;br /&gt;
https://docs.scipy.org/doc/scipy/reference/&lt;br /&gt;
&lt;br /&gt;
===Svarog===&lt;br /&gt;
Przydatnym narzędziem do analizy sygnałów, z którego będziemy korzystać na zajęciach, jest program SVAROG (pierwotnie skrót od Signal Viewer, Analyzer and Recorder On GPL). Program działa w środowisku Java, jest więc niezależny od systemu operacyjnego (Linux, Windows, OS X…). Svarog pozwala na wczytywanie i analizowanie sygnałów (nie tylko bioelektrycznych), zarówno przy użyciu prostych (FFT, spektrogram) jak i bardziej zaawansowanych (matching pursuit, ICA, DTF itd.) narzędzi. Dzięki współpracy z platformą OpenBCI, możliwa jest rejestracja sygnału (łącznie z metadanymi) bezpośrednio z poziomu graficznego interfejsu użytkownika.&lt;br /&gt;
&lt;br /&gt;
====Svarog: uruchamianie i konfiguracja====&lt;br /&gt;
Aktualną wersję programu Svarog można pobrać [http://www.fuw.edu.pl/~durka/svarog/ stąd]. Program nie wymaga instalacji. Po rozpakowaniu paczki do dowolnego katalogu należy uruchomić skrypt „run-svarog.sh” lub uruchomić bezpośrednio plik *.jar.&lt;br /&gt;
&lt;br /&gt;
W przypadku pracy na własnych komputerach, do prawidłowego uruchomienia pluginu do analizy sygnałów, z którego będziemy korzystać w dalszej części ćwiczeń, konieczne jest zainstalowanie środowiska Oracle Java SE w wersji 8, które można pobrać [http://www.oracle.com/technetwork/java/javase/downloads/index.html ze strony wydawcy]. Alternatywnie, użytkownicy systemu Ubuntu lub pokrewnych dystrybucji mogą zainstalować środowisko Java według instrukcji [http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html dostępnych na tej stronie].&lt;br /&gt;
&lt;br /&gt;
==Sygnały ciągłe i dyskretne ==&lt;br /&gt;
===Próbkowanie w czasie ===&lt;br /&gt;
W tym ćwiczeniu zilustrujemy pojęcia:&lt;br /&gt;
* częstość próbkowania&lt;br /&gt;
* częstość Nyquista&lt;br /&gt;
* aliasing&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1: Próbkowanie====&lt;br /&gt;
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. &lt;br /&gt;
*W komputerach nie mamy dostępu do sygnału ciągłego. &lt;br /&gt;
*Wartości sygnału znane są tylko w dyskretnych momentach czasu. &lt;br /&gt;
*Najczęściej stosujemy równe odstępy czasu &amp;lt;math&amp;gt;dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*Odwrotność tych okresów to częstość próbkowania &amp;lt;math&amp;gt;Fs = \frac{1}{dt}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Bardzo wygodnie jest myśleć o sygnałach jako o wektorach lub macierzach (rys. na tablicy)&lt;br /&gt;
*Do przechowywania sygnałów w pamięci używamy ndarray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy próbkując sygnał z częstością &amp;lt;math&amp;gt;Fs = 100&amp;lt;/math&amp;gt;[Hz] mogę odwzorować sygnał o  dowolnej częstości?&lt;br /&gt;
* wytwórz wektor t reprezentujący czas 1s próbkowany z częstością Fs&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
Fs =100&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t = np.arange(0,1,dt) # czas 'prawie ciągły'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wytwórz sygnał  s, sinus o częstości f =10Hz. Dla przypomnienia wyrażenie: &amp;lt;math&amp;gt; s(t) = \sin(2 \pi f t)&amp;lt;/math&amp;gt; możemy w pythonie zapisać:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
s = np.sin(2*np.pi*f*t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wykreśl ten sygnał za pomocą punktów i linii&lt;br /&gt;
* wykreśl sygnały o częstościach 20, 40, 50, 90 Hz&lt;br /&gt;
&lt;br /&gt;
====Efekt aliasingu====&lt;br /&gt;
Rzućmy okiem na przykład tego efektu: https://youtu.be/SFbINinFsxk&lt;br /&gt;
* koła obracają się z pewną częstością zgodnie z kierunkiem ruchu wskazówek zegara;&lt;br /&gt;
* na filmie widać, że w pewnych kierunek ten się zmienia, mimo, że samochód wciąż jedzie w tą samą stronę;&lt;br /&gt;
* możemy przyjąć umownie, że obrotom zgodnie z kierunkiem wskazówek zegara przypiszemy wartości dodatnie, a obrotom w kierunku przeciwnym wartości ujemne.&lt;br /&gt;
* Dlaczego tak się dzieje?&lt;br /&gt;
Analogiczne zjawisko przeanalizujemy dla symulowanych sygnałów okresowych. &lt;br /&gt;
Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu). &lt;br /&gt;
*Proszę wytworzyć wektor reprezentujący czas &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.&lt;br /&gt;
*Teraz proszę wygenerować dwie sinusoidy: jedną o częstości &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; a drugą o częstości &amp;lt;tt&amp;gt;9&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*Proszę [[TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach|wykreślić]] obie sinusoidy.&lt;br /&gt;
*Teraz proszę spróbkować czas i nasze &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się [[Programowanie_z_Pythonem/Sekwencje#Wycinki|wycinkami]]) &amp;lt;!-- [[TI/Sekwencje|Struktury danych — sekwencje|wycinkami]]. --&amp;gt;&lt;br /&gt;
*Na tle &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze  widoczne proponuję użyć markerów &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Proszę zaobserwować wzajemne położenie punktów. &lt;br /&gt;
*Czy można odróżnić sinusoidę o częstości &amp;amp;minus;1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? &lt;br /&gt;
*Jak można uogólnić tą obserwację?&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = -1 # częstość sygnału 1&lt;br /&gt;
f2 = 9 # częstość sygnału 2&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
s2 = np.sin(2*np.pi*f2*t) # prawie ciągły sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
T = 0.1 # okres próbkowania&lt;br /&gt;
Fs = 1/T # częstość próbkowania&lt;br /&gt;
FN = Fs/2 # częstość Nyquista&lt;br /&gt;
T_samp = t[0::100] # czas pobierania próbek&lt;br /&gt;
s1_samp = s1[0::100] # próbkowany sygnał o częstości f1&lt;br /&gt;
s2_samp = s2[0::100] # próbkowany sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s1, 'g')&lt;br /&gt;
py.plot(t, s2, 'b')&lt;br /&gt;
py.plot(T_samp, s1_samp, 'gx', markersize=10)&lt;br /&gt;
py.plot(T_samp, s2_samp, 'r+', markersize=10)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Błąd kwantyzacji ===&lt;br /&gt;
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter).&lt;br /&gt;
Charakteryzują się one określoną ilością bitów ''N'', za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych ''R'' jest dzielony na &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt; poziomów. Błąd kwantyzacji szacujemy jako nie większy niż &amp;lt;math&amp;gt; \frac{R}{2^{N+1}} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to &amp;amp;plusmn;200 &amp;amp;mu;V.&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2.&lt;br /&gt;
W tym celu proszę wykonać następujące kroki:&lt;br /&gt;
# wygenerować &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)&lt;br /&gt;
# spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)&lt;br /&gt;
# proszę skwantować spróbkowane wartości &lt;br /&gt;
#Proszę wykreślić na jednym rysunku &lt;br /&gt;
#* oryginalny sygnał &lt;br /&gt;
#* sygnał spróbkowany w czasie&lt;br /&gt;
#* sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji &amp;lt;tt&amp;gt;py.step&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{ Wyjaśnienie|title= wskazówka: Kwantowanie | text = &lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = 1 # częstość sygnału 1&lt;br /&gt;
&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
T_samp = t[0::100]&lt;br /&gt;
s1_samp = s1[0::100]&lt;br /&gt;
&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
ax = py.subplot(111)&lt;br /&gt;
py.plot(t,s1)&lt;br /&gt;
py.plot(T_samp,s1_samp,'ko',markersize = 5)&lt;br /&gt;
py.step(T_samp,s1_kwantowany,where = 'post')&lt;br /&gt;
&lt;br /&gt;
ax.set_xticks(T_samp)&lt;br /&gt;
poziomy = np.arange(-1+0.5*dy,1,dy)&lt;br /&gt;
ax.set_yticks(poziomy)&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i in xrange(0,8):&lt;br /&gt;
	py.text(1.02,poziomy[i],bin(i))&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały testowe==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generowanie sygnałów testowych ===&lt;br /&gt;
&lt;br /&gt;
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czętość próbkowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czas trwania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	amplituda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
=== Przykład sinus===&lt;br /&gt;
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie.&lt;br /&gt;
Poniższy kod implementuje i testuje funkcję &lt;br /&gt;
:&amp;lt;math&amp;gt; \sin(f,T,Fs,\phi) = \sin(2*\pi f t)&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;t \in \{0,T\}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
(s,t) = sin(f=10,Fs=1000)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przykład: eksport sygnału do pliku binarnego ===&lt;br /&gt;
*Przypominamy:&lt;br /&gt;
** dtype http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#arrays-dtypes-constructing&lt;br /&gt;
** open/close&lt;br /&gt;
** tofile&lt;br /&gt;
** fromfile&lt;br /&gt;
&lt;br /&gt;
* Poniższy kod ilustruje sposób zapisu dwóch funkcji sinus o częstościach 10 Hz i 21 Hz do pliku binarnego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
T = 5&lt;br /&gt;
Fs = 128&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10, T=T, Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=21, T=T, Fs=Fs)	&lt;br /&gt;
	&lt;br /&gt;
signal = np.zeros((T*Fs, 2), dtype='&amp;lt;f')&lt;br /&gt;
signal[:, 0] = s1&lt;br /&gt;
signal[:, 1] = s2&lt;br /&gt;
&lt;br /&gt;
# zapis sygnału binarnego:&lt;br /&gt;
f_out = open('test_signal1.bin', 'wb') # otwieramy plik do pisania binarnego: 'wb'&lt;br /&gt;
signal.tofile(f_out) # zrzucamy zawartość tablicy ''signal'' do pliku identyfikowanego przez ''f_out''&lt;br /&gt;
f_out.close() # zamykamy plik&lt;br /&gt;
&lt;br /&gt;
# czynność odwrotna - wczytanie sygnału binarnego&lt;br /&gt;
ch = 2 # liczba kanałów&lt;br /&gt;
fin = open('test_signal1.bin', 'rb') # otwieramy plik do czytania binarnego: 'rb'&lt;br /&gt;
s = np.fromfile(fin, dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''&lt;br /&gt;
                                 # wkładając do niej bity z pliku ''fin'' interpretowane zgodnie z ''dtype''&lt;br /&gt;
fin.close() # zamykamy plik&lt;br /&gt;
s = np.reshape(s,(len(s)/ch,ch)) # zmieniamy tablicę z jednowymiarowej na dwuwymiarową&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład: wczytanie sygnału do Svaroga ===&lt;br /&gt;
W celu wczytania zapisanego binarnie sygnału do programu Svarog, po wybraniu File -&amp;gt; Open signal, należy wprowadzić częstość próbkowania sygnału oraz liczbę kanałów. &lt;br /&gt;
&lt;br /&gt;
[[Plik:svarog_open_signal.png|center|800px|thumb|&amp;lt;figure id=&amp;quot;uid3&amp;quot; /&amp;gt;Wczytywanie sygnału w programie Svarog.]]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie 2: Nieznany typ danych===&lt;br /&gt;
Posiadamy 3 kanałowy plik binarny z sygnałem EEG. Niestety zapomnieliśmy jaki jest typ zapisanych danych. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć, która z pośród wymienionych zmiennych dtype jest prawdziwa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; 'float32'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; '&amp;gt;H'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; 'uint64'&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li&amp;gt; 'float64'&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYRnVVQVhtdnJkWHM?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie: Nieznana liczba kanałów===&lt;br /&gt;
Posiadamy n kanałowy plik binarny z sygnałem EKG, EEG i EMG, typ zmiennej to '&amp;lt;f'. Niestety zapomnieliśmy jaka jest liczba kanałów. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć liczbę kanałów. Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYVFpOV3A4ZllYUGc?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Proszę stworzyć nową macierz z n+3 kanałami, zawierającą sygnały z dwóch poprzednich zadań. Następnie proszę zapisać macierz sygnałów do pliku binarnego i otworzyć w programie Svarog.&lt;br /&gt;
&lt;br /&gt;
=== Delta ===&lt;br /&gt;
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Analogicznie do powyższych przykładów proszę zaimplementować i przetestować funkcje generujące:&lt;br /&gt;
* funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie. &lt;br /&gt;
:&amp;lt;math&amp;gt; g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot  \cos(2 \pi f t + \phi); &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * pochodną funkcji Gaussa&lt;br /&gt;
&lt;br /&gt;
* połówkę funkcji Gaussa&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Co musimy z tego zapamiętać? ==&lt;br /&gt;
* sygnały dyskretne - dyskretne chwile czasu&lt;br /&gt;
* tworzenie sygnałów o konkretnej interpretacji fizycznej (częstość sygnału i częstość próbkowania)&lt;br /&gt;
* sygnały w pythonie przechowujemy w tablicach numpy&lt;br /&gt;
* zapis sygnałów do  pliku i wczytywanie sygnałów z plików binarnych&lt;br /&gt;
* wczytywanie sygnałów do SVAROGA&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5962</id>
		<title>Ćwiczenia 1</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=%C4%86wiczenia_1&amp;diff=5962"/>
		<updated>2016-11-10T15:13:12Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Próbkowanie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;br /&gt;
&lt;br /&gt;
==Narzędzia wykorzystywane na ćwiczeniach==&lt;br /&gt;
===Python===&lt;br /&gt;
&lt;br /&gt;
Python jest językiem programowania wysokiego poziomu, który w połączeniu z bibliotekami NumPy i SciPy do obliczeń naukowych pozwala na szybkie i wygodne programowanie lub analizowanie danych w sposób interaktywny. Przykłady prezentowane w ramach zajęć powinny uruchamiać się zarówno w wersji 2 jak i 3 języka Python, jednak zachęcamy Państwa, aby od początku uczyć się i korzystać z wersji 3 języka.&lt;br /&gt;
&lt;br /&gt;
Szczególnie przydatne na analizie sygnałów będą moduły:&lt;br /&gt;
*numpy&lt;br /&gt;
*scipy&lt;br /&gt;
*matplotlib&lt;br /&gt;
&lt;br /&gt;
Do reprezentowania sygnałów w programach będziemy stosować tablice numpy: &lt;br /&gt;
* &amp;lt;tt&amp;gt;ndarray&amp;lt;/tt&amp;gt; &lt;br /&gt;
Jest to zarówno efektywne jeśli chodzi o pamięć jak i o szybkość wykonywania operacji matematycznych. &lt;br /&gt;
&lt;br /&gt;
==== Dokumentacja modułu scipy.signal ====&lt;br /&gt;
Proszę zapoznać się z dokumentacją biblioteki scipy.signal:&lt;br /&gt;
&lt;br /&gt;
https://docs.scipy.org/doc/scipy/reference/&lt;br /&gt;
&lt;br /&gt;
===Svarog===&lt;br /&gt;
Przydatnym narzędziem do analizy sygnałów, z którego będziemy korzystać na zajęciach, jest program SVAROG (pierwotnie skrót od Signal Viewer, Analyzer and Recorder On GPL). Program działa w środowisku Java, jest więc niezależny od systemu operacyjnego (Linux, Windows, OS X…). Svarog pozwala na wczytywanie i analizowanie sygnałów (nie tylko bioelektrycznych), zarówno przy użyciu prostych (FFT, spektrogram) jak i bardziej zaawansowanych (matching pursuit, ICA, DTF itd.) narzędzi. Dzięki współpracy z platformą OpenBCI, możliwa jest rejestracja sygnału (łącznie z metadanymi) bezpośrednio z poziomu graficznego interfejsu użytkownika.&lt;br /&gt;
&lt;br /&gt;
====Svarog: uruchamianie i konfiguracja====&lt;br /&gt;
Aktualną wersję programu Svarog można pobrać [http://www.fuw.edu.pl/~durka/svarog/ stąd]. Program nie wymaga instalacji. Po rozpakowaniu paczki do dowolnego katalogu należy uruchomić skrypt „run-svarog.sh” lub uruchomić bezpośrednio plik *.jar.&lt;br /&gt;
&lt;br /&gt;
W przypadku pracy na własnych komputerach, do prawidłowego uruchomienia pluginu do analizy sygnałów, z którego będziemy korzystać w dalszej części ćwiczeń, konieczne jest zainstalowanie środowiska Oracle Java SE w wersji 8, które można pobrać [http://www.oracle.com/technetwork/java/javase/downloads/index.html ze strony wydawcy]. Alternatywnie, użytkownicy systemu Ubuntu lub pokrewnych dystrybucji mogą zainstalować środowisko Java według instrukcji [http://www.webupd8.org/2012/09/install-oracle-java-8-in-ubuntu-via-ppa.html dostępnych na tej stronie].&lt;br /&gt;
&lt;br /&gt;
==Sygnały ciągłe i dyskretne ==&lt;br /&gt;
===Próbkowanie w czasie ===&lt;br /&gt;
W tym ćwiczeniu zilustrujemy pojęcia:&lt;br /&gt;
* częstość próbkowania&lt;br /&gt;
* częstość Nyquista&lt;br /&gt;
* aliasing&lt;br /&gt;
&lt;br /&gt;
====Zadanie 1: Próbkowanie====&lt;br /&gt;
W poniższym ćwiczeniu chcemy zbadać efekt próbkowania sygnału w czasie. &lt;br /&gt;
*W komputerach nie mamy dostępu do sygnału ciągłego. &lt;br /&gt;
*Wartości sygnału znane są tylko w dyskretnych momentach czasu. &lt;br /&gt;
*Najczęściej stosujemy równe odstępy czasu &amp;lt;math&amp;gt;dt&amp;lt;/math&amp;gt;&lt;br /&gt;
*Odwrotność tych okresów to częstość próbkowania &amp;lt;math&amp;gt;Fs = \frac{1}{dt}&amp;lt;/math&amp;gt;&lt;br /&gt;
*Bardzo wygodnie jest myśleć o sygnałach jako o wektorach lub macierzach (rys. na tablicy)&lt;br /&gt;
*Do przechowywania sygnałów w pamięci używamy ndarray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Czy próbkując sygnał z częstością &amp;lt;math&amp;gt;Fs = 100&amp;lt;/math&amp;gt;[Hz] mogę odwzorować sygnał o  dowolnej częstości?&lt;br /&gt;
* wytwórz wektor t reprezentujący czas 1s próbkowany z częstością Fs&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
Fs =100&lt;br /&gt;
dt = 1/Fs&lt;br /&gt;
t = np.arange(0,1,dt) # czas 'prawie ciągły'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wytwórz sygnał  s, sinus o częstości f =10Hz. Dla przypomnienia wyrażenie: &amp;lt;math&amp;gt; s(t) = \sin(2 \pi f t)&amp;lt;/math&amp;gt; możemy w pythonie zapisać:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
s = np.sin(2*np.pi*f*t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* wykreśl ten sygnał za pomocą punktów i linii&lt;br /&gt;
* wykreśl sygnały o częstościach 20, 40, 50, 90 Hz&lt;br /&gt;
&lt;br /&gt;
====Efekt aliasingu====&lt;br /&gt;
Rzućmy okiem na przykład tego efektu: https://youtu.be/SFbINinFsxk&lt;br /&gt;
* koła obracają się z pewną częstością zgodnie z kierunkiem ruchu wskazówek zegara;&lt;br /&gt;
* na filmie widać, że w pewnych kierunek ten się zmienia, mimo, że samochód wciąż jedzie w tą samą stronę;&lt;br /&gt;
* możemy przyjąć umownie, że obrotom zgodnie z kierunkiem wskazówek zegara przypiszemy wartości dodatnie, a obrotom w kierunku przeciwnym wartości ujemne.&lt;br /&gt;
* Dlaczego tak się dzieje?&lt;br /&gt;
Analogiczne zjawisko przeanalizujemy dla symulowanych sygnałów okresowych. &lt;br /&gt;
Na nasze potrzeby wygenerujemy sygnały próbkowane z bardzo dużą częstością, które będą dla nas aproksymacją sygnałów ciągłych. Przy ich pomocy zaprezentujemy efekt utożsamiania (aliasingu). &lt;br /&gt;
*Proszę wytworzyć wektor reprezentujący czas &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągły. Będzie to u nas 1000 wartości z przedziału [0,1) wziętych z odstępem 0,001.&lt;br /&gt;
*Teraz proszę wygenerować dwie sinusoidy: jedną o częstości &amp;lt;tt&amp;gt;-1&amp;lt;/tt&amp;gt; a drugą o częstości &amp;lt;tt&amp;gt;9&amp;lt;/tt&amp;gt;. &lt;br /&gt;
*Proszę [[TI/Matplotlib#Kilka_wykres.C3.B3w_we_wsp.C3.B3lnych_osiach|wykreślić]] obie sinusoidy.&lt;br /&gt;
*Teraz proszę spróbkować czas i nasze &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłe sinusoidy z okresem próbkowania 0,1. (Trzeba pobrać co 100 element, proszę posłużyć się [[Programowanie_z_Pythonem/Sekwencje#Wycinki|wycinkami]]) &amp;lt;!-- [[TI/Sekwencje|Struktury danych — sekwencje|wycinkami]]. --&amp;gt;&lt;br /&gt;
*Na tle &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłych sinusoid proszę dorysować punkty ze spróbkowanych sygnałów. Aby punkty były dobrze  widoczne proponuję użyć markerów &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; oraz &amp;lt;tt&amp;gt;+&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Proszę zaobserwować wzajemne położenie punktów. &lt;br /&gt;
*Czy można odróżnić sinusoidę o częstości &amp;amp;minus;1 od sinusoidy o częstości 9, jeśli obie są próbkowane z częstością 10? &lt;br /&gt;
*Jak można uogólnić tą obserwację?&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = -1 # częstość sygnału 1&lt;br /&gt;
f2 = 9 # częstość sygnału 2&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
s2 = np.sin(2*np.pi*f2*t) # prawie ciągły sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
T = 0.1 # okres próbkowania&lt;br /&gt;
Fs = 1/T # częstość próbkowania&lt;br /&gt;
FN = Fs/2 # częstość Nyquista&lt;br /&gt;
T_samp = t[0::100] # czas pobierania próbek&lt;br /&gt;
s1_samp = s1[0::100] # próbkowany sygnał o częstości f1&lt;br /&gt;
s2_samp = s2[0::100] # próbkowany sygnał o częstości f2&lt;br /&gt;
&lt;br /&gt;
py.plot(t, s1, 'g')&lt;br /&gt;
py.plot(t, s2, 'b')&lt;br /&gt;
py.plot(T_samp, s1_samp, 'gx', markersize=10)&lt;br /&gt;
py.plot(T_samp, s2_samp, 'r+', markersize=10)&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Błąd kwantyzacji ===&lt;br /&gt;
Kiedy mierzymy fizyczne wielkości w celu dalszej analizy najczęściej chcemy przypisać im pewne liczby. Liczby w systemach cyfrowych reprezentowane są ze skończoną dokładnością. Urządzenia dokonujące przypisania liczby do mierzonej wartości to przetworniki analogowo-cyfrowe (ang. ADC, Analog to Digital Converter).&lt;br /&gt;
Charakteryzują się one określoną ilością bitów ''N'', za pomocą których reprezentują liczby. Pełen zakres wartości pomiarowych ''R'' jest dzielony na &amp;lt;math&amp;gt;2^N&amp;lt;/math&amp;gt; poziomów. Błąd kwantyzacji szacujemy jako nie większy niż &amp;lt;math&amp;gt; \frac{R}{2^{N+1}} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę oszacować błąd kwantyzacji sygnału EEG mierzonego za pomocą 12-bitowego konwertera. Zakres pomiarowy tego urządzenia to &amp;amp;plusmn;200 &amp;amp;mu;V.&lt;br /&gt;
====Zadanie:====&lt;br /&gt;
Proszę zilustrować efekt kwantyzacji dla trzybitowego przetwornika o zakresie 2.&lt;br /&gt;
W tym celu proszę wykonać następujące kroki:&lt;br /&gt;
# wygenerować &amp;amp;bdquo;prawie&amp;amp;rdquo; ciągłą sinusoidę (częstość 1, czas trwania 1 próbkowanie co 0,001)&lt;br /&gt;
# spróbkować tą sinusoidę co 0,1 (proszę zastosować wycinki)&lt;br /&gt;
# proszę skwantować spróbkowane wartości &lt;br /&gt;
#Proszę wykreślić na jednym rysunku &lt;br /&gt;
#* oryginalny sygnał &lt;br /&gt;
#* sygnał spróbkowany w czasie&lt;br /&gt;
#* sygnał spróbkowany w czasie i o skwantowanej amplitudzie (skorzystać z funkcji &amp;lt;tt&amp;gt;py.step&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
{{ Wyjaśnienie|title= wskazówka: Kwantowanie | text = &lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,1,0.001) # czas 'prawie ciągły'&lt;br /&gt;
f1 = 1 # częstość sygnału 1&lt;br /&gt;
&lt;br /&gt;
s1 = np.sin(2*np.pi*f1*t) # prawie ciągły sygnał o częstości f1&lt;br /&gt;
T_samp = t[0::100]&lt;br /&gt;
s1_samp = s1[0::100]&lt;br /&gt;
&lt;br /&gt;
N_bits = 3&lt;br /&gt;
zakres = 2.0&lt;br /&gt;
dy = zakres/2**N_bits&lt;br /&gt;
s1_kwantowany = np.floor(s1_samp/dy)*dy +0.5*dy&lt;br /&gt;
ax = py.subplot(111)&lt;br /&gt;
py.plot(t,s1)&lt;br /&gt;
py.plot(T_samp,s1_samp,'ko',markersize = 5)&lt;br /&gt;
py.step(T_samp,s1_kwantowany,where = 'post')&lt;br /&gt;
&lt;br /&gt;
ax.set_xticks(T_samp)&lt;br /&gt;
poziomy = np.arange(-1+0.5*dy,1,dy)&lt;br /&gt;
ax.set_yticks(poziomy)&lt;br /&gt;
py.grid('on')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i in xrange(0,8):&lt;br /&gt;
	py.text(1.02,poziomy[i],bin(i))&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały testowe==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Generowanie sygnałów testowych ===&lt;br /&gt;
&lt;br /&gt;
Do badania różnych metod analizy sygnałów potrzebne nam będą sygnały o znanych własnościach. W szczególności dobrze jest umnieć nadać sygnałom występującym w postaci cyfrowej, oraz sztucznym sygnałom próbnym pewne własności fizyczne takie jak:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czętość próbkowania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	czas trwania&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt;&lt;br /&gt;
	amplituda&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
=== Przykład sinus===&lt;br /&gt;
Sinus o zadanej częstości (w Hz), długości trwania, częstości próbkowania i fazie.&lt;br /&gt;
Poniższy kod implementuje i testuje funkcję &lt;br /&gt;
:&amp;lt;math&amp;gt; \sin(f,T,Fs,\phi) = \sin(2*\pi f t)&amp;lt;/math&amp;gt; dla &amp;lt;math&amp;gt;t \in \{0,T\}&amp;lt;/math&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
(s,t) = sin(f=10,Fs=1000)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Przykład: eksport sygnału do pliku binarnego ===&lt;br /&gt;
*Przypominamy:&lt;br /&gt;
** dtype http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html#arrays-dtypes-constructing&lt;br /&gt;
** open/close&lt;br /&gt;
** tofile&lt;br /&gt;
** fromfile&lt;br /&gt;
&lt;br /&gt;
* Poniższy kod ilustruje sposób zapisu dwóch funkcji sinus o częstościach 10 Hz i 21 Hz do pliku binarnego:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
T = 5&lt;br /&gt;
Fs = 128&lt;br /&gt;
&lt;br /&gt;
(s1,t) = sin(f=10, T=T, Fs=Fs)&lt;br /&gt;
(s2,t) = sin(f=21, T=T, Fs=Fs)	&lt;br /&gt;
	&lt;br /&gt;
signal = np.zeros((T*Fs, 2), dtype='&amp;lt;f')&lt;br /&gt;
signal[:, 0] = s1&lt;br /&gt;
signal[:, 1] = s2&lt;br /&gt;
&lt;br /&gt;
# zapis sygnału binarnego:&lt;br /&gt;
f_out = open('test_signal1.bin', 'wb') # otwieramy plik do pisania binarnego: 'wb'&lt;br /&gt;
signal.tofile(f_out) # zrzucamy zawartość tablicy ''signal'' do pliku identyfikowanego przez ''f_out''&lt;br /&gt;
f_out.close() # zamykamy plik&lt;br /&gt;
&lt;br /&gt;
# czynność odwrotna - wczytanie sygnału binarnego&lt;br /&gt;
ch = 2 # liczba kanałów&lt;br /&gt;
fin = open('test_signal1.bin', 'rb') # otwieramy plik do czytania binarnego: 'rb'&lt;br /&gt;
s = np.fromfile(fin, dtype='&amp;lt;f') # tworzymy tablicę sig o typie określonym przez ''dtype''&lt;br /&gt;
                                 # wkładając do niej bity z pliku ''fin'' interpretowane zgodnie z ''dtype''&lt;br /&gt;
fin.close() # zamykamy plik&lt;br /&gt;
s = np.reshape(s,(len(s)/ch,ch)) # zmieniamy tablicę z jednowymiarowej na dwuwymiarową&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Przykład: wczytanie sygnału do Svaroga ===&lt;br /&gt;
W celu wczytania zapisanego binarnie sygnału do programu Svarog, po wybraniu File -&amp;gt; Open signal, należy wprowadzić częstość próbkowania sygnału oraz liczbę kanałów. &lt;br /&gt;
&lt;br /&gt;
[[Plik:svarog_open_signal.png|center|800px|thumb|&amp;lt;figure id=&amp;quot;uid3&amp;quot; /&amp;gt;Wczytywanie sygnału w programie Svarog.]]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie: Nieznany typ danych===&lt;br /&gt;
Posiadamy 3 kanałowy plik binarny z sygnałem EEG. Niestety zapomnieliśmy jaki jest typ zapisanych danych. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć, która z pośród wymienionych zmiennych dtype jest prawdziwa:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; 'float32'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; '&amp;gt;H'&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;li&amp;gt; 'uint64'&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;li&amp;gt; 'float64'&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYRnVVQVhtdnJkWHM?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie: Nieznana liczba kanałów===&lt;br /&gt;
Posiadamy n kanałowy plik binarny z sygnałem EKG, EEG i EMG, typ zmiennej to '&amp;lt;f'. Niestety zapomnieliśmy jaka jest liczba kanałów. Proszę wczytać plik i przy pomocy biblioteki matplotlib oraz grafik z fragmentami sygnałów odgadnąć liczbę kanałów. Plik binarny oraz grafiki można pobrać z [https://drive.google.com/drive/folders/0ByBe6Y9KQQXYVFpOV3A4ZllYUGc?usp=sharing stąd]&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Proszę stworzyć nową macierz z n+3 kanałami, zawierającą sygnały z dwóch poprzednich zadań. Następnie proszę zapisać macierz sygnałów do pliku binarnego i otworzyć w programie Svarog.&lt;br /&gt;
&lt;br /&gt;
=== Delta ===&lt;br /&gt;
Podobnie można zdefiniować funkcję delta o zadanym czasie trwania, częstości próbkowania i momencie wystąpienia impulsu:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt; \delta(t_0) = \left\{^{1 \quad t=t_0} _{0 \quad t \ne t_0} \right.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
def delta(t0=0.5, T=1  ,Fs = 128):&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	d = np.zeros(len(t))&lt;br /&gt;
	d[np.ceil(t0*Fs)]=1&lt;br /&gt;
	return (d,t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Zadanie:===&lt;br /&gt;
Analogicznie do powyższych przykładów proszę zaimplementować i przetestować funkcje generujące:&lt;br /&gt;
* funkcję Gabora (funkcja Gaussa modulowana cosinusem) o zadanej częstości i standardowym odchyleniu w czasie, momencie wystąpienia, długości, częstości próbkowania i fazie. &lt;br /&gt;
:&amp;lt;math&amp;gt; g = \exp\left(-\frac{1}{2}\left(\frac{t-t_0}{\sigma}\right)^2 \right) \cdot  \cos(2 \pi f t + \phi); &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* szum gaussowski o zadanej średniej, odchyleniu standardowym, długości i częstości próbkowania.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- * pochodną funkcji Gaussa&lt;br /&gt;
&lt;br /&gt;
* połówkę funkcji Gaussa&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Co musimy z tego zapamiętać? ==&lt;br /&gt;
* sygnały dyskretne - dyskretne chwile czasu&lt;br /&gt;
* tworzenie sygnałów o konkretnej interpretacji fizycznej (częstość sygnału i częstość próbkowania)&lt;br /&gt;
* sygnały w pythonie przechowujemy w tablicach numpy&lt;br /&gt;
* zapis sygnałów do  pliku i wczytywanie sygnałów z plików binarnych&lt;br /&gt;
* wczytywanie sygnałów do SVAROGA&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Sygnały&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=STATLAB/ListaFunkcji&amp;diff=5961</id>
		<title>STATLAB/ListaFunkcji</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=STATLAB/ListaFunkcji&amp;diff=5961"/>
		<updated>2016-11-10T11:14:13Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Dodatkowe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
===Biblioteki===&lt;br /&gt;
[http://docs.scipy.org/doc/numpy/reference/index.html numpy]&lt;br /&gt;
&lt;br /&gt;
[http://docs.scipy.org/doc/scipy-0.16.0/reference/signal.html scipy.signal]&lt;br /&gt;
&lt;br /&gt;
[http://docs.scipy.org/doc/scipy-0.16.0/reference/stats.html scipy.stats]&lt;br /&gt;
&lt;br /&gt;
[https://docs.python.org/2/library/functions.html wbudowane]&lt;br /&gt;
&lt;br /&gt;
===Lista funkcji===&lt;br /&gt;
====Matematyczne z pakietu numpy====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.sin.html numpy.sin]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html numpy.exp]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.log.html numpy.log]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.real.html numpy.real]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.imag.html numpy.imag]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.conj.html numpy.conj]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.unwrap.html numpy.unwrap]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.angle.html numpy.angle]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.sqrt.html numpy.sqrt]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.sum.html numpy.sum]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.power.html numpy.power]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.ceil.html numpy.ceil]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.floor.html numpy.floor]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.round.html numpy.round]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.absolute.html numpy.absolute]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.iinfo.html numpy.iinfo]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Macierzowe z pakietu numpy====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html numpy.zeros]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.ones.html numpy.ones]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.min.html numpy.ndarray.min]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.max.html numpy.ndarray.max]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.shape.html numpy.ndarray.shape]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.reshape.html numpy.reshape]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html numpy.arange]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html numpy.dot]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html numpy.where]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.logical_and.html numpy.logical_and]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.logical_or.html numpy.logical_or]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.hstack.html numpy.hstack]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.vstack.html numpy.vstack]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html numpy.concatenate]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.copy.html numpy.copy]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.diff.html numpy.diff]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.array.html numpy.array]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Sygnałowe====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fft.html numpy.fft.fft]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fftshift.html numpy.fft.fftshift]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.fftfreq.html numpy.fft.fftfreq]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.ifft.html numpy.fft.ifft]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.bartlett.html numpy.bartlett]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.blackman.html numpy.blackman]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.hamming.html numpy.hamming]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.hanning.html numpy.hanning]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.kaiser.html numpy.kaiser]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.rfft.html numpy.fft.rfft]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fft.rfftfreq.html numpy.fft.rfftfreq]&lt;br /&gt;
|[http://scipy.github.io/devdocs/generated/scipy.signal.periodogram.html scipy.signal.periodogram]&lt;br /&gt;
|-&lt;br /&gt;
|[http://scipy.github.io/devdocs/generated/scipy.signal.welch.html scipy.signal.welch]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html numpy.correlate]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.convolve.html scipy.signal.convolve]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Statystyczne====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html numpy.mean]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.std.html numpy.std]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.scoreatpercentile.html scipy.stats.scoreatpercentile]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.norm.html scipy.stats.norm]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.rand.html numpy.random.rand]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html numpy.random.randn]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Filtry====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin.html scipy.signal.firwin]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.firwin2.html scipy.signal.firwin2]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.freqz.html scipy.signal.freqz]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html scipy.signal.lfilter]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cheby1.html scipy.signal.cheby1]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cheby2.html scipy.signal.cheby2]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.ellip.html scipy.signal.ellip]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.buttord.html scipy.signal.buttord]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.butter.html scipy.signal.butter]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cheb1ord.html scipy.signal.cheb1ord]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.cheb2ord.html scipy.signal.cheb2ord]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.ellipord.html scipy.signal.ellipord]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.kaiserord.html scipy.signal.kaiserord]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.filtfilt.html scipy.signal.filtfilt]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.decimate.html scipy.signal.decimate]&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Pliki====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.fromfile.html numpy.fromfile]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html numpy.ndarray.tofile]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html numpy.loadtxt]&lt;br /&gt;
|[http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html numpy.savetxt]&lt;br /&gt;
|-&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.read.html scipy.io.wavfile.read]&lt;br /&gt;
|[http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html scipy.io.wavfile.write]&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Wykresy Matplotlib====&lt;br /&gt;
http://matplotlib.org/api/pyplot_api.html&lt;br /&gt;
{|&lt;br /&gt;
|plot&lt;br /&gt;
|stem&lt;br /&gt;
|subplot&lt;br /&gt;
|figure&lt;br /&gt;
|-&lt;br /&gt;
|imshow&lt;br /&gt;
|title&lt;br /&gt;
|xlim&lt;br /&gt;
|ylim&lt;br /&gt;
|-&lt;br /&gt;
|xlab&lt;br /&gt;
|ylab&lt;br /&gt;
|label&lt;br /&gt;
|legend&lt;br /&gt;
|-&lt;br /&gt;
|grid&lt;br /&gt;
|show&lt;br /&gt;
|fill_between&lt;br /&gt;
|step&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
===Dodatkowe===&lt;br /&gt;
&amp;lt;source lang= python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1., T = 1., Fs = 128., phi =0. ):&lt;br /&gt;
	'''&lt;br /&gt;
	(float, float, float, float) -&amp;gt; (numpy.ndarray, numpy.ndarray)&lt;br /&gt;
	sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1 Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	Zwraca macierz amplitud i czasu.&lt;br /&gt;
	'''&lt;br /&gt;
&lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
&lt;br /&gt;
def delta(t0=0.5, T=1.0 ,Fs = 128.):&lt;br /&gt;
    '''&lt;br /&gt;
    (float, float, float) -&amp;gt; (numpy.ndarray, numpy.ndarray)&lt;br /&gt;
    Generowanie funkcji delta. Zwraca macierz amplitud i czasu.&lt;br /&gt;
    t0: położenie maksimum&lt;br /&gt;
    T: czas trwania sygnału&lt;br /&gt;
    Fs: częstość próbkowania&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    d = np.zeros(len(t))&lt;br /&gt;
    d[np.ceil(t0*Fs)]=1&lt;br /&gt;
    return (d,t)&lt;br /&gt;
&lt;br /&gt;
def gabor(f = 1., T = 1., Fs = 128., phi =0., t0 = 0.0, std = 1.0 ):&lt;br /&gt;
    '''&lt;br /&gt;
    (float, float, float, float, float, float) -&amp;gt; (numpy.ndarray, numpy.ndarray)&lt;br /&gt;
    Generowanie funkcji Gabora. Zwraca macierz amplitud i czasu.&lt;br /&gt;
    f: częstość oscylacji&lt;br /&gt;
    T: czas trwania sygnału&lt;br /&gt;
    Fs: częstość próbkowania&lt;br /&gt;
    phi: faza&lt;br /&gt;
    t0: położenie maksimum&lt;br /&gt;
    std: odchylenie standardowe&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    g = np.cos(2*np.pi*f*(t-t0)+phi)*np.exp(-0.5*(t-t0)**2/(std**2))&lt;br /&gt;
    return (g, t)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  fft, fftfreq, fftshift&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft, F_samp):&lt;br /&gt;
    '''&lt;br /&gt;
    (numpy.ndarray, int, float) -&amp;gt; (numpy.ndarray, numpy.ndarray)&lt;br /&gt;
    s: sygnał&lt;br /&gt;
    N_fft: ilość punktów DTF&lt;br /&gt;
    F_samp: częstość próbkowania&lt;br /&gt;
    Oblicza widmo mocy w skali decybelowej. Zwraca macierz mocy i częstości&lt;br /&gt;
    '''&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5946</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5946"/>
		<updated>2016-11-08T08:34:33Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 5: Metoda Welcha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(moc_w_czestosci, F) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Created on Mon Nov  7 12:21:33 2016&lt;br /&gt;
&lt;br /&gt;
@author: admin&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= okno/np.linalg.norm(okno)&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    S = rfft(s)&lt;br /&gt;
    P = S*S.conj()&lt;br /&gt;
    P = P/Fs&lt;br /&gt;
    P = P.real&lt;br /&gt;
    if len(s)%2 ==0:&lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = rfftfreq(len(s), 1./Fs)&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
  &lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = s**2&lt;br /&gt;
(moc_w_czestosci, F) = widmo_mocy(s, Fs=fs,okno=okno)&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
&lt;br /&gt;
energia_w_czasie = np.sum(moc_w_czasie*dt)&lt;br /&gt;
energia_w_czestosci = np.sum(moc_w_czestosci)&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Periodogram: widmo mocy okienkowanego sygnału ===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego, czyli periodogram:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić, że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać przez wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartości zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji.&lt;br /&gt;
&lt;br /&gt;
Poniżej mamy przykład wytwarzania  procesu złożonego z dwóch realizacji po 50 próbek oraz estymowania jego wartości średniej. Każda próbka jest niezależną zmienną losową z rozkładu normalnego o średniej 0 i wariancji 1:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
t = np.arange(0,50,1)&lt;br /&gt;
&lt;br /&gt;
# realizacja 1&lt;br /&gt;
x1 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# realizacja 2&lt;br /&gt;
x2 = np.random.randn(t.size)&lt;br /&gt;
&lt;br /&gt;
# średnia procesu&lt;br /&gt;
xm = 0.5*(x1+x2)&lt;br /&gt;
&lt;br /&gt;
# ilustracja&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.stem(t,x1)&lt;br /&gt;
py.title('realizacja 1')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.stem(t,x2)&lt;br /&gt;
py.title('realizacja 2')&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.stem(t,xm,'r')&lt;br /&gt;
py.title('średnia procesu')&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatorach momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Transformata Fouriera sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum.&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
#dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
* Niech  &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt; - sygnał stochastyczny, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum),&lt;br /&gt;
* Jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną&lt;br /&gt;
* Wówczas, część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; są nieskorelowanymi zmiennymi losowymi o średniej zero i równych wariancjach. &lt;br /&gt;
* Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. &lt;br /&gt;
* Wielkość:&lt;br /&gt;
: &amp;lt;math&amp;gt; P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f) &amp;lt;/math&amp;gt;&lt;br /&gt;
: jest sumą kwadratów dwóch niezależnych zmiennych normalnych. &lt;br /&gt;
* Wielkość ta podlega rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
&lt;br /&gt;
* Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
**Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. &lt;br /&gt;
** W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, &lt;br /&gt;
** Oznacza to, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
* Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki:&lt;br /&gt;
**;Pierwsza: to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
:*;Druga: to podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
:::&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
:::gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 5: Metoda Welcha====&lt;br /&gt;
&amp;lt;!--Proszę napisać i przetestować funkcję implementującą metodę Welcha estymacji widma mocy. Algorytm Welcha:&lt;br /&gt;
# sygnał &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; o długości ''N'' jest dzielony na segmenty, każdy o długości &amp;lt;math&amp;gt;N_s&amp;lt;/math&amp;gt;. Odcinki mogą na siebie zachodzić na &amp;lt;math&amp;gt;N_z&amp;lt;/math&amp;gt; punktów. Czyli są względem siebie przesunięte o &amp;lt;math&amp;gt;N_p = N_s-N_z&amp;lt;/math&amp;gt;.&lt;br /&gt;
# z każdego segmentu liczony jest okienkowany periodogram&lt;br /&gt;
# periodogramy są sumowane&lt;br /&gt;
# wynik dzielony jest przez efektywne wykorzystanie każdego kawałka sygnału w estymacie: &amp;lt;tt&amp;gt;K_eff = dlogosc_okna * ilosc_okien / dlugosc_sygnalu&amp;lt;/tt&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real/Fs # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return (F,P)&lt;br /&gt;
    &lt;br /&gt;
def pwelch(s,okienko, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okienko)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # długość sygnału&lt;br /&gt;
&lt;br /&gt;
#okno = np.ones(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
okno = np.hamming(N)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(F,P) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
N_s = N/8&lt;br /&gt;
#okno = np.ones(N_s)&lt;br /&gt;
#okno = np.blackman(N_s)&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
okno/=np.linalg.norm(okno)&lt;br /&gt;
(F, P) = welch(x,Fs,okno,noverlap = N_s-10,scaling = 'density')&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha====&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  fft, fftfreq, fftshift&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    Fs- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    (x,t) = sin(f = 20.0, T = T, Fs = Fs, phi = 0)&lt;br /&gt;
    x += 2*np.random.randn(len(x))&lt;br /&gt;
    return x&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
Nw = N/10.0&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
okno_welch = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw))&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (P, F) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i] = P&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(F,P) &lt;br /&gt;
    (P, F) = pwelch(s,okno_welch,Nw/10,Fs)&lt;br /&gt;
    S_welch[i] = P&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F,P)&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0))&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 7: Estymacja widma mocy metodą multitaper ====&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą multitaper.&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(S,F)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w.dpssarray[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
NW = 3&lt;br /&gt;
(s,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
s = s+np.random.randn(len(s))&lt;br /&gt;
(S,F) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.plot( F,fftshift(np.abs(fft(s))**2/len(s) ) ,'g')&lt;br /&gt;
&lt;br /&gt;
print np.sum(S)&lt;br /&gt;
print np.sum(s**2)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5934</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5934"/>
		<updated>2016-11-07T20:19:17Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 3: Obliczanie periodogramu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/Fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(moc_w_czestosci, F) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Okienkowanie a widmo mocy: periodogram===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić,że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać prze wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartośći zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji:&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatory momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Transformata Fouriera sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum.&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
#dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
Dla sygnału stochastycznego &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt;, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum), jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną, której część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mogą być uznane za nieskorelowane zmienne losowe o średniej zero i równych wariancjach. Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. Zatem wielkość:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
jest sumą kwadratów dwóch niezależnych zmiennych normalnych. Wielkość ta podlega zatem rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, co oznacza, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki. Pierwsza to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Innym sposobem poprawy estymatora mocy jest podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 5: Metoda Welcha====&lt;br /&gt;
&amp;lt;!--Proszę napisać i przetestować funkcję implementującą metodę Welcha estymacji widma mocy. Algorytm Welcha:&lt;br /&gt;
# sygnał &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; o długości ''N'' jest dzielony na segmenty, każdy o długości &amp;lt;math&amp;gt;N_s&amp;lt;/math&amp;gt;. Odcinki mogą na siebie zachodzić na &amp;lt;math&amp;gt;N_z&amp;lt;/math&amp;gt; punktów. Czyli są względem siebie przesunięte o &amp;lt;math&amp;gt;N_p = N_s-N_z&amp;lt;/math&amp;gt;.&lt;br /&gt;
# z każdego segmentu liczony jest okienkowany periodogram&lt;br /&gt;
# periodogramy są sumowane&lt;br /&gt;
# wynik dzielony jest przez efektywne wykorzystanie każdego kawałka sygnału w estymacie: &amp;lt;tt&amp;gt;K_eff = dlogosc_okna * ilosc_okien / dlugosc_sygnalu&amp;lt;/tt&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return P,F&lt;br /&gt;
    &lt;br /&gt;
def pwelch(s,okienko, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okienko)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(P, F) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
N_s = N/8&lt;br /&gt;
#okno = np.ones(N_s)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N_s)&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
(F, P) = welch(s,Fs,okno,nperseg=N_s,noverlap = N_s/10)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha====&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  fft, fftfreq, fftshift&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    Fs- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    (x,t) = sin(f = 20.0, T = T, Fs = Fs, phi = 0)&lt;br /&gt;
    x += 2*np.random.randn(len(x))&lt;br /&gt;
    return x&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
Nw = N/10.0&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
okno_welch = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw))&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (P, F) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i] = P&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(F,P) &lt;br /&gt;
    (P, F) = pwelch(s,okno_welch,Nw/10,Fs)&lt;br /&gt;
    S_welch[i] = P&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F,P)&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0))&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 7: Estymacja widma mocy metodą multitaper ====&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą multitaper.&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(S,F)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w.dpssarray[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
NW = 3&lt;br /&gt;
(s,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
s = s+np.random.randn(len(s))&lt;br /&gt;
(S,F) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.plot( F,fftshift(np.abs(fft(s))**2/len(s) ) ,'g')&lt;br /&gt;
&lt;br /&gt;
print np.sum(S)&lt;br /&gt;
print np.sum(s**2)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5933</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5933"/>
		<updated>2016-11-07T20:18:28Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 3: Obliczanie periodogramu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/Fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(moc_w_czestosci, F) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Okienkowanie a widmo mocy: periodogram===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartości urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić,że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać prze wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartośći zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji:&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatory momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Transformata Fouriera sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum.&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
#dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
Dla sygnału stochastycznego &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt;, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum), jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną, której część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mogą być uznane za nieskorelowane zmienne losowe o średniej zero i równych wariancjach. Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. Zatem wielkość:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
jest sumą kwadratów dwóch niezależnych zmiennych normalnych. Wielkość ta podlega zatem rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, co oznacza, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki. Pierwsza to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Innym sposobem poprawy estymatora mocy jest podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 5: Metoda Welcha====&lt;br /&gt;
&amp;lt;!--Proszę napisać i przetestować funkcję implementującą metodę Welcha estymacji widma mocy. Algorytm Welcha:&lt;br /&gt;
# sygnał &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; o długości ''N'' jest dzielony na segmenty, każdy o długości &amp;lt;math&amp;gt;N_s&amp;lt;/math&amp;gt;. Odcinki mogą na siebie zachodzić na &amp;lt;math&amp;gt;N_z&amp;lt;/math&amp;gt; punktów. Czyli są względem siebie przesunięte o &amp;lt;math&amp;gt;N_p = N_s-N_z&amp;lt;/math&amp;gt;.&lt;br /&gt;
# z każdego segmentu liczony jest okienkowany periodogram&lt;br /&gt;
# periodogramy są sumowane&lt;br /&gt;
# wynik dzielony jest przez efektywne wykorzystanie każdego kawałka sygnału w estymacie: &amp;lt;tt&amp;gt;K_eff = dlogosc_okna * ilosc_okien / dlugosc_sygnalu&amp;lt;/tt&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return P,F&lt;br /&gt;
    &lt;br /&gt;
def pwelch(s,okienko, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okienko)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(P, F) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
N_s = N/8&lt;br /&gt;
#okno = np.ones(N_s)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N_s)&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
(F, P) = welch(s,Fs,okno,nperseg=N_s,noverlap = N_s/10)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha====&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  fft, fftfreq, fftshift&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    Fs- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    (x,t) = sin(f = 20.0, T = T, Fs = Fs, phi = 0)&lt;br /&gt;
    x += 2*np.random.randn(len(x))&lt;br /&gt;
    return x&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
Nw = N/10.0&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
okno_welch = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw))&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (P, F) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i] = P&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(F,P) &lt;br /&gt;
    (P, F) = pwelch(s,okno_welch,Nw/10,Fs)&lt;br /&gt;
    S_welch[i] = P&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F,P)&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0))&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 7: Estymacja widma mocy metodą multitaper ====&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą multitaper.&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(S,F)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w.dpssarray[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
NW = 3&lt;br /&gt;
(s,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
s = s+np.random.randn(len(s))&lt;br /&gt;
(S,F) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.plot( F,fftshift(np.abs(fft(s))**2/len(s) ) ,'g')&lt;br /&gt;
&lt;br /&gt;
print np.sum(S)&lt;br /&gt;
print np.sum(s**2)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5932</id>
		<title>Nieparametryczne widmo mocy</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Nieparametryczne_widmo_mocy&amp;diff=5932"/>
		<updated>2016-11-07T20:09:02Z</updated>

		<summary type="html">&lt;p&gt;JanMaka: /* Zadanie 5: Metoda Welcha */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;br /&gt;
&lt;br /&gt;
==Widmo mocy==&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== Moc===&lt;br /&gt;
Moc chwilowa sygnału przez analogię do układów elektrycznych o jednostkowym oporze jest w analizie sygnałów przyjęta jako kwadraty próbek (&amp;lt;math&amp;gt;P = I^2 R = \frac{U^2}{R}&amp;lt;/math&amp;gt;).&lt;br /&gt;
Oznaczmy sygnał &lt;br /&gt;
&amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt;, wówczas jego moc wyraża się wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;P[n]=x[n]^2&amp;lt;/math&amp;gt;, &lt;br /&gt;
a energia wzorem:&lt;br /&gt;
:&amp;lt;math&amp;gt;E = \sum _n{x[n]^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Widmo mocy: tw. Plancherela i tw. Parsevala ===&lt;br /&gt;
Twierdzenia te omawiane i dowodzone były na [[Szereg_Fouriera#To.C5.BCsamo.C5.9B.C4.87_Parsevala_dla_szereg.C3.B3w_Fouriera|wykładzie]]. Tutaj, tylko krótko przypomnijmy sobie: &lt;br /&gt;
====Twierdzenie Plancherela====&lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;X[k]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;Y[k]&amp;lt;/math&amp;gt; są transformatami &amp;lt;math&amp;gt;x[n]&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;y[n]&amp;lt;/math&amp;gt; odpowiednio to:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid15&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} x[n]y^*[n] = \frac{1}{N} \sum _{k=0}^{N-1} X[k] Y^*[k]&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gwiazdka oznacza sorzężenie zespolone. &lt;br /&gt;
====Twierdzenie Parsevala====&lt;br /&gt;
jest specjalnym przypadkiem twierdzenia Plancherela:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid16&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\sum _{n=0}^{N-1} \left|x[n]\right|^2 = \frac{1}{N} \sum _{k=0}^{N-1} \left|X[k]\right|^2.&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
Twierdzenie to upoważnia nas do utożsamiania kwadratów wartości bezwzględnej składowych transformaty Fouriera z mocą niesioną przez odpowiadające im składowe.&lt;br /&gt;
&lt;br /&gt;
Na wykładzie udowodnione było twierdzenie Parsewala dla sygnałów ciągłych. Dowód tego tweirdzenia w przypadku dyskretnym można przeprowadzić następującym rachunkiem:&lt;br /&gt;
&lt;br /&gt;
Załóżmy, że  X jest szeregiem Fouriera x, a x jest sygnałem o długości N:&lt;br /&gt;
:&amp;lt;math&amp;gt;X[r]=\sum_{k=0}^{N - 1}x[k]e^{i2 \pi kr/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wtedy:&lt;br /&gt;
:&amp;lt;math&amp;gt;|X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]e^{i2 \pi kr/N} \sum_{k'=0}^{N - 1} x^*[k']e^{-i2 \pi k'r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt; = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zsumujmy to wyrażenie stronami:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{r=0}^{N - 1} \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zmieńmy kolejność sumowania:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N-1} |X[r]|^2 = \sum_{k=0}^{N - 1}  x[k]\sum_{k'=0}^{N - 1} x^*[k']\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Zauważmy, że:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} e^{i2 \pi (k-k')r/N} = N \delta_{k,k'}&amp;lt;/math&amp;gt;&lt;br /&gt;
bo dla k=k' sumujemy  jedynki, dla &amp;lt;math&amp;gt;k \ne k' &amp;lt;/math&amp;gt;sumujemy N symetrycznie rozłożonych pierwiastków N-tego stopnia z &amp;lt;math&amp;gt; e^{i2 \pi (k-k')&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zatem:&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{r=0}^{N - 1} |X[r]|^2 = N \sum_{k=0}^{N - 1} |x[k]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
czyli&lt;br /&gt;
:&amp;lt;math&amp;gt;\sum_{k=0}^{N - 1} |x[k]|^2  = \frac{1}{N} \sum_{r=0}^{N - 1} |X[r]|^2&amp;lt;/math&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
===Obliczanie mocy sygnału===&lt;br /&gt;
==== Zadanie 1: Moc i energia sygnału w dziedzinie czasu ==== &lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować sygnał sinusoidalny &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; o amplitudzie 1, częstości 10 Hz, trwający 0.3 sekundy i próbkowany z częstością 1000 Hz.&lt;br /&gt;
*narysować ten sygnał przy pomocy funkcji &amp;lt;tt&amp;gt;pylab.stem&amp;lt;/tt&amp;gt;, &lt;br /&gt;
* obliczyć i narysować przebieg mocy w czasie &amp;lt;math&amp;gt;P_t = s_t^2&amp;lt;/math&amp;gt;: '''moc w danej chwili to kwadrat wartości próbki sygnału'''&lt;br /&gt;
* obliczyć energię tego sygnału &amp;lt;math&amp;gt;E = \sum_t P_t \Delta t &amp;lt;/math&amp;gt;: '''energia to suma mocy mnożonej przez przyrosty czasu między próbkami'''&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 2: Moc i energia sygnału w dziedzinie czasu i częstości ====&lt;br /&gt;
&lt;br /&gt;
* Proszę uzupełnić i przetestować funkcję realizującą poniższy algorytm estymacji widma mocy.&lt;br /&gt;
* Następnie proszę obliczyć energię oraz wyświetlić przebieg widma mocy dla sygnału z Zadania 1.&lt;br /&gt;
* Sprawdzić czy energia zależy od częstości próbkowania i od długości sygnału&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
def widmo_mocy(s,Fs,okno):&lt;br /&gt;
    okno= # znormalizuj okno &lt;br /&gt;
    s = # zokienkuj sygnał&lt;br /&gt;
    S = # Oblicz transformatę Fouriera sygnału przy pomocy funkcji &amp;lt;tt&amp;gt;rfft&amp;lt;/tt&amp;gt;&lt;br /&gt;
    P =  # Oblicz moc jako iloczyn unormowanej transformaty i jej sprzężenia zespolonego. &lt;br /&gt;
    P = # Unormuj widmo dzieląc przez częstość próbkowania&lt;br /&gt;
    P = # Do dalszych operacji wybierz tylko część rzeczywistą mocy. &lt;br /&gt;
    if len(s)%2 ==0: # dokładamy moc z ujemnej części widma &lt;br /&gt;
        P[1:-1] *=2&lt;br /&gt;
    else:&lt;br /&gt;
        P[1:] *=2&lt;br /&gt;
    F = # Korzystając z funkcji &amp;lt;tt&amp;gt;rfftfreq&amp;lt;/tt&amp;gt; obliczamy częstości, dla których policzone są współczynniki Fouriera.&lt;br /&gt;
    return P,F&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# część testująca&lt;br /&gt;
fs =100&lt;br /&gt;
T = 3&lt;br /&gt;
f = 10.3&lt;br /&gt;
&lt;br /&gt;
# okno prostokątne&lt;br /&gt;
okno = np.ones(len(s))&lt;br /&gt;
&lt;br /&gt;
# sygnał testowy&lt;br /&gt;
dt = 1.0/Fs&lt;br /&gt;
t = np.arange(0,T,dt)&lt;br /&gt;
s = np.sin(2*np.pi*f*t )&lt;br /&gt;
&lt;br /&gt;
moc_w_czasie = ...&lt;br /&gt;
(moc_w_czestosci, F) = widmo_mocy(s, Fs=fs, okno = okno)&lt;br /&gt;
&lt;br /&gt;
dt = 1/fs&lt;br /&gt;
energia_w_czasie = ...&lt;br /&gt;
energia_w_czestosci = ...&lt;br /&gt;
&lt;br /&gt;
py.subplot(3,1,1)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title('Sygnal')&lt;br /&gt;
py.subplot(3,1,2)&lt;br /&gt;
py.plot(t,moc_w_czasie)&lt;br /&gt;
py.title('moc w czasie, energia w czasie: ' +str(energia_w_czasie))&lt;br /&gt;
py.subplot(3,1,3)&lt;br /&gt;
py.plot(F,moc_w_czestosci)&lt;br /&gt;
py.title('moc w czestosci, energia w czestosci: ' +str(energia_w_czestosci))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Okienkowanie a widmo mocy: periodogram===&lt;br /&gt;
Aby policzyć widmo mocy sygnału z zastosowaniem okienek wprowadzimy następujące symbole:&lt;br /&gt;
* sygnał: &amp;lt;math&amp;gt;s[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko: &amp;lt;math&amp;gt; w[n]&amp;lt;/math&amp;gt;&lt;br /&gt;
* okienko znormalizowane: &amp;lt;math&amp;gt; \hat w[n] = \frac{1}{\sqrt{\sum_{n=0}^{N-1} (w[n])^2}}w[n]&amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;lt;!--(w szczególnym przypadku okienka prostokątnego normalizacja ta daje &amp;lt;math&amp;gt;1/N^2&amp;lt;/math&amp;gt; występujące we wzorze na moc)--&amp;gt;&lt;br /&gt;
* widmo mocy sygnału okienkowanego:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P[k] = \frac{1}{\sum_{n=0}^{N-1} (w[n])^2}  \left|\sum_{n=0}^{N-1} s[n]w[n] e^{i\frac{2 \pi }{N} k n}\right|^2 &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 3: Obliczanie periodogramu ====&lt;br /&gt;
* Proszę napisać funkcję obliczającą periodogram.&lt;br /&gt;
** Funkcja jako argumenty powinna przyjmować sygnał, okno (podane jako sekwencja próbek), i częstość próbkowania. &lt;br /&gt;
** Zwracać powinna widmo mocy i skalę osi częstości. Wewnątrz funkcja powinna implementować liczenie widma z sygnału okienkowanego znormalizowanym oknem.&lt;br /&gt;
* Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = rfft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return S_dB,F&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
F_samp = 100.0&lt;br /&gt;
(x,t) = sin(f = 10.1, T =2, Fs = F_samp, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
#&lt;br /&gt;
py.subplot(2,2,1)&lt;br /&gt;
py.plot(t,x)&lt;br /&gt;
energia_t = np.sum(x**2)&lt;br /&gt;
print 'energia sygnału:', energia_t&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,2,3)&lt;br /&gt;
py.plot(t,s)&lt;br /&gt;
py.title(u' sygnał')&lt;br /&gt;
py.title(u' sygnał okienkowany ')&lt;br /&gt;
# &lt;br /&gt;
py.subplot(2,2,2)&lt;br /&gt;
(S,F) = widmo_dB(s,N,F_samp) &lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
py.title(u'widmo sygnału okienkowanego')&lt;br /&gt;
py.ylabel('dB')&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,2,4)&lt;br /&gt;
(P, F) = periodogram(x,okno,F_samp)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
        &lt;br /&gt;
py.title('periodogram')&lt;br /&gt;
print 'energia periodogramu:', np.sum(P)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sygnały stochastyczne ==&lt;br /&gt;
Sygnał stochastyczny to taki sygnał, dla którego ciągu próbek nie da się opisać funkcją czasu. Kolejne próbki w takim sygnale to [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Zmienna_losowa|zmienne losowe]]. Można je opisać podając własności [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Rozk.C5.82ad_prawdopodobie.C5.84stwa|rozkładu]], z którego pochodzą. Często w opisie takich zmiennych posługujemy się [[WnioskowanieStatystyczne/Zmienne_losowe_i_generatory_liczb_pseudolosowych#Momenty|momentami rozkładów]].&lt;br /&gt;
Jak można sobie wyobrazić rozkłady, z których pochodzą próbki?&lt;br /&gt;
Można sobie wyobrazić,że obserwowany przez nas sygnał stochastyczny to jedna z możliwych realizacji procesu stochastycznego. &lt;br /&gt;
Jeśli &amp;lt;math&amp;gt;K&amp;lt;/math&amp;gt; jest zbiorem &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; zdarzeń (&amp;lt;math&amp;gt;k \in K&amp;lt;/math&amp;gt;) i każde z tych zdarzeń ma przypisaną funkcję &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; zwaną realizacją procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt;, to proces stochastyczny może być zdefiniowany jako zbiór funkcji:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid23&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\xi (t) = \left\lbrace x_1(t),x_2(t),\dots , x_N(t) \right\rbrace &lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;x_k(t)&amp;lt;/math&amp;gt; są losowymi funkcjami czasu &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Procesy stochastyczne można opisywać prze wartości oczekiwane liczone po realizacjach.&lt;br /&gt;
&lt;br /&gt;
Dla przypomnienia wartość oczekiwaną liczymy tak:&lt;br /&gt;
&amp;lt;equation id=&amp;quot;uid24&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
{\mu _x(t_1) = E\left[\xi (t_1) \right]= \lim _{N \rightarrow \infty }\sum _{k=1}^{N}{x_k(t_1)} p(x_k,t_1)}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/equation&amp;gt;&lt;br /&gt;
średnia &amp;lt;math&amp;gt;\mu _x(t_1)&amp;lt;/math&amp;gt; procesu &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; w chwili &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; to suma wartośći zaobserwowanych w chwili we wszystkich realizacjach &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; ważona prawdopodobieństwem wystąpienia tej realizacji:&lt;br /&gt;
=== Stacjonarność i ergodyczność===&lt;br /&gt;
&amp;lt;dl&amp;gt;&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Stacjonarność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Jeśli dla procesu stochastycznego &amp;lt;math&amp;gt;\xi (t)&amp;lt;/math&amp;gt; wszystkie momenty są niezależne od czasu to jest on stajonarny w ścisłym sensie. Jeśli tylko średnia &amp;lt;math&amp;gt;\mu _x&amp;lt;/math&amp;gt; i autokorelacja &amp;lt;math&amp;gt;R_x(\tau )&amp;lt;/math&amp;gt; nie zależą od czasu to proces jest stacjonarny w słabym sensie, co dla wielu zastosowań jest wystarczające.&lt;br /&gt;
	&amp;lt;dt&amp;gt;&lt;br /&gt;
	Ergodyczność:&lt;br /&gt;
	&amp;lt;dd&amp;gt;&lt;br /&gt;
	Proces jest ergodyczny jeśli jego średnie po czasie i po realizacjach są sobie równe. Oznacza to, że dla takiego procesu jedna realizacja jest reprezentatywna i zawiera całą informację o tym procesie.&lt;br /&gt;
&amp;lt;/dl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Założenie o sygnale, że jest stacjonarny i ergodyczny pozwala zamienić sumowanie po realizacjach na sumowanie po czasie w estymatory momentów statystycznych.&lt;br /&gt;
&lt;br /&gt;
===Zadanie 4: Transformata Fouriera sygnału stochastycznego===&lt;br /&gt;
Bardzo często musimy oszacować widmo mocy sygnału zawierającego znaczny udział szumu.&lt;br /&gt;
&lt;br /&gt;
Poniższe ćwiczenie ilustruje niepewność szacowania pików w widmie otrzymanym z transformaty Fouriera dla sygnału zawierającego szum.&lt;br /&gt;
&lt;br /&gt;
* wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 1 s, Fs = 100 Hz) i  szumu gaussowskiego&lt;br /&gt;
* dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
* wykreśl wszystkie otrzymane widma na wspólnym wykresie&lt;br /&gt;
&lt;br /&gt;
Proszę obejrzeć otrzymane widma.&lt;br /&gt;
* Zaobserwuj jakiego rzędu jest niepewność wyniku.&lt;br /&gt;
* Czy podobny problem występuje dla sygnału bez szumu?&lt;br /&gt;
* Skonstruuj funkcję rysującą średnie widmo wraz z [[WnioskowanieStatystyczne/_Przedzia%C5%82y_ufno%C5%9Bci|przedziałem ufności]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import scipy.stats as st&lt;br /&gt;
&lt;br /&gt;
from numpy.fft import rfft,rfftfreq&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def widmo_mocy(s,Fs):&lt;br /&gt;
    '''funkcja oblicza widmo mocy sygnału rzeczywistego i oś częstości&lt;br /&gt;
    s - sygnał&lt;br /&gt;
    Fs - częstość próbkowania&lt;br /&gt;
&lt;br /&gt;
    zwraca dodatnią część widma&lt;br /&gt;
    '''&lt;br /&gt;
    S = rfft(s)/np.sqrt(len(s))&lt;br /&gt;
    S_moc = np.abs(S)**2&lt;br /&gt;
    S_moc = S_moc.real&lt;br /&gt;
    F = rfftfreq(len(s), 1/Fs)&lt;br /&gt;
    return (S_moc,F)&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
def szum(mu =0 , sigma = 1, T = 1, Fs = 128):&lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.random.randn(len(t) )*sigma + mu&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def dwadziescia_realizacji(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    *  wygeneruj 20 realizacji sygnału będącego sumą sinusoidy (f=20Hz, T=1s, Fs =100Hz) i szumu gassowskiego&lt;br /&gt;
    * dla każdej realizacji oblicz widmo mocy&lt;br /&gt;
    * wykreśl wszystkie otrzymane widma na wspólnym wykresie &lt;br /&gt;
    '''&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        py.plot(F,moc_w_czestosci)&lt;br /&gt;
    py.show()&lt;br /&gt;
    &lt;br /&gt;
def srednie_widmo(FS):&lt;br /&gt;
    '''&lt;br /&gt;
    #  Skonstruuj funkcję rysującą średnie widmo wraz z 95% przedziałem ufności. &lt;br /&gt;
    '''&lt;br /&gt;
    zbior_widm = np.zeros((20,FS/2+1))&lt;br /&gt;
    for i in range(20):&lt;br /&gt;
        (s,t) = sin(f=10,Fs=FS)&lt;br /&gt;
        (sz,t) = szum(Fs =FS)&lt;br /&gt;
        syg = s + sz&lt;br /&gt;
        (moc_w_czestosci, F) = widmo_mocy(syg, Fs=FS)&lt;br /&gt;
        zbior_widm[i][:] = moc_w_czestosci&lt;br /&gt;
    srednie_w = np.mean(zbior_widm,axis =0)&lt;br /&gt;
    przedzial_d = np.zeros(len(F))&lt;br /&gt;
    przedzial_g = np.zeros(len(F))&lt;br /&gt;
    for f in F:&lt;br /&gt;
        przedzial_d[f] = st.scoreatpercentile(zbior_widm[:,f], 2.5)&lt;br /&gt;
        przedzial_g[f] = st.scoreatpercentile(zbior_widm[:,f], 97.5)&lt;br /&gt;
    py.plot(F,srednie_w,'r')&lt;br /&gt;
    py.plot(F,przedzial_d,'b')&lt;br /&gt;
    py.plot(F,przedzial_g,'b')&lt;br /&gt;
    py.show()&lt;br /&gt;
&lt;br /&gt;
FS =100.0    &lt;br /&gt;
#dwadziescia_realizacji(FS)&lt;br /&gt;
srednie_widmo(FS)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Oszacowanie błędu transformaty Fouriera dla białego szumu ===&lt;br /&gt;
Dla sygnału stochastycznego &amp;lt;math&amp;gt;x(t)&amp;lt;/math&amp;gt;, którego kolejne próbki pochodzą z niezależnych rozkładów normalnych (biały szum), jego transformata Fouriera &amp;lt;math&amp;gt;X(f)&amp;lt;/math&amp;gt; jest liczbą zespoloną, której część rzeczywista &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i urojona &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mogą być uznane za nieskorelowane zmienne losowe o średniej zero i równych wariancjach. Ponieważ transformata Fouriera jest operacją liniową więc składowe  &amp;lt;math&amp;gt;X_R(f)&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;X_I(f)&amp;lt;/math&amp;gt; mają rozkłady normalne. Zatem wielkość:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
P(f) = |X(f)|^2 = X_R^2(f) + X_I^2(f)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
jest sumą kwadratów dwóch niezależnych zmiennych normalnych. Wielkość ta podlega zatem rozkładowi &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o dwóch stopniach swobody.&lt;br /&gt;
Możemy oszacować względny błąd &amp;lt;math&amp;gt;P(f_1) &amp;lt;/math&amp;gt; dla danej częstości &amp;lt;math&amp;gt;f_1&amp;lt;/math&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\epsilon_r= \sigma_{P_{f_1}}/\mu_{P_{f_1}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dla rozkładu &amp;lt;math&amp;gt;\chi_2^2&amp;lt;/math&amp;gt;:  &amp;lt;math&amp;gt;\sigma^2 = 2n&amp;lt;/math&amp;gt; i &amp;lt;math&amp;gt;\mu = n&amp;lt;/math&amp;gt;, gdzie &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; jest ilością stopni swobody. W naszym przypadku &amp;lt;math&amp;gt;n =2&amp;lt;/math&amp;gt; więc mamy &amp;lt;math&amp;gt;\epsilon_f = 1&amp;lt;/math&amp;gt;, co oznacza, że dla pojedynczego binu częstości w widmie &amp;lt;math&amp;gt;P(f)&amp;lt;/math&amp;gt; względny błąd wynosi 100%. &lt;br /&gt;
&lt;br /&gt;
Aby zmniejszyć ten błąd trzeba zwiększyć ilość stopni swobody. Są generalnie stosowane dwie techniki. Pierwsza to uśrednianie sąsiednich binów częstości. Otrzymujemy wówczas wygładzony estymator mocy &amp;lt;math&amp;gt;\hat{P}_k&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{P}_k = \frac{1}{l}[P_k + P_{k+1} + \dots + P_{k+l-1}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zakładając, że biny częstości  &amp;lt;math&amp;gt;P_i&amp;lt;/math&amp;gt; są niezależne estymator &amp;lt;math&amp;gt;P_k&amp;lt;/math&amp;gt; ma rozkład &amp;lt;math&amp;gt;\chi^2&amp;lt;/math&amp;gt; o ilości stopni swobody równej &amp;lt;math&amp;gt;n= 2l&amp;lt;/math&amp;gt;. Względny błąd takiego estymatora to: &amp;lt;math&amp;gt;\epsilon_r= \sqrt{\frac{1}{l}}&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Innym sposobem poprawy estymatora mocy jest podzielenie sygnału na fragmenty, obliczenie periodogramu dla każdego fragmentu, a następnie zsumowanie otrzymanych wartości:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\hat{P}_k=[P_{k,1}+P_{k,2}+\dots+P_{k,j}+\dots+P_{k,q}]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gdzie &amp;lt;math&amp;gt;S_{k,j}&amp;lt;/math&amp;gt; jest estymatą składowej o częstości &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; w oparciu o &amp;lt;math&amp;gt;j-ty&amp;lt;/math&amp;gt; fragment sygnału. Ilość stopni swobody wynosi w tym przypadku &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; zatem względny błąd wynosi: &amp;lt;math&amp;gt;\epsilon_r = \sqrt{\frac{1}{q}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Zauważmy, że w obu metodach zmniejszamy wariancję estymatora kosztem rozdzielczości w częstości.&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 5: Metoda Welcha====&lt;br /&gt;
&amp;lt;!--Proszę napisać i przetestować funkcję implementującą metodę Welcha estymacji widma mocy. Algorytm Welcha:&lt;br /&gt;
# sygnał &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; o długości ''N'' jest dzielony na segmenty, każdy o długości &amp;lt;math&amp;gt;N_s&amp;lt;/math&amp;gt;. Odcinki mogą na siebie zachodzić na &amp;lt;math&amp;gt;N_z&amp;lt;/math&amp;gt; punktów. Czyli są względem siebie przesunięte o &amp;lt;math&amp;gt;N_p = N_s-N_z&amp;lt;/math&amp;gt;.&lt;br /&gt;
# z każdego segmentu liczony jest okienkowany periodogram&lt;br /&gt;
# periodogramy są sumowane&lt;br /&gt;
# wynik dzielony jest przez efektywne wykorzystanie każdego kawałka sygnału w estymacie: &amp;lt;tt&amp;gt;K_eff = dlogosc_okna * ilosc_okien / dlugosc_sygnalu&amp;lt;/tt&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
Proszę zapoznać się zaimplementowaną w bibliotece scipy.signal funkcją [https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.signal.welch.html welch].  Funkcję proszę przetestować obliczając dla funkcji sinus energię sygnału w dziedzinie czasu i w dziedzinie częstości. Testy proszę wykonać dla okna prostokątnego, Blackmana i Haminga. &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!--&lt;br /&gt;
from scipy.signal import welch&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  rfft, rfftfreq&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , F_samp):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    F_samp- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = rfft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = rfftfreq(N_fft, 1/F_samp)&lt;br /&gt;
    return P,F&lt;br /&gt;
    &lt;br /&gt;
def pwelch(s,okienko, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okienko)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
Fs = 100.0&lt;br /&gt;
(x,t) = sin(f = 3.1, T =20, Fs = Fs, phi = 0)&lt;br /&gt;
N = len(x) # dłogość sygnału&lt;br /&gt;
&lt;br /&gt;
okno = np.ones(N)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N)&lt;br /&gt;
#okno = np.hamming(N)&lt;br /&gt;
&lt;br /&gt;
s = x*okno # sygnał okienkowany&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
(P, F) = periodogram(x,okno,Fs)&lt;br /&gt;
py.plot(F,P) &lt;br /&gt;
py.title('periodogram'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
&lt;br /&gt;
#periodogram&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
N_s = N/8&lt;br /&gt;
#okno = np.ones(N_s)#/np.sqrt(N)&lt;br /&gt;
#okno = np.blackman(N_s)&lt;br /&gt;
okno = np.hamming(N_s)&lt;br /&gt;
&lt;br /&gt;
         &lt;br /&gt;
(F, P) = welch(s,Fs,okno,nperseg=N_s,noverlap = N_s/10)&lt;br /&gt;
py.plot(F,P)&lt;br /&gt;
py.title('periodogram Welcha'+' energia: '+ str(np.sum(P)))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Zadanie 6: Porównanie rozdzielczości i wariancji w periodogramie i w estymatorze Welcha====&lt;br /&gt;
#  wygeneruj 100 realizacji sygnału będącego sumą sinusoidy (f = 20 Hz, T = 10 s, Fs = 100 Hz) i szumu gaussowskiego&lt;br /&gt;
# dla każdej realizacji oblicz widmo mocy za pomocą periodogramu okienkowanego oknem Blackmana&lt;br /&gt;
# wykreśl wszystkie otrzymane widma na wspólnym wykresie (subplot(2,1,1))&lt;br /&gt;
# Powtórz krok 2) dla estymatora Welcha z oknem Blackmana o długości 1/10 długości sygnału przesuwanym co 2 punkty, otrzymane widma wykreśl  na wspólnym wykresie (subplot(2,1,2))&lt;br /&gt;
&lt;br /&gt;
* Co można powiedzieć o rozdzielczości i względnym błędzie obu metod?&lt;br /&gt;
&amp;lt;tt&amp;gt;bl_wzg = np.std(S,axis = 0)/np.mean(S,axis = 0)&amp;lt;/tt&amp;gt; gdzie S jest tablicą zawierającą widma dla każdej z realizacji.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
 &lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
from numpy.fft import  fft, fftfreq, fftshift&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
    '''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
    Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
    1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
    '''&lt;br /&gt;
 &lt;br /&gt;
    dt = 1.0/Fs&lt;br /&gt;
    t = np.arange(0,T,dt)&lt;br /&gt;
    s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
    return (s,t)&lt;br /&gt;
&lt;br /&gt;
def periodogram(s, okno , Fs):&lt;br /&gt;
    '''peiodogram sygnału s&lt;br /&gt;
    okno - synał będzie przez nie przemnożony w czasie&lt;br /&gt;
    Fs- częstość próbkowania'''&lt;br /&gt;
&lt;br /&gt;
    s = s*okno&lt;br /&gt;
    N_fft = len(s)&lt;br /&gt;
    S = fft(s,N_fft)#/np.sqrt(N_fft)&lt;br /&gt;
    P = S*S.conj()/np.sum(okno**2)&lt;br /&gt;
    &lt;br /&gt;
    P = P.real # P i tak ma zerowe wartośći urojone, ale trzeba ykonać konwersję typów&lt;br /&gt;
    F = fftfreq(N_fft, 1/Fs)&lt;br /&gt;
    return (fftshift(P),fftshift(F))&lt;br /&gt;
def pwelch(s,okno, przesuniencie, Fs):&lt;br /&gt;
    '''s - sygnał&lt;br /&gt;
    okienko - przebieg czasowy okienka &lt;br /&gt;
    przesuniecie - o ile punktów okienka są przesówane względem siebie&lt;br /&gt;
    Fs - częstość próbkowania'''&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    N_s = len(okno)&lt;br /&gt;
    &lt;br /&gt;
    start_fragmentow = np.arange(0,N-N_s+1,przesuniencie)&lt;br /&gt;
    ile_fragmentow = len(start_fragmentow)&lt;br /&gt;
    ile_przekrycia = N_s*ile_fragmentow/float(N)&lt;br /&gt;
    P_sredni = np.zeros(N_s)&lt;br /&gt;
    for i in range(ile_fragmentow):&lt;br /&gt;
        s_fragment = s[start_fragmentow[i]:start_fragmentow[i]+N_s]&lt;br /&gt;
        (P, F) = periodogram(s_fragment,okno,Fs)&lt;br /&gt;
        P_sredni += P&lt;br /&gt;
    return (P_sredni/ile_przekrycia,F)&lt;br /&gt;
&lt;br /&gt;
def realizacja(T,Fs):&lt;br /&gt;
    (x,t) = sin(f = 20.0, T = T, Fs = Fs, phi = 0)&lt;br /&gt;
    x += 2*np.random.randn(len(x))&lt;br /&gt;
    return x&lt;br /&gt;
&lt;br /&gt;
T=10.0&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
N = T*Fs&lt;br /&gt;
Nw = N/10.0&lt;br /&gt;
okno = np.blackman(N)&lt;br /&gt;
okno_welch = np.blackman(Nw)&lt;br /&gt;
&lt;br /&gt;
N_rep = 100&lt;br /&gt;
S_perio = np.zeros((N_rep,N))&lt;br /&gt;
S_welch = np.zeros((N_rep,Nw))&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(N_rep):&lt;br /&gt;
    s = realizacja(T,Fs)&lt;br /&gt;
    (P, F) = periodogram(s,okno,Fs) &lt;br /&gt;
    S_perio[i] = P&lt;br /&gt;
    py.subplot(2,1,1)&lt;br /&gt;
    py.plot(F,P) &lt;br /&gt;
    (P, F) = pwelch(s,okno_welch,Nw/10,Fs)&lt;br /&gt;
    S_welch[i] = P&lt;br /&gt;
    py.subplot(2,1,2)&lt;br /&gt;
    py.plot(F,P)&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
py.subplot(2,1,1)&lt;br /&gt;
py.plot(np.std(S_perio,axis = 0)/np.mean(S_perio,axis = 0))&lt;br /&gt;
&lt;br /&gt;
py.subplot(2,1,2)&lt;br /&gt;
py.plot(np.std(S_welch,axis = 0)/np.mean(S_welch,axis = 0))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Wielookienkowa metoda Thomsona===&lt;br /&gt;
Metoda ta &lt;br /&gt;
[http://ieeexplore.ieee.org/Xplore/login.jsp?url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel5%2F5%2F31317%2F01456701.pdf%3Farnumber%3D1456701&amp;amp;authDecision=-201 Spectrum estimation and harmonic analysis] &lt;br /&gt;
znana jest pod anglojęzyczną nazwą  ''multitaper''. &lt;br /&gt;
&lt;br /&gt;
Można ją opisać poniższym algorytmem:&lt;br /&gt;
* wygeneruj sekwencję ortogonalnych okienek charakteryzujących się minimalnymi wyciekami widma (stosunek energii w piku centralnym do energii w listkach bocznych jest wysoki). Sekwencja takich okien nazywana jest discrete prolate spheroidal sequences (DPSS) lub sekwencją Slepiana.&lt;br /&gt;
* oblicz widmo sygnału okienkowanego każdym z okien w sekwencji&lt;br /&gt;
* uśrednij otrzymane widma&lt;br /&gt;
&lt;br /&gt;
Kolejne dwa zadania służą zapoznaniu się z tą metodą.&lt;br /&gt;
====Własności okienek DPSS ====&lt;br /&gt;
Do generacji sekwencji okienek DPSS wykorzystamy moduł [http://brain.fuw.edu.pl/edu-wiki/images/f/f6/Gendpss.py Gendpss.py]. Proszę go zapisać w swoim katalogu roboczym. &lt;br /&gt;
Importujemy go do naszych programów tak jak każdy inny moduł np.:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import Gendpss as dpss&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Funkcja potrzebna nam z tego modułu to &amp;lt;tt&amp;gt;gendpss()&amp;lt;/tt&amp;gt;. Funkcja ta wytwarza obiekt reprezentujący konkretną sekwencję DPSS. Wywołujemy ją następująco:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
w = dpss.gendpss(N,NW,K)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
:gdzie: N: długość okna,&lt;br /&gt;
:        NW: iloczyn czas-szerokość pasma&lt;br /&gt;
:        K: ile okien w sekwencji&lt;br /&gt;
Po powyższym wywołaniu obiekt &amp;lt;tt&amp;gt;w&amp;lt;/tt&amp;gt; posiada dwie interesujące nas tablice:&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.lambdas&amp;lt;/tt&amp;gt; - to wartości własne okienek. Są one miarą koncentracji energii w piku głównym, jest to zatem miara jakości okienka (dobre okienka mają wartości własne bliskie 1). Zgodnie z teorią takich wartości powinno być 2*NW-1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;w.dpssarray[i]&amp;lt;/tt&amp;gt; - i-te okienko.&lt;br /&gt;
&lt;br /&gt;
=====Polecenia:=====&lt;br /&gt;
Proszę:&lt;br /&gt;
* wygenerować okienka o długości 256, NW = 2. Ilość okien K raz ustalić na 3 (2*NW-1) a drugi raz na 5. Dla ilu okienek ich wartości własne są bliskie 1?&lt;br /&gt;
* narysować przebieg czasowy okienek&lt;br /&gt;
* sprawdzić czy energia okienek jest znormalizowana do 1.&lt;br /&gt;
* sprawdzić czy kolejne okienka są do siebie ortogonalne. W tym celu należy obliczyć iloczyn skalarny pomiędzy kolejnymi okienkami (np.sum(w.dpssarray[i]*w.dpssarray[j])). &lt;br /&gt;
* wyrysować widma okienek analogicznie jak [[%C4%86wiczenia_3#Badanie_w.C5.82asno.C5.9Bci_okien|w tym ćwiczeniu]]&lt;br /&gt;
&lt;br /&gt;
 *&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def widmo_dB(s, N_fft , F_samp):&lt;br /&gt;
    S = fft(s,N_fft)/np.sqrt(N_fft)&lt;br /&gt;
    S_dB = 20*np.log10(np.abs(S))&lt;br /&gt;
    F = fftfreq(N_fft, 1.0/F_samp)&lt;br /&gt;
    return (fftshift(S_dB),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
NW = 2&lt;br /&gt;
ile_okien = 5#2*NW-1&lt;br /&gt;
N_okna = 256&lt;br /&gt;
w = dpss.gendpss(N=N_okna,NW=NW,K=ile_okien)&lt;br /&gt;
print 'Wartości własne:'&lt;br /&gt;
print w.lambdas&lt;br /&gt;
&lt;br /&gt;
print 'Wartości iloczynów skalarnych pomiędzy kolejnymi okienekami:'&lt;br /&gt;
py.figure(1)&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.plot(w.dpssarray[i])&lt;br /&gt;
    for j in range(i+1):&lt;br /&gt;
        print np.sum(w.dpssarray[i]*w.dpssarray[j]),&lt;br /&gt;
    print&lt;br /&gt;
&lt;br /&gt;
py.figure(2)&lt;br /&gt;
NFFT = N_okna*4&lt;br /&gt;
S=np.zeros((ile_okien,NFFT))&lt;br /&gt;
for i in range(ile_okien):&lt;br /&gt;
    py.subplot(ile_okien,1,i+1)&lt;br /&gt;
    (S_db, F)= widmo_dB(w.dpssarray[i], NFFT, 1.0)&lt;br /&gt;
    S[i,:]=S_db&lt;br /&gt;
    py.plot(F,S_db)&lt;br /&gt;
    py.ylim((-200,20))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Zadanie 7: Estymacja widma mocy metodą multitaper ====&lt;br /&gt;
Proszę napisać funkcję do estymacji mocy metodą multitaper.&lt;br /&gt;
Funkcja powinna pobierać następujące argumenty: sygnał, iloczyn NW, częstość próbkowania sygnału. Funkcja powinna zwracać krotkę &amp;lt;tt&amp;gt;(S,F)&amp;lt;/tt&amp;gt; gdzie &amp;lt;tt&amp;gt;S&amp;lt;/tt&amp;gt; widmo mocy, &amp;lt;tt&amp;gt;F&amp;lt;/tt&amp;gt; skala częstości.&lt;br /&gt;
Przykładowe wywołanie takiej funkcji powinno wyglądać tak:&lt;br /&gt;
&amp;lt;tt&amp;gt; (S,F) = mtm(s,  NW = 3, Fs = 128)&amp;lt;/tt&amp;gt;&lt;br /&gt;
Algorytm do zastosowania wewnątrz funkcji:&lt;br /&gt;
# Oblicz maksymalną liczbę okienek &amp;lt;tt&amp;gt; K = 2*NW-1&amp;lt;/tt&amp;gt;&lt;br /&gt;
# Oblicz długość sygnału&lt;br /&gt;
# wygeneruj serię okienek dpss&lt;br /&gt;
# dla każdego z otrzymanych okienek oblicz widmo mocy iloczynu tego okienka i sygnału. Dla i-tego okienka będzie to: &amp;lt;tt&amp;gt;Si = np.abs(fft(s*w.dpssarray[i]))**2&amp;lt;/tt&amp;gt;&lt;br /&gt;
# uśrednij widma otrzymane dla wszystkich okienek&lt;br /&gt;
# wygeneruj oś częstości (&amp;lt;tt&amp;gt;fftfreq&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Działanie funkcji sprawdź estymując i wykreślając widmo sinusoidy np. o częstości 10 Hz, czasie trwania 1s, próbkowanej 100Hz z dodanym szumem gaussowskim o średniej 0 i wariancji 1. Sprawdź także zachowanie energii przez tą estymatę. Dla porównania na tym samym wykresie dorysuj widmo otrzymane przez [[Nieparametryczne_widmo_mocy#Okienkowanie_a_widmo_mocy:_periodogram|periodogram]] z oknem prostokątnym.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
import pylab as py&lt;br /&gt;
import numpy as np&lt;br /&gt;
import gendpss as dpss&lt;br /&gt;
from numpy.fft import fft,fftshift,fftfreq&lt;br /&gt;
&lt;br /&gt;
def sin(f = 1, T = 1, Fs = 128, phi =0 ):&lt;br /&gt;
	'''sin o zadanej częstości (w Hz), długości, fazie i częstości próbkowania&lt;br /&gt;
	Domyślnie wytwarzany jest sygnał reprezentujący &lt;br /&gt;
	1 sekundę sinusa o częstości 1Hz i zerowej fazie próbkowanego 128 Hz&lt;br /&gt;
	'''&lt;br /&gt;
 &lt;br /&gt;
	dt = 1.0/Fs&lt;br /&gt;
	t = np.arange(0,T,dt)&lt;br /&gt;
	s = np.sin(2*np.pi*f*t + phi)&lt;br /&gt;
	return (s,t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mtm(s, NW = 3, Fs = 128):&lt;br /&gt;
    '''estymacja widma w oparciu o  metodę Multiteper &lt;br /&gt;
    D. J. Thomson, “Spectrum Estimation and Harmonic Analysis,” Proceedings of the&lt;br /&gt;
    IEEE, vol. 70, no. 9, pp. 1055 – 1096, 1982.&lt;br /&gt;
    x - sygnał&lt;br /&gt;
    N -ilość punktów okna&lt;br /&gt;
    NW - iloczyn długości okna w czasie i szerokości w częstości&lt;br /&gt;
    K - ilość okien&lt;br /&gt;
&lt;br /&gt;
    funkcja zwraca estymatę mocy widmowej&lt;br /&gt;
    '''&lt;br /&gt;
    K = 2*NW-1&lt;br /&gt;
    N = len(s)&lt;br /&gt;
    w = dpss.gendpss(N,NW,K)&lt;br /&gt;
    S=np.zeros(N)&lt;br /&gt;
    for i in range(K):&lt;br /&gt;
        Si = np.abs(fft(s*w.dpssarray[i]))**2&lt;br /&gt;
        S[:] += Si.real&lt;br /&gt;
    S = S/K&lt;br /&gt;
    F = fftfreq(N,1.0/Fs)&lt;br /&gt;
    return (fftshift(S),fftshift(F))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fs = 100.0&lt;br /&gt;
NW = 3&lt;br /&gt;
(s,t) = sin(f=10.2,Fs=Fs)&lt;br /&gt;
s = s+np.random.randn(len(s))&lt;br /&gt;
(S,F) = mtm(s, NW = NW,  Fs = Fs)&lt;br /&gt;
py.plot(F,S)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
py.plot( F,fftshift(np.abs(fft(s))**2/len(s) ) ,'g')&lt;br /&gt;
&lt;br /&gt;
print np.sum(S)&lt;br /&gt;
print np.sum(s**2)&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Analiza_sygnałów_-_ćwiczenia]]/Fourier_4&lt;/div&gt;</summary>
		<author><name>JanMaka</name></author>
		
	</entry>
</feed>