波形に対して短時間フーリエ変換をおこない、スペクトログラム化したのですが
画像のx軸の最小範囲と最大範囲で白く表示されており
画像化できていませんでした。
この原因がわかりませんので、どなたかわかる方いらっしゃいましたら
ご教授いただけると幸いです。
コード等は下記のサイトを参考にさせていただきました。
https://friedrice-mushroom.hatenablog.com/entry/2019/08/31/113915
fs=1000 # kHz s_length=5 # second x = np.arange(0, s_length, 1/fs) #サンプリング周波数 1kHz、5秒の信号を想定 y=np.sin(np.pi*x**2*30)*np.sin(np.pi*x*1)+np.random.randn(s_length*fs)*0.01 #0~5秒で周波数が0〜150Hzにスウィープする関数。ホワイトノイズも付与。 fig =plt.figure(figsize=(8,5)) NFFT = 1024 # the length of the windowing segments Fs = fs # the sampling frequency plt.specgram(y,NFFT=NFFT, Fs=Fs, noverlap=1000,cmap='jet',scale='linear') plt.grid(linestyle='--', linewidth=0.5) plt.title("spectrogram(FFT)") plt.xlabel("Time[ms]") plt.ylabel("Frequency[kHz]") plt.colorbar(orientation='vertical') plt.xlim([0,5]) plt.ylim([0,200]) fig.tight_layout()
https://jp.mathworks.com/help/signal/ref/stft.html#mw_f6bebd3d-2957-47ad-94bc-6982eed99a32_sep_mw_c056db1e-cade-47af-bf56-37cd76eee5db
の「詳細」の「短時間フーリエ変換」の最後の、「STFT の振幅二乗では、関数のパワー スペクトル密度の spectrogram 表現が得られます。」と書かれてるところの下の図を見てください
元データ「x(n)」から切り出した「x1(n)」等から計算しますが、一番先頭(左)の「x1(n)」から計算した結果は「x1(n)」の真ん中の時刻の結果で、それよりも早い時刻の結果はありません
「x1(n)」の真ん中の時刻は、「x1(n)」のデータサイズが「M」なので、元データ「x(n)」の先頭から「M/2」番目あたりのところです
質問のコードでは「NFFT = 1024」なので、元データの先頭から1024/2=512番目あたりのデータの時刻が、一番先頭(左)の結果の時刻です
「fs=1000」から、元データの先頭から512番目のデータの時刻は512/1000≒0.5秒で、それよりも早い時刻の結果はありません
データの最後も、基本的には同様です
ただし、元データから切り出した最後のデータ(最初の図での「x6(n)」)の最後と元データの最後が一致しない場合は、その分さらに結果が無い時間が長くなります
ご教授いただきありがとうございます。
なるほど!
では、0秒~約1秒の結果が0.5秒あたりの時刻に表示されているだけで、
0.5秒以前の処理されたデータが表示されていない訳ではないということですよね。
