Trazar la densidad espectral de potencia usando Matplotlib – Python

La función matplotlib.pyplot.psd() se utiliza para trazar la densidad espectral de potencia. En el método del periodograma medio de Welch para evaluar la densidad espectral de potencia (por ejemplo, P xx ), el vector ‘x’ se divide por igual en segmentos NFFT. Cada segmento está enventanado por la ventana de función y sin tendencia por la función detrend. La superposición entre segmentos viene dada por ‘nooverlap’. Los |fft(i)|*2 de cada segmento ‘i’ se promedian juntos para calcular P, con escalado almacenado en búfer para corregir la pérdida de energía debido a la ventana.

Nota: Si len(x) < NFFT, será cero con relleno NFFT.

Sintaxis: matplotlib.pyplot.psd(x, NFFT=Ninguno, Fs=Ninguno, Fc=Ninguno, detrend=Ninguno, ventana=Ninguno, noverlap=Ninguno, pad_to=Ninguno, lados=Ninguno, scale_by_freq=Ninguno, return_line=Ninguno, *, datos=Ninguno, **kwargs)

Parámetros:

  1. x: es un parámetro requerido de una array 1D o una secuencia que contiene datos 
     
  2. Fs: Este es un parámetro requerido que tiene un valor escalar y tiene un valor por defecto de 2. Su valor es la frecuencia de muestreo (muestras por unidad de tiempo). Este valor se utiliza para calcular frecuencias de Fourier, freqs, en ciclos por unidad de tiempo. 
     
  3. ventana: esta es una array ND invocable que generalmente es una función o un vector de longitud NFFT. Su valor predeterminado es window_hanning. Cuando se pasa una función como parámetro/argumento, toma un segmento de datos como argumento y devuelve la versión en ventana del segmento. 
     
  4. lados: este parámetro puede tener uno de los tres valores, a saber, ‘predeterminado’, ‘un lado’ o ‘dos ​​lados’. Esto se utiliza para especificar qué lados del espectro se devolverán. el ‘predeterminado’ proporciona su comportamiento predeterminado, que devuelve un solo lado para datos reales y ambos para datos complejos. El valor ‘oneside’ se usa para forzar el retorno de un espectro de un solo lado, mientras que el valor ‘twoside’ es para devolver el espectro de dos lados. 
     
  5. > pad_to: este parámetro contiene un valor entero que representa el número de puntos en los que se rellena el segmento de datos mientras se realiza la FFT. Es importante tener en cuenta que esto es diferente de NFFT, que establece la cantidad de puntos de datos utilizados. Esto puede proporcionar más puntos en el gráfico sin aumentar la resolución real del espectro (la distancia mínima entre los picos que se pueden resolver), lo que permite obtener más detalles. Esto también corresponde al parámetro ‘n’ en la llamada de fft(). Su valor predeterminado es Ninguno, que establece pad_to igual a NFFT. 
     
  6. . NFFT: contiene un valor entero que representa la cantidad de puntos de datos utilizados en cada bloque para FFT. La más eficiente es la potencia de 2. Su valor predeterminado es 256. Se debe evitar usar esto para obtener cero rellenos, ya que puede resultar en una escala incorrecta de los resultados; en su lugar, se debe usar pad_to para el mismo propósito. 
     
  7. detrend: puede aceptar tres valores, a saber, ‘ninguno’, ‘media’, ‘lineal’ o invocable y tiene un valor predeterminado como ‘ninguno’. Esta función está diseñada para eliminar la tendencia media o lineal antes de la fft-ing de cada segmento. El detrend en Matplotlib es una función a diferencia del detrend en MATLAB donde es un vector. El módulo mlab define ‘detrend_none’, ‘detrend_mean’ y ‘detrend_linear’, pero también se puede usar una función personalizada. Las strings también pueden elegir una función. El ‘ninguno’ llama a ‘detrend_none’, el ‘linear’ llama a ‘detrend_linear’ y el ‘mean’ llama a ‘detrend_mean’. 
     
  8. scale_by_freq: Es un argumento opcional que acepta un valor booleano. Se utiliza para especificar si la densidad resultante debe escalarse escalando la frecuencia. Esto daría la densidad en unidades de Hz^-1. Esto hace que la integración sobre los valores de frecuencia devueltos. El valor predeterminado para la compatibilidad con MATLAB es True. 
     
  9. noverlap: Es un valor entero que representa el número total de puntos que se superponen entre segmentos. El valor predeterminado para esto es 0, lo que sugiere que no hay superposición. 
     
  10. Fc: es un valor entero que representa las compensaciones de x extensión de la gráfica para reflejar el rango de frecuencia que se usa cuando se obtiene una señal y luego se filtra, después de lo cual se reduce la muestra a la banda base. la ‘x’ representa la frecuencia central de x (cuyo valor predeterminado es 0) 
     
  11. return_line: Es un booleano que decide si incluir la línea objetada que se grafica en los valores de retorno. Este valor es falso por defecto 

Devoluciones:  

  1. P xx : Es una array 1-D que representa el espectro de potencia P_{xx} antes de ser escalado.
     
  2. freqs: Es un arreglo !-D que representa las frecuencias correspondientes a los elementos P xx
     
  3. línea: Es una instancia de Line@D que es una línea generada por la función. Solo regresa si return_line se establece en True. 

Otros parámetros:  
**kwargs los argumentos de palabras clave se utilizan para controlar las propiedades de Line2D  

Propiedad Descripción
filtro_agg una función de filtro que toma una array flotante (m, n, 3) y un valor de ppp que devuelve una array (m, n, 3)
alfa flotar
animado bool
suavizado o aa bool
clip_box Bbox
clip_en bool
clip_path [(Ruta, Transformar)|Parche|Ninguno]
color o c color
contiene invocable
dash_capstyle {‘trasero’, ‘redondo’, ‘proyectado’}
dash_joinstyle {‘inglete’, ‘redondo’, ‘bisel’}
guiones secuencia de flotadores (tinta de encendido/apagado en puntos) o (Ninguno, Ninguno)
estilo de dibujo o ds {‘predeterminado’, ‘pasos’, ‘pasos-pre’, ‘pasos-medio’, ‘pasos-post’}, predeterminado: ‘predeterminado’
figura figura
estilo de relleno {‘completo’, ‘izquierda’, ‘derecha’, ‘abajo’, ‘arriba’, ‘ninguno’}
Gid calle
en_diseño bool
etiqueta objeto
estilo de línea o lsl {‘-‘, ‘–’, ‘-.’, ‘:’, ”, (desplazamiento, on-off-seq), …}
ancho de línea o lw flotar
marcador estilo marcador
marcadorbordecolor o mec color
Cmarkeredgewidth o mew flotar
color de la cara del marcador o mfc color
marcadorfacecoloralt o mfcalt color
tamaño de marcador o ms flotar
marcar cada Ninguno o int o (int, int) o rebanada o List[int] o float o (float, float)
efectos_ruta ResumenRutaEfecto
recogedor flotante o invocable[[Artista, Evento], Tuple[bool, dict]]
radio de pico flotar
rasterizado booleano o ninguno
sketch_params (escala: flotante, longitud: flotante, aleatoriedad: flotante) 
 
siesta booleano o ninguno
solid_capstyle {‘trasero’, ‘redondo’, ‘proyectado’} 
 
solid_joinstyle {‘inglete’, ‘redondo’, ‘bisel’}
transformar matplotlib.transforms.Transformar
URL calle
visible bool
datos x array 1D
ydatos array 1D
orden Z flotar

Ejemplo 1: 

Python3

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.gridspec as gridspec
 
# set random state for reproducibility
np.random.seed(19695601)
 
diff = 0.01
ax = np.arange(0, 10, diff)
n = np.random.randn(len(ax))
by = np.exp(-ax / 0.05)
 
cn = np.convolve(n, by) * diff
cn = cn[:len(ax)]
s = 0.1 * np.sin(2 * np.pi * ax) + cn
 
plt.subplot(211)
plt.plot(ax, s)
plt.subplot(212)
plt.psd(s, 512, 1 / diff)
 
plt.show()

Producción: 

spectral density in Python using Matplotlib

Ejemplo 2:

Python3

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.gridspec as gridspec
 
 
# set random valueto ensure reproducibility
random_rep = np.random.RandomState(19680801) 
 
frame_per_second = 1000
a = np.linspace(0, 0.3, 301)
b = np.array([2, 8]).reshape(-1, 1)
c = np.array([150, 140]).reshape(-1, 1)
d = (b * np.exp(2j * np.pi * c * a)).sum(axis = 0) + 5 * random_rep.randn(*a.shape)
 
figure, (a0, a1) = plt.subplots(ncols = 2,
                                constrained_layout = True)
 
e = np.arange(-50, 30, 10)
f = (e[0], e[-1])
g = np.arange(-500, 550, 200)
 
a0.psd(d, NFFT = 301,
       Fs = frame_per_second,
       window = mlab.window_none,
       pad_to = 1024,
       scale_by_freq = True)
 
a0.set_title('Periodo-gram')
a0.set_yticks(e)
a0.set_xticks(g)
a0.grid(True)
a0.set_ylim(f)
 
a1.psd(d, NFFT = 150,
       Fs = frame_per_second,
       window = mlab.window_none,
       pad_to = 512,
       noverlap = 75,
       scale_by_freq = True)
 
a1.set_title('Welch')
a1.set_xticks(g)
a1.set_yticks(e)
 
# overwriting the y-label added by `psd`
a1.set_ylabel('')
a1.grid(True)
a1.set_ylim(f)
 
plt.show()

Producción: 

spectral density in Python using Matplotlib

Publicación traducida automáticamente

Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *