Algumas perguntas sobre janelas gaussianas Slepian e generalizadas

10

Estou tentando adicionar documentação para todas as funções da janela em scipy.signal e estou preso nas janelas Slepian (igual ao DPSS?) E Gaussiana generalizada , das quais nunca tinha ouvido falar antes.

Existem duas variáveis ​​que são parâmetros de forma de algum tipo, pno Gaussiano generalizado e widthno Slepian. ( sigparece ser sigma, o desvio padrão.)

2 perguntas:

  1. Em vez de fazer engenharia reversa e adivinhar, alguém pode explicar como essas variáveis ​​são chamadas e o que fazem?

  2. Você pode explicar para que essas janelas são úteis ou onde são usadas?

 

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

Possíveis correspondências:

a função dpss_windows de nipy usa NW, "a meia largura de banda padronizada correspondente a 2NW = BW * f0 = BW * N / dt, mas com dt tomado como 1"

Usos do dpss do Matlabtime_halfbandwidth É a mesma janela? É time_halfbandwidtha mesma coisa que width?

Esta definição de DPSS possui "a freqüência de corte do lobo principal desejada em radianos por segundo".ωc

A distribuição normal generalizada tem β (igual a duas vezes p?), Que é apenas chamado de parâmetro de forma, com distribuição normal para β = 1 e distribuição de Laplace para β = 2.

endólito
fonte
FWIW Eu me lembro que o DPSS é o mesmo (ou extremamente semelhante a) uma janela do Kaiser. Desculpe, isso é tudo que eu tenho. :-)
Spacey
@Mohammad: Janela Kaiser é uma aproximação do DPSS, acho que porque o verdadeiro DPSS é computacionalmente caro? pt.wikipedia.org/wiki/Window_function#Kaiser_windows
endolith
2
O DPSS é uma janela projetada com otimização restrita, sendo a restrição a largura tolerável do lobo principal. Com efeito, minimiza a energia fora do lóbulo principal (lóbulos laterais) em relação a uma energia fixa do lóbulo principal. Eu tenho um bom livro em casa (fora da cidade a negócios), para que eu possa formular uma resposta melhor digna de publicação quando eu revisar, mas essa é a essência.
Bryan

Respostas:

4

As seqüências Slepian são uma família de funções. A maioria dos algoritmos calcula 2 * NW - 1 seqüências de uma vez para um dado NW. N é o número de pontos na sequência e W decide metade da largura do lóbulo principal no domínio da frequência para a transformada de Fourier de uma determinada sequência Slepian. Normalmente, você usaria um NW de 3 ou 4 para o processamento do sinal.

NWNWN

Se você estiver estimando o espectro de potência de uma série temporal estacionária, o DPSS é o conjunto de janelas que você deve usar.

A função gaussiana generalizada retorna uma função semelhante a gaussiana aumentada para potências sucessivamente mais altas, dependendo do parâmetro p. À medida que p é elevado a potências sucessivamente mais altas, o gaussiano generalizado se torna mais estreito no domínio do tempo. A boa propriedade de um gaussiano é que é sua própria transformada de Fourier e é a função que atinge o limite referente ao princípio da incerteza. Uma função gaussiana pode ser útil se você desejar calcular uma transformada de Fourier ou espectrograma de curto prazo como estimador para um espectro de potência variável no tempo de uma série temporal não estacionária.

ncRubert
fonte
"A bela propriedade de um gaussiano é que é sua própria transformada de Fourier" Isso é verdade apenas para p = 1, certo?
Endolith 25/10
Não tenho certeza se a simetria vale apenas para p = 1. Talvez alguém possa calcular o TF de um gaussiano generalizado (GG). Observando a derivação do FT de um gaussiano no Wolfram Mathworld mathworld.wolfram.com/FourierTransformGaussian.html . Podemos nos livrar da parte imaginária da integral para o GG pelo mesmo argumento. Embora, eu não tenho certeza de como avaliar -e-umax2pcos(2πkx)dx
1

Um único exemplo para refutar o GG é sua própria transformação. p = 0,5 fornece um exponencial comum consecutivo que possui uma transformação de 2a / (s ^ 2 + a ^ 2).

Quanto ao bloco DC, é. no domínio da frequência Fdcx (w) = 1 - F (w). Isso colocará a rejeição em torno de DC com o near-DC em w se tornando não otimizado na banda passante agora. Então, eu usaria apenas o Dolph para fazer com que a banda passante de banda larga se tornasse igual.

Isso é um impulso menos a função original da janela no domínio do tempo. Qual o tamanho do impulso? deve forçar a soma da sequência para zero.

Atenção, a sequência de comprimentos pares força um zero na frequência Nyquist, portanto, você deve evitar isso.

Duncan Gray
fonte
-1

A transformada de Fourier de GG também é gaussiana. Usando o teorema da convolução, o FT (gaussiano \ vezes gaussiano) = FT (gaussiano) \ conv FT (gaussiano) = gaussiano \ conv gaussiano = gaussiano. Espero que tenha ajudado!

Neuronator
fonte
Este é um gaussiano generalizado, porém, não um gaussiano regular. Não é sua própria transformação. Veja as imagens: docs.scipy.org/doc/scipy/reference/generated/...
endolith