Quelques questions sur Slepian et les fenêtres gaussiennes généralisées


10

J'essaie d'ajouter de la documentation pour toutes les fonctions de la fenêtre dans scipy.signal, et je suis bloqué sur les fenêtres Slepian (comme DPSS?) Et Gaussian généralisé , dont je n'avais jamais entendu parler auparavant.

Il y a deux variables qui sont des paramètres de forme d'un certain type, pdans le gaussien généralisé et widthdans le Slepian. ( sigsemble être sigma, l'écart-type.)

2 questions:

  1. Au lieu de faire de l'ingénierie inverse et de deviner, quelqu'un peut-il expliquer comment ces variables sont appelées et ce qu'elles font?

  2. Pouvez-vous expliquer à quoi ces fenêtres sont utiles ou où elles sont utilisées?

 

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

Correspondances possibles:

La fonction dpss_windows de nipy utilise NWla "demi-bande passante normalisée correspondant à 2NW = BW * f0 = BW * N / dt mais avec dt pris comme 1"

DPSS Matlab utilisations time_halfbandwidthEst - ce la même fenêtre? Est-ce time_halfbandwidthla même chose que width?

Cette définition DPSS a "la fréquence de coupure du lobe principal souhaitée en radians par seconde".ωc

La distribution normale généralisée a β (égal à deux fois p?) Qui est simplement appelé paramètre de forme, avec une distribution normale pour β = 1 et une distribution de Laplace pour β = 2.


FWIW Il me semble que le DPSS est le même (ou extrêmement similaire à) une fenêtre Kaiser. Désolé c'est tout ce que j'ai. :-)
Spacey

@Mohammad: La fenêtre Kaiser est une approximation du DPSS, je pense que le vrai DPSS est coûteux en calcul? en.wikipedia.org/wiki/Window_function#Kaiser_windows
endolith

2
Le DPSS est une fenêtre conçue avec une optimisation contrainte, la contrainte étant la largeur tolérable du lobe principal. En effet, il minimise l'énergie à l'extérieur du lobe principal (lobes secondaires) par rapport à une énergie du lobe principal fixe. J'ai un bon livre à la maison (hors de la ville pour affaires), donc je peux formuler une meilleure réponse digne d'être publiée lorsque je passe en revue, mais c'est l'essentiel.
Bryan

Réponses:


4

Les séquences de Slepian sont une famille de fonctions. La plupart des algorithmes calculent 2 * NW - 1 séquences à la fois pour un NW donné. N est le nombre de points dans la séquence et W décide de la moitié de la largeur du lobe principal dans le domaine fréquentiel pour la transformée de Fourier d'une séquence Slepienne donnée. En règle générale, vous utiliseriez un NW de 3 ou 4 pour votre traitement du signal.

Dans scipy, ils demandent séparément le paramètre (m dans le code Python) et (largeur dans le code Python) tandis que dans matlab, vous entrez le produit de bande passante temporelle comme un seul paramètre. Cela a du sens car vous calculez généralement les séquences de Slepian pour une taille de fenêtre fixe,W N WNWNWN

Si vous estimez le spectre de puissance d'une série chronologique stationnaire, le DPSS est l'ensemble de fenêtres que vous devez utiliser.

La fonction gaussienne généralisée renvoie une fonction de type gaussienne portée à des puissances successivement plus élevées en fonction du paramètre p. Lorsque p est élevé à des puissances successivement plus élevées, la gaussienne généralisée devient plus étroite dans le domaine temporel. La belle propriété d'un gaussien est que c'est sa propre transformée de Fourier et que c'est la fonction qui atteint la limite concernant le principe d'incertitude. Une fonction gaussienne peut être utile si vous souhaitez calculer une transformée de Fourier à court terme ou un spectrogramme comme estimateur pour un spectre de puissance variant dans le temps d'une série chronologique non stationnaire.


"La belle propriété d'un gaussien est qu'il s'agit de sa propre transformée de Fourier" Ce n'est vrai que pour p = 1, non?
endolith

eax2pcos(2πkx)dx

1

Un seul exemple pour réfuter GG est sa propre transformation. p = 0,5 donne une exponentielle dos à dos ordinaire qui a une transformée de 2a / (s ^ 2 + a ^ 2).

Quant au bloc DC, il l'est. dans le domaine fréquentiel Fdcx (w) = 1 - F (w). Cela mettra le rejet autour de DC avec le quasi-DC dans w devenant non optimisé dans la bande passante actuelle. Donc, je n'utiliserais Dolph que pour que la bande passante à large bande devienne une ondulation égale.

Il s'agit d'une impulsion moins la fonction de fenêtre d'origine dans le domaine temporel. Quelle taille pour l'impulsion? il doit forcer la somme de la séquence à zéro.

Attention, la séquence de longueur paire force un zéro à la fréquence de Nyquist, vous voudrez donc éviter cela.


-1

La transformée de Fourier de GG est également gaussienne. En utilisant le théorème de convolution, le FT (Gaussian \ times Gaussian) = FT (Gaussian) \ conv FT (Gaussian) = Gaussian \ conv Gaussian = Gaussian. J'espère que cela a aidé!


C'est un gaussien généralisé, cependant, pas un gaussien régulier. Ce n'est pas sa propre transformation. Voir les images: docs.scipy.org/doc/scipy/reference/generated/…
endolith
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.