前提・実現したいこと
Pythonでデジタル信号のフーリエ変換に試みています。
発生している問題・エラーメッセージ
https://org-technology.com/posts/smoother.html
↑こちらに示されているサンプルを元に自分のデータで解析しようと考えているのですが、「周波数スケール」や「データ数」を自分のデータの場合、どのように置き換えればよいのかわからないでいます…。
また、フーリエ変換をする際に
yf = fftpack.fft(y)/(n/2)
で、なぜn/2で割るのかがよくわかりません。
y2 = np.real(fftpack.ifft(yf2)*n)
では逆変換では逆にnをかけているのも少し疑問です。
ちなみに一般的な数学や物理の参考書には目を通しており、基本的なフーリエ変換の原理は理解しているつもりです。
該当のソースコード
python
import os import time import numpy as np from scipy.stats import norm from scipy import signal import matplotlib.pyplot as plt os.chdir(r"C:\Users\genuine\Desktop\earth science\20180217~misasa\20180224b") files = os.listdir(r"C:\Users\genuine\Desktop\earth science\20180217~misasa\20180224b") t1 = time.time() dat_list = [] for file in files: if file.count('.dat'): dat_list.append(file) ampl_list = [] for file in dat_list: data = np.loadtxt(file, delimiter=' ') x_value = data[:,0] #1列目を横軸とする y_value = data[:,1] #2列目を縦軸とする yh_value = signal.hilbert(y_value) count = abs(yh_value) sum = 0 for i in count[12000:13600]: sum = sum + i mean = sum/1600 ampl_list.append(mean) x_axis = np.arange(800, 900.1, 0.2) y_axis = np.array(ampl_list) plt.plot(x_axis, y_axis, marker="", linewidth=0.2, color='black') plt.show() np.save('ampl_list.npy', y_axis) #.npyで保存する t2 = time.time() proceeding_time = t2 - t1 print('処理時間'+str(proceeding_time))
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
x_axis = np.arange(800, 900.1, 0.2)
からお分かりかと思いますが、私が解析を試みているのは501個のデータ点からなるグラフのフーリエ変換です。
python 3.6.1
numpy 1.12.1
scipy 0.19.0
matplotlib 2.0.2
まだ回答がついていません
会員登録して回答してみよう