es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escalado de scipy.signal.welch: espectro vs densidad.

Necesito estimar la densidad espectral de potencia de una señal y utilizar el algoritmo welch provisto por scipy.signal para este propósito. Incluso después de horas de investigación, no pude averiguar cuál es exactamente la diferencia en la salida cuando establezco el kwarg ‘scaling’ en ‘spectrum’ en comparación con la configuración predeterminada ‘density’.

Pensé que el ‘spectrum’ podría ser la ‘density’ multiplicada por la diferencia de frecuencia entre dos frecuencias adyacentes devueltas por welch, que de hecho convertiría una densidad de potencia en una potencia. Esto es cierto solo hasta un factor de 1.5 del que realmente me cuesta entender de dónde proviene. ¿Alguna idea?

import numpy as np
from scipy.signal import welch
dt = 1/4
tt = np.arange(0,1000,dt)
w = 1/5
data = 2 * np.sin(2*np.pi * w * tt) + np.random.normal(size = len(tt), scale = 1)

ffwelch, spectrum = welch(data, nperseg = 250, fs = 1/dt, scaling = 'spectrum')
ffwelch, density = welch(data, nperseg = 250, fs = 1/dt, scaling = 'density')
dfwelch = (ffwelch[1]-ffwelch[0])
test =  spectrum / (density * dfwelch)

la variable test siempre será 1.5 …

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La diferencia entre el argumento scaling establecido en spectrum y density en la función welch de scipy.signal es que cuando scaling se establece en spectrum, la salida es la densidad espectral de potencia (PSD) multiplicada por la diferencia de frecuencia entre dos frecuencias adyacentes devueltas por welch. Cuando scaling se establece en density, la salida es la PSD sin la multiplicación por la diferencia de frecuencia. Es por eso que la variable test siempre será 1.5.

Comments are closed.