Jelfeldolgozás

Jel: Egy időben változó érték, \(s(t)\)

  • \(s\): signal
  • \(t\): time

Rövidítések:

  • DFT: Discrete Fourier Transform
  • FFT: Fast Fourier Transform

Komplex számok

Euler reláció: \(e^{i\varphi} = \cos \varphi + i \cdot \sin \varphi\)

Jelöljön \(\overline{z}\) egy komplex számot!

  • Algebrai alak: \(\overline{z} = a + ib\)
  • Trigonometrikus alak: \(\overline{z} = r \cdot (\cos \varphi + i \cdot \sin \varphi)\)
  • Euler alak: \(\overline{z} = r \cdot e^{i\varphi}\)

Fourier transzformáció

  • \(s(t)\): a felbontandó periodikus jel
  • \(s_n(t) \approx s(t)\): a periodikus jel közelítése
  • \(T\): a jel periódusideje (mértékegysége: s)
  • \(\omega = \dfrac{2\pi}{T}\): körfrekvencia (mértékegysége: Hz)
  • \(S_0 \in \mathbb{R}\): középérték
  • \(S_{k}^{A}, S_{k}^{B} \in \mathbb{R}\): Fourier együtthatók

A felharmónikusokkal való közelítést a következő összefüggés írja le:

\[ s(t) \approx s_n(t) = S_0 + \sum_{k=1}^{n} \left[ S_{k}^{A} \cos k \omega t + S_{k}^{B} \sin k \omega t \right]. \]

Spektrum (frekvencia tartományban való leírás):

\[ S(i\omega) = \mathcal{F}\{s(t)\} = \int_{-\infty}^{+\infty} \! s(t) \cdot e^{-i \omega t} \mathrm{d}t. \]

Inverz Fourier transzformáció:

\[ s(t) = \mathcal{F}^{-1}\{S(i\omega)\} = \dfrac{1}{2\pi} \cdot \int_{-\infty}^{+\infty} \! S(i\omega) \cdot e^{i \omega t} \mathrm{d}\omega. \]

Tulajdonságok

Linearitás

\[ \mathcal{F}\{C_1 s_1(t) + C_2 s_2(t)\} = C_1 \cdot \mathcal{F}\{s_1(t)\} + C_2 \cdot \mathcal{F}\{s_2(t)\} \]
\[ \mathcal{F}^{-1}\{C_1 S_1(i\omega) + C_2 S_2(i\omega)\} = C_1 \mathcal{F}^{-1}\{S_1(i\omega)\} + C_2 \mathcal{F}^{-1}\{S_2(i\omega)\} \]

Eltolás

\[ \mathcal{F}\{s(t - \tau)\} = e^{-i \omega \tau} \cdot S(i\omega) \]

Konvolúció

\[ y(t) = w(t) * s(t) \]
\[ \mathcal{F}\{y(t)\} = \mathcal{F}\{w(t)\} \cdot \mathcal{F}\{s(t)\} \]
\[ Y(i\omega) = W(i\omega) \cdot S(i\omega) \]

Deriválás

\[ \mathcal{F}\{\dot{s}(t)\} = i\omega \cdot S(i\omega) \]

Diszkrét Fourier transzformáció

Diszkrét esetben pontos a felbontás.

  • \(K \in \mathbb{N}\): a mintavételi pontok száma
  • \(T_s\): egyenközű mintavételezés esetén a mintavételi idő
  • \(s[k]\): a \(k\)-adik mintavételezett pont értéke
  • \(\vartheta = \dfrac{2\pi}{K}\): alapkörfrekvencia

A Fourier együtthatók számítása:

\[ \overline{S}_p = \dfrac{1}{K} \cdot \sum_{k=0}^{K-1} s[k] \cdot e^{-ip\vartheta k}. \]

Ebből kiadódik, hogy a középérték az átlag:

\[ S_0 = \dfrac{1}{K} \sum_{k=0}^{K-1} s[k]. \]

A Fourier együtthatók alapján a jelet a következőképpen számíthatjuk:

\[ s[k] = \sum_{p=0}^{K-1} \overline{S}_p e^{ip\vartheta k}. \]

Forrás:

Gyors Fourier Transformáció

Hangfájlok feldolgozása

A betöltött hangfájlt egy jelnek, mint amplitúdó sorozatnak tekinthetjük.

  • Konvolúció, simítás
  • Szűrés, alul- és felüláteresztő szűrő

Feladatok

1. FFT algoritmus

  • Implementáljuk az FFT algoritmust C-ben!
  • Ellenőrízzük a számításokat 8 elemű példákon!

2. Harmonikus függvények vizsgálata

  • Vizsgáljuk meg a DFFT algoritmus működését \(\sin\) és \(\cos\) függvények mintavételezésére!
  • Adjunk meg előre olyan frekvenciákat, amelyeket eredményként várunk majd!
  • Vizsgáljuk meg a becslés pontosságát a mintavételezés függvényében!

3. Hangfájlok kezelése

  • Készítsünk egy programot, amelyik adott frekvenciájú, szinuszos jelet ír ki egy wav fájlba!
  • Generáljunk olyan jeleket, amelyek egyidejűleg több frekvenciát is tartalmaznak!

4. Szűrés

  • Implementáljunk (például egy) átlagoló szűrőt!
  • Valósítsuk meg OpenCL segítségével!
  • Mérésekkel vizsgáljuk meg, hogy a párhuzamos implementáció hatékonyabb, mint a szekvenciális!