Python FFT & IFFT

単純な FFT & IFFT プログラム

ここまで Python FFT & IFFT 概要 の説明をしてきました。
説明してきたことが実行できる、最も単純な FFT & IFFT プログラムを作成します。

  1. お決まりの作法

    Pyton がインスト-ルされている場所を示めします。
    #!/usr/bin/python3
    Pyton3 のインスト-ル場所がわからない場合は
    $ which python3
    で知ることができます。
    ファイルで使用する文字コ-ドを設定します。
    # coding: utf-8
    エディタも文字コードを認識できる形式で書かれることも多いです。
    # -*- coding: utf-8 -*-

  2. ライブラリを取り込み

    取り込む必要があるライブラリは2つです。
    import numpy as np
    import matplotlib.pyplot as plt
    本ライブラリのインスト-ルがまだの方は Python/pyplot インスト-ル を見てください。
    matplotlib をインスト-ルするとついでに付属で numpy も入ります。

  3. FFT 実行波形の作成

    要素が1の配列を 10個用意します。
    np.ones(10)
    要素がゼロの配列を 10個用意します。
    np.zeros(44)
    要素が1の配列を 10個用意します。
    np.ones(10)
    これらは ndarray という numpy 独自のデータ型の配列です。
    concatenate 関数で複数の ndarray を結合して新たな ndarray を作成します。
    全部を結合して signal とします。

      signal = np.concatenate([np.ones(10),np.zeros(44),np.ones(10)])
    
  4. FFT 実行波形 signal の表示

    plt.plot(signal)
    plt.show()
    として、グラフで FFT 実行波形 signal を表示します。

  5. フーリエ変換 (FFT)

    高速フ-リエ変換は numpy に実装されている fft.fft() を使用します。
    FFT 処理結果は f で受け取ります。
    f = np.fft.fft(signal)
    FFT の処理結果は numpy.narray 形式で、値は複素数です。
    f.real に実数部が、f.imag に虚数部が格納されます。
    この実数部を緑色、虚数部を赤色でプロットします。
    plt.plot(f.real, color='green')
    plt.plot(f.imag, color='red')
    plt.show()

  6. 逆フーリエ変換 (IFFT)

    逆フ-リエ変換は numpy に実装されている fft.ifft() を使用します。
    IFFT は inverse fast Fourier transform の略称で FFT の結果を元の信号形式に戻すことができます。
    IFFT 処理結果は f_ifft で受け取ります。
    f_ifft = np.fft.ifft(f)
    IFFT の処理結果は numpy.ndarray 形式で、値は複素数です。
    f_ifft.real に実数部が、f_ifft.imag に虚数部が格納されます。
    この実数部が元の信号形式を表しています。
    実数部をプロットします。
    f_ifft = np.fft.ifft(f)
    f_real = f_ifft.real
    plt.plot(f_real)
    plt.show()


以上をまとめると以下のようになります。


  #!/usr/bin/python3
  # -*- coding: utf-8 -*-
  import numpy as np
  import matplotlib.pyplot as plt

  signal=np.concatenate([np.ones(10),np.zeros(44),np.ones(10)])
  plt.plot(signal)
  plt.show()

  f = np.fft.fft(signal)  # フーリエ変換(FFT)
  plt.plot(f.real, color='green')
  plt.plot(f.imag, color='red')
  plt.show()

  f_ifft = np.fft.ifft(f) # 逆フーリエ変換(IFFT)
  f_real = f_ifft.real
  plt.plot(f_real)
  plt.show()

本内容を TeraPad 等で作成したら、ファイル名を適当に
si_fft_ifft.py
として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の 共有フォルダ c:\vb_public_html にして、 ブラウザでアクセスできるようにします。
なお、
c:\vb_public_html
はゲスト OS Ubuntu のなかの
/home/yamada/public_html
とリンクしていて共有フォルダの関係にあります。
詳細は ユ-ザ-ごとの公開ディレクトリを用意する を読んでみてください。

si_fft_ifft.py ファイル動作確認

それでは si_fft_ifft.py ファイルを実行してみましょう。
Ubuntu ディスクトップにある □>_ アイコンから端末画面を開き、 public_html ディレクトリに移動します。
yamada@ubuntu-20:~$ cd public_html
私の Virtual Ubuntu も 20.04LTS にアップグレ-ドしてしまいました。
yamada@ubuntu-20:~/public_html$ python3 si_fft_ifft.py
として確認します。

  • si_fft_ifft.py 実行結果
  • Matplotlib の表示画面が出現し、上図のような元波形のグラフが表示されますので ×印をクリックして、次に進めます。
    今度は FFT 結果画面となりますので、再び、×印をクリックし、元の波形が表示されたら OK です。

    ここまでで、単純な FFT & IFFT プログラムの確認が終わりました。
    引き続き、FFT & IFFT Filter プログラムを作成していきます。


  • FFT & IFFT Filter プログラム に進む
  • Python FFT & IFFT 概要 に戻る
  • 70VPS に戻る