Spectrum Analyser V1.9 PL Spectrum Analyser (c)1995 Dariusz J. "Thufor" Garbowski reqtools.library (c)1991-1993 Nico Franēois "Spectrum Analyser" jest programem GiftWare (wiėcej na temat GiftWare w rozdziale "Co to jest GiftWare?"). Pierwsza jego wersja ukazaīa siė pod nazwā "Analizator Widma V1.0" i zostaīa napisana jako praca dyplomowa. Obecna wersja jest udoskonaleniem tego programu. Wstėp ----- "Spectrum Analyser" jest programem edukacyjnym. Celem jego napisania byīo graficzne zobrazowanie teorii szeregów trygonometrycznych Fouriera. Poza obejrzeniem widma przebiegu program pozwala na zaobserwowanie wpīywu poszczególnych skīadowych (harmonicznych) na ksztaīt analizowanego przebiegu. Daje równieū moūliwoōź zaobserwowania wpīywu skīadowej staīej oraz braku wyūszych harmonicznych na ksztaīt przebiegu (poprzez ograniczenie liczby obliczanych skīadowych). "Śródīem inspiracji" byī dla mnie artykuī Williama Mobiusa "Analiza spektralna Fouriera" (Magazyn Amiga 8/94, 9/94). Temat zainteresowaī mnie na tyle, ūe postanowiīem napisaź program realizujācy postawione w treōci artykuīu zaīoūenia. Poza tym wykorzystaīem wiadomoōci wīasne zdobyte w szkole na lekcjach podstaw elektrotechniki ;-? Podziėkowania ------------- Dziėkujė nastėpujācym osobom: mgr Henryk Hudy za moūliwoōź realizacji takiej pracy dyplomowej oraz za wszelkie uwagi, mgr Bogdan Hering za przekazanā wiedzė z zakresu podstaw elektrotechniki, Elis/TRSI (ex Freezers ;-) za nieocenionā pomoc podczas kodowania i za caīoksztaīt [thanx, my friend!], William Mobius za wspaniaīy artykuī "Analiza spektralna Fouriera" w Magazynie Amiga, Mydīo/Ind za poūyczenie drukarki i caīoksztaīt [heya!], Warhawk/CCP (ex. Obsession & Illusion) za ikonkė oraz caīoksztaīt, Marcin "Duddie" Dudar za ōwietne artykuīy w Kebabie #1, #2, #3 i C64+4&Amiga, Nico Franēois for his holy reqtools.library! Co to jest GiftWare? -------------------- Program ten jest programem GiftWare. Co to oznacza? Znaczy to, ūe moūe byź kopiowany dopóki bėdzie zawieraī wszystkie wyszczególnione w tej dokumentacji pliki w postaci niezmienionej. Moūe byź rozprowadzany w postaci archiwum. Dozwolone jest równieū dokīadanie dodatkowych przebiegów przykīadowych. Nie zezwalam na pobieranie opīat za skopiowanie programu (za wyjātkiem kosztów noōnika i opīat pocztowych). W archiwum powinny siė znajdowaź nastėpujāce pliki: SpectrumAnalyser SpectrumAnalyser.info SpectrumAnalyser.doc SpectrumAnalyser.doc.info Samples/SPA.COS_127 SPA.IMP_100 SPA.SIN_127 SPA.SIN_127_wyprost SPA.SQR0_127 SPA.SQR0_127_25% SPA.SQR0_64+32 SPA.SQR180_127 SPA.SQRX1 SPA.SQRX1_wyprost SPA.SQR_127_max_czst SPA.TAW0 SPA.TAW180 SPA.TRI90_127 SPA.TRI_127 libs/mathtrans.library reqtools.library Komentarza wymaga przebieg przykīadowy "SPA.SQR_127_max_czst". Jest to 256 okresów przebiegu prostokātnego o amplitudzie 127. Kaūdy okres skīada siė z dwóch próbek: jednej 127, drugiej -127. Analiza tego przebiegu wykaūe, ūe pierwsze 255 harmonicznych ma wartoōź 0. Co to oznacza? Proponujė siė nad tym zastanowiź. (Wskazówka: 256 harmoniczna ma istnieje! Jej wartoōź jest róūna od 0.) Jeōli program spodobaī Ci siė, czegoō Ciė nauczyī lub po prostu masz chėź obdarowania autora, przeōlij na mój adres (na koļcu dokumentacji, w INFO w programie) jakiō podarunek, kartkė pocztowā, wīasny program lub niewielkā sumė pieniėdzy (yeah! money, money!). Zdopinguje mnie to do dalszej pracy nad programem. Instrukcja obsīugi ------------------ Program jest w 100% obsīugiwany przy pomocy myszy. Po uruchomieniu ukazuje siė okienko zawierajāce informacje o programie oraz adres autora. Wciōniėcie gadūetu "OK" powoduje przejōcie do dalszej czėōci programu, inny wybór - dodatkowe informacje, podziėkowania, pozdrowienia. Program otwiera swoje okno na ekranie workbencha. W górnej czėōci okna znajdujā siė gadūety obsīugi, natomiast w dolnej obrazowane sā wyniki dziaīania programu. W dolnej czėōci okna znajdujā siė cztery osie wspóīrzėdnych obrazujāce kolejno: 1. Przebieg - wyglād analizowanego przebiegu [A/t]. 2. Skīadowe sinus - zawiera skīadowe sinusoidalne widma przebiegu (kolejno: pierwsza harmoniczna, druga, itd.) oraz skīadowā staīā (zaznaczonā na biaīo). 3. Skīadowe cosinus - skīadowe cosinusoidalne widma (j.w.). 4. Resynteza - wyglād przebiegu resyntezowanego na podstawie obliczonych skīadowych. Górna czėōź okna Poszczególne funkcje programu wywoīywane sā przy pomocy gadūetów. Sā to kolejno: 1. ĪADUJ - wczytanie przebiegu z dysku (lub innego urzādzenia) do bufora. 2. ANALIZA - gīówna funkcja programu. Analizuje wczytany przebieg. Dokīadniejsze informacje poniūej. 3. CZYŌŹ BUFOR - czyōci bufor przebiegu. 4. INFO - wyōwietla okienko informacyjne o programie, autorze, itp. 5. WYJŌCIE - opuszczenie programu (równoznaczne z systemowym gadūetem wyjōcia w lewym górnym rogu okna). 6. Suwak - wybór liczby skīadowych do obliczenia. Po wybraniu opcji "ANALIZA" program przystėpuje do analizy widma przebiegu znajdujācego siė w buforze. W przypadku, gdy bufor jest pusty program wyōwietli "wybieraczkė" plików z proōbā o wybranie przebiegu do wczytania. Analiza trochė trwa, szczególnie w przypadku wczytania dīugiego przebiegu lub obliczania duūej liczby skīadowych, wiėc dla niecierpliwych pojawia siė okienko zawierajāce gadūet "STOP" sīuūācy do przerwania analizy oraz wskaśnik procentów wykonenj pracy. Po dokonaniu niezbėdnych obliczeļ program przystėpuje do resyntezy przebiegu na podstawie wyliczonych skīadowych. Sā one kolejno sumowane (poczāwszy od skīadowej staīej) a wynik jest uwidaczniany na dolnym wykresie. Odtworzony przebieg moūe byź wiernym odpowiednikiem analizowanego (np. sinus), lub posiadaź mniejsze lub wiėksze znieksztaīcenia (np. prostokāt). Zaleūy to m.in. od iloōci obliczonych skīadowych oraz od samego analizowanego przebiegu. UWAGA: wczytywane przebiegi powinny byź w formacie 8-bitowych sampli "raw normal". Sā one traktowane jako JEDEN OKRES caīego przebiegu! (Wynika to z samej teorii, ale o tym poniūej). Trochė teorii... ---------------- Kaūdy przebieg (np. prādu, napiėcia, czy choźby fali dświėkowej) skīada siė z mniejszej lub wiėkszej iloōci przebiegów prostych. Czym jest przebieg prosty? Przebieg prosty jest, najproōciej mówiāc, przebiegiem o ksztaīcie sinusoidalnym. Sumujāc ze sobā okreōlonā liczbė przebiegów prostych o odpowiedniej amplitudzie, czėstotliwoōci i fazie moūemy otrzymaź dowolny inny przebieg. [Dla tych, którzy nie wiedzā czym jest faza wyjaōniam, ūe jest to - w przypadku przebiegów o ksztaīcie sinusoidy - róūnica fazy poczātkowej przebiegu w stosunku do przebiegu sinusoidalnego, np. cosinus posiada przesuniėcie fazowe +90 stopni.] Przebieg prosty (w przybliūeniu) generuje np. tzw. kamerton, czyli urzādzenie ("kawaīek drutu") w ksztaīcie wideīek sīuūāce do strojenia instrumentów muzycznych, np. gitary. Moūna go równieū uzyskaź przy pomocy elektronicznych generatorów, np. Colpitz'a, czy syntezatorów dūwiėku. Po zsumowaniu odpowiednich przebiegów prostych moūemy otrzymaź dowolny inny przebieg. Teoretyczne podstawy analizy sygnaīów opracowaī francuski fizyk i matematyk Jean Baptiste Joseph Fourier. Jest to tzw. szereg trygonometryczny Fouriera. Wōród doōwiadczeļ z tego zakresu moūemy wymieniź analizė dświėku przeprowadzonā w roku 1863 przez niemieckiego fizyka Hermana Ludwika von Helmholtza. Wykorzystaī on w tym celu szereg róznych pustych kul szklanych i metalowych, z których kaūda wpadaīa w drgania pod wpīywem danego tonu prostego (tonu o danej czėstotliwoōci). Tak przy okazji: Helmholtz zajmowaī siė m.in. zjawiskiem rezonansu, od niego pochodzi nazwa tzw. rezonatora Helmholtza. Analiza sygnaīów oparta na szeregu trygonometrycznym Fouriera znajduje zastosowanie tylko w przypadku przebiegów okresowych. Teraz wyjaōniė kilka pojėź, bez których zrozumienie dalszej czėōci wywodu bėdzie niemoūliwe. Przebiegi okresowe posiadajā okres, tj. najmniejszy przedziaī czasu, po którym przebieg powtórzy siė identycznie. Okres oznacza siė duūā literā T. Przebiegi okresowe ze wzglėdu na ksztaīt moūemy podzieliź na: 1. Sinusoidalne. 2. Odksztaīcone. Przebiegi sinusoidalne przedstawiamy za pomocā wartoōci chwilowych: f(t) = A * sin(w*t+fi) [Z powodów technicznych w powyūszych wzorach zastosowaīem nastėpujāce oznaczenia: A - amplituda przebiegu (wartoōź maksymalna, szczytowa) w - (powinna byź "maīa omega grecka") pulsacja (prėdkoōź kātowa) t - czas fi - (powinno byź "maīe fi greckie") faza poczātkowa przebiegu Z tych samych powodów musiaīem w zastėpstwie dolnych indeksów zastosowaź indeks w postaci normalnej litery, bādś cyfry wziėtej w nawias kwadratowy. I tak t[n] oznacza "t z indeksem n", a nie "t razy n", czy "t od n". Poza tym w zastėpstwie znaku "nieskoļczonoōź" zastosowaīem "oo".] Wartoōź chwilowa umoūliwia okreōlenie wartoōci przebiegu w dowolnej chwili czasu t. Dla danego przebiegu sinusoidalnego amplituda jest wartoōciā staīā. (w*t+fi) jest to tzw. faza przebiegu. Pulsacja, czyli prėdkoōź kātowa jest wyraūona wzorem: 2*PI w = ------ = 2*PI*f T gdzie: w - ("maīa omega") pulsacja PI - liczba pi = 3.14159265... T - okres f - czėstotliwoōź f = 1/T [1/s=Hz] Przebieg sinusoidalny - sygnaī sinusoidalny, sygnaī zmieniajācy siė cyklicznie, którego wartoōź chwilowa przybiera w czasie wartoōci zgodne z funkcjā: f(t)=A*sin(w*t+fi). Okres przebiegu sinusoidalnego, wyraūony w sekundach jest odwrotnoōciā czėstotliwoōci sygnaīu T=1/f. Przebiegi odksztaīcone sā przebiegami okresowymi niesinusoidalnymi (np. przebieg trójkātny, prostokātny). Kaūdy przebieg odksztaīcony moūna przedstawiź za pomocā szeregu trygonometrycznego Fouriera. Poniūsze wyprowadzenie przedstawiam dla tych, których teoria szeregów trygonometrycznych zainteresowaīa na tyle, ūe "wgryzienie siė" w te matematyczne wzory ich nie odstrasza: oo --- f(t) = > C[k] * sin(k*w*t + fi[k]) = --- k=0 = C[0]*sin(fi[0]) + C[1]*sin(w*t+fi[1]) + C[2]*sin(2*w*t+fi[2]) + ... + + C[n]*sin(n*w*t+fi[n]) + ... Zgodnie z szeregiem trygonometrycznym przebieg odksztaīcony skīada siė ze skīadowej staīej C[0]*sin(fi[0]) oraz nieskoļczonej liczby przebiegów sinusoidalnych róūniācych siė amplitudā, fazā poczātkowā i czėstotliwoōciā. Skīadowa staīa, zgodnie ze swojā nazwā, jest przebiegiem staīym, nie zmieniajācym swej wartoōci w czasie; wynika to równieū z jej wzoru. Przebiegi sinusoidalne w szeregu nazywamy harmonicznymi. C[1]*sin(w*t+fi[1]) - harmoniczna podstawowa (pierwsza). Czėstotliwoōź tej harmonicznej jest równa czėstotliwoōci przebiegu odksztaīconego. Pozostaīe harmoniczne nazywamy wyūszymi harmonicznymi. Im wyūsza harmoniczna, tym wiėksza jej czėstotliwoōź. Harmoniczne moūemy podzieliź na: 1. Parzyste, np. C[2]*sin(2*w*t+fi[2]). 2. Nieparzyste, np. C[1]*sin(w*t+fi[1]). Weśmy dla przykīadu przebieg o czėstotliwoōci 400 Hz. Skīadowa staīa tego przebiegu ma czėstotliwoōź 0 Hz (staīā wartoōź), skīadowa podstawowa (pierwsza) 400 Hz, natomiast kolejne: druga - 2 * 400 = 800 Hz, trzecia - 3 * 400 = 1200 Hz, czarta - 4 * 400 = 1600 Hz, itd. Teraz przytoczė dalszā czėōź wyprowadzenia wzoru na kolejne skīadowe (jeōli Ciė to nie interesuje, bādś tego nie rozumiesz - pomiļ to). Z trygonometrii wynika, ūe: sin(x+y) = sin(x)*cos(y) +cos(x)*sin(y) stād: C[k] * sin(k*w*t + fi[k]) = = C[k] * cos(fi[k]) * sin(k*w*t) + C[k] * sin(fi[k]) * cos(k*w*t) = \______ _______/ \______ _______/ \/ \/ B[k] A[k] = A[k] * cos(k*w*t) + B[k] * sin(k*w*t) Skīadowa staīa: A[0] ---- = C[0] * sin(fi[k]) 2 stād: oo oo --- --- f(t) = A[0]/2 + > A[k] * cos(k*w*t) + > B[k] * sin(k*w*t) --- --- k=1 k=1 ^ ^ ^ skīadowa harmoniczne harmoniczne staīa cosinusoidalne sinusoidalne Powyūszy szereg trygonometryczny dotyczy przebiegów analogowych. Dla przebiegów cyfrowych (dyskretnych; bo takie bėdziemy analizowaź) wzory na poszczególne skīadowe wyglādajā w nastėpujācy sposób: N-1 --- (przy czym naleūy pamiėtaź, ūe A[0] = 2/N * > x[n] skīadowa staīa wynosi A[0]/2) --- n=0 N-1 --- A[j] = 2/N * > x[n] * cos(j*t[n]) --- n=0 N-1 --- B[j] = 2/N * > x[n] * sin(j*t[n]) --- n=0 gdzie: 2*PI*n t[n] = -------- N j = 1, 2, ... , k < N/2 ; indeks harmonicznej N - liczba próbek sygnaīu n - indeks próbki sygnaīu, liczony od zera PI = 3.14159265... Przy analizie sygnaīów cyfrowych jedynym ograniczeniem jest liczba analizowanych próbek (N), która musi byź parzysta, oraz pasmo analizowanych czėstotliwoōci. Czėstotliwoōź próbkowania musi byź co najmniej dwa razy wiėksza od czėstotliwoōci analizowanego przebiegu. Jest to zwiāzane z tzw. czėstotliwoōciā Nyquista, czyli najmniejszā czėstotliwoōciā próbkowania sygnaīu analogowego przy której sygnaī ten zostanie przeksztaīcony na cyfrowy bez znieksztaīcenia niesionej informacji. Np. jeūeli mamy sygnaī analogowy o czėstotliwoōci 8 kHz, to czėstotliwoōź próbkowania musi wynosiź co najmniej 16 kHz. Z tego wynika równieū to, ūe liczba analizowanych harmonicznych moūe wynieōź co najwyūej (N-1)/2. Np. Jeūeli mamy 512 próbek moūemy zanalizowaź (512-1)/2 = 255 skīadowych. Czyli im wiėcej mamy próbek (im wiėksza czėstotliwoōź próbkowania), tym wiėcej harmonicznych moūemy zanalizowaź i dokīadniej okreōliź widmo sygnaīu. Na postawie wyliczonych skīadowych, czyli znajāc szereg trygonometryczny Fouriera dla danego przebiegu, moūemy odtworzyź przebieg zanalizowany. W tym celu po prostu sumujemy wszystkie harmoniczne. Tė funkcjė program wykonuje po zanalizowaniu przebiegu, czego wynik moūemy obserwowaź na osi oznaczonej jako "Resynteza". Im wiėcej znamy skīadowych, tym dokīadniej moūemy odtworzyź przebieg zanalizowany. Jak wiėc daje siė zauwaūyź sygnaī da siė zapisaź w postaci sumy przebiegów: sinus, cosinus (przesuniėcie fazowe +90 stopni), minus sinus (przesuniėcie 180 stopni) oraz minus cosinus (-90 stopni). Proponujė powyūsze wnioski przeanalizowaź, a podane przykīady przebiegów wczytaź do "Spectrum Analyser'a" i obejrzeź widma wraz z przebiegiem zresyntezowanym, oraz zastanowiź siė nad otrzymanymi wynikami. Podziaī przebiegów odksztaīconych --------------------------------- Przebiegi odksztaīcone moūemy podzieliź nastėpujāco: 1. Przebieg przemienny - takim przebiegiem jest np. przebieg sinusoidalny i trójkātny (zobacz np. SIN_127.SPA, TRI_127.SPA). Dla tych przebiegów nie wystėpuje skīadowa staīa - jest ona równa 0. A[0] ---- = 0 2 2. Przebieg symetryczny wzglėdem poczātku ukīadu wspóīrzėdnych - jest to taki przebieg, dla którego wartoōź f(-x)=-f(x). (Zobacz SIN_127.SPA, SPA.TRI_127, SPA.IMP_100). W szeregu trygonometrycznym wystėpujā tylko harmoniczne sinusoidalne. A[0] ---- = 0 2 A[k] = 0 3. Przebieg symetryczny wzglėdem osi rzėdnych (oy) - taki przebieg, którego wartoōź f(x)=f(-x). Najlepszym przykīadem jest przebieg cosinusoidalny (SPA.COS_127 oraz np. SPA.TRI90_127). W szeregu trygonometrycznym wystėpujā tylko skīadowe cosinusoidalne. B[k] = 0 4. Przebieg antysymetryczny - przebieg, dla którego wartoōź f(x)=-f(x+PI). Przykīadem takiego przebiegu jest sinus (zobacz SPA.SIN_127 oraz SPA.SQRX1). W szeregu trygonometrycznym wystėpujā harmoniczne sinusoidalne i cosinusoidalne nieparzyste, nie wystėpuje skīadowa staīa. A[0] ---- = 0 2 A[2l] = 0 B[2l] = 0 5. Przebieg antysymetryczny wyprostowany caīofalowo - przebieg, którego wartoōź f(x)=f(x+PI); przykīadem takiego przebiegu jest wyprostowany caīofalowo sinus (zobacz SPA.SIN_127_wyprost oraz SPA.SQRX1_wyprost). W szeregu trygonometrycznym wystėpujā harmoniczne sinusoidalne i cosinusoidalne parzyste. A[2l+1] = 0 B[2l+1] = 0 Po co to wszystko? ------------------ Gdzie w ogóle ma zastosowanie powyūsza teoria? Ostatnio wiele sīychaź o cyfrowych magnetofonach: DAT, DCC, systemie Mini-Disc, a odtwarzacze pīyt CD zadomowiīy siė juū u nas na dobre. Wīaōnie w technice cyfrowej znalazīa zastosowanie tzw. Szybka Transformata Fouriera (FFT, z ang. Fast Fourier Transform). Zastosowano jā miėdzy innymi przy cyfrowej filtracji dświėku. DFT to skrót angielskiej nazwy Dyskretnej Transformaty Fouriera (Discrete Fourier Transform). Pozwala ona na zanalizowanie widma przebiegu cyfrowego (np. takiego, jaki wczytujemy do "Spectrum Analyser'a"). Jest ona doōź wolna, dlatego teū opracowano algorytm FFT, który jest o wiele szybszy, niemniej zastosowano w nim pewne uproszczenie. Wiėcej na ten temat moūna przeczytaź w artykule Williama Mobiusa "Analiza Spektralna Fouriera" (Magazyn Amiga 8/94). Informacje techniczne --------------------- Program zostaī napisany w 100% w asemblerze. Wykorzystaīem w nim procedurė 'dborderprop' oraz 'prepare_name' by Elis [Elis, thanx!]. Przebiegi zostaīy wygenerowane w asemblerze lub Amosie. Majā one dīugoōź 512 bajtów, i takā teū dīugoōź zalecam dla przebiegów do analizy. Krótsze nie pozwalajā na obliczenie maksymalnej oferowanej przez program liczby skīadowych (255), natomiast dīuūsze powodujā wydīuūenie czasu trwania obliczeļ. Nie ma jednak problemów z analizā przebiegów krótszych (min. 192 bajty) lub dīuūszych (max. 65535 bajtów). Wczytywane pliki sā traktowane jako 8-bitowa próbka (sample) w formacie "raw normal". "Spectrum Analyser" byī testowany na A500, OS1.3, 1 MB Chip, z dodatkowā stacjā dysków 3.5" oraz A1200, OS3.0, 2 MB Chip, 4 MB Fast, MC68881, HD 122 MB. Przyszīoōź ---------- Co moūna zmieniź w programie w przyszīoōci? 1. Zoptymalizowaź procedurė rozkīadu przebiegu na kolejne skīadowe, aby skróciź czas oczekiwania na wynik obliczeļ, napisaź wersjė na koprocesor matematyczny MC68881/MC68882. 2. Doīāczyź procedurė odsīuchu przebiegu analizowanego i resyntezowanego. 3. Doīāczyź menu rozwijane. 4. Doīoūyź skalowanie amplitudy widma. Ma to znaczenie w przypadku widm, w których skīadowe majā niewielkie amplitudy, w zwiāzku sā one obrazowane jednym lub dwoma punktami ponad oō. Zakoļczenie ----------- Jeōli masz jakieō sugestie, uwagi, znalazīeō w programie jakiō bīād, itp., pisz na adres: Dariusz J. Garbowski ul. Lokietka 22/2 43-200 Pszczyna Poland Europe Literatura ---------- 1. Mobius William: Analiza spektralna Fouriera. Magazyn Amiga 8/94, 9/94. 2. Praca zbiorowa: Leksykon Techniki hi-fi i video. Wydawnictwa Komunikacji i Īācznoōci 1984.