矩形窗函數是一種常用的時域濾波器,也是數字信號處理中最基礎的窗函數之一。Python中可以使用NumPy庫實現矩形窗函數的生成。
import numpy as np def rect_window(N): """生成長度為N的矩形窗函數""" return np.ones(N) N = 10 window = rect_window(N) print(window)
上述代碼中,我們定義了一個rect_window函數,用于產生指定長度的矩形窗函數。在這里,我們使用了NumPy中的ones函數,來生成一個長度為N的全1數組,即矩形窗函數。
下面我們可以通過生成的窗函數,來對信號進行濾波處理。
import numpy as np import matplotlib.pyplot as plt def rect_window(N): """生成長度為N的矩形窗函數""" return np.ones(N) N = 50 f1 = 2 f2 = 10 n = np.arange(N) x = 5 * np.sin(2 * np.pi * f1 * n / N) + 3 * np.sin(2 * np.pi * f2 * n / N) # 原始信號 window = rect_window(N) # 矩形窗 y = np.convolve(x, window, mode='same') / sum(window) # 濾波后信號 plt.subplot(3, 1, 1) plt.plot(n, x) plt.title("Original Signal") plt.subplot(3, 1, 2) plt.plot(n, window) plt.title("Rectangular Window") plt.subplot(3, 1, 3) plt.plot(n, y) plt.title("Filtered Signal") plt.tight_layout() plt.show()
在以上代碼中,我們定義了一個原始信號x,其中包含了兩個頻率分別為2Hz和10Hz的正弦波。然后我們生成一個長度為50的矩形窗,并將其與原始信號進行卷積,得到濾波后的信號y。最后我們將原始信號、矩形窗和濾波后的信號繪制在同一張圖上,以觀察信號的變化。
總的來說,矩形窗函數是常用的數字信號處理工具之一,Python中NumPy庫的使用可以方便地實現矩形窗函數的生成與信號的濾波處理。