根据@ hotpaw2给出的答案,我根据聊天问earlier,这是一个后续问题。我有一个信号,它将是一个单相余波,具有相位偏移。我的任务是提取(需要非常高的精度)这个单一频率分量的幅度和相位。
在纸面上,假设正确归一化的傅里叶变换T,以下关系成立:
不出所料,DFT比简单地进行转换和挑选相关组件还要多一些。特别是,讨论向我建议,我并不完全清楚相对于相位偏移的测量结果,并且如果数据未正确加窗,则会产生明显的边缘效应,从而破坏结果的准确性。
我一直在谷歌上搜索,但大多数讨论都是相当技术性和轻量级的例子,所以我希望有人可以对事情有所了解。特别是,我遇到了一个例子,建议不要做一个简单的转换,而应该先改变它:
import numpy as np
import pylab as pl
f = 30.0
w = 2.0*np.pi*f
phase = np.pi/2
num_t = 10*f
t, dt = np.linspace(0, 1, num_t, endpoint=False, retstep=True)
signal = np.cos(w*t+phase)#+np.random.normal(0,0.25,len(t))
amp = np.fft.fftshift(np.fft.rfft(np.fft.ifftshift(signal)))
freqs = np.fft.fftshift(np.fft.rfftfreq(t.shape[-1],dt))
index = np.where(freqs==30)
print index[0][0]
print(np.angle(amp))[index[0][0]]
print (np.abs(amp))[index[0][0]]*(2.0/len(t))
pl.subplot(211)
pl.semilogy(freqs,np.abs(amp))
pl.subplot(212)
pl.plot(freqs,(np.angle(amp)))
pl.show()
所以:第一组问题:有人可以解释使用fftshift的重点,以及它对数据做了什么?为什么使用反移,变换然后移位需要一个仅移位一次的频率分量集,没有反向运算?这种方法是正确的(暂时忽略窗口的问题)。
第二组问题:如果我对数据进行窗口检测,可能会影响结果的幅度和相位(?)。是否有分析方法来校正给定窗口形状的幅度变化?我可以找到一些列出校正因子的表格,但我还没有真正看到一个很好的解释。
在链接的问题中,有人说应该在窗函数的驼峰中心附近测量相位。但由于窗口函数是一个时域函数,我想要一个特定频率的阶段,我不太明白这意味着什么。
任何可以解决问题的事情(可能以参考的形式,因为显然我需要做更多的阅读)将是非常感激。