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, p
im verallgemeinerten Gaußschen und width
im Slepischen. ( sig
scheint Sigma zu sein, die Standardabweichung.)
2 Fragen:
Kann mir jemand erklären, wie diese Variablen heißen und was sie tun, anstatt sie rückzuentwickeln und zu erraten?
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 NW
die "standardisierte halbe Bandbreite entsprechend 2NW = BW * f0 = BW * N / dt, wobei dt jedoch als 1 angenommen wird".
Matlabs dpss verwendet time_halfbandwidth
Ist dies das gleiche Fenster? Ist time_halfbandwidth
das gleiche wie width
?
Diese DPSS-Definition hat "die gewünschte Grenzfrequenz der Hauptkeule im Bogenmaß pro Sekunde".
Die verallgemeinerte Normalverteilung hat β (gleich zweimal p
?), Was nur als Formparameter bezeichnet wird, mit Normalverteilung für β = 1 und Laplace-Verteilung für β = 2.
quelle
Antworten:
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.N. W. N.W. N.
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.
quelle
p = 1
, oder?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.
quelle
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!
quelle