Understanding Digital Signals: Graphing with Python Techniques
Written on
Chapter 1: Introduction to Digital Signals
Digital signals represent the digitized forms of various natural phenomena, such as music, vibrations, and images. Before diving into Python analysis, it’s crucial to understand how to access and visualize this data effectively.
To familiarize ourselves with graphing techniques, let's examine some common digital signals.
Here is an example of a digital signal representing a song in Garageband.
Next, we have a digital representation of a woman’s heartbeat sourced from the MIT-BIH Arrhythmia Database, which showcases the heartbeat from two different EKG leads.
A comparison of AM and FM radio signals serves as another illustration.
Moreover, even an image, like that of a husky, can be classified as a digital signal. This classification will become clearer as we delve into the mathematical and neuroscientific aspects of digital signals.
Finally, let's consider an EEG representation of an epileptic seizure, showcasing how digital signals can be derived from complex biological phenomena.
Overall, the term "digital signal" typically refers to sequences of numerical data that fluctuate over time, making them suitable for visualization through graphs. These signals can elucidate various phenomena across disciplines like biology, chemistry, and physics.
The primary objectives for analyzing these signals include:
- Describing phenomena in terms of frequency and amplitude to identify patterns (essentially "time series analysis").
- Utilizing machine learning and AI for predictive modeling based on the data.
- Modulating signals in artistic expressions (such as music) or enhancing them for purposes like cybersecurity and forensic analysis.
Chapter 2: Visualizing Digital Signals in Python
To graph digital signals in Python, we can utilize libraries such as Matplotlib, Seaborn, and Plotly. This tutorial will focus on Matplotlib for our visualizations.
We will explore several options for graphing:
- Basic sine waves
- Heartbeat data (EKG)
- Audio from a .wav file
- Seismographic data from an earthquake
Step 0: Prerequisites for Graphing
Ensure you have the following installed:
- Python 3
- Matplotlib
- Numpy
- Pandas
If you're using platforms like Kaggle or Google Colab, these libraries should already be available.
Option 1: Graphing a Sine Wave
Sine waves are fundamental digital signals and serve as the building blocks for more complex signals, which can later be decomposed using Fourier analysis.
To create and graph a sine wave using Numpy and Matplotlib, follow this code:
import numpy as np
import matplotlib.pyplot as plt
# Define wave properties
amplitude = 3
frequency = 10
sampling_rate = 1000
duration = 1
# Generate timestamps
time = np.arange(0, duration, 1/sampling_rate)
# Construct the sine wave
sine_wave = amplitude * np.sin(np.pi * 2 * frequency * time)
# Plot the sine wave
plt.title("A Sine Wave")
plt.xlabel("Time (s)")
plt.ylabel("Amplitude")
plt.plot(time, sine_wave)
plt.show()
Option 2: Graphing Heartbeat Data (EKG)
Using the MIT-BIH Arrhythmia Database, we can visualize heartbeat data. First, download a CSV containing EKG data from a patient.
import pandas as pd
import matplotlib.pyplot as plt
# Load EKG data
ekg = pd.read_csv("116.csv", index_col=0)
# Plot Lead II data
ekg["MLII"].plot()
plt.show()
To zoom in on specific heartbeats, modify the plotting range:
ekg[0:1000]["MLII"].plot()
plt.show()
Option 3: Graphing Audio Signals from a .wav File
Music files are common digital signals. We can easily open .wav files using Python's wave library.
import numpy as np
import wave
import matplotlib.pyplot as plt
wavefile = wave.open("my_music.wav", "r")
frames = wavefile.readframes(-1)
signal = np.fromstring(frames, "int16")
framerate = wavefile.getframerate()
data_length = signal.shape[0]
time_length = data_length / framerate
time = np.linspace(0., time_length, data_length)
plt.plot(time, signal)
plt.show()
Option 4: Graphing Seismographic Data
For an example, we will graph data from the 2016 Fukushima earthquake.
import pandas as pd
import matplotlib.pyplot as plt
fukushima = pd.read_csv("fukushima_2016.csv", skiprows=8, index_col=0, parse_dates=True)
fukushima.plot()
plt.show()
Conclusion
These methods provide various ways to visualize and analyze digital signals and other types of time series data. For further exploration, check our subsequent article on identifying peaks and valleys in signal data.
Other Articles in this Series
- Intro to Digital Signal Processing
- How to Graph Digital Signals (this article)
- How to Find Peaks and Valleys in a Signal
Questions and Feedback
For inquiries or feedback, reach out via email at [email protected] or connect with us on Instagram (@protobioengineering). If you appreciated this article, consider supporting us with a donation.