scipy.signal.

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_window fü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 firwin für jede skalare Frequenzachse übergeben. Wenn True, ist die Gleichspannungsverstärkung, d. h. die Verstärkung bei der Frequenz (0, 0), 1. Wenn False, ist die Gleichspannungsverstärkung bei Frequenz (0, 0) 0, wenn circular True ist. Wenn circular False ist, haben die Frequenzen (0, f1) und (f0, 0) die Verstärkung 0. Es kann auch ein Zeichenkettenargument für den gewünschten Filtertyp sein (entspricht btype in IIR-Designfunktionen).

scalebool, optional

Dieser Parameter wird direkt an firwin für jede skalare Frequenzachse übergeben. Auf True gesetzt, um die Koeffizienten so zu skalieren, dass die Frequenzantwort bei einer bestimmten Frequenz auf einer Frequenzachse genau eins ist. Diese Frequenz ist entweder

  • 0 (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 False ist.

  • Wenn eines der Elemente in window nicht erkannt wird.

RuntimeError

Wenn firwin bei der Gestaltung des Filters nicht konvergieren kann.

Siehe auch

firwin

FIR-Filterdesign mittels der Fenster-Methode für 1D-Arrays.

get_window

Gibt 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()
../../_images/scipy-signal-firwin_2d-1.png