Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

Dessiner dans le spectre radio

L’ingénieur logiciel Gokberk Yaltirakli, actuellement basé au Royaume-Uni a eu une idée qui devrait plaire aux radios amateurs qui lisent cet article.

Si vous avez déjà utilisé un logiciel SDR (Software Defined Radio), vous êtes forcement tombé sur la vue spectrogramme qui ressemble à ceci :

Schéma du spectre radio montrant les différentes gammes de fréquences

Le spectrogramme affiche l’amplitude des fréquences au fil du temps, ce qui a donné l’idée à Gokberk de jouer avec plusieurs fréquences pour dessiner le spectrogramme à partir d’un simple émetteur radio (HackRF) et un peu de code Python.

Voici ce que ça donne dans le logiciel gqrx :

Voici son script pour ceux qui veulent se lancer :

#!/usr/bin/env python3
import struct
import os
from PIL import Image
import sys
import math

dsp = os.fdopen(1, "wb")


def write(i, q):
    i = int(i * 127)
    q = int(q * 127)
    data = struct.pack("bb", i, q)
    dsp.write(data)


RATE = 4_000_000  # 4M sample rate
TRANSMIT_TIME = 2  # 2 Seconds
FREQ_DEV = 15_000  # 15 KHz


im = Image.open(sys.argv[1])
im.convert("1")  # 1 means 1-bit image


t = 0

for y in range(im.height)[::-1]:
    target = t + TRANSMIT_TIME / im.height

    line = [im.getpixel((x, y)) for x in range(im.width)]
    while t < target:
        i = 0
        q = 0

        for x, pix in enumerate(line):
            if not pix:
                continue
            offs = x / im.width
            offs *= FREQ_DEV
            i += math.cos(2 * math.pi * offs * t) * 0.01
            q += math.sin(2 * math.pi * offs * t) * 0.01
        write(i, q)
        t += 1.0 / RATE

Bravo Gokberk !


Les articles du moment