#author("2018-02-03T01:49:42+09:00","default:Miyashita","Miyashita") #author("2018-07-25T23:32:44+09:00","default:Miyashita","Miyashita") *Python演習問題:フーリエ解析の基礎 [#bd21eb91] ***インポート・エイリアス設定[#b111ccdb] import numpy as np import matplotlib.pyplot as plt from scipy import fftpack, io #codeprettify(lang-python){{ import numpy as np import matplotlib.pyplot as plt from scipy import fftpack, io }} ***問題 [#zfd69032] +matファイル"crf_wind.mat"を読み込み,一番初めの行成分u[0,:]をプロットしなさい.~ uは風速データであり単位は[m/s],2次元目は時系列を表し,時間の増分はdt,単位は[s]である.~ io.loadmat(filename) #codeprettify(lang-python){{ io.loadmat(filename) }} +textデータ"crf_wind.dat"を読み込み,一番初めの行成分u[0,:]をプロットし,1のmatファイルのデータと比較しなさい.~ with open(filename,'r') as f: np.loadtxt #codeprettify(lang-python){{ with open(filename,'r') as f: np.loadtxt }} +u[0,:]のスペクトルを計算し,対数軸でプロットしなさい.~ fftpack.fft(xxx) fftpack.fftfreq(nt, d=dt) np.abs ax.loglog #codeprettify(lang-python){{ fftpack.fft(xxx) fftpack.fftfreq(nt, d=dt) np.abs ax.loglog }} +u[0,:]のフーリエ解析結果から高周波成分を取り除きなさい.また,ノイズを除去したu[0,:]を1または2の図に重ねてプロットしなさい.~ F[(freq > xxx)] = 0. fftpack.ifft(F) #codeprettify(lang-python){{ F[(freq > xxx)] = 0. fftpack.ifft(F) }} ***データ [#mff0554e] -mat形式ファイル~ #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/crf_wind.mat,crf_wind.mat)~ -txt形式ファイル #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/crf_wind.dat,crf_wind.dat)~ txtファイルのフォーマットは以下の通り.~ 1行目: nt, nz 2行目: dt 3行目: z(1:nz) 4行目以降: u(1,1) u(1,2) ... u(1,nt) u(2,1) u(2,2) ... u(2,nt) ... u(nz,1) ... u(nz,nt) ***解答例(参考) [#m22bec5d] ノイズ除去後のプロットはカットする周波数の加減で大きく変わるため参考程度に.~ 下図は少しカットしすぎたかもしれない.~ #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/wind_data.png,960x361)~ #ref(https://main-t-miyashita.ssl-lolipop.jp/hydrocoast/image/python/PSD.png,640x361)