Thứ tự bộ lọc. Đối với các bộ lọc 'bandpass' và 'bandstop', thứ tự kết quả của ma trận phần thứ hai cuối cùng ['sos'] là 2*N
, với N là số phần hai phần của hệ thống mong muốn
Tần số tới hạn hoặc các tần số. Đối với bộ lọc thông thấp và thông cao, Wn là một đại lượng vô hướng;
Đối với bộ lọc Butterworth, đây là điểm mà tại đó mức tăng giảm xuống 1/sqrt[2] mức tăng của dải thông [“điểm -3 dB”]
Đối với các bộ lọc kỹ thuật số, nếu fs không được chỉ định, các đơn vị Wn được chuẩn hóa từ 0 đến 1, trong đó 1 là tần số Nyquist [do đó, Wn tính bằng nửa chu kỳ/mẫu và được xác định là 2*tần số tới hạn/fs]. Nếu fs được chỉ định, Wn ở cùng đơn vị với fs
Đối với bộ lọc tương tự, Wn là tần số góc [e. g. rad/s]
btype {'lowpass', 'highpass', 'bandpass', 'bandstop'}, tùy chọnLoại bộ lọc. Mặc định là 'đường thông thấp'
tương tự bool, tùy chọnKhi True, trả về bộ lọc tương tự, nếu không, bộ lọc kỹ thuật số sẽ được trả về
Loại đầu ra. tử số/mẫu số ['ba'], cực-không ['zpk'] hoặc phần bậc hai ['sos']. Mặc định là 'ba' để tương thích ngược, nhưng 'sos' nên được sử dụng để lọc mục đích chung
fs phao, tùy chọnTần số lấy mẫu của hệ thống kỹ thuật số
Mới trong phiên bản 1. 2. 0
Trả về b, a ndarray, ndarrayTử số [b] và mẫu số [a] đa thức của bộ lọc IIR. Chỉ trả lại nếu output='ba'
Các điểm không, cực và hệ số khuếch đại của hàm truyền bộ lọc IIR. Chỉ trả lại nếu output='zpk'
Biểu diễn phần thứ hai của bộ lọc IIR. Chỉ trả lại nếu output=='sos'
Xem thêm
>>> b, a = signal.butter[4, 100, 'low', analog=True] >>> w, h = signal.freqs[b, a] >>> plt.semilogx[w, 20 * np.log10[abs[h]]] >>> plt.title['Butterworth filter frequency response'] >>> plt.xlabel['Frequency [radians / second]'] >>> plt.ylabel['Amplitude [dB]'] >>> plt.margins[0, 0.1] >>> plt.grid[which='both', axis='both'] >>> plt.axvline[100, color='green'] # cutoff frequency >>> plt.show[]0,
>>> b, a = signal.butter[4, 100, 'low', analog=True] >>> w, h = signal.freqs[b, a] >>> plt.semilogx[w, 20 * np.log10[abs[h]]] >>> plt.title['Butterworth filter frequency response'] >>> plt.xlabel['Frequency [radians / second]'] >>> plt.ylabel['Amplitude [dB]'] >>> plt.margins[0, 0.1] >>> plt.grid[which='both', axis='both'] >>> plt.axvline[100, color='green'] # cutoff frequency >>> plt.show[]1
ghi chú
Bộ lọc Butterworth có đáp ứng tần số phẳng tối đa trong băng thông
Tham số đầu ra
>>> b, a = signal.butter[4, 100, 'low', analog=True] >>> w, h = signal.freqs[b, a] >>> plt.semilogx[w, 20 * np.log10[abs[h]]] >>> plt.title['Butterworth filter frequency response'] >>> plt.xlabel['Frequency [radians / second]'] >>> plt.ylabel['Amplitude [dB]'] >>> plt.margins[0, 0.1] >>> plt.grid[which='both', axis='both'] >>> plt.axvline[100, color='green'] # cutoff frequency >>> plt.show[]0 đã được thêm vào 0. 16. 0
Nếu hàm truyền đạt dạng
>>> b, a = signal.butter[4, 100, 'low', analog=True] >>> w, h = signal.freqs[b, a] >>> plt.semilogx[w, 20 * np.log10[abs[h]]] >>> plt.title['Butterworth filter frequency response'] >>> plt.xlabel['Frequency [radians / second]'] >>> plt.ylabel['Amplitude [dB]'] >>> plt.margins[0, 0.1] >>> plt.grid[which='both', axis='both'] >>> plt.axvline[100, color='green'] # cutoff frequency >>> plt.show[]1 được yêu cầu, các vấn đề về số có thể xảy ra do việc chuyển đổi giữa nghiệm và hệ số đa thức là một phép toán nhạy cảm về số, ngay cả đối với N >= 4. Nên làm việc với đại diện SOS
ví dụ
Thiết kế bộ lọc tương tự và vẽ đồ thị đáp ứng tần số của nó, hiển thị các điểm tới hạn
>>> from scipy import signal >>> import matplotlib.pyplot as plt
>>> b, a = signal.butter[4, 100, 'low', analog=True] >>> w, h = signal.freqs[b, a] >>> plt.semilogx[w, 20 * np.log10[abs[h]]] >>> plt.title['Butterworth filter frequency response'] >>> plt.xlabel['Frequency [radians / second]'] >>> plt.ylabel['Amplitude [dB]'] >>> plt.margins[0, 0.1] >>> plt.grid[which='both', axis='both'] >>> plt.axvline[100, color='green'] # cutoff frequency >>> plt.show[]
Tạo tín hiệu gồm 10 Hz và 20 Hz, được lấy mẫu ở 1 kHz
>>> t = np.linspace[0, 1, 1000, False] # 1 second >>> sig = np.sin[2*np.pi*10*t] + np.sin[2*np.pi*20*t] >>> fig, [ax1, ax2] = plt.subplots[2, 1, sharex=True] >>> ax1.plot[t, sig] >>> ax1.set_title['10 Hz and 20 Hz sinusoids'] >>> ax1.axis[[0, 1, -2, 2]]
Thiết kế bộ lọc thông cao kỹ thuật số ở 15 Hz để loại bỏ âm 10 Hz và áp dụng nó cho tín hiệu. [Bạn nên sử dụng định dạng phần thứ tự khi lọc, để tránh lỗi số với định dạng hàm truyền [
>>> b, a = signal.butter[4, 100, 'low', analog=True] >>> w, h = signal.freqs[b, a] >>> plt.semilogx[w, 20 * np.log10[abs[h]]] >>> plt.title['Butterworth filter frequency response'] >>> plt.xlabel['Frequency [radians / second]'] >>> plt.ylabel['Amplitude [dB]'] >>> plt.margins[0, 0.1] >>> plt.grid[which='both', axis='both'] >>> plt.axvline[100, color='green'] # cutoff frequency >>> plt.show[]2]]