home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 07 / ami26 < prev    next >
Text File  |  1997-04-15  |  17KB  |  391 lines

  1. 7 obrazków DSP555_?.GIF w tym katalogu, OSTATNI MA MIEÊ 1,5x wys i szer (3 szpalty)
  2.  
  3. DSP dla kaûdego (cz. 5.)
  4. ------------------------
  5.  
  6. FFT, BASIC i ASEMBLER
  7.  
  8. <lead>W tym miesiâcu nieco na luzie otwieram piâtâ czëôê
  9. cyfrowego przetwarzania sygnaîów dla kaûdego. Poniewaû mamy juû
  10. wakacje, a moûe wîaônie dlatego, zajmiemy sië baaaardzo trudnym
  11. zagadnieniem, a mianowicie praktycznym zastosowaniem algorytmu
  12. FFT dla potrzeb wizualizacji widma sygnaîu muzycznego. Koledzy
  13. poczâtkujâcy nieco sië tu zawiodâ, gdyû zagadnienia tu poruszane
  14. istotnie do îatwych nie naleûâ, ale za to odcinek ten ucieszy na
  15. pewno obeznanych nieco z tematem. No cóû, wszystkich zadowoliê
  16. sië nie da.
  17.  
  18. <a>William Mobius
  19.  
  20. <txt>Pokazywanie widma sygnaîu muzycznego ma bardzo duûo
  21. zastosowaï: w oglâdaniu zakîóceï sygnaîu, wizualizacji mowy
  22. ludzkiej, analizie dúwiëku itd. Podam przykîad. Otóû podczas
  23. rekonstrukcji nagrania, pochodzâcego ze starych taôm w Polskim
  24. radiu, reûyser dúwiëku usîyszaî buczenie na tle muzyki. Poniewaû
  25. buczenie to zostaîo juû wmiksowane razem z dostarczonym
  26. nagraniem, przeto naleûaîo je, mówiâc fachowo, "wyczyôciê".
  27. Posîuûono sië zatem analizatorem widma, to jest przyrzâdem,
  28. pokazujâcym na osi czëstotliwoôci poszczególne skîadowe sygnaîu.
  29. Oglâdajâc takie widmo w studiu dla fragmentu muzyki, reûyser
  30. zauwaûyî tam dwie duûe skîadowe. Patrz rys. 2. Byîy to: 50 Hz i
  31. 100 Hz, czyli podstawowa skîadowa i jej wielokrotnoôê,
  32. charakterystyczne dla prâdu zmiennego w sieci. Innymi sîowy,
  33. kiepska aparatura elektroakustyczna, uûyta w poprzednim nagraniu,
  34. daîa o sobie znaê, poniewaû skîadowe te, czyli tzw. tëtnienie,
  35. przeniknëîo z sieci zasilajâcej do nagrania. Dziëki wyodrëbnieniu
  36. zakîócenia wystarczyîo wîâczyê w tor miksera dwa pasmowo-zaporowe
  37. filtry szpilkowe, czyli tzw. filtry klasy notch, dziëki czemu
  38. kopia nagrania pozbawiona zostaîa uciâûliwego buczenia, a samo
  39. nagranie minimalnie znieksztaîcone. Dlaczego?
  40.  
  41. Wydawaê by sië mogîo, ûe sama muzyka takûe moûe zawieraê w
  42. pewnych momentach te skîadowe (instrumenty basowe), lecz braku
  43. tych dwóch czëstotliwoôci, tj. 50 Hz i 100 Hz, tak naprawdë
  44. sîuchacz nie zauwaûy (patrz rys. 4.). W rzeczywistoôci stosuje
  45. sië bardziej wymyôlne techniki usuwania zakîóceï (np. dynamiczne
  46. filtrowania, przez co w zasadzie nie ma sîyszalnej przerwy w
  47. paômie), ale pominiemy tu te sprawy, poniewaû chodziîo mi tylko o
  48. pokazanie jednego z zastosowaï zobrazowania widma sygnaîu. A przy
  49. okazji: podana tu metoda przyda sië i amigowym muzykom. Swego
  50. czasu dostaîem na gieîdzie sporo sampli, które miaîy w tle
  51. zakîócenie takim wîaônie przydúwiëkiem sieciowym (prawdopodobnie
  52. samplowane za pomocâ jakiegoô samplera firmy "no name").
  53. Normalnie tego nie sîychaê (wiëkszoôê ludzi "puszcza sobie"
  54. moduîy na monitorze 1084 S, który ma fatalnâ fonië). Ale po
  55. zaîoûeniu dobrych sîuchawek wychodzi wszystko jak na dîoni,
  56. wiëkszoôê sampli jest "brudna" (zaszumiona, z przydúwiëkami).
  57. Dopiero dziëki odpowiedniej analizie i filtracji moûna sië byîo
  58. pozbyê tego paskudnego brzëczenia.
  59.  
  60. Podana wczeôniej metoda analizy dúwiëku przez zastosowanie
  61. szeregów trygonometrycznych Fouriera, miaîa pewne ograniczenia,
  62. miëdzy innymi byîa bardzo powolna i miaîa w zasadzie zastosowanie
  63. tylko do sygnaîów okresowych, takich jak np. piîa, sinus i
  64. inne... Natomiast do analizy dúwiëków nieokresowych, a zwîaszcza
  65. takich o widmie zîoûonym, z duûâ zawartoôciâ skîadowych losowych
  66. (szumu) i innych skomplikowanych dúwiëków lepiej nadaje sië tzw.
  67. >przeksztaîcenie caîkowe Fouriera<, w wersji dyskretnej, czyli
  68. DFT (Discrete Fourier Transform), które jest podobne do szeregów
  69. Fouriera, choê otrzymany wynik jest nieco inny. W tym artykule
  70. przedstawië szybkâ odmianë tej metody, czyli tzw. metodë FFT
  71. (ang. Fast Fourier Transform -- pol. SPF Szybkie Przeksztaîcenie
  72. Fouriera), które dziëki specjalnemu algorytmowi jest przy duûej
  73. liczbie próbek ôrednio kilkadziesiât razy szybsze, i to tym
  74. wiëcej, im wiëcej jest próbek sygnaîu. Wystarczy tu wiedzieê, ûe
  75. klasyczne DFT wymaga:
  76.  
  77. <l>n^2
  78.  
  79. <txt>mnoûeï i dodawaï podczas gdy zastosowana tu wersja algorytmu FFT
  80. wymaga tylko:
  81.  
  82. <l>N*Log2(n)
  83.  
  84. **************************************
  85. DO SKÎADU: N razy logarytm przy podstawie 2 z n.  dwójkë skîad
  86. powinien umieôciê nieco niûej tekstu i mniejszâ czcionkâ, tak jak
  87. sië oznacza logarytmy ************************************** ***
  88.  
  89. Ma ona tylko të wadë, ûe wymaga liczby próbek, bëdâcej wynikiem
  90. szeregu N=2^p, czyli N=2,4,8,16,32,64 itd. Ale jak o tym byîo
  91. wczeôniej, w praktyce nie jest to zbyt dokuczliwe, bo moûna
  92. sygnaî analizowaê porcjami, np. po 256 bajtów, a ostatniâ
  93. koïcówkë uzupeîniê zerami do 256. Moûna takûe, w celu
  94. dokîadniejszego zobrazowania, zastosowaê tzw. Krótkoterminowâ
  95. Analizë Fouriera, co jest znacznie lepszym rozwiâzaniem niû
  96. klasyczne FFT, niemniej znowu z powodów oczywistych (artykuî
  97. zamieniîby sië w wykîad akademicki) pominë tu te sprawy. Ale co
  98. by tu nie mówiê, zysk przy obliczeniach dla FFT jest znaczny. Np.
  99. przy 256 próbkach dla klasycznego DFT naleûaîoby wykonaê:
  100.  
  101. <l>256^2=65536
  102.  
  103. <txt>dziaîaï, a dla metody FFT tylko:
  104.  
  105. <l>256*Log2(256)=2048
  106.  
  107. <txt>czyli róûnica jest 32-krotna. Przy wiëkszej liczbie próbek
  108. jest jeszcze wiëksza. Mówiâc obrazowo, jeûeli obliczenie widma
  109. trwaîoby dla tradycyjnej metody, powiedzmy, 10 minut, to dla FFT
  110. trwaîoby mniej niû 20 sekund. W artykule tym pokaûë metodë
  111. obliczeï widma dla 1024 próbek, czyli 512 skîadowych, a wiëc
  112. bardzo dokîadnej analizy widmowej. Co jednoczeônie, jak îatwo
  113. policzyê, da zysk przy obliczeniach, a wiëc takûe zysk czasowy:
  114.  
  115. <l>(1024^2)/(1024*Log2(1024))= ponad 102 krotny!
  116.  
  117. <txt>Ûeby byîo jeszcze szybciej, zastosujemy Asembler, co sprawi,
  118. ûe moûliwe bëdzie pokazywanie widma sygnaîu nawet w czasie
  119. rzeczywistym! Ale po kolei.
  120.  
  121. <sr>Kod U2
  122.  
  123. <txt>W trzecim odcinku DSP przyrównaîem tablicë liczb, uûywanâ w
  124. jëzykach wysokiego poziomu i zapisywanâ w sposób nastëpujâcy:
  125.  
  126. <l>x()
  127.  
  128. <txt>do ciâgu liczb, uzyskanych z wtîoczenia jakichô danych
  129. (muzycznych czy graficznych) do wnëtrza maszyny. Wtîoczenie, czy
  130. moûe raczej przepisanie, danych do komputera moûna w wypadku
  131. danych muzycznych uzyskaê za pomocâ dowolnego samplera i jakiegoô
  132. programu muzycznego. Otrzymany tak ciâg liczb, odpowiadajâcych w
  133. przybliûeniu zapisywanemu dúwiëkowi, moûna byîo po zsamplowaniu
  134. zapisaê na dysk i dalej zrobiê z nim, co sië komu podoba. Na
  135. przykîad zaîadowaê jako dane do pamiëci, a z niej przepisaê do
  136. tablicy x(). I tu dochodzimy to maîego problemu, poniewaû jeûeli
  137. zaîadujemy fragment sampla z dysku prosto do tablicy, np. za
  138. pomocâ odczytywania kolejnych bajtów sampla przez INPUT# prosto z
  139. pliku, to okaûe sië, ûe dla jëzyków wysokiego poziomu dla
  140. ujemnych poîówek sygnaîu otrzymamy bîëdne wartoôci (patrz rys.
  141. 5.). Dzieje sië tak dlatego, ûe dúwiëk w wiëkszoôci samplerów
  142. zawodowych i komputerów (w tym na Amidze) kodowany jest za pomocâ
  143. tzw. kodu U2 czy kodu uzupeînieï do dwóch. Wyjâtkiem jest
  144. tu IBM PC, w którym dúwiëki zapisywane sâ inaczej, ale jest to
  145. wyjâtek w swojej dziedzinie nie tylko, jeôli chodzi o dúwiëk.
  146.  
  147. Skupmy sië zatem na Amidze. Co jest zatem z tym kodem U2? Otóû
  148. charakterystycznâ jego cechâ jest wspólne zero dla liczb ujemnych
  149. i dodatnich. Moûna to îatwo zaobserwowaê, wpisujâc jakâô wartoôê
  150. z poziomu np. GFA do pamiëci (komendâ POKE) i oglâdajâc jâ
  151. nastëpnie za pomocâ asemblera, np. Asm One. Np. dla liczby
  152. 3-bitowej peîny zakres oômiu wartoôci wyglâda tak:
  153.  
  154. <r>
  155. liczba:      U2
  156.  
  157.  3      %011
  158.  
  159.  2      %010
  160.  
  161.  1      %001
  162.  
  163.  0      %000
  164.  
  165. -1      %111
  166.  
  167. -2      %110
  168.  
  169. -3      %101
  170.  
  171. -4      %100
  172.  
  173. <txt>To byîo dla hipotetycznych liczb 3-bitowych. Trzeba
  174. przyznaê, ûe takie kodowanie liczb ze znakiem bardzo uîatwia
  175. róûnorakie operacje matematyczne. Teraz przejdúmy do tradycyjnych
  176. 8-bitów. Otóû, jeûeli byômy odczytywali z pliku kolejne bajty
  177. fali dúwiëkowej, powiedzmy o ksztaîcie piîoksztaîtnym i kolejnych
  178. wartoôciach:
  179.  
  180. <l>-4, -3, -2, -1, 0, 1, 2, 3
  181.  
  182. <txt>i przepisywali od razu do tablicy, to okaûe sie, ûe
  183. otrzymamy zamiast tego nastëpujâcy ciâg liczb:
  184.  
  185. <l>252, 253, 254, 255, 0, 1, 2, 3
  186.  
  187. <txt>Chyba kaûdy wie dlaczego. Dla tych, którzy nie wiedzâ:
  188. liczba, np.  -1, kodowana jest na w ASCII na jednym bajcie za
  189. pomocâ:
  190.  
  191. <l>%11111111
  192.  
  193. <txt>co, rzecz jasna, daje zawsze po odczytaniu 255. A wiëc kaûde
  194. dane, czy to odczytywane z pamiëci, czy teû z pliku, naleûy
  195. zamieniaê na wartoôci ze znakiem przez zanegowanie ostatniego
  196. bitu. W wypadku jëzyków wysokiego poziomu sprowadza sië to do
  197. odjëcia wartoôci 256 w wypadku wykrycia liczby wiëkszej od 127,
  198. co wyglâda mniej wiëcej tak:
  199.  
  200. <l>
  201. ' tu czytanie zmiennej 'a&'
  202.  
  203. IF a&>127
  204.  
  205.   SUB a&,256
  206.  
  207. ENDIF
  208.  
  209. <txt>Podany tu przykîad dotyczy jednego z najlepszych BASIC-ów
  210. Amigi, czyli GFA-BASIC. Przy czym naleûy tu podkreôliê, ûe GFA,
  211. mimo mylâcej nazwy, nie jest wîaôciwie BASIC-iem i ma skîadnië
  212. bardziej zbliûonâ do Amiga E czy Pascala. Nie ma numeracji
  213. wierszy, ma za to moûliwoôê automatycznego robienia tzw. wciëê w
  214. listingu i rozbudowane pëtle: DO..LOOP, WHILE..WEND, UNIT, EXIT,
  215. poza tym znakomicie wspópracuje z systemem. Niestety, mimo
  216. naprawdë znakomitego narzëdzia, jakim jest GFA, czasami
  217. niepoprawnie dziaîa w systemach wyûszych niû 1.3, co sprawdziîem
  218. i, maîo tego, znalazîem dwa bîëdy w samym kompilatorze, które od
  219. razu poprawiîem, niemniej jednak program, znakomicie dziaîajâcy
  220. na 1.3, w wypadku 2.04 czasami dziaîa, a czasami nie. Objawia sië
  221. to miëdzy innymi tym, ûe program interpretowany dziaîa bardzo
  222. dobrze, a po kompilacji moûe sië zawiesiê, nie wiadomo dlaczego.
  223. Na 3.0 czësto teû po prostu pada bez powodu. Dlatego, mimo ûe
  224. caîy swój software pisaîem w tym jëzyku z ewentualnymi wstawkami
  225. w asemblerze (sam mam 2.04), to mam zamiar stopniowo sië
  226. przerzuciê na jakiô inny jëzyk. Podam tu teraz parë oznaczeï,
  227. dotyczâcych wîaônie GFA, poniewaû wszystkie programy bëdâ w tej
  228. konwencji. Obok podam kilka odpowiedników w innych jëzykach, co
  229. uîatwi zrozumienie póúniejszych moich listingów osobom uûywajâcym
  230. tych jëzyków:
  231.  
  232. <r>GFA    AMOS    C    assembler    Znaczenie
  233.  
  234. a|    brak    UBYTE    .b    bajt   (liczby 0..255)
  235.  
  236. a&    brak    WORD    .w    16-bitowa liczba ze znakiem
  237.  
  238. a%    A    LONG    .l    32-bitowa liczba ze znakiem
  239.  
  240. a    A#    float    -    liczba zmiennoprzecinkowa
  241.  
  242. <txt>Jak widaê, GFA stosuje, podobnie jak C, kilka róûnych
  243. rodzajów dokîadnoôci przedstawiania liczb. Róûnice sâ w tych
  244. jëzykach niewielkie, dlatego nastëpne ewentualne listingi takûe
  245. bëdâ juû tylko w konwencji jëzyka GFA lub assemblera. Z kolei
  246. jëzyk C nie potrzebuje konwersji, bo moûna sobie od razu
  247. zdefiniowaê wskaúnik do pamiëci, na której bëdziemy operowali
  248. bezpoôrednio, nie mówiâc juû o asemblerze, który jednakowo widzi
  249. liczby ze znakiem, jak i bez znaku, a wiëc odpada problem
  250. konwersji. Tak wiëc w wyniku tych dziaîaï otrzymamy z danych typu
  251. 0..255 dane sampla 8-bitowego z zakresu -128..127 przepisane do
  252. tablicy. Majâc juû w tablicy czy pamiëci (obojëtne) ciâg liczb
  253. odpowiadajâcy fragmentowi jakiegoô dúwiëku moûna przystâpiê do
  254. analizy. Ale najpierw...
  255.  
  256. <sr>Trochë teorii
  257.  
  258. <txt>Jest to, niestety, dawka niezbëdna, bez której ciëûko bëdzie
  259. cokolwiek dalej zrobiê i zrozumieê. Otóû najpierw przyjrzyjmy sië
  260. poprzednim rysunkom. Przedstawione jest tam widmo dúwiëku raczej
  261. schematycznie. Oô Y to amplituda poszczególnych skîadowych, a oô
  262. X to kolejne czëstotliwoôci. Wszystko gra. Tyle ûe przedstawienie
  263. takie dokonane jest w osi czëstotliwoôci (X) w konwencji
  264. logarytmicznej, co, przypominam, oznacza, ûe odstëpy (wizualnie)
  265. na wykresie sâ miëdzy 16 Hz, a 160 Hz takie same, jak miëdzy 160
  266. Hz a 1600 Hz. Widaê wiëc, ûe wykres ma duûâ rozdzielczoôê dla
  267. tonów basowych i ôrednich, natomiast dla tonów wyûszych
  268. rozdzialczoôê ta maleje. Takie przedstawienie jest zgodne z
  269. dziaîaniem ludzkiego sîuchu, poniewaû przy rosnâcych
  270. czëstotliwoôciach ucho nasze sîyszy coraz mniej dokîadnie.
  271.  
  272. Natomiast wszystkie metody analizy dúwiëku, oparte na
  273. fourierowskiej analizie, przedstawiajâ pierwotnie widmo sygnaîu w
  274. skali liniowej. Taka skala z kolei upoôledza rozdzielczoôê dla
  275. basów, natomiast bardzo dobrze pokazuje czëstotliwoôci ôrednie i
  276. wyûsze (przy czym odwrotnie do poprzedniego przykîadu --
  277. dokîadnoôê ta roônie z czëstotliwoôciâ). I jest to pierwsza waûna
  278. róûnica, którâ naleûy zapamiëtaê. Niedîugo do tego wrócë.
  279.  
  280. Teraz warto krótko wspomnieê o dziaîaniu samej analizy Fouriera,
  281. co przedstawia listing 1. Otóû w uproszczeniu za pomocâ mnoûenia
  282. sygnaîu przez zmienny w czasie czynnik zespolony powoduje sië, ûe
  283. kolejne czëstotliwoôci harmoniczne (f2, f3, f4 itd.) przesuwajâ
  284. sië na osi czëstotliwoôci niejako w tyî i stajâ sië podstawowâ
  285. czëstotliwoôciâ f1, przez co îatwo juû obliczyê dalej jej
  286. zespolonâ amplitudë. Piszë "zespolonâ" i nie naleûy baê sië tego
  287. okreôlenia, które oznacza po prostu, ûe amplituda tak wyliczonej
  288. harmonicznej nie jest opisywana za pomocâ pojedynczej liczby,
  289. lecz za pomocâ liczby zespolonej, oznaczanej zazwyczaj:
  290.  
  291. <l>z=x+jx
  292.  
  293. <txt>Liczba ta zaô to po prostu dwie oddzielne liczby. Czytelnik
  294. moûe zapytaê, czy amplitudë harmonicznej moûna zapisywaê
  295. jednoczeônie dwoma róûnymi liczbami? Otóû moûna. Proszë sobie
  296. przypomnieê moj poprzedni artykuî, w którym otrzymywaliômy z
  297. szeregów Fouriera dwa równolegîe wspóîczynniki: sinusowy i
  298. cosinusowy. Tu jest podobnie. Istnieje nawet daleko posuniëta
  299. analogia miëdzy tymi parami wspóîczynników. Nastëpna czëôê
  300. programu skaluje otrzymany wynik, poniewaû na skutek kolejnych
  301. mnoûeï zespolonych amplituda harmonicznych byîaby za wielka.
  302. Dlatego stosuje sië tu dzielenie wszystkich otrzymanych liczb
  303. przez czynnik skalujâcy:
  304.  
  305. <l>SQR(n)
  306.  
  307. <txt>gdzie 'n' to caîkowita liczba próbek sygnaîu.
  308.  
  309. Co dla 32 próbek daje ok. 5,66, a dla np. 1024 próbek -- wîaônie
  310. 32.  Innym przykîadem jest maîy podprogramik sortujâcy. Po coû
  311. on? Otóû po przeksztaîceniu sygnaîu metodâ FFT otrzymuje sië,
  312. owszem, widmo, lecz nieco... pokieîbaszone. Po prostu ze wzglëdu
  313. na samâ metodë kolejne czëstotliwoôci nie wystëpujâ po kolei tak,
  314. jak f1, f2, f3 itd., lecz sâ pomieszane. Ta procedurka po prostu
  315. odpowiednio ukîada je na miejsca.
  316.  
  317. Do prezentowanego dalej programu Czytelnik sam bëdzie musiaî
  318. dorobiê odpowiednie do zastosowanego jëzyka programowania
  319. instrukcje graficzne, ale liczë na to, ûe nie bëdzie z tym
  320. wiëkszego problemu, przy czym proszë sië nie sugerowaê rysunkiem,
  321. poniewaû zrobiîem go na podstawie wîasnego dziaîajâcego programu.
  322.  
  323. Przepis na FFT w przykîadach: Otóû po przyjëciu liczby próbek 'n'
  324. jako 32 i po policzeniu przykîadowego FFT otrzymujemy taki oto
  325. rezultat (patrz rys. 6.). Jak widaê z próbki 32 bajtów sampla, po
  326. przepuszczeniu przez FFT otrzymaliômy dwa dziwnie symetryczne
  327. wykresy po 32 bajty, zamiast oczekiwanego(?) jednego wykresu,
  328. skîadajâcego sië 15 harmonicznych. No i co z tym fantem zrobiê?
  329. Otóû otrzymaliômy klasyczny podrëcznikowy rezultat. Na górze mamy
  330. wspóîczynniki rzeczywiste x(), a na dole urojone jx().
  331. Przedstawiajâ one po prostu odpowiednie skîadowe cosinusowe i
  332. sinusowe. Teraz wystarczy zignorowaê czëôê leûâcâ w "drugiej
  333. poîowie" wykresu i juû prawie jesteômy w domu. Dokîadnie rzecz
  334. biorâc, naleûy wziâê pod uwagë skîadowe, zawarte pomiëdzy:
  335.  
  336. <l>1..(n/2)+1
  337.  
  338. <txt>a zignorowaê pozostaîe, czyli w zakresie:
  339.  
  340. <l>(n/2)+2..n
  341.  
  342. <txt>oczywiôcie liczâc próbki od 1, a nie od 0 (rys. 7 A). Ale to
  343. jeszcze nie wszystko. W celu otrzymania klasycznego widma takiego
  344. jak na obrazkach, naleûy obliczyê tzw. >moduî widma zespolonego<
  345. wedîug wzoru:
  346.  
  347. <l>a=SQR((x^2)+(jx^2))
  348.  
  349. <txt>dla kolejnych skîadowych. W tym celu moûemy jeszcze zrobiê
  350. sobie nastëpnâ tablicë a(), w której umieôcimy wynik tych
  351. obliczeï. Teraz po zobrazowaniu tego, co wyszîo i przepisujâc
  352. dane, czyli amplitudë harmoniczej jako wysokoôê sîupków,
  353. otrzymamy wreszcie normalny wykres widma amplitudowego (rys.7 B),
  354. które, jak to wynika ze wzoru, bëdzie miaîo zawsze wartoôci
  355. dodatnie. W kolejnym odcinku bëdzie zamieszczony listing programu
  356. tym razem w asemblerze.
  357.  
  358.  
  359.  
  360.  
  361. ---------------------------------------------- /podpisy/
  362.  
  363. Rys.1 Prâd zmienny w sieci zasilajâcej 50 Hz (A) i jego widmo-nieco
  364. wyidealizowane (B). Przy kiepskiej aparaturze i marnych stopniach
  365. filtrujâcych w zasilaczu do sygnaîu przenika resztka (tëtnienie).
  366. Przebieg przykîadowych zakîóceï przedostajâcych sië do sygnaîu (C) i
  367. ich widmo (D).
  368.  
  369. Rys.2 Kawaîek muzyki (widmo) z wyraúnymi pikami buczenia (zaznaczone
  370. na rysunku). Rysunek przedstawia problem nieco przejaskrawiony
  371. poniewaû w rzeczywistoôci tony te majâ znacznie mniejszâ amplitudë i
  372. mogâ ginâê wizualnie wôród innych dúwiëków (lecz bëdâc zarazem
  373. caîkiem sîyszalnymi).
  374.  
  375. Rys.3 Dwa filtry typu notch poîâczone kaskadowo-schemat blokowy (A)
  376. i ich îâczna charakterystyka filtracyjna (B).
  377.  
  378. Rys.4 Muzyka (widmo) po czëôciowym przefiltrowaniu polegajâcym na
  379. usuniëciu z pasma dwóch zakîócajâcych czëstotliwoôci.
  380.  
  381. Rys.5 Poprzesuwane poîówki sygnaîu przy odczytywaniu bezpoôrednio z
  382. pliku na dysku lub komendâ PEEK() z pamiëci sâ konsekwencjâ sposobu
  383. zapisywania liczb ze znakiem.
  384.  
  385. Rys.6 Po przeksztaîceniu sygnaîu przez FFT i zobrazowaniu wnëtrza
  386. tablic x() i jx() otrzymamy poczâtkowo doôê zagadkowy rysunek.
  387.  
  388. Rys.7 Najpierw naleûy uciâê niepotrzebnâ czëôê wykresu (A), a
  389. nastëpnie obliczyê moduî, co da nareszcie îadny wykresik widma
  390. skîadajâcy sië z 17 sîupków (B).
  391.