
Lab Scope
Skills learned: LabView, Analog to digital conversion, Frequency/Time domain applications and Signal Filtering
In this project, I designed a virtual oscilloscope using LabView with a few time/frequency domain features.

An oscilloscope (informally scope or O-scope) is a type of electronic test instrument that graphically displays varying voltages of one or more signals as a function of time. The main purpose is to capture information on electrical signals for debugging, analysis, or characterization. The displayed waveform can then be analyzed for properties such as amplitude, frequency, rise time, time interval, distortion, and others. Originally, the calculation of these values required manually measuring the waveform against the scales built into the screen of the instrument.[1] Modern digital instruments may calculate and display these properties directly.
Features that were implemented in the virtual oscilloscope:
- Three different input channels, directly from a microphone, read from a prerecorded file either .wav or a .csv
- Display the time-domain signal on the screen
- Allow the user to control the time, amplitude, phase, and offset using dials
- Display the calculated peak-peak amplitude, RMS, and frequency of the signal (if periodic)
- Freeze the screen with a button labelled "HOLD"
- Enable and control vertical cursors to measure the time difference (Δ𝑡) between cursors
- Show the single-sided Fast Fourier Transform (FFT) of the input signal
- Apply a Low pass filter to the input signal with the following features
- Users can choose a cut-off frequency between 1-20kHz
- control the order of the filter
- Apply a High pass filter to the input signal
- Users can choose a cut-off frequency between 1-20kHz
- control the order of the filter
- Apply a moving average filter to the signal
- control the averaging window size
- overlay the average on raw input
- Save the scope screen as PNG
- Implemented band-pass and band-stop filters

The first block is "Input method":

- The user is allowed to choose whatever input method is needed from the drop-down select box
- Upon the user choose the block, either initializes the microphone input or opens the WAV/CSV File then passes the inputted data with the sampling rate to the subsequent block "reading block"
The second block is "Read method":
In this block, the program does one of three options:
- In the microphone case, it initializes a 1D array and populates it with the signal values. Then, it passes two arrays, the signal and the error constant arrays.
- In the CSV case, the input from the reader is scaler so, it's added into a DBL subVI to create a 2D numeric array of the signal value and its time stamp. Then we decouple the 2D numeric array into two 1D arrays that create eventually the waveform needed at the end.
- In the WAV case, it reads all the inputted data in chunks. Then it initializes a 1D array and populates it with the signal values. the block passes two arrays, the signal and the error constant arrays.
The third block is "Apply filter":
This part is responsible for the logic applied to choose the filters applied to the signal, here are the three options:
- no filters applied
- moving average filter with a variable moving window, that could be changed by the user
- lowpass, highpass, bandpass, or bandstop filters
here are some filters before and after the application.




The fourth block is "Update Displays":
This block is responsible for updating both time and frequency domain displays, calculating peak-to-peak voltage, RMS and frequency of the inputted signal if it was periodic and saving a PNG screenshot of either display. The block also has the functionality of freezing both displays when the HOLD button is pressed.
The fifth block is "Knob control":
This block is responsible for scaling the display automatically according to the inputted file while giving control to the user to change the scale and add offsets as required using the knobs.
it's also responsible for using the control of the two vertical cursors to to measure the time difference (Δ𝑡) between cursors