实时系列,numpy ifft v.irfft

时间:2016-08-11 19:26:28

标签: python numpy fft

我想生成一个具有规定光谱形状的随机时间序列。为此,我将从适当的光谱分布中绘制随机复数傅里叶系数,然后将频率转换为时域。

要生成实时序列,傅立叶频谱必须具有实际的DC和奈奎斯特系数,并具有对称的负频率。

当我这样做时,我会从numpy的ifftirfft的行为中获得不同的行为。

例如,这里有32个白色光谱样本:

import numpy as np

Nsamp = 2**5
Nfreq = (Nsamp-1)//2 # num pos freq bins not including DC or Nyquist

DC = 0.
f_pos = np.random.randn(Nfreq) + 1j*np.random.randn(Nfreq)
Nyquist = np.random.randn() # this is real
f_neg = f_pos[::-1] # mirror pos freqs

f_tot = np.hstack((DC, f_pos, Nyquist, f_neg))
f_rep = np.hstack((DC, f_pos, Nyquist))

t1 = np.fft.ifft(f_tot)
t2 = np.fft.irfft(f_rep)

print(t1)
print(t2)

我希望t1都是真实的,t1t2同意(在机器精度范围内)。两者都不是。

我正确使用ifft吗?查看np.fft.fftfreq(Nsamp)输出的频率,让我觉得我正确地构建f_tot输入。

irfft是正确的结果,所以我会使用它......但我想知道如何使用ifft来构建未来。

来自numpy.fft docs

  

A[0]包含零频率项(信号之和),对于实际输入,它总是纯粹实际的。然后A[1:n/2]包含正频率项,A[n/2+1:]包含负频率项,按负频率递减。对于偶数个输入点,A[n/2]表示正和负奈奎斯特频率,对于实际输入也是纯粹的。

0 个答案:

没有答案