離散傅立葉變換(DFT)和快速傅立葉變換(FFT)

小马同学..3發表於2024-07-10

離散傅立葉變換(DFT)和快速傅立葉變換(FFT)是訊號處理和數字訊號處理中的基本工具。它們用於將時間域的訊號轉換為頻率域的表示,幫助分析訊號的頻譜成分。

1. 離散傅立葉變換(DFT)

1.1 DFT的基本概念
DFT是將離散時間訊號轉換為頻域表示的工具。對於長度為 N 的離散訊號 x[n],其DFT定義為:

其中:
X[k] 是頻域訊號的第
𝑘k 個頻率分量
x[n] 是時間域訊號的第
n 個樣本
N 是訊號的總樣本數
j 是虛數單位
1.2 逆DFT(IDFT)
逆DFT用於將頻域訊號轉換回時間域訊號:

1.3 DFT的性質

2. 快速傅立葉變換(FFT)

2.1 FFT的基本概念

2.2 Cooley-Tukey演算法

透過遞迴地應用這種分解,可以大幅減少計算量。
2.3 FFT的實現
以下是Python中使用NumPy庫實現DFT和FFT的示例程式碼:

import numpy as np
import matplotlib.pyplot as plt

# 生成一個示例訊號
N = 1024
t = np.linspace(0, 1, N)
f1, f2 = 50, 120
x = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t)

# DFT的實現
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

# 計算DFT
X_dft = dft(x)

# 使用NumPy的FFT計算
X_fft = np.fft.fft(x)

# 繪製結果
frequencies = np.fft.fftfreq(N)

plt.figure(figsize=(12, 6))

# DFT
plt.subplot(2, 1, 1)
plt.plot(frequencies[:N//2], np.abs(X_dft)[:N//2])
plt.title('DFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')

# FFT
plt.subplot(2, 1, 2)
plt.plot(frequencies[:N//2], np.abs(X_fft)[:N//2])
plt.title('FFT')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')

plt.tight_layout()
plt.show()

2.4 FFT的應用
頻譜分析: 用於分析訊號的頻率成分。
濾波器設計: 快速設計和實現數字濾波器。
卷積計算: 利用FFT快速計算大規模卷積。
音訊處理: 如音訊壓縮、增強和特效。

相關文章