Fourier transform (tsz. Fourier transforms)
A Fourier-transzformáció a matematika és a mérnöki tudomány egyik legfontosabb eszköze. Lehetővé teszi, hogy egy időbeli (vagy térbeli) jelet frekvenciakomponenseire bontsunk. Ez az eljárás nélkülözhetetlen az elektronika, digitális jelfeldolgozás, hangtechnika, képfeldolgozás, kvantummechanika, kommunikációelmélet, és még a gépi tanulás számos területén is.
A Fourier-transzformáció lényege, hogy egy komplex, időben változó jelet (pl. hanghullám) felírhatunk szinusz és koszinusz hullámok összegeként. Ezek a szinuszhullámok különböző frekvenciájú „építőkockák”, amelyekből bármilyen periodikus vagy nem-periodikus jel felépíthető.
Például egy zenei hang: több frekvencia keveréke → Fourier-transzformációval „szétszedhető” a komponenseire:
A folytonos Fourier-transzformáció:
Ahol:
f(t)
az időfüggő jelω
a szögfrekvencia (rad/s)F(ω)
a jel frekvenciatartománybeli képeA visszatranszformáció:
Számítógépeken nem folytonos jelekkel, hanem mintavételezett (diszkrét) adatokkal dolgozunk.
A DFT képlete:
Ahol:
x_n
az időtartománybeli minta (N
darab)X_k
a k
-edik frekvenciakomponens
A Fast Fourier Transform (FFT) az egyik legfontosabb algoritmus a numerikus matematikában. Az FFT az DFT gyorsított változata:
Ez teszi lehetővé a valós idejű jelfeldolgozást (pl. audióspektrum, radar, kép-FFT stb.).
Terület | Használat |
---|---|
Audiófeldolgozás | Hangspektrum, zajszűrés, autotune |
Képfeldolgozás | Élkiemelés, élszűrés, tömörítés (pl. JPEG) |
Telekommunikáció | Moduláció, frekvenciaelemzés, spektrumszűrés |
Orvosi képalkotás | MRI, CT szkenner adatainak feldolgozása |
Kvantummechanika | Hullámfüggvény reprezentációja |
Gépi tanulás / AI | Jellemzőkinyerés időfüggvényekből |
import numpy as np
import matplotlib.pyplot as plt
# Szintetikus jel: 2 frekvencia keveréke
fs = 500 # mintavételezési frekvencia (Hz)
t = np.linspace(0, 1, fs, endpoint=False)
x = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t)
# FFT
X = np.fft.fft(x)
freq = np.fft.fftfreq(len(x), d=1/fs)
# Spektrum kirajzolása
plt.plot(freq, np.abs(X))
plt.title("FFT – Frekvenciaspektrum")
plt.xlabel("Frekvencia (Hz)")
plt.ylabel("Amplitúdó")
plt.grid(True)
plt.show()
#include <fftw3.h>
#include <iostream>
int main() {
int N = 1024;
double* in = fftw_alloc_real(N);
fftw_complex* out = fftw_alloc_complex(N/2 + 1);
fftw_plan p = fftw_plan_dft_r2c_1d(N, in, out, FFTW_ESTIMATE);
// bemeneti jel feltöltése
for (int i = 0; i < N; ++i)
in = sin(2 * M_PI * 100 * i / N); // 100 Hz szinusz
fftw_execute(p); // végrehajtás
// amplitúdók kiírása
for (int i = 0; i < N/2 + 1; ++i)
std::cout << "Freq " << i << ": " << sqrt(out*out + out*out) << "\n";
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);
}
A Fourier-transzformáció eredménye egy komplex számokból álló sorozat, ahol minden elem:
Ez alapján az eredeti jel teljesen visszaállítható (ha nem veszítünk el információt).
Időtartományban | Frekvenciatartományban |
---|---|
szinusz | delta-függvény a spektrumban |
impulzus | minden frekvencia jelen van |
csillapodó jel | széles sávú spektrum |
stabil hullám | éles csúcs egy frekvencián |
A Fourier-transzformáció egy kulcseszköz az idő-frekvencia világ közötti átalakításhoz. Használatával bármilyen jelet frekvenciaösszetevőire bonthatunk, amit utána szűrhetünk, értékelhetünk, tömöríthetünk vagy módosíthatunk. Alkalmazása nélkülözhetetlen a modern technológiában – a hangrögzítéstől a mobilkommunikáción át egészen az MRI-képalkotásig.