我有一个真实的时间信号:
我只想尝试计算其功率谱which is the Fourier transform of the autocorrelation of the signal, and is also a purely real and positive quantity in this case。为此,我只想写:
import numpy as np
from scipy.fftpack import fft, arange, rfftfreq, rfft
from pylab import *
lags1, c1, line1, b1 = acorr(((Y_DATA)), usevlines=False, normed=True, maxlags=3998, lw=2)
Power_spectrum = (fft(np.real(c1)))
freqs = np.fft.fftfreq(len(c1), dx)
plt.plot(freqs,Power_spectrum)
plt.xlabel('f (Hz)')
plt.xlim([-20000,20000])
plt.show()
但输出结果为:
具有负值输出。虽然如果我只是在y轴上取数据的绝对值并绘制它(即np.abs(Power_spectrum)
),那么输出是:
这正是我所期待的。虽然为什么这只能通过我的功率谱的绝对值来确定?我检查了我的自相关并绘制了它 - 似乎按预期工作并匹配其他人计算的内容。
虽然看起来奇怪的是我采用FFT的下一步。 FFT函数输出负值,这与上面链接中讨论的理论相反,我不太明白为什么。对于出了什么问题的任何想法?
答案 0 :(得分:0)
fft产生复杂的结果(实数和虚数分量表示频谱的幅度和相位)。你必须采用复数向量的(平方)幅度来获得功率谱。
答案 1 :(得分:0)
功率谱是自相关的FFT,但这不是计算它的有效方法。
无论如何,可能使用FFT和iFFT计算自相关。
功率谱也只是FFT系数的平方幅度。
相反,这样做总工作将是一个FFT而不是3。