小编gra*_*ger的帖子

使用scipy.signal.welch找不到合适的能量

对于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)]和 …

python signal-processing numpy fft discrete-mathematics

8
推荐指数
1
解决办法
6007
查看次数

scipy.optimize.curve_fit 与数据不正确匹配

我正在尝试用高斯曲线拟合我的数据。这是我的代码:

\n\n
import 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 optimization scipy

3
推荐指数
1
解决办法
1664
查看次数

帕塞瓦尔定理不适用于 ifft

我有一个时间信号,我计算其傅立叶变换以获得频率信号。根据帕塞瓦尔定理,两个信号具有相同的能量。我用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)

python signal-processing fft

2
推荐指数
1
解决办法
640
查看次数