1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
import subprocess import numpy as np from scipy.io import wavfile from scipy.signal import resample def convert_wav_to_raw(wav_file, raw_file, target_sample_rate=2000000): """ Convierte un archivo WAV a RAW (16-bit PCM), ajustando la tasa de muestreo al mínimo requerido por HackRF. :param wav_file: Archivo WAV de entrada. :param raw_file: Archivo RAW de salida. :param target_sample_rate: Tasa de muestreo objetivo para HackRF (mínimo 2 MHz). :return: La tasa de muestreo convertida. """ # Leer el archivo WAV original_sample_rate, data = wavfile.read(wav_file) # Verificar si el archivo es estéreo o mono if len(data.shape) > 1: # Si es estéreo, convertirlo a mono data = np.mean(data, axis=1).astype(np.int16) # Ajustar la tasa de muestreo al objetivo (up-sampling) num_samples = int(len(data) * target_sample_rate / original_sample_rate) resampled_data = resample(data, num_samples).astype(np.int16) # Guardar el archivo en formato RAW resampled_data.tofile(raw_file) print(f"Archivo {raw_file} creado con éxito, tasa de muestreo ajustada a {target_sample_rate} Hz.") return target_sample_rate # Retornar la tasa de muestreo ajustada def transmit_audio_with_hackrf(raw_file, sample_rate, frequency=96000000, tx_gain=30): """ Transmite un archivo RAW de audio usando HackRF con los parámetros dados. :param raw_file: Ruta al archivo RAW que será transmitido. :param sample_rate: Tasa de muestreo ajustada para la transmisión. :param frequency: Frecuencia de transmisión en Hz (por defecto 205 MHz). :param tx_gain: Ganancia de transmisión (0-47 dB). """ try: command = [ 'hackrf_transfer', '-t', raw_file, # Archivo RAW a transmitir '-f', str(frequency), # Frecuencia en Hz '-s', str(sample_rate), # Tasa de muestreo ajustada '-x', str(tx_gain) # Ganancia de transmisión ] # Ejecutar el comando result = subprocess.run(command, check=True) print(f"Transmisión completada en {frequency / 1e6} MHz con tasa de muestreo de {sample_rate} Hz y ganancia {tx_gain} dB") except subprocess.CalledProcessError as e: print(f"Error durante la transmisión: {e}") exit(1) # Convertir el archivo WAV a RAW y ajustar la tasa de muestreo a 2 MHz sample_rate = convert_wav_to_raw('song.wav', 'song.raw', target_sample_rate=2000000) # Transmitir el archivo RAW usando la tasa de muestreo ajustada transmit_audio_with_hackrf('song.raw', sample_rate) |
Capturar una transmisión en la frecuencia 300 MHz con Flipper Zero
Grabar (imagen izquierda) y enviar la señal capturada (imagen derecha):