前提・実現したいこと
ここに質問の内容を詳しく書いてください。
現在、信号処理(FFT)のプログラムを作成しています。
グラフの出力において、n個(n=1,2,3,...)重ねて表示したいと思っているのですが、エラーメッセージが発生し、実行することが出来ません。
例えば、図1↑のように5つに別々に表示されるのですが、
図2↑のように表示したいです。
どなたかご教授して頂けると幸いです。
発生している問題・エラーメッセージ
IndexError Traceback (most recent call last) <ipython-input-9-64580a3bfb93> in <module> 56 57 plt.figure(figsize=(6,4)) ---> 58 plt.plot(fq[:int(N/2)+1],Data[n][:int(N/2)+1],color=color_list[j]) 59 plt.title(str(n)+"回目") 60 plt.xlabel("frequency[Hz]",fontsize=14) IndexError: invalid index to scalar variable.
該当のソースコード
Python
1import numpy as np 2import pandas as pd 3import os 4import matplotlib.pyplot as plt 5 6file_name = input("Please input filename:") 7 8Sampling_frequency = int(input("Please input Sampling_frequency: ")) 9 10Number_of_iterations = int(input("Please input Number_of_iterations:")) 11 12color_list=["black","gray","lightcoral","brown","darkred","red","tomato","sienna","sandybrown","darkorange","tan","gold","darkkhaki" 13 ,"yellowgreen","olivedrab","darkturquoise","lightblue" 14 ,"steelblue","cornflowerblue","navy","blue","indigo","darkviolet","purple","magenta","crimson","lightpink"] 15 16colorlist=len(color_list) 17 18#for j in range(0,colorlist): 19for n in range(1,Number_of_iterations+1): 20 for j in range(0,Number_of_iterations+1): 21 #データの読み込み 22 data=pd.read_csv(os.path.join(r"Z:/private/",file_name),header=None,usecols=list(range(1,n+1)),names=[f"{n}回目" for n in range(1,n+1)]) 23 24 #2次元配列から1次元配列に変更 25 data2=data[str(n)+"回目"].values 26 27 #データ数 28 N=len(data) 29 30 #サンプリング周波数 31 fs=Sampling_frequency 32 33 #窓関数 34 window=np.hamming(N) 35 36 #窓関数の補正値 37 acf=(1/(sum(window)/N)) 38 39 #時間軸のデータ作成 40 t=np.arange(0,N*(1/fs),1/fs) 41 42 #周波数軸のデータ作成 43 fq=np.linspace(0,fs,N) #周波数軸 linspace(開始,終了,分割数) 44 45 #窓関数後の信号 46 data_w=window*data2 47 48 #読み込んだデータをフーリエ変換 49 data_w_FFT=np.fft.fft(data_w) 50 51 #FFTの複素数結果を絶対値に変換 52 data_w_FFT_abs=abs(data_w_FFT) 53 54 #窓補正 55 Data=(data_w_FFT_abs)*acf 56 57 plt.figure(figsize=(6,4)) 58 plt.plot(fq[:int(N/2)+1],Data[n][:int(N/2)+1],color=color_list[j]) 59 plt.title(str(n)+"回目") 60 plt.xlabel("frequency[Hz]",fontsize=14) 61 plt.ylabel("signal intensity",fontsize=14) 62 plt.xlim(0,2000) 63 plt.show() 64 65#読み込んだデータの次元確認 66print("読み込んだデータの配列次元:\n"+str(data.ndim)) 67 68print("配列次元変更後:\n"+str(data2.ndim)) 69 70print("サンプリング周波数:\n"+str(fs)) 71 72print("サンプル数:\n"+str(N)) 73 74print("窓関数適用後のスペクトル補正値:\n"+str(acf)) 75 76print(Data)
試したこと
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 05:14
2021/04/23 14:38
2021/04/24 06:38