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
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)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:
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
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:
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)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:
%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