Scipy fft - неожиданные результаты - PullRequest
0 голосов
/ 13 марта 2020

Я использую scipy fft для построения спектра по данным о скорости ветра с 10-минутным разрешением. Я написал сценарий на основе I python поваренной книги - Анализ частотных составляющих сигнала с помощью быстрого преобразования Фурье .

Это данные цери:

time series plot

Мой график спектров не выглядит так, как ожидалось, конец спектров соединяется обратно с осью Y. Я очень новичок в FFT, поэтому я ожидаю, что это то, что я делаю неправильно.

enter image description here

turb_list =['A01']
turb_df = pd.DataFrame({'StationName':turb_list}).merge(df_W)#filter df based on turb_list

event_name_list = [f for f in os.listdir(SARpath) if os.path.isfile(os.path.join(SARpath, f))] #only files, ignores sub dir
for event in event_name_list:
    twelvelater = event_timestamp + datetime.timedelta(hours=12)
    twelveearlier = event_timestamp - datetime.timedelta(hours=12)
    df_24hour = df_W[(df_W['datetime']>= twelveearlier) &
                     (df_W['datetime']< twelvelater)]
#    
for turb in turb_list:
    df_turb = df_24hour[df_24hour['SName'].str.contains(turb)]
    windspeed = df_turb['WSp_mean']
    windspeed_fft = sp.fftpack.fft(windspeed)
    windspeed_psd = np.abs(windspeed_fft) **2
    fftfreq_windspeed = sp.fftpack.fftfreq(len(windspeed_psd), 1)

    fig, ax = plt.subplots(1, 1, figsize=(8, 4))
    plt.title(event_name + turb)
    ax.plot(fftfreq_windspeed, 10 * np.log10(windspeed_psd))
    ax.set_xlim(0, 0.5)
    ax.set_xlabel('Frequency ( / hr)')
    ax.set_ylabel('PSD (dB)')
    plt.savefig(mypath + event_name +'_fft_1.png')
    plt.close()
...