cupyx.scipy.signal.windows.chebwin#
- cupyx.scipy.signal.windows.chebwin(M, at, sym=True)[源代码]#
返回一个 Dolph-Chebyshev 窗。
- 参数:
- 返回:
w – 窗,最大值总是归一化为 1
- 返回类型:
注意
这个窗通过使用切比雪夫多项式,针对给定的阶数 M 和旁瓣等纹波衰减 at,优化了最窄主瓣宽度。它最初由 Dolph 开发,用于优化射电天线阵列的方向性。
与大多数窗不同,Dolph-Chebyshev 窗是根据其频率响应定义的
\[W(k) = \frac {\cos\{M \cos^{-1}[\beta \cos(\frac{\pi k}{M})]\}} {\cosh[M \cosh^{-1}(\beta)]}\]其中
\[\beta = \cosh \left [\frac{1}{M} \cosh^{-1}(10^\frac{A}{20}) \right ]\]且 0 <= abs(k) <= M-1。A 是衰减(单位:分贝)(at)。
然后使用 IFFT 生成时域窗,因此 M 为 2 的幂次方的生成速度最快,素数 M 的生成速度最慢。
频域中的等纹波条件在时域中产生脉冲,这些脉冲出现在窗的两端。
参考资料
示例
绘制窗及其频率响应
>>> 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.chebwin(51, at=100) >>> plt.plot(cupy.asnumpy(window)) >>> plt.title("Dolph-Chebyshev window (100 dB)") >>> 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 Dolph-Chebyshev window (100 dB)") >>> plt.ylabel("Normalized magnitude [dB]") >>> plt.xlabel("Normalized frequency [cycles per sample]")