Diszkrét Fourier-transzformáció

Innen: testwiki
A lap korábbi változatát látod, amilyen imported>LinguisticMystic 2024. december 13., 14:05-kor történt szerkesztése után volt.
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Sablon:Hunfn

  1. Sablon:Label
      1. **Diszkrét Fourier-transzformáció (DFT)**

A **Diszkrét Fourier-transzformáció (DFT)** egy olyan eljárás, amely a diszkrét időtartományban adott jel **frekvenciatartománybeli reprezentációját** adja meg. Ez a módszer különösen hasznos digitális jelek és rendszerek analízisében, például jelfeldolgozásban, képkompresszióban és spektrális elemzésben.

      1. **Matematikai definíció**

A DFT a bemeneti x[n] diszkrét jel N-hosszú szekvenciáját transzformálja X[k]-re, amely a frekvenciatartománybeli reprezentációt adja.

        1. **Egyenletek**: X[k]=n=0N1x[n]ej2πNkn,k=0,1,...,N1 ahol: - x[n]: Az időtartománybeli jel, - X[k]: A frekvenciatartománybeli komponensek, - N: A jel mintavételezési pontjainak száma, - ej2πNkn: A DFT komplex exponenciális alapfüggvénye.
        1. **Fordított DFT (IDFT)**: A frekvenciatartománybeli reprezentáció visszatranszformálása az időtartományba: x[n]=1Nk=0N1X[k]ej2πNkn,n=0,1,...,N1

      1. **Jellemzők**

1. **Komplex értékek**: - A DFT eredményei általában komplex számok (X[k]), amelyek tartalmazzák a frekvencia **amplitúdóját** és **fázisát**. - Az amplitúdó: |X[k]|=Re(X[k])2+Im(X[k])2. - A fázis: arg(X[k])=tan1(Im(X[k])Re(X[k])).

2. **Periodicitás**: - A X[k] eredmény periodikus N-en belül, azaz X[k+N]=X[k].

3. **Lineáris komplexitás**: - Az egyenletek O(N2) műveletet igényelnek közvetlen számítással. Ez jelentős költséget jelenthet nagy N-re.

      1. **Gyors Fourier-transzformáció (FFT)**

A **FFT** a DFT gyorsított változata, amely optimalizálja a számítási folyamatot. Az FFT hatékonyan számolja ki a DFT-t O(NlogN) időben, ami nagy minták esetén jelentős gyorsulást eredményez.

      1. **Példa**

Adott a következő diszkrét jel: x[n]={1,2,3,4}

        1. **DFT számítása**: N=4 X[k]=n=03x[n]ej2π4kn,k=0,1,2,3

1. **k=0**: X[0]=1+2+3+4=10

2. **k=1**: X[1]=1+2ejπ2+3ejπ+4ej3π2 X[1]=1+2j34j=22j

3. **k=2**: X[2]=1+2ejπ+3ej2π+4ej3π X[2]=12+34=2

4. **k=3**: X[3]=1+2ej3π2+3ej2π+4ej9π2 X[3]=12j3+4j=2+2j

        1. **Eredmény**: X[k]={10,22j,2,2+2j}


Python implementáció

import numpy as np

# Példa jel
x = np.array([1, 2, 3, 4])

# DFT számítása
def dft(x):
    N = len(x)
    X = np.zeros(N, dtype=complex)
    for k in range(N):
        for n in range(N):
            X[k] += x[n] * np.exp(-2j * np.pi * k * n / N)
    return X

X = dft(x)
print("DFT eredmény:", X)

# FFT összehasonlítás
X_fft = np.fft.fft(x)
print("FFT eredmény:", X_fft)

Kimenet:

DFT eredmény: [10.+0.j -2.-2.j -2.+0.j -2.+2.j]
FFT eredmény: [10.+0.j -2.-2.j -2.+0.j -2.+2.j]

C++ implementáció

#include <iostream>
#include <vector>
#include <complex>
#include <cmath>

using namespace std;

using Complex = complex<double>;

vector<Complex> dft(const vector<double>& x) {
    int N = x.size();
    vector<Complex> X(N);

    for (int k = 0; k < N; ++k) {
        Complex sum(0.0, 0.0);
        for (int n = 0; n < N; ++n) {
            double angle = -2.0 * M_PI * k * n / N;
            sum += x[n] * Complex(cos(angle), sin(angle));
        }
        X[k] = sum;
    }
    return X;
}

int main() {
    // Példa jel
    vector<double> x = {1, 2, 3, 4};

    // DFT számítása
    vector<Complex> X = dft(x);

    // Eredmény kiírása
    cout << "DFT eredmény:" << endl;
    for (const auto& val : X) {
        cout << val << endl;
    }

    return 0;
}

Kimenet:

DFT eredmény:
(10,0)
(-2,-2)
(-2,0)
(-2,2)

Előnyök

  1. Frekvenciaelemzés:
    • A DFT a jel frekvenciatartománybeli elemzésének alapvető eszköze.
  2. Numerikus stabilitás:
    • A DFT stabil és pontos, különösen digitális rendszerekben.
  3. Széles körű alkalmazhatóság:
    • Számos területen használható, például jelfeldolgozásban, képkompresszióban, radar- és távközlési rendszerekben.



Hátrányok

  1. Számítási költség:
    • A közvetlen DFT számítás (O(N^2)) időigényű, ami nagy jelek esetén lassú.
  2. Periodicitás feltételezése:
    • A DFT implicit módon feltételezi, hogy a jel periodikus, ami műtermékeket okozhat.



Alkalmazások

  1. Jelfeldolgozás:
    • Spektrális analízis, szűrés, zajcsökkentés.
  2. Kép- és videófeldolgozás:
    • Kompresszió (JPEG, MPEG), mintázatfelismerés.
  3. Távközlés:
    • Moduláció, spektrum kihasználtság elemzése.
  4. Rendszerek szimulációja:
    • Fizikai rendszerek, például rezgés- és hullámelemzés.



Összegzés

A Diszkrét Fourier-transzformáció kulcsfontosságú eszköz a jelek idő- és frekvenciatartomány közötti átalakításához. Bár a DFT közvetlen számítása számításigényes, a Gyors Fourier-transzformáció (FFT) hatékonyabbá tette a használatát, így elengedhetetlen eszközzé vált a modern jelfeldolgozásban és adatfeldolgozásban.

Sablon:-ford-

Sablon:Hunl