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')