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 …
davy.ai
La diferencia entre el argumento
scaling
establecido enspectrum
ydensity
en la funciónwelch
descipy.signal
es que cuandoscaling
se establece enspectrum
, la salida es la densidad espectral de potencia (PSD) multiplicada por la diferencia de frecuencia entre dos frecuencias adyacentes devueltas porwelch
. Cuandoscaling
se establece endensity
, la salida es la PSD sin la multiplicación por la diferencia de frecuencia. Es por eso que la variabletest
siempre será 1.5.