dr inż. Artur Zieliński Katedra Elektrochemii, Korozji i Inżynierii Materiałowej Wydział Chemiczny PG pokój 311 Politechnika Gdaoska, 2011 r. Publikacja współfinansowana ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego
DSP za darmo Czyli krótkie omówienie sposobu pracy w środowisku GNU-Octave. Program ten różni się od omawianego dotychczas LabVIEW w wielu aspektach. Inny jest sposób interakcji z użytkownikiem. Omawiany program jest również wart popularyzacji ze względu na jego darmową dostępność w Internecie.
Różnorodność Szereg pakietów programistycznych umożliwia cyfrową obróbkę sygnałów. Oprócz LabVIEW omawianego w trakcie wykładu warto wspomnieć o innych rozwiązaniach. Matlab: Interakcja z użytkownikiem na zasadzie interpretera poleceń. Język stosunkowo prosty. Program jest uniwersalny ze względu na szereg rozszerzeń. Jest to program komercyjny. Octave: Jest to klon Matlab rozwijany na wolnej licencji. Charakteryzuje się mniejszą funkcjonalnością od pierwowzoru, ale uczciwie należy przyznać, że zespół programistów cały czas pracuje nad jego rozwojem. Inne programy o podobnej filozofii pracy to SciLab i FreeMat. Matematica, Maple: Są to rozbudowane pakiety matematyczne, jednak bardziej nastawione na obliczenia symboliczne. GSL: dla programujących w C, IT++: dla programujących w C++, www.netlib.org: głównie biblioteki do FORTRANA 3
Przykładowa sesja Celem przykładowej sesji jest rozszyfrowanie kompozycji częstotliwościowej sygnału. Źródłem sygnału będzie plik tekstowy zawierający próbki przebiegu. Częstotliwość próbkowania wynosiła 12 Hz. Narzędziem analizy będzie program GNU Octave pobrany ze strony www.octave.org. Po uruchomieniu widoczne są informacje dotyczące wersji programu, licencji i użytecznych stron internetowych. Na końcu widoczna jest linia poleceń. 4
Nawigacja Nawigacja po strukturze katalogów możliwa jest dzięki poleceniom pwd (wyświetl bieżący katalog), ls (wyświetl zawartość katalogu) oraz cd (zmień katalog). W omawianym przykładzie plik z danymi umieszczony jest w c:\work\pomiar. Zrzut ekranowy przedstawia sposób wykorzystania powyższych poleceń do zmiany ścieżki. 5
Ładowanie i podgląd danych Załadowanie zawartości pliku i umieszczenie go jako wektora danych w przestrzeni roboczej pod nazwą s. Możliwe jest ładowanie plików innych niż tekstowe, informacje na ten temat można znaleźć, wpisując polecenie help load. Wyświetlenie długości (liczby próbek) wektora danych o nazwie s. Wpisanie samej nazwy zmiennej powoduje wyświetlenie jej wartości w sposób przedstawiony na rysunku. 6
Rysunek Zdefiniowanie nowej zmiennej. W tym przypadku jest to częstotliwość próbkowania. Brak średnika na końcu dowolnego polecenia powoduje wyświetlenie przez interpreter jego rezultatu. Stworzenie wektora stanowiącego skalę czasową. Ogólna składnia polecenia: zmienna=początek:krok:koniec; Narysowanie wykresu. Pierwszy argument polecenia to zmienna niezależna, drugi zależna. Możliwe jest rysowanie za pomocą linii o różnym kolorze i grubości. Polecenie plot(t,s, color, k, linewidth,2) narysuje linię o grubości 2 w kolorze czarnym. 7
Obliczenie transformaty Obliczenie transformaty sygnału s i umieszczenie jej w zmiennej S. W środowisku Octave wielkość liter ma znacznie, dlatego S to inna zmienna niż s. Wyświetlenie kolejnych wartości transformaty pozwala stwierdzić, że jest to zgodnie z przewidywaniami zmienna o charakterze zespolonym. Obliczenie widma amplitudowego w oparciu o transformatę. Funkcja abs() to moduł. W przypadku długich wektorów możliwe jest ich przewijanie za pomocą widocznych powyżej klawiszy. 8
Wizualizacja widma Określenie skali częstotliwościowej. Zgodnie z wcześniejszymi spostrzeżeniami, skala widma powinna przebiegać od 0 do f p z krokiem f p /N Narysowanie widma amplitudowego w funkcji częstotliwości. Przedstawione widmo jest mało czytelne. Możliwe jest narysowanie jedynie jego fragmentu. 9
Widmo jednostronne Zapis f(1:n/2) oznacza wybranie ze zboru próbek zmiennej f podzbioru rozpoczynającego się od próbki numer 1, a kończącego na próbce N/2. W Octave indeksowanie rozpoczyna się od 1 w przeciwieństwie do LabVIEW, gdzie zaczyna się od 0. Fragment widma zostaje narysowany czarną linią o grubości 2. Widmo wygląda podobnie do oglądanych wcześniej widm sygnału prostokątnego. Możliwa jest dodatkowa analiza w celu określenia jego charakterystyki. 10
Kilka obliczeń Najpierw, dla wygody, definiujemy dwie nowe zmienne określające widmo jednostronne i jego skalę częstotliwości. W widmie jednostronnym największą wartość ma pierwszy prążek. Przedstawiona konstrukcja znajduje numer próbki, dla której zmienna w1 przyjmuje wartość maksymalną. Polecenie f1(11) podaje wartość wektora częstotliwości odpowiadającą indeksowi 11. Następne polecenie to odwrócenie ostatniego wyniku, czyli wartość okresu. Można ją zweryfikować przez porównanie z okresem przebiegu prostokątnego. 11
Kosmetyka Wykres może zostać uzupełniony o opisy osi oraz siatkę. Gotowy rysunek można wyeksportować do pliku graficznego. 12
Fala podstawowa Generujemy falę sinusoidalną, której jeden okres przypada na N próbek. Następnie obliczamy jej widmo i rysujemy jego 10 pierwszych prążków. Taka fala określa częstotliwość podstawową. 13
i jej harmoniczne Gdy w sygnale o skończonej liczbie próbek mieści się całkowita liczba okresów fali, jej częstotliwość stanowi wielokrotność częstotliwości podstawowej i jej prążek widmowy prawidłowo odzwierciedla amplitudę i częstotliwość. Jest to sytuacja zbliżona do napotkanej przy okazji szeregu Fouriera. Jednak szereg opisywał funkcje okresowe o dziedzinie rozciągającej się od minus do plus nieskończoności. W przypadku DFT długość sygnału jest ograniczona. Częstotliwość podstawowa nie wynika z okresu badanej funkcji, a jest narzucana przez długość rejestru danych. 14
Niedopasowana fala Gdy częstotliwość analizowanej fali nie stanowi całkowitej wielokrotności częstotliwości podstawowej w jej widmie obserwujemy zniekształcenie znane jako przeciek widma. 15
Przeciek widmowy Zaobserwowane zjawisko jest szczególnie nieprzyjemne w przypadku analizy sygnałów o zbliżonych częstotliwościach. W przedstawionej sytuacji interpretacja widma jest utrudniona ze względu na obecność wysokiego poziomu tła wprowadzanego przez przeciek. 16
Funkcja okna Techniką pozwalającą na zmniejszenie niekorzystnego wpływu przecieku jest zastosowanie tak zwanej funkcji okna. Funkcje takie mogą być wygenerowane za pomocą środowiska Octave. Okno Hanninga Okno Hamminga 17
Sposób działania Wykorzystanie funkcji okna polega na wymnożeniu jej przez analizowany sygnał. W środowisku Octave, chcąc wykonać mnożenie dwóch przebiegów wyraz po wyrazie, konieczne jest dodanie kropki przed symbolem mnożenia. W przeciwnym razie program zinterpretuje operację jako mnożenie macierzowe. W rezultacie otrzymany został przebieg badany oscylujący wewnątrz obwiedni wyznaczanej przez funkcję okna. 18
Rezultat Na widmie sygnału poddanego operacji oknowania prążek odpowiadający drugiej składowej jest nieco bardziej wyeksponowany dzięki obniżeniu tła. 0,021 Hz widmo sygnału surowego widmo sygnału zmodyfikowanego 19
Podsumowanie Darmowe oprogramowanie, takie jak GNU Octave, może stanowić do pewnego stopnia alternatywę dla rozwiązań komercyjnych przeznaczonych do cyfrowego przetwarzania sygnałów. Wiele informacji dotyczących pracy w omawianym środowisku dostępnych jest na stronie projektu www.octave.org, jak również we wbudowanym systemie pomocy. Stosunkowo duży stopień kompatybilności pozwala również na wykorzystanie dostępnej literatury dotyczącej popularnego pakietu Matlab. Przy okazji omawiania oprogramowania przedstawiony został niekorzystny efekt przecieku widmowego, pojawiając się, gdy okres funkcji sinusoidalnej nie jest dopasowany do ilości próbek sygnału poddawanych analizie DFT. 20
Następne zagadnienie Na tym kończy się omawianie zagadnienia analizy widmowej. Nie jest to jednak koniec pracy, ponieważ sygnał cyfrowy jest to sygnał, który ma zarówno dyskretną dziedzinę, jak i przeciwdziedzinę. 21