Alcune domande su Slepian e finestre gaussiane generalizzate


10

Sto cercando di aggiungere la documentazione per tutte le funzioni della finestra in scipy.signal e sono bloccato sulle finestre Slepian (uguale a DPSS?) E Gaussiana generalizzata , di cui non avevo mai sentito parlare prima.

Esistono due variabili che sono parametri di forma di un certo tipo, pnel gaussiano generalizzato e widthnello slepio. ( sigsembra essere sigma, la deviazione standard.)

2 domande:

  1. Invece di me ingegneria inversa e ipotesi, qualcuno può spiegare come si chiamano queste variabili e cosa fanno?

  2. Puoi spiegare a cosa servono queste finestre o dove vengono utilizzate?

 

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

Possibili corrispondenze:

dpss_windows di Nipy funzionano usi NW, la "mezza banda normalizzata per 2NW = BW * f0 = BW * N / dt ma con dt preso come 1"

Matlab's dpss utilizza time_halfbandwidthÈ questa la stessa finestra? È time_halfbandwidthla stessa cosa di width?

Questa definizione DPSS ha "la frequenza di taglio desiderata del lobo principale in radianti al secondo".ωc

La distribuzione normale generalizzata ha β (uguale a due volte p?) Che è appena chiamato un parametro di forma, con distribuzione normale per β = 1 e distribuzione di Laplace per β = 2.


FWIW Mi sembra di ricordare che il DPSS è lo stesso (o estremamente simile a) una finestra di Kaiser. Mi dispiace è tutto quello che ho. :-)
Spacey,

@Mohammad: la finestra di Kaiser è un'approssimazione del DPSS, penso perché il vero DPSS è costoso dal punto di vista computazionale? en.wikipedia.org/wiki/Window_function#Kaiser_windows
endolith

2
Il DPSS è una finestra progettata con ottimizzazione vincolata, essendo la larghezza tollerabile del lobo principale. In effetti minimizza l'energia al di fuori del lobo principale (sidelobes) rispetto a un'energia fissa del lobo principale. Ho un buon libro a casa (fuori città per lavoro), quindi posso formulare una risposta migliore degna di pubblicare quando recensisco, ma questo è il jist di esso.
Bryan,

Risposte:


4

Le sequenze di Slepian sono una famiglia di funzioni. La maggior parte degli algoritmi calcola 2 * NW - 1 sequenze contemporaneamente per un dato NW. N è il numero di punti nella sequenza e W decide la metà della larghezza del lobo principale nel dominio della frequenza per la trasformata di Fourier di una determinata sequenza Slepica. In genere si usa un NW di 3 o 4 per l'elaborazione del segnale.

In scipy, stanno chiedendo il parametro (m nel codice Python) e (larghezza nel codice Python) separatamente, mentre in matlab si inserisce il prodotto con larghezza di banda temporale come singolo parametro. Questo ha senso, perché si sta in genere il calcolo delle sequenze Slepian per una dimensione di finestra fissa, .O N O NNWNWN

Se si sta valutando lo spettro di potenza di una serie storica stazionaria, il DPSS è l'insieme di finestre da utilizzare.

La funzione gaussiana generalizzata restituisce una funzione di tipo gaussiano elevata a potenze successivamente superiori a seconda del parametro p. Man mano che p viene elevato a poteri successivamente superiori, il gaussiano generalizzato si restringe nel dominio del tempo. La bella proprietà di un gaussiano è che è la propria trasformata di Fourier ed è la funzione che raggiunge il limite relativo al principio di incertezza. Una funzione gaussiana può essere utile se si desidera calcolare una trasformata o spettrogramma di Fourier di breve durata come stimatore per uno spettro di potenza variabile nel tempo di una serie temporale non stazionaria.


"La bella proprietà di un gaussiano è che è la sua trasformata di Fourier" È vero solo per p = 1, però, giusto?
endolith

Non sono sicuro che la simmetria valga solo per p = 1. Forse qualcuno può capire la FT di un gaussiano generalizzato (GG). Guardando la derivazione della FT di un gaussiano su Wolfram Mathworld mathworld.wolfram.com/FourierTransformGaussian.html . Possiamo liberarci della parte immaginaria dell'integrale per il GG con lo stesso argomento. Tuttavia, non sono sicuro di come valutareeax2pcos(2πkx)dx
ncRubert

1

Un singolo esempio per confutare GG è la sua trasformazione. p = 0,5 fornisce un normale esponenziale back-to-back che ha una trasformazione di 2a / (s ^ 2 + a ^ 2).

Per quanto riguarda il blocco DC, lo è. nel dominio della frequenza Fdcx (w) = 1 - F (w). Questo metterà il rifiuto attorno a DC con il near-DC in w non diventando ottimizzato nella banda ora passata. Quindi userei Dolph solo per fare in modo che la banda larga a banda larga diventi uguale ondulazione.

Questo è un impulso meno la finestra originale nel dominio del tempo. Quanto è grande l'impulso? deve forzare la somma della sequenza a zero.

Attenzione, la sequenza di lunghezza pari forza uno zero alla frequenza di Nyquist, quindi vorrai evitarlo.


-1

Anche la trasformata di Fourier di GG è gaussiana. Usando il teorema di convoluzione, FT (gaussiano \ volte gaussiano) = FT (gaussiano) \ conv FT (gaussiano) = gaussiano \ conv Gaussiano = gaussiano. Spero che abbia aiutato!


Questo è un gaussiano generalizzato, tuttavia, non un gaussiano normale. Non è una sua trasformazione. Vedere immagini: docs.scipy.org/doc/scipy/reference/generated/...
endolith
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.