Python中FFT的幅度

问题描述 投票:0回答:1

我有以下代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq

def polarization(t):
    f = x*np.cos(2*np.pi*omega*t)/np.sqrt(1+(x*np.cos(2*np.pi*omega*t))**2)
    return f

omega = 100
x = 5

N = 10000
t_max = 1
t = np.linspace(0,t_max,N)

yf = fft(polarization(t))
yf = 2.0/N * np.abs(yf[0:N//2])

np.max(yf)

输出 1.21。我不确定我是否理解这个值,因为我的函数获得的最大值是 1,所以任何频率分量的值都应该低于该值。

如何将这个 1.21 值转换为相关频率分量的实际幅度?

python fft
1个回答
0
投票

最大值不是1,因为它是在频域而不是时域。

频域中的最大幅度并不意味着时域中的最大幅度

DFT expression

此外,在DFT表达式中,指数项可能会增加你的最大幅度

Time domain

反之亦然,您可以使用IDFT通过以下表达式获取实际组件

IDFT expression

正如您所说,频域中的最大幅度是 1.21。

我通过将所有相关变量与 1.21 放在上面来计算实际振幅

计算出来的值为0.61而不是1

Frequency Domain

© www.soinside.com 2019 - 2024. All rights reserved.