Dessiner dans le spectre radio

Publié initialement à : Dessiner dans le spectre radio – Korben

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 :

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 !

2 « J'aime »