離散時間フーリエ変換

🔥 Vibe プロンプト

「オーディオセンサーが8kHzで1000Hz、2000Hz、3000Hzの信号をサンプリング。FFTを使用して周波数を特定。」

FFTの仕組み

**高速フーリエ変換(FFT)**は、時間領域信号を周波数成分に変換します。分割統治アプローチが鍵です:

Nサンプル(2のべき乗):
1. 偶数インデックスと奇数インデックスに分割
2. 各半分でFFTを再帰的に計算
3. 「バタフライ」演算で結合

計算量: O(N²)(ナイーブ)→ O(N log N)(FFT)

N=8000の場合:
  ナイーブDFT: 6400万演算
  FFT: ~10万演算
  高速化: ~615倍!

実装

import numpy as np

fs = 8000
duration = 1.0
t = np.arange(0, duration, 1/fs)

# 複合信号: 1000Hz + 2000Hz + 3000Hz
freqs = [1000, 2000, 3000]
amplitudes = [1.0, 0.5, 0.3]
signal = sum(a * np.sin(2 * np.pi * f * t) for a, f in zip(amplitudes, freqs))

# ノイズ追加
noise = np.random.normal(0, 0.1, len(signal))
signal_noisy = signal + noise

# FFT計算
fft = np.fft.fft(signal_noisy)
freq = np.fft.fftfreq(len(signal_noisy), 1/fs)
magnitude = np.abs(fft) / len(signal_noisy)

# ピーク検出(正の周波数のみ)
half = len(signal_noisy) // 2
print(f"サンプル数: {len(signal_noisy)}")
print(f"分解能: {fs/len(signal_noisy):.2f} Hz/bin")
print(f"\n検出された周波数:")
for i in range(half):
    if magnitude[i] > 0.15:
        print(f"  {freq[i]:.0f} Hz (強度: {magnitude[i]:.4f})")

応用

| 分野 | 用途 | |------|------| | 🎵 音楽 | スペクトル分析、ピッチ検出 | | 🗣️ 音声 | フォルマント分析、声認識 | | 📷 画像 | JPEG圧縮(DCT) | | 📡 レーダー | ドップラーシフト検出 | | 🫀 医療 | ECG/EEG周波数分析 | | 🔧 振動 | 機械故障診断 |

まとめ

| 項目 | 詳細 | |------|------| | FFT | O(N log N)のDFT計算アルゴリズム | | 分解能 | fs/N Hz/bin — 長いサンプル=高分解能 | | ナイキスト限界 | 最大検出周波数 = fs/2 | | 窓関数 | ハニング/ハミング窓でスペクトル漏洩を低減 |

重要なポイント

  • コアコンセプトをしっかり理解する
  • ハンズオンコード例で実践する
  • 実世界の問題に応用する
  • 演習で知識を強化する

さらに学ぶ

  • 公式ドキュメント
  • GitHubのオープンソースプロジェクト
  • コミュニティフォーラムとディスカッション
  • 関連コースとチュートリアル

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!