A modern, multi-channel simulated oscilloscope application built with Python. This project provides a graphical user interface (GUI) for generating and visualizing various waveforms while displaying real-time signal measurements. It’s a perfect tool for students, hobbyists, or anyone needing a simple yet powerful way to explore signal theory without physical hardware.
The application leverages the customtkinter
library for a sleek, dark-themed interface and uses matplotlib
for dynamic, oscilloscope-style plotting.
Features
- Multi-Channel Support: Simulate and plot up to three independent signal channels simultaneously.
- Diverse Waveform Generation: Create signals using a variety of waveform types:
- Sine Wave
- Square Wave (with adjustable duty cycle)
- Sawtooth Wave
- Triangle Wave
- White Noise
- Real-Time Signal Analysis: Get live measurements for each selected channel, including:
- Frequency (Hz)
- Peak-to-Peak Voltage ()
- RMS Voltage ()
- Maximum Voltage ()
- Minimum Voltage ()
- Duty Cycle (for square waves)
- Customizable Controls: Adjust key parameters like signal frequency, amplitude, vertical offset, and phase for each channel. You can also configure the oscilloscope’s time and voltage divisions.
- Data Export: Save the generated signal data from all channels to a CSV file for further analysis.
- Intuitive GUI: A clean and responsive user interface designed with
customtkinter
for a modern look and feel.
Package you need:
Make sure you have Python 3.x installed. The following packages are required to run the application:
customtkinter
matplotlib
numpy
scipy
How to use:
- Add Channels: Click the “Add Channel” button to create a new signal tab.
- Configure Signals: Select a channel tab and use the controls to choose a waveform type and set its parameters (frequency, amplitude, etc.).
- Start Simulation: Click “Start Oscilloscope” to begin plotting the live signals.
- Analyze Data: Select a channel tab to view its real-time measurements in the “Measurements” section.
- Export Data: Click “Save to CSV” to export the current data from all active channels to a file.
Code