对于x(t)具有间距dt(等于1/fs,fs即采样率)的给定离散时间信号,能量为:
E[x(t)] = sum(abs(x)**2.0)/fs
Run Code Online (Sandbox Code Playgroud)
然后我做了一个DFT x(t):
x_tf = np.fft.fftshift( np.fft.fft( x ) ) / ( fs * ( 2.0 * np.pi ) ** 0.5 )
Run Code Online (Sandbox Code Playgroud)
并再次计算能量:
E[x_tf] = sum( abs( x_tf ) ** 2.0 ) * fs * 2 * np.pi / N
Run Code Online (Sandbox Code Playgroud)
(这里因子fs*2*np.pi/N=脉动间距dk,文档fftfreq提供了有关频域间距的更多细节),我有相同的能量:
E[x(t)] = E[x_tf]
Run Code Online (Sandbox Code Playgroud)
但是...当我计算的功率谱密度x(t)使用scipy.signal.welch,我无法找到合适的能量.scipy.signal.welch返回频率f和能量的矢量Pxx(或每个频率的能量,取决于scaling我们在参数中输入的能量scipy.signal.welch).
我怎样才能找到E[x(t)]和 …
我正在尝试用高斯曲线拟合我的数据。这是我的代码:
\n\nimport numpy as np\nfrom scipy import optimize\n\n# The independent variable where the data is measured\nx_coord = np.array([-0.1216 , -0.11692308, -0.11224615, -0.10756923, -0.10289231,\n -0.09821538, -0.09353846, -0.08886154, -0.08418462, -0.07950769,\n -0.07483077, -0.07015385, -0.06547692, -0.0608 , -0.05612308,\n -0.05144615, -0.04676923, -0.04209231, -0.03741538, -0.03273846,\n -0.02806154, -0.02338462, -0.01870769, -0.01403077, -0.00935385,\n -0.00467692, 0. , 0.00467692, 0.00935385, 0.01403077,\n 0.01870769, 0.02338462, 0.02806154, 0.03273846, 0.03741538,\n 0.04209231, 0.04676923, 0.05144615, 0.05612308, 0.0608 ,\n 0.06547692, 0.07015385, 0.07483077, 0.07950769, 0.08418462,\n 0.08886154, 0.09353846, 0.09821538, 0.10289231, 0.10756923,\n 0.11224615, 0.11692308])\n\n# The dependent data \xe2\x80\x94 nominally f(x_coord)\ny …Run Code Online (Sandbox Code Playgroud) 我有一个时间信号,我计算其傅立叶变换以获得频率信号。根据帕塞瓦尔定理,两个信号具有相同的能量。我用Python成功演示了它。然而,当我计算频率信号的傅里叶逆变换时,能量不再守恒。这是我的代码:
import numpy as np
import numpy.fft as nf
import matplotlib.pyplot as plt
#create a gaussian as a temporal signal
x = np.linspace(-10.0,10.0,num=1000)
dx = x[1]-x[0]
sigma = 0.4
gx = (1.0/(2.0*np.pi*sigma**2.0)**0.5)*np.exp(-0.5*(x/sigma)**2.0)
#calculate the spacing of the frequencial signal
f=nf.fftshift(nf.fftfreq(1000,dx))
kk = f*(2.0*np.pi)
dk = kk[1]-kk[0]
#calculate the frequencial signal (FT)
#the convention used here allows to find the same energy
gkk = nf.fftshift(nf.fft(nf.fftshift(gx)))*(dx/(2.0*np.pi)**0.5)
#inverse FT
gx_ = nf.ifft(nf.ifftshift(gkk))*dk/(2 * np.pi)**0.5
#Parseval's theorem
print("Total energy in time domain = "+str(sum(abs(gx)**2.0)*dx)) …Run Code Online (Sandbox Code Playgroud)