{"id":13775176,"url":"https://github.com/sam210723/wavebin","last_synced_at":"2025-08-21T02:30:57.062Z","repository":{"id":50663784,"uuid":"222043123","full_name":"sam210723/wavebin","owner":"sam210723","description":"Capture and inspect multi-channel oscilloscope waveforms","archived":false,"fork":false,"pushed_at":"2024-05-05T11:40:48.000Z","size":74110,"stargazers_count":77,"open_issues_count":4,"forks_count":11,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-12-07T01:42:02.773Z","etag":null,"topics":["agilent","keysight","numpy","oscilloscope","pulseview","pyqt6","pyqtgraph","pyvisa","qt6","rigol","siglent","usb-tmc","waveform"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sam210723.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-16T03:47:37.000Z","updated_at":"2024-11-24T04:34:00.000Z","dependencies_parsed_at":"2024-08-03T17:09:52.018Z","dependency_job_id":"b1c856c0-3cc6-4731-8091-5954347b94a1","html_url":"https://github.com/sam210723/wavebin","commit_stats":{"total_commits":267,"total_committers":2,"mean_commits":133.5,"dds":"0.0037453183520599342","last_synced_commit":"5f06745f3b339c1368fba335f81840b1c4988095"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sam210723%2Fwavebin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sam210723%2Fwavebin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sam210723%2Fwavebin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sam210723%2Fwavebin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sam210723","download_url":"https://codeload.github.com/sam210723/wavebin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230479864,"owners_count":18232630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agilent","keysight","numpy","oscilloscope","pulseview","pyqt6","pyqtgraph","pyvisa","qt6","rigol","siglent","usb-tmc","waveform"],"created_at":"2024-08-03T17:01:34.885Z","updated_at":"2024-12-19T18:14:14.677Z","avatar_url":"https://github.com/sam210723.png","language":"Python","funding_links":[],"categories":["Waveform Viewers"],"sub_categories":[],"readme":"# \u003cimg src=\"https://raw.githubusercontent.com/sam210723/wavebin/master/icon.ico\" width=24 /\u003e Oscilloscope Waveform Capture Viewer\n\n[![GitHub release](https://img.shields.io/github/release/sam210723/wavebin.svg)](https://pypi.org/project/wavebin/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/wavebin)](https://pypi.org/project/wavebin/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/wavebin)](https://pypi.org/project/wavebin/)\n[![GitHub license](https://img.shields.io/github/license/sam210723/wavebin.svg)](https://github.com/sam210723/wavebin/master/LICENSE)\n\n**wavebin** reads binary capture files generated by Agilent, Keysight and Rigol oscilloscopes and renders the waveforms in an interactive plot. Waveforms can be inspected, [filtered](#filtering), [clipped](#clipping), [subsampled](#subsampling) and exported to [sigrok PulseView](#export-to-pulseview) or [WAV files](#export-to-wav).\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/wavebin.png)\n\n**wavebin** has been tested with capture files from a [**Keysight DSO-X 1102G**](https://www.keysight.com/en/pdx-2766207-pn-DSOX1102G/oscilloscope-70-100-mhz-2-analog-channels), [**Keysight MSO-X 4154A**](https://www.keysight.com/en/pdx-x201943-pn-MSOX4154A/mixed-signal-oscilloscope-15-ghz-4-analog-plus-16-digital-channels), [**Rigol MSO5074**](https://www.rigolna.com/products/digital-oscilloscopes/MSO5000/), and [**Rigol DHO804**](https://www.rigolna.com/products/rigol-digital-oscilloscopes/dho800/). If you have access to waveform files from other Agilent, Keysight or Rigol oscilloscopes, please submit them for testing through the [Sample Waveforms issue](https://github.com/sam210723/wavebin/issues/1).\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/console.png)\n\n\n## Getting Started\n**wavebin** is available via the [Python Package Index (PyPI)](https://pypi.org/project/wavebin/) and is installed using [pip](https://pip.pypa.io/en/stable/).\n\n```\n\u003e pip3 install wavebin\n```\n\nKeysight oscilloscopes save capture files to external USB Mass Storage devices for easy transfer to a PC. These files use the `.bin` extension.\nTo open a capture file in **wavebin**, start the application by running:\n\n```\n\u003e python3 -m wavebin\n```\n\nNext, click *File* \u0026#8594; *Open* and navigate to the `.bin` file.\n\n\nAlternatively a capture file path can be specified when running **wavebin** using the `-i` argument.\n\n```\n\u003e python3 -m wavebin -i [PATH TO BIN FILE]\n```\n\nFor more information about the **wavebin** command-line arguments run:\n\n```\n\u003e python3 -m wavebin -h\n                              __    _\n   _      ______ __   _____  / /_  (_)___\n  | | /| / / __ `/ | / / _ \\/ __ \\/ / __ \\\n  | |/ |/ / /_/ /| |/ /  __/ /_/ / / / / /\n  |__/|__/\\__,_/ |___/\\___/_.___/_/_/ /_/  v2.3.1\n\n             vksdr.com/wavebin\n\n\nusage: wavebin [-h] [-i FILE] [-v] [--no-opengl] [--no-limit]\n\nWaveform capture viewer for Keysight oscilloscopes.\n\noptional arguments:\n  -h, --help   show this help message and exit\n  -i FILE      path to Keysight waveform capturefile (.bin)\n  -v           enable verbose logging mode\n  --no-opengl  disable hardware accelerated rendering with OpenGL\n  --no-limit   disable subsampling limit (may cause slow frame rates with large captures)\n```\n\n## Features\n### Export to PulseView\n[PulseView](https://sigrok.org/wiki/PulseView) by [sigrok](https://sigrok.org) is a logic analysis tool typically used with hardware logic analyser devices. It is capable of decoding many serial and parallel protocols with its built-in decoders.\n\nBelow is a 115200bd UART waveform captured on a **DSO-X 1102G**, loaded into **wavebin** with [clipping](#clipping) enabled to create a clean digital waveform, exported to PulseView and decoded using the PulseView UART protocol decoder.\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/pulseview.png)\n\nTo export waveforms to PulseView, click *File* \u0026#8594; *Export to PulseView* then navigate to a save location. The produced [`.sr` file](https://sigrok.org/wiki/File_format:Sigrok/v2) can then be opened directly in PulseView.\n\n### Export to WAV\nWAV files can be opened in most media players (e.g. [VLC](https://www.videolan.org/vlc/)) and audio editors (e.g. [Audacity](https://www.audacityteam.org/)).\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/wav.png)\n\nTo export waveforms to WAV files, click *File* \u0026#8594; *Export to WAV file* then navigate to a save location. This will produce a mono `.wav` file for each waveform. The WAV files names follow the format `*_[n].wav`, where `n` is the waveform number starting at `0`.\n\n\n### Filtering\nA [Savitzky-Golay low pass filter](https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter) is included in **wavebin** for smoothing waveforms. This filter can be enabled using the *Filter Type* dropdown menu.\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/filtering.png)\n\n\n### Clipping\nThe clipping option converts analog waveforms to digital waveforms in a similar way to a Schmitt trigger.\n\nThe [filtering](#filtering) and clipping options can be used simultaneously. Clipping is always applied after filtering.\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/clipping.png)\n\n\n### Subsampling\nWhen a waveform capture is first loaded, all available sample points will be used to render the waveform.\nThe subsampling option renders the waveform using an equally-spaced subset of points.\n\nBelow is a 62.5 MHz wave being rendered with all `20,000` points in the capture file, and then with only `1250` points.\n\n![](https://raw.githubusercontent.com/sam210723/wavebin/master/screenshots/subsampling.png)\n\nBy default, waveforms with over `50,000` points will automatically be subsampled. This can be overridden using the `--no-limit` switch.\n\n## Resources\n  - [FaustinCarter/agilent_read_binary](https://github.com/FaustinCarter/agilent_read_binary)\n  - [yodalee/keysightBin](https://github.com/yodalee/keysightBin/)\n  - [Input output formats - sigrok](https://sigrok.org/wiki/Input_output_formats)\n  - [File format:sigrok/v2 - sigrok](https://sigrok.org/wiki/File_format:Sigrok/v2)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsam210723%2Fwavebin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsam210723%2Fwavebin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsam210723%2Fwavebin/lists"}