iPhoneのExcelデータをPythonista3でフーリエ変換

Pythonista3はiOSで動作するPythonの開発環境です。
numpyが標準でインストールされていましたが、openpyxlがインストールされていたのは少し驚きました。

ということで、iPhoneのExcelデータを読み込んでfftスペクトルを計算するアプリを作成してみました。

動作の雰囲気はこんな感じです。

ソースファイルは以下です。

# -*- coding: utf-8 -*-
 import appex
 import numpy as np
 import matplotlib.pyplot as plt
 import openpyxl as px
 import ui
 

 def fft(sender):
     dt = float(sender.superview['textfield1'].text)
     print('時間刻み = ',dt)
     t = list()
     f = list()
     
     count = 0
     for i in range(len(d)):
         t.append(dt*float(count))
         count += 1
     f = np.linspace(0, 1.0/dt, count) 

     # 高速フーリエ変換
     F = np.fft.fft(d)/float(count)
 
     # 振幅スペクトルを計算
     Amp = np.abs(F)
     # 位相角を計算
     Phs = np.degrees(np.angle(F))
 
     fmax = 1.0/dt/2.0 #後半の共役複素数部は除外
 
     # グラフ表示
     plt.figure(figsize=(10,15))
     plt.subplot(311)
     plt.plot(t, d)
     plt.xlabel("time")
     plt.ylabel("signal")
 
     plt.subplot(312)
     plt.plot(f, Amp)
     plt.xlim(0, fmax)
     plt.xlabel("frequency")
     plt.ylabel("amplitude")
 
     plt.subplot(313)
     plt.scatter(f, Phs, s=5, c="blue", edgecolors="blue")
     plt.xlim(0, fmax)
     plt.ylim(-180, 180)
     plt.xlabel("frequency")
     plt.ylabel("phase")
     plt.show()
     v.close()
 
 
 d = list()
 myf = appex.get_file_path()
 wb = px.load_workbook(myf, data_only = True)
 ws = wb.worksheets[0]
 for cell in ws['A']:
     d.append(cell.value)
 
 v = ui.load_view()
 v.present('fullscreen')

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA