Cyfrowe przetwarzanie sygnału
Transkrypt
Cyfrowe przetwarzanie sygnału
Cyfrowe przetwarzanie sygnału Zadanie 1 Artur Angiel 157797 Piotr Jasiak 157853 16 listopada 2012 Wstęp Celem niniejszego sprawozdania jest podsumowanie prac nad programem, którego zadaniem jest generowanie sygnałów cyfrowych, ich prezentacja oraz operacje na nich. 1 Zagadnienia teoretyczne W projekcie zaimplementowane zostało generowanie poniższych sygnałów i szumów: • szum o rozkładzie jednostajnym • szum gaussowski • sygnał sinusoidalny • sygnał sinusoidalny wyprostowany jednopołówkowo • sygnał sinusoidalny wyprostowany dwupołówkowo • sygnał prostokątny • sygnał prostokątny symetryczny • sygnał trójkątny • skok jednostkowy • impuls jednostkowy • szum impulsowy Każdy z nich ma określone parametry wejściowe, na podstawie których oblicza się kolejne wartości. Jako że sygnały te są cyfrowe, zbiór ich wartości od czasu jest zdyskretyzowany. Czas również określony jest na skończonym zbiorze. Wszystkie wartości obliczane są dla równych odstępów czasu, co nazywamy próbkowaniem. Wartością próbkowania jest Herc [Hz]. 1 2 Obsługa programu Program obsługiwany jest bardzo intuicyjnie. Z okna głównego (rys. 1) wybieramy pożądany przez nas sygnał, a interfejs uaktywnia wymagane parametry, które użytkownik musi uzupełnić. Rysunek 1: Okno główne Po wciśnięciu przycisku “Generuj” pokazuje się okno dla wygenerowanego sygnału (szumu) (rys. 2) domyślnie otwartego na zakładce z wykresem amplitudy od czasu [A(t)]. Rysunek 2: Okno z wykresem sygnału 2 Na drugiej zakładce (rys. 3) znajduje się histogram, mówiący o tym, ile razy dana częstotliwość wystąpiła w wygenerowanym sygnale. Rysunek 3: Okno z histogramem 3 Generowanie danych Sposób, w jaki dane zostały wygenerowane jest bardzo prosty, ponieważ wykorzystane zostały wzory podane w instrukcji do zadania1 . Przełożono je ze wzorów matematycznych na instrukcje języka programowania, takie jak pętle i warunki. Przykład Dla funkcji sin: x(t) = Asin( 2π (t − t1 )) T for (int i = 0; i < this.sine.length; i++) { this.sine[i] = A * Math.sin((2 * Math.PI / (T * f)) * (i - (t1 * f))); } W powyższym przykładzie uwzględniona została częstotliwość próbkowania (f ). 1 http://ftims.edu.p.lodz.pl//file.php/154/zadanie1_20101011.pdf 3 4 Implementacja Program napisany został w języku Java 2 , z wykorzystaniem biblioteki graficznej Swing. Do prezentacji wykresów wykorzystano bibliotekę JFreeChart 3 . Podstawową klasą jest MainWindow, która po wyborze wszystkich parametrów wykresu tworzy obiekt klasy DigitalSignal. Do tego obiektu przekazywane są wszystkie parametry, potrzebne do wygenerowania sygnału. W dalszej kolejności MainWindow tworzy nowe okno klasy GeneratedSignal, do którego następnie dodawany jest ChartPanel dziedziczący po klasie JPanel. ChartPanel tworzony jest poprzez przekazanie odpowiedniego obiektu klasy DigitalSignal oraz napisu informującego, który sygnał jest pożądany. 5 Wnioski 2 3 http://java.com http://www.jfree.org/jfreechart/ 4