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, p
dans le gaussien généralisé et width
dans le Slepian. ( sig
semble être sigma, l'écart-type.)
2 questions:
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?
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 NW
la "demi-bande passante normalisée correspondant à 2NW = BW * f0 = BW * N / dt mais avec dt pris comme 1"
DPSS Matlab utilisations time_halfbandwidth
Est - ce la même fenêtre? Est-ce time_halfbandwidth
la même chose que width
?
Cette définition DPSS a "la fréquence de coupure du lobe principal souhaitée en radians par seconde".
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.
la source
Réponses:
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 WN W NW N
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 source
p = 1
, non?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.
la source
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é!
la source