cupyx.scipy.signal.windows.bartlett#

cupyx.scipy.signal.windows.bartlett(M, sym=True)[源码]#

返回一个 Bartlett 窗口。

Bartlett 窗口与三角窗口非常相似,只是端点为零。它常用于信号处理中对信号进行渐缩(tapering),而不会在频域中产生太多波纹。

参数:
  • M (int) – 输出窗口的点数。如果为零或负数,则返回空数组。

  • sym (bool, 可选) – 如果为 True(默认值),则生成对称窗口,用于滤波器设计。如果为 False,则生成周期窗口,用于频谱分析。

返回:

w – 三角窗口,其第一个和最后一个样本为零,最大值归一化为 1(尽管如果 M 是偶数且 sym 是 True,则值 1 不会出现)。

返回类型:

ndarray

另请参阅

triang

一个端点不为零的三角窗口

注意

Bartlett 窗口的定义为

\[w(n) = \frac{2}{M-1} \left( \frac{M-1}{2} - \left|n - \frac{M-1}{2}\right| \right)\]

Bartlett 窗口的大多数引用来自信号处理文献,其中它被用作许多窗口函数之一来平滑值。请注意,与此窗口的卷积会产生线性插值。它也被称为消尾(apodization,意为“去除尾部”,即平滑采样信号开头和结尾处的不连续性)或渐缩函数(tapering function)。Bartlett 窗口的傅里叶变换是两个 sinc 函数的乘积。请注意 Kanasewich 文献中的精彩讨论。[2]

更多信息请参阅 [1], [2], [3], [4][5]

参考文献

示例

绘制窗口及其频率响应

>>> import cupyx.scipy.signal.windows
>>> import cupy as cp
>>> from cupy.fft import fft, fftshift
>>> import matplotlib.pyplot as plt
>>> window = cupyx.scipy.signal.windows.bartlett(51)
>>> plt.plot(cupy.asnumpy(window))
>>> plt.title("Bartlett window")
>>> plt.ylabel("Amplitude")
>>> plt.xlabel("Sample")
>>> plt.figure()
>>> A = fft(window, 2048) / (len(window)/2.0)
>>> freq = cupy.linspace(-0.5, 0.5, len(A))
>>> response = 20 * cupy.log10(cupy.abs(fftshift(A / cupy.abs(A).max())))
>>> plt.plot(cupy.asnumpy(freq), cupy.asnumpy(response))
>>> plt.axis([-0.5, 0.5, -120, 0])
>>> plt.title("Frequency response of the Bartlett window")
>>> plt.ylabel("Normalized magnitude [dB]")
>>> plt.xlabel("Normalized frequency [cycles per sample]")