作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力对功率谱密度(及其倒数)进行正确的归一化。
我遇到了一个真正的问题,假设加速度计的读数以功率谱密度 (psd) 的形式表示,单位为 Amplitude^2/Hz。我想将其转换回随机时间序列。但是,首先我想了解 PSD 的“前进”方向,时间序列。
根据 [1],时间序列 x(t) 的 PSD 可以通过以下方式计算:
PSD(w) = 1/T * abs(F(w))^2 = df * abs(F(w))^2
from scipy import signal
import matplotlib.pyplot as plt
fs = 10e3
N = 1e5
amp = 2*np.sqrt(2)
freq = 1234.0
noise_power = 0.001 * fs / 2
time = np.arange(N) / fs
x = amp*np.sin(2*np.pi*freq*time)
x += np.random.normal(scale=np.sqrt(noise_power), size=time.shape)
f, Pxx_den = signal.welch(x, fs, nperseg=1024)
plt.semilogy(f, Pxx_den)
plt.ylim(\[0.5e-3, 1\])
plt.xlabel('frequency \[Hz\]')
plt.ylabel('PSD \[V**2/Hz\]')
plt.show()
import scipy.fftpack as fftpack
def fft_full(xt,yt):
dt = xt[1] - xt[0]
x_fft=fftpack.fftfreq(xt.size,dt)
y_fft=fftpack.fft(yt)*dt
return (x_fft,y_fft)
xf,yf=fft_full(time,x)
df=xf[1] - xf[0]
psd=np.abs(yf)**2 *df
plt.figure()
plt.semilogy(xf, psd)
#plt.ylim([0.5e-3, 1])
plt.xlim(0,)
plt.xlabel('frequency [Hz]')
plt.ylabel('PSD [V**2/Hz]')
plt.show()
[1]: Eq. 2.82. Random Vibrations in Spacecraft Structures Design Theory and Applications, Authors: Wijker, J. Jaap, 2009
最佳答案
scipy 库使用 Welch 的方法来估计 PSD。这种方法比仅仅取离散傅立叶变换的平方模更复杂。简而言之,它的过程如下:
关于python - python中离散功率谱密度的正确归一化实际问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59406477/
我是一名优秀的程序员,十分优秀!