3 回答

TA贡献1801条经验 获得超16个赞
傅立叶变换
Xk
复数在哪里。虽然你x
是实数,因此,你X[N-m] = X[m]*
在你的情况,N=100, m=1
因此,你必须X[ 1 ] = X[99]
在处理实数时,numpy
提供了另一个功能numpy.fft.rfft
当为纯实数输入计算 DFT 时,输出是厄米对称的,即负频率项只是相应正频率项的复共轭,因此负频率项是多余的。此函数不计算负频率项,因此输出的转换轴的长度为n // 2 + 1。

TA贡献1786条经验 获得超13个赞
标准的完整 DFT 或 FFT 是 NxN 复数到复数线性基变换,其结果作为由复数元素组成的 N 元素向量返回,每个复数结果元素由实部和虚部组成。需要一个复杂的结果来表示每个频率分量的大小和相位(因此不会造成信息损失)。虚部和实部的反正切表示每个频率分量的相位。
如果使用严格的实数输入(不包含非零虚部)输入FFT,则希望FFT结果表示严格的实数信号。当 FFT 返回具有非零虚数分量的复数结果(如果相位非零时需要),这怎么可能?通过为每个信号返回两个分量,这两个分量的大小相等,但它们的虚分量相反,因此虚分量被抵消。您仍然需要每个结果元素的虚部,以便您可以测量相位。但是,从整个FFT结果来看,两个复数值中的虚部分量总和为零,因此代表了严格的实数输入信号(无虚部)。
因此,当给定严格的实数输入时,完整的 FFT 必须是复共轭镜像对称的。
因此,对于输入中的每个频率分量,您都会在FFT结果中看到(至少)两个相等的幅度值。当馈送具有非零虚分量的FFT复数输入时,情况并非如此,这在许多物理方程式和信号处理算法中很常见。
补充:为什么FFT为什么必须返回一个复杂的结果,而不仅仅是幅度和相位角?FFT代表快速傅立叶变换。使 FFT 快速的一件事是,它是一种线性变换,只需乘法和加法即可计算出算术(在此过程中加上一些巧妙的数据改组)。实部和虚部可以仅用线性算术计算。而计算相位需要反正切(或atan2()),这是一个慢得多的非线性先验算子。
添加回答
举报