Get the Books

Enjoying these notebooks and want to support the work? Check out the practical books on Data Science, Visualisation, and Evolutionary Algorithms.

Get the books

Multiple Sine Waves in the Time Domain

Preamble

In [14]:
# used to create block diagrams
%reload_ext xdiag_magic
%xdiag_output_format svg
    
import numpy as np                   # for multi-dimensional containers
import pandas as pd                  # for DataFrames
import plotly.graph_objects as go    # for data visualisation
import plotly.io as pio              # to set shahin plot layout
from plotly.subplots import make_subplots

pio.templates['shahin'] = pio.to_templated(go.Figure().update_layout(margin=dict(t=0,r=0,b=40,l=40))).layout.template
pio.templates.default = 'shahin'

Creating Sine Waves

In a previous section we looked at how to create a single Sine Wave and visualise it in the time domain.

In [11]:
sample_rate = 1000
start_time = 0
end_time = 10

time = np.arange(start_time, end_time, 1/sample_rate)

frequency = 3
amplitude = 1
theta = 0

sinewave = amplitude * np.sin(2 * np.pi * frequency * time + theta)

fig = go.Figure(layout=dict(xaxis=dict(title='Time (sec)'),yaxis=dict(title='Amplitude')))
fig.add_scatter(x=time, y=sinewave)
fig.show()

Creating Multiple Sine Wave

Let's create and plot five sine waves. Let's start by defining our time window and sample rate.

In [52]:
sample_rate = 1000
start_time = 0
end_time = 10
theta = 0

time = np.arange(start_time, end_time, 1/sample_rate)

Now we'll store their frequencies in a list named frequency, and their amplitudes in a list named amplitude.

In [53]:
frequency = [3, 5, 2, 1, 10]
amplitude = [1, 2, 7, 3, 0.1]

Finally, let's loop through our five frequency/amplitude values and use them to calculate and visualise the sine waves using subplots.

In [54]:
fig = make_subplots(rows=5, cols=1, shared_xaxes=True)

for i in range(5):
    sinewave = amplitude[i] * np.sin(2 * np.pi * frequency[i] * time + theta)
    fig.add_scatter(x=time, y=sinewave, row=i+1, col=1, name=f"wave {i+1}")
    
fig.show()