基于频率范围重新提交pyplot.psd yaxis图

2024-05-29 02:15:30 发布

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

因此,我试图找到在不同频率下采样的各种信号的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,但是我在上找到的每个手动方法都假设我已经知道y值。但是psd在后端做了很多计算,我不知道如何访问

有没有办法:

  1. psd绘图中的y值读取到数组中,或
  2. 根据pyplot中的当前x轴以某种方式重新安装y轴

Tags: 方法代码infor信号手动ax频率
1条回答
网友
1楼 · 发布于 2024-05-29 02:15:30

您可以使用^{}的返回值。它回来了

  • Pxx(1D数组)-缩放前功率谱的值P_{xx}(实值)
  • freq(1D数组)-Pxx中元素对应的频率
  • lineLine2D)-此函数创建的行。仅当返回行为^{时返回

在这种情况下,我相信可以使用频率值以编程方式适当设置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, color = colors[i])
    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 )

相关问题 更多 >

    热门问题