Building a Modern DSP System


As I learn about digital signal processing, I'm motivated to use the knowledge for some interesting applications. To do this, I often need to find software that does what I need. The problem, though, is that a lot of the software I've found either has a very limited feature set, is deprecated, or simply doesn't reliably build or run on my machine. That's not to mention that the vast majority of signal processing software is written in C and C++, which makes them harder to read and modify than I'd like.

GNURadio, for example, doesn't reliably function on my machine, and its core is written in C, so it becomes difficult for me to modify some of the code to run better for me. Direwolf and other smaller projects either have obscure documentation or don't have features I'd like for some projects.

With this being said, I'm making a new DSP system. This system will be written in JavaScript for the Node.js runtime. This way I can take advantage of Node's Stream APIs to build reasonably intuitive signal processing pipelines.

Why JavaScript?

I wanted to use a popular interpreted language like Python or JavaScript, but Node's Stream API provides a good model for these pipelines that Python doesn't have.

What about performance?

Effective signal processing often requires low latency systems, and for this reason compiled languages like C, C++, and Rust are favorable. Knowing this, I can plug in WASM code in performance bottlenecks to reduce latency in some processing blocks. This is another reason why I've chosen JavaScript as the language of choice: it has one of the most mature WASM-interfacing APIs.

Build Log

  1. First Blocks