【发布时间】:2020-12-10 22:09:35
【问题描述】:
我有一个每月的时间序列,我正在对其进行离散傅立叶变换。 但是我对 numpy 如何将时域转换为频域感到困惑?
我正在使用 np.fft.fftfreq,我的时间数组是 708 个索引,并且每个月都会计算数据的每个测量值。
这是使用 numpy fftfreq 的输出频率:
frequency = np.fft.fftfreq(len(time_months),d=1)
print(frequency)
output:
[0. 0.00141243 0.00282486 0.00423729 0.00564972 0.00706215
0.00847458 0.00988701 0.01129944 0.01271186 0.01412429 0.01553672
0.01694915 0.01836158 0.01977401 0.02118644 0.02259887 0.0240113
0.02542373 0.02683616 0.02824859 0.02966102 0.03107345 0.03248588
0.03389831 0.03531073 0.03672316 0.03813559 0.03954802 0.04096045
0.04237288 0.04378531 0.04519774 0.04661017 0.0480226 0.04943503
0.05084746 0.05225989 0.05367232 0.05508475 0.05649718 0.0579096
0.05932203 0.06073446 0.06214689 0.06355932 0.06497175 0.06638418
0.06779661 0.06920904 0.07062147 0.0720339 0.07344633 0.07485876
0.07627119 0.07768362 0.07909605 0.08050847 0.0819209 0.08333333
0.08474576 0.08615819 0.08757062 0.08898305 0.09039548 0.09180791
0.09322034 0.09463277 0.0960452 0.09745763 0.09887006 0.10028249
0.10169492 0.10310734 0.10451977 0.1059322 0.10734463 0.10875706...
0.49152542 0.49293785 0.49435028 0.49576271 0.49717514 0.49858757
0.5
但是当我尝试查看采样率和奈奎斯特频率时,我无法重新创建 numpys 频率输出。 np.fft.fftfreq 真正将时域转换为频域是做什么的?
我试过了:
sample_time = np.diff(time_months) #taking difference between each time stamp
sample_time_mean = np.mean(sample_time)
print('sample time (months)', sample_time_mean, 'months')
sample_time_mean_days = sample_time_mean*30.4 #days
print('sample time (days)', sample_time_mean_days, 'days')
sample_rate_days = 1/sample_time_mean_days
print('Sampling rate (per day, 1/sample time) =', sample_rate_days, 'sample/day')
nyq = sample_rate_days/2
print('nyquist frequency (per day)', nyq)
sample time (months) 0.08333333333325754 months
sample time (days) 2.5333333333310293 days
Sampling rate (per day, 1/sample time) = 0.39473684210562215 sample/day
nyquist frequency (per day) 0.19736842105281108
【问题讨论】:
-
您的代码使用
rfftfreq。你是这个意思吗? -
哦,是的!我的意思是使用 rfft。 rfft 用于真正的 FFT。我所有的价值观都是真实的,所以并不复杂。不过我会更改代码:)
-
您可以查看此in the docs。也是rfftfreq 的条目。
-
如果你每2.5天有一个样本,为什么你将1作为采样频率传递给
fftfreq?