【问题标题】:How to get a range of frequency bins for PSD如何获得 PSD 的频率区间范围
【发布时间】:2019-02-11 16:05:15
【问题描述】:

我正在计算信号的 PSD,我想要频率范围为 0Hz 到 20Hz 的功率。这就是我尝试使用 linspace 的方法

df = pd.read_csv(path)
df = pd.DataFrame(df)
x = np.linspace(0, 20, 41)
dt = x[1] - x[0]
fs = 1 / dt
f,P = signal.welch(df, fs=5, nperseg=30, noverlap=5,axis=0)

在这里,我得到了从 0Hz 到 2.5Hz 的 6 个频率分量,但我想计算频率范围直到 20Hz 的功率

任何人都可以在这里帮助我做同样的事情。

【问题讨论】:

  • 那么,你的信号的采样频率是多少?
  • 我将它保留了 5 次,因为我在这里使用样本 30 的信号进行解释,但最初考虑的采样频率是 1024,对于 nperseg = 2048,noverlap=1024。
  • 您的数据框 df 中有多少样本?
  • 问题中解释的例子有30个样本@payne
  • A 认为您告诉我的是样本数而不是采样频率,您的信号每秒有多少个样本?既然你有 30 个样本,这 30 个样本会持续多久?

标签: python numpy psd time-frequency


【解决方案1】:

PSD 仅从 0 到 fs/2,您应该在 fs 参数中指定正确的采样频率,在您的情况下为 1024。

此示例说明如何获取正弦信号的 PSD:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import welch

Fs = 1024 # Hz
Ts = 1/Fs
time = np.arange(0, 2, Ts) # 2 seconds

freqs = [20, 50, 100] # frequencies in Hz
x = np.zeros(len(time))
for f in freqs:
    x += np.sin(2 * np.pi * f * time)

plt.plot(x)

f, P = welch(x, fs=Fs)

plt.figure()
plt.stem(f, P)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2016-02-03
    相关资源
    最近更新 更多