Ein paar Fragen zu Slepian und verallgemeinerten Gaußschen Fenstern


10

Ich versuche, Dokumentation für alle Fensterfunktionen in scipy.signal hinzuzufügen, und stecke bei den Fenstern Slepian (wie DPSS?) Und Generalized Gaussian fest , von denen ich noch nie zuvor gehört hatte.

Es gibt zwei Variablen, die Formparameter irgendeiner Art sind, pim verallgemeinerten Gaußschen und widthim Slepischen. ( sigscheint Sigma zu sein, die Standardabweichung.)

2 Fragen:

  1. Kann mir jemand erklären, wie diese Variablen heißen und was sie tun, anstatt sie rückzuentwickeln und zu erraten?

  2. Können Sie erklären, wofür diese Fenster nützlich sind oder wo sie verwendet werden?

 

def general_gaussian(M, p, sig, sym=True):
    """Return a window with a generalized Gaussian shape.

    The Gaussian shape is defined as ``exp(-0.5*(x/sig)**(2*p))``, the
    half-power point is at ``(2*log(2)))**(1/(2*p)) * sig``.

    """
    if M < 1:
        return np.array([])
    if M == 1:
        return np.ones(1, 'd')
    odd = M % 2
    if not sym and not odd:
        M = M + 1
    n = np.arange(0, M) - (M - 1.0) / 2.0
    w = np.exp(-0.5 * (n / sig) ** (2 * p))
    if not sym and not odd:
        w = w[:-1]
    return w

def slepian(M, width, sym=True):
    """Return the M-point slepian window.

    """
    if (M * width > 27.38):
        raise ValueError("Cannot reliably obtain slepian sequences for"
              " M*width > 27.38.")
    if M < 1:
        return np.array([])
    if M == 1:
        return np.ones(1, 'd')
    odd = M % 2
    if not sym and not odd:
        M = M + 1

    twoF = width / 2.0
    alpha = (M - 1) / 2.0
    m = np.arange(0, M) - alpha
    n = m[:, np.newaxis]
    k = m[np.newaxis, :]
    AF = twoF * special.sinc(twoF * (n - k))
    [lam, vec] = linalg.eig(AF)
    ind = np.argmax(abs(lam), axis=-1)
    w = np.abs(vec[:, ind])
    w = w / max(w)

    if not sym and not odd:
        w = w[:-1]
    return w

Mögliche Übereinstimmungen:

Die Funktion dpss_windows von nipy verwendet NWdie "standardisierte halbe Bandbreite entsprechend 2NW = BW * f0 = BW * N / dt, wobei dt jedoch als 1 angenommen wird".

Matlabs dpss verwendet time_halfbandwidthIst dies das gleiche Fenster? Ist time_halfbandwidthdas gleiche wie width?

Diese DPSS-Definition hat "die gewünschte Grenzfrequenz der Hauptkeule im Bogenmaß pro Sekunde".ωc

Die verallgemeinerte Normalverteilung hat β (gleich zweimal p?), Was nur als Formparameter bezeichnet wird, mit Normalverteilung für β = 1 und Laplace-Verteilung für β = 2.


FWIW Ich scheine mich zu erinnern, dass das DPSS das gleiche (oder sehr ähnliche) wie ein Kaiser-Fenster ist. Entschuldigung, das ist alles was ich habe. :-)
Spacey

@Mohammad: Kaiser Fenster ist eine Annäherung an das DPSS, ich denke, weil das wahre DPSS rechenintensiv ist? en.wikipedia.org/wiki/Window_function#Kaiser_windows
Endolith

2
Das DPSS ist ein Fenster mit eingeschränkter Optimierung, wobei die Einschränkung die tolerierbare Breite der Hauptkeule ist. Tatsächlich minimiert es die Energie außerhalb der Hauptkeule (Nebenkeulen) relativ zu einer festen Hauptkeulenenergie. Ich habe ein gutes Buch zu Hause (geschäftlich außerhalb der Stadt), damit ich eine bessere Antwort formulieren kann, die es wert ist, veröffentlicht zu werden, wenn ich sie überprüfe, aber das ist der springende Punkt.
Bryan

Antworten:


4

Die Slepian-Sequenzen sind eine Familie von Funktionen. Die meisten Algorithmen berechnen 2 * NW - 1 Sequenzen gleichzeitig für einen bestimmten NW. N ist die Anzahl der Punkte in der Sequenz und W entscheidet über die halbe Breite der Hauptkeule im Frequenzbereich für die Fourier-Transformation einer gegebenen Slepian-Sequenz. Normalerweise verwenden Sie für Ihre Signalverarbeitung einen NW von 3 oder 4.

In scipy werden die Parameter (m im Python-Code) und (width im Python-Code) separat abgefragt, während Sie in matlab das Zeitbandbreitenprodukt als einen einzelnen Parameter eingeben . Dies ist sinnvoll, da Sie normalerweise die Slepian-Sequenzen für eine feste Fenstergröße berechnen .W N W N.NWNWN

Wenn Sie das Leistungsspektrum einer stationären Zeitreihe schätzen, sind die DPSS die Fenster, die Sie verwenden sollten.

Die verallgemeinerte Gaußsche Funktion gibt eine Gauß-ähnliche Funktion zurück, die abhängig vom p-Parameter auf sukzessive höhere Potenzen angehoben wird. Wenn p auf sukzessive höhere Potenzen angehoben wird, wird der verallgemeinerte Gaußsche im Zeitbereich enger. Die schöne Eigenschaft eines Gaußschen ist, dass es seine eigene Fourier-Transformation ist und es die Funktion ist, die die Grenze bezüglich des Unsicherheitsprinzips erreicht. Eine Gaußsche Funktion kann nützlich sein, wenn Sie eine Kurzzeit-Fourier-Transformation oder ein Spektrogramm als Schätzer für ein zeitvariables Leistungsspektrum einer instationären Zeitreihe berechnen möchten.


"Die schöne Eigenschaft eines Gaußschen ist, dass es sich um eine eigene Fourier-Transformation handelt." Das gilt jedoch nur für p = 1, oder?
Endolith

Ich bin mir nicht sicher, ob die Symmetrie nur für p = 1 gilt. Vielleicht kann jemand die FT eines Generalisierten Gaußschen (GG) berechnen. Betrachten der Ableitung der FT eines Gaußschen auf Wolfram Mathworld mathworld.wolfram.com/FourierTransformGaussian.html . Mit demselben Argument können wir den Imaginärteil des Integrals für die GG loswerden. Ich bin mir jedoch nicht sicher, wie icheax2pcos(2πkx)dx
ncRubert

1

Ein einziges Beispiel, um GG zu widerlegen, ist seine eigene Transformation. p = 0,5 ergibt ein gewöhnliches Exponential von Rücken zu Rücken, das eine Transformation von 2a / (s ^ 2 + a ^ 2) aufweist.

Der DC-Block ist es. im Frequenzbereich Fdcx (w) = 1 - F (w). Dadurch wird die Zurückweisung um Gleichstrom gelegt, wobei der Nah-Gleichstrom im jetzt durchgelassenen Bereich nicht optimiert wird. Daher würde ich Dolph nur verwenden, um das Breitband-Durchlassband gleich wellig zu machen.

Dies ist ein Impuls abzüglich der ursprünglichen Fensterfunktion im Zeitbereich. Wie groß für den Impuls? es muss die Summe der Sequenz auf Null setzen.

Achtung, die Sequenz mit gerader Länge erzwingt eine Null bei der Nyquist-Frequenz, daher sollten Sie dies vermeiden.


-1

Die Fourier-Transformation von GG ist ebenfalls eine Gaußsche. Unter Verwendung des Faltungssatzes ist FT (Gauß \ mal Gauß) = FT (Gauß) \ Konv FT (Gauß) = Gauß \ Konv Gauß = Gauß. Hoffe das hat geholfen!


Dies ist jedoch ein verallgemeinerter Gaußscher, kein regulärer Gaußscher. Es ist keine eigene Transformation. Siehe Bilder: docs.scipy.org/doc/scipy/reference/generated/…
Endolith
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.