firwin_2d#
- scipy.signal.firwin_2d(hsize, window, *, fc=None, fs=2, circular=False, pass_zero=True, scale=True)[Quelle]#
2D FIR-Filterdesign mittels der Fenster-Methode.
Diese Funktion berechnet die Koeffizienten eines 2D-Filters mit endlicher Impulsantwort. Der Filter ist separierbar mit linearer Phase; er wird als Produkt zweier 1D-Filter mit den durch hsize definierten Dimensionen entworfen. Zusätzlich kann er annähernd kreissymmetrische 2-D-Fenster erzeugen.
- Parameter:
- hsizetuple oder Liste der Länge 2
Längen des Filters in jeder Dimension. hsize[0] gibt die Anzahl der Koeffizienten in Zeilenrichtung an und hsize[1] gibt die Anzahl der Koeffizienten in Spaltenrichtung an.
- windowtuple oder Liste der Länge 2 oder Zeichenkette
Gewünschtes Fenster für jeden 1D-Filter oder ein einzelner Fenstertyp zur Erzeugung kreissymmetrischer 2-D-Fenster. Jedes Element sollte eine Zeichenkette oder ein Tupel aus Zeichenkette und Parameterwerten sein. Siehe
get_windowfür eine Liste von Fenstern und erforderlichen Parametern.- fcfloat oder 1D-Array-ähnlich, optional
Grenzfrequenz des Filters in denselben Einheiten wie fs. Dies definiert die Frequenz, bei der die Verstärkung des Filters bei einem Tiefpass- oder Hochpassfilter auf etwa -6 dB (halbe Leistung) abfällt. Für Mehrbandfilter kann fc ein Array von Grenzfrequenzen (d. h. Bandkanten) im Bereich [0, fs/2] sein, wobei jedes Band paarweise angegeben wird. Erforderlich, wenn circular False ist.
- fsfloat, optional
Die Abtastfrequenz des Signals. Standard ist 2.
- circularbool, optional
Ob ein kreissymmetrisches 2-D-Fenster erzeugt werden soll. Standard ist
False.- pass_zero{True, False, ‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’}, optional
Dieser Parameter wird direkt an
firwinfür jede skalare Frequenzachse übergeben. WennTrue, ist die Gleichspannungsverstärkung, d. h. die Verstärkung bei der Frequenz (0, 0), 1. WennFalse, ist die Gleichspannungsverstärkung bei Frequenz (0, 0) 0, wenn circularTrueist. Wenn circularFalseist, haben die Frequenzen (0, f1) und (f0, 0) die Verstärkung 0. Es kann auch ein Zeichenkettenargument für den gewünschten Filtertyp sein (entsprichtbtypein IIR-Designfunktionen).- scalebool, optional
Dieser Parameter wird direkt an
firwinfür jede skalare Frequenzachse übergeben. AufTruegesetzt, um die Koeffizienten so zu skalieren, dass die Frequenzantwort bei einer bestimmten Frequenz auf einer Frequenzachse genau eins ist. Diese Frequenz ist entweder0 (Gleichstrom), wenn das erste Durchlassband bei 0 beginnt (d. h. pass_zero ist
True)fs/2 (die Nyquist-Frequenz), wenn das erste Durchlassband bei fs/2 endet (d. h. der Filter ist ein einzelner Band-Hochpassfilter); andernfalls das Zentrum des ersten Durchlassbands
- Rückgabe:
- filter_2d(hsize[0], hsize[1]) ndarray
Koeffizienten des 2D-FIR-Filters.
- Löst aus:
- ValueError
Wenn hsize und window keine Tupel oder Listen mit 2 Elementen sind.
Wenn cutoff None ist, wenn circular True ist.
Wenn cutoff außerhalb des Bereichs [0, fs/2] liegt und circular
Falseist.Wenn eines der Elemente in window nicht erkannt wird.
- RuntimeError
Wenn
firwinbei der Gestaltung des Filters nicht konvergieren kann.
Siehe auch
firwinFIR-Filterdesign mittels der Fenster-Methode für 1D-Arrays.
get_windowGibt ein Fenster einer gegebenen Länge und eines gegebenen Typs zurück.
Beispiele
Erzeugt einen 5x5 Tiefpassfilter mit einer Grenzfrequenz von 0,1
>>> import numpy as np >>> from scipy.signal import get_window >>> from scipy.signal import firwin_2d >>> hsize = (5, 5) >>> window = (("kaiser", 5.0), ("kaiser", 5.0)) >>> fc = 0.1 >>> filter_2d = firwin_2d(hsize, window, fc=fc) >>> filter_2d array([[0.00025366, 0.00401662, 0.00738617, 0.00401662, 0.00025366], [0.00401662, 0.06360159, 0.11695714, 0.06360159, 0.00401662], [0.00738617, 0.11695714, 0.21507283, 0.11695714, 0.00738617], [0.00401662, 0.06360159, 0.11695714, 0.06360159, 0.00401662], [0.00025366, 0.00401662, 0.00738617, 0.00401662, 0.00025366]])
Erzeugt einen kreissymmetrischen 5x5 Tiefpassfilter mit Hamming-Fenster
>>> filter_2d = firwin_2d((5, 5), 'hamming', fc=fc, circular=True) >>> filter_2d array([[-0.00020354, -0.00020354, -0.00020354, -0.00020354, -0.00020354], [-0.00020354, 0.01506844, 0.09907658, 0.01506844, -0.00020354], [-0.00020354, 0.09907658, -0.00020354, 0.09907658, -0.00020354], [-0.00020354, 0.01506844, 0.09907658, 0.01506844, -0.00020354], [-0.00020354, -0.00020354, -0.00020354, -0.00020354, -0.00020354]])
Erzeugt Plots, die das Produkt zweier 1D-Filter mit einem kreissymmetrischen Filter vergleichen
>>> import matplotlib.pyplot as plt >>> hsize, fc = (50, 50), 0.05 >>> window = (("kaiser", 5.0), ("kaiser", 5.0)) >>> filter0_2d = firwin_2d(hsize, window, fc=fc) >>> filter1_2d = firwin_2d((50, 50), 'hamming', fc=fc, circular=True) ... >>> fg, (ax0, ax1) = plt.subplots(1, 2, tight_layout=True, figsize=(6.5, 3.5)) >>> ax0.set_title("Product of 2 Windows") >>> im0 = ax0.imshow(filter0_2d, cmap='viridis', origin='lower', aspect='equal') >>> fg.colorbar(im0, ax=ax0, shrink=0.7) >>> ax1.set_title("Circular Window") >>> im1 = ax1.imshow(filter1_2d, cmap='plasma', origin='lower', aspect='equal') >>> fg.colorbar(im1, ax=ax1, shrink=0.7) >>> plt.show()