📜  Python中的 Matplotlib.axes.Axes.psd()(1)

📅  最后修改于: 2023-12-03 14:46:33.990000             🧑  作者: Mango

Python中的 Matplotlib.axes.Axes.psd()

Matplotlib是一个数据可视化库,用于创建各种类型的图形-从简单的直方图到复杂的热图和3D图形。 Matplotlib.axes.Axes.psd()是Matplotlib的一个函数,可用于绘制信号的功率谱密度(PSD)估计值。

函数签名

Axes.psd(x, NFFT=None, Fs=None, detrend=None, window=None, noverlap=None, pad_to=None, sides=None, scale_by_freq=None, return_line=None, **kwargs)

参数
  • x: 数组,一维或二维数据。如果x是二维数组,则函数将沿着轴0计算每个列的PSD。
  • NFFT: 整数,默认为$256$。FFT的长度,必须是2的幂。较小的值将导致时间分辨率更高的估计值,更大的值将导致频率分辨率更高的估计值。
  • Fs: 整数,默认为$2\pi$。采样频率。如果没有设置,则默认为$2\pi$。
  • detrend: 字符串,默认为mpl.rcParams['text.antialiased']。指定如何消除直流分量。可选值为None'mean''linear',以及FalseNone表示不去趋势。 'mean'从每个数据段中减去均值。'linear'指定拟合线性趋势并从数据中减去。False表示不去趋势。
  • window: 字符串或数组,默认为'Hann'。指定窗的类型,或者是带有信号的向量。如果为字符串,则可以使用Hamming(Hann)、Hann(Hanning)、Blackman(blackman)'none'。如果是一个实数值数组,则长度必须与数据长度相同,并且用于加权数据点。默认值是'Hann'或一个长度为NFFT的汉宁窗。
  • noverlap: 整数,默认为None。覆盖长度。如果为None,则默认为$NFFT/2$。
  • pad_to: 整数,默认为None。指定FFT输出的长度。如果为None,将使用NFFT的值。
  • sides: 字符串,默认为'default'。指定PSD是否应该在单侧或双侧计算,因为频谱是实数,则默认为'两侧'。可选值为'default'(即从$0$至$F_s / 2$), 'onesided'(即只计算从$0$至$F_s / 2$的幅值谱)以及'twosided'(即计算从$-F_s / 2$至$F_s / 2$的幅值谱)。
  • scale_by_freq: True或False,默认为True。是否应该通过FFT的长度缩放PSD。
  • return_line: True或False,默认为False。如果为True,则返回一个包含PSD估计值以及PSD直线的元组。
Returns

Numpy数组 包含PSD估计值的数组。如果设置了return_line为True,则返回一个元组,其中第一个是这个数组,第二个是直线的元组。

使用方法

首先,我们需要引入matplotlib:

import matplotlib.pyplot as plt

然后我们将创建一个包含随机信号的数组x

import numpy as np
x = np.random.normal(size=1000)

最后,我们可以使用psd函数来获得PSD的估计值:

fig, axs = plt.subplots(2, 1, figsize=(6, 6))
axs[0].psd(x, NFFT=512, Fs=2, window=np.hanning(512))
axs[1].psd(x, NFFT=512, Fs=2, window=np.hanning(512), noverlap=256)
plt.show()

在这里,我们设置了NFFT为$512$,采样频率为$2$,使用了一个长度为$512$的汉宁窗。在第二个图中,我们也设置了noverlap为$256$,以获得更好的图像质量。

用法示例

结论

Matplotlib.axes.Axes.psd()函数是一个有用的函数,用于估计信号的功率谱密度(PSD)。它基于FFT算法,并计算信号的频谱密度。使用它,您可以以一种简单和直观的方式可视化信号的频域特征。