前提
ただいまデータの解析を行なっています。FFTなど行なっており別の状態も確認したいと考え、スペクトログラムを描こうとしています。以前にスペクトログラムを描くコードは作ったのでそれを流用したのですがうまくいきません。
実現したいこと
スペクトログラムを描く。
なぜこのような問題が起こっているのか特定する。
発生している問題・エラーメッセージ
スペクトログラムがうまく表示されない
該当のソースコード
Python
1import matplotlib.pyplot as plt 2import csv 3import pandas as pd 4import numpy as np 5from scipy import signal #スペクトログラム 6 7df=pd.read_csv('csv in/co2RV= 4.10951e+00.csv') 8df 9 10t = df["time"] 11n = df["nel"] 12 13plt.close("all") 14fs = 2e5 #サンプリング周波数 15print(fs,"[Hz]") 16 17f,t,Sxx = signal.spectrogram(n, fs, nperseg = 256) #数値積分の結果, サンプリング周波数, 切り出す幅の長さ(値が大きいと, 時間の分解能は下がるが, 周波数の分解能は上がる) 18plt.figure() 19plt.pcolormesh(t,f,10*np.log(Sxx)) #時刻, 周波数, dB値を表示 20plt.xlim([3.3, 5.8]) 21plt.xlabel("Time [sec]") 22plt.ylabel("Frequency [Hz]") 23 24""" 25cbar = plt.colorbar() #カラーバー表示のため追加 26cbar.ax.set_ylabel("Intensity [dB]") #カラーバーの名称表示のため追加 27""" 28 29plt.title("Spectrogram") 30plt.colorbar() 31plt.show()
試したこと
サンプリング周波数に問題があると考え色々と数値を変更しています。
補足情報(FW/ツールのバージョンなど)
dfのデータの内容は以下です。
time R nel
0 2.25000 4.10951 -0.474589
1 2.25005 4.10951 -0.329468
2 2.25010 4.10951 -0.288525
3 2.25015 4.10951 -0.300367
4 2.25020 4.10951 -0.256708
... ... ... ...
99995 7.24975 4.10951 -0.358798
99996 7.24980 4.10951 -0.407480
99997 7.24985 4.10951 -0.355510
99998 7.24990 4.10951 -0.389659
99999 7.24995 4.10951 -0.349249
100000 rows × 3 columns
失敗しているスペクトログラムは以下です。
10/31 16:31
サンプリング周波数が大きすぎるとプロットされないことがわかりました。一旦サンプリング周波数を下げてみるとプロットされることはわかりましたが適切なサンプリング周波数の設定方法がわからない状態です。

回答1件
あなたの回答
tips
プレビュー