# DRM Radio 📻 & Julia

**URL:** https://discourse.julialang.org/t/drm-radio-julia/136346
**Category:** Signal and Image Processing
**Tags:** dsp, libserialport
**Created:** [March 23, 2026, 4:25pm UTC](https://discourse.julialang.org/t/drm-radio-julia/136346 "2026-03-23T16:25:51Z")
**Posts on this page:** 11
**Page:** 1

<div class="post-metadata">

### Author: ![raman\_kumar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raman_kumar/32/26782_2.png) [@raman\_kumar](https://discourse.julialang.org/u/raman_kumar)
#### Post date: [March 23, 2026, 4:25pm UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/1 "2026-03-23T16:25:51Z")

</div>

I see that [Digital Radio Mondiale](https://en.wikipedia.org/wiki/Digital_Radio_Mondiale) is replacing analog radios in many countries. Can Julia be used in this [DE9180 Demonstration and Prototyping Kit for the DRM1000 Broadcast Receiver Module | CMLMicro](https://cmlmicro.com/products/drmbroadcast/product/de9180) ? CMLMicro is using Python but it would be better to use Julia.

Are there any projects being done in Julia for DRM? I think they can help in [E-education](https://www.drm.org/about-drm/drm-e-learning/) in remote areas of the world. How we can have better/cheaper DRM radios?

[![](https://global.discourse-cdn.com/julialang/original/3X/1/a/1aaae88a655a21d88beb530b306d2dc463ef05dc.jpeg "Understanding Digital Radio Mondiale") ](https://www.youtube.com/watch?v=7qUQF_sHaZY)

---

<div class="post-metadata">

### Author: ![raman\_kumar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raman_kumar/32/26782_2.png) [@raman\_kumar](https://discourse.julialang.org/u/raman_kumar)
#### Post date: [April 4, 2026, 12:38am UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/2 "2026-04-04T00:38:26Z")

</div>

Can any Julia library be used for Digital Signal Processing of [DRM Radio](https://en.wikipedia.org/wiki/Digital_Radio_Mondiale) developed using [DRM1000](https://cmlmicro.com/Content/Downloads/DRM1000_ds.pdf)? Software Defined Radio tuner used in it is [CMX918](https://cmlmicro.com/Content/Downloads/CMX918_DS_V2.0.pdf)( 💰costs \<[$15](https://www.rfmw.com/products/detail/drm1000-cml-microcircuits/824687/) ). If CMX918( costs 💰\<$1) signal output can be processed then it is easy to listen and receive DRM Radio 📻 services on laptop or smartphone. I am looking for a way to control DRM Radio using Julia.

---

<div class="post-metadata">

### Author: ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)
#### Post date: [April 4, 2026, 1:46am UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/3 "2026-04-04T01:46:17Z")

</div>

> [@raman\_kumar](#):
>
> CMLMicro is using Python but it would be better to use Julia.

What are you basing this conclusion on? If they’re using Python as a cheap interpreter to run code mostly compiled from other languages, then the current Julia implementation wouldn’t add anything notable except a bigger runtime. If they support MicroPython-related implementations for even lower overheads on limited devices, as implied by “connected PC or external µController,” then Julia or anything else carrying around an LLVM-based compiler are non-starters.

---

<div class="post-metadata">

### Author: ![mj2984](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mj2984/32/43833_2.png) [@mj2984](https://discourse.julialang.org/u/mj2984)
#### Post date: [April 4, 2026, 2:50am UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/4 "2026-04-04T02:50:24Z")

</div>

Looking at the documentation, you might be able to use LibSerialPort.jl to do what you like. I have found julia to be very useful if your use case requires custom things that standard python libraries do not provide. The code is very scalable while having good performance. In python, I found numba to be nice.

---

<div class="post-metadata">

### Author: ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)
#### Post date: [April 4, 2026, 8:21pm UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/6 "2026-04-04T20:21:02Z")

</div>

Definitely plausible on a typical laptop given the right adapters, especially if you need to write a number-crunching routine from scratch. Still not sure how much work it would take to get a Julia interface working, and it’ll unlikely be maintained by the company.

---

<div class="post-metadata">

### Author: ![mj2984](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mj2984/32/43833_2.png) [@mj2984](https://discourse.julialang.org/u/mj2984)
#### Post date: [April 5, 2026, 2:41am UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/7 "2026-04-05T02:41:51Z")

</div>

Please try using LibSerialPort.jl and see how far you can go. I have used it before and should be able to help you if you get stuck (but also try using LLM first, the julia library is a thin wrapper around the C library so if the LLM is comfortable with the C Api, you could get by quicker).

I’m curious if there’s a serious use case for wrapping libserialport into a native julia style package (similar to the one I currently did for libsoundio), it shouldn’t take too much effort with a reference implementation on an LLM with some manual guidance/nudging

---

<div class="post-metadata">

### Author: ![raman\_kumar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raman_kumar/32/26782_2.png) [@raman\_kumar](https://discourse.julialang.org/u/raman_kumar)
#### Post date: [May 10, 2026, 1:12am UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/9 "2026-05-10T01:12:44Z")

</div>

Hi, I have uploaded my work on [DRM1000](https://cmlmicro.com/Content/Downloads/DRM1000_ds.pdf#%5B%7B%22num%22%3A78%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C54%2C182%2C0%5D) radio here on [plutoland](https://pluto.land/n/hcmdtgyr). Please tell what i should improve? Why does **length(data)** and **field\_length** variable are not equal? I think it would be better to have an android app based on it.

> **[DRM - Digital Radio Mondiale | DRM1000 module with ~one meter whip antenna...](https://www.facebook.com/groups/422889212472590/permalink/1687032036058295/)**
>
> DRM1000 module with ~one meter whip antenna was able to detect 7425 KHz or ~40 meter radio signal of RNZ Pacific E1 transmitted from New Zealand. Transmitter is about 17500 Kms from my radio in...

---

<div class="post-metadata">

### Author: ![tp2750](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tp2750/32/207806_2.png) [@tp2750](https://discourse.julialang.org/u/tp2750)
#### Post date: [May 10, 2026, 5:23am UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/10 "2026-05-10T05:23:24Z")

</div>

Cool project! Thanks for sharing.

---

<div class="post-metadata">

### Author: ![mj2984](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mj2984/32/43833_2.png) [@mj2984](https://discourse.julialang.org/u/mj2984)
#### Post date: [May 10, 2026, 7:30pm UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/11 "2026-05-10T19:30:30Z")

</div>

From a readability standpoint, your code looks very nice (good variable names, simple logic).

From a performance standpoint, it would be useful to put commonly used things (begin end blocks, for loops) as individual functions and then run as functions.

regarding length of data, I’m unsure what the content is without really looking into it, but length(data) gives the total number of elements in the data Array (each element is of size of the data type, eg: if Data is a float 32 array of 10 elements then length(data) is 10, and each element contains a float 32 data ie 32 bits or 4 bytes). The reinterpret you so on the other line just takes elements 3:6 of a UInt8 array which is 4 bytes in total and sees it as if it were a 32 bit data.

---

<div class="post-metadata">

### Author: ![raman\_kumar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raman_kumar/32/26782_2.png) [@raman\_kumar](https://discourse.julialang.org/u/raman_kumar)
#### Post date: [May 20, 2026, 7:08pm UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/13 "2026-05-20T19:08:16Z")

</div>

Hi, My problem of losing bytes in data read() got solved after adding `set_flow_control()` in my code script. [lose data when read binary data ! · Issue #67 · JuliaIO/LibSerialPort.jl · GitHub](https://github.com/JuliaIO/LibSerialPort.jl/issues/67)

- Can you explain what does `set_flow_control()` do?

---

<div class="post-metadata">

### Author: ![raman\_kumar](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/raman_kumar/32/26782_2.png) [@raman\_kumar](https://discourse.julialang.org/u/raman_kumar)
#### Post date: [May 25, 2026, 3:59pm UTC](https://discourse.julialang.org/t/drm-radio-julia/136346/14 "2026-05-25T15:59:05Z")

</div>

How to parse this [XML journaline](https://www.etsi.org/deliver/etsi_ts/102900_102999/102979/01.01.01_60/ts_102979v010101p.pdf#%5B%7B%22num%22%3A23%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22FitH%22%7D%2C217%5D) data from BBC World Service on DRM radio? See this [Pluto notebook](https://pluto.land/n/hcmdtgyr).

````julia-auto
data = UInt8[0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xcb, 0xa9, 0x5c, 0xae, 0xbb, 0x50, 0xcf, 0x23, 0xad, 0xc2, 0xa5, 0x65, 0x0b, 0xe6, 0xe6, 0xf6, 0xdd, 0x6a, 0x8f, 0x45, 0x4f, 0x97, 0x06, 0xec, 0x45, 0x05, 0x9c, 0x7a, 0xc2, 0xac, 0x66, 0x2b, 0x4d, 0x39, 0xad, 0xa8, 0x6f, 0x6f, 0xee, 0x7a, 0xc7, 0x22, 0x36, 0x0d, 0x2f, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x34, 0x98, 0x7f, 0x3a, 0x0a, 0x1f, 0x7a, 0xa8, 0x89, 0x3e, 0x3e, 0x60, 0x0c, 0xa7, 0x32, 0x82, 0x91, 0x0a, 0x07, 0x8f, 0xac, 0x9d, 0x00, 0x2e, 0xd8, 0x56, 0x73, 0x6c, 0x6a, 0xc7, 0x20, 0x0e, 0x61, 0x9f, 0x96, 0x00, 0xe3, 0xe9, 0x28, 0x60, 0xc1, 0xa5, 0x5e, 0x86, 0x8d, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x69, 0xfb, 0x18, 0x9c, 0xc5, 0xfa, 0x9e, 0xee, 0x9b, 0x4d, 0x04, 0x85, 0xcd, 0xf7, 0xf6, 0xa3, 0xf2, 0x31, 0x61, 0xb5, 0x1f, 0x61, 0x02, 0xac, 0x27, 0xa7, 0x36, 0x5f, 0x90, 0xec, 0xeb, 0x14, 0xa2, 0xc7, 0x0f, 0x20, 0x7b, 0x4d, 0x26, 0xcc, 0xd1, 0x93, 0x44, 0x74, 0x52, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x99, 0x59, 0x9d, 0x58, 0x08, 0x7d, 0x5a, 0x1b, 0x10, 0x6e, 0x30, 0x87, 0x2c, 0x08, 0x8c, 0x63, 0xb1, 0x0d, 0x03, 0xad, 0x41, 0x90, 0x04, 0xb7, 0x86, 0xa6, 0x3d, 0xe1, 0x71, 0x63, 0x98, 0xec, 0xbd, 0xf8, 0x91, 0x36, 0x38, 0x9f, 0x84, 0xf3, 0x68, 0x0d, 0x58, 0xdf, 0xfc, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x2f, 0xe9, 0xb1, 0xbc, 0xae, 0x66, 0xdf, 0xc4, 0x6d, 0x47, 0xe0, 0xda, 0x75, 0x0b, 0xaf, 0x80, 0xc3, 0x3f, 0x60, 0xec, 0xac, 0xd0, 0x06, 0x0b, 0x57, 0x5c, 0xd0, 0x1e, 0xf2, 0x6e, 0x73, 0x59, 0xd3, 0x7f, 0x83, 0xc7, 0x93, 0x9d, 0x0c, 0xbe, 0x4d, 0x09, 0x06, 0x14, 0x0d, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x0f, 0x22, 0xe5, 0xa6, 0xc0, 0xa8, 0x21, 0xd2, 0xed, 0x5d, 0x37, 0xbe, 0xfb, 0x03, 0x70, 0xa7, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x90, 0x80, 0x40, 0x70, 0x00, 0x00, 0x33, 0x01, 0x1a, 0x03, 0xa0, 0x65, 0x6e, 0x67, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x98, 0x71, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6e, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x02, 0x07, 0xd0, 0x42, 0x42, 0x43, 0x20, 0x4e, 0x65, 0x77, 0x17, 0x6d, 0x4a, 0x03, 0x73, 0x4b, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x4e, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x40, 0x80, 0x00, 0x00, 0x33, 0x01, 0x1a, 0x03, 0xa0, 0x65, 0x6e, 0x67, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0xf5, 0x10, 0x04, 0x6e, 0x65, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x02, 0x07, 0xd0, 0x42, 0x42, 0x43, 0x20, 0x4e, 0x65, 0x77, 0xa5, 0x20, 0x1c, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x4a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x03, 0x73, 0x25, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0xdc, 0x86, 0x40, 0x90, 0x00, 0x00, 0x33, 0x01, 0x1a, 0x03, 0xa0, 0x65, 0x6e, 0x67, 0x4a, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6c, 0x69, 0x77, 0x00]```
````
