【问题标题】:Why do I get a phase when taking the FFT of a cosine function?为什么在对余弦函数进行 FFT 时会出现相位?
【发布时间】:2022-08-16 15:16:13
【问题描述】:

我没有在余弦函数中添加相位,但仍然得到了相位。有谁知道为什么?

结果如下:

这是代码:

import numpy as np
import matplotlib.pyplot as plt
import scipy.fftpack
from scipy.fftpack import fftfreq
from scipy.fft import fft, fftshift
from skimage.filters import window



k = np.linspace(0,50,2400)
rx = np.array([0.4])
outer = np.outer(rx,k)

y = 0.5*np.cos(2*np.pi*outer) 
yy = np.sum(y,axis=0)

f = fftfreq(len(k), np.diff(k)[0])
yf = fft(yy, norm = \"forward\")

phase = np.angle(yf)
phase[np.abs(yf) < 0.1] = 0
plt.figure(2)
plt.xlim(0, 100)
plt.plot(phase[:k.size//2])
  • 您的信号中是否有整数个余弦周期?

标签: python signal-processing fft phase


【解决方案1】:

正如克里斯建议的那样,你的余弦有非整数 o 个周期。

你有一点错误会导致这种情况。您正在使用 np.linspace 它在提供的起点和终点上添加值(在您的情况下为 0 和 50)。由于余弦周期为 0.4,因此最左边和最右边的值将具有相同的相位(即 0 度/弧度)。从 FFT 的角度来看,这些点彼此相邻 -> 两者具有相同的相位 -> 就像两个连续的样本是相同的,这在余弦函数中不会发生 -> 你会得到一些相位(和一些频谱泄漏)

尝试通过删除最后一个样本来修复 linspace:

k = np.linspace(0,50 - 50/2400,2400)

这将使阶段消失(只有一些可忽略的数字错误):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2016-11-20
    • 2012-07-25
    • 1970-01-01
    • 2011-12-30
    • 2013-02-11
    相关资源
    最近更新 更多