Space Radio
Last updated
Last updated
import numpy as np
from scipy.io.wavfile import write
from scipy.signal import decimate
# Paramètres
input_file = "fm.iq"
output_file = "output.wav"
input_sample_rate = 48000 # Hz
output_sample_rate = 16000 # Hz (pour lisibilité)
# Lire fichier IQ (on suppose Complex64 ici ; adapter si nécessaire)
iq_data = np.fromfile(input_file, dtype=np.complex64)
print(f"[+] Chargé {len(iq_data)} échantillons IQ")
# Étape 1 : Récupérer la phase
phase = np.angle(iq_data)
# Étape 2 : Différence de phase = fréquence instantanée
# On ajoute un 0 devant pour garder la taille
freq = np.diff(phase, prepend=phase[0])
# Étape 3 : Optionnel - corriger le saut de phase (unwrap)
freq = np.unwrap(freq)
# Étape 4 : Décimation pour baisser la fréquence d'échantillonnage
decim = int(input_sample_rate / output_sample_rate)
audio = decimate(freq, decim)
# Étape 5 : Normaliser entre -1 et 1
audio /= np.max(np.abs(audio))
audio = audio.astype(np.float32)
# Écriture du WAV
write(output_file, output_sample_rate, audio)
print(f"[+] Audio FM sauvegardé dans '{output_file}' ({output_sample_rate} Hz)")