Generar fácilmente datos de onda seno/coseno en Python usando UliEngineering

Para generar datos de prueba sinusoidales en Python puedes usar la biblioteca UliEngineering que proporciona funciones fáciles de usar en UliEngineering.SignalProcessing.Simulation: Primero, instala UliEngineering.

Ejemplo básico

sine_cosine_example.py
from UliEngineering.SignalProcessing.Simulation import sine_wave
# Por defecto: Genera 1 segundo de datos con amplitud = 1.0 (oscila de -1.0 ... 1.0)
sine = sine_wave(frequency=10.0, samplerate=10e3)
cosine = cosine_wave(frequency=10.0, samplerate=10e3)

Ondas seno y coseno

Amplitud y desplazamiento

Usa amplitude=0.5 para especificar que la onda seno debe oscilar entre -0.5 y 0.5.

Usa offset=2.0 para especificar que la onda seno debe estar centrada verticalmente alrededor de 2.0:

sine_with_offset.py
from UliEngineering.SignalProcessing.Simulation import sine_wave

data = sine_wave(frequency=10.0, samplerate=10e3, amplitude=0.5, offset=2.0)

Ejemplo de desfase

Puedes especificar el desfase a usar - para usar un desfase de 180°, solo usa phaseshift=180.0

phaseshift_example.py
from UliEngineering.SignalProcessing.Simulation import sine_wave

original = sine_wave(frequency=10.0, samplerate=10e3)
shifted = sine_wave(frequency=10.0, samplerate=10e3, phaseshift=180.)

Ejemplo de retardo de tiempo

Aunque esto es funcionalmente equivalente al desfase, a menudo es conveniente especificar el retardo de tiempo en segundos en lugar del desfase en grados:

timedelay_example.py
from UliEngineering.SignalProcessing.Simulation import sine_wave

original = sine_wave(frequency=10.0, samplerate=10e3)
# La señal desplazada está retrasada 0.01s = 10 milisegundos comparada con la original
shifted = sine_wave(frequency=10.0, samplerate=10e3, timedelay=0.01)

Onda seno con retardo de tiempo comparada con la original

Ten en cuenta que en el dominio del tiempo, las señales parecen estar desplazadas hacia atrás cuando usas un valor positivo de timedelay. Esto está de acuerdo con la nomenclatura de delay, implicando que la señal está retrasada por esa cantidad.

Puedes especificar tanto desfase como retardo de tiempo, lo que significa que ambos se aplicarán (el desplazamiento se añade)

Trazado

Si quieres depurar tus señales visualmente, este es el código que se usó dentro de Jupyter para generar las gráficas mostradas arriba:

plot_timedelay_jupyter.py
%matplotlib inline
from matplotlib import pyplot as plt
plt.style.use("ggplot")

# Generar datos
from UliEngineering.SignalProcessing.Simulation import sine_wave

original = sine_wave(frequency=10.0, samplerate=10e3)
shifted = sine_wave(frequency=10.0, samplerate=10e3, timedelay=0.01)

# set_size_inches(20, 10) para hacerla aún más grande!
plt.gcf().set_size_inches(10, 5)
plt.plot(original, label="original")
plt.plot(shifted, label="shifted")
plt.savefig("/dev/shm/timedelay.svg")
plt.legend(loc=1) # Arriba a la derecha

Echa un vistazo a artículos similares por categoría: Ciencia de datos Matemáticas Python