Premium apps Part of Ohmforge

Ohmforge Oscilloscope Capture Analyzer

Scope CSV or WAV in: Vpp, RMS, frequency, duty, rise time, FFT, THD and SNR out.

CSV from a scope (Rigol, Siglent, Keysight, Tektronix or any "time, channel…" table), a sigrok/PulseView or logic-analyzer CSV, or a WAV recording; up to 25 MB and 2 million rows. Files are processed in memory and not kept.

Used when no file is uploaded.

More options
Hz
V

Scales WAV samples to volts; empty = full-scale units (FS).

% of amplitude

Noise smaller than this band does not count as a crossing.

s

Start of the time gate, in the capture's time (can be negative for pre-trigger samples).

s

Try an example: Square wave 1 kHz, 25 % duty (Rigol-style CSV) · Sound-card capture: 997 Hz sine, 2 channels (WAV) · Sine 1 kHz with 1.1 % THD (Keysight-style CSV), flat-top window

More about this tool

How it works

Analyses a captured waveform from an oscilloscope CSV export (Rigol, Siglent, Keysight, Tektronix layouts or any time/channel table), a logic analyzer CSV or a WAV recording from a sound-card scope. For every channel it measures Vpp, maximum, minimum, mean, true RMS (AC and DC), frequency and period with hysteresis, duty cycle, pulse widths, 10–90 % rise and fall time and overshoot; for one channel it computes an FFT spectrum with a selectable window, the harmonics, THD, THD+N, SNR, SINAD and ENOB. Charts of the channels and the spectrum are included.

  • Import: the CSV layout is detected from its header (Rigol "X,CH1,Start,Increment" with sample index × increment, Keysight "x-axis" + units row, Siglent metadata block, Tektronix 6-column layout, sigrok ";" comments with the sample rate, or a generic header row). Separators , ; and tab, decimal commas and unit prefixes in headers (ms, µs, mV) are handled. Columns holding only 0 and 1 become logic channels. WAV files keep up to 2 channels.
  • State levels follow IEEE 181: top and base are the modes of a 256-bin histogram of the upper and lower half when they form a plateau, otherwise the maximum and minimum (sine, triangle). Amplitude = top − base; the 10 %, 50 % and 90 % reference levels are taken from it.
  • Frequency and period come from 50 % crossings with hysteresis (a crossing counts only after the signal has passed mid ± hysteresis/2), interpolated between samples and averaged over all whole periods; duty = positive width / (positive + negative width). Rise and fall times are the 10–90 % durations averaged over all complete edges. Overshoot = (max − top)/amplitude, preshoot = (base − min)/amplitude.
  • Mean and RMS are time-weighted (trapezoids) over the record and over the whole periods; RMS AC = √(RMS² − mean²).
  • Spectrum: Welch average of 50 %-overlapping frames, windowed and transformed with the shared radix-2 FFT of the Soundscape audio engine. A tone's power is the sum over its main lobe divided by the window energy, so it does not depend on the window or on non-coherent sampling. THD = √ΣP(harmonics 2…N)/√P(fundamental); SNR excludes DC, fundamental and harmonics; SINAD includes harmonics; ENOB = (SINAD − 1.76 dB)/6.02 dB (IEEE 1241).

The result can only be as good as the capture: bandwidth, sample rate, vertical resolution and probe compensation of the instrument limit rise times, harmonics and noise. A sound card has an unknown gain, usually removes DC and filters above about 20 kHz. Binary formats (.bin, .wfm, .isf, .sr) are not read: export CSV first.

Sources

Part of Ohmforge

  • Ohmforge Virtual electronics workbench

    Draw a circuit, switch it on, and measure it with real-feeling bench instruments.

    Open Ohmforge

Related tools

How to use the Ohmforge Oscilloscope Capture Analyzer

Turn a scope CSV or a sound-card WAV into Vpp, RMS, frequency, duty cycle, rise time, an FFT with THD and SNR, and a plot.

What it is for

Most oscilloscopes can save a waveform as CSV, but the file is just thousands of numbers. This tool reads that export and gives you the measurements you would read off the instrument, and a few it may not have: true RMS over whole periods, period jitter, 10–90 % rise and fall time averaged over every edge, and a spectrum with THD, SNR, SINAD and ENOB.

It understands the CSV layouts of Rigol, Siglent, Keysight and Tektronix scopes, plain "time, channel" tables (also with semicolons and decimal commas), logic-analyzer CSV and WAV files. With a WAV file a sound card works as a two-channel scope. It does not read binary formats such as .wfm or .bin, and it cannot add bandwidth your scope did not capture.

Worked example

The first example is a Rigol-style export of a 1 kHz square wave between 0 and 3.3 V with 25 % duty, sampled at 125 kSa/s. The tool reports 1 kHz, 3.366 V peak-to-peak and 1.605 V RMS, a duty cycle of 25 % (250 µs high, 750 µs low) and a 10–90 % rise time of 32 µs, averaged over 20 edges. Top and base come out as 3.3 V and almost exactly 0 V, so the small noise only adds 0.914 % overshoot.

The same run also computes a THD of 84.6 % and warns that the signal is far from a sine. That is expected: THD describes how much a waveform differs from a sine, so for a square wave it measures its shape, not a fault.

The third example is a Keysight-style CSV of a 1 kHz sine with 1 % second and 0.5 % third harmonic, analysed with the flat-top window. The tool finds a THD of 1.125 % (calculated value: 1.118 %), the second harmonic at −39.94 dBc and an SNR of 62.2 dB.

How to read the result

The measurement table has one column per channel. Top and Base are the two flat levels of a pulse. When a signal has no flat levels, such as a sine, the maximum and minimum are used instead. Frequency, duty cycle and pulse widths come from crossings of the 50 % level. Cycle RMS is taken over whole periods only, so it does not depend on where the capture happens to start.

The spectrum plot marks the fundamental (f1) and its harmonics. Levels are in dBV, which means dB relative to 1 V RMS. The distortion table gives THD, THD+N, SNR, SINAD and ENOB. If THD is missing, the record has too few periods for the FFT size and window you chose, and the warnings say so.

Tips and common mistakes

  • Capture at least 10 periods. Short records give a coarse spectrum and leave THD empty.
  • Use Blackman–Harris for distortion and flat top for accurate amplitudes. Rectangular only works when a whole number of periods fits the FFT.
  • If noise causes extra crossings, raise the hysteresis. If the frequency reads too high, noise is the usual cause.
  • Use Analyse from/to to measure one burst or to skip the time while a circuit starts up.
  • For a WAV file, enter the volts at full scale if you know it. Sound cards usually block DC and roll off above about 20 kHz.
  • A rise time close to your scope's own rise time (about 0.35 divided by its bandwidth) shows the scope's limit, not your circuit's.

FAQ

My file has no time column. What now?

Enter the sample rate. The tool then builds the time axis from it. Rigol files with a Start and Increment column and sigrok files with a "Samplerate" comment need nothing extra.

Why does RMS differ from my multimeter?

The tool measures true RMS including DC, and RMS AC with the DC part removed. Many cheap meters show only the AC part and assume a sine.

How accurate is THD?

With the Blackman–Harris or flat-top window and enough periods, the THD of a test sine comes out within a few thousandths of a percent. Noise that falls on a harmonic's frequency counts as distortion, so very small THD values read slightly high.

Can I compare the capture with a simulation?

Yes. In the Ohmforge workspace, open Instruments → Capture analyzer…, then the "Compare with simulation" tab. It overlays the capture with the transient result for a net you choose.

Guide last updated:

For scripts and AI agents

  • JSON API: POST https://ohmforgecaptureanalyzer.usefulweb.app/api/v1/calculate (same calculation as this page)
  • Interface description: OpenAPI 3.1 · AI guide: llms.txt
  • MCP server (Streamable HTTP): https://ohmforgecaptureanalyzer.usefulweb.app/mcp · tool name ohmforge_capture_analyzer
Example request
curl -s -X POST https://ohmforgecaptureanalyzer.usefulweb.app/api/v1/calculate \
  -H 'content-type: application/json' \
  -d '{…see OpenAPI examples…}'
Feedback · ideas & bug reports welcome