SatDump ウェブ版:ブラウザ上でSDR衛星データ処理を実行
FMラジオのリアルタイム受信・復調
変調された放送のリアルタイムスペクトルを、WFMモードで復調し、WebAudioを使用して再生します。

SatDump Web Edition は、SatDump の実験的なブラウザ版です。デスクトップ環境で動作していた C/C++ ベースの SDR および衛星データ処理プログラムを、Emscripten を使用して WebAssembly にコンパイルし、コアな信号処理プロセスはブラウザ上で直接実行され、バックエンドサービスへの依存はありません。
このウェブサイトは、WebUSBを通じてRTL-SDRを直接制御し、プラグイン、バックグラウンドプロセス、またはローカルプロキシのインストールや設定が不要です。USB経由で受信したIQデータは、ブラウザに入ると、WebAssemblyによるマルチスレッドDSPパイプラインによってスペクトル表示、復調、録音、および衛星データの処理を行います。すべての演算は、お使いのコンピューター上で完結され、元のデータはサーバーにアップロードされません。
現在、RTL-SDR Blog V4 をテストしており、AM、NFM、WFM、USB、LSB、および CW のリアルタイムデコードに対応しています。このプロジェクトはまだ実験段階であり、さまざまな RTL-SDR、異なるブラウザ、および受信環境を試すことを歓迎します。
これはなぜ移植が必要なのか?
去年のうちに、SSDVのデコーダをウェブブラウザ上で動作するように変更し、しばらく調整を行ったところ、期待以上に良い結果が得られました。WebAssembly の性能は、これまでデスクトップアプリケーションでしか扱えなかった信号処理タスクも十分にこなせるようになり、WebGL、Web Worker、SharedArrayBuffer と組み合わせることで、完全なリアルタイム処理パイプラインを構築することも可能です。
SSDV デコーダーがブラウザ上で動作できるなら、次は SatDump もブラウザ内に導入できないでしょうか?
昨年から、「SSDV デジタルスロースキャンテレビ」のグループで、開発状況を時々共有していました。
SatDump 自体は非常に大規模なソフトウェアです:完全な DSP フレームワーク、グラフィカルインターフェース、FFT とフィルター、多数の衛星プロトコルおよび計測機器処理プラグイン、画像処理、投影、ファイルシステム、ネットワーク機能に加え、SDR およびオーディオデバイス向けのバックエンドも含まれています。ネイティブ版は、VOLK、FFTW、libpng、SQLite、curl、NNG、libtiff など、多くのライブラリに依存しています。
インターフェース部分はDear ImGuiを使用しているため、最初のステップはWebGL 2をベースとしたレンダリングバックエンドとの連携です。
インターフェースが表示された時点で、本当の難しさが始まります。C/C++ プロジェクト全体と、それに関連するすべての依存関係を WebAssembly に移行する方法は?
- VOLK は、CPU の命令セットとの連携を非常に重視しています。
- FFTW は、Wasm 環境においては別の実装を探す必要があります。
- ネイティブスレッドをWeb Workerにマッピングする必要があります。
- libusb は、ブラウザ上で直接使用することができません。
- librtlsdr の USB コントロールとバルク転送は、WebUSB を介して行われる。
- デスクトップのファイルシステムを仮想ファイルシステムに置き換える必要があります。
- ネイティブオーディオ出力は、WebAudioに変更する必要があります。
- ブラウザには、ネイティブなソケット、動的プラグイン、および一部のシステムAPIがそもそも存在しません。
当初、おおよその作業量を把握したところ、修正すべき依存ライブラリが多すぎて、到底対応できない状況だったため、延期することにしました。😆
乗り継ぎ
その後、Kimi社からK3モデルがリリースされ、私は早速このモデルを自分のワークフローに取り入れました。その結果、K3の「エージェント」としての能力は非常に優れており、Claude Opus 4.8やGPT 5.5といった他のモデルよりも使いやすく、コストパフォーマンスも非常に高いことがわかりました。ですから…、試してみる価値はあると思います。
そこで、このプロジェクトを改めて取り組むことになった。移植作業においては、Kimi K3 を使用して、多くの繰り返し作業である依存関係の調整やビルドの修正を行いました。主な担当は、タスクの分解、ブラウザ側のアーキテクチャの決定、コンパイル設定の調整、そして生成された変更の確認、テスト、修正などでした。
最初の段階で、SatDumpの完全なインターフェースがブラウザ上で初めて正常に起動しました。

その後、スタックオーバーフローやI/Oロックといった問題を修正しました。現在、主要機能はほぼ正常に動作しますが、これは実験的な移植であり、ブラウザ、オペレーティングシステム、GPUドライバ、USBコントローラーの影響により、性能と互換性に大きな差が生じる可能性があります。
いくつかのスクリーンショットと説明
サーバーは、ウェブページ、WebAssemblyプログラム、および静的リソースファイルの提供のみを担当し、すべての信号処理はローカルで行われます。
ブラウザの要件:WebGL2、WebAssembly、WebAssembly\_SIMD128、WebUSB、AudioContext。
最低バージョン: Chrome ≥ 91 または Edge ≥ 91。Firefox および Safari (macOS/iOS) は、WebUSB のサポートがないため、現時点では利用できません。ページが読み込まれる前に自己診断を行います。実際の使用には、最新版の64ビット版のChromeまたはEdgeを推奨します。
本文中のスクリーンショットは、Chrome 134.0.6998.166 および Edge 134.0.3124.51 から取得しています。
RTL-SDRとの接続
Windows のユーザーの場合、RTL-SDR を使用しており、WinUSB ドライバーをインストールしている場合は、「Recorders」ページを開くだけで、RTL-SDR Blog V4 に直接接続できます。追加の設定は不要です。

ImGui のインターフェースのレンダリング
ImGui のインターフェースとグラフィカルコンポーネントはすべて、WebGL 2 を使用してレンダリングされます。

画像処理とプロジェクション
SatDump の画像処理、表示、およびプロジェクション機能も、ブラウザ上で動作します。

ファイルシステムの仮想化
SatDump のネイティブ版は、ファイルシステムに強く依存しており、ウェブページがデスクトップアプリケーションのようにローカルディスクを自由に読み書きすることができません。Web 版では、Emscripten FS を使用して、プログラム内部で通常のファイルシステムと同様のアクセス方法を維持しつつ、IDBFS を用いて必要なデータをブラウザの IndexedDB に保存します。さらに、簡単なファイルマネージャーを追加することで、仮想ファイルシステムの閲覧、インポート、エクスポート、および管理が容易になります。

設定ページ
Satdump の元の設定項目に加え、ページのレンダリング時の DPI (dots per inch) の値を変更することも可能です。(変更後、ページをリロードする必要があります。)

ページに関する情報

ブラウザは、かつては主にインターフェースとコンテンツの表示プラットフォームでしたが、WebAssembly、WebGL、WebUSB、WebAudio、マルチスレッド技術などの発展により、現在では相当な規模のローカル計算タスクを処理できるようになっています。大規模なC/C++ベースのSDR(ソフトウェア定義無線)や衛星データ処理プログラムは、ローカルバックエンドに依存せずに、現代のブラウザ上で動作させることができます。次回の星空観察の際は、ブラウザが使えるデバイスを持参すれば十分です。😎
オンライン体験:https://satdump.quarix.me/