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, p
no Gaussiano generalizado e width
no Slepian. ( sig
parece ser sigma, o desvio padrão.)
2 perguntas:
Em vez de fazer engenharia reversa e adivinhar, alguém pode explicar como essas variáveis são chamadas e o que fazem?
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_halfbandwidth
a mesma coisa que width
?
Esta definição de DPSS possui "a freqüência de corte do lobo principal desejada em radianos por segundo".
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.
fonte
Respostas:
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.
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.
fonte
p = 1
, certo?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.
fonte
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!
fonte