根据频率范围重新限制 pyplot.psd y 轴图
Relimit pyplot.psd y-axis plot based on frequency range
所以我试图找到以不同频率采样的各种信号的 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
在后端做了很多我不知道如何访问的计算。
有没有办法:
- 从
psd
图中读取 y 值到数组,或
- 如何根据
pyplot
中的当前 x 轴重新调整 y 轴?
您可以使用 matplotlib.pyplot.psd
的 return 值。它returns
Pxx
(一维数组)- 缩放前功率谱的值 P_{xx}
(实值)
freq
(一维数组)- Pxx. 中元素对应的频率
line
(Line2D
) - 此函数创建的行。只有 returned 如果 return_line 是 True
.
在这种情况下,我相信频率值可用于以编程方式适当地设置 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 )
所以我试图找到以不同频率采样的各种信号的 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
在后端做了很多我不知道如何访问的计算。
有没有办法:
- 从
psd
图中读取 y 值到数组,或 - 如何根据
pyplot
中的当前 x 轴重新调整 y 轴?
您可以使用 matplotlib.pyplot.psd
的 return 值。它returns
Pxx
(一维数组)- 缩放前功率谱的值P_{xx}
(实值)freq
(一维数组)- Pxx. 中元素对应的频率
line
(Line2D
) - 此函数创建的行。只有 returned 如果 return_line 是True
.
在这种情况下,我相信频率值可用于以编程方式适当地设置 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 )