Easily generate sine/cosine waveform data in Python using UliEngineering
In order to generate sinusoid test data in Python you can use the UliEngineering library which provides an easy-to-use functions in UliEngineering.SignalProcessing.Simulation
:
How to install UliEngineering
UliEngineering is a Python 3 only library. Install using pip
:
sudo pip3 install -U UliEngineering
Basic example
from UliEngineering.SignalProcessing.Simulation import sine_wave
# Default: Generates 1 second of data with amplitude = 1.0 (swing from -1.0 ... 1.0)
sine = sine_wave(frequency=10.0, samplerate=10e3)
cosine = cosine_wave(frequency=10.0, samplerate=10e3)
Amplitude & offset
Use amplitude=0.5
to specify that the sine wave should swing between -0.5
and 0.5
.
Use offset=2.0
to specify that the sine wave should be centered vertically around 2.0
:
from UliEngineering.SignalProcessing.Simulation import sine_wave
data = sine_wave(frequency=10.0, samplerate=10e3, amplitude=0.5, offset=2.0)
Phaseshift example
You can specify the phaseshift to use - to use a 180°
phaseshift, just use 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.)
Time delay example
While this is functionally equivalent to phase offset, it is often convenient to specify the time delay in seconds instead of the phase shift in degrees:
from UliEngineering.SignalProcessing.Simulation import sine_wave
original = sine_wave(frequency=10.0, samplerate=10e3)
# Shifted signal is delayed 0.01s = 10 milliseconds compared to original
shifted = sine_wave(frequency=10.0, samplerate=10e3, timedelay=0.01)
Note that in the time domain, the signals appear to be shifted backwards when you use a positive timedelay value. This is in accordance with the delay naming, implying that the signal is delayed by that amount.
You can specify both phase shift and time delay, meaning that both will be applied (the offset is added)
Plotting
If you want to debug your signals visually, this is the code that was used inside Jupyter to generate the plots shown above:
%matplotlib inline
from matplotlib import pyplot as plt
plt.style.use("ggplot")
# Generate data
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) to make it even larger!
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) # Top right