Python FFT & IFFT
単純な FFT & IFFT プログラム
ここまで Python FFT & IFFT 概要 の説明をしてきました。
説明してきたことが実行できる、最も単純な FFT & IFFT プログラムを作成します。
- お決まりの作法
Pyton がインスト-ルされている場所を示めします。
#!/usr/bin/python3
Pyton3 のインスト-ル場所がわからない場合は
$ which python3
で知ることができます。
ファイルで使用する文字コ-ドを設定します。
# coding: utf-8
エディタも文字コードを認識できる形式で書かれることも多いです。
# -*- coding: utf-8 -*- - ライブラリを取り込み
取り込む必要があるライブラリは2つです。
import numpy as np
import matplotlib.pyplot as plt
本ライブラリのインスト-ルがまだの方は Python/pyplot インスト-ル を見てください。
matplotlib をインスト-ルするとついでに付属で numpy も入ります。 - 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)])
- FFT 実行波形 signal の表示
plt.plot(signal)
plt.show()
として、グラフで FFT 実行波形 signal を表示します。 - フーリエ変換 (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() - 逆フーリエ変換 (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
として確認します。
Matplotlib の表示画面が出現し、上図のような元波形のグラフが表示されますので
×印をクリックして、次に進めます。
今度は FFT 結果画面となりますので、再び、×印をクリックし、元の波形が表示されたら OK です。
ここまでで、単純な FFT & IFFT プログラムの確認が終わりました。
引き続き、FFT & IFFT Filter プログラムを作成していきます。