gpt4 book ai didi

python - 根据频率范围重新限制 pyplot.psd y 轴图

转载 作者:行者123 更新时间:2023-12-01 06:36:31 27 4
gpt4 key购买 nike

所以我试图找到以不同频率采样的各种信号的psd,并在 0-50Hz 范围内比较它们

我有这个代码:

for i, th in enumerate(ths): 
NFFT = 2**(int(np.log2(th.size)) - 8)
ax.psd(th, Fs = freq[i], NFFT = NFFT, scale_by_freq = False)
ax.set_xlabel("freq (Hz)")
ax.set_xlim(0,50)
#ax.relim() #These
#ax.autoscale() #Didn't work

我正在尝试做的事情:

由于信号在 50Hz 以下进行低通滤波,因此采样频率高于 100Hz 的任何信号都有一部分 psd 降至非常低。所以我的ylim非常大,而我想看的psd部分不容易看到。每次调用该函数时,我都可以手动 set_ylim ,但我想要某种方法来自动设置 ylim 以适合 psd ,但是每次我在 SO 上找到的手动方法假设我已经知道 y 值。但是psd在后端做了很多计算,我不知道如何访问。

有没有办法:

  1. psd 图中的 y 值读取到数组中,或
  2. 如何根据 pyplot 中当前的 x 轴重新调整 y 轴?

最佳答案

您可以使用 matplotlib.pyplot.psd 的返回值。它返回

  • Pxx(一维数组) - 缩放前功率谱 P_{xx} 的值(实值)
  • freq(一维数组)- 与 Pxx 中的元素相对应的频率。
  • line (Line2D) - 此函数创建的线。仅当 return_lineTrue 时才返回。

在这种情况下,我相信频率值可用于以编程方式适当设置 y 限制,如下所示:

mx = []; mn = []
for i, th in enumerate(ths):
NFFT = 2**(int(np.log2(th.size)) - 8)
val, freqs = ax.psd(th, Fs = freq[i], NFFT = NFFT, scale_by_freq = False)
mx.append(val[freqs <= 50].max())
mn.append(val[freqs <= 50].min())
ax.set_xlabel("freq (Hz)")
ax.set_xlim(0,50)
ax.set_ylim(np.rint(10 * np.log10(np.array(mn).min())) - 2,
np.rint(10 * np.log10(np.array(mx).max())) + 2 )

关于python - 根据频率范围重新限制 pyplot.psd y 轴图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59640661/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com