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