如何获得PSD的频率范围

2024-04-20 13:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在计算信号的功率谱密度,我想要频率范围从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)

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

有人能帮我做同样的事吗。你知道吗


Tags: csvpathdataframedfread信号地方np
1条回答
网友
1楼 · 发布于 2024-04-20 13:28:24

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)

相关问题 更多 >