Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การทำ Discrete Fourier Transform (DFT) และ FFT ด้วย SciPy ใน Python

Discrete Fourier Transform (DFT) แปลงข้อมูลจาก Domain เวลา/พื้นที่ (Spatial/Time Domain) ไปเป็น Domain ความถี่ (Frequency Domain)

Fast Fourier Transform (FFT) เป็นอัลกอริทึมคำนวณ DFT ให้เร็วขึ้น (O(N log N) แทน O(N²)) SciPy มีโมดูล scipy.fftpack (เก่า) และ scipy.fft (ใหม่ แนะนำ)

ตัวอย่างโค้ด: สร้าง Sine Wave และหา FFT


import numpy as np
import matplotlib.pyplot as plt
from scipy import fftpack  # หรือ from scipy import fft (ใหม่)

# พารามิเตอร์สัญญาณ
my_freq = 6          # ความถี่ 6 Hz
freq_samp = 70       # Sampling Rate 70 Hz
time_val = np.linspace(0, 3, 3 * freq_samp, endpoint=False)

# สร้าง Sine Wave
amp_val = np.sin(my_freq * 2 * np.pi * time_val)

# พลอต Time Domain
fig, ax = plt.subplots()
ax.plot(time_val, amp_val)
ax.set_xlabel('Time (seconds)')
ax.set_ylabel('Amplitude')
ax.set_title('Time Domain Signal')
plt.show()

# คำนวณ FFT
A = fftpack.fft(amp_val)
frequency = fftpack.fftfreq(len(amp_val)) * freq_samp

# พลอต Frequency Domain
fig, ax = plt.subplots()
ax.stem(frequency, np.abs(A))
ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('Magnitude')
ax.set_xlim(-freq_samp / 2, freq_samp / 2)
ax.set_title('Frequency Spectrum')
plt.show()

ผลลัพธ์

การทำ Discrete Fourier Transform (DFT) และ FFT ด้วย SciPy ใน Python

คำอธิบาย

  • สร้างสัญญาณ Sine Wave ความถี่ 6 Hz, Sample Rate 70 Hz, ระยะเวลา 3 วินาที

  • พลอตสัญญาณใน Time Domain

  • ใช้ fftpack.fft() คำนวณ FFT ได้ Complex Numbers

  • ใช้ fftpack.fftfreq() หาแกนความถี่ แล้วคูณ Sampling Rate

  • พลอต Magnitude Spectrum (ค่าสัมบูรณ์ของ FFT) ด้วย stem plot

โมดูล FFT ใหม่ (SciPy ≥ 1.4) - แนะนำใช้ scipy.fft


from scipy.fft import fft, fftfreq, fftshift

# คำนวณ FFT
A = fft(amp_val)
freq = fftfreq(len(amp_val), d=1/freq_samp)

# ใช้ fftshift เพื่อจัดให้ความถี่ 0 อยู่กลาง
freq_shifted = fftshift(freq)
A_shifted = fftshift(A)

plt.stem(freq_shifted, np.abs(A_shifted))

ประยุกต์ใช้ FFT

  • Signal Processing: Filtering, Spectral Analysis
  • Image Processing: Convolution, Compression (JPEG)
  • Audio: Pitch Detection, Noise Reduction
  • Physics/Engineering: Vibration Analysis, Solving PDEs